{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\obstacleClearingRescue\\RescueRegistration\\components\\EditAddPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\obstacleClearingRescue\\RescueRegistration\\components\\EditAddPage\\index.vue","mtime":1751276967997},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5wYWQtc3RhcnQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBQdWJTdWIgZnJvbSAncHVic3ViLWpzJzsKaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnOwppbXBvcnQgeyByZWZpbmVSZXF1ZXN0Qm9keSB9IGZyb20gJ0AvdXRpbHMvcmVxdWVzdFdyYXBwZXJzJzsKaW1wb3J0IHsgYXBwb2ludCwgdGFibGVBZGQsIHRhYmxlRGV0YWlsLCB0YWJsZUVkaXQgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvb2JzdGFjbGVDbGVhcmluZ1Jlc2N1ZS9yZXNjdWVSZWdpc3RyYXRpb24nOwppbXBvcnQgeyBnZXREaWN0aW9uYXJ5QnlDb2RlIH0gZnJvbSAnQC91dGlscy9kaWN0aW9uYXJ5JzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHJvYWRTZWN0aW9uSW5mb0ludGVyIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcm9hZFNlY3Rpb25JbmZvJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHRlYW1EYXRhIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcGF0cm9sQW5kUmVzY3VlVGVhbXNNZ210JzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIGFsb25nUm91dGVJbmZvSW50ZXIgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9hbG9uZ1JvdXRlSW5mbyc7CmltcG9ydCBVc2VyQ2hvaWNlRGlhbG9nIGZyb20gJy4vY29tcG9uZW50cy9BcHBvaW50RGlhbG9nL2NvbXBvbmVudHMvVXNlckNob2ljZURpYWxvZy9pbmRleC52dWUnOwppbXBvcnQgRXZlbnRDaG9pY2VEaWFsb2cgZnJvbSAnLi9jb21wb25lbnRzL0FwcG9pbnREaWFsb2cvY29tcG9uZW50cy9FdmVudENob2ljZURpYWxvZy9pbmRleC52dWUnOwppbXBvcnQgQ2FyQ2hvaWNlRGlhbG9nIGZyb20gJy4vY29tcG9uZW50cy9BcHBvaW50RGlhbG9nL2NvbXBvbmVudHMvQ2FyQ2hvaWNlRGlhbG9nL2luZGV4LnZ1ZSc7CmltcG9ydCB7IHBlcnNvbkFuZENhckluZm8gfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvY29tbWFuZERpc3BhdGNoL2V2ZW50UmVnaXN0cmF0aW9uJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdFZGl0QWRkUGFnZScsCiAgY29tcG9uZW50czogewogICAgQ2FyQ2hvaWNlRGlhbG9nOiBDYXJDaG9pY2VEaWFsb2csCiAgICBFdmVudENob2ljZURpYWxvZzogRXZlbnRDaG9pY2VEaWFsb2csCiAgICBVc2VyQ2hvaWNlRGlhbG9nOiBVc2VyQ2hvaWNlRGlhbG9nCiAgfSwKICBwcm9wczogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBkZWZhdWx0OiAnRWRpdEFkZFBhZ2UnLAogICAgICB0eXBlOiBTdHJpbmcKICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgLy8g6Ieq5a6a5LmJ6aqM6K+B6KeE5YiZ77ya5pyJ5YC85pe25b+F6aG75Zyo6IyD5Zu05YaFCiAgICB2YXIgdmFsaWRhdGVSYW5nZTEgPSBmdW5jdGlvbiB2YWxpZGF0ZVJhbmdlMSgpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChydWxlLCB2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgICBpZiAoX3RoaXMuYWRkRWRpdEZvcm0uc3RhcnRQZWcgPT09IHVuZGVmaW5lZCB8fCBfdGhpcy5hZGRFZGl0Rm9ybS5zdGFydFBlZ0FkZCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ+ivt+i+k+WFpeaVkeaPtOeCueS9jeahqeWPt+WFqOWAvCcpKTsKICAgICAgICB9IGVsc2UgaWYgKCFfdGhpcy5pc1ZhbHVlSW5SYW5nZShfdGhpcy5jb21iaW5lZFZhbHVlMSwgX3RoaXMuc3RhcnRWYWx1ZSwgX3RoaXMuZW5kVmFsdWUpKSB7CiAgICAgICAgICBfdGhpcy5hZGRFZGl0Rm9ybS5zdGFydFBlZyA9IHVuZGVmaW5lZDsKICAgICAgICAgIF90aGlzLmFkZEVkaXRGb3JtLnN0YXJ0UGVnQWRkID0gdW5kZWZpbmVkOwogICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCJcdTYyNDBcdTU4NkJcdTUxOTlcdTc2ODRcdTY4NjlcdTUzRjdcdTRFMERcdTU3MjgiLmNvbmNhdChfdGhpcy5zdGFydFZhbHVlLCAiLSIpLmNvbmNhdChfdGhpcy5lbmRWYWx1ZSwgIlx1ODMwM1x1NTZGNFx1NTE4NSIpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIHB1YlN1YjogbnVsbCwKICAgICAgZm9ybUxvYWRpbmc6IHRydWUsCiAgICAgIGFkZEVkaXRGb3JtOiB7CiAgICAgICAgcm9hZElkOiAnJywKICAgICAgICBvY2N1cHk6IFsnMCddLAogICAgICAgIHJlc2N1ZVR5cGU6IDEsCiAgICAgICAgY2FyQ2xhc3M6IDEsCiAgICAgICAgZGlyZWN0aW9uOiAnMScsCiAgICAgICAgY2FyVHlwZTogMSwKICAgICAgICByZXNjdWVUaW1lOiBuZXcgRGF0ZSgpLAogICAgICAgIGNhcjoge30sCiAgICAgICAgcGVyc29uOiAnJywKICAgICAgICBkaXNwYXRjaENhckNvZGU6ICcnLAogICAgICAgIGlzRGVsZWdhdGVzOiBmYWxzZSwKICAgICAgICBzdGFydFBlZzogdW5kZWZpbmVkLAogICAgICAgIHN0YXJ0UGVnQWRkOiB1bmRlZmluZWQKICAgICAgfSwKICAgICAgYWRkRWRpdFJ1bGVzOiB7CiAgICAgICAgcmVzY3VlVGVsOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5oql5qGI55S16K+d5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJywgJ2JsdXInXQogICAgICAgIH1dLAogICAgICAgIHJlc2N1ZVRpbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfmiqXmoYjml7bpl7TkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogWydjaGFuZ2UnLCAnYmx1ciddCiAgICAgICAgfV0sCiAgICAgICAgZXZlbnRUeXBlOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup5LqL5Lu257G75Z6LJywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJ10KICAgICAgICB9XSwKICAgICAgICByZXNjdWVUeXBlOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5pWR5o+057G75Z6L5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJ10KICAgICAgICB9XSwKICAgICAgICByb2FkSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfot6/mrrXkv6Hmga/kuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogWydjaGFuZ2UnXQogICAgICAgIH1dLAogICAgICAgIHRlYW1JZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+a0vumBo+mYn+S8jeS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiBbJ2NoYW5nZSddCiAgICAgICAgfV0sCiAgICAgICAgZXZlbnRUaW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5LqL5Lu25Y+R55Sf5pe26Ze05LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJ10KICAgICAgICB9XSwKICAgICAgICAvLyBjYXJVc2VyVGVsOiBbCiAgICAgICAgLy8gICB7CiAgICAgICAgLy8gICAgIHBhdHRlcm46IC9eMSgzWzAtOV18NFs1N118NVswLTM1LTldfDdbMDY3OF18OFswLTldKVxkezh9JC8sCiAgICAgICAgLy8gICAgIG1lc3NhZ2U6ICfovabkuLvnlLXor53ovpPlhaXmnInor68nLAogICAgICAgIC8vICAgICB0cmlnZ2VyOiAnYmx1cicKICAgICAgICAvLyAgIH0KICAgICAgICAvLyBdLAogICAgICAgIHBlcnNvbjogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+a0vumBo+S6uuWRmOS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiBbJ2NoYW5nZScsICdibHVyJ10KICAgICAgICB9XSwKICAgICAgICBkaXNwYXRjaENhckNvZGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfmtL7pgaPovabovobkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogWydjaGFuZ2UnLCAnYmx1ciddCiAgICAgICAgfV0sCiAgICAgICAgcmVzY3VlU3RhdHVzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup5pWR5o+054q25oCBJywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJ10KICAgICAgICB9XSwKICAgICAgICBzdGFydFBlZzogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZVJhbmdlMSgpLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgc2F2ZUxvYWRpbmc6IGZhbHNlLAogICAgICAvLyDkuIrkvKBsb2FkaW5nCiAgICAgIGlkOiAnJywKICAgICAgLy8gaWTmoIfor4bnrKYKICAgICAgcm9hZE9wdGlvbnM6IFtdLAogICAgICBhbG9uZ1JvdXRlSW5mb0RhdGE6IFtdLAogICAgICB0ZWFtT3B0aW9uczogW10sCiAgICAgIGNhckRhdGE6IFtdLAogICAgICBjYXJDaG9pY2VEaWFsb2c6IGZhbHNlLAogICAgICB1c2VyQ2hvaWNlRGlhbG9nOiBmYWxzZSwKICAgICAgcGVyc29uT3B0aW9uczogW10sCiAgICAgIGV2ZW50Q2hvaWNlRGlhbG9nOiBmYWxzZSwKICAgICAgdGVhbURhdGFMaXN0OiBbXSwKICAgICAgZGlzcGF0Y2hlczogW10sCiAgICAgIHJvYWRTaG93OiBmYWxzZSwKICAgICAgcGlsZU51bWJlclJhbmdlOiAnJywKICAgICAgc3RhcnRWYWx1ZTogMCwKICAgICAgZW5kVmFsdWU6IDAsCiAgICAgIGlzY2xlYXI6IGZhbHNlCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIGNvbWJpbmVkVmFsdWUxOiBmdW5jdGlvbiBjb21iaW5lZFZhbHVlMSgpIHsKICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoIiIuY29uY2F0KHRoaXMuYWRkRWRpdEZvcm0uc3RhcnRQZWcsICIuIikuY29uY2F0KFN0cmluZyh0aGlzLmFkZEVkaXRGb3JtLnN0YXJ0UGVnQWRkKS5wYWRTdGFydCgzLCAnMCcpKSkgfHwgMDsKICAgIH0KICB9LAogIHdhdGNoOiB7CiAgICBjb21wb25lbnROYW1lOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7CiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gdGhpcy4kb3B0aW9ucy5uYW1lKSB7CiAgICAgICAgICB0aGlzLm9wZW5QYWdlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuY2xvc2VQYWdlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge30sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgdGhpcy5wdWJTdWIgPSBQdWJTdWIuc3Vic2NyaWJlKCdFZGl0QWRkUGFnZScsIGZ1bmN0aW9uIChfLCBkYXRhKSB7CiAgICAgIGlmIChkYXRhLnJvYWRJZC5sZW5ndGggPT09IDEpIHsKICAgICAgICBfdGhpczIucm9hZFNob3cgPSB0cnVlOwogICAgICAgIF90aGlzMi5hZGRFZGl0Rm9ybS5yb2FkSWQgPSBkYXRhLnJvYWRJZFswXTsKICAgICAgfQogICAgICBfdGhpczIuaXNjbGVhciA9IGZhbHNlOwogICAgICBfdGhpczIuZ2V0Um9hZERhdGEoKTsKICAgICAgaWYgKGRhdGEuaWQpIHsKICAgICAgICBfdGhpczIuaWQgPSBkYXRhLmlkOwogICAgICAgIF90aGlzMi5nZXREZXRhaWwoZGF0YS5pZCk7CiAgICAgIH0KICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgZ2V0RGljdGlvbmFyeUJ5Q29kZTogZ2V0RGljdGlvbmFyeUJ5Q29kZSwKICAgIHBhcnNlU3RyaW5nOiBmdW5jdGlvbiBwYXJzZVN0cmluZygpIHsKICAgICAgaWYgKHRoaXMucGlsZU51bWJlclJhbmdlKSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5waWxlTnVtYmVyUmFuZ2UubWF0Y2goL15ba0tdKFxkKykoPzpcKyhcZHsxLDN9KSk/fltrS10oXGQrKSg/OlwrKFxkezEsM30pKT8kLyk7CiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gcGFyc2VGbG9hdCgiIi5jb25jYXQobWF0Y2hbMV0sICIuIikuY29uY2F0KFN0cmluZyhtYXRjaFsyXSkucGFkU3RhcnQoMywgJzAnKSkpIHx8IDA7CiAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHBhcnNlRmxvYXQoIiIuY29uY2F0KG1hdGNoWzNdLCAiLiIpLmNvbmNhdChTdHJpbmcobWF0Y2hbNF0pLnBhZFN0YXJ0KDMsICcwJykpKSB8fCAwOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IDA7CiAgICAgIH0KICAgIH0sCiAgICBpc1ZhbHVlSW5SYW5nZTogZnVuY3Rpb24gaXNWYWx1ZUluUmFuZ2UodmFsdWUsIGJvdW5kMSwgYm91bmQyKSB7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IGlzTmFOKHZhbHVlKSkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgX3JlZiA9IFtNYXRoLm1pbihib3VuZDEsIGJvdW5kMiksIE1hdGgubWF4KGJvdW5kMSwgYm91bmQyKV0sCiAgICAgICAgbWluID0gX3JlZlswXSwKICAgICAgICBtYXggPSBfcmVmWzFdOwogICAgICByZXR1cm4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heDsKICAgIH0sCiAgICAvLyDljaDliLDmg4XlhrXnpoHnlKgKICAgIGNoZWNrRGlzYWJsZWQ6IGZ1bmN0aW9uIGNoZWNrRGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLmFkZEVkaXRGb3JtLm9jY3VweS5pbmNsdWRlcygnMCcpOwogICAgfSwKICAgIGNoYWVja0NoYW5nZTogZnVuY3Rpb24gY2hhZWNrQ2hhbmdlKGUpIHsKICAgICAgaWYgKHRoaXMuYWRkRWRpdEZvcm0ub2NjdXB5LmluY2x1ZGVzKCcwJykpIHsKICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLm9jY3VweSA9IFsnMCddOwogICAgICB9CiAgICB9LAogICAgLy8g5beh5p+l5pWR5o+054K55Ye75LqL5Lu2CiAgICB0ZWFtSWRDaGFuZ2U6IGZ1bmN0aW9uIHRlYW1JZENoYW5nZSh2YWx1ZSkgewogICAgICB0aGlzLmdldFBlcnNvbkFuZENhckluZm8odmFsdWUpOwogICAgICB2YXIgdGVhbUluZm8gPSB0aGlzLnRlYW1PcHRpb25zLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdmFsdWU7CiAgICAgIH0pOwogICAgICB0aGlzLmFkZEVkaXRGb3JtLnRlYW1OYW1lID0gdGVhbUluZm8ubmFtZTsKICAgICAgdGhpcy4kc2V0KHRoaXMuYWRkRWRpdEZvcm0sICdwZXJzb24nLCAnJyk7CiAgICAgIHRoaXMuJHNldCh0aGlzLmFkZEVkaXRGb3JtLCAnZGlzcGF0Y2hDYXJDb2RlJywgJycpOwogICAgICB0aGlzLmFkZEVkaXRGb3JtLnVzZXIgPSBbXTsKICAgICAgdGhpcy5kaXNwYXRjaGVzID0gW107CiAgICB9LAogICAgLy8g5qC55o2u6Zif5LyNaWTmn6Xor6LkurrlkZjkv6Hmga/lj4rovabovobkv6Hmga8KICAgIGdldFBlcnNvbkFuZENhckluZm86IGZ1bmN0aW9uIGdldFBlcnNvbkFuZENhckluZm8oaWQpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHBlcnNvbkFuZENhckluZm8oaWQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBfcmVzJHZhbHVlID0gcmVzLnZhbHVlLAogICAgICAgICAgX3JlcyR2YWx1ZSRtZW1iZXJzID0gX3JlcyR2YWx1ZS5tZW1iZXJzLAogICAgICAgICAgbWVtYmVycyA9IF9yZXMkdmFsdWUkbWVtYmVycyA9PT0gdm9pZCAwID8gW10gOiBfcmVzJHZhbHVlJG1lbWJlcnMsCiAgICAgICAgICBfcmVzJHZhbHVlJGNhcnMgPSBfcmVzJHZhbHVlLmNhcnMsCiAgICAgICAgICBjYXJzID0gX3JlcyR2YWx1ZSRjYXJzID09PSB2b2lkIDAgPyBbXSA6IF9yZXMkdmFsdWUkY2FyczsKICAgICAgICBfdGhpczMucGVyc29uT3B0aW9ucyA9IG1lbWJlcnMubWFwKGZ1bmN0aW9uIChwZXJzb24pIHsKICAgICAgICAgIHBlcnNvbi5sYWJlbCA9IHBlcnNvbi50ZWwgKyAnICcgKyBwZXJzb24ubmFtZTsKICAgICAgICAgIHJldHVybiBwZXJzb247CiAgICAgICAgfSk7CiAgICAgICAgX3RoaXMzLmNhckRhdGEgPSBjYXJzOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVFdmVudFNlbGVjdDogZnVuY3Rpb24gaGFuZGxlRXZlbnRTZWxlY3QoX3JlZjIpIHsKICAgICAgdmFyIGlkID0gX3JlZjIuaWQsCiAgICAgICAgZXZlbnRUZWwgPSBfcmVmMi5ldmVudFRlbCwKICAgICAgICBldmVudE5vID0gX3JlZjIuZXZlbnRObzsKICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5ldmVudElkID0gaWQ7CiAgICAgIHRoaXMuYWRkRWRpdEZvcm0uZXZlbnRObyA9IGV2ZW50Tm87CiAgICB9LAogICAgaGFuZGxlQ2FyU2VsZWN0OiBmdW5jdGlvbiBoYW5kbGVDYXJTZWxlY3QoX3JlZjMpIHsKICAgICAgdmFyIGNhck51bWJlciA9IF9yZWYzLmNhck51bWJlciwKICAgICAgICBjYXJDbGFzcyA9IF9yZWYzLmNhckNsYXNzOwogICAgICB0aGlzLiRzZXQodGhpcy5hZGRFZGl0Rm9ybSwgJ2Rpc3BhdGNoQ2FyQ29kZScsIGNhck51bWJlcik7CiAgICAgIHRoaXMuJHNldCh0aGlzLmFkZEVkaXRGb3JtLCAnZGlzcGF0Y2hDYXJUeXBlJywgY2FyQ2xhc3MpOwogICAgICB0aGlzLmRpc3BhdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIGl0ZW0uZGlzcGF0Y2hDYXJDb2RlID0gY2FyTnVtYmVyOwogICAgICAgIGl0ZW0uZGlzcGF0Y2hDYXJUeXBlID0gY2FyQ2xhc3M7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZVVzZXJTZWxlY3Q6IGZ1bmN0aW9uIGhhbmRsZVVzZXJTZWxlY3QodXNlcikgewogICAgICB2YXIgX3RoaXMkYWRkRWRpdEZvcm0gPSB0aGlzLmFkZEVkaXRGb3JtLAogICAgICAgIF90aGlzJGFkZEVkaXRGb3JtJGRpcyA9IF90aGlzJGFkZEVkaXRGb3JtLmRpc3BhdGNoQ2FyQ29kZSwKICAgICAgICBkaXNwYXRjaENhckNvZGUgPSBfdGhpcyRhZGRFZGl0Rm9ybSRkaXMgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMkYWRkRWRpdEZvcm0kZGlzLAogICAgICAgIF90aGlzJGFkZEVkaXRGb3JtJGRpczIgPSBfdGhpcyRhZGRFZGl0Rm9ybS5kaXNwYXRjaENhclR5cGUsCiAgICAgICAgZGlzcGF0Y2hDYXJUeXBlID0gX3RoaXMkYWRkRWRpdEZvcm0kZGlzMiA9PT0gdm9pZCAwID8gJycgOiBfdGhpcyRhZGRFZGl0Rm9ybSRkaXMyOwogICAgICBpZiAodXNlci5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5hZGRFZGl0Rm9ybS51c2VyID0gdXNlcjsKICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnBlcnNvbiA9IHVzZXIubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lOwogICAgICAgIH0pLmpvaW4oJywnKTsKICAgICAgICB0aGlzLmRpc3BhdGNoZXMgPSB1c2VyLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZGlzcGF0Y2hDYXJDb2RlOiBkaXNwYXRjaENhckNvZGUsCiAgICAgICAgICAgIGRpc3BhdGNoQ2FyVHlwZTogZGlzcGF0Y2hDYXJUeXBlLAogICAgICAgICAgICBkaXNwYXRjaFVzZXJJZDogaXRlbS5pZCwKICAgICAgICAgICAgZGlzcGF0Y2hVc2VyTmFtZTogaXRlbS5uYW1lLAogICAgICAgICAgICBkaXNwYXRjaFVzZXJUZWw6IGl0ZW0udGVsCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIHRoaXMuYWRkRWRpdEZvcm0ucGVyc29uID0gdXNlci5uYW1lCiAgICAgIC8vIHRoaXMuZGlzcGF0Y2hlcyA9IFsKICAgICAgLy8gICB7CiAgICAgIC8vICAgICBkaXNwYXRjaENhckNvZGUsCiAgICAgIC8vICAgICBkaXNwYXRjaENhclR5cGUsCiAgICAgIC8vICAgICBkaXNwYXRjaFVzZXJJZDogdXNlci5pZCwKICAgICAgLy8gICAgIGRpc3BhdGNoVXNlck5hbWU6IHVzZXIubmFtZSwKICAgICAgLy8gICAgIGRpc3BhdGNoVXNlclRlbDogdXNlci50ZWwsCiAgICAgIC8vICAgfQogICAgICAvLyBdCiAgICB9LAogICAgc2l0ZUNoYW5nZTogZnVuY3Rpb24gc2l0ZUNoYW5nZShlLCB0eXBlKSB7CiAgICAgIHZhciBzaXRlSW5mbyA9IHRoaXMuYWxvbmdSb3V0ZUluZm9EYXRhLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gZTsKICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRWRpdEZvcm1bIiIuY29uY2F0KHR5cGUsICJOYW1lIildID0gc2l0ZUluZm8ubmFtZTsKICAgIH0sCiAgICBjbGVhckNhclR5cGU6IGZ1bmN0aW9uIGNsZWFyQ2FyVHlwZSgpIHsKICAgICAgdGhpcy4kc2V0KHRoaXMuYWRkRWRpdEZvcm0sICdjYXJUeXBlJywgJycpOwogICAgfSwKICAgIGdldENhckNsYXNzaWZ5OiBmdW5jdGlvbiBnZXRDYXJDbGFzc2lmeSh2YWx1ZSkgewogICAgICB2YXIgX2RpY3QkOwogICAgICB2YXIgZGljdF9hcnIgPSBnZXREaWN0aW9uYXJ5QnlDb2RlKCdnemNsJyk7CiAgICAgIHZhciBkaWN0ID0gZGljdF9hcnIuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdmFsdWU7CiAgICAgIH0pOwogICAgICByZXR1cm4gZGljdC5sZW5ndGggPyAoX2RpY3QkID0gZGljdFswXSkgPT09IG51bGwgfHwgX2RpY3QkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGljdCQubG93ZXJEaWNbJ2d6Y3gnXSA6IFtdOwogICAgfSwKICAgIGhhbmRsZUFwcG9pbnQ6IGZ1bmN0aW9uIGhhbmRsZUFwcG9pbnQoKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHZhbGlkLCBvYmplY3QpIHsKICAgICAgICAgIHZhciBkYXRhLCByb2FkSW5mbzsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIF90aGlzNC5zYXZlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KF90aGlzNC5hZGRFZGl0Rm9ybSkpOwogICAgICAgICAgICAgICAgICBkYXRhLm9jY3VweSA9IGRhdGEub2NjdXB5LmpvaW4oJywnKTsKICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhcnRQZWcgJiYgZGF0YS5zdGFydFBlZ0FkZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGEucGVnVmFsID0gJ2snICsgKGRhdGEuc3RhcnRQZWcgfHwgJycpICsgJysnICsgKGRhdGEuc3RhcnRQZWdBZGQgfHwgJycpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRhdGEucmVzY3VlVGltZSA9IG1vbWVudChkYXRhLnJlc2N1ZVRpbWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOwogICAgICAgICAgICAgICAgICByb2FkSW5mbyA9IF90aGlzNC5yb2FkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGRhdGEucm9hZElkOwogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgZGF0YS5yb2FkTmFtZSA9IHJvYWRJbmZvLm5hbWU7CiAgICAgICAgICAgICAgICAgIGRhdGEucm9hZENvZGUgPSByb2FkSW5mby5jb2RlOwogICAgICAgICAgICAgICAgICBkYXRhLmNhciA9IHsKICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaENhckNvZGU6IGRhdGEuZGlzcGF0Y2hDYXJDb2RlIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQ2FyVHlwZTogZGF0YS5kaXNwYXRjaENhclR5cGUKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgZGF0YS5kaXNwYXRjaGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfdGhpczQuZGlzcGF0Y2hlcykpOwogICAgICAgICAgICAgICAgICBfdGhpczQuJGNvbmZpcm0oJ+ehruiupOWnlOa0vuaVkeaPtOWNleWQl++8nycsICfmj5DnpLonLCB7CiAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7orqQnLAogICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgICB9KS50aGVuKC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgX3lpZWxkJGFwcG9pbnQsIHN0YXRlLCBtZXNzYWdlLCB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwb2ludChfb2JqZWN0U3ByZWFkKHt9LCBkYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICBfeWllbGQkYXBwb2ludCA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkYXBwb2ludC5zdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gX3lpZWxkJGFwcG9pbnQubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRhcHBvaW50LnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NTlENFx1NkQzRVx1NjIxMFx1NTI5RiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0LmNoYW5nZVBhZ2UoJ1RhYmxlUGFnZScsICdlZGl0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0LnNhdmVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmZpbmlzaCg4KTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIG51bGwsIFtbMCwsIDgsIDExXV0pOwogICAgICAgICAgICAgICAgICB9KSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeCwgX3gyKSB7CiAgICAgICAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpOwogICAgfSwKICAgIC8v6I635Y+W5omA5Zyo6Lev5q615YiX6KGo5pWw5o2uCiAgICBnZXRSb2FkRGF0YTogZnVuY3Rpb24gZ2V0Um9hZERhdGEoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHZhciBfeWllbGQkcm9hZFNlY3Rpb25JbmYsIF95aWVsZCRyb2FkU2VjdGlvbkluZjIsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gcm9hZFNlY3Rpb25JbmZvSW50ZXIoewogICAgICAgICAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IC0xCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkcm9hZFNlY3Rpb25JbmYgPSBfY29udGV4dDMuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkcm9hZFNlY3Rpb25JbmYyID0gX3lpZWxkJHJvYWRTZWN0aW9uSW5mLnJvd3M7CiAgICAgICAgICAgICAgcm93cyA9IF95aWVsZCRyb2FkU2VjdGlvbkluZjIgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHJvYWRTZWN0aW9uSW5mMjsKICAgICAgICAgICAgICBfdGhpczUucm9hZE9wdGlvbnMgPSByb3dzLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgaXRlbS5yb2FkTmFtZSA9IGl0ZW0ubmFtZSArICcgJyArIGl0ZW0uY29kZTsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmICghX3RoaXM1LmlkKSB7CiAgICAgICAgICAgICAgICBpZiAoX3RoaXM1LnJvYWRTaG93KSB7CiAgICAgICAgICAgICAgICAgIF90aGlzNS5yb2FkQ2hhbmdlKF90aGlzNS5hZGRFZGl0Rm9ybS5yb2FkSWQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgX3RoaXM1LiRzZXQoX3RoaXM1LmFkZEVkaXRGb3JtLCAncm9hZElkJywgX3RoaXM1LnJvYWRPcHRpb25zWzBdLmlkKTsKICAgICAgICAgICAgICAgICAgX3RoaXM1LnJvYWRDaGFuZ2UoX3RoaXM1LnJvYWRPcHRpb25zWzBdLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXM1LmFkZEVkaXRGb3JtLnJvYWRJZCA9IF90aGlzNS5yb2FkT3B0aW9uc1swXS5pZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMyk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIHJvYWRDaGFuZ2U6IGZ1bmN0aW9uIHJvYWRDaGFuZ2UodmFsdWUpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHZhciByb2FkSW5mbyA9IHRoaXMucm9hZE9wdGlvbnMuZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmlkID09PSB2YWx1ZTsKICAgICAgfSk7CiAgICAgIGlmIChyb2FkSW5mby5zdGFydFBlZ0sgJiYgcm9hZEluZm8uZW5kUGVnSykgewogICAgICAgIHRoaXMucGlsZU51bWJlclJhbmdlID0gcm9hZEluZm8uc3RhcnRQZWdLICsgJ34nICsgcm9hZEluZm8uZW5kUGVnSzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnBpbGVOdW1iZXJSYW5nZSA9ICcnOwogICAgICB9CiAgICAgIGlmICghdGhpcy5pc2NsZWFyKSB7CiAgICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5zdGFydFBlZyA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnN0YXJ0UGVnQWRkID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHRoaXMuYWRkRWRpdEZvcm0udGVhbUlkID0gJyc7CiAgICAgIHRoaXMucGFyc2VTdHJpbmcoKTsKICAgICAgdGhpcy5nZXRUZWFtRGF0YSh2YWx1ZSk7CiAgICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluayv+e6v+iuvuWkh+S/oeaBrwogICAgICB0aGlzLmdldEFsb25nUm91dGVJbmZvKHZhbHVlLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIHZhciBfdGhpczYkYWRkRWRpdEZvcm0gPSBfdGhpczYuYWRkRWRpdEZvcm0sCiAgICAgICAgICBzdGFydFBhdHJvbElkID0gX3RoaXM2JGFkZEVkaXRGb3JtLnN0YXJ0UGF0cm9sSWQsCiAgICAgICAgICBlbmRQYXRyb2xJZCA9IF90aGlzNiRhZGRFZGl0Rm9ybS5lbmRQYXRyb2xJZDsKCiAgICAgICAgLyoNCiAgICAgICAgICog5beh5qOA5byA5aeL77yM57uT5p2f56uZDQogICAgICAgICAqICovCiAgICAgICAgaWYgKHN0YXJ0UGF0cm9sSWQpIHsKICAgICAgICAgIGlmICghZGF0YS5zb21lKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgIHJldHVybiBpLmlkID09PSBzdGFydFBhdHJvbElkOwogICAgICAgICAgfSkpIHsKICAgICAgICAgICAgX3RoaXM2LmFkZEVkaXRGb3JtLnN0YXJ0UGF0cm9sSWQgPSAnJzsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoXykgewogICAgICAgICAgICAgIHJldHVybiBfdGhpczYuJG1lc3NhZ2Uud2FybmluZygn6K+36YeN5paw6YCJ5oup5byA5aeL56uZLi4nKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChlbmRQYXRyb2xJZCkgewogICAgICAgICAgaWYgKCFkYXRhLnNvbWUoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgcmV0dXJuIGkuaWQgPT09IGVuZFBhdHJvbElkOwogICAgICAgICAgfSkpIHsKICAgICAgICAgICAgX3RoaXM2LmFkZEVkaXRGb3JtLmVuZFBhdHJvbElkID0gJyc7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXM2LiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mHjeaWsOmAieaLqee7k+adn+ermS4uJyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l5pWR5o+06Zif5LyN5L+h5oGvCiAgICBnZXRUZWFtRGF0YTogZnVuY3Rpb24gZ2V0VGVhbURhdGEodmFsdWUpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YSwgX3lpZWxkJHRlYW1EYXRhJHJvd3MsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0JChfY29udGV4dDQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGVhbURhdGEocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnci5pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEgPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEkcm93cyA9IF95aWVsZCR0ZWFtRGF0YS5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkdGVhbURhdGEkcm93cyA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkdGVhbURhdGEkcm93czsKICAgICAgICAgICAgICBfdGhpczcudGVhbU9wdGlvbnMgPSByb3dzOwogICAgICAgICAgICAgIF90aGlzNy50ZWFtRGF0YUxpc3QgPSByb3dzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJzInOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChfdGhpczcudGVhbURhdGFMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIF90aGlzNy5hZGRFZGl0Rm9ybS50ZWFtSWQgPSBfdGhpczcudGVhbURhdGFMaXN0WzBdLmlkOwogICAgICAgICAgICAgICAgX3RoaXM3LnRlYW1JZENoYW5nZShfdGhpczcudGVhbURhdGFMaXN0WzBdLmlkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNCk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluayv+e6v+iuvuWkh+S/oeaBrwogICAgZ2V0QWxvbmdSb3V0ZUluZm86IGZ1bmN0aW9uIGdldEFsb25nUm91dGVJbmZvKHZhbHVlLCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgX3dpcGVEYXRhLCBfeWllbGQkYWxvbmdSb3V0ZUluZm8sIF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1JChfY29udGV4dDUpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF93aXBlRGF0YSA9IGZ1bmN0aW9uIF93aXBlRGF0YSgpIHsKICAgICAgICAgICAgICAgIF90aGlzOC5hbG9uZ1JvdXRlSW5mb0RhdGEgPSBbXTsKICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKF90aGlzOC5hbG9uZ1JvdXRlSW5mb0RhdGEpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxOwogICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gNDsKICAgICAgICAgICAgICByZXR1cm4gYWxvbmdSb3V0ZUluZm9JbnRlcihyZWZpbmVSZXF1ZXN0Qm9keSh7CiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyb2FkX3NlZ21lbnRfaWRfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pLCAnYWRkRWRpdCcpOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgX3lpZWxkJGFsb25nUm91dGVJbmZvID0gX2NvbnRleHQ1LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJGFsb25nUm91dGVJbmZvMiA9IF95aWVsZCRhbG9uZ1JvdXRlSW5mby5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkYWxvbmdSb3V0ZUluZm8yID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCRhbG9uZ1JvdXRlSW5mbzI7CiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socm93cyk7CiAgICAgICAgICAgICAgX3RoaXM4LmFsb25nUm91dGVJbmZvRGF0YSA9IHJvd3M7CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAxNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICBfY29udGV4dDUucHJldiA9IDExOwogICAgICAgICAgICAgIF9jb250ZXh0NS50MCA9IF9jb250ZXh0NVsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICAvLyDkuI3kuLror7fmsYLov4flv6vnu5PmnZ/nmoTmg4XlhrXkuIvvvIzph43nva4KICAgICAgICAgICAgICBpZiAoX2NvbnRleHQ1LnQwLm1lc3NhZ2UgIT09ICdjYW5jZWxlZCcpIF93aXBlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1LCBudWxsLCBbWzEsIDExXV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDmiZPlvIDpobXpnaLmiafooYwKICAgIG9wZW5QYWdlOiBmdW5jdGlvbiBvcGVuUGFnZSgpIHt9LAogICAgLy8g5bGV56S65by55bGCCiAgICBzaG93RGlhbG9nOiBmdW5jdGlvbiBzaG93RGlhbG9nKGRpYWxvZ05hbWUpIHsKICAgICAgaWYgKCFkaWFsb2dOYW1lKSByZXR1cm47CiAgICAgIGlmIChkaWFsb2dOYW1lID09PSAndXNlckNob2ljZScpIHsKICAgICAgICBpZiAoIXRoaXMuYWRkRWRpdEZvcm0udGVhbUlkKSB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7flhYjpgInmi6nmlZHmj7TmtL7pgaPpmJ/kvI0nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc1tkaWFsb2dOYW1lICsgJ0RpYWxvZyddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc1tkaWFsb2dOYW1lICsgJ0RpYWxvZyddID0gdHJ1ZTsKICAgICAgfQogICAgfSwKICAgIC8vIOWFs+mXremhtemdouaJp+ihjAogICAgY2xvc2VQYWdlOiBmdW5jdGlvbiBjbG9zZVBhZ2UoKSB7CiAgICAgIHZhciBfdGhpczkgPSB0aGlzOwogICAgICB2YXIgcHViU3ViID0gdGhpcy5wdWJTdWIsCiAgICAgICAgYWRkRWRpdFJ1bGVzID0gdGhpcy5hZGRFZGl0UnVsZXMsCiAgICAgICAgcm9hZE9wdGlvbnMgPSB0aGlzLnJvYWRPcHRpb25zOwogICAgICAvLyDph43nva7nu4Tku7bmlbDmja4KICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiRkYXRhLCB0aGlzLiRvcHRpb25zLmRhdGEuY2FsbCh0aGlzKSwgewogICAgICAgIHB1YlN1YjogcHViU3ViLAogICAgICAgIGFkZEVkaXRSdWxlczogYWRkRWRpdFJ1bGVzLAogICAgICAgIHJvYWRPcHRpb25zOiByb2FkT3B0aW9ucwogICAgICB9KTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHsKICAgICAgICBfdGhpczkuJHJlZnMuYWRkRWRpdEZvcm0uJGVsLnNjcm9sbFRvcCA9IDA7CiAgICAgICAgX3RoaXM5LiRyZWZzLmFkZEVkaXRGb3JtLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W6K+m5oOFCiAgICBnZXREZXRhaWw6IGZ1bmN0aW9uIGdldERldGFpbChpZCkgewogICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoKSB7CiAgICAgICAgdmFyIF90aGlzMTAkYWRkRWRpdEZvcm0sIF90aGlzMTAkYWRkRWRpdEZvcm0kciwgcm9hZElkLCBfdGhpczEwJGFkZEVkaXRGb3JtJHAsIHBlZ1ZhbCwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRvLCBvY2N1cHksIHN0YXJ0UGVnQXJyOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDYucHJldiA9IDA7CiAgICAgICAgICAgICAgX3RoaXMxMC5pc2NsZWFyID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGV0YWlsKGlkKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF90aGlzMTAuYWRkRWRpdEZvcm0gPSBfY29udGV4dDYuc2VudDsKICAgICAgICAgICAgICBfdGhpczEwJGFkZEVkaXRGb3JtID0gX3RoaXMxMC5hZGRFZGl0Rm9ybSwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRyID0gX3RoaXMxMCRhZGRFZGl0Rm9ybS5yb2FkSWQsIHJvYWRJZCA9IF90aGlzMTAkYWRkRWRpdEZvcm0kciA9PT0gdm9pZCAwID8gJycgOiBfdGhpczEwJGFkZEVkaXRGb3JtJHIsIF90aGlzMTAkYWRkRWRpdEZvcm0kcCA9IF90aGlzMTAkYWRkRWRpdEZvcm0ucGVnVmFsLCBwZWdWYWwgPSBfdGhpczEwJGFkZEVkaXRGb3JtJHAgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMCRhZGRFZGl0Rm9ybSRwLCBfdGhpczEwJGFkZEVkaXRGb3JtJG8gPSBfdGhpczEwJGFkZEVkaXRGb3JtLm9jY3VweSwgb2NjdXB5ID0gX3RoaXMxMCRhZGRFZGl0Rm9ybSRvID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTAkYWRkRWRpdEZvcm0kbzsKICAgICAgICAgICAgICBfdGhpczEwLmFkZEVkaXRGb3JtLm9jY3VweSA9IG9jY3VweS5zcGxpdCgnLCcpOwogICAgICAgICAgICAgIGlmIChwZWdWYWwpIHsKICAgICAgICAgICAgICAgIHN0YXJ0UGVnQXJyID0gcGVnVmFsLnNwbGl0KCcrJyk7CiAgICAgICAgICAgICAgICBfdGhpczEwLiRzZXQoX3RoaXMxMC5hZGRFZGl0Rm9ybSwgJ3N0YXJ0UGVnJywgc3RhcnRQZWdBcnJbMF0uc2xpY2UoMSkpOwogICAgICAgICAgICAgICAgX3RoaXMxMC4kc2V0KF90aGlzMTAuYWRkRWRpdEZvcm0sICdzdGFydFBlZ0FkZCcsIHN0YXJ0UGVnQXJyWzFdKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMxMC4kc2V0KF90aGlzMTAuYWRkRWRpdEZvcm0sICdzdGFydFBlZycsIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICAgICBfdGhpczEwLiRzZXQoX3RoaXMxMC5hZGRFZGl0Rm9ybSwgJ3N0YXJ0UGVnQWRkJywgdW5kZWZpbmVkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3RoaXMxMC5yb2FkQ2hhbmdlKHJvYWRJZCk7CiAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICBfY29udGV4dDYucHJldiA9IDk7CiAgICAgICAgICAgICAgX3RoaXMxMC5mb3JtTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuZmluaXNoKDkpOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU2LCBudWxsLCBbWzAsLCA5LCAxMl1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g5L+d5a2YCiAgICBoYW5kbGVTYXZlOiBmdW5jdGlvbiBoYW5kbGVTYXZlKCkgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWRkRWRpdEZvcm0sICdhZGRFZGl0Rm9ybScpOwogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWY2ID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KHZhbGlkLCBvYmplY3QpIHsKICAgICAgICAgIHZhciBkYXRhLCByb2FkSW5mbywgbXlJbnRlckZhY2UsIF95aWVsZCRteUludGVyRmFjZSwgc3RhdGUsIG1lc3NhZ2UsIHZhbHVlOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU3JChfY29udGV4dDcpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMjU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBfdGhpczExLnNhdmVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KF90aGlzMTEuYWRkRWRpdEZvcm0pKTsKICAgICAgICAgICAgICAgIGRhdGEub2NjdXB5ID0gZGF0YS5vY2N1cHkuam9pbignLCcpOwogICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhcnRQZWcgJiYgZGF0YS5zdGFydFBlZ0FkZCkgewogICAgICAgICAgICAgICAgICBkYXRhLnBlZ1ZhbCA9ICdrJyArIChkYXRhLnN0YXJ0UGVnIHx8ICcnKSArICcrJyArIChkYXRhLnN0YXJ0UGVnQWRkIHx8ICcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGEucmVzY3VlVGltZSA9IG1vbWVudChkYXRhLnJlc2N1ZVRpbWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOwogICAgICAgICAgICAgICAgcm9hZEluZm8gPSBfdGhpczExLnJvYWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGRhdGEucm9hZElkOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkYXRhLnJvYWROYW1lID0gcm9hZEluZm8ubmFtZTsKICAgICAgICAgICAgICAgIGRhdGEucm9hZENvZGUgPSByb2FkSW5mby5jb2RlOwogICAgICAgICAgICAgICAgZGF0YS5jYXIgPSB7CiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQ2FyQ29kZTogZGF0YS5kaXNwYXRjaENhckNvZGUgfHwgJycsCiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQ2FyVHlwZTogZGF0YS5kaXNwYXRjaENhclR5cGUKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBteUludGVyRmFjZSA9IF90aGlzMTEuaWQgPyB0YWJsZUVkaXQgOiB0YWJsZUFkZDsKICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5wcmV2ID0gMTQ7CiAgICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDE3OwogICAgICAgICAgICAgICAgcmV0dXJuIG15SW50ZXJGYWNlKF9vYmplY3RTcHJlYWQoe30sIGRhdGEpKTsKICAgICAgICAgICAgICBjYXNlIDE3OgogICAgICAgICAgICAgICAgX3lpZWxkJG15SW50ZXJGYWNlID0gX2NvbnRleHQ3LnNlbnQ7CiAgICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRteUludGVyRmFjZS5zdGF0ZTsKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkbXlJbnRlckZhY2UubWVzc2FnZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJG15SW50ZXJGYWNlLnZhbHVlOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2Uuc3VjY2VzcygiXHU0RkREXHU1QjU4XHU2MjEwXHU1MjlGIik7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuY2hhbmdlUGFnZSgnVGFibGVQYWdlJywgX3RoaXMxMS5pZCA/ICdlZGl0JyA6ICdhZGQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIDIyOgogICAgICAgICAgICAgICAgX2NvbnRleHQ3LnByZXYgPSAyMjsKICAgICAgICAgICAgICAgIF90aGlzMTEuc2F2ZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuZmluaXNoKDIyKTsKICAgICAgICAgICAgICBjYXNlIDI1OgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZTcsIG51bGwsIFtbMTQsLCAyMiwgMjVdXSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzLCBfeDQpIHsKICAgICAgICAgIHJldHVybiBfcmVmNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSk7CiAgICB9LAogICAgLy8g5pS55Y+Y6aG16Z2iCiAgICBjaGFuZ2VQYWdlOiBmdW5jdGlvbiBjaGFuZ2VQYWdlKCkgewogICAgICB2YXIgcGFnZU5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnOwogICAgICB2YXIgdHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7CiAgICAgIGlmICghcGFnZU5hbWUpIHJldHVybjsKICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlUGFnZScsIHBhZ2VOYW1lLCBmdW5jdGlvbiAoXykgewogICAgICAgIFB1YlN1Yi5wdWJsaXNoKHBhZ2VOYW1lLCB7CiAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIC8vIOWcqOe7hOS7tumUgOavgeS5i+WJjSDmuIXpmaTorqLpmIXmtojmga8KICAgIFB1YlN1Yi51bnN1YnNjcmliZSh0aGlzLnB1YlN1Yik7CiAgfQp9Ow=="},null]}