{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\control\\HtDialog.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\control\\HtDialog.vue","mtime":1667545181426},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmRvdC1hbGwuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5zdGlja3kuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gInZ1ZXgiOwppbXBvcnQgdXRpbHMgZnJvbSAiQC91dGlscy5qcyI7CmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICJlbGVtZW50LXVpIjsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICJodC1kaWFsb2ciLAogIHByb3BzOiBbInZhbGlkYXRlIiwgInZhbHVlIiwgIm5hbWUiLCAicGVybWlzc2lvbiIsICJhdHRlciIsICJzaW5nbGUiLCAic2VsZWN0b3Jjb25maWciLCAiY3VzdGRpYWxvZyIsICJ0b29sdGlwcGxhY2VtZW50IiwgInBsYWNlaG9sZGVyIiwgImlzRnJvbUxpc3QiXSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgbm9kZUtleTogIklEXyIsCiAgICAgIC8v5qCR5b2i5pWw5o2u54i2SWQKICAgICAgY3VzdG9tRGlhbG9nU2hvd0xpc3Q6IGZhbHNlLAogICAgICBjdXN0b21EaWFsb2dTaG93VHJlZTogZmFsc2UsCiAgICAgIHNlbGVjdE9yZ1Byb3BzOiB7CiAgICAgICAgbGFiZWw6ICJuYW1lIgogICAgICB9LAogICAgICBzdHlsZTogIiIsCiAgICAgIC8v5a+56K+d5qGG5a696auYCiAgICAgIHNlbGVjdE9yZ3M6IG51bGwsCiAgICAgIGlucHV0U3VmZml4SGVpZ2h0OiAzMCwKICAgICAgY29uZmlnOiBudWxsLAogICAgICB1cGRhdGluZzogZmFsc2UsCiAgICAgIGRpc3BsYXlmaWVsZDogW10sCiAgICAgIC8v5pi+56S65a2X5q61CiAgICAgIGN1c3RvbURpYWxvZzoge30sCiAgICAgIC8vCiAgICAgIGNvbW1lbnQ6ICIiLAogICAgICBxdWVyeVBhcmFtOiAiIiwKICAgICAgcHJvcHMxOiBbXSwKICAgICAgc2hvd0RhdGE6IFtdLAogICAgICBjaGVja0JveERhdGFBbGw6IFtdLAogICAgICAvL+mAieS4reWvueixoeeahOmbhuWQiAogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogImNoaWxkcmVuIiwKICAgICAgICBsYWJlbDogImxhYmVsIgogICAgICB9LAogICAgICBwcm9wc0RhdGE6IFtdLAogICAgICBzZWFyY2hGb3JtOiB7fSwKICAgICAgcXVlcnlzU2hvdzogZmFsc2UsCiAgICAgIC8v5piv5ZCm5pi+56S65pCc57Si5qGGCiAgICAgIHVuZGVmaW5lZGE6ICIiLAogICAgICBpc0N1cnJlbnRDaGFuZ2U6IGZhbHNlIC8v5piv5ZCm5LiN5omn6KGMIG9yZ1RhYmxlU2VsZWN0aW9u5pa55rOVCiAgICB9OwogIH0sCiAgd2F0Y2g6IHsKICAgIHByb3BzMTogZnVuY3Rpb24gcHJvcHMxKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAgIC8v5qCR5b2iCiAgICAgIGlmICh0aGlzLnNob3dEYXRhICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNob3dEYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICAgIHZhciBkYXRhID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNob3dEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBkYXRhLnB1c2godGhpcy5zaG93RGF0YVtpXSk7CiAgICAgICAgfQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRhdGEubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgIHRoaXNfLiRyZWZzLnRyZWUuc2V0Q2hlY2tlZChkYXRhW19pXSwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwgMjAwKTsKICAgICAgfQogICAgfQogIH0sCiAgY29tcHV0ZWQ6IG1hcFN0YXRlKHsKICAgIHBhZ2luYXRpb246IGZ1bmN0aW9uIHBhZ2luYXRpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy5wYWdpbmF0aW9uOwogICAgfSwKICAgIHRvdGFsOiBmdW5jdGlvbiB0b3RhbChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUuZGlhbG9nLnRvdGFsOwogICAgfSwKICAgIGRpYWxvZ0RhdGE6IGZ1bmN0aW9uIGRpYWxvZ0RhdGEoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy5yb3dzOwogICAgfSwKICAgIGlucHV0VmFsOiBmdW5jdGlvbiBpbnB1dFZhbCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUgPT0gJ3x8W10nKSB7CiAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwgPSBbXTsKICAgICAgICAvLyB0aGlzLnNob3dEYXRhID0gW107CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG5hbWVBcnkgPSB0aGlzLnZhbHVlLnNwbGl0KCIsIik7CiAgICAgICAgaWYgKCFuYW1lQXJ5W25hbWVBcnkubGVuZ3RoIC0gMV0pIHsKICAgICAgICAgIG5hbWVBcnkuc3BsaWNlKG5hbWVBcnkubGVuZ3RoIC0gMSwgMSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2YoInx8IikgPiAwKSB7CiAgICAgICAgICBuYW1lQXJ5ID0gdGhpcy52YWx1ZS5zcGxpdCgifHwiKVswXS5zcGxpdCgiLCIpOwogICAgICAgICAgLy8gdGhpcy5zaG93RGF0YT1KU09OLnBhcnNlKHRoaXMudmFsdWUuc3BsaXQoInx8IilbMV0pOwogICAgICAgIH0KICAgICAgICAvLyAgdGhpcy5zaG93RGF0YSA9dGhpcy5zZWxlY3RPcmdzOwogICAgICAgIHZhciBpZEFyeSA9IG51bGw7CiAgICAgICAgdmFyIGFjY291bnRBcnkgPSBudWxsOwogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICBuYW1lQXJ5LmZvckVhY2goZnVuY3Rpb24gKG0sIGkpIHsKICAgICAgICAgIHZhciBuID0gewogICAgICAgICAgICB2YWx1ZTogbQogICAgICAgICAgfTsKICAgICAgICAgIHJlc3VsdC5wdXNoKG4pOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0sCiAgICBpbnB1dFdyaXRlYWJsZTogZnVuY3Rpb24gaW5wdXRXcml0ZWFibGUoKSB7CiAgICAgIHJldHVybiB1dGlscy5nZXRXcml0ZWFibGUodGhpcy5wZXJtaXNzaW9uKTsKICAgIH0sCiAgICBpbnB1dFZhbGlkYXRlOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRlKCkgewogICAgICB2YXIgdmFsaWRhdGVPYmogPSB0aGlzLiRzdG9yZS5zdGF0ZS5pbmRleC52YWxpZGF0ZTsKICAgICAgcmV0dXJuIHV0aWxzLmFkZFJlcXVpcmVkT3JOb3QodGhpcy5wZXJtaXNzaW9uLCB0aGlzLnZhbGlkYXRlLCB2YWxpZGF0ZU9iaiwgdGhpcyk7CiAgICB9LAogICAgaW5wdXROYW1lOiBmdW5jdGlvbiBpbnB1dE5hbWUoKSB7CiAgICAgIHZhciBsYWJlbGRlc2MgPSAiIjsKICAgICAgaWYgKHRoaXMuJHNsb3RzICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzYyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW4gJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQpIHsKICAgICAgICBsYWJlbGRlc2MgPSB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW5bMF0udGV4dDsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpICsgIi0iICsgbGFiZWxkZXNjOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDmmK/lkKbmnInlm57loavorr7nva4KICAgIGJpbmRTZXQ6IGZ1bmN0aW9uIGJpbmRTZXQoKSB7CiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yY29uZmlnID8gdGhpcy5zZWxlY3RvcmNvbmZpZy5iaW5kIDogbnVsbDsKICAgIH0sCiAgICBnZXRQbGFjZWhvbGRlcjogZnVuY3Rpb24gZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY3VzdGRpYWxvZy5uYW1lOwogICAgfQogIH0pLAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLiR2YWxpZGF0b3IgPSB0aGlzLiRyb290LiR2YWxpZGF0b3I7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvL+Wbnui9puafpeivogogICAgc2VhcmNoRW50ZXJGdW46IGZ1bmN0aW9uIHNlYXJjaEVudGVyRnVuKGUpIHsKICAgICAgdmFyIGtleUNvZGUgPSB3aW5kb3cuZXZlbnQgPyBlLmtleUNvZGUgOiBlLndoaWNoOwogICAgICBpZiAoa2V5Q29kZSA9PSAxMykgewogICAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVTaXplQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTaXplQ2hhbmdlKHNpemUpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsKICAgICAgLy/mr4/pobXkuIvmi4nmmL7npLrmlbDmja4KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXRQYWdpbmF0aW9uU2l6ZSIsIHNpemUpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMi5zZWFyY2goKTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZShjdXJyZW50UGFnZSkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdmFyIHRoaXNfID0gdGhpczsKICAgICAgaWYgKHRoaXMuc2VsZWN0T3JncyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnNlbGVjdE9yZ3MuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgICB2YXIgcmVzID0gdGhpc18uaW5kZXhBcnJheSh0aGlzXy5jaGVja0JveERhdGFBbGwsIHJvdyk7CiAgICAgICAgICBpZiAocmVzID09IC0xKSB7CiAgICAgICAgICAgIHRoaXNfLmNoZWNrQm94RGF0YUFsbC5wdXNoKHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2UgPSB0cnVlOwogICAgICAvL+eCueWHu+esrOWHoOmhtQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldFBhZ2luYXRpb25QYWdlTnVtIiwgY3VycmVudFBhZ2UpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMy5zZWFyY2goKTsKICAgICAgfSk7CiAgICB9LAogICAgY2hlY2tMaXN0OiBmdW5jdGlvbiBjaGVja0xpc3QoKSB7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIC8v5YiX6KGoCiAgICAgICAgaWYgKHRoaXNfLmNoZWNrQm94RGF0YUFsbCAhPSB1bmRlZmluZWQgJiYgdGhpc18uY2hlY2tCb3hEYXRhQWxsLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXNfLmNoZWNrQm94RGF0YUFsbC5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uZGlhbG9nRGF0YSwgcm93KTsKICAgICAgICAgICAgdGhpc18udW5kZWZpbmVkYSA9IHJlczsKICAgICAgICAgICAgaWYgKHJlcyAhPSAtMSkgewogICAgICAgICAgICAgIHRoaXNfLmlzQ3VycmVudENoYW5nZSA9IHRydWU7CiAgICAgICAgICAgICAgdGhpc18udG9nZ2xlUm93U2VsZWN0aW9uKHJlcywgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwgMzAwKTsKICAgIH0sCiAgICB0b2dnbGVSb3dTZWxlY3Rpb246IGZ1bmN0aW9uIHRvZ2dsZVJvd1NlbGVjdGlvbihyZXMsIHZhbCkgewogICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbih0aGlzLmRpYWxvZ0RhdGFbcmVzXSwgdmFsKTsKICAgIH0sCiAgICBzaG93RGlhbG9nOiBmdW5jdGlvbiBzaG93RGlhbG9nKGl0ZW0pIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHZhciBhbGlhcyA9IHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLmFsaWFzOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZm9ybS9nZXRCeUFsaWFzIiwgYWxpYXMpLnRoZW4oZnVuY3Rpb24gKGN1c3RvbURpYWxvZykgewogICAgICAgIGlmICghY3VzdG9tRGlhbG9nIHx8ICFjdXN0b21EaWFsb2cuYWxpYXMpIHsKICAgICAgICAgIE1lc3NhZ2UuZXJyb3IoIuWvueivneahhuWIq+WQjeOAkCIgKyBhbGlhcyArICLjgJHkuI3lrZjlnKjvvIEiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5zdHlsZSA9PSAxKSB7CiAgICAgICAgICB2YXIgZGlzcGxheWxpc3QgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgICAgdGhpc18ubm9kZUtleSA9IGRpc3BsYXlsaXN0LmlkOwogICAgICAgIH0KICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2UoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsKICAgICAgICB2YXIgcGFyYW0gPSB7fTsKICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGVsZSkgewogICAgICAgICAgaWYgKGVsZS5kZWZhdWx0VHlwZSA9PSAiNCIpIHsKICAgICAgICAgICAgcGFyYW1bZWxlLmZpZWxkXSA9IGVsZS5jb21tZW50OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIF90aGlzNC5zdHlsZSA9ICJoZWlnaHQ6IiArIGN1c3RvbURpYWxvZy5oZWlnaHQgKyAicHgiOwogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShwYXJhbSkgPT0gInt9IikgewogICAgICAgICAgLy/msqHmnInliqjmgIHkvKDlhaXnmoTlrZfmrrUKICAgICAgICAgIGlmIChjdXN0b21EaWFsb2cuc3R5bGUgPT0gMCkgewogICAgICAgICAgICBfdGhpczQuY3VzdG9tRGlhbG9nU2hvdyh7CiAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLAogICAgICAgICAgICAgIGN1c3RvbURpYWxvZzogY3VzdG9tRGlhbG9nCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM0LmN1c3RvbURpYWxvZ1RyZWVTaG93KHsKICAgICAgICAgICAgICBhbGlhczogYWxpYXMsCiAgICAgICAgICAgICAgY3VzdG9tRGlhbG9nOiBjdXN0b21EaWFsb2cKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHt9CiAgICAgIH0pOwogICAgfSwKICAgIC8v5Yik5pat5pWw5o2u5piv5ZCm5YyF5ZCr5p+Q5Liq5a+56LGh77yM5bm26L+U5Zue5pWw5o2u5YyF5ZCr5a+56LGh55qE5LiL5qCHCiAgICBpbmRleEFycmF5OiBmdW5jdGlvbiBpbmRleEFycmF5KGFycmF5LCBpdGVtKSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT0gMCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGFycmF5W2ldKSA9PSBKU09OLnN0cmluZ2lmeShpdGVtKSkgewogICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0sCiAgICAvL+eCueWHu+WIl+ihqOafkOS4gOS4quWkjemAieahhuaXtuinpuWPkQogICAgb25UYWJsZVNlbGVjdDogZnVuY3Rpb24gb25UYWJsZVNlbGVjdChyb3dzLCByb3cpIHsKICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2UgPSBmYWxzZTsKICAgICAgLy/liKTmlq3ngrnlh7vliJfooajmlbDmja7ml7blpI3pgInmoYbmmK/lkKbli77pgIkgIHNlbGVjdGVk77yadHJ1ZeS4jeWLvumAie+8jGZhbHNl5Yu+6YCJCiAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T3JncyAmJiB0aGlzLnNlbGVjdE9yZ3MubGVuZ3RoID4gMCAmJiB0aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLCByb3cpICE9PSAtMTsKICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2UgPSB0cnVlOwogICAgICAgIHZhciByZXMgPSB0aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLCByb3cpOwogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5zcGxpY2UocmVzLCAxKTsKICAgICAgfQogICAgfSwKICAgIC8v54K55Ye75YiX6KGo5p+Q5LiA5p2h5pWw5o2u5pe26Kem5Y+RCiAgICBvcmdSb3dDbGljazogZnVuY3Rpb24gb3JnUm93Q2xpY2socm93LCBjb2x1bW4sIGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0pLnRyaWdnZXIoImNsaWNrIik7CiAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gW107CiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnB1c2gocm93KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gIT0gMSkgewogICAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gZmFsc2U7CiAgICAgICAgLy/liKTmlq3ngrnlh7vliJfooajmlbDmja7ml7blpI3pgInmoYbmmK/lkKbli77pgIkgIHNlbGVjdGVk77yadHJ1ZeS4jeWLvumAie+8jGZhbHNl5Yu+6YCJCiAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RPcmdzICYmIHRoaXMuc2VsZWN0T3Jncy5sZW5ndGggPiAwICYmIHRoaXMuaW5kZXhBcnJheSh0aGlzLnNlbGVjdE9yZ3MsIHJvdykgIT09IC0xOwogICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgdmFyIHJlcyA9IHRoaXMuaW5kZXhBcnJheSh0aGlzLnNlbGVjdE9yZ3MsIHJvdyk7CiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKHJlcywgMSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdyk7CiAgICAgIH0KICAgIH0sCiAgICAvL+WIl+ihqOWkjemAieahhuacieaUueWPmOaXtuinpuWPkQogICAgb3JnVGFibGVTZWxlY3Rpb246IGZ1bmN0aW9uIG9yZ1RhYmxlU2VsZWN0aW9uKHNlbGVjdGlvbikgewogICAgICAvL+WkmumAiQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtICE9IDEgJiYgIXRoaXMuaXNDdXJyZW50Q2hhbmdlKSB7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMCkgewogICAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT0gMSAmJiAoIXRoaXMuc2VsZWN0T3JncyB8fCB0aGlzLnNlbGVjdE9yZ3MubGVuZ3RoID09IDApKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IHNlbGVjdGlvbjsKICAgICAgICAgIH0gZWxzZSBpZiAoKCF0aGlzLnNlbGVjdE9yZ3MgfHwgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aCA9PSAwKSAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0T3JncykgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MucHVzaChzZWxlY3Rpb25baV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBfaTIgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgX2kyID49IDA7IF9pMi0tKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnB1c2goc2VsZWN0aW9uW19pMl0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgZGlhbG9nQ29uZmlybTogZnVuY3Rpb24gZGlhbG9nQ29uZmlybSgpIHsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93TGlzdCA9IGZhbHNlOwogICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsKICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOwogICAgICAvLyB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICB9LAogICAgLy/ph43nva4KICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgdGhpcy5xdWVyeVBhcmFtID0gIiI7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgLy/mn6Xor6IKICAgIHNlYXJjaDogZnVuY3Rpb24gc2VhcmNoKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdmFyIHF1ZXJ5cyA9IFtdOyAvL+afpeivouadoeS7tgogICAgICB2YXIgcXVlcnlGaWx0ZXIgPSB7fTsKICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucGFnaW5hdGlvbikgPT0gInt9IikgewogICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHsKICAgICAgICAgICJwYWdlIjogIjEiLAogICAgICAgICAgInBhZ2VTaXplIjogIjEwIiwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OwogICAgICB9CiAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uCiAgICAgIH07CiAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW0gIT0gIiIpIHsKICAgICAgICB2YXIgY29uZGl0aW9uZmllbGQgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsKICAgICAgICBjb25kaXRpb25maWVsZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgIHByb3BlcnR5OiBpdGVtLmZpZWxkLAogICAgICAgICAgICB2YWx1ZTogX3RoaXM1LnF1ZXJ5UGFyYW0sCiAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLAogICAgICAgICAgICByZWxhdGlvbjogIk9SIgogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8v5a+56K+d5qGG5oyJ6KGo5Y2V5a2X5q615p+l6K+i77yI5Y+C5pWw5Lyg5YWl55qE77yJCiAgICAgIHZhciBiaW5kTGlzdCA9IHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLmNvbmRpdGlvbnM7CiAgICAgIGlmIChiaW5kTGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIHBJbnN0ID0gdXRpbHMuZ2V0SW5zdGFuY2VCeVRhZyh0aGlzLCAnaHQtZGF0YXZpZXctcnVudGltZS10ZW1wbGF0ZScpOwogICAgICAgIGJpbmRMaXN0LmZvckVhY2goZnVuY3Rpb24gKGVsZSkgewogICAgICAgICAgLy/nu5HlrprooajljZXlrZfmrrUKICAgICAgICAgIGlmIChlbGUuZGVmYXVsdFR5cGUgPT0gJzMnICYmIGVsZS5iaW5kICYmIHBJbnN0LnNlYXJjaEZvcm0pIHsKICAgICAgICAgICAgdmFyIHZhbHVlID0gIiI7CiAgICAgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gcEluc3Quc2VhcmNoRm9ybSkgewogICAgICAgICAgICAgIGlmIChlbGUuYmluZC50b0xvd2VyQ2FzZSgpID09IGl0ZW0udG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgICAgICAgdmFsdWUgPSBwSW5zdC5zZWFyY2hGb3JtW2l0ZW1dOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogZWxlLmZpZWxkLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0xJS0UnLAogICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAocXVlcnlzLmxlbmd0aCA+IDApIHsKICAgICAgICBxdWVyeUZpbHRlciA9IHsKICAgICAgICAgIHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24sCiAgICAgICAgICBxdWVyeXM6IHF1ZXJ5cwogICAgICAgIH07CiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cucGFnZUJlYW4gPSBxdWVyeUZpbHRlcjsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldGxpc3RKc29uIiwgdGhpcy5jdXN0b21EaWFsb2cpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM1LmNoZWNrTGlzdCgpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnBhZ2VCZWFuID0gcGFnZUJlYW47CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRsaXN0SnNvbiIsIHRoaXMuY3VzdG9tRGlhbG9nKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzNS5jaGVja0xpc3QoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8v5qCR5b2i5p+l6K+iCiAgICBzZWFyY2hUcmVlOiBmdW5jdGlvbiBzZWFyY2hUcmVlKHJlcXVlc3RQYXJhbXMpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIC8vIGlmICh0aGlzLnByb3BzMS5sZW5ndGggPCAxKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0VHJlZURhdGEiLCByZXF1ZXN0UGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpZiAoX3RoaXM2LmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQgJiYgX3RoaXM2LmN1c3RvbURpYWxvZy5yZXN1bHRmaWVsZCkgewogICAgICAgICAgdmFyIGRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UoX3RoaXM2LmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgICAgX3RoaXM2LmRpc3BsYXlmaWVsZCA9IGRpc3BsYXlmaWVsZDsKICAgICAgICAgIF90aGlzNi5kZWZhdWx0UHJvcHMubGFiZWwgPSBkaXNwbGF5ZmllbGQuZGlzcGxheU5hbWU7CiAgICAgICAgICB2YXIgcmVzdWx0ZmllbGQgPSBKU09OLnBhcnNlKF90aGlzNi5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOwogICAgICAgICAgX3RoaXM2LnRyZWVEYXRhID0gcmVzOwogICAgICAgICAgX3RoaXM2LnByb3BzMSA9IF90aGlzNi50b1RyZWVEYXRhKHJlcywgZGlzcGxheWZpZWxkLmlkLCBkaXNwbGF5ZmllbGQucGlkLCBkaXNwbGF5ZmllbGQuZGlzcGxheU5hbWUsIGRpc3BsYXlmaWVsZC5wdmFsdWUgPyBkaXNwbGF5ZmllbGQucHZhbHVlIDogIjAiLCByZXN1bHRmaWVsZCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgLy8gfQogICAgfSwKICAgIC8vIOWQjOatpemAieaLqee7k+aenAogICAgc3luY0lucHV0VmFsdWU6IGZ1bmN0aW9uIHN5bmNJbnB1dFZhbHVlKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdmFyIHN1YkluZGV4ID0gbnVsbDsKICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgc3ViSW5kZXggPSB1dGlscy5nZXRTb21lQXR0cmlidXRlRnJvbVBhcmVudEVsZW1lbnQodGhpcy4kZWwsICJkYXRhLWluZGV4Iik7CiAgICAgIH0KICAgICAgdmFyIHJldHVyblN0ciA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOwogICAgICAvL+aLv+WIsOi/lOWbnueahOWtl+autQogICAgICB2YXIgZmllbGQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsKICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsKICAgICAgdmFyIHN0ciA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJldHVyblN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIGZpZWxkW2ldID0gdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIiA/IHJldHVyblN0cltpXS5maWVsZC50b0xvd2VyQ2FzZSgpIDogcmV0dXJuU3RyW2ldLmZpZWxkOwogICAgICAgIGNvbW1lbnRbaV0gPSB0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gcmV0dXJuU3RyW2ldLmNvbW1lbnQudG9Mb3dlckNhc2UoKSA6IHJldHVyblN0cltpXS5jb21tZW50OwogICAgICB9CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHZhciBzID0gdGhpcy5zZWxlY3RPcmdzOwogICAgICB0aGlzLnNob3dEYXRhID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuc2VsZWN0T3Jncyk7CiAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuc2VsZWN0T3Jncyk7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICBzID0gdGhpcy5zZWxlY3RPcmdzOwogICAgICB9CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBzWzBdW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgfQogICAgICAgIGlmICh0ZW1wICE9ICIiKSB7CiAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICB9CiAgICAgICAgc3RyLnB1c2goSlNPTi5wYXJzZSh0ZW1wKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21tZW50Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtqXSArICciOiInICsgc1tpXVtmaWVsZFtqXV0gKyAnIiwnOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsKICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgICB9CiAgICAgICAgICBzdHIucHVzaChKU09OLnBhcnNlKHRlbXApKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOwogICAgICB2YXIgcEluc3QgPSB1dGlscy5nZXRJbnN0YW5jZUJ5VGFnKHRoaXMsIFsnaHQtZGF0YXZpZXctcnVudGltZS10ZW1wbGF0ZScsICJodC1ydW50aW1lLXRlbXBsYXRlIl0pOwogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5tYXBwaW5nQ29uZi5mb3JFYWNoKGZ1bmN0aW9uIChjb24pIHsKICAgICAgICB2YXIgdmFsID0gIiI7CiAgICAgICAgdmFyIGZyb20gPSAiIjsKICAgICAgICBpZiAoX3RoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAicmVzdGZ1bCIpIHsKICAgICAgICAgIGZyb20gPSBjb24uZnJvbTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZnJvbSA9IGNvbi5mcm9tLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIHN0ci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICB2YWwgKz0gaXRlbVtmcm9tXSArICIsIjsKICAgICAgICB9KTsKICAgICAgICBpZiAodmFsICE9ICIiKSB7CiAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKTsKICAgICAgICB9CiAgICAgICAgX3RoaXM3LiRlbWl0KCJpbnB1dCIsIHZhbCk7CiAgICAgICAgaWYgKF90aGlzNy5hdHRlciA9PSAiZGF0YS4iICsgY29uWyJ0YXJnZXQiXVswXSkgewogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsICJkYXRhLiIgKyBjb25bInRhcmdldCJdWzBdLCB2YWwsIHN1YkluZGV4KTsKICAgICAgICB9IGVsc2UgaWYgKF90aGlzNy5hdHRlci5pbmRleE9mKCJzZWFyY2hGb3JtIikgIT0gLTEpIHsKICAgICAgICAgIGlmIChfdGhpczcuaXNGcm9tTGlzdCkgewogICAgICAgICAgICBwSW5zdC4kc2V0KHBJbnN0LnNlYXJjaEZvcm0sIGNvblsidGFyZ2V0Il1bMF0sIHZhbCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChfdGhpcywgInNlYXJjaEZvcm0uIiArIGNvblsidGFyZ2V0Il1bMF0sIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLCBzdWJJbmRleCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCAiZGF0YS4iICsgY29uWyJ0YXJnZXQiXVswXSwgdmFsLnN1YnN0cmluZygwLCB2YWwubGVuZ3RoIC0gMSksIHN1YkluZGV4KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8v5Y+W5raI5oyJ6ZKuCiAgICBkaWFsb2dDYW5jZWw6IGZ1bmN0aW9uIGRpYWxvZ0NhbmNlbCgpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHRoaXNfLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpc18uY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSBmYWxzZTsKICAgICAgICAvL+WIpOaWreaYr+WQpuaYr+eCueWHu+S6huehruiupOWGjeeCueWHu+WPlua2iOeahCAgaW5wdXRWYWzmsqHmnInlgLzliJnooajnpLrnm7TmjqXngrnlh7vnmoTlj5bmtogKICAgICAgICBpZiAoIXRoaXNfLmlucHV0VmFsKSB7CiAgICAgICAgICB0aGlzXy5zZWxlY3RPcmdzID0gW107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpc18uc2hvd0RhdGEpOwogICAgICAgICAgX3RoaXM4LmNoZWNrQm94RGF0YUFsbCA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzXy5zZWxlY3RPcmdzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIGRpYWxvZ1RyZWVDb25maXJtOiBmdW5jdGlvbiBkaWFsb2dUcmVlQ29uZmlybSgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOwogICAgICB2YXIgc3ViSW5kZXggPSBudWxsOwogICAgICBpZiAodGhpcy4kZWwpIHsKICAgICAgICBzdWJJbmRleCA9IHV0aWxzLmdldFNvbWVBdHRyaWJ1dGVGcm9tUGFyZW50RWxlbWVudCh0aGlzLiRlbCwgImRhdGEtaW5kZXgiKTsKICAgICAgfQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgdmFyIGZpZWxkID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBjb21tZW50ID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBzdHIgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXR1cm5TdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICBmaWVsZFtpXSA9IHJldHVyblN0cltpXS5maWVsZDsKICAgICAgICBjb21tZW50W2ldID0gcmV0dXJuU3RyW2ldLmNvbW1lbnQ7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHZhciBub2RlcyA9IHRoaXMucHJvcHNEYXRhWzBdOwogICAgICAgIHZhciB0ZW1wID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgfQogICAgICAgIGlmICh0ZW1wICE9ICIiKSB7CiAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICB9CiAgICAgICAgc3RyLnB1c2goSlNPTi5wYXJzZSh0ZW1wKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5wcm9wc0RhdGE7CiAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaykgewogICAgICAgICAgdmFyIHRlbXAgPSAiIjsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgbm9kZXNba11bZmllbGRbaV1dICsgJyIsJzsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0ZW1wICE9ICIiKSB7CiAgICAgICAgICAgIHRlbXAgPSAieyIgKyB0ZW1wLnN1YnN0cmluZygwLCB0ZW1wLmxlbmd0aCAtIDEpICsgIn0iOwogICAgICAgICAgfQogICAgICAgICAgc3RyLnB1c2goSlNPTi5wYXJzZSh0ZW1wKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLy8gY29uc3QgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UodGhpcyk7CiAgICAgIHZhciBwSW5zdCA9IHV0aWxzLmdldEluc3RhbmNlQnlUYWcodGhpcywgWydodC1kYXRhdmlldy1ydW50aW1lLXRlbXBsYXRlJywgImh0LXJ1bnRpbWUtdGVtcGxhdGUiXSk7CiAgICAgIHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLm1hcHBpbmdDb25mLmZvckVhY2goZnVuY3Rpb24gKGNvbikgewogICAgICAgIHZhciB2YWwgPSAiIjsKICAgICAgICBzdHIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgdmFsICs9IGl0ZW1bY29uLmZyb21dICsgIiwiOwogICAgICAgIH0pOwogICAgICAgIGlmIChfdGhpczkuYXR0ZXIgPT0gImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0pIHsKICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCAiZGF0YS4iICsgY29uWyJ0YXJnZXQiXVswXSwgdmFsLnN1YnN0cmluZygwLCB2YWwubGVuZ3RoIC0gMSksIHN1YkluZGV4KTsKICAgICAgICB9IGVsc2UgaWYgKF90aGlzOS5hdHRlciA9PSAic2VhcmNoRm9ybS4iICsgY29uWyJ0YXJnZXQiXVswXSkgewogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsICJzZWFyY2hGb3JtLiIgKyBjb25bInRhcmdldCJdWzBdLCB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKSwgc3ViSW5kZXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0sIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLCBzdWJJbmRleCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgLy90aGlzLiRlbWl0KCJpbnB1dCIsIEpTT04uc3RyaW5naWZ5KHN0cikpOwogICAgICB0aGlzLnNob3dEYXRhID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMucHJvcHNEYXRhKTsgLy/lm57mmL7nmoTlgLwKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOwogICAgfSwKICAgIGRpYWxvZ0NhbmNlbFRyZWU6IGZ1bmN0aW9uIGRpYWxvZ0NhbmNlbFRyZWUoKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOwogICAgfSwKICAgIGdldENoZWNrZWQ6IGZ1bmN0aW9uIGdldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSBbXTsKICAgICAgICB0aGlzLnByb3BzRGF0YS5wdXNoKGRhdGEpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJvcHNEYXRhID0gdGhpcy4kcmVmcy50cmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICB9CiAgICB9LAogICAgdHJlZUNsaWNrOiBmdW5jdGlvbiB0cmVlQ2xpY2soZGF0YSwgbiwgaSkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSBbXTsKICAgICAgICB0aGlzLnByb3BzRGF0YS5wdXNoKGRhdGEpOwogICAgICB9CiAgICB9LAogICAgY2xlYXJBbGxTZWxlY3RPcmdzOiBmdW5jdGlvbiBjbGVhckFsbFNlbGVjdE9yZ3MoKSB7CiAgICAgIHRoaXMuc2VsZWN0T3JncyA9IG51bGw7CiAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH0sCiAgICByZW1vdmVTZWxlY3RPcmc6IGZ1bmN0aW9uIHJlbW92ZVNlbGVjdE9yZyhpdGVtKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgIiIpOwogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5zcGxpY2UoaXRlbSwgMSk7CiAgICAgICAgdGhpcy5zaG93RGF0YS5zcGxpY2UoaXRlbSwgMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5pbnB1dFZhbC5zcGxpY2UoaXRlbSwgMSk7CiAgICAgICAgLy8gbGV0IHJlbW92ZUlkID0gdGhpcy5zaG93RGF0YVtpdGVtXTsKICAgICAgICAvL+agkeW9ogogICAgICAgIGlmICh0aGlzLnByb3BzRGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICB0aGlzLnByb3BzRGF0YS5zcGxpY2UoaXRlbSwgMSk7CiAgICAgICAgfQogICAgICAgIC8v5YiX6KGoCiAgICAgICAgaWYgKHRoaXMuc2VsZWN0T3JncyAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwuc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgICAvLyBpZihpdGVtLmlkID09cmVtb3ZlSWQgKXsKICAgICAgICAgICAgX3RoaXMxMC5pc0N1cnJlbnRDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICBfdGhpczEwLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3csIGZhbHNlKTsKICAgICAgICAgICAgLy8gfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOwogICAgICAgIHZhciB2YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuaW5wdXRWYWwuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICB2YWx1ZSArPSB2YWwudmFsdWUgKyAiLCI7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmxlbmd0aCAtIDEpOwogICAgICAgIH0KICAgICAgICAvKmlmKHZhbHVlIT0iIil7DQogICAgICAgICAgdmFsdWU9dmFsdWUrInx8IitKU09OLnN0cmluZ2lmeSh0aGlzLnNob3dEYXRhKTsNCiAgICAgICAgfSovCiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0sCiAgICBjYWxhY0lucHV0U3VmZml4SGVpZ2h0OiBmdW5jdGlvbiBjYWxhY0lucHV0U3VmZml4SGVpZ2h0KCkgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghX3RoaXMxMS4kcmVmcy50YWdTcGFucykgcmV0dXJuOwogICAgICAgIGlmIChfdGhpczExLiRyZWZzLnRhZ1NwYW5zLm9mZnNldEhlaWdodCkgewogICAgICAgICAgX3RoaXMxMS5pbnB1dFN1ZmZpeEhlaWdodCA9IF90aGlzMTEuJHJlZnMudGFnU3BhbnMub2Zmc2V0SGVpZ2h0ICsgNTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXMxMS5pbnB1dFN1ZmZpeEhlaWdodCA9IDMwOwogICAgICAgIH0KICAgICAgICAvLyDop6blj5Hpqozor4EKICAgICAgICBfdGhpczExLiR2YWxpZGF0b3IudmFsaWRhdGUoKTsKICAgICAgfSwgMCk7CiAgICB9LAogICAgY3VzdG9tRGlhbG9nU2hvdzogZnVuY3Rpb24gY3VzdG9tRGlhbG9nU2hvdyhwYWdlUGFyYW0pIHsKICAgICAgdmFyIF90aGlzMTIgPSB0aGlzOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gdHJ1ZTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2cgPSBwYWdlUGFyYW0uY3VzdG9tRGlhbG9nOwogICAgICB0aGlzLmN1c3RvbURpYWxvZy5xdWVyeVVybCA9IHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyAiJHtmb3JtfS9mb3JtL2N1c3RvbURpYWxvZy92MS9nZXRMaXN0RGF0YT9hbGlhcz0iICsgdGhpcy5jdXN0b21EaWFsb2cuYWxpYXMgKyAiJm1hcFBhcmFtPSIgKyAodGhpcy5jdXN0b21EaWFsb2cubWFwUGFyYW0gPyB0aGlzLmN1c3RvbURpYWxvZy5tYXBQYXJhbSA6ICIiKSA6IHRoaXMuY3VzdG9tRGlhbG9nLnVybDsKICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgIGlmICghdGhpcy5jb21tZW50ICYmIGNvbmRpdGlvbmZpZWxkLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25kaXRpb25maWVsZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5jb250cm9sbGVyVHlwZSA9PSAxICYmIGl0ZW0uZGVmYXVsdFR5cGUgPT0gMSAmJiBpdGVtLmRiVHlwZSA9PSAidmFyY2hhciIpIHsKICAgICAgICAgICAgX3RoaXMxMi5jb21tZW50ICs9IGl0ZW0uY29tbWVudCArICIsIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7CiAgICAgICAgICB0aGlzLnF1ZXJ5c1Nob3cgPSB0cnVlOwogICAgICAgICAgdGhpcy5jb21tZW50ID0gIumAmui/hyIgKyB0aGlzLmNvbW1lbnQuc3Vic3RyaW5nKDAsIHRoaXMuY29tbWVudC5sZW5ndGggLSAxKSArICLmn6Xor6IiOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmxlbmd0aCA8IDEpIHsKICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICAgIHRoaXMuZGlzcGxheWZpZWxkID0gSlNPTi5wYXJzZShwYWdlUGFyYW0uY3VzdG9tRGlhbG9nLmRpc3BsYXlmaWVsZCk7CiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAnZGF0YVNvdXJjZScpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaXNwbGF5ZmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmRpYWxvZ0RhdGEubGVuZ3RoID4gMSkgewogICAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgdGhpcy5zZWFyY2goKTsKICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UocGFnZVBhcmFtLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gJ2RhdGFTb3VyY2UnKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheWZpZWxkW2ldLmZpZWxkID0gdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjdXN0b21EaWFsb2dUcmVlU2hvdzogZnVuY3Rpb24gY3VzdG9tRGlhbG9nVHJlZVNob3cocGFnZVBhcmFtKSB7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nID0gcGFnZVBhcmFtLmN1c3RvbURpYWxvZzsKICAgICAgdmFyIGN1c3RvbURpYWxvZyA9IHRoaXMuY3VzdG9tRGlhbG9nOwogICAgICB2YXIgbWFwUGFyYW0gPSAiIjsKICAgICAgaWYgKHBhZ2VQYXJhbS5wYXJhbSAhPSB1bmRlZmluZWQpIHsKICAgICAgICBtYXBQYXJhbSA9IEpTT04uc3RyaW5naWZ5KHBhZ2VQYXJhbS5wYXJhbSk7CiAgICAgICAgbWFwUGFyYW0gPSBtYXBQYXJhbS5zdWJzdHJpbmcoMSwgbWFwUGFyYW0ubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgICAgdmFyIHJlcXVlc3RUeXBlID0gY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyAiR0VUIiA6IGN1c3RvbURpYWxvZy5yZXF1ZXN0VHlwZSA/IGN1c3RvbURpYWxvZy5yZXF1ZXN0VHlwZSA6ICJQT1NUIjsKICAgICAgdmFyIHVybCA9ICIke2Zvcm19L2Zvcm0vY3VzdG9tRGlhbG9nL3YxL2dldFRyZWVEYXRhP2FsaWFzPSIgKyBwYWdlUGFyYW0uYWxpYXMgKyAiJm1hcFBhcmFtPSIgKyBtYXBQYXJhbTsKICAgICAgdmFyIHBhcmFtc09iaiA9IHt9OwogICAgICBpZiAoY3VzdG9tRGlhbG9nLmRzVHlwZSAhPSAiZGF0YVNvdXJjZSIpIHsKICAgICAgICB1cmwgPSBjdXN0b21EaWFsb2cudXJsOwogICAgICAgIHZhciB0ZW1wbGF0ZVBhID0gY3VzdG9tRGlhbG9nLmRhdGFQYXJhbTsKICAgICAgICBpZiAoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKSB7CiAgICAgICAgICB2YXIgY29uZGl0aW9ucyA9IEpTT04ucGFyc2UoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY29uID0gY29uZGl0aW9uc1tpXTsKICAgICAgICAgICAgaWYgKHJlcXVlc3RUeXBlID09ICJQT1NUIikgewogICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxceyIgKyBjb24uZmllbGQgKyAiXFx9IiwgImciKSwgY29uLmRlZmF1bHRWYWx1ZSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBhcmFtc09ialtjb24uZmllbGRdID0gY29uLmRlZmF1bHRWYWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIGxqQ2hhciA9IHVybC5pbmRleE9mKCI/IikgPT0gLTEgPyAiPyIgOiAiJiI7CiAgICAgICAgICAgICAgdXJsID0gdXJsICsgbGpDaGFyICsgY29uLmZpZWxkICsgIj0iICsgY29uLmRlZmF1bHRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHRlbXBsYXRlUGEpIHsKICAgICAgICAgICAgcGFyYW1zT2JqID0gSlNPTi5wYXJzZSh0ZW1wbGF0ZVBhKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHJlcXVlc3RQYXJhbXMgPSB7fTsKICAgICAgcmVxdWVzdFBhcmFtcy5yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwogICAgICByZXF1ZXN0UGFyYW1zLnVybCA9IHVybDsKICAgICAgcmVxdWVzdFBhcmFtcy5wYXJhbXNPYmogPSBwYXJhbXNPYmo7CiAgICAgIHRoaXMuc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IHRydWU7CiAgICB9LAogICAgdG9UcmVlRGF0YTogZnVuY3Rpb24gdG9UcmVlRGF0YShkYXRhLCBpZCwgcGlkLCBuYW1lLCBwdmFsdWUsIHJldHVyblN0cikgewogICAgICAvLyDlu7rnq4vkuKrmoJHlvaLnu5PmnoQs6ZyA6KaB5a6a5LmJ5Liq5pyA6aG25bGC55qE54i26IqC54K577yMcHZhbHVl5pivMAogICAgICB2YXIgcGFyZW50cyA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgIHJldHVybiB2YWx1ZVtpZF0gPT0gdmFsdWVbcGlkXSB8fCB2YWx1ZVtwaWRdID09IG51bGwgfHwgdmFsdWVbcGlkXSA9PSBwdmFsdWU7CiAgICAgIH0pOwogICAgICBpZiAoIXBhcmVudHMpIHsKICAgICAgICBwYXJlbnRzID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWVbcGlkXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWVbcGlkXSAhPSBudWxsICYmIHZhbHVlW2lkXSAhPSB2YWx1ZVtwaWRdOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBwYXJlbnRzOwogICAgfSwKICAgIGxvYWRUcmVlOiBmdW5jdGlvbiBsb2FkVHJlZShub2RlLCByZXNvbHZlKSB7CiAgICAgIGlmIChub2RlICYmICFBcnJheS5pc0FycmF5KG5vZGUuZGF0YSkpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHJlc29sdmUodGhpcy50cmVlRGF0YS5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWVbX3RoaXMuZGlzcGxheWZpZWxkLnBpZF0gPT09IG5vZGUuZGF0YVtfdGhpcy5kaXNwbGF5ZmllbGQuaWRdOwogICAgICAgIH0pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlKFtdKTsKICAgICAgfQogICAgfQogIH0KfTs="},null]}