{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\zDemo\\editField\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\zDemo\\editField\\index.vue","mtime":1734116152851},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgZGlhbG9nTWl4aW4gZnJvbSAnQC9taXhpbnMvZGlhbG9nLmpzJzsNCmltcG9ydCBNb2RlbEhlYWRlciBmcm9tICcuL01vZGVsSGVhZGVyLnZ1ZSc7DQppbXBvcnQgTW9kZWxFbnRzIGZyb20gJy4vTW9kZWxFbnRzLnZ1ZSc7DQppbXBvcnQgTW9kZWxBdHRyIGZyb20gJy4vTW9kZWxBdHRyLnZ1ZSc7DQoNCmltcG9ydCBmb3JtIGZyb20gJ0AvYXBpL2Zvcm0uanMnOw0KaW1wb3J0IHV0aWwgZnJvbSAnQC9ob3RlbnQtdWktdXRpbC5qcyc7DQppbXBvcnQgcmVxIGZyb20gJ0AvcmVxdWVzdC5qcyc7DQppbXBvcnQgbWFpbiBmcm9tICdAL21haW4uanMnOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdDb21wYW55RGlhbG9nJywNCiAgY29tcG9uZW50czogeyBNb2RlbEhlYWRlciwgTW9kZWxFbnRzLCBNb2RlbEF0dHIgfSwNCiAgbWl4aW5zOiBbZGlhbG9nTWl4aW5dLA0KICBwcm9wczogew0KICAgIHNlbGVjdGVkUm93czogew0KICAgICAgdHlwZTogQXJyYXksDQogICAgICBkZWZhdWx0OiAoKSA9PiBbXSwNCiAgICB9LA0KICB9LA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBmb3JtRGF0YTogew0KICAgICAgICBhbGlhczogJycsDQogICAgICAgIGNhdGVnb3J5SWQ6ICcnLA0KICAgICAgICBjYXRlZ29yeU5hbWU6ICcnLA0KICAgICAgICBkZXBsb3llZDogMCwNCiAgICAgICAgZGVzY3JpcHRpb246ICcnLA0KICAgICAgICBkc05hbWU6ICcnLA0KICAgICAgICBpc0NyZWF0ZVRhYmxlOiAnJywNCiAgICAgICAgaXNFeHRlcm5hbDogJycsDQogICAgICAgIHN0YXR1czogJ25vcm1hbCcsDQogICAgICAgIHN1cHBvcnREYjogdHJ1ZSwNCiAgICAgICAgZW50czogW10sDQogICAgICB9LA0KICAgICAgcnVsZXM6IHsNCiAgICAgICAgbmFtZTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfotYTmupDlkI3np7DkuI3og73kuLrnqbonIH1dLA0KICAgICAgICBpc19hY3RpdmU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6LWE5rqQ57G75Z6L5LiN6IO95Li656m6JyB9XSwNCiAgICAgICAgdHlwZTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfmnaXmupDmoLzlvI/kuI3og73kuLrnqbonIH1dLA0KICAgICAgICBpc19wdWJsaXNoOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+aYr+WQpuWPkeW4g+S4jeiDveS4uuepuicgfV0sDQogICAgICB9LA0KICAgICAgbG9hZGluZzogZmFsc2UsDQogICAgICBhc2lkZVNob3c6IHRydWUsDQogICAgICBlbnRJbmRleDogMCwNCiAgICAgIGdyYW5kU29uSW5kZXg6IC0xLA0KICAgICAgb3BlbkdyYW5kU29uQXR0cjogZmFsc2UsDQogICAgICBhdHRyVGFibGVEYXRhOiBbXSwNCiAgICAgIG1lc3NhZ2VDYXRpb25zOiB7fSwNCiAgICB9Ow0KICB9LA0KICBtb3VudGVkKCkge30sDQogIG1ldGhvZHM6IHsNCiAgICAvKioNCiAgICAgKiBAZGVzY3JpcHRpb246IGRpYWxvZ+avj+asoeaYvuekuuaXtuinpuWPkeeahGluaXTmlrnms5UNCiAgICAgKiBAcGFyYW0geyp9IGRhdGEg5Lyg5YWlZGF0YQ0KICAgICAqIEByZXR1cm4geyp9DQogICAgICovDQogICAgaW5pdERhdGEoZGF0YSkgew0KICAgICAgY29uc3Qgb3JnRm9ybSA9IHRoaXMuJG9wdGlvbnMuZGF0YSgpLmZvcm1EYXRhOw0KICAgICAgdGhpcy5mb3JtRGF0YSA9IHsgLi4ub3JnRm9ybSwgLi4uZGF0YSB9Ow0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICB0aGlzLiRyZWZzLmZvcm0uY2xlYXJWYWxpZGF0ZSgpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDooajljZXmlbDmja7liqDovb0NCiAgICBnZXRGb3JtRGF0YSgpIHsNCiAgICAgIGlmICh0aGlzLmRhdGFWaWV3LmlkKSB7DQogICAgICAgIGZvcm0uZ2V0RW50RGF0YSh0aGlzLmRhdGFWaWV3LmlkLCByZXNwID0+IHsNCiAgICAgICAgICByZXNwLmRhdGEuZW50cy5mb3JFYWNoKChlbnREYXRhLCBpbmRleCkgPT4gew0KICAgICAgICAgICAgaWYgKGVudERhdGEuaXNFeHRlcm5hbCA9PSAnMScgJiYgaW5kZXggPT0gMCkgew0KICAgICAgICAgICAgICBlbnREYXRhLnNob3cgPSAn5Li75a6e5L2TLeWklic7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGVudERhdGEuaXNFeHRlcm5hbCA9PSAnMScpIHsNCiAgICAgICAgICAgICAgZW50RGF0YS5zaG93ID0gJ+WtkOWunuS9ky3lpJYnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7DQogICAgICAgICAgICAgIGVudERhdGEuaXNDaGVjayA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZW50RGF0YS5jaGlsZHJlbikgew0KICAgICAgICAgICAgICBlbnREYXRhLmNoaWxkcmVuLmZvckVhY2godiA9PiB7DQogICAgICAgICAgICAgICAgaWYgKHYuaXNFeHRlcm5hbCA9PSAnMScpIHsNCiAgICAgICAgICAgICAgICAgIHYuc2hvdyA9ICflrZnlrp7kvZMt5aSWJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yIChsZXQgcSA9IDA7IHEgPCBlbnREYXRhLmF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBxKyspIHsNCiAgICAgICAgICAgICAgaWYgKGVudERhdGEuYXR0cmlidXRlTGlzdFtxXSkgew0KICAgICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0uaXNSZXF1aXJlZCA9PSAwKSB7DQogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0uaXNSZXF1aXJlZCA9ICcwJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPSAnMSc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50RGF0YS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCAtIDEgLSBxOyBpKyspIHsNCiAgICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2ldLmluZGV4ID4gZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXS5pbmRleCkgew0KICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IGVudERhdGEuYXR0cmlidXRlTGlzdFtpXTsNCiAgICAgICAgICAgICAgICAgIGVudERhdGEuYXR0cmlidXRlTGlzdFtpXSA9IGVudERhdGEuYXR0cmlidXRlTGlzdFtpICsgMV07DQogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdID0gdGVtcDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gcmVzcC5kYXRhOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOaWsOWinuWunuS9kw0KICAgIGFkZEVudFJvd3MoKSB7DQogICAgICBjb25zdCB0aGlzXyA9IHRoaXM7DQogICAgICB1dGlsDQogICAgICAgIC52YWxpZGF0ZUZvcm0odGhpc18sICdmb3JtJykNCiAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgIGlmICh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICBpZiAodGhpc18uY2hlY2tHcmFuZFNvbkVudHMoaSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXNfLmNvdW50QXR0ckxlbmd0aCA9IDA7DQogICAgICAgICAgICBpZiAoIXRoaXNfLmNoZWNrRW50RnVuYyh0aGlzXy5mb3JtRGF0YS5lbnRzKSkgew0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzXy5leHRMZW4gPSAwOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzXy5mb3JtRGF0YS5lbnRzLmZvckVhY2goZGF0YSA9PiB7DQogICAgICAgICAgICBkYXRhLmlzQ2hlY2sgPSBmYWxzZTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzXy5lbnRJbmRleCA9ICsrdGhpc18uZW50SW5kZXg7DQogICAgICAgICAgbGV0IHJvdyA9IHsNCiAgICAgICAgICAgIGRlc2M6ICcnLA0KICAgICAgICAgICAgaW5kZXg6IHRoaXNfLmVudEluZGV4LA0KICAgICAgICAgICAgbmFtZTogJycsDQogICAgICAgICAgICBwYWNrYWdlSWQ6ICcnLA0KICAgICAgICAgICAgc2hvdzogJ+WtkOWunuS9kycsDQogICAgICAgICAgICBjaGlsZHJlbjogW10sDQogICAgICAgICAgICByZWxhdGlvbjogJ29uZXRvbWFueScsDQogICAgICAgICAgICBhdHRyaWJ1dGVMaXN0OiBbXSwNCiAgICAgICAgICAgIHN0YXR1czogJycsDQogICAgICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgICAgIH07DQogICAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID09IDApIHsNCiAgICAgICAgICAgIHRoaXNfLmVudEluZGV4ID0gMDsNCiAgICAgICAgICAgIHJvdyA9IHsNCiAgICAgICAgICAgICAgZGVzYzogJycsDQogICAgICAgICAgICAgIGluZGV4OiAwLA0KICAgICAgICAgICAgICBuYW1lOiAnJywNCiAgICAgICAgICAgICAgcGFja2FnZUlkOiAnJywNCiAgICAgICAgICAgICAgc2hvdzogJ+S4u+WunuS9kycsDQogICAgICAgICAgICAgIHJlbGF0aW9uOiAnbWFpbicsDQogICAgICAgICAgICAgIHN0YXR1czogJycsDQogICAgICAgICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLA0KICAgICAgICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgICAgICAgfTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID4gMCAmJiB0aGlzXy5jaGVja0dyYW5kU29uRW50cyh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCAtIDEpKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXNfLmZvcm1EYXRhLmVudHMucHVzaChyb3cpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2gocmVhc29uID0+IHsNCiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVhc29uKSkgew0KICAgICAgICAgICAgY29uc29sZS5sb2cocmVhc29uKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICB9DQogICAgICAgICAgbGV0IHJ1bGUgPSByZWFzb24ubWFwKHYgPT4gew0KICAgICAgICAgICAgcmV0dXJuIHYucnVsZTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICBydWxlID0gcnVsZS51bmlxdWUoKTsNCiAgICAgICAgICBpZiAocnVsZS5pbmNsdWRlcygncmVxdWlyZWQnKSkgew0KICAgICAgICAgICAgY29uc3QgbiA9IHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35bCG5L+h5oGv5aGr5YaZ5a6M5pW0Jyk7DQogICAgICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW24uaWRdID0gbjsNCiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuaW5jbHVkZXMoJ3JlZ2V4JykpIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5Y+q6IO96L6T5YWl5a2X5q+N44CB5pWw5a2X44CB5LiL5YiS57q/77yM5LiU5Lul5a2X5q+N5byA5aS0Jyk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOWIoOmZpOWunuS9kw0KICAgIGRlbGV0ZUVudFJvd3MoaW5kZXgpIHsNCiAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsNCiAgICAgIGlmICghdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3QpIHsNCiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3QgPSBbXTsNCiAgICAgIH0NCiAgICAgIHRoaXMuZm9ybURhdGEuZW50cy5zcGxpY2UoaW5kZXgsIDEpOw0KICAgICAgaWYgKHRoaXMuZW50SW5kZXggPj0gdGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCkgew0KICAgICAgICB0aGlzLmVudEluZGV4ID0gdGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCAtIDE7DQogICAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgodGhpcy5lbnRJbmRleCk7DQogICAgICB9DQogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgaWYgKGluZGV4ID09IDApIHsNCiAgICAgICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzWzBdLmlzRXh0ZXJuYWwgIT0gJzEnKSB7DQogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0uc2hvdyA9ICfkuLvlrp7kvZMnOw0KICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnJlbGF0aW9uID0gJ21haW4nOw0KICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLmNoaWxkcmVuID0gW107DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5zaG93ID0gJ+S4u+WunuS9ky3lpJYnOw0KICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnJlbGF0aW9uID0gJ21haW4nOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY2hlY2tHcmFuZFNvbkVudHMoaW5kZXgsIHBhcmFtKSB7DQogICAgICBpZiAoKHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4gJiYgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggPT0gMCkgfHwgIXRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4pIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuOw0KICAgICAgY29uc3QgbGVuID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxOw0KICAgICAgY2hpbGRbbGVuXS5jb21tZW50ID0gY2hpbGRbbGVuXS5kZXNjOw0KICAgICAgY2hpbGRbbGVuXS5kZXNjcmlwdGlvbiA9IGNoaWxkW2xlbl0uZGVzYzsNCiAgICAgIGlmICghcGFyYW0gJiYgY2hpbGRbbGVuXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA9PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiAn6K+35re75Yqg5a2X5q615L+h5oGvJywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGFkZEdyYW5kU29uRW50KGluZGV4KSB7DQogICAgICB0aGlzLmdldEVudHNCeUluZGV4KGluZGV4KTsNCiAgICAgIGNvbnN0IHJvdyA9IHsNCiAgICAgICAgZGVzYzogJycsDQogICAgICAgIGluZGV4OiB0aGlzLmVudEluZGV4LA0KICAgICAgICBuYW1lOiAnJywNCiAgICAgICAgcGFja2FnZUlkOiAnJywNCiAgICAgICAgc2hvdzogJ+WtmeWunuS9kycsDQogICAgICAgIHJlbGF0aW9uOiAnb25ldG9tYW55JywNCiAgICAgICAgYXR0cmlidXRlTGlzdDogW10sDQogICAgICAgIHN0YXR1czogJycsDQogICAgICAgIGlzQ2hlY2s6IHRydWUsDQogICAgICB9Ow0KICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuKSB7DQogICAgICAgIHRoaXMuJHNldCh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLCAnY2hpbGRyZW4nLCBbXSk7DQogICAgICB9DQogICAgICBpZiAodGhpcy5jaGVja0dyYW5kU29uRW50cyhpbmRleCkpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5wdXNoKHJvdyk7DQogICAgICB0aGlzLmdyYW5kU29uSW5kZXggPSB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuLmxlbmd0aCAtIDE7DQogICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSB0cnVlOw0KICAgICAgdGhpcy5hdHRyVGFibGVEYXRhID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3Q7DQogICAgfSwNCiAgICBnZXRFbnRzQnlJbmRleChpbmRleCwgcGFyYW0pIHsNCiAgICAgIC8vIOWmguaenOaYr+WIoOmZpOiHquWKqOmAieaLqeS4iuS4gOS4quWunuS9kw0KICAgICAgaWYgKHBhcmFtID09ICdkZWxldGUnKSB7DQogICAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdKSB7DQogICAgICAgICAgdGhpcy5lbnRJbmRleCA9IGluZGV4Ow0KICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50cy5mb3JFYWNoKGRhdGEgPT4gew0KICAgICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5pc0NoZWNrID0gdHJ1ZTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgICB1dGlsDQogICAgICAgICAgLnZhbGlkYXRlRm9ybSh0aGlzLCAnZm9ybScpDQogICAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7DQogICAgICAgICAgICBpZiAocGFyYW0gPT0gJ2dyYW5kU29uRW50Jykgew0KICAgICAgICAgICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0pIHsNCiAgICAgICAgICAgICAgdGhpcy5lbnRJbmRleCA9IGluZGV4Ow0KICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHMuZm9yRWFjaChkYXRhID0+IHsNCiAgICAgICAgICAgICAgICBkYXRhLmlzQ2hlY2sgPSBmYWxzZTsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uaXNDaGVjayA9IHRydWU7DQogICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICAgICAgLmNhdGNoKHJlYXNvbiA9PiB7DQogICAgICAgICAgICBsZXQgcnVsZSA9IHJlYXNvbi5tYXAodiA9PiB7DQogICAgICAgICAgICAgIHJldHVybiB2LnJ1bGU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJ1bGUgPSBydWxlLnVuaXF1ZSgpOw0KICAgICAgICAgICAgdGhpc18uY2xvc2VBbGxOb3RpZmljYXRpb24oKTsNCiAgICAgICAgICAgIGlmIChydWxlLmluY2x1ZGVzKCdyZXF1aXJlZCcpKSB7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCfor7flsIbkv6Hmga/loavlhpnlrozmlbQnKTsNCiAgICAgICAgICAgICAgdGhpc18ubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCflj6rog73ovpPlhaXlrZfmr43jgIHmlbDlrZfjgIHkuIvliJLnur/vvIzkuJTku6XlrZfmr43lvIDlpLQnKTsNCiAgICAgICAgICAgICAgdGhpc18ubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgY2hpbmVzZUZvcm1hdChpZCwgbGlzdCwgcGFyYW0sIGluZGV4LCB2KSB7DQogICAgICBjb25zdCBfdGhpcyA9IHRoaXM7DQogICAgICBjb25zdCBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOw0KICAgICAgLy8gZGlzYWJsZWQg5oiW6ICFIHJlYWRvbmx5IOaXtiDkuI3pnIDopoHor7fmsYINCiAgICAgIGxldCB0aW1lciA9IG51bGw7DQogICAgICBpZiAoZCA9PT0gbnVsbCB8fCBkLl9fdnVlX18uZGlzYWJsZWQgfHwgZC5fX3Z1ZV9fLnJlYWRvbmx5IHx8ICF2KSByZXR1cm47DQogICAgICBpZiAodGltZXIpIHsNCiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsNCiAgICAgIH0NCiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgcmVxDQogICAgICAgICAgLnJlcXVlc3Qoew0KICAgICAgICAgICAgdXJsOiBgJHt3aW5kb3cuY29udGV4dC51Y30vYmFzZS90b29scy92MS9nZXRQaW55aW5gLA0KICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywNCiAgICAgICAgICAgIHBhcmFtczogeyBjaGluZXNlOiB2LCB0eXBlOiAwIH0sDQogICAgICAgICAgfSkNCiAgICAgICAgICAudGhlbihyZXMgPT4gew0KICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXRlKSB7DQogICAgICAgICAgICAgIGxpc3RbaW5kZXhdW3BhcmFtXSA9IHJlcy5kYXRhLnZhbHVlOw0KICAgICAgICAgICAgICBtYWluLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgICAgICAgICAgbWFpbi4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgfSwgNTAwKTsNCiAgICB9LA0KICAgIGVudEJsdXIoKSB7DQogICAgICBpZiAoDQogICAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciAmJg0KICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0ICYmDQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMA0KICAgICAgKSB7DQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QuZm9yRWFjaChpdGVtID0+IHsNCiAgICAgICAgICBpdGVtLmRlc2MgPSBpdGVtLmNvbW1lbnQ7DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXggPT09ICdudW1iZXInKSB7DQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlRW50c0Rlc2Mke3RoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleH1gKSkgew0KICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VFbnRzRGVzYyR7dGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4fWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c0Rlc2Mke3RoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleH1gKSkgew0KICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNEZXNjJHt0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXh9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAodHlwZW9mIHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCA9PT0gJ251bWJlcicpIHsNCiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlbnROYW1lJHt0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXh9YCkpIHsNCiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7dGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4fWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c05hbWUke3RoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleH1gKSkgew0KICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNOYW1lJHt0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXh9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAodGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJDb21tZW50RWxlbWVudElkKSkgew0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJDb21tZW50RWxlbWVudElkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICB9DQogICAgICBpZiAodHlwZW9mIHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4ID09PSAnbnVtYmVyJykgew0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50QXR0ckluZGV4XS5hdHRyaWJ1dGVMaXN0W3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4XS5uYW1lfWF0dHJOYW1lJHt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleH1gKSkgew0KICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50QXR0ckluZGV4XS5hdHRyaWJ1dGVMaXN0W3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4XS5uYW1lfWF0dHJOYW1lJHt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleH1gKQ0KICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICBjb25zdCBzb25BdHRyID0gdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuc29uQXR0ckluZGV4XTsNCiAgICAgICAgaWYgKHNvbkF0dHIpIHsNCiAgICAgICAgICBkb2N1bWVudA0KICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKGAke3NvbkF0dHIuY2hpbGRyZW5bdGhpcy5lbnRBdHRySW5kZXhdLmF0dHJpYnV0ZUxpc3RbdGhpcy5jaGVja0F0dHJOYW1lSW5kZXhdLm5hbWV9YXR0ck5hbWUke3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4fWApDQogICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4ID0gbnVsbDsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZVR5cGUpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7dGhpcy5kZWZhdWx0VmFsdWVJbmRleH1gKVswXS5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gbnVsbDsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmF0dHJMZW5FbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKSkgew0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDlhbPpl63miYDmnInmoKHpqozpgJrnn6UNCiAgICBjbG9zZUFsbE5vdGlmaWNhdGlvbigpIHsNCiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubWVzc2FnZUNhdGlvbnMpIHsNCiAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1trZXldLmNsb3NlKCk7DQogICAgICAgIGRlbGV0ZSB0aGlzLm1lc3NhZ2VDYXRpb25zW2tleV07DQogICAgICB9DQogICAgfSwNCiAgICBnZXRHcmFuZFNvbkVudHNCeUluZGV4KGksIGluZGV4KSB7DQogICAgICB0aGlzLmdldEVudHNCeUluZGV4KGluZGV4LCAnZ3JhbmRTb25FbnQnKTsNCiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IGk7DQogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuICYmIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXSkgew0KICAgICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0uYXR0cmlidXRlTGlzdDsNCiAgICAgIH0NCiAgICB9LA0KICAgIGRlbGV0ZUdyYW5kU29uRW50Um93cyhpLCBpbmRleCkgew0KICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleChpbmRleCwgJ25vQ2hlY2snKTsNCiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IGk7DQogICAgICBpZiAoIXRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0KSB7DQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXS5hdHRyaWJ1dGVMaXN0ID0gW107DQogICAgICB9DQogICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW4uc3BsaWNlKGksIDEpOw0KICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7DQogICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uYXR0cmlidXRlTGlzdDsNCiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baSAtIDFdICYmIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpIC0gMV0uYXR0cmlidXRlTGlzdC5sZW5ndGggPiAwKSB7DQogICAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpIC0gMV0uYXR0cmlidXRlTGlzdDsNCiAgICAgIH0NCiAgICB9LA0KICAgIGNoZWNrRW50RnVuYyhlbnQsIHNvbkluZGV4KSB7DQogICAgICBjb25zdCBlbnRWYWwgPSB7fTsNCiAgICAgIGlmIChlbnQubGVuZ3RoIDwgMSkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlKHsgdHlwZTogJ3dhcm5pbmcnLCBtZXNzYWdlOiAn6K+35re75Yqg5a6e5L2T5a+56LGh77yBJyB9KTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnQubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgaWYgKGVudFtpXS5zaG93ICE9ICflrZnlrp7kvZMnKSB7DQogICAgICAgICAgZW50W2ldLmRlc2NyaXB0aW9uID0gZW50W2ldLmNvbW1lbnQ7DQogICAgICAgICAgZW50W2ldLmRlc2MgPSBlbnRbaV0uY29tbWVudDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWVudFZhbFtgZGVzYyR7ZW50W2ldLmRlc2N9YF0pIHsNCiAgICAgICAgICBlbnRWYWxbYGRlc2Mke2VudFtpXS5kZXNjfWBdID0gZW50W2ldLmRlc2M7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4ID0gaTsNCiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHtpfWApICYmIGVudFtpXS5zaG93ID09ICflrZDlrp7kvZMnKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogYOW3suWtmOWcqOWtkOWunuS9k+aPj+i/sOS4uuOAkCR7ZW50W2ldLmRlc2N944CR55qEYm/lrp7kvZNgLA0KICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgY2hhbmdlRW50c0Rlc2Mke2l9YCkNCiAgICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXQ0KICAgICAgICAgICAgICAubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHtpfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICBtZXNzYWdlOiBg5bey5a2Y5Zyo5a2Z5a6e5L2T5o+P6L+w5Li644CQJHtlbnRbaV0uZGVzY33jgJHnmoRib+WunuS9k2AsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgZG9jdW1lbnQNCiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNEZXNjJHtpfWApDQogICAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0NCiAgICAgICAgICAgICAgLmxhc3RFbGVtZW50Q2hpbGQuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNEZXNjJHtpfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWVudFZhbFtgbmFtZSR7ZW50W2ldLm5hbWV9YF0pIHsNCiAgICAgICAgICBlbnRWYWxbYG5hbWUke2VudFtpXS5uYW1lfWBdID0gZW50W2ldLm5hbWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4ID0gaTsNCiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGVudE5hbWUke2l9YCkgJiYgZW50W2ldLnNob3cgPT0gJ+WtkOWunuS9kycpIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICBtZXNzYWdlOiBg5bey5a2Y5Zyo5a2Q5a6e5L2T5ZCN56ew5Li644CQJHtlbnRbaV0ubmFtZX3jgJHnmoRib+WunuS9k2AsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgZG9jdW1lbnQNCiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKGBlbnROYW1lJHtpfWApDQogICAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0NCiAgICAgICAgICAgICAgLmxhc3RFbGVtZW50Q2hpbGQuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlbnROYW1lJHtpfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICBtZXNzYWdlOiBg5bey5a2Y5Zyo5a2Z5a6e5L2T5ZCN56ew5Li644CQJHtlbnRbaV0ubmFtZX3jgJHnmoRib+WunuS9k2AsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgZG9jdW1lbnQNCiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNOYW1lJHtpfWApDQogICAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0NCiAgICAgICAgICAgICAgLmxhc3RFbGVtZW50Q2hpbGQuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNOYW1lJHtpfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZW50W2ldLmlzRXh0ZXJuYWwgPT0gJzEnKSB7DQogICAgICAgICAgKyt0aGlzLmV4dExlbjsNCiAgICAgICAgICBpZiAoaSAhPSAwICYmIHRoaXMuZXh0TGVuID4gMSAmJiAhZW50W2ldLmZrKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogYOivt+e7mSR7ZW50W2ldLmNvbW1lbnR95a6e5L2T5re75Yqg5aSW6ZSu77yBYCwNCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChlbnRbaV0uYXR0cmlidXRlTGlzdC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXR0ckZ1bmMoZW50W2ldLCBpLCBzb25JbmRleCkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IG1lc3NhZ2U6ICfor7fmt7vliqDlrZfmrrXvvIEnLCB0eXBlOiAnd2FybmluZycgfSk7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbnRbaV0uY2hpbGRyZW4gJiYgZW50W2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7DQogICAgICAgICAgaWYgKCF0aGlzLmNoZWNrRW50RnVuYyhlbnRbaV0uY2hpbGRyZW4sIGkpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoID0gMDsNCiAgICAgIH0NCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0sDQogICAgY2hlY2tBdHRyRnVuYyhlbnQsIGksIHNvbkluZGV4KSB7DQogICAgICBjb25zdCByZWdQb3MgPSBuZXcgUmVnRXhwKCdeXFxkKig/OlxcLlxcZHsxLDJ9KT8kJyk7DQogICAgICBjb25zdCBhdHRyVmFsID0ge307DQogICAgICBjb25zdCBhdHRyID0gZW50LmF0dHJpYnV0ZUxpc3Q7DQogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgYXR0cltqXS5kZXNjID0gYXR0cltqXS5jb21tZW50Ow0KICAgICAgICBpZiAoYXR0cltqXS5kZWZhdWx0VmFsdWUgPT0gbnVsbCkgew0KICAgICAgICAgIGF0dHJbal0uZGVmYXVsdFZhbHVlID0gJyc7DQogICAgICAgIH0NCiAgICAgICAgYXR0cltqXS5kZWZhdWx0VmFsdWUgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZS50cmltKCk7DQogICAgICAgIHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQgPSBgJHthdHRyW2pdLm5hbWV9Y29tbWVudCR7an1gOw0KICAgICAgICBpZiAoZW50LmlzRXh0ZXJuYWwgIT0gJzEnKSB7DQogICAgICAgICAgaWYgKCFhdHRyVmFsW2BuYW1lJHthdHRyW2pdLm5hbWV9YF0pIHsNCiAgICAgICAgICAgIGF0dHJWYWxbYG5hbWUke2F0dHJbal0ubmFtZX1gXSA9IGF0dHJbal0ubmFtZTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLmF0dHJOYW1lRWxlbWVudElkID0gYXR0cjsNCiAgICAgICAgICAgIHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4ID0gajsNCiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGDlrp7kvZPvvJoke2VudC5kZXNjfe+8iCR7ZW50Lm5hbWV977yJ5Lit5a2Y5Zyo6YeN5aSN5a2X5q615ZCN44CQJHthdHRyW2pdLm5hbWV944CRYDsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiBtc2csIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuYXR0ck5hbWVFbGVtZW50SWRbal0ubmFtZX1hdHRyTmFtZSR7an1gKS5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5hdHRyTmFtZUVsZW1lbnRJZFtqXS5uYW1lfWF0dHJOYW1lJHtqfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPQ0KICAgICAgICAgICAgICAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXMuYXR0ckxlbkVsZW1lbnRJZCA9IGAke2F0dHJbal0ubmFtZX1hdHRyTGVuJHtqfWA7DQogICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aCAmJiBhdHRyW2pdLmF0dHJMZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoYXR0cltqXS5hdHRyTGVuZ3RoKSkgew0KICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgY29uc3QgbiA9IHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36L6T5YWl5q2j56Gu5pWw5a2XJyk7DQogICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCA9IGAke2F0dHJbal0ubmFtZX1kZWNpbWEke2p9YDsNCiAgICAgICAgICBpZiAoYXR0cltqXS5kZWNpbWFsTGVuICYmIGF0dHJbal0uZGVjaW1hbExlbiAhPT0gMCkgew0KICAgICAgICAgICAgaWYgKCFyZWdQb3MudGVzdChhdHRyW2pdLmRlY2ltYWxMZW4pKSB7DQogICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICBjb25zdCBuID0gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fovpPlhaXmraPnoa7mlbDlrZcnKTsNCiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbikgew0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbi5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxMZW4gPSBhdHRyW2pdLmRlY2ltYWxMZW4uc3Vic3RyKDAsIDEpOw0KICAgICAgICAgICAgICBpZiAoZGVjaW1hbExlbiA9PSAnMCcpIHsNCiAgICAgICAgICAgICAgICBhdHRyW2pdLmRlY2ltYWxMZW4gPSBhdHRyW2pdLmRlY2ltYWxMZW4uc3Vic3RyKDEsIGF0dHJbal0uZGVjaW1hbExlbi5sZW5ndGgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYXR0cltqXS5kZWNpbWFsTGVuIDwgMCB8fCBhdHRyW2pdLmRlY2ltYWxMZW4gPiAzMCkgew0KICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+Wwj+aVsOmVv+W6puS4jeiDveWwj+S6jjDmiJbogIXlpKfkuo4zMCcsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoYXR0cltqXS5kYXRhVHlwZSA9PT0gJ3ZhcmNoYXInKSB7DQogICAgICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCArPSBwYXJzZUludChhdHRyW2pdLmF0dHJMZW5ndGgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoKSB7DQogICAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoLmxlbmd0aCA+IDEpIHsNCiAgICAgICAgICAgICAgY29uc3QgYXR0ckxlbmd0aCA9IGF0dHJbal0uYXR0ckxlbmd0aC5zdWJzdHIoMCwgMSk7DQogICAgICAgICAgICAgIGlmIChhdHRyTGVuZ3RoID09ICcwJykgew0KICAgICAgICAgICAgICAgIGF0dHJbal0uYXR0ckxlbmd0aCA9IGF0dHJbal0uYXR0ckxlbmd0aC5zdWJzdHIoMSwgYXR0cltqXS5hdHRyTGVuZ3RoLmxlbmd0aCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAndmFyY2hhcicpIHsNCiAgICAgICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aCA8IDEgfHwgdGhpcy5jb3VudEF0dHJMZW5ndGggPiAyMTUwMCkgew0KICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI3og73lsI/kuo4x5oiW6ICF6ZW/5bqm5oC75ZKM6LaF5Ye6MjE1MDAnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoYXR0cltqXS5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgYXR0cltqXS5kYXRhVHlwZSA9PSAn5pWw5a2XJykgew0KICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsID0gYXR0cltqXS5kZWZhdWx0VmFsdWUuc3BsaXQoJy4nKTsNCiAgICAgICAgICAgICAgaWYgKE51bWJlcihhdHRyW2pdLmF0dHJMZW5ndGgpIDwgMSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI3og73lsI/kuo4xJywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKE51bWJlcihhdHRyW2pdLmF0dHJMZW5ndGgpICsgTnVtYmVyKGF0dHJbal0uZGVjaW1hbExlbikgPiAzOCkgew0KICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI7lsI/mlbDplb/luqbkuYvlkozkuI3og73otoXov4czOCcsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsWzFdICYmIE51bWJlcihkZWZhdWx0VmFsWzFdLmxlbmd0aCkgPiBOdW1iZXIoYXR0cltqXS5kZWNpbWFsTGVuKSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOw0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICdudW1iZXInOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfpu5jorqTlgLzkuK3lsI/mlbDplb/luqbotoXlh7rorr7nva7lgLwnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoYXR0cltqXS5kZWZhdWx0VmFsdWUgJiYgYXR0cltqXS5kZWZhdWx0VmFsdWUubGVuZ3RoID4gMjEpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAnbnVtYmVyJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI3og73otoXov4cyMScsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKCFyZWdQb3MudGVzdChOdW1iZXIoYXR0cltqXS5kZWZhdWx0VmFsdWUpKSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOw0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICdudW1iZXInOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+m7mOiupOWAvOW6lOS4uuaVsOWtlycsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGxldCBkID0gYXR0cltqXS5kZWZhdWx0VmFsdWU7DQogICAgICAgICAgICBpZiAoZC5pbmRleE9mKCcuJykgPiAtMSkgew0KICAgICAgICAgICAgICBjb25zdCBpID0gZC5pbmRleE9mKCcuJyk7DQogICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZC5zdWJzdHJpbmcoMCwgaSk7DQogICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGQuc3Vic3RyaW5nKGkgKyAxLCBhdHRyW2pdLmRlZmF1bHRWYWx1ZS5sZW5ndGgpOw0KICAgICAgICAgICAgICBkID0gc3RhcnQgKyBlbmQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZC5sZW5ndGggPiBhdHRyW2pdLmF0dHJMZW5ndGggKyBhdHRyW2pdLmRlY2ltYWxMZW4pIHsNCiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7DQogICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICd2YXJjaGFyJzsNCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5mb2N1cygpOw0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+m7mOiupOWAvOmVv+W6pumcgOWwj+S6juaVtOaVsOmVv+W6picsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cltqXS5kYXRhVHlwZSA9PT0gJ3ZhcmNoYXInIHx8IGF0dHJbal0uZGF0YVR5cGUgPT09ICdudW1iZXInKSB7DQogICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IG1lc3NhZ2U6ICfor7fmt7vliqDmlbTmlbDplb/luqYnLCB0eXBlOiAnd2FybmluZycgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9LA0KICAgIC8vIOWFs+mXreihqOWNleWvueivneahhg0KICAgIGhhbmRsZURpYWxvZ0Nsb3NlKCkgew0KICAgICAgdGhpcy4kZW1pdCgnbG9hZFRhYmxlRGF0YScpOw0KICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7DQogICAgICB0aGlzLmlzU2F2ZSA9IGZhbHNlOw0KICAgICAgdGhpcy5lbnRJbmRleCA9IDA7DQogICAgICB0aGlzLmdyYW5kU29uSW5kZXggPSAtMTsNCiAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOw0KICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggPSAwOw0KICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMuJG9wdGlvbnMuZGF0YSgpLmZvcm1EYXRhOw0KICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiAnL3N5c3BsYXQvYnVzaW5lc3NPYmonIH0pOyAvLyBmb3JtI2J1c2luZXNzT2JqDQogICAgfSwNCiAgICBvbkNhbmNlbCgpIHsNCiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOw0KICAgIH0sDQogICAgb25Db25maXJtKCkgew0KICAgICAgdGhpcy4kcmVmcy5mb3JtLnZhbGlkYXRlKGFzeW5jIHZhbGlkID0+IHsNCiAgICAgICAgaWYgKHZhbGlkKSB7DQogICAgICAgICAgLy8gY29uc3QgcGFyYW1zID0gdGhpcy5oYW5kbGVQYXJhbXMoKQ0KICAgICAgICAgIC8vIHRyeSB7DQogICAgICAgICAgLy8gICB0aGlzLmxvYWRpbmcgPSB0cnVlDQogICAgICAgICAgLy8gICBpZiAodGhpcy5kYXRhPy5pZCkgew0KICAgICAgICAgIC8vICAgICBhd2FpdCB1cGRhdGVEYXRhKHBhcmFtcykNCiAgICAgICAgICAvLyAgIH0gZWxzZSB7DQogICAgICAgICAgLy8gICAgIGF3YWl0IGRhdGFBZGQocGFyYW1zKQ0KICAgICAgICAgIC8vICAgfQ0KICAgICAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfmk43kvZzmiJDlip8nKQ0KICAgICAgICAgIC8vICAgdGhpcy5vbkNhbmNlbCgpDQogICAgICAgICAgLy8gdGhpcy4kZW1pdCgnY29uZmlybScsIHsuLi50aGlzLmZvcm1EYXRhfSkNCiAgICAgICAgICAvLyB9IGZpbmFsbHkgew0KICAgICAgICAgIC8vICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgICAgICAvLyB9DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogIH0sDQp9Ow0K"},null]}