{"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\product\\productAdd\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\product\\productAdd\\index.vue","mtime":1761614939049},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgdXNlckxhYmVsIGZyb20gJ0AvY29tcG9uZW50cy9sYWJlbExpc3QnOw0KaW1wb3J0IHVzZUxhYmVsIGZyb20gJ0AvY29tcG9uZW50cy9nb29kc0xhYmVsL3VzZUxhYmVsJzsNCmltcG9ydCBnb29kc0xhYmVsIGZyb20gJ0AvY29tcG9uZW50cy9nb29kc0xhYmVsJzsNCmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAndnVleCc7DQppbXBvcnQgdXBsb2FkUGljdHVyZXMgZnJvbSAnQC9jb21wb25lbnRzL3VwbG9hZFBpY3R1cmVzJzsNCmltcG9ydCBmcmVpZ2h0VGVtcGxhdGUgZnJvbSAnQC9jb21wb25lbnRzL2ZyZWlnaHRUZW1wbGF0ZSc7DQppbXBvcnQgY291cG9uTGlzdCBmcm9tICdAL2NvbXBvbmVudHMvY291cG9uTGlzdCc7DQppbXBvcnQgYWRkQXR0ciBmcm9tICcuLi9wcm9kdWN0QXR0ci9hZGRBdHRyJzsNCmltcG9ydCBnb29kc0xpc3QgZnJvbSAnQC9jb21wb25lbnRzL2dvb2RzTGlzdC9pbmRleCc7DQppbXBvcnQgdGFvQmFvIGZyb20gJy4vdGFvQmFvJzsNCmltcG9ydCB7IHVzZXJMYWJlbEFkZEFwaSB9IGZyb20gJ0AvYXBpL3VzZXInOw0KaW1wb3J0IHsNCiAgcHJvZHVjdEluZm9BcGksDQogIGNhc2NhZGVyTGlzdEFwaSwNCiAgcHJvZHVjdEFkZEFwaSwNCiAgZ2VuZXJhdGVBdHRyQXBpLA0KICBwcm9kdWN0R2V0UnVsZUFwaSwNCiAgcHJvZHVjdEdldFRlbXBsYXRlQXBpLA0KICBwcm9kdWN0R2V0VGVtcEtleXNBcGksDQogIGNoZWNrQWN0aXZpdHlBcGksDQogIHByb2R1Y3RDYWNoZSwNCiAgY2FjaGVEZWxldGUsDQogIHVwbG9hZFR5cGUsDQogIGltcG9ydENhcmQsDQogIHByb2R1Y3RDcmVhdGVBcGksDQogIGdldFByb2R1Y3RUeXBlQ29uZmlnLA0KICBydWxlQWRkQXBpLA0KICBwYXJhbUxpc3RBcGksDQogIHBhcmFtSW5mb0FwaSwNCiAgcHJvZHVjdFByb3RlY3Rpb25MaXN0QXBpLA0KICBwcm9kdWN0TGFiZWxVc2VMaXN0QXBpLA0KfSBmcm9tICdAL2FwaS9wcm9kdWN0JzsNCmltcG9ydCBTZXR0aW5nIGZyb20gJ0Avc2V0dGluZyc7DQppbXBvcnQgeyBnZXRDb29raWVzIH0gZnJvbSAnQC9saWJzL3V0aWwnOw0KaW1wb3J0IHsgdXBsb2FkQnlQaWVjZXMgfSBmcm9tICdAL3V0aWxzL3VwbG9hZCc7IC8v5byV5YWldXBsb2FkQnlQaWVjZXPmlrnms5UNCmltcG9ydCB7IGlzRmlsZVVwbG9hZCwgaXNWaWRlb1VwbG9hZCwgYXJyYXlzRXF1YWwgfSBmcm9tICdAL3V0aWxzJzsNCmltcG9ydCBjaGVja0FycmF5IGZyb20gJ0AvbGlicy9wZXJtaXNzaW9uJzsNCmltcG9ydCB7DQogIEdvb2RzVGFibGVIZWFkLA0KICBWaXJ0dWFsVGFibGVIZWFkLA0KICBWaXJ0dWFsVGFibGVIZWFkMiwNCiAgY29sdW1uczIsDQogIGNvbHVtbnMzLA0KICBDdXN0b21MaXN0LA0KICBSdWxlVmFsaWRhdGUsDQp9IGZyb20gJy4vZGVmYXVsdERhdGEuanMnOw0KaW1wb3J0IEJhc2ljSW5mbyBmcm9tICcuL2NvbXBvbmVudHMvQmFzaWNJbmZvLnZ1ZSc7DQppbXBvcnQgU3BlY1N0b2NrIGZyb20gJy4vY29tcG9uZW50cy9TcGVjU3RvY2sudnVlJzsNCmltcG9ydCBQcm9kdWN0RGV0YWlsIGZyb20gJy4vY29tcG9uZW50cy9Qcm9kdWN0RGV0YWlsLnZ1ZSc7DQppbXBvcnQgTG9naXN0aWNzU2V0dGluZyBmcm9tICcuL2NvbXBvbmVudHMvTG9naXN0aWNzU2V0dGluZy52dWUnOw0KaW1wb3J0IFByaWNlQ29tbWlzc2lvbiBmcm9tICcuL2NvbXBvbmVudHMvUHJpY2VDb21taXNzaW9uLnZ1ZSc7DQppbXBvcnQgTWFya2V0aW5nU2V0dGluZyBmcm9tICcuL2NvbXBvbmVudHMvTWFya2V0aW5nU2V0dGluZy52dWUnOw0KaW1wb3J0IE90aGVyU2V0dGluZyBmcm9tICcuL2NvbXBvbmVudHMvT3RoZXJTZXR0aW5nLnZ1ZSc7DQppbXBvcnQgeyBmb3JtYXRSaWNoVGV4dCB9IGZyb20gJ0AvdXRpbHMvZWRpdG9ySW1nJzsNCg0KZXhwb3J0IGRlZmF1bHQgew0KICBuYW1lOiAnUHJvZHVjdEFkZCcsDQogIGNvbXBvbmVudHM6IHsNCiAgICB1cGxvYWRQaWN0dXJlcywNCiAgICBmcmVpZ2h0VGVtcGxhdGUsDQogICAgYWRkQXR0ciwNCiAgICBjb3Vwb25MaXN0LA0KICAgIHRhb0JhbywNCiAgICBnb29kc0xpc3QsDQogICAgdXNlckxhYmVsLA0KICAgIGdvb2RzTGFiZWwsDQogICAgdXNlTGFiZWwsDQogICAgQmFzaWNJbmZvLA0KICAgIFNwZWNTdG9jaywNCiAgICBQcm9kdWN0RGV0YWlsLA0KICAgIExvZ2lzdGljc1NldHRpbmcsDQogICAgUHJpY2VDb21taXNzaW9uLA0KICAgIE1hcmtldGluZ1NldHRpbmcsDQogICAgT3RoZXJTZXR0aW5nLA0KICB9LA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBsYWJlbFNob3c6IGZhbHNlLA0KICAgICAgdGFnU2hvdzogZmFsc2UsDQogICAgICBkYXRhTGFiZWw6IFtdLA0KICAgICAgaGVhZFRhYjogWw0KICAgICAgICB7IHRpdDogJ+WfuuehgOS/oeaBrycsIG5hbWU6ICcxJyB9LA0KICAgICAgICB7IHRpdDogJ+inhOagvOW6k+WtmCcsIG5hbWU6ICcyJyB9LA0KICAgICAgICB7IHRpdDogJ+WVhuWTgeivpuaDhScsIG5hbWU6ICczJyB9LA0KICAgICAgICB7IHRpdDogJ+eJqea1geiuvue9ricsIG5hbWU6ICc0JyB9LA0KICAgICAgICB7IHRpdDogJ+S8muWRmOS7ty/kvaPph5EnLCBuYW1lOiAnNScgfSwNCiAgICAgICAgeyB0aXQ6ICfokKXplIDorr7nva4nLCBuYW1lOiAnNicgfSwNCiAgICAgICAgeyB0aXQ6ICflhbbku5borr7nva4nLCBuYW1lOiAnNycgfSwNCiAgICAgIF0sDQogICAgICB2aXJ0dWFsOiBbDQogICAgICAgIHsgdGl0OiAn5pmu6YCa5ZWG5ZOBJywgaWQ6IDAsIHRpdDI6ICfnianmtYHlj5HotKcnIH0sDQogICAgICAgIHsgdGl0OiAn5Y2h5a+GL+e9keebmCcsIGlkOiAxLCB0aXQyOiAn6Ieq5Yqo5Y+R6LSnJyB9LA0KICAgICAgICB7IHRpdDogJ+S8mOaDoOWIuCcsIGlkOiAyLCB0aXQyOiAn6Ieq5Yqo5Y+R6LSnJyB9LA0KICAgICAgICB7IHRpdDogJ+iZmuaLn+WVhuWTgScsIGlkOiAzLCB0aXQyOiAn6Jma5ouf5Y+R6LSnJyB9LA0KICAgICAgXSwNCiAgICAgIHNlbGV0VmlkZW86IDAsIC8v6YCJ5oup6KeG6aKR57G75Z6LDQogICAgICBjdXN0b21CdG46IDAsIC8v6Ieq5a6a5LmJ55WZ6KiA5byA5YWzDQogICAgICBjb250ZW50OiAnJywNCiAgICAgIGNvbnRlbnRzOiAnJywNCiAgICAgIGZpbGVVcmw6IFNldHRpbmcuYXBpQmFzZVVSTCArICcvZmlsZS91cGxvYWQnLA0KICAgICAgZmlsZVVybDI6IFNldHRpbmcuYXBpQmFzZVVSTCArICcvZmlsZS92aWRlb191cGxvYWQnLA0KICAgICAgY2FyZFVybDogU2V0dGluZy5hcGlCYXNlVVJMICsgJy9maWxlL3VwbG9hZC8xJywNCiAgICAgIHVwbG9hZF90eXBlOiAnJywgLy/op4bpopHkuIrkvKDnsbvlnosgMSDmnKzlnLDkuIrkvKAgMiAzIDQgT1NT5LiK5LygDQogICAgICB1cGxvYWREYXRhOiB7fSwgLy8g5LiK5Lyg5Y+C5pWwDQogICAgICBoZWFkZXI6IHt9LA0KICAgICAgdHlwZTogMCwNCiAgICAgIG1vZGFsczogZmFsc2UsDQogICAgICBnb29kc19tb2RhbHM6IGZhbHNlLA0KICAgICAgc3BpblNob3c6IGZhbHNlLA0KICAgICAgb3BlblN1YmltaXQ6IGZhbHNlLA0KICAgICAgdmlydHVhbExpc3Q6IFsNCiAgICAgICAgew0KICAgICAgICAgIGtleTogJycsDQogICAgICAgICAgdmFsdWU6ICcnLA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIC8vIOaJuemHj+iuvue9ruihqOagvGRhdGENCiAgICAgIG9uZUZvcm1CYXRjaDogWw0KICAgICAgICB7DQogICAgICAgICAgcGljOiAnJywNCiAgICAgICAgICBwcmljZTogdm9pZCAwLA0KICAgICAgICAgIGNvc3Q6IHZvaWQgMCwNCiAgICAgICAgICBvdF9wcmljZTogdm9pZCAwLA0KICAgICAgICAgIHN0b2NrOiB2b2lkIDAsDQogICAgICAgICAgYmFyX2NvZGU6ICcnLA0KICAgICAgICAgIGJhcl9jb2RlX251bWJlcjogJycsDQogICAgICAgICAgd2VpZ2h0OiB2b2lkIDAsDQogICAgICAgICAgdm9sdW1lOiB2b2lkIDAsDQogICAgICAgICAgdmlydHVhbF9saXN0OiBbXSwNCiAgICAgICAgfSwNCiAgICAgIF0sDQoNCiAgICAgIC8vIOinhOagvOaVsOaNrg0KICAgICAgZm9ybUR5bmFtaWM6IHsNCiAgICAgICAgYXR0cnNOYW1lOiAnJywNCiAgICAgICAgYXR0cnNWYWw6ICcnLA0KICAgICAgfSwNCiAgICAgIGRpc2tfdHlwZTogMSwgLy/ljaHlr4bnsbvlnosNCiAgICAgIHRhYkluZGV4OiAwLA0KICAgICAgdGFiTmFtZTogJycsDQogICAgICBmb3JtRHluYW1pY05hbWVEYXRhOiBbXSwNCiAgICAgIGlzQnRuOiBmYWxzZSwNCiAgICAgIGNvbHVtbnMyOiBjb2x1bW5zMiwNCiAgICAgIGNvbHVtbnMzOiBjb2x1bW5zMywNCiAgICAgIGNvbHVtbnM6IFtdLA0KICAgICAgY29sdW1uc0luc3RhbGw6IFtdLA0KICAgICAgY29sdW1uc0luc3RhbDI6IFtdLA0KICAgICAgZ3JpZFBpYzogew0KICAgICAgICB4bDogNiwNCiAgICAgICAgbGc6IDgsDQogICAgICAgIG1kOiAxMiwNCiAgICAgICAgc206IDEyLA0KICAgICAgICB4czogMTIsDQogICAgICB9LA0KICAgICAgZ3JpZEJ0bjogew0KICAgICAgICB4bDogNCwNCiAgICAgICAgbGc6IDgsDQogICAgICAgIG1kOiA4LA0KICAgICAgICBzbTogOCwNCiAgICAgICAgeHM6IDgsDQogICAgICB9LA0KICAgICAgLy/oh6rlrprkuYnnlZnoqIDkuIvmi4npgInmi6kNCiAgICAgIEN1c3RvbUxpc3Q6IEN1c3RvbUxpc3QsDQogICAgICAvL+iHquWumuS5ieeVmeiogOWGheWuuQ0KICAgICAgY3VycmVudEluZGV4OiAwLA0KDQogICAgICBmb3JtVmFsaWRhdGU6IHsNCiAgICAgICAgc2hhcmU6IDAsDQogICAgICAgIGlzX3BhY2s6IDAsLy/mmK/lkKbmiqXljZUNCiAgICAgICAgZGlza19pbmZvOiAnJywgLy/ljaHlr4bnsbvlnosNCiAgICAgICAgbG9naXN0aWNzOiBbJzEnXSwgLy/pgInmi6nnianmtYHmlrnlvI8NCiAgICAgICAgZnJlaWdodDogMiwgLy/ov5DotLnorr7nva4NCiAgICAgICAgcG9zdGFnZTogMCwgLy/orr7nva7ov5DotLnph5Hpop0NCiAgICAgICAgcmVjb21tZW5kOiBbXSwgLy/llYblk4HmjqjojZANCiAgICAgICAgcHJlc2FsZV9kYXk6IDEsIC8v6aKE5ZSu5Y+R6LSn5pe26Ze0Lee7k+adnw0KICAgICAgICBwcmVzYWxlOiBmYWxzZSwgLy/pooTllK7llYblk4HlvIDlhbMNCiAgICAgICAgaXNfbGltaXQ6IGZhbHNlLA0KICAgICAgICBsaW1pdF90eXBlOiAwLA0KICAgICAgICBsaW1pdF9udW06IDAsDQogICAgICAgIHZpcF9wcm9kdWN0OiBmYWxzZSwgLy/ku5jotLnkvJrlkZjkuJPlsZ7lvIDlhbMNCiAgICAgICAgY3VzdG9tX2Zvcm06IFtdLCAvL+iHquWumuS5ieeVmeiogA0KICAgICAgICBzdG9yZV9uYW1lOiAnJywNCiAgICAgICAgY2F0ZV9pZDogW10sDQogICAgICAgIGxhYmVsX2lkOiBbXSwNCiAgICAgICAga2V5d29yZDogJycsDQogICAgICAgIHVuaXRfbmFtZTogJycsDQogICAgICAgIHN0b3JlX2luZm86ICcnLA0KICAgICAgICBpbWFnZTogJycsDQogICAgICAgIHJlY29tbWVuZF9pbWFnZTogJycsDQogICAgICAgIHNsaWRlcl9pbWFnZTogW10sDQogICAgICAgIGRlc2NyaXB0aW9uOiAnJywNCiAgICAgICAgZmljdGk6IDAsDQogICAgICAgIGdpdmVfaW50ZWdyYWw6IDAsDQogICAgICAgIHNvcnQ6IDAsDQogICAgICAgIGlzX3Nob3c6IDEsDQogICAgICAgIGlzX2dpZnQ6IDAsIC8vIOW8gOWQr+mAgeekvOWTgQ0KICAgICAgICBnaWZ0X3ByaWNlOiAwLA0KICAgICAgICBpc19ob3Q6IDAsDQogICAgICAgIGlzX2JlbmVmaXQ6IDAsDQogICAgICAgIGlzX2Jlc3Q6IDAsDQogICAgICAgIGlzX25ldzogMCwNCiAgICAgICAgaXNfZ29vZDogMCwNCiAgICAgICAgaXNfcG9zdGFnZTogMCwNCiAgICAgICAgaXNfc3ViOiBbXSwNCiAgICAgICAgcmVjb21tZW5kX2xpc3Q6IFtdLA0KICAgICAgICBwYXJhbXNfbGlzdDogW10sIC8v5ZWG5ZOB5Y+C5pWwDQogICAgICAgIHZpcnR1YWxfdHlwZTogMCwNCiAgICAgICAgLy8gaXNfc3ViOiAwLA0KICAgICAgICBpZDogMCwNCiAgICAgICAgc3BlY190eXBlOiAwLA0KICAgICAgICBpc192aXJ0dWFsOiAwLA0KICAgICAgICB2aWRlb19saW5rOiAnJywNCiAgICAgICAgLy8gcG9zdGFnZTogMCwNCiAgICAgICAgdGVtcF9pZDogJycsDQogICAgICAgIGF0dHJzOiBbXSwNCiAgICAgICAgaXRlbXM6IFsNCiAgICAgICAgICB7DQogICAgICAgICAgICBwaWM6ICcnLA0KICAgICAgICAgICAgcHJpY2U6IDAsDQogICAgICAgICAgICBjb3N0OiAwLA0KICAgICAgICAgICAgb3RfcHJpY2U6IDAsDQogICAgICAgICAgICBzdG9jazogMCwNCiAgICAgICAgICAgIGJhcl9jb2RlOiAnJywNCiAgICAgICAgICAgIGJhcl9jb2RlX251bWJlcjogJycsDQogICAgICAgICAgfSwNCiAgICAgICAgXSwNCiAgICAgICAgYWN0aXZpdHk6IFsn6buY6K6kJywgJ+enkuadgCcsICfnoI3ku7cnLCAn5ou85ZuiJ10sDQogICAgICAgIGNvdXBvbk5hbWU6IFtdLA0KICAgICAgICBoZWFkZXI6IFtdLA0KICAgICAgICBzZWxlY3RSdWxlOiAnJywNCiAgICAgICAgY291cG9uX2lkczogW10sDQogICAgICAgIGNvbW1hbmRfd29yZDogJycsDQogICAgICAgIG1pbl9xdHk6IDEsDQogICAgICAgIGxhYmVsX2xpc3Q6IFtdLA0KICAgICAgICBwcm90ZWN0aW9uX2xpc3Q6IFtdLA0KICAgICAgfSwNCiAgICAgIHJ1bGVMaXN0OiBbXSwNCiAgICAgIHRlbXBsYXRlTGlzdDogW10sDQogICAgICBjcmVhdGVCbnQ6IHRydWUsDQogICAgICBzaG93SXB1dDogZmFsc2UsDQogICAgICBtYW55Rm9ybVZhbGlkYXRlOiBbXSwNCiAgICAgIC8vIOWNleinhOagvOihqOagvGRhdGENCiAgICAgIG9uZUZvcm1WYWxpZGF0ZTogWw0KICAgICAgICB7DQogICAgICAgICAgcGljOiAnJywNCiAgICAgICAgICBwcmljZTogMCwNCiAgICAgICAgICBjb3N0OiAwLA0KICAgICAgICAgIG90X3ByaWNlOiAwLA0KICAgICAgICAgIHN0b2NrOiAwLA0KICAgICAgICAgIGJhcl9jb2RlOiAnJywNCiAgICAgICAgICBiYXJfY29kZV9udW1iZXI6ICcnLA0KICAgICAgICAgIHdlaWdodDogMCwNCiAgICAgICAgICB2b2x1bWU6IDAsDQogICAgICAgICAgYnJva2VyYWdlOiAwLA0KICAgICAgICAgIGJyb2tlcmFnZV90d286IDAsDQogICAgICAgICAgdmlwX3ByaWNlOiAwLA0KICAgICAgICAgIHZpcnR1YWxfbGlzdDogW10sDQogICAgICAgICAgY291cG9uX2lkOiAwLA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIGltYWdlczogW10sDQogICAgICBpbWFnZXNUYWJsZTogJycsDQogICAgICBjdXJyZW50VGFiOiAnMScsDQogICAgICBpc0Nob2ljZTogJycsDQogICAgICBsb2FkaW5nOiBmYWxzZSwNCiAgICAgIG1vZGFsUGljOiBmYWxzZSwNCiAgICAgIGFkZFZpcnR1YWxNb2RlbDogZmFsc2UsDQogICAgICB0ZW1wbGF0ZTogZmFsc2UsDQogICAgICB1cGxvYWRMaXN0OiBbXSwNCiAgICAgIHRyZWVTZWxlY3Q6IFtdLA0KICAgICAgcGljVGl0OiAnJywNCiAgICAgIHRhYmxlSW5kZXg6IDAsDQogICAgICBydWxlVmFsaWRhdGU6IFJ1bGVWYWxpZGF0ZSwNCiAgICAgIG1hbnlCcm9rZXJhZ2U6IHVuZGVmaW5lZCwNCiAgICAgIG1hbnlCcm9rZXJhZ2VUd286IHVuZGVmaW5lZCwNCiAgICAgIG1hbnlWaXBQcmljZTogdW5kZWZpbmVkLA0KICAgICAgbWFueVZpcERpc2NvdW50OiB1bmRlZmluZWQsDQogICAgICB1cGxvYWQ6IHsNCiAgICAgICAgdmlkZW9Jbmc6IGZhbHNlLCAvLyDmmK/lkKbmmL7npLrov5vluqbmnaHvvJsNCiAgICAgIH0sDQogICAgICB2aWRlb0luZzogZmFsc2UsIC8vIOaYr+WQpuaYvuekuui/m+W6puadoe+8mw0KICAgICAgcHJvZ3Jlc3M6IDAsIC8vIOi/m+W6puadoem7mOiupDANCiAgICAgIHN0b2NrOiAwLA0KICAgICAgZGlza19pbmZvOiAnJywNCiAgICAgIHZpZGVvTGluazogJycsDQogICAgICBhdHRyczogW10sDQogICAgICBhY3Rpdml0eTogeyDpu5jorqQ6ICdyZWQnLCDnp5LmnYA6ICdibHVlJywg56CN5Lu3OiAnZ3JlZW4nLCDmi7zlm6I6ICd5ZWxsb3cnIH0sDQogICAgICBjb3Vwb25OYW1lOiBbXSwNCiAgICAgIHVwZGF0ZUlkczogW10sDQogICAgICB1cGRhdGVOYW1lOiBbXSwNCiAgICAgIGNvdXBvbklkczogJycsDQogICAgICBjb3Vwb25OYW1lczogW10sDQogICAgICByYWtlQmFjazogWw0KICAgICAgICB7DQogICAgICAgICAgdGl0bGU6ICfkuIDnuqfov5TkvaMo5YWDKScsDQogICAgICAgICAgc2xvdDogJ2Jyb2tlcmFnZScsDQogICAgICAgICAgYWxpZ246ICdjZW50ZXInLA0KICAgICAgICAgIHdpZHRoOiA5NSwNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHRpdGxlOiAn5LqM57qn6L+U5L2jKOWFgyknLA0KICAgICAgICAgIHNsb3Q6ICdicm9rZXJhZ2VfdHdvJywNCiAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsDQogICAgICAgICAgd2lkdGg6IDk1LA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIG1lbWJlcjogWw0KICAgICAgICB7DQogICAgICAgICAgdGl0bGU6ICfkvJrlkZjku7cnLA0KICAgICAgICAgIHNsb3Q6ICd2aXBfcHJpY2UnLA0KICAgICAgICAgIGFsaWduOiAnY2VudGVyJywNCiAgICAgICAgICB3aWR0aDogOTUsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB0aXRsZTogJ+S8muWRmOaKmOaJoycsDQogICAgICAgICAgc2xvdDogJ3ZpcF9wcm9wb3J0aW9uJywNCiAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsDQogICAgICAgICAgd2lkdGg6IDk1LA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIGNvbHVtbnNJbnN0YWxNOiBbXSwNCiAgICAgIG1vdmVJbmRleDogJycsDQogICAgICBhZGRWYWx1ZTogJycsDQogICAgICB2aXNpYmxlOiBmYWxzZSwNCiAgICAgIHR5cGVDb25maWc6IFtdLA0KICAgICAgZ29vZHNUeXBlOiBbXSwNCiAgICAgIHBhcmFtc1R5cGVMaXN0OiBbXSwNCiAgICAgIHBhcmFtc1R5cGU6IG51bGwsDQogICAgICBjYW5TZWw6IHRydWUsIC8vIOinhOagvOWbvueJh+a3u+WKoOWIpOaWrQ0KICAgICAgY2hhbmdlQXR0clZhbHVlOiAnJywgLy/kv67mlLnnmoTop4TmoLzlgLwNCiAgICAgIHRhYmxlS2V5OiAwLA0KICAgICAgcHJvdGVjdGlvbkxpc3Q6IFtdLCAvLyDmnI3liqHkv53pmpwNCiAgICAgIGxhYmVsTGlzdDogW10sDQogICAgICB0aWxlTGFiZWxMaXN0OiBbXSwNCiAgICB9Ow0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC4uLm1hcFN0YXRlKCdtZWRpYScsIFsnaXNNb2JpbGUnXSksDQogICAgbGFiZWxXaWR0aCgpIHsNCiAgICAgIHJldHVybiB0aGlzLmlzTW9iaWxlID8gdW5kZWZpbmVkIDogJzEyMHB4JzsNCiAgICB9LA0KICAgIGxhYmVsUG9zaXRpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5pc01vYmlsZSA/ICd0b3AnIDogJ3JpZ2h0JzsNCiAgICB9LA0KICAgIGxhYmVsQm90dG9tKCkgew0KICAgICAgcmV0dXJuIHRoaXMuaXNNb2JpbGUgPyB1bmRlZmluZWQgOiAnMTVweCc7DQogICAgfSwNCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICB0eXBlQ29uZmlnKHZhbCkgew0KICAgICAgaWYgKHZhbC5sZW5ndGgpIHsNCiAgICAgICAgLy8g5a+5dmlydHVhbOS4reeahGlk562J5LqOdmFs5Lit55qEaWTnmoQNCiAgICAgICAgdGhpcy5nb29kc1R5cGUgPSB0aGlzLnZpcnR1YWwuZmlsdGVyKChpdGVtKSA9PiB7DQogICAgICAgICAgcmV0dXJuIHZhbC5pbmNsdWRlcyhpdGVtLmlkICsgJycpOw0KICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuZ29vZHNUeXBlID0gdGhpcy52aXJ0dWFsOw0KICAgICAgfQ0KICAgIH0sDQogIH0sDQogIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7DQogICAgdGhpcy5idXMuJGVtaXQoJ29uVGFnc1ZpZXdSZWZyZXNoUm91dGVyVmlldycsIHRoaXMuJHJvdXRlLnBhdGgpOw0KICAgIG5leHQoKTsNCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMyLnNsaWNlKDAsIDgpOw0KICAgIHRoaXMuZ2V0VG9rZW4oKTsNCiAgfSwNCiAgYXN5bmMgbW91bnRlZCgpIHsNCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkICE9PSAnMCcgJiYgdGhpcy4kcm91dGUucGFyYW1zLmlkKSB7DQogICAgICBhd2FpdCB0aGlzLmdldEluZm8oKTsNCiAgICB9IGVsc2UgaWYgKHRoaXMuJHJvdXRlLnBhcmFtcy5pZCA9PT0gJzAnKSB7DQogICAgICB0aGlzLmdldFByb2R1Y3RDYWNoZSgpOw0KICAgIH0gZWxzZSB7DQogICAgICB0aGlzLmdldHByb2R1Y3RMYWJlbFVzZUxpc3RBcGkoKTsNCiAgICB9DQogICAgaWYgKHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUpIHsNCiAgICAgIHRoaXMubW9kYWxzID0gdHJ1ZTsNCiAgICAgIHRoaXMudHlwZSA9IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGU7DQogICAgfSBlbHNlIHsNCiAgICAgIHRoaXMudHlwZSA9IDA7DQogICAgfQ0KICAgIHRoaXMuZ29vZHNDYXRlZ29yeSgpOw0KICAgIHRoaXMucHJvZHVjdEdldFJ1bGUoKTsNCiAgICB0aGlzLnByb2R1Y3RHZXRUZW1wbGF0ZSgpOw0KICAgIHRoaXMucGFyYW1zR2V0VGVtcGxhdGUoKTsNCiAgICB0aGlzLnVwbG9hZFR5cGUoKTsNCiAgICB0aGlzLnByb2R1Y3RDb25maWcoKTsNCiAgICB0aGlzLndhdGNoQWN0aXZpdHkoKTsNCiAgICB0aGlzLmdldFByb3RlY3Rpb25MaXN0KCk7DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICBnZXRQcm9kdWN0Q2FjaGUoKSB7DQogICAgICBwcm9kdWN0Q2FjaGUoKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YS5pbmZvOw0KICAgICAgICAgIHRoaXMuZ2V0cHJvZHVjdExhYmVsVXNlTGlzdEFwaSgpOw0KDQogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7DQogICAgICAgICAgICBsZXQgY2F0ZV9pZCA9IGRhdGEuY2F0ZV9pZC5tYXAoTnVtYmVyKTsNCiAgICAgICAgICAgIGxldCBsYWJlbF9pZCA9IGRhdGEubGFiZWxfaWQubWFwKE51bWJlcik7DQogICAgICAgICAgICB0aGlzLmF0dHJzID0gZGF0YS5pdGVtcyB8fCBbXTsNCiAgICAgICAgICAgIGxldCBpZHMgPSBbXTsNCiAgICAgICAgICAgIGlmIChkYXRhLmNvdXBvbnMpIHsNCiAgICAgICAgICAgICAgZGF0YS5jb3Vwb25zLm1hcCgoaXRlbSkgPT4gew0KICAgICAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW0uaWQpOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgdGhpcy5jb3Vwb25OYW1lID0gZGF0YS5jb3Vwb25zOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZSA9IGRhdGE7DQogICAgICAgICAgICB0aGlzLmRhdGFMYWJlbCA9IGRhdGEubGFiZWxfaWQ7DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5jb3Vwb25faWRzID0gaWRzOw0KICAgICAgICAgICAgdGhpcy51cGRhdGVJZHMgPSBpZHM7DQogICAgICAgICAgICB0aGlzLnVwZGF0ZU5hbWUgPSBkYXRhLmNvdXBvbnM7DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5jYXRlX2lkID0gY2F0ZV9pZDsNCiAgICAgICAgICAgIHRoaXMub25lRm9ybVZhbGlkYXRlID0gZGF0YS5hdHRyczsNCiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIZWFkZXIodGhpcy5hdHRycyk7DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5sb2dpc3RpY3MgPSBkYXRhLmxvZ2lzdGljcyB8fCBbJzEnXTsNCiAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmhlYWRlciA9IFtdOw0KICAgICAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlID0gZGF0YS5hdHRyczsNCiAgICAgICAgICAgIHRoaXMuc3BlY190eXBlID0gZGF0YS5zcGVjX3R5cGU7DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5pc192aXJ0dWFsID0gZGF0YS5pc192aXJ0dWFsOw0KICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuY3VzdG9tX2Zvcm0gPSBkYXRhLmN1c3RvbV9mb3JtIHx8IFtdOw0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLmN1c3RvbV9mb3JtLmxlbmd0aCAhPSAwKSB7DQogICAgICAgICAgICAgIHRoaXMuY3VzdG9tQnRuID0gMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuYXR0cnMubWFwKChpdGVtKSA9PiB7DQogICAgICAgICAgICAgIGlmIChpdGVtLmFkZF9waWMpIHRoaXMuY2FuU2VsID0gZmFsc2U7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMudmlydHVhbGJ0bihkYXRhLnZpcnR1YWxfdHlwZSwgMSk7DQogICAgICAgICAgICBpZiAoZGF0YS5zcGVjX3R5cGUgPT09IDApIHsNCiAgICAgICAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlID0gW107DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJudCA9IHRydWU7DQogICAgICAgICAgICAgIHRoaXMub25lRm9ybVZhbGlkYXRlID0gWw0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIHBpYzogZGF0YS5pbWFnZSwNCiAgICAgICAgICAgICAgICAgIHByaWNlOiAwLA0KICAgICAgICAgICAgICAgICAgY29zdDogMCwNCiAgICAgICAgICAgICAgICAgIG90X3ByaWNlOiAwLA0KICAgICAgICAgICAgICAgICAgc3RvY2s6IDAsDQogICAgICAgICAgICAgICAgICBiYXJfY29kZTogJycsDQogICAgICAgICAgICAgICAgICBiYXJfY29kZV9udW1iZXI6ICcnLA0KICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAwLA0KICAgICAgICAgICAgICAgICAgdm9sdW1lOiAwLA0KICAgICAgICAgICAgICAgICAgYnJva2VyYWdlOiAwLA0KICAgICAgICAgICAgICAgICAgYnJva2VyYWdlX3R3bzogMCwNCiAgICAgICAgICAgICAgICAgIHZpcF9wcmljZTogMCwNCiAgICAgICAgICAgICAgICAgIHZpcnR1YWxfbGlzdDogW10sDQogICAgICAgICAgICAgICAgICBjb3Vwb25faWQ6IDAsDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMud2F0Y2hBY3Rpdml0eSgpOw0KICAgICAgICAgICAgdGhpcy5zcGluU2hvdyA9IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIGdldFByb3RlY3Rpb25MaXN0KCkgew0KICAgICAgcHJvZHVjdFByb3RlY3Rpb25MaXN0QXBpKHsgcGFnZTogMCwgbGltaXQ6IDAsIHN0YXR1czogMSB9KS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5wcm90ZWN0aW9uTGlzdCA9IHJlcy5kYXRhLmxpc3Q7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGdldHByb2R1Y3RMYWJlbFVzZUxpc3RBcGkoKSB7DQogICAgICBwcm9kdWN0TGFiZWxVc2VMaXN0QXBpKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIC8vIOWQiOW5tuaVsOe7hOS4reaJgOacieeahGxpc3QNCiAgICAgICAgdGhpcy50aWxlTGFiZWxMaXN0ID0gcmVzLmRhdGEuZmxhdE1hcCgoaXRlbSkgPT4gaXRlbS5saXN0KTsNCiAgICAgICAgbGV0IGxhYmVsTGlzdCA9IHJlcy5kYXRhOw0KICAgICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUubGFiZWxfbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5sYWJlbF9saXN0Lm1hcCgoZWwpID0+IHsNCiAgICAgICAgICAgIGxhYmVsTGlzdC5tYXAoKHJlKSA9PiB7DQogICAgICAgICAgICAgIHJlLmxpc3QubWFwKChsYWJlbCkgPT4gew0KICAgICAgICAgICAgICAgIGlmIChsYWJlbC5pZCA9PT0gZWwpIHsNCiAgICAgICAgICAgICAgICAgIGxhYmVsLmFjdGl2ZSA9IHRydWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgIGxhYmVsLmFjdGl2ZSA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBsYWJlbExpc3QubWFwKChlbCkgPT4gew0KICAgICAgICAgICAgZWwubGlzdC5tYXAoKGxhYmVsKSA9PiB7DQogICAgICAgICAgICAgIGxhYmVsLmFjdGl2ZSA9IGZhbHNlOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5sYWJlbExpc3QgPSBsYWJlbExpc3Q7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGFkZFByb3RlY3Rpb24oKSB7DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IHRoaXMuJHJvdXRlUHJvU3RyICsgJy9wcm9kdWN0L3Byb3RlY3Rpb24vbGlzdCcgfSk7DQogICAgfSwNCiAgICBwcm9kdWN0Q29uZmlnKCkgew0KICAgICAgZ2V0UHJvZHVjdFR5cGVDb25maWcoKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy50eXBlQ29uZmlnID0gcmVzLmRhdGE7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGJlZm9yZVVwbG9hZChmaWxlKSB7DQogICAgICByZXR1cm4gaXNGaWxlVXBsb2FkKGZpbGUpOw0KICAgIH0sDQogICAgLy8g5YiG54mH5LiK5LygDQogICAgdmlkZW9TYXZlVG9VcmwoZmlsZSkgew0KICAgICAgaWYgKGlzVmlkZW9VcGxvYWQoZmlsZSkpIHsNCiAgICAgICAgdXBsb2FkQnlQaWVjZXMoew0KICAgICAgICAgIGZpbGU6IGZpbGUsIC8vIOinhumikeWunuS9kw0KICAgICAgICAgIHBpZWNlU2l6ZTogMywgLy8g5YiG54mH5aSn5bCPDQogICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHsNCiAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnZpZGVvX2xpbmsgPSBkYXRhLmZpbGVfcGF0aDsNCiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAxMDA7DQogICAgICAgICAgfSwNCiAgICAgICAgICBlcnJvcjogKGUpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cpOw0KICAgICAgICAgIH0sDQogICAgICAgICAgdXBsb2FkaW5nOiAoY2h1bmssIGFsbENodW5rKSA9PiB7DQogICAgICAgICAgICB0aGlzLnZpZGVvSW5nID0gdHJ1ZTsNCiAgICAgICAgICAgIGxldCBzdCA9IE1hdGguZmxvb3IoKGNodW5rIC8gYWxsQ2h1bmspICogMTAwKTsNCiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBzdDsNCiAgICAgICAgICB9LA0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9LA0KICAgIC8vIOexu+Wei+mAieaLqS/loavlhaXlhoXlrrnliKTmlq0NCiAgICB2aXJ0dWFsYnRuKGluZGV4LCB0eXBlKSB7DQogICAgICBpZiAodHlwZSAhPSAxKSB7DQogICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfnvJbovpHllYblk4HkuI3mlK/mjIHliIfmjaLllYblk4HnsbvlnosnKTsNCiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXNfc3ViID0gW107DQogICAgICAgIGxldCBpZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZDsNCiAgICAgICAgaWYgKGlkKSB7DQogICAgICAgICAgY2hlY2tBY3Rpdml0eUFwaShpZCkNCiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHt9KQ0KICAgICAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID0gdGhpcy5zcGVjX3R5cGU7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID09IDEpIHsNCiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGUoMSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICAvLyDlrprkuYnln7rnoYDllYblk4HlkozomZrmi5/llYblk4HnmoTmoIfnrb7pobXphY3nva4NCiAgICAgIGNvbnN0IGJhc2VIZWFkVGFicyA9IFsNCiAgICAgICAgeyB0aXQ6ICfln7rnoYDkv6Hmga8nLCBuYW1lOiAnMScgfSwNCiAgICAgICAgeyB0aXQ6ICfop4TmoLzlupPlrZgnLCBuYW1lOiAnMicgfSwNCiAgICAgICAgeyB0aXQ6ICfllYblk4Hor6bmg4UnLCBuYW1lOiAnMycgfSwNCiAgICAgICAgeyB0aXQ6ICfnianmtYHorr7nva4nLCBuYW1lOiAnNCcgfSwNCiAgICAgICAgeyB0aXQ6ICfkvJrlkZjku7cv5L2j6YeRJywgbmFtZTogJzUnIH0sDQogICAgICAgIHsgdGl0OiAn6JCl6ZSA6K6+572uJywgbmFtZTogJzYnIH0sDQogICAgICAgIHsgdGl0OiAn5YW25LuW6K6+572uJywgbmFtZTogJzcnIH0sDQogICAgICBdOw0KICAgICAgY29uc3QgdmlydHVhbEhlYWRUYWJzID0gWw0KICAgICAgICB7IHRpdDogJ+WfuuehgOS/oeaBrycsIG5hbWU6ICcxJyB9LA0KICAgICAgICB7IHRpdDogJ+inhOagvOW6k+WtmCcsIG5hbWU6ICcyJyB9LA0KICAgICAgICB7IHRpdDogJ+WVhuWTgeivpuaDhScsIG5hbWU6ICczJyB9LA0KICAgICAgICB7IHRpdDogJ+S8muWRmOS7ty/kvaPph5EnLCBuYW1lOiAnNCcgfSwNCiAgICAgICAgeyB0aXQ6ICfokKXplIDorr7nva4nLCBuYW1lOiAnNScgfSwNCiAgICAgICAgeyB0aXQ6ICflhbbku5borr7nva4nLCBuYW1lOiAnNicgfSwNCiAgICAgIF07DQoNCiAgICAgIHN3aXRjaCAoaW5kZXgpIHsNCiAgICAgICAgY2FzZSAwOiAvLyDmma7pgJrllYblk4ENCiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS52aXJ0dWFsX3R5cGUgPSAwOw0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmlzX3ZpcnR1YWwgPSAwOw0KICAgICAgICAgIHRoaXMuaGVhZFRhYiA9IGJhc2VIZWFkVGFiczsNCiAgICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIDE6IC8vIOWNoeWvhi/nvZHnm5jllYblk4ENCiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS52aXJ0dWFsX3R5cGUgPSAxOw0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnBvc3RhZ2UgPSAwOw0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmlzX3ZpcnR1YWwgPSAxOw0KICAgICAgICAgIHRoaXMuaGVhZFRhYiA9IHZpcnR1YWxIZWFkVGFiczsNCiAgICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIDI6IC8vIOS8mOaDoOWIuOWVhuWTgQ0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZSA9IDI7DQogICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXNfdmlydHVhbCA9IDE7DQogICAgICAgICAgdGhpcy5oZWFkVGFiID0gdmlydHVhbEhlYWRUYWJzOw0KICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgMzogLy8g6Jma5ouf5ZWG5ZOBDQogICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUudmlydHVhbF90eXBlID0gMzsNCiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5pc192aXJ0dWFsID0gMTsNCiAgICAgICAgICB0aGlzLmhlYWRUYWIgPSB2aXJ0dWFsSGVhZFRhYnM7DQogICAgICAgICAgYnJlYWs7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmlrDlop7liIbnsbsNCiAgICBhZGRDYXRlKCkgew0KICAgICAgdGhpcy4kbW9kYWxGb3JtKHByb2R1Y3RDcmVhdGVBcGkoKSkudGhlbigoKSA9PiB0aGlzLmdvb2RzQ2F0ZWdvcnkoKSk7DQogICAgfSwNCiAgICAvLyDnianmtYHmlrnlvI/pgInmi6kNCiAgICBsb2dpc3RpY3NCdG4oZSkgew0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUubG9naXN0aWNzID0gZTsNCiAgICB9LA0KICAgIC8vIOaWsOWinuagh+etvg0KICAgIGFkZExhYmVsKCkgew0KICAgICAgdGhpcy4kbW9kYWxGb3JtKHVzZXJMYWJlbEFkZEFwaSgwKSkudGhlbigoKSA9PiB0aGlzLnVzZXJMYWJlbCgpKTsNCiAgICB9LA0KICAgIC8vIOmAieaLqeagh+etvg0KICAgIGFkZEdvb2RzVGFnKCkgew0KICAgICAgdGhpcy50YWdTaG93ID0gdHJ1ZTsNCiAgICB9LA0KICAgIC8vIOiHquWumuS5ieeVmeiogCDlvIDlkK/lhbPpl60NCiAgICBjdXN0b21NZXNzQnRuKGUpIHsNCiAgICAgIGlmICghZSkgew0KICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5jdXN0b21fZm9ybSA9IFtdOw0KICAgICAgfQ0KICAgICAgdGhpcy5jdXN0b21CdG4gPSBlOw0KICAgIH0sDQogICAgLy8g6Ieq5a6a5LmJ55WZ6KiAIOaWsOWinuihqOWNlQ0KICAgIGFkZGN1c3RvbSgpIHsNCiAgICAgIGlmICh0aGlzLmZvcm1WYWxpZGF0ZS5jdXN0b21fZm9ybS5sZW5ndGggPiA5KSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5pyA5aSa5re75YqgMTDmnaEnKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmN1c3RvbV9mb3JtLnB1c2goew0KICAgICAgICAgIHRpdGxlOiAnJywNCiAgICAgICAgICBsYWJlbDogJ3RleHQnLA0KICAgICAgICAgIHZhbHVlOiAnJywNCiAgICAgICAgICBzdGF0dXM6IGZhbHNlLA0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOWIoOmZpA0KICAgIGRlbGN1c3RvbShpbmRleCkgew0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuY3VzdG9tX2Zvcm0uc3BsaWNlKGluZGV4LCAxKTsNCiAgICB9LA0KICAgIC8vIOmihOWUruWFt+S9k+aXpeacnw0KICAgIG9uY2hhbmdlVGltZShlKSB7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5wcmVzYWxlX3RpbWUgPSBlOw0KICAgIH0sDQogICAgLy8g5ZWG5ZOB6K+m5oOFDQogICAgZ2V0RWRpdG9yQ29udGVudChkYXRhKSB7DQogICAgICB0aGlzLmNvbnRlbnQgPSBkYXRhOw0KICAgIH0sDQogICAgY2FuY2VsKCkgew0KICAgICAgdGhpcy5tb2RhbHMgPSBmYWxzZTsNCiAgICB9LA0KICAgIC8vIOS4iuS8oOWktOmDqHRva2VuDQogICAgZ2V0VG9rZW4oKSB7DQogICAgICB0aGlzLmhlYWRlclsnQXV0aG9yaS16YXRpb24nXSA9ICdCZWFyZXIgJyArIGdldENvb2tpZXMoJ3Rva2VuJyk7DQogICAgfSwNCiAgICAvLyDlr7zlhaXljaHlr4YNCiAgICB1cEZpbGUocmVzKSB7DQogICAgICBpbXBvcnRDYXJkKHsgZmlsZTogcmVzLmRhdGEuc3JjIH0pLnRoZW4oKHJlcykgPT4gew0KICAgICAgICB0aGlzLnZpcnR1YWxMaXN0ID0gdGhpcy52aXJ0dWFsTGlzdC5jb25jYXQocmVzLmRhdGEpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvL+iOt+WPluinhumikeS4iuS8oOexu+Weiw0KICAgIHVwbG9hZFR5cGUoKSB7DQogICAgICB1cGxvYWRUeXBlKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMudXBsb2FkX3R5cGUgPSByZXMuZGF0YS51cGxvYWRfdHlwZTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5Yid5aeL5YyW5pWw5o2u5bGV56S6DQogICAgaW5mb0RhdGEoZGF0YSwgaXNDb3B5KSB7DQogICAgICBsZXQgY2F0ZV9pZCA9IGRhdGEuY2F0ZV9pZC5tYXAoTnVtYmVyKTsNCiAgICAgIGxldCBsYWJlbF9pZCA9IGRhdGEubGFiZWxfaWQubWFwKE51bWJlcik7DQogICAgICB0aGlzLmF0dHJzID0gZGF0YS5pdGVtcyB8fCBbXTsNCiAgICAgIGxldCBpZHMgPSBbXTsNCiAgICAgIGRhdGEuY291cG9ucy5tYXAoKGl0ZW0pID0+IHsNCiAgICAgICAgaWRzLnB1c2goaXRlbS5pZCk7DQogICAgICB9KTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlID0gZGF0YTsNCiAgICAgIHRoaXMuc2VsZXRWaWRlbyA9IGRhdGEuc2VsZXRWaWRlbzsNCiAgICAgIHRoaXMuY29udGVudHMgPSBkYXRhLmRlc2NyaXB0aW9uOw0KICAgICAgdGhpcy5jb3Vwb25OYW1lID0gZGF0YS5jb3Vwb25zOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuY291cG9uX2lkcyA9IGlkczsNCiAgICAgIHRoaXMudXBkYXRlSWRzID0gaWRzOw0KICAgICAgdGhpcy5kYXRhTGFiZWwgPSBkYXRhLmxhYmVsX2lkOw0KICAgICAgdGhpcy51cGRhdGVOYW1lID0gZGF0YS5jb3Vwb25zOw0KICAgICAgdGhpcy52aXJ0dWFsYnRuKGRhdGEudmlydHVhbF90eXBlLCAxKTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmxvZ2lzdGljcyA9IGRhdGEubG9naXN0aWNzIHx8IFsnMSddOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuY3VzdG9tX2Zvcm0gPSBkYXRhLmN1c3RvbV9mb3JtIHx8IFtdOw0KICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLmN1c3RvbV9mb3JtLmxlbmd0aCAhPSAwKSB7DQogICAgICAgIHRoaXMuY3VzdG9tQnRuID0gMTsNCiAgICAgIH0NCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmNhdGVfaWQgPSBjYXRlX2lkOw0KICAgICAgaWYgKGRhdGEuYXR0cikgew0KICAgICAgICB0aGlzLm9uZUZvcm1WYWxpZGF0ZSA9IFtkYXRhLmF0dHJdOw0KICAgICAgICB0aGlzLm9uZUZvcm1WYWxpZGF0ZVswXS52aXBfcHJvcG9ydGlvbiA9ICgNCiAgICAgICAgICAodGhpcy5vbmVGb3JtVmFsaWRhdGVbMF0udmlwX3ByaWNlIC8gdGhpcy5vbmVGb3JtVmFsaWRhdGVbMF0ucHJpY2UpICoNCiAgICAgICAgICAxMDANCiAgICAgICAgKS50b0ZpeGVkKDIpOw0KICAgICAgfQ0KICAgICAgdGhpcy5nZXRwcm9kdWN0TGFiZWxVc2VMaXN0QXBpKCk7DQoNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmhlYWRlciA9IFtdOw0KICAgICAgdGhpcy5zcGVjX3R5cGUgPSBkYXRhLnNwZWNfdHlwZTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnNwZWNfdHlwZSA9IHRoaXMuc3BlY190eXBlOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXNfdmlydHVhbCA9IGRhdGEuaXNfdmlydHVhbDsNCiAgICAgIHRoaXMuYXR0cnMubWFwKChpdGVtKSA9PiB7DQogICAgICAgIGlmIChpdGVtLmFkZF9waWMpIHRoaXMuY2FuU2VsID0gZmFsc2U7DQogICAgICB9KTsNCiAgICAgIGlmIChkYXRhLnNwZWNfdHlwZSA9PT0gMCkgew0KICAgICAgICB0aGlzLm1hbnlGb3JtVmFsaWRhdGUgPSBbXTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuY3JlYXRlQm50ID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5vbmVGb3JtVmFsaWRhdGUgPSBbDQogICAgICAgICAgew0KICAgICAgICAgICAgcGljOiAnJywNCiAgICAgICAgICAgIHByaWNlOiAwLA0KICAgICAgICAgICAgY29zdDogMCwNCiAgICAgICAgICAgIG90X3ByaWNlOiAwLA0KICAgICAgICAgICAgc3RvY2s6IDAsDQogICAgICAgICAgICBiYXJfY29kZTogJycsDQogICAgICAgICAgICBiYXJfY29kZV9udW1iZXI6ICcnLA0KICAgICAgICAgICAgd2VpZ2h0OiAwLA0KICAgICAgICAgICAgdm9sdW1lOiAwLA0KICAgICAgICAgICAgYnJva2VyYWdlOiAwLA0KICAgICAgICAgICAgYnJva2VyYWdlX3R3bzogMCwNCiAgICAgICAgICAgIHZpcF9wcmljZTogMCwNCiAgICAgICAgICAgIHZpcnR1YWxfbGlzdDogW10sDQogICAgICAgICAgICBjb3Vwb25faWQ6IDAsDQogICAgICAgICAgfSwNCiAgICAgICAgXTsNCg0KICAgICAgICB0aGlzLmdlbmVyYXRlSGVhZGVyKHRoaXMuYXR0cnMpOw0KICAgICAgICB0aGlzLm1hbnlGb3JtVmFsaWRhdGUgPSBbLi4udGhpcy5vbmVGb3JtQmF0Y2gsIC4uLmRhdGEuYXR0cnNdOw0KICAgICAgfQ0KDQogICAgICBzZXRUaW1lb3V0KChlKSA9PiB7DQogICAgICAgIHRoaXMuY2hlY2tBbGxHcm91cChkYXRhLmlzX3N1Yik7DQogICAgICB9LCAxMDAwKTsNCiAgICAgIHRoaXMud2F0Y2hBY3Rpdml0eSgpOw0KICAgIH0sDQogICAgLy/lhbPpl63mt5jlrp3lvLnnqpflubbnlJ/miJDmlbDmja7vvJsNCiAgICBvbkNsb3NlKGRhdGEpIHsNCiAgICAgIHRoaXMubW9kYWxzID0gZmFsc2U7DQogICAgICB0aGlzLmluZm9EYXRhKGRhdGEsIDEpOw0KICAgIH0sDQoNCiAgICBjaGVja01vdmUoZXZ0KSB7DQogICAgICB0aGlzLm1vdmVJbmRleCA9IGV2dC5kcmFnZ2VkQ29udGV4dC5pbmRleDsNCiAgICB9LA0KICAgIGVuZCgpIHsNCiAgICAgIHRoaXMubW92ZUluZGV4ID0gJyc7DQogICAgICB0aGlzLmdlbmVyYXRlKDEpOw0KICAgIH0sDQogICAgLy8g5Y2V54us6K6+572u5Lya5ZGY6K6+572uDQogICAgY2hlY2tBbGxHcm91cENoYW5nZShkYXRhKSB7DQogICAgICB0aGlzLmNoZWNrQWxsR3JvdXAoZGF0YSk7DQogICAgfSwNCiAgICBjaGVja0FsbEdyb3VwKGRhdGEpIHsNCiAgICAgIGxldCBlbmRMZW5ndGggPSB0aGlzLmF0dHJzLmxlbmd0aCArIDM7DQogICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID09PSAwKSB7DQogICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMikgew0KICAgICAgICAgIHRoaXMuY29sdW1uc0luc3RhbGwgPSB0aGlzLmNvbHVtbnMyLnNsaWNlKDAsIGVuZExlbmd0aCkuY29uY2F0KHRoaXMucmFrZUJhY2spLmNvbmNhdCh0aGlzLm1lbWJlcik7DQogICAgICAgIH0gZWxzZSBpZiAoZGF0YS5pbmRleE9mKDApID4gLTEpIHsNCiAgICAgICAgICB0aGlzLmNvbHVtbnNJbnN0YWxsID0gdGhpcy5jb2x1bW5zMi5zbGljZSgwLCBlbmRMZW5ndGgpLmNvbmNhdCh0aGlzLm1lbWJlcik7DQogICAgICAgIH0gZWxzZSBpZiAoZGF0YS5pbmRleE9mKDEpID4gLTEpIHsNCiAgICAgICAgICB0aGlzLmNvbHVtbnNJbnN0YWxsID0gdGhpcy5jb2x1bW5zMi5zbGljZSgwLCBlbmRMZW5ndGgpLmNvbmNhdCh0aGlzLnJha2VCYWNrKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmNvbHVtbnNJbnN0YWxsID0gdGhpcy5jb2x1bW5zMi5zbGljZSgwLCBlbmRMZW5ndGgpOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHsNCiAgICAgICAgICB0aGlzLmNvbHVtbnNJbnN0YWwyID0gdGhpcy5jb2x1bW5zSW5zdGFsTQ0KICAgICAgICAgICAgLnNsaWNlKDAsIGVuZExlbmd0aCArIDEpDQogICAgICAgICAgICAuY29uY2F0KHRoaXMucmFrZUJhY2spDQogICAgICAgICAgICAuY29uY2F0KHRoaXMubWVtYmVyKTsNCiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmluZGV4T2YoMCkgPiAtMSkgew0KICAgICAgICAgIHRoaXMuY29sdW1uc0luc3RhbDIgPSB0aGlzLmNvbHVtbnNJbnN0YWxNLnNsaWNlKDAsIGVuZExlbmd0aCkuY29uY2F0KHRoaXMubWVtYmVyKTsNCiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmluZGV4T2YoMSkgPiAtMSkgew0KICAgICAgICAgIHRoaXMuY29sdW1uc0luc3RhbDIgPSB0aGlzLmNvbHVtbnNJbnN0YWxNLnNsaWNlKDAsIGVuZExlbmd0aCkuY29uY2F0KHRoaXMucmFrZUJhY2spOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuY29sdW1uc0luc3RhbDIgPSB0aGlzLmNvbHVtbnNJbnN0YWxNLnNsaWNlKDAsIGVuZExlbmd0aCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOa3u+WKoOS8mOaDoOWIuA0KICAgIGFkZENvdXBvbigpIHsNCiAgICAgIHRoaXMuJHJlZnMuY291cG9uVGVtcGxhdGVzLmlzVGVtcGxhdGUgPSB0cnVlOw0KICAgICAgdGhpcy4kcmVmcy5jb3Vwb25UZW1wbGF0ZXMudGFibGVMaXN0KCk7DQogICAgfSwNCiAgICAvLyDop4TmoLzkuK3kvJjmg6DliLjmn6XnnIsNCiAgICBzZWUoZGF0YSwgbmFtZSwgaW5kZXgpIHsNCiAgICAgIHRoaXMudGFiTmFtZSA9IG5hbWU7DQogICAgICB0aGlzLnRhYkluZGV4ID0gaW5kZXg7DQoNCiAgICAgIGlmICh0aGlzLmZvcm1WYWxpZGF0ZS52aXJ0dWFsX3R5cGUgPT09IDEpIHsNCiAgICAgICAgaWYgKGRhdGEuZGlza19pbmZvICE9ICcnKSB7DQogICAgICAgICAgdGhpcy5kaXNrX3R5cGUgPSAxOw0KICAgICAgICAgIHRoaXMuZGlza19pbmZvID0gZGF0YS5kaXNrX2luZm87DQogICAgICAgICAgdGhpcy5zdG9jayA9IGRhdGEuc3RvY2s7DQogICAgICAgIH0gZWxzZSBpZiAoZGF0YS52aXJ0dWFsX2xpc3QubGVuZ3RoKSB7DQogICAgICAgICAgdGhpcy5kaXNrX3R5cGUgPSAyOw0KICAgICAgICAgIHRoaXMudmlydHVhbExpc3QgPSBkYXRhLnZpcnR1YWxfbGlzdDsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmFkZFZpcnR1YWxNb2RlbCA9IHRydWU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLiRyZWZzLmdvb2RzQ291cG9uLmlzVGVtcGxhdGUgPSB0cnVlOw0KICAgICAgICB0aGlzLiRyZWZzLmdvb2RzQ291cG9uLnRhYmxlTGlzdCgzKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOS/ruaUueWIhuS9o+avlOS+iw0KICAgIGNoYW5nZURpc2NvdW50KGluZGV4LCB0eXBlID0gJ21hbnlGb3JtVmFsaWRhdGUnKSB7DQogICAgICAvLyDmoLnmja7liIbkvaPmr5TkvosgdmlwX3Byb3BvcnRpb24g5L+u5pS55Lya5ZGY5Lu3IOS/neeVmTLkvY3lsI/mlbANCiAgICAgIHRoaXNbdHlwZV1baW5kZXhdLnZpcF9wcmljZSA9ICh0aGlzW3R5cGVdW2luZGV4XS5wcmljZSAqICh0aGlzW3R5cGVdW2luZGV4XS52aXBfcHJvcG9ydGlvbiAvIDEwMCkpLnRvRml4ZWQoMik7DQogICAgfSwNCiAgICAvLyDkv67mlLnkvJrlkZjku7cNCiAgICBjaGFuZ2VWaXBQcmljZShpbmRleCwgdHlwZSA9ICdtYW55Rm9ybVZhbGlkYXRlJykgew0KICAgICAgLy8g5qC55o2u5Lya5ZGY5Lu36K6h566X5Ye65YiG5L2j5q+U5L6LDQogICAgICB0aGlzW3R5cGVdW2luZGV4XS52aXBfcHJvcG9ydGlvbiA9ICgodGhpc1t0eXBlXVtpbmRleF0udmlwX3ByaWNlIC8gdGhpc1t0eXBlXVtpbmRleF0ucHJpY2UpICogMTAwKS50b0ZpeGVkKDIpOw0KICAgIH0sDQogICAgLy8g5re75Yqg5LyY5oOg5Yi4DQogICAgYWRkR29vZHNDb3Vwb24oaW5kZXgsIG5hbWUpIHsNCiAgICAgIHRoaXMudGFiSW5kZXggPSBpbmRleDsNCiAgICAgIHRoaXMudGFiTmFtZSA9IG5hbWU7DQogICAgICB0aGlzLiRyZWZzLmdvb2RzQ291cG9uLmlzVGVtcGxhdGUgPSB0cnVlOw0KICAgICAgdGhpcy4kcmVmcy5nb29kc0NvdXBvbi50YWJsZUxpc3QoMyk7DQogICAgfSwNCiAgICBhZGRWaXJ0dWFsKGluZGV4LCBuYW1lKSB7DQogICAgICB0aGlzLnRhYkluZGV4ID0gaW5kZXg7DQogICAgICB0aGlzLnRhYk5hbWUgPSBuYW1lOw0KICAgICAgdGhpcy5hZGRWaXJ0dWFsTW9kZWwgPSB0cnVlOw0KICAgIH0sDQogICAgLy8g5o+Q5Lqk5Y2h5a+G5L+h5oGvDQogICAgdXBWaXJ0dWFsKCkgew0KICAgICAgaWYgKHRoaXMuZGlza190eXBlID09IDIpIHsNCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZpcnR1YWxMaXN0Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudmlydHVhbExpc3RbaV07DQogICAgICAgICAgaWYgKCFlbGVtZW50LnZhbHVlKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fovpPlhaXmiYDmnInljaHlr4YnKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy4kc2V0KHRoaXNbdGhpcy50YWJOYW1lXVt0aGlzLnRhYkluZGV4XSwgJ3ZpcnR1YWxfbGlzdCcsIHRoaXMudmlydHVhbExpc3QpOw0KICAgICAgICB0aGlzLiRzZXQodGhpc1t0aGlzLnRhYk5hbWVdW3RoaXMudGFiSW5kZXhdLCAnc3RvY2snLCB0aGlzLnZpcnR1YWxMaXN0Lmxlbmd0aCk7DQogICAgICAgIHRoaXMudmlydHVhbExpc3QgPSBbDQogICAgICAgICAgew0KICAgICAgICAgICAga2V5OiAnJywNCiAgICAgICAgICAgIHZhbHVlOiAnJywNCiAgICAgICAgICB9LA0KICAgICAgICBdOw0KICAgICAgICB0aGlzLiRzZXQodGhpc1t0aGlzLnRhYk5hbWVdW3RoaXMudGFiSW5kZXhdLCAnZGlza19pbmZvJywgJycpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKCF0aGlzLmRpc2tfaW5mby5sZW5ndGgpIHsNCiAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+35aGr5YaZ5Y2h5a+G5L+h5oGvJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCF0aGlzLnN0b2NrKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+Whq+WGmeW6k+WtmOaVsOmHjycpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuJHNldCh0aGlzW3RoaXMudGFiTmFtZV1bdGhpcy50YWJJbmRleF0sICdzdG9jaycsIE51bWJlcih0aGlzLnN0b2NrKSk7DQogICAgICAgIHRoaXMuJHNldCh0aGlzW3RoaXMudGFiTmFtZV1bdGhpcy50YWJJbmRleF0sICdzdG9jaycsIE51bWJlcih0aGlzLnN0b2NrKSk7DQogICAgICAgIHRoaXMuJHNldCh0aGlzW3RoaXMudGFiTmFtZV1bdGhpcy50YWJJbmRleF0sICdkaXNrX2luZm8nLCB0aGlzLmRpc2tfaW5mbyk7DQogICAgICAgIHRoaXMuJHNldCh0aGlzW3RoaXMudGFiTmFtZV1bdGhpcy50YWJJbmRleF0sICd2aXJ0dWFsX2xpc3QnLCBbXSk7DQogICAgICB9DQogICAgICB0aGlzLmFkZFZpcnR1YWxNb2RlbCA9IGZhbHNlOw0KICAgICAgdGhpcy5jbG9zZVZpcnR1YWwoKTsNCiAgICB9LA0KICAgIC8vICDliJ3lp4vljJbljaHlr4bmlbDmja7kv6Hmga8NCiAgICBjbG9zZVZpcnR1YWwoKSB7DQogICAgICB0aGlzLmFkZFZpcnR1YWxNb2RlbCA9IGZhbHNlOw0KICAgICAgdGhpcy52aXJ0dWFsTGlzdCA9IFsNCiAgICAgICAgew0KICAgICAgICAgIGtleTogJycsDQogICAgICAgICAgdmFsdWU6ICcnLA0KICAgICAgICB9LA0KICAgICAgXTsNCiAgICAgIHRoaXMuZGlza19pbmZvID0gJyc7DQogICAgICB0aGlzLnN0b2NrID0gMDsNCiAgICB9LA0KICAgIC8v5a+56LGh5pWw57uE5Y676YeN77ybDQogICAgdW5pcXVlQXJyYXkoYXJyKSB7DQogICAgICBjb25zdCBzZWVuID0ge307DQogICAgICByZXR1cm4gYXJyLmZpbHRlcigoaXRlbSkgPT4gew0KICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShpdGVtKTsgLy8g5L2/55SoIEpTT04uc3RyaW5naWZ5IOeUn+aIkOWUr+S4gOmUrg0KICAgICAgICBpZiAoc2VlbltrZXldKSB7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHNlZW5ba2V5XSA9IHRydWU7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6I635Y+W5LyY5oOg5Yi4aWTmlbDmja4NCiAgICBuYW1lSWQoaWQsIG5hbWVzKSB7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5jb3Vwb25faWRzID0gaWQ7DQogICAgICB0aGlzLmNvdXBvbk5hbWUgPSB0aGlzLnVuaXF1ZUFycmF5KG5hbWVzKTsNCiAgICB9LA0KICAgIC8vIOiOt+WPluS8mOaDoOWIuOS/oeaBrw0KICAgIGdvb2RzQ291cG9uSWQoZGF0YSkgew0KICAgICAgdGhpcy4kc2V0KHRoaXNbdGhpcy50YWJOYW1lXVt0aGlzLnRhYkluZGV4XSwgJ2NvdXBvbl9pZCcsIGRhdGEuaWQpOw0KICAgICAgdGhpcy4kc2V0KHRoaXNbdGhpcy50YWJOYW1lXVt0aGlzLnRhYkluZGV4XSwgJ2NvdXBvbl9uYW1lJywgZGF0YS50aXRsZSk7DQogICAgICB0aGlzLiRyZWZzLmdvb2RzQ291cG9uLmlzVGVtcGxhdGUgPSBmYWxzZTsNCiAgICB9LA0KICAgIGhhbmRsZUNsb3NlKG5hbWUpIHsNCiAgICAgIGxldCBpbmRleCA9IHRoaXMuY291cG9uTmFtZS5pbmRleE9mKG5hbWUpOw0KICAgICAgdGhpcy5jb3Vwb25OYW1lLnNwbGljZShpbmRleCwgMSk7DQogICAgICBsZXQgY291cG9uSWRzID0gdGhpcy5mb3JtVmFsaWRhdGUuY291cG9uX2lkczsNCiAgICAgIGNvdXBvbklkcy5zcGxpY2UoaW5kZXgsIDEpOw0KICAgICAgdGhpcy51cGRhdGVJZHMgPSBjb3Vwb25JZHM7DQogICAgICB0aGlzLnVwZGF0ZU5hbWUgPSB0aGlzLmNvdXBvbk5hbWU7DQogICAgfSwNCiAgICAvLyDmt7vliqDov5DotLnmqKHmnb8NCiAgICBhZGRUZW1wKCkgew0KICAgICAgdGhpcy4kcmVmcy50ZW1wbGF0ZXMuaXNUZW1wbGF0ZSA9IHRydWU7DQogICAgfSwNCiAgICBhZGRWaWRlbygpIHsNCiAgICAgIHRoaXMuJHZpZGVvTW9kYWwoKGUpID0+IHsNCiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUudmlkZW9fbGluayA9IGU7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOWIoOmZpOinhumike+8mw0KICAgIGRlbFZpZGVvKCkgew0KICAgICAgdGhpcy4kc2V0KHRoaXMuZm9ybVZhbGlkYXRlLCAndmlkZW9fbGluaycsICcnKTsNCiAgICAgIHRoaXMuJHNldCh0aGlzLCAncHJvZ3Jlc3MnLCAwKTsNCiAgICAgIHRoaXMudmlkZW9JbmcgPSBmYWxzZTsNCiAgICAgIHRoaXMudXBsb2FkLnZpZGVvSW5nID0gZmFsc2U7DQogICAgfSwNCiAgICB6aF91cGxvYWRGaWxlKCkgew0KICAgICAgaWYgKHRoaXMuc2VsZXRWaWRlbyA9PSAxKSB7DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnZpZGVvX2xpbmsgPSB0aGlzLnZpZGVvTGluazsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJHJlZnMucmVmaWQuY2xpY2soKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOS4iuS8oOinhumikQ0KICAgIHpoX3VwbG9hZEZpbGVfY2hhbmdlKGV2ZmlsZSkgew0KICAgICAgbGV0IHN1ZmZpeCA9IGV2ZmlsZS50YXJnZXQuZmlsZXNbMF0ubmFtZS5zdWJzdHIoZXZmaWxlLnRhcmdldC5maWxlc1swXS5uYW1lLmluZGV4T2YoJy4nKSk7DQogICAgICBpZiAoc3VmZml4LmluZGV4T2YoJy5tcDQnKSA9PT0gLTEpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+WPquiDveS4iuS8oE1QNOaWh+S7ticpOw0KICAgICAgfQ0KICAgICAgbGV0IHR5cGVzID0gew0KICAgICAgICBrZXk6IGV2ZmlsZS50YXJnZXQuZmlsZXNbMF0ubmFtZSwNCiAgICAgICAgY29udGVudFR5cGU6IGV2ZmlsZS50YXJnZXQuZmlsZXNbMF0udHlwZSwNCiAgICAgIH07DQogICAgICBwcm9kdWN0R2V0VGVtcEtleXNBcGkodHlwZXMpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiR2aWRlb0Nsb3VkDQogICAgICAgICAgICAudmlkZW9VcGxvYWQoew0KICAgICAgICAgICAgICB0eXBlOiByZXMuZGF0YS50eXBlLA0KICAgICAgICAgICAgICBldmZpbGU6IGV2ZmlsZSwNCiAgICAgICAgICAgICAgcmVzOiByZXMsDQogICAgICAgICAgICAgIHVwbG9hZGluZyhzdGF0dXMsIHByb2dyZXNzKSB7DQogICAgICAgICAgICAgICAgdGhpcy51cGxvYWQudmlkZW9JbmcgPSBzdGF0dXM7DQogICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7DQogICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnZpZGVvX2xpbmsgPSByZXMudXJsOw0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+inhumikeS4iuS8oOaIkOWKnycpOw0KICAgICAgICAgICAgICB0aGlzLnVwbG9hZC52aWRlb0luZyA9IGZhbHNlOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5LiK5LiA6aG177ybDQogICAgdXBUYWIoKSB7DQogICAgICB0aGlzLmN1cnJlbnRUYWIgPSAoTnVtYmVyKHRoaXMuY3VycmVudFRhYikgLSAxKS50b1N0cmluZygpOw0KICAgIH0sDQogICAgLy8g5LiL5LiA6aG177ybDQogICAgZG93blRhYigpIHsNCiAgICAgIHRoaXMuY3VycmVudFRhYiA9IChOdW1iZXIodGhpcy5jdXJyZW50VGFiKSArIDEpLnRvU3RyaW5nKCk7DQogICAgfSwNCiAgICAvLyDlsZ7mgKflvLnnqpflm57osIPlh73mlbDvvJsNCiAgICB1c2VyU2VhcmNocygpIHsNCiAgICAgIHRoaXMucHJvZHVjdEdldFJ1bGUoKTsNCiAgICB9LA0KICAgIC8vIOa3u+WKoOinhOWIme+8mw0KICAgIGFkZFJ1bGUoKSB7DQogICAgICB0aGlzLiRyZWZzLmFkZGF0dHIubW9kYWwgPSB0cnVlOw0KICAgIH0sDQogICAgLy8g5om56YeP6K6+572u5YiG5L2j77ybDQogICAgYnJva2VyYWdlU2V0VXAoKSB7DQogICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuaXNfc3ViLmluZGV4T2YoMSkgPiAtMSkgew0KICAgICAgICBpZiAodGhpcy5tYW55QnJva2VyYWdlIDw9IDAgfHwgdGhpcy5tYW55QnJva2VyYWdlVHdvIDw9IDApIHsNCiAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+35aGr5YaZ6L+U5L2j6YeR6aKd5ZCO6L+b6KGM5om56YeP5re75YqgJyk7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtVmFsaWRhdGUuaXNfc3ViLmluZGV4T2YoMCkgPiAtMSkgew0KICAgICAgICBpZiAodGhpcy5tYW55VmlwUHJpY2UgPD0gMCkgew0KICAgICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7floavlhpnkvJrlkZjku7flkI7ov5vooYzmibnph4/mt7vliqAnKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLmlzX3N1Yi5sZW5ndGggPT09IDIpIHsNCiAgICAgICAgaWYgKHRoaXMubWFueUJyb2tlcmFnZSA8PSAwIHx8IHRoaXMubWFueUJyb2tlcmFnZVR3byA8PSAwKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+Whq+WGmeWujOmHkemineWQjui/m+ihjOaJuemHj+a3u+WKoCcpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0aGlzLm1hbnlWaXBQcmljZSA+IDAgJiYgdGhpcy5tYW55VmlwRGlzY291bnQgPiAwKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+S8muWRmOS7t+WSjOS8muWRmOaKmOaJo+WPquiDveS6jOmAieS4gOa3u+WKoCcpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBmb3IgKGxldCB2YWwgb2YgdGhpcy5tYW55Rm9ybVZhbGlkYXRlKSB7DQogICAgICAgIHRoaXMubWFueUJyb2tlcmFnZSAhPSB1bmRlZmluZWQgJiYgdGhpcy4kc2V0KHZhbCwgJ2Jyb2tlcmFnZScsIHRoaXMubWFueUJyb2tlcmFnZSk7DQogICAgICAgIHRoaXMubWFueUJyb2tlcmFnZVR3byAhPSB1bmRlZmluZWQgJiYgdGhpcy4kc2V0KHZhbCwgJ2Jyb2tlcmFnZV90d28nLCB0aGlzLm1hbnlCcm9rZXJhZ2VUd28pOw0KICAgICAgICBpZiAodGhpcy5tYW55VmlwUHJpY2UgIT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgdGhpcy4kc2V0KHZhbCwgJ3ZpcF9wcmljZScsIHRoaXMubWFueVZpcFByaWNlKTsNCiAgICAgICAgICB0aGlzLiRzZXQodmFsLCAndmlwX3Byb3BvcnRpb24nLCAoKHZhbC52aXBfcHJpY2UgLyB2YWwucHJpY2UpICogMTAwKS50b0ZpeGVkKDIpKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRzZXQodmFsLCAndmlwX3Byb3BvcnRpb24nLCB0aGlzLm1hbnlWaXBEaXNjb3VudCk7DQogICAgICAgICAgdGhpcy4kc2V0KHZhbCwgJ3ZpcF9wcmljZScsICh2YWwucHJpY2UgKiAodGhpcy5tYW55VmlwRGlzY291bnQgLyAxMDApKS50b0ZpeGVkKDIpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g5om56YeP6K6+572u5Lya5ZGY5Lu3DQogICAgdmlwUHJpY2VTZXRVcCgpIHsNCiAgICAgIGlmICh0aGlzLm1hbnlWaXBQcmljZSA8PSAwKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7floavlhpnkvJrlkZjku7flnKjov5vooYzmibnph4/mt7vliqAnKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGZvciAobGV0IHZhbCBvZiB0aGlzLm1hbnlGb3JtVmFsaWRhdGUpIHsNCiAgICAgICAgICB0aGlzLiRzZXQodmFsLCAndmlwX3ByaWNlJywgdGhpcy5tYW55VmlwUHJpY2UpOw0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmlrDlop7ljaHlr4YNCiAgICBoYW5kbGVBZGQoKSB7DQogICAgICB0aGlzLnZpcnR1YWxMaXN0LnB1c2goew0KICAgICAgICBrZXk6ICcnLA0KICAgICAgICB2YWx1ZTogJycsDQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOWIneWni+WMluWNoeWvhuS/oeaBrw0KICAgIGluaXRWaXJ0dWFsRGF0YShzdGF0dXMpIHsNCiAgICAgIHRoaXMudmlydHVhbExpc3QgPSBbDQogICAgICAgIHsNCiAgICAgICAgICBrZXk6ICcnLA0KICAgICAgICAgIHZhbHVlOiAnJywNCiAgICAgICAgfSwNCiAgICAgIF07DQogICAgfSwNCiAgICByZW1vdmVWaXJ0dWFsKGluZGV4KSB7DQogICAgICB0aGlzLnZpcnR1YWxMaXN0LnNwbGljZShpbmRleCwgMSk7DQogICAgfSwNCiAgICAvLyDmuIXnqbrmibnph4/op4TmoLzkv6Hmga8NCiAgICBiYXRjaERlbCgpIHsNCiAgICAgIHRoaXMub25lRm9ybUJhdGNoID0gWw0KICAgICAgICB7DQogICAgICAgICAgcGljOiAnJywNCiAgICAgICAgICBwcmljZTogdm9pZCAwLA0KICAgICAgICAgIGNvc3Q6IHZvaWQgMCwNCiAgICAgICAgICBvdF9wcmljZTogdm9pZCAwLA0KICAgICAgICAgIHN0b2NrOiB2b2lkIDAsDQogICAgICAgICAgYmFyX2NvZGU6ICcnLA0KICAgICAgICAgIGJhcl9jb2RlX251bWJlcjogJycsDQogICAgICAgICAgd2VpZ2h0OiB2b2lkIDAsDQogICAgICAgICAgdm9sdW1lOiB2b2lkIDAsDQogICAgICAgICAgdmlydHVhbF9saXN0OiBbXSwNCiAgICAgICAgfSwNCiAgICAgIF07DQogICAgfSwNCiAgICBjb25maXJtKG5hbWUpIHsNCiAgICAgIHRoaXMuY3JlYXRlQm50ID0gdHJ1ZTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnNlbGVjdFJ1bGUgPSBuYW1lOw0KICAgICAgdGhpcy5hdHRycyA9IFtdOw0KICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLnNlbGVjdFJ1bGUudHJpbSgpLmxlbmd0aCA8PSAwKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6nlsZ7mgKcnKTsNCiAgICAgIH0NCiAgICAgIHRoaXMucnVsZUxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHsNCiAgICAgICAgaWYgKGl0ZW0ucnVsZV9uYW1lID09PSB0aGlzLmZvcm1WYWxpZGF0ZS5zZWxlY3RSdWxlKSB7DQogICAgICAgICAgdGhpcy5hdHRycyA9IFsuLi5pdGVtLnJ1bGVfdmFsdWVdOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICAgIHRoaXMuY2FuU2VsID0gdHJ1ZTsNCiAgICAgIHRoaXMuZ2VuZXJhdGVBdHRyKHRoaXMuYXR0cnMpOw0KICAgIH0sDQogICAgLy8g6YCJ5oup6KeE5qC85qih5p2/DQogICAgaGFuZGxlQ29tbWFuZChlKSB7fSwNCiAgICAvLyDojrflj5bllYblk4HlsZ7mgKfmqKHmnb/vvJsNCiAgICBwcm9kdWN0R2V0UnVsZSgpIHsNCiAgICAgIHByb2R1Y3RHZXRSdWxlQXBpKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMucnVsZUxpc3QgPSByZXMuZGF0YTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6I635Y+W6L+Q6LS55qih5p2/77ybDQogICAgcHJvZHVjdEdldFRlbXBsYXRlKCkgew0KICAgICAgcHJvZHVjdEdldFRlbXBsYXRlQXBpKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMudGVtcGxhdGVMaXN0ID0gcmVzLmRhdGE7DQogICAgICB9KTsNCiAgICB9LA0KICAgIHBhcmFtc0dldFRlbXBsYXRlKCkgew0KICAgICAgcGFyYW1MaXN0QXBpKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMucGFyYW1zVHlwZUxpc3QgPSByZXMuZGF0YS5saXN0Ow0KICAgICAgfSk7DQogICAgfSwNCiAgICBjaGFuZ2VQYXJhbXNUeXBlKGUpIHsNCiAgICAgIGUgPyB0aGlzLmdldFBhcmFtcyhlKSA6ICh0aGlzLmZvcm1WYWxpZGF0ZS5wYXJhbXNfbGlzdCA9IFtdKTsNCiAgICB9LA0KICAgIGdldFBhcmFtcyhpZCkgew0KICAgICAgcGFyYW1JbmZvQXBpKGlkKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucGFyYW1zX2xpc3QgPSByZXMuZGF0YS52YWx1ZTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgaXNTdWJzZXQoYXJyMSwgYXJyMikgew0KICAgICAgLy8g5bCG5pWw57uE6L2s5o2i5Li6IFNldO+8jOS7peS+v+i/m+ihjOmrmOaViOeahOWMheWQq+ajgOafpQ0KICAgICAgY29uc3Qgc2V0MSA9IG5ldyBTZXQoYXJyMSk7DQogICAgICBjb25zdCBzZXQyID0gbmV3IFNldChhcnIyKTsNCg0KICAgICAgLy8g5qOA5p+lIHNldDIg5Lit55qE5q+P5Liq5YWD57Sg5piv5ZCm6YO95ZyoIHNldDEg5LitDQogICAgICBmb3IgKGxldCBlbGVtIG9mIHNldDIpIHsNCiAgICAgICAgaWYgKCFzZXQxLmhhcyhlbGVtKSkgew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICAvLyDmibnph4/mt7vliqANCiAgICBiYXRjaEFkZCgpIHsNCiAgICAgIGxldCBhcnIgPSBbXTsNCiAgICAgIGZvciAobGV0IHZhbCBvZiB0aGlzLmF0dHJzKSB7DQogICAgICAgIGlmICh0aGlzLm9uZUZvcm1CYXRjaFswXVt2YWwudmFsdWVdKSB7DQogICAgICAgICAgYXJyLnB1c2godGhpcy5vbmVGb3JtQmF0Y2hbMF1bdmFsLnZhbHVlXSk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgLy8g5om56YeP6K6+572u5ZWG5ZOB6KeE5qC85bGe5oCnDQogICAgICBjb25zdCBiYXRjaEZpZWxkcyA9IFsNCiAgICAgICAgJ3BpYycsDQogICAgICAgICdwcmljZScsDQogICAgICAgICdjb3N0JywNCiAgICAgICAgJ290X3ByaWNlJywNCiAgICAgICAgJ3N0b2NrJywNCiAgICAgICAgJ3dlaWdodCcsDQogICAgICAgICd2b2x1bWUnLA0KICAgICAgICAnYmFyX2NvZGUnLA0KICAgICAgICAnYmFyX2NvZGVfbnVtYmVyJywNCiAgICAgIF07DQogICAgICAvLyBjb25zdCBkZWZhdWx0RmllbGRzID0gWydiYXJfY29kZScsICdiYXJfY29kZV9udW1iZXInXTsNCg0KICAgICAgZm9yIChsZXQgdmFsIG9mIHRoaXMubWFueUZvcm1WYWxpZGF0ZSkgew0KICAgICAgICBjb25zdCBiYXRjaCA9IHRoaXMub25lRm9ybUJhdGNoWzBdOw0KICAgICAgICAvLyDlpoLmnpzlrZjlnKjnrZvpgInmnaHku7bkuJTmu6HotrPmnaHku7Ys5oiW5peg562b6YCJ5p2h5Lu25pe2DQogICAgICAgIGlmICghYXJyLmxlbmd0aCB8fCB0aGlzLmlzU3Vic2V0KHZhbC5hdHRyX2FyciwgYXJyKSkgew0KICAgICAgICAgIC8vIOiuvue9ruacieWAvOeahOaJuemHj+Wtl+autQ0KICAgICAgICAgIGJhdGNoRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7DQogICAgICAgICAgICBpZiAoYmF0Y2hbZmllbGRdICYmIGJhdGNoW2ZpZWxkXSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgIGlmIChmaWVsZCA9PT0gJ3BpYycgJiYgYmF0Y2hbZmllbGRdKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kc2V0KHZhbCwgZmllbGQsIGJhdGNoW2ZpZWxkXSk7DQogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQgIT0gJ3BpYycpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRzZXQodmFsLCBmaWVsZCwgYmF0Y2hbZmllbGRdKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLy8g6K6+572u6buY6K6k5a2X5q61DQogICAgICAgICAgLy8gZGVmYXVsdEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4gew0KICAgICAgICAgIC8vICAgdGhpcy4kc2V0KHZhbCwgZmllbGQsIGJhdGNoW2ZpZWxkXSk7DQogICAgICAgICAgLy8gfSk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIGNoYW5nZVNwZWNJbWcoYXJyLCBpbWcpIHsNCiAgICAgIC8vIOWIpOaWreaYr+WQpuWtmOWcqOinhOagvOWbvg0KICAgICAgbGV0IGlzSGFzID0gZmFsc2U7DQogICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGg7IGkrKykgew0KICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWFueUZvcm1WYWxpZGF0ZVtpXTsNCiAgICAgICAgaWYgKGl0ZW0ucGljICYmIHRoaXMuaXNTdWJzZXQoaXRlbS5hdHRyX2FyciwgYXJyKSkgew0KICAgICAgICAgIGlzSGFzID0gdHJ1ZTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKGlzSGFzKSB7DQogICAgICAgIHRoaXMuJGNvbmZpcm0oJ+WPr+S7peWQjOatpeS/ruaUueS4i+aWueivpeinhOagvOWbvueJh++8jOehruWumuimgeabv+aNouWQl++8nycsICfmj5DnpLonLCB7DQogICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfmm7/mjaInLA0KICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICfmmoLkuI0nLA0KICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgfSkNCiAgICAgICAgICAudGhlbigoKSA9PiB7DQogICAgICAgICAgICBmb3IgKGxldCB2YWwgb2YgdGhpcy5tYW55Rm9ybVZhbGlkYXRlKSB7DQogICAgICAgICAgICAgIGlmICh0aGlzLmlzU3Vic2V0KHZhbC5hdHRyX2FyciwgYXJyKSkgew0KICAgICAgICAgICAgICAgIHRoaXMuJHNldCh2YWwsICdwaWMnLCBpbWcpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSkNCiAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgZm9yIChsZXQgdmFsIG9mIHRoaXMubWFueUZvcm1WYWxpZGF0ZSkgew0KICAgICAgICAgIGlmICh0aGlzLmlzU3Vic2V0KHZhbC5hdHRyX2FyciwgYXJyKSkgew0KICAgICAgICAgICAgdGhpcy4kc2V0KHZhbCwgJ3BpYycsIGltZyk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICAvLyDnq4vljbPnlJ/miJANCiAgICBnZW5lcmF0ZSh0eXBlLCBpc0NvcHksIGFycikgew0KICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlID0gW107DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5oZWFkZXIgPSBbXTsNCiAgICB9LA0KICAgIGNsZWFyQXR0cigpIHsNCiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuYXR0cnNOYW1lID0gJyc7DQogICAgICB0aGlzLmZvcm1EeW5hbWljLmF0dHJzVmFsID0gJyc7DQogICAgfSwNCg0KICAgIC8vIOWIoOmZpOinhOagvA0KICAgIGhhbmRsZVJlbW92ZVJvbGUoaW5kZXgpIHsNCiAgICAgIHRoaXMuYXR0cnMuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgIHRoaXMubWFueUZvcm1WYWxpZGF0ZS5zcGxpY2UoaW5kZXgsIDEpOw0KICAgICAgaWYgKCF0aGlzLmF0dHJzLmxlbmd0aCkgew0KICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5oZWFkZXIgPSBbXTsNCiAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlID0gW107DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmdlbmVyYXRlQXR0cih0aGlzLmF0dHJzKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOWIoOmZpOihqOagvOS4rSDlr7nlupTlsZ7mgKcNCiAgICBkZWxBdHRyVGFibGUodmFsKSB7DQogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGg7IGkrKykgew0KICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWFueUZvcm1WYWxpZGF0ZVtpXTsNCiAgICAgICAgaWYgKGl0ZW0uYXR0cl9hcnIgJiYgaXRlbS5hdHRyX2Fyci5pbmNsdWRlcyh2YWwpKSB7DQogICAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlLnNwbGljZShpLCAxKTsNCiAgICAgICAgICBpLS07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOWIoOmZpOWxnuaApw0KICAgIGhhbmRsZVJlbW92ZTIoaXRlbSwgaW5kZXgsIHZhbCkgew0KICAgICAgLy8g5Yig6ZmkIG1hbnlGb3JtVmFsaWRhdGXkuK0gdGl0bGUgPSBpdGVtLnZhbHVlIOeahOWxnuaAp+WAvA0KICAgICAgaXRlbS5zcGxpY2UoaW5kZXgsIDEpOw0KICAgICAgLy8gdGhpcy5nZW5lcmF0ZUF0dHIodGhpcy5hdHRycyk7DQogICAgICB0aGlzLmRlbEF0dHJUYWJsZSh2YWwpOw0KICAgIH0sDQogICAgLy8g5paw5aKe6KeE5qC8DQogICAgaGFuZGxlQWRkUm9sZSgpIHsNCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICB2YWx1ZTogdGhpcy5mb3JtRHluYW1pYy5hdHRyc05hbWUsDQogICAgICAgIGFkZF9waWM6IDAsDQogICAgICAgIGRldGFpbDogW10sDQogICAgICB9Ow0KICAgICAgdGhpcy5hdHRycy5wdXNoKGRhdGEpOw0KICAgIH0sDQogICAgaGFuZGxlQWRkUGFyYW1zKCkgew0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIG5hbWU6ICcnLA0KICAgICAgICB2YWx1ZTogJycsDQogICAgICB9Ow0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucGFyYW1zX2xpc3QucHVzaChkYXRhKTsNCiAgICB9LA0KICAgIGhhbmRsZVNhdmVBc1RlbXBsYXRlKCkgew0KICAgICAgdGhpcy4kcHJvbXB0KCcnLCAn6K+36L6T5YWl5qih5p2/5ZCN56ewJywgew0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKHsgdmFsdWUgfSkgPT4gew0KICAgICAgICAgIGxldCBzcGVjID0gdGhpcy5hdHRycy5tYXAoKGl0ZW0pID0+IHsNCiAgICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLA0KICAgICAgICAgICAgICBkZXRhaWw6IGl0ZW0uZGV0YWlsLm1hcCgoZSkgPT4gZS52YWx1ZSksDQogICAgICAgICAgICB9Ow0KICAgICAgICAgIH0pOw0KICAgICAgICAgIGxldCBmb3JtRHluYW1pYyA9IHsNCiAgICAgICAgICAgIHJ1bGVfbmFtZTogdmFsdWUsDQogICAgICAgICAgICBzcGVjOiBzcGVjLA0KICAgICAgICAgIH07DQogICAgICAgICAgcnVsZUFkZEFwaShmb3JtRHluYW1pYywgMCkNCiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RHZXRSdWxlKCk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKCkgPT4ge30pOw0KICAgIH0sDQogICAgLy8g5paw5aKe5LiA5p2h5bGe5oCnDQogICAgYWRkT25lQXR0cih2YWwsIHZhbDIpIHsNCiAgICAgIHRoaXMuZ2VuZXJhdGVBdHRyKHRoaXMuYXR0cnMsIHZhbDIpOw0KICAgIH0sDQogICAgaGFuZGxlRm9jdXModmFsKSB7DQogICAgICB0aGlzLmNoYW5nZUF0dHJWYWx1ZSA9IHZhbDsNCiAgICB9LA0KICAgIGhhbmRsZUJsdXIoKSB7DQogICAgICB0aGlzLmNoYW5nZUF0dHJWYWx1ZSA9ICcnOw0KICAgIH0sDQogICAgaGFuZGxlU2VsSW1nKGl0ZW0pIHsNCiAgICAgIHRoaXMuJGltZ01vZGFsKChlKSA9PiB7DQogICAgICAgIGl0ZW0ucGljID0gZS5hdHRfZGlyOw0KICAgICAgICB0aGlzLmNoYW5nZVNwZWNJbWcoW2l0ZW0udmFsdWVdLCBlLmF0dF9kaXIpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICBoYW5kbGVSZW1vdmVJbWcoaXRlbSkgew0KICAgICAgaXRlbS5waWMgPSAnJzsNCiAgICB9LA0KICAgIC8vIOinhOagvOWQjeensOaUueWPmA0KICAgIGF0dHJDaGFuZ2VWYWx1ZShpLCB2YWwpIHsNCiAgICAgIGlmICh2YWwudHJpbSgpLmxlbmd0aCAmJiB0aGlzLmF0dHJzW2ldLmRldGFpbC5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy5nZW5lcmF0ZUhlYWRlcih0aGlzLmF0dHJzKTsNCiAgICAgICAgaWYgKHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGgpIHsNCiAgICAgICAgICB0aGlzLm1hbnlGb3JtVmFsaWRhdGUubWFwKChpdGVtLCBpKSA9PiB7DQogICAgICAgICAgICBpZiAoaSA+IDApIHsNCiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGl0ZW0uZGV0YWlsKS5pbmNsdWRlcyh0aGlzLmNoYW5nZUF0dHJWYWx1ZSkpIHsNCiAgICAgICAgICAgICAgICBpdGVtLmRldGFpbFt2YWxdID0gaXRlbS5kZXRhaWxbdGhpcy5jaGFuZ2VBdHRyVmFsdWVdOw0KICAgICAgICAgICAgICAgIGl0ZW1bdmFsXSA9IGl0ZW1bdGhpcy5jaGFuZ2VBdHRyVmFsdWVdOw0KICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmRldGFpbFt0aGlzLmNoYW5nZUF0dHJWYWx1ZV07DQogICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1bdGhpcy5jaGFuZ2VBdHRyVmFsdWVdOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5jaGFuZ2VBdHRyVmFsdWUgPSB2YWw7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuZ2VuZXJhdGVBdHRyKHRoaXMuYXR0cnMpOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g6KeE5qC85YC85pS55Y+YDQogICAgYXR0ckRldGFpbENoYW5nZVZhbHVlKHZhbCwgaSkgew0KICAgICAgaWYgKHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGgpIHsNCiAgICAgICAgbGV0IGtleSA9IHRoaXMuYXR0cnNbaV0udmFsdWU7DQogICAgICAgIHRoaXMubWFueUZvcm1WYWxpZGF0ZS5tYXAoKGl0ZW0sIGkpID0+IHsNCiAgICAgICAgICBpZiAoaSA+IDApIHsNCiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhpdGVtLmRldGFpbCkuaW5jbHVkZXMoa2V5KSAmJiBpdGVtLmRldGFpbFtrZXldID09PSB0aGlzLmNoYW5nZUF0dHJWYWx1ZSkgew0KICAgICAgICAgICAgICBpdGVtLmRldGFpbFtrZXldID0gdmFsOw0KICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpdGVtLmF0dHJfYXJyLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbSA9PT0gdGhpcy5jaGFuZ2VBdHRyVmFsdWUpOw0KICAgICAgICAgICAgICBpdGVtLmF0dHJfYXJyW2luZGV4XSA9IHZhbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLmNoYW5nZUF0dHJWYWx1ZSA9IHZhbDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuZ2VuZXJhdGVBdHRyKHRoaXMuYXR0cnMsIDEpOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g6KeE5qC85Zu+54mH5re75Yqg5byA5YWzDQogICAgYWRkUGljKGUsIGkpIHsNCiAgICAgIGlmIChlKSB7DQogICAgICAgIHRoaXMuYXR0cnMubWFwKChpdGVtLCBpaSkgPT4gew0KICAgICAgICAgIGlmIChpaSAhPT0gaSkgew0KICAgICAgICAgICAgdGhpcy4kc2V0KGl0ZW0sICdhZGRfcGljJywgMCk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy5jYW5TZWwgPSBmYWxzZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuY2FuU2VsID0gdHJ1ZTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOinhOagvOaLluaLveaOkuW6j+WQjg0KICAgIG9uTW92ZVNwZWMoKSB7DQogICAgICB0aGlzLmdlbmVyYXRlQXR0cih0aGlzLmF0dHJzKTsNCiAgICB9LA0KICAgIGNoYW5nZUN1cnJlbnRJbmRleChpKSB7DQogICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGk7DQogICAgfSwNCiAgICAvLyDnlJ/miJDllYblk4Hop4TmoLzooajlpLQNCiAgICBnZW5lcmF0ZUhlYWRlcihkYXRhKSB7DQogICAgICBsZXQgc3BlY2lmaWNhdGlvbnNDb2x1bW5zID0gZGF0YS5tYXAoKGl0ZW0pID0+ICh7DQogICAgICAgIHRpdGxlOiBpdGVtLnZhbHVlLA0KICAgICAgICBrZXk6IGl0ZW0udmFsdWUsDQogICAgICAgIG1pbldpZHRoOiAxNDAsDQogICAgICAgIGZpeGVkOiAnbGVmdCcsDQogICAgICB9KSk7DQogICAgICBsZXQgYXJyOw0KICAgICAgaWYgKFsxLCAyXS5pbmNsdWRlcyhOdW1iZXIodGhpcy5mb3JtVmFsaWRhdGUudmlydHVhbF90eXBlKSkpIHsNCiAgICAgICAgYXJyID0gWy4uLnNwZWNpZmljYXRpb25zQ29sdW1ucywgLi4uVmlydHVhbFRhYmxlSGVhZF07DQogICAgICAgIC8vIOaJvuWIsHNsb3Qg562J5LqOIGZpY3RpdGlvdXMg5bCGdGl0bGXmlLnkuLrop4TmoLzlkI3np7ANCiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaGVhZGVyLm1hcCgoaXRlbSkgPT4gew0KICAgICAgICAgIGlmIChpdGVtLnNsb3QgPT09ICdmaWN0aXRpb3VzJykgew0KICAgICAgICAgICAgaXRlbS50aXRsZSA9IHRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZSA9PSAxID8gJ+a3u+WKoOWNoeWvhi/nvZHnm5gnIDogJ+mAieaLqeS8mOaDoOWIuCc7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtVmFsaWRhdGUudmlydHVhbF90eXBlID09IDMpIHsNCiAgICAgICAgYXJyID0gWy4uLnNwZWNpZmljYXRpb25zQ29sdW1ucywgLi4uVmlydHVhbFRhYmxlSGVhZDJdOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgYXJyID0gWy4uLnNwZWNpZmljYXRpb25zQ29sdW1ucywgLi4uR29vZHNUYWJsZUhlYWRdOw0KICAgICAgfQ0KICAgICAgdGhpcy4kc2V0KHRoaXMuZm9ybVZhbGlkYXRlLCAnaGVhZGVyJywgYXJyKTsNCiAgICAgIHRoaXMudGFibGVLZXkgKz0gMTsNCiAgICAgIHRoaXMuY29sdW1uc0luc3RhbE0gPSBhcnI7DQogICAgfSwNCiAgICAvKg0KICAgICAqIOeUn+aIkOWxnuaApw0KICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEg6KeE5qC85pWw5o2uDQogICAgICogKi8NCiAgICBnZW5lcmF0ZUF0dHIoZGF0YSwgdmFsKSB7DQogICAgICB0aGlzLmdlbmVyYXRlSGVhZGVyKGRhdGEpOw0KICAgICAgY29uc3QgY29tYmluYXRpb25zID0gdGhpcy5nZW5lcmF0ZUNvbWJpbmF0aW9ucyhkYXRhKTsNCiAgICAgIGNvbnNvbGUubG9nKCfop4TmoLznu4TlkIjmgLvmlbDvvJonICsgY29tYmluYXRpb25zLmxlbmd0aCk7DQogICAgICBjb25zdCB2aXJ0dWFsVHlwZSA9IHRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZTsNCiAgICAgIC8vIOWmguaenGNvbWJpbmF0aW9uc+aVsOmHj+i2hei/hyA1MDDvvIzliJnliIbmibnmrKHnlJ/miJDlsZ7mgKcNCiAgICAgIGxldCByb3dzID0gW107DQogICAgICBpZiAoY29tYmluYXRpb25zLmxlbmd0aCA+IDUwMCkgew0KICAgICAgICBjb25zdCBiYXRjaFNpemUgPSBNYXRoLmNlaWwoY29tYmluYXRpb25zLmxlbmd0aCAvIDUwMCk7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tYmluYXRpb25zLmxlbmd0aDsgaSArPSBiYXRjaFNpemUpIHsNCiAgICAgICAgICBzZXRUaW1lb3V0KChlKSA9PiB7DQogICAgICAgICAgICBsZXQgZCA9IHRoaXMuZ2VuZXJhdGVBdHRyQmF0Y2goZGF0YSwgY29tYmluYXRpb25zLnNsaWNlKGksIGkgKyBiYXRjaFNpemUpLCB2YWwpOw0KICAgICAgICAgICAgcm93cyA9IFsuLi5yb3dzLCAuLi5kXTsNCiAgICAgICAgICAgIHRoaXMubWFueUZvcm1WYWxpZGF0ZSA9IFsuLi50aGlzLm9uZUZvcm1CYXRjaCwgLi4ucm93c107DQogICAgICAgICAgfSwgMCk7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJvd3MgPSB0aGlzLmdlbmVyYXRlQXR0ckJhdGNoKGRhdGEsIGNvbWJpbmF0aW9ucywgdmFsKTsNCiAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlID0gWy4uLnRoaXMub25lRm9ybUJhdGNoLCAuLi5yb3dzXTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOeUn+aIkOWxnuaAp+aJueasoQ0KICAgIGdlbmVyYXRlQXR0ckJhdGNoKGRhdGEsIGNvbWJpbmF0aW9ucywgdmFsKSB7DQogICAgICBjb25zdCBleGlzdGluZ0l0ZW1zID0gdGhpcy5tYW55Rm9ybVZhbGlkYXRlLnNsaWNlKDEpOyAvLyDmjpLpmaTnrKzkuIDpobnpu5jorqTmlbDmja4NCg0KICAgICAgY29uc3Qgcm93cyA9IGNvbWJpbmF0aW9ucy5tYXAoKGNvbWJpbmF0aW9uKSA9PiB7DQogICAgICAgIGNvbnN0IHJvdyA9IHsNCiAgICAgICAgICBhdHRyX2FycjogY29tYmluYXRpb24sDQogICAgICAgICAgZGV0YWlsOiB7fSwNCiAgICAgICAgICB0aXRsZTogJycsDQogICAgICAgICAga2V5OiAnJywNCiAgICAgICAgICBwcmljZTogMCwNCiAgICAgICAgICBwaWM6ICcnLA0KICAgICAgICAgIG90X3ByaWNlOiAwLA0KICAgICAgICAgIGNvc3Q6IDAsDQogICAgICAgICAgc3RvY2s6IDAsDQogICAgICAgICAgaXNfc2hvdzogMSwNCiAgICAgICAgICBpc19kZWZhdWx0X3NlbGVjdDogMCwNCiAgICAgICAgICB1bmlxdWU6ICcnLA0KICAgICAgICAgIHdlaWdodDogJycsDQogICAgICAgICAgdm9sdW1lOiAnJywNCiAgICAgICAgICBicm9rZXJhZ2U6IDAsDQogICAgICAgICAgYnJva2VyYWdlX3R3bzogMCwNCiAgICAgICAgICB2aXBfcHJpY2U6IDAsDQogICAgICAgICAgdmlwX3Byb3BvcnRpb246IDAsDQogICAgICAgIH07DQoNCiAgICAgICAgLy8g6K6+572u6Jma5ouf57G75Z6L55u45YWz5bGe5oCnDQogICAgICAgIGlmICh0aGlzLmZvcm1WYWxpZGF0ZS52aXJ0dWFsX3R5cGUgPT09IDEpIHsNCiAgICAgICAgICByb3cudmlydHVhbF9saXN0ID0gW107DQogICAgICAgICAgcm93LmRpc2tfaW5mbyA9ICcnOw0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZSA9PT0gMikgew0KICAgICAgICAgIHJvdy5jb3Vwb25faWQgPSAwOw0KICAgICAgICAgIHJvdy5jb3Vwb25fbmFtZSA9ICcnOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8g5aSE55CG6KeE5qC85bGe5oCnDQogICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaSkgPT4gew0KICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29tYmluYXRpb25baV07DQogICAgICAgICAgcm93W2l0ZW0udmFsdWVdID0gdmFsdWU7DQogICAgICAgICAgcm93LnRpdGxlID0gaXRlbS52YWx1ZTsNCiAgICAgICAgICByb3cua2V5ID0gaXRlbS52YWx1ZTsNCiAgICAgICAgICByb3cuZGV0YWlsW2l0ZW0udmFsdWVdID0gdmFsdWU7DQoNCiAgICAgICAgICAvLyDmn6Xmib7ljLnphY3nmoTnjrDmnInop4TmoLzpobkNCiAgICAgICAgICBjb25zdCBtYXRjaGVkSXRlbSA9IGV4aXN0aW5nSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5hdHRyX2FyciAmJiBhcnJheXNFcXVhbChpdGVtLmF0dHJfYXJyLCBjb21iaW5hdGlvbikpOw0KDQogICAgICAgICAgaWYgKG1hdGNoZWRJdGVtKSB7DQogICAgICAgICAgICBPYmplY3QuYXNzaWduKHJvdywgew0KICAgICAgICAgICAgICBwcmljZTogbWF0Y2hlZEl0ZW0ucHJpY2UsDQogICAgICAgICAgICAgIGNvc3Q6IG1hdGNoZWRJdGVtLmNvc3QsDQogICAgICAgICAgICAgIG90X3ByaWNlOiBtYXRjaGVkSXRlbS5vdF9wcmljZSwNCiAgICAgICAgICAgICAgc3RvY2s6IG1hdGNoZWRJdGVtLnN0b2NrLA0KICAgICAgICAgICAgICBwaWM6IG1hdGNoZWRJdGVtLnBpYywNCiAgICAgICAgICAgICAgdW5pcXVlOiBtYXRjaGVkSXRlbS51bmlxdWUgfHwgJycsDQogICAgICAgICAgICAgIHdlaWdodDogbWF0Y2hlZEl0ZW0ud2VpZ2h0IHx8ICcnLA0KICAgICAgICAgICAgICB2b2x1bWU6IG1hdGNoZWRJdGVtLnZvbHVtZSB8fCAnJywNCiAgICAgICAgICAgICAgaXNfc2hvdzogbWF0Y2hlZEl0ZW0uaXNfc2hvdyB8fCAxLA0KICAgICAgICAgICAgICBpc19kZWZhdWx0X3NlbGVjdDogbWF0Y2hlZEl0ZW0uaXNfZGVmYXVsdF9zZWxlY3QgfHwgMCwNCiAgICAgICAgICAgICAgdm9sdW1lOiBtYXRjaGVkSXRlbS52b2x1bWUgfHwgMCwNCiAgICAgICAgICAgICAgYmFyX2NvZGVfbnVtYmVyOiBtYXRjaGVkSXRlbS5iYXJfY29kZV9udW1iZXIgfHwgMCwNCiAgICAgICAgICAgICAgaXNfdmlydHVhbDogbWF0Y2hlZEl0ZW0uaXNfdmlydHVhbCwNCiAgICAgICAgICAgICAgYnJva2VyYWdlOiBtYXRjaGVkSXRlbS5icm9rZXJhZ2UsDQogICAgICAgICAgICAgIGJyb2tlcmFnZV90d286IG1hdGNoZWRJdGVtLmJyb2tlcmFnZV90d28sDQogICAgICAgICAgICAgIHZpcF9wcmljZTogbWF0Y2hlZEl0ZW0udmlwX3ByaWNlLA0KICAgICAgICAgICAgICB2aXBfcHJvcG9ydGlvbjogbWF0Y2hlZEl0ZW0udmlwX3Byb3BvcnRpb24sDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZSA9PT0gMSkgew0KICAgICAgICAgICAgICByb3cudmlydHVhbF9saXN0ID0gbWF0Y2hlZEl0ZW0udmlydHVhbF9saXN0Ow0KICAgICAgICAgICAgICByb3cuZGlza19pbmZvID0gbWF0Y2hlZEl0ZW0uZGlza19pbmZvOw0KICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1WYWxpZGF0ZS52aXJ0dWFsX3R5cGUgPT09IDIgJiYgbWF0Y2hlZEl0ZW0uY291cG9uX2lkKSB7DQogICAgICAgICAgICAgIHJvdy5jb3Vwb25faWQgPSBtYXRjaGVkSXRlbS5jb3Vwb25faWQ7DQogICAgICAgICAgICAgIHJvdy5jb3Vwb25fbmFtZSA9IG1hdGNoZWRJdGVtLmNvdXBvbl9uYW1lOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5hZGRfcGljICYmIGNvbWJpbmF0aW9uLmluY2x1ZGVzKHZhbCkpIHsNCiAgICAgICAgICAgIGNvbnN0IHBpY0l0ZW0gPSBpdGVtLmRldGFpbC5maW5kKChlKSA9PiBjb21iaW5hdGlvbi5pbmNsdWRlcyhlLnZhbHVlKSk7DQogICAgICAgICAgICBpZiAocGljSXRlbSkgcm93LnBpYyA9IHBpY0l0ZW0ucGljOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiByb3c7DQogICAgICB9KTsNCiAgICAgIHJldHVybiByb3dzOw0KICAgIH0sDQogICAgLy8g5YiH5o2i6buY6K6k6YCJ5Lit6KeE5qC8DQogICAgY2hhbmdlRGVmYXVsdFNlbGVjdChlLCBpbmRleCkgew0KICAgICAgLy8g5LiA5Liq5byA5ZCvIOWFtuS7luWFs+mXrQ0KICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlLm1hcCgoaXRlbSwgaSkgPT4gew0KICAgICAgICBpZiAoaSAhPT0gaW5kZXgpIHsNCiAgICAgICAgICBpdGVtLmlzX2RlZmF1bHRfc2VsZWN0ID0gMDsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICBpZiAoZSkgdGhpcy5tYW55Rm9ybVZhbGlkYXRlW2luZGV4XS5pc19zaG93ID0gMTsNCiAgICB9LA0KICAgIC8vIOaUueWPmOaYr+WQpuaYvuekug0KICAgIGNoYW5nZURlZmF1bHRTaG93KGluZGV4KSB7DQogICAgICAvLyDlpoLmnpzpu5jorqTpgInkuK3lvIDlkK8g5YiZ5LiN5Y+v6ZqQ6JePDQogICAgICBpZiAodGhpcy5tYW55Rm9ybVZhbGlkYXRlW2luZGV4XS5pc19kZWZhdWx0X3NlbGVjdCA9PT0gMSkgew0KICAgICAgICB0aGlzLm1hbnlGb3JtVmFsaWRhdGVbaW5kZXhdLmlzX3Nob3cgPSAxOw0KICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfpu5jorqTop4TmoLzkuI3lj6/pmpDol48nKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOeUn+aIkOinhOagvOe7hOWQiA0KICAgIGdlbmVyYXRlQ29tYmluYXRpb25zKGFyciwgcHJlZml4ID0gW10pIHsNCiAgICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHJldHVybiBbcHJlZml4XTsNCiAgICAgIH0NCiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBhcnI7DQogICAgICByZXR1cm4gZmlyc3QuZGV0YWlsLmZsYXRNYXAoKGRldGFpbCkgPT4gdGhpcy5nZW5lcmF0ZUNvbWJpbmF0aW9ucyhyZXN0LCBbLi4ucHJlZml4LCBkZXRhaWwudmFsdWVdKSk7DQogICAgfSwNCiAgICAvLyDmt7vliqDlsZ7mgKcNCiAgICBjcmVhdGVBdHRyKG51bSwgaWR4KSB7DQogICAgICBpZiAobnVtKSB7DQogICAgICAgIC8vIOWIpOaWreaYr+WQpuWtmOWcqOWQjOagt+eGn+aCiQ0KICAgICAgICB2YXIgaXNFeGlzdCA9IHRoaXMuYXR0cnNbaWR4XS5kZXRhaWwuc29tZSgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gbnVtKTsNCiAgICAgICAgaWYgKGlzRXhpc3QpIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfop4TmoLzlgLzlt7LlrZjlnKgnKTsNCiAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5hdHRyc1tpZHhdLmRldGFpbC5wdXNoKHsgdmFsdWU6IG51bSwgcGljOiAnJyB9KTsNCiAgICAgICAgaWYgKHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGgpIHsNCiAgICAgICAgICB0aGlzLmFkZE9uZUF0dHIodGhpcy5hdHRyc1tpZHhdLnZhbHVlLCBudW0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBdHRyKHRoaXMuYXR0cnMpOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy4kcmVmcy5zcGVjU3RvY2suJHJlZnNbJ3BvcG92ZXJSZWZfJyArIGlkeF1bMF0uZG9DbG9zZSgpOyAvL+WFs+mXreeahA0KICAgICAgICB0aGlzLmNsZWFyQXR0cigpOw0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICBpZiAodGhpcy4kcmVmcy5zcGVjU3RvY2suJHJlZnNbJ3BvcG92ZXJSZWZfJyArIGlkeF0pIHsNCiAgICAgICAgICAgIC8v6YeN54K55piv5Lul5LiL5Lik5Y+lDQogICAgICAgICAgICB0aGlzLiRyZWZzLnNwZWNTdG9jay4kcmVmc1sncG9wb3ZlclJlZl8nICsgaWR4XVswXS5kb1Nob3coKTsgLy/miZPlvIDnmoQNCiAgICAgICAgICAgIC8v6YeN54K55piv5Lul5LiK5Lik5Y+lDQogICAgICAgICAgfQ0KICAgICAgICB9LCAyMCk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLiRyZWZzLnNwZWNTdG9jay4kcmVmc1sncG9wb3ZlclJlZl8nICsgaWR4XVswXS5kb0Nsb3NlKCk7IC8v5YWz6Zet55qEDQogICAgICB9DQogICAgfSwNCiAgICBoYW5kbGVTaG93UG9wKGluZGV4KSB7DQogICAgICB0aGlzLiRyZWZzLnNwZWNTdG9jay4kcmVmc1snaW5wdXRSZWZfJyArIGluZGV4XVswXS5mb2N1cygpOw0KICAgIH0sDQogICAgLy8g5ZWG5ZOB5YiG57G777ybDQogICAgZ29vZHNDYXRlZ29yeSgpIHsNCiAgICAgIGNhc2NhZGVyTGlzdEFwaSgxKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy50cmVlU2VsZWN0ID0gcmVzLmRhdGE7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDmlLnlj5jop4TmoLwNCiAgICBjaGFuZ2VTcGVjKCkgew0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXNfc3ViID0gW107DQogICAgICBsZXQgaWQgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQ7DQogICAgICBpZiAoaWQpIHsNCiAgICAgICAgY2hlY2tBY3Rpdml0eUFwaShpZCkNCiAgICAgICAgICAudGhlbigocmVzKSA9PiB7fSkNCiAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID0gdGhpcy5zcGVjX3R5cGU7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g6K+m5oOFDQogICAgZ2V0SW5mbygpIHsNCiAgICAgIHRoaXMuc3BpblNob3cgPSB0cnVlOw0KICAgICAgcHJvZHVjdEluZm9BcGkodGhpcy4kcm91dGUucGFyYW1zLmlkKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YS5wcm9kdWN0SW5mbzsNCiAgICAgICAgICB0aGlzLmluZm9EYXRhKGRhdGEpOw0KICAgICAgICAgIHRoaXMuc3BpblNob3cgPSBmYWxzZTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLnNwaW5TaG93ID0gZmFsc2U7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBoYW5kbGVSZW1vdmUoaSkgew0KICAgICAgdGhpcy5pbWFnZXMuc3BsaWNlKGksIDEpOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuc2xpZGVyX2ltYWdlLnNwbGljZShpLCAxKTsNCiAgICAgIHRoaXMub25lRm9ybVZhbGlkYXRlWzBdLnBpYyA9IHRoaXMuZm9ybVZhbGlkYXRlLnNsaWRlcl9pbWFnZVswXTsNCiAgICB9LA0KICAgIC8vIOWFs+mXreWbvueJh+S4iuS8oOaooeaAgeahhg0KICAgIGNoYW5nZUNhbmNlbChtc2cpIHsNCiAgICAgIHRoaXMubW9kYWxQaWMgPSBmYWxzZTsNCiAgICB9LA0KICAgIC8vIOeCueWHu+WVhuWTgeWbvg0KICAgIG1vZGFsUGljVGFwKHRpdCwgcGljVGl0ID0gJycsIGluZGV4ID0gMCkgew0KICAgICAgdGhpcy5tb2RhbFBpYyA9IHRydWU7DQogICAgICB0aGlzLmlzQ2hvaWNlID0gdGl0ID09PSAnZGFuJyA/ICfljZXpgIknIDogJ+WkmumAiSc7DQogICAgICB0aGlzLnBpY1RpdCA9IHBpY1RpdDsNCiAgICAgIHRoaXMudGFibGVJbmRleCA9IGluZGV4Ow0KICAgIH0sDQogICAgLy8g6I635Y+W5Y2V5byg5Zu+54mH5L+h5oGvDQogICAgZ2V0UGljKHBjKSB7DQogICAgICBzd2l0Y2ggKHRoaXMucGljVGl0KSB7DQogICAgICAgIGNhc2UgJ2RhbkZyb20nOg0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmltYWdlID0gcGMuYXR0X2RpcjsNCiAgICAgICAgICBpZiAoIXRoaXMuJHJvdXRlLnBhcmFtcy5pZCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLnNwZWNfdHlwZSA9PT0gMCkgew0KICAgICAgICAgICAgICB0aGlzLm9uZUZvcm1WYWxpZGF0ZVswXS5waWMgPSBwYy5hdHRfZGlyOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy5tYW55Rm9ybVZhbGlkYXRlLm1hcCgoaXRlbSkgPT4gew0KICAgICAgICAgICAgICAgIGl0ZW0ucGljID0gcGMuYXR0X2RpcjsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHRoaXMub25lRm9ybUJhdGNoWzBdLnBpYyA9IHBjLmF0dF9kaXI7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkYW5UYWJsZSc6DQogICAgICAgICAgdGhpcy5vbmVGb3JtVmFsaWRhdGVbdGhpcy50YWJsZUluZGV4XS5waWMgPSBwYy5hdHRfZGlyOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkdW9waSc6DQogICAgICAgICAgdGhpcy5vbmVGb3JtQmF0Y2hbdGhpcy50YWJsZUluZGV4XS5waWMgPSBwYy5hdHRfZGlyOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdyZWNvbW1lbmRfaW1hZ2UnOg0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnJlY29tbWVuZF9pbWFnZSA9IHBjLmF0dF9kaXI7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgaWYgKHRoaXMubWFueUZvcm1WYWxpZGF0ZS5sZW5ndGgpIHRoaXMubWFueUZvcm1WYWxpZGF0ZVt0aGlzLnRhYmxlSW5kZXhdLnBpYyA9IHBjLmF0dF9kaXI7DQogICAgICB9DQogICAgICB0aGlzLm1vZGFsUGljID0gZmFsc2U7DQogICAgfSwNCiAgICBkZWxldGVSb3coaW5kZXgpIHsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnBhcmFtc19saXN0LnNwbGljZShpbmRleCwgMSk7DQogICAgfSwNCiAgICAvLyDojrflj5blpJrlvKDlm77kv6Hmga8NCiAgICBnZXRQaWNEKHBjKSB7DQogICAgICB0aGlzLmltYWdlcyA9IHBjOw0KICAgICAgdGhpcy5pbWFnZXMubWFwKChpdGVtKSA9PiB7DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnNsaWRlcl9pbWFnZS5wdXNoKGl0ZW0uYXR0X2Rpcik7DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnNsaWRlcl9pbWFnZSA9IHRoaXMuZm9ybVZhbGlkYXRlLnNsaWRlcl9pbWFnZS5zcGxpY2UoMCwgMTApOw0KICAgICAgfSk7DQogICAgICB0aGlzLm9uZUZvcm1WYWxpZGF0ZVswXS5waWMgPSB0aGlzLmZvcm1WYWxpZGF0ZS5zbGlkZXJfaW1hZ2VbMF07DQogICAgICB0aGlzLm1vZGFsUGljID0gZmFsc2U7DQogICAgfSwNCiAgICAvLyDmj5DkuqQNCiAgICBoYW5kbGVTdWJtaXQobmFtZSkgew0KICAgICAgdGhpcy4kcmVmc1tuYW1lXS52YWxpZGF0ZSgodmFsaWQpID0+IHsNCiAgICAgICAgaWYgKHZhbGlkKSB7DQogICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUudHlwZSA9IHRoaXMudHlwZTsNCiAgICAgICAgICBsZXQgYXJyID0gdGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID09PSAwID8gdGhpcy5vbmVGb3JtVmFsaWRhdGUgOiB0aGlzLm1hbnlGb3JtVmFsaWRhdGU7DQogICAgICAgICAgbGV0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFycikpOw0KICAgICAgICAgIGlmICh0aGlzLmZvcm1WYWxpZGF0ZS5zcGVjX3R5cGUgPT09IDEpIHsNCiAgICAgICAgICAgIGlmIChpdGVtLmxlbmd0aCA8IDIpIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+WVhuWTgeinhOagvC3op4TmoLzmlbDph4/mnIDlsJEx5LiqJyk7DQogICAgICAgICAgICAvLyDliKDpmaTnrKzkuIDpobkNCiAgICAgICAgICAgIGl0ZW0uc2hpZnQoKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaXRlbVtpXS5zdG9jayA+IDEwMDAwMDApIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+inhOagvOW6k+WtmC3lupPlrZjotoXlh7rns7vnu5/ojIPlm7QoMTAwMDAwMCknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuZm9ybVZhbGlkYXRlLmlzX3N1YlswXSA9PT0gMSkgew0KICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgIGlmIChpdGVtW2ldLmJyb2tlcmFnZSA9PT0gbnVsbCB8fCBpdGVtW2ldLmJyb2tlcmFnZV90d28gPT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6JCl6ZSA6K6+572uLSDkuIDkuoznuqfov5TkvaPkuI3og73kuLrnqbonKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgaWYgKGl0ZW1baV0udmlwX3ByaWNlID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+iQpemUgOiuvue9ri3kvJrlkZjku7fkuI3og73kuLrnqbonKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuaXNfc3ViLmxlbmd0aCA9PT0gMikgew0KICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgIGlmIChpdGVtW2ldLmJyb2tlcmFnZSA9PT0gbnVsbCB8fCBpdGVtW2ldLmJyb2tlcmFnZV90d28gPT09IG51bGwgfHwgaXRlbVtpXS52aXBfcHJpY2UgPT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6JCl6ZSA6K6+572uLSDkuIDkuoznuqfov5TkvaPlkozkvJrlkZjku7fkuI3og73kuLrnqbonKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuZnJlaWdodCA9PSAzICYmICF0aGlzLmZvcm1WYWxpZGF0ZS50ZW1wX2lkKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfllYblk4Hkv6Hmga8t6L+Q6LS55qih5p2/5LiN6IO95Li656m6Jyk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGxldCBhY3RpdmVJZHMgPSBbXTsNCiAgICAgICAgICB0aGlzLmRhdGFMYWJlbC5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgICAgICAgICBhY3RpdmVJZHMucHVzaChpdGVtLmlkKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5sYWJlbF9pZCA9IGFjdGl2ZUlkczsNCiAgICAgICAgICBpZiAodGhpcy5vcGVuU3ViaW1pdCkgcmV0dXJuOw0KICAgICAgICAgIHRoaXMub3BlblN1YmltaXQgPSB0cnVlOw0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmRlc2NyaXB0aW9uID0gZm9ybWF0UmljaFRleHQodGhpcy5jb250ZW50KTsNCiAgICAgICAgICBpZiAodGhpcy5mb3JtVmFsaWRhdGUuc3BlY190eXBlID09PSAwKSB7DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5hdHRycyA9IGl0ZW07DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5oZWFkZXIgPSBbXTsNCiAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLml0ZW1zID0gW107DQogICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5pc19jb3B5ID0gMDsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXRlbXMgPSB0aGlzLmF0dHJzOw0KICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuYXR0cnMgPSBpdGVtOw0KICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaXNfY29weSA9IDE7DQogICAgICAgICAgfQ0KICAgICAgICAgIHByb2R1Y3RBZGRBcGkodGhpcy5mb3JtVmFsaWRhdGUpDQogICAgICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMub3BlblN1YmltaXQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkID09PSAnMCcpIHsNCiAgICAgICAgICAgICAgICBjYWNoZURlbGV0ZSgpLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAgICAgdGhpcy5vcGVuU3ViaW1pdCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogdGhpcy4kcm91dGVQcm9TdHIgKyAnL3Byb2R1Y3QvcHJvZHVjdF9saXN0JyB9KTsNCiAgICAgICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgICBzZXRUaW1lb3V0KChlKSA9PiB7DQogICAgICAgICAgICAgICAgdGhpcy5vcGVuU3ViaW1pdCA9IGZhbHNlOw0KICAgICAgICAgICAgICB9LCAxMDAwKTsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGlmICghdGhpcy5mb3JtVmFsaWRhdGUuc3RvcmVfbmFtZSkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5ZWG5ZOB5L+h5oGvLeWVhuWTgeWQjeensOS4jeiDveS4uuepuicpOw0KICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9ybVZhbGlkYXRlLmNhdGVfaWQubGVuZ3RoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfllYblk4Hkv6Hmga8t5ZWG5ZOB5YiG57G75LiN6IO95Li656m6Jyk7DQogICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb3JtVmFsaWRhdGUudW5pdF9uYW1lKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfllYblk4Hkv6Hmga8t5ZWG5ZOB5Y2V5L2N5LiN6IO95Li656m6Jyk7DQogICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb3JtVmFsaWRhdGUuc2xpZGVyX2ltYWdlLmxlbmd0aCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5ZWG5ZOB5L+h5oGvLeWVhuWTgei9ruaSreWbvuS4jeiDveS4uuepuicpOw0KICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9ybVZhbGlkYXRlLmxvZ2lzdGljcy5sZW5ndGggJiYgIXRoaXMuZm9ybVZhbGlkYXRlLnZpcnR1YWxfdHlwZSkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn54mp5rWB6K6+572uLeiHs+WwkemAieaLqeS4gOenjeeJqea1geaWueW8jycpOw0KICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9ybVZhbGlkYXRlLnRlbXBfaWQgJiYgdGhpcy5mb3JtVmFsaWRhdGUuZnJlaWdodCA9PSAzKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfllYblk4Hkv6Hmga8t6L+Q6LS55qih5p2/5LiN6IO95Li656m6Jyk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICAgIGNoYW5nZVRlbXBsYXRlKG1zZykgew0KICAgICAgdGhpcy50ZW1wbGF0ZSA9IG1zZzsNCiAgICB9LA0KICAgIC8vIOihqOWNlemqjOivgQ0KICAgIHZhbGlkYXRlKHByb3AsIHN0YXR1cywgZXJyb3IpIHsNCiAgICAgIGlmIChzdGF0dXMgPT09IGZhbHNlKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZyhlcnJvcik7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDnp7vliqgNCiAgICBoYW5kbGVEcmFnU3RhcnQoZSwgaXRlbSkgew0KICAgICAgdGhpcy5kcmFnZ2luZyA9IGl0ZW07DQogICAgfSwNCiAgICBoYW5kbGVEcmFnRW5kKGUsIGl0ZW0pIHsNCiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBudWxsOw0KICAgIH0sDQogICAgaGFuZGxlRHJhZ092ZXIoZSkgew0KICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJzsNCiAgICB9LA0KICAgIGhhbmRsZURyYWdFbnRlcihlLCBpdGVtKSB7DQogICAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnOw0KICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuZHJhZ2dpbmcpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgY29uc3QgbmV3SXRlbXMgPSBbLi4udGhpcy5mb3JtVmFsaWRhdGUuc2xpZGVyX2ltYWdlXTsNCiAgICAgIGNvbnN0IHNyYyA9IG5ld0l0ZW1zLmluZGV4T2YodGhpcy5kcmFnZ2luZyk7DQogICAgICBjb25zdCBkc3QgPSBuZXdJdGVtcy5pbmRleE9mKGl0ZW0pOw0KICAgICAgbmV3SXRlbXMuc3BsaWNlKGRzdCwgMCwgLi4ubmV3SXRlbXMuc3BsaWNlKHNyYywgMSkpOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuc2xpZGVyX2ltYWdlID0gbmV3SXRlbXM7DQogICAgfSwNCiAgICAvL+WvueixoeaVsOe7hOWOu+mHje+8mw0KICAgIHVuaXF1ZShhcnIpIHsNCiAgICAgIGNvbnN0IHJlcyA9IG5ldyBNYXAoKTsNCiAgICAgIHJldHVybiBhcnIuZmlsdGVyKChhcnIpID0+ICFyZXMuaGFzKGFyci5wcm9kdWN0X2lkKSAmJiByZXMuc2V0KGFyci5wcm9kdWN0X2lkLCAxKSk7DQogICAgfSwNCiAgICAvLyDllYblk4FpZA0KICAgIGdldFByb2R1Y3RJZChkYXRhKSB7DQogICAgICB0aGlzLmdvb2RzX21vZGFscyA9IGZhbHNlOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucmVjb21tZW5kX2xpc3QgPSB0aGlzLnVuaXF1ZSh0aGlzLmZvcm1WYWxpZGF0ZS5yZWNvbW1lbmRfbGlzdC5jb25jYXQoZGF0YSkpOw0KICAgIH0sDQogICAgLy8g6YCJ5oup5o6o6I2Q5ZWG5ZOBDQogICAgY2hhbmdlR29vZHMoKSB7DQogICAgICB0aGlzLmdvb2RzX21vZGFscyA9IHRydWU7DQogICAgICB0aGlzLiRyZWZzLmdvb2RzbGlzdC5nZXRMaXN0KCk7DQogICAgICB0aGlzLiRyZWZzLmdvb2RzbGlzdC5nb29kc0NhdGVnb3J5KCk7DQogICAgfSwNCiAgICAvLyDpgInmi6nnlKjmiLfmoIfnrb4NCiAgICBhY3RpdmVEYXRhKGRhdGFMYWJlbCkgew0KICAgICAgdGhpcy5sYWJlbFNob3cgPSBmYWxzZTsNCiAgICAgIHRoaXMuZGF0YUxhYmVsID0gZGF0YUxhYmVsOw0KICAgIH0sDQogICAgLy8g6YCJ5oup5ZWG5ZOB5qCH562+DQogICAgYWN0aXZlTGFiZWwoZGF0YSkgew0KICAgICAgdGhpcy50YWdTaG93ID0gZmFsc2U7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5sYWJlbF9saXN0ID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKTsNCiAgICB9LA0KICAgIC8vIOagh+etvuW8ueeql+WFs+mXrQ0KICAgIGxhYmVsQ2xvc2UoKSB7DQogICAgICB0aGlzLmxhYmVsU2hvdyA9IGZhbHNlOw0KICAgICAgdGhpcy50YWdTaG93ID0gZmFsc2U7DQogICAgfSwNCiAgICAvLyDliKDpmaTnlKjmiLfmoIfnrb4NCiAgICBjbG9zZUxhYmVsKGxhYmVsKSB7DQogICAgICBsZXQgaW5kZXggPSB0aGlzLmRhdGFMYWJlbC5pbmRleE9mKHRoaXMuZGF0YUxhYmVsLmZpbHRlcigoZCkgPT4gZC5pZCA9PSBsYWJlbC5pZClbMF0pOw0KICAgICAgdGhpcy5kYXRhTGFiZWwuc3BsaWNlKGluZGV4LCAxKTsNCiAgICB9LA0KICAgIC8vIOaJk+W8gOmAieaLqeeUqOaIt+agh+etvg0KICAgIG9wZW5MYWJlbChyb3cpIHsNCiAgICAgIHRoaXMubGFiZWxTaG93ID0gdHJ1ZTsNCiAgICB9LA0KICAgIGhhbmRsZVJlbW92ZVJlY29tbWVuZChpKSB7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5yZWNvbW1lbmRfbGlzdC5zcGxpY2UoaSwgMSk7DQogICAgfSwNCiAgICAvLyDmiZPlvIDnmoTokKXplIDmtLvliqjmoIfnrb4NCiAgICB3YXRjaEFjdGl2aXR5KCkgew0KICAgICAgbGV0IG1hcmtldGluZyA9IFtdOw0KICAgICAgLy8g5L2/55So5a+56LGh5pig5bCE5LyY5YyW5p2D6ZmQ5Yik5pat6YC76L6RDQogICAgICBjb25zdCBwZXJtaXNzaW9uTWFwID0gew0KICAgICAgICDpu5jorqQ6IHRydWUsDQogICAgICAgIOenkuadgDogJ3NlY2tpbGwnLA0KICAgICAgICDnoI3ku7c6ICdiYXJnYWluJywNCiAgICAgICAg5ou85ZuiOiAnY29tYmluYXRpb24nLA0KICAgICAgfTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmFjdGl2aXR5LmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgIGlmIChwZXJtaXNzaW9uTWFwW2VsXSA9PT0gdHJ1ZSB8fCAocGVybWlzc2lvbk1hcFtlbF0gJiYgY2hlY2tBcnJheShwZXJtaXNzaW9uTWFwW2VsXSkpKSB7DQogICAgICAgICAgbWFya2V0aW5nLnB1c2goZWwpOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmFjdGl2aXR5ID0gbWFya2V0aW5nOw0KICAgIH0sDQogIH0sDQp9Ow0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAgUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/product/productAdd","sourcesContent":["\r\n\r\n\r\n\r\n"]}]}