{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\flow\\OnlineForm.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\flow\\OnlineForm.vue","mtime":1733309211970},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgRWlwSW5wdXQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW5wdXQudnVlJw0KaW1wb3J0IEVpcENoZWNrYm94IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENoZWNrYm94LnZ1ZScNCmltcG9ydCBFaXBTZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU2VsZWN0LnZ1ZScNCmltcG9ydCBFaXBSYWRpbyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBSYWRpby52dWUnDQppbXBvcnQgRWlwVXNlclNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFVzZXJTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwRGVtZW5zaW9uU2VsZWN0b3IgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvc2VsZWN0b3IvRWlwRGVtZW5zaW9uU2VsZWN0b3IudnVlJw0KaW1wb3J0IEVpcEpvYlNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcEpvYlNlbGVjdG9yLnZ1ZScNCmltcG9ydCBFaXBPcmdTZWxlY3RvciBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9zZWxlY3Rvci9FaXBPcmdTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwUG9zdFNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFBvc3RTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwUm9sZVNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFJvbGVTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGV4dGFyZWEudnVlJw0KaW1wb3J0IEVpcEZvbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRm9udC52dWUnDQppbXBvcnQgRWlwRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYWxvZy52dWUnDQppbXBvcnQgRWlwQXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEF1dG9jb21wbGV0ZS52dWUnDQppbXBvcnQgRWlwQ2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ2FzY2FkZXIudnVlJw0KaW1wb3J0IEVpcFRyZWVzZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVHJlZXNlbGVjdC52dWUnDQppbXBvcnQgRWlwQnV0dG9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEJ1dHRvbi52dWUnDQppbXBvcnQgRWlwRGF0ZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRlLnZ1ZScNCmltcG9ydCBFaXBJbWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW1nLnZ1ZScNCmltcG9ydCBFaXBWaWV3ZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVmlld2VyLnZ1ZScNCmltcG9ydCBFaXBTd2l0Y2ggZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3dpdGNoLnZ1ZScNCmNvbnN0IEVpcE1hcCA9ICgpID0+IGltcG9ydCgiQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwTWFwLnZ1ZSIpOw0KY29uc3QgRWlwRm9udFVlZGl0b3IgPSAoKSA9PiBpbXBvcnQoIkAvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEZvbnRVZWRpdG9yLnZ1ZSIpOw0KaW1wb3J0IEh0RmlsZSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEZpbGUudnVlJw0KaW1wb3J0IFZSdW50aW1lVGVtcGxhdGUgZnJvbSAndi1ydW50aW1lLXRlbXBsYXRlJw0KaW1wb3J0IEh0R2FuZ2VkU2VsZWN0IGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0R2FuZ2VkU2VsZWN0LnZ1ZScNCmltcG9ydCBFaXBSZWxGbG93IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlbEZsb3cudnVlJw0KaW1wb3J0IEVpcFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJEaWFsb2cudnVlJw0KaW1wb3J0IEVpcFN1bkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdW5EaWFsb2cudnVlJw0KaW1wb3J0IEh0TGFiZWwgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRMYWJlbC52dWUnDQppbXBvcnQgSHREaWdpdGFsIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0RGlnaXRhbC52dWUnDQppbXBvcnQgSHRDdXJyZW5jeSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEN1cnJlbmN5LnZ1ZScNCmltcG9ydCBFaXBSZWFsdGltZUlucHV0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlYWx0aW1lSW5wdXQudnVlJw0KaW1wb3J0IEVpcFJlYWx0aW1lVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUmVhbHRpbWVUZXh0YXJlYS52dWUnDQppbXBvcnQgRWlwU3RlcCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdGVwLnZ1ZScNCmltcG9ydCBIdElucHV0QXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0SW5wdXRBdXRvY29tcGxldGUudnVlJw0KaW1wb3J0IEh0VHJlZXNlbGVjdCBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdFRyZWVzZWxlY3QudnVlJw0KaW1wb3J0IEh0Q2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDYXNjYWRlci52dWUnDQppbXBvcnQgSHRUcmVlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0VHJlZS52dWUnDQoNCmltcG9ydCBFaXBUYWJzIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFRhYnMudnVlJw0KaW1wb3J0IEVpcFN1YlBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3ViUGFnaW5hdGlvbi52dWUnDQppbXBvcnQgRWlwU3ViSW1wb3J0RGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YkltcG9ydERpYWxvZy52dWUnDQppbXBvcnQgRWlwU3ViRXhwb3J0RGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YkV4cG9ydERpYWxvZy52dWUnDQppbXBvcnQgRWlwQXR0YWNobWVudCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBBdHRhY2htZW50LnZ1ZScNCmltcG9ydCBFaXBEaWMgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRGljLnZ1ZScNCmltcG9ydCBFaXBQYWdpbmF0aW9uTGF5b3V0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFBhZ2luYXRpb25MYXlvdXQudnVlJw0KaW1wb3J0IEVpcFBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUGFnaW5hdGlvbi52dWUnDQppbXBvcnQgRWlwQ29sbGFwc2UgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ29sbGFwc2UudnVlJw0KaW1wb3J0IEVpcFBhZ2luYXRpb25TdGVwcyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBQYWdpbmF0aW9uU3RlcHMudnVlJw0KaW1wb3J0IEVpcERhdGFWaWV3IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERhdGFWaWV3LnZ1ZScNCmltcG9ydCBFaXBIb3RUYWJsZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBIb3RUYWJsZS52dWUnDQppbXBvcnQgRWlwSG90U3ViRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEhvdFN1YkRpYWxvZy52dWUnDQppbXBvcnQgQ29udHJhY3RQcmV2aWV3IGZyb20gJ0AvY29tcG9uZW50cy9jb21tb24vQ29udHJhY3RQcmV2aWV3LnZ1ZScNCmltcG9ydCBFaXBUYWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGFnLnZ1ZScNCmltcG9ydCBFaXBTdWJ0YWJsZUJhY2tmaWxsIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YnRhYmxlQmFja2ZpbGwudnVlJw0KaW1wb3J0IEVpcERpdmlkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRGl2aWRlci52dWUnDQppbXBvcnQgRWlwT2ZmaWNlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcE9mZmljZS52dWUnDQppbXBvcnQgRWlwUXJjb2RlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFFyY29kZS52dWUnDQppbXBvcnQgRWlwU2lnbmF0dXJlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFNpZ25hdHVyZS52dWUnDQppbXBvcnQgU3ViUGFnaW5hdGlvbiBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9idXMvU3ViUGFnaW5hdGlvbi5qcycNCg0KaW1wb3J0IFZ1ZSBmcm9tICd2dWUnDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdvbmxpbmUtZm9ybScsDQogIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50JywgJ2luaXRGaWxsRGF0YScsICdmbG93S2V5JywgJ2Zvcm1JZCcsICdpc0xvb2snLCAnZmxvd0tleSddLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBsb2FkZWRGYWlsOiBmYWxzZSwgLy/ooajljZXliqDovb1odG1s5piv5ZCm5aSx6LSlDQogICAgICBzdWJCYWNrZmlsbDogbmV3IE1hcCgpLA0KICAgICAgaG90VGFibGVGaWxsYmFjazogU3RyaW5nDQogICAgfQ0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuaW5pdCgpDQogIH0sDQogIHdhdGNoOiB7DQogICAgZGF0YTp7DQogICAgICBoYW5kbGVyOiBmdW5jdGlvbihuZXdWYWwsIG9sZFZhbHVlKSB7DQogICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoInVwZGF0ZURhdGEiLG5ld1ZhbCk7DQogICAgICB9LA0KICAgICAgZGVlcDogdHJ1ZSwNCiAgICAgIGltbWVkaWF0ZTogdHJ1ZQ0KICAgIH0sDQogICAgaHRtbDogZnVuY3Rpb24obmV3VmFsKSB7DQogICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgIHRoaXMuaW5pdCgpDQogICAgICB9DQogICAgfSwNCiAgICBob3RUYWJsZUZpbGxiYWNrOiBmdW5jdGlvbihuZXdWYWwpIHsNCiAgICAgIGlmIChuZXdWYWwpIHsNCiAgICAgICAgbGV0IG5ld1ZhbEFycmF5ID0gbmV3VmFsLnNwbGl0KCdfdGltZXN0YW1wXycpDQogICAgICAgIGxldCBib1BhdGhBcnJheSA9IG5ld1ZhbEFycmF5WzBdLnNwbGl0KCcuJykNCiAgICAgICAgbGV0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBib1BhdGhBcnJheVswXSArICcuJyArIGJvUGF0aEFycmF5WzFdDQogICAgICAgIGxldCBzdWJCbyA9IHRoaXMuZGF0YVtib1BhdGhBcnJheVswXV1bYm9QYXRoQXJyYXlbMV1dDQogICAgICAgIHRoaXMuJHJlZnMub25saW5lRm9ybS4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEoc3ViQm8pDQogICAgICB9DQogICAgfQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgbG9hZFN1Y2Nlc3MocmVzKXsNCiAgICAgIHRoaXMuJGVtaXQoImxvYWRTdWNjZXNzIixyZXMpOw0KICAgIH0sDQogICAgaW5pdCgpIHsNCiAgICAgIGxldCBpbml0RmlsbERhdGEgPSB0aGlzLmluaXRGaWxsRGF0YQ0KICAgICAgbGV0IHBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb24NCiAgICAgIFZ1ZS5jb21wb25lbnQoJ2h0LXJ1bnRpbWUtdGVtcGxhdGUnLCB7DQogICAgICAgIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50J10sDQogICAgICAgIHRlbXBsYXRlOiB0aGlzLmh0bWwsDQogICAgICAgIGRhdGEoKSB7DQogICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGxlZnRfaW1hZ2U6ICcnLA0KICAgICAgICAgICAgcmlnaHRfaW1hZ2U6ICcnLA0KICAgICAgICAgICAgdHJhbnNpdGlvbkluZGV4OiAtMSwNCiAgICAgICAgICAgIGN1clRhYkluZGV4OiAndGFiZV9jaGVja18wJywNCiAgICAgICAgICAgIGVyck1lc2c6ICcnLA0KICAgICAgICAgICAgZmlsbE9yZzoge30sDQogICAgICAgICAgICBmaWxsT3JnQ29uZk1hcDoge30NCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIGNvbXB1dGVkOiB7DQogICAgICAgICAgLy8g5a2Q6KGo5YmN56uv5YiG6aG16L+H5ruk5ZmoDQogICAgICAgICAgcGFnaW5nU3ViRGF0YSgpIHsNCiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcw0KICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGFwYXRoKSB7DQogICAgICAgICAgICAgIC8vIOmAmui/h+WtkOihqOaVsOaNrui3r+W+hOiOt+WPluWIhumhteaVsOaNrg0KICAgICAgICAgICAgICByZXR1cm4gU3ViUGFnaW5hdGlvbi5wYWdpbmdCeVBhdGgoZGF0YXBhdGgsIG1lKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgbW91bnRlZCgpIHsNCiAgICAgICAgICAvLyDlpoLmnpzlvZPliY3ooajljZXnmoRlbGVtZW505Li6Q29tbWVudOivtOaYjuihqOWNleWKoOi9veWksei0peS6huOAgg0KICAgICAgICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLiRlbC5jb25zdHJ1Y3RvciA9PSBDb21tZW50KSB7DQogICAgICAgICAgICB0aGlzLiRwYXJlbnQubG9hZGVkRmFpbCA9IHRydWUNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yDQogICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZSkgew0KICAgICAgICAgICAgZm9yIChsZXQgc3ViVGFibGVOYW1lIGluIHRoaXMucGVybWlzc2lvbi50YWJsZSkgew0KICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYmxlTmFtZV0ucmVxdWlyZWQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1YlRhYmxlQnlOYW1lKHN1YlRhYmxlTmFtZSkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzLiRlbWl0KCJsb2FkU3VjY2VzcyIsdHJ1ZSk7DQogICAgICAgICAgLy/liJ3lp4vljJZoYW5kc29udGFibGXmlbDmja4NCiAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7DQogICAgICAgICAgICBjb25zdCBmb3JtSWQgPSB0aGlzLmZvcm1JZA0KICAgICAgICAgICAgbGV0IF90aGlzID0gdGhpcw0KICAgICAgICAgICAgaWYgKCFmb3JtSWQpIHsNCiAgICAgICAgICAgICAgdGhpcy50b0luaXRUZW1vbGF0ZURhdGEoaW5pdEZpbGxEYXRhKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMuJGxvYWRpbmcoew0KICAgICAgICAgICAgICAgIGxvY2s6IHRydWUsDQogICAgICAgICAgICAgICAgdGV4dDogJ+ato+WcqOiOt+WPluWIneWni+WMluS/oeaBry4uLicsDQogICAgICAgICAgICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsDQogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgdGhpcy4kaHR0cC5nZXQoJyR7Zm9ybX0vZm9ybS9mb3JtL3YxL3ByZXZpZXdEZXNpZ25WdWU/Zm9ybUlkPScgKyBmb3JtSWQpLnRoZW4oDQogICAgICAgICAgICAgICAgcmVzcCA9PiB7DQogICAgICAgICAgICAgICAgICBpZiAocmVzcC5kYXRhKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gcmVzcC5kYXRhLmRhdGENCiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybURhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybURhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5kYXRhW2tleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGF0YVtrZXldID0gZm9ybURhdGFba2V5XQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCkNCiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSkNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKQ0KICAgICAgICAgICAgICAgICAgICBfdGhpcy50b0luaXRUZW1vbGF0ZURhdGEoaW5pdEZpbGxEYXRhKQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgKCkgPT4gew0KICAgICAgICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpDQogICAgICAgICAgICAgICAgICBfdGhpcy50b0luaXRUZW1vbGF0ZURhdGEoaW5pdEZpbGxEYXRhKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGhpcy5pc1ByaW50KSB7DQogICAgICAgICAgICB0aGlzLnByaW50RGV0YWlsKCkNCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIC8v5pS5di1ydW50aW1lLXRlbXBsYXRlLmVzLmpz55qE5rqQ56CB77yM5oiW6ICF5pS5di1ydW50aW1lLXRlbXBsYXRl55qE54mI5pys5pS55oiQMS41LjINCiAgICAgICAgbWV0aG9kczogew0KICAgICAgICAgIHRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhKSB7DQogICAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmRhdGENCiAgICAgICAgICAgIGxldCByZWZzID0gdGhpcy4kcmVmcw0KICAgICAgICAgICAgZm9yIChjb25zdCBkZWYgaW4gZm9ybURhdGEpIHsNCiAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmhhc093blByb3BlcnR5KGRlZikpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBib0RlZiA9IGZvcm1EYXRhW2RlZl0NCiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJvIGluIGJvRGVmKSB7DQogICAgICAgICAgICAgICAgICBpZiAoYm9EZWYuaGFzT3duUHJvcGVydHkoYm8pICYmIGJvLmluZGV4T2YoJ3N1Yl8nKSA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9ICdob3R0YWJsZS4nICsgZGVmICsgJy4nICsgYm8NCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnNbcmVmXSkgew0KICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEoZm9ybURhdGFbZGVmXVtib10sIHBlcm1pc3Npb24pDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdEZpbGxEYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnNbcmVmXS5pbml0VGVtcGxhdGVEYXRhKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBwcmludERldGFpbCgpIHsNCiAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ29ubGluZS1mb3JtJylbMF0uaW5uZXJIVE1MDQogICAgICAgICAgICB3aW5kb3cucHJpbnQoKQ0KICAgICAgICAgICAgaWYgKHRoaXMuaXNQcmludCkgew0KICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKQ0KICAgICAgICAgICAgfSwgMjAwKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgYXN5bmMgbGVhdmVUYWJWZXJpZnkoYWN0aXZlTmFtZSwgb2xkQWN0aXZlTmFtZSkgew0KICAgICAgICAgICAgbGV0IGVycml0ZW1zID0gW10NCiAgICAgICAgICAgIGxldCBmb3JtRWxlbWVudEFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpDQogICAgICAgICAgICBsZXQgZnJtSW5zdCA9IGZvcm1FbGVtZW50QXJ5WzBdLl9fdnVlX18NCiAgICAgICAgICAgIGxldCBjaGlsZHJlbnMgPSBmcm1JbnN0LiRyZWZzLm9ubGluZUZvcm0uJHJlZnMNCiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmcm1JbnN0LiRyb290LiR2YWxpZGF0b3IudmFsaWRhdGVBbGwoJ2N1c3RvbS1mb3JtJykNCiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7DQogICAgICAgICAgICAgIGxldCBjdXJFbCA9IGNoaWxkcmVuc1tvbGRBY3RpdmVOYW1lXS4kZWwNCiAgICAgICAgICAgICAgdGhpcy4kdmFsaWRhdG9yLmVycm9ycy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICAgIGlmIChjdXJFbC5jb250YWlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShpdGVtLmZpZWxkKVswXSkpIHsNCiAgICAgICAgICAgICAgICAgIGVycml0ZW1zLnB1c2goaXRlbSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICAvL+aLvOaOpeaPkOekuua2iOaBrw0KICAgICAgICAgICAgbGV0IG1zZyA9ICcnDQogICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGVycml0ZW1zKSB7DQogICAgICAgICAgICAgIGxldCBmaWVsZExhYmVsID0gJycNCiAgICAgICAgICAgICAgaWYgKGl0ZW0uZmllbGQpIHsNCiAgICAgICAgICAgICAgICBmaWVsZExhYmVsID0gaXRlbS5maWVsZA0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkICYmIGl0ZW0uZmllbGQuaW5kZXhPZignLScpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgZmllbGRMYWJlbCA9IGl0ZW0uZmllbGQuc3Vic3RyKGl0ZW0uZmllbGQuaW5kZXhPZignLScpICsgMSkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBtc2cgKz0gZmllbGRMYWJlbCArICcgJyArIGl0ZW0ubXNnICsgJzxici8+Jw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG1zZykgew0KICAgICAgICAgICAgICB0aGlzLiRub3RpZnkuZXJyb3Ioew0KICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLiR0KCdjb21tb24uZXJyVGlwJyksDQogICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiB0cnVlLA0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICByZWplY3QoKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/lrZDooajkuIrnp7sNCiAgICAgICAgICB1cChpbmRleCwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflt7Lnu4/mmK/liJfooajkuK3nrKzkuIDkvY0nLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgbGV0IHRlbXAgPSBkYXRhW2luZGV4IC0gMV0NCiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlDQogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCAtIDEsIGRhdGFbaW5kZXhdKQ0KICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXgsIHRlbXApDQogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gZmFsc2UNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5a2Q6KGo5LiL56e7DQogICAgICAgICAgZG93bihpbmRleCwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKGluZGV4ID09PSBkYXRhLmxlbmd0aCAtIDEpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W3sue7j+aYr+WIl+ihqOS4reacgOWQjuS4gOS9jScsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0aGlzLmlzVHJhbnNpdGlvbiA9IHRydWUNCiAgICAgICAgICAgICAgbGV0IGkgPSBkYXRhW2luZGV4ICsgMV0NCiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlDQogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCArIDEsIGRhdGFbaW5kZXhdKQ0KICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXgsIGkpDQogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gZmFsc2UNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5a2Q6KGo5aSN5Yi25pWw5o2uDQogICAgICAgICAgY29weShvYmosIGl0ZW0pIHsNCiAgICAgICAgICAgIGxldCBuZXdPbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKQ0KICAgICAgICAgICAgLy/mioppZOe9ruepuuS7peWFjei1sOeahOS/ruaUueaWueazlQ0KICAgICAgICAgICAgaWYgKG5ld09uZS5pZF8pIHsNCiAgICAgICAgICAgICAgZGVsZXRlIG5ld09uZS5pZF8NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChuZXdPbmUuc3ViX3Jvd19yZWFkb25seSkgew0KICAgICAgICAgICAgICBkZWxldGUgbmV3T25lLnN1Yl9yb3dfcmVhZG9ubHkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG5ld09uZS5zdWJfZ3VpZD10aGlzLmd1aWQoKTsNCiAgICAgICAgICAgIG9iai5wdXNoKG5ld09uZSkNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5a2Q6KGo6buY6K6k5YC85Zue5aGrDQogICAgICAgICAgYWRkU3ViVGFiKHN1YlRhYlBhdGgpIHsNCiAgICAgICAgICAgIGxldCBwYXRoQXJyID0gc3ViVGFiUGF0aC5zcGxpdCgnLicpDQogICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCAzKSB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgbGV0IHN1YlRhYk5hbWUgPSBwYXRoQXJyWzJdLnJlcGxhY2UoJ3N1Yl8nLCAnJykNCiAgICAgICAgICAgICAgbGV0IHN1YkluaXREYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dLmluaXREYXRhW3N1YlRhYk5hbWVdIHx8IHt9DQogICAgICAgICAgICAgIC8v5Yik5pat5b2T5YmN5a2Q6KGo5piv5ZCm5a2Y5pyJ5Zue5pi+5YC8DQogICAgICAgICAgICAgIGlmICh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwgJiYgdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmhhcyhzdWJUYWJQYXRoKSkgew0KICAgICAgICAgICAgICAgIC8vdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dLnB1c2godGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmdldChzdWJUYWJQYXRoKSk7DQogICAgICAgICAgICAgICAgc3ViSW5pdERhdGEgPSB0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgLy/miormlbDnu4Tph4zpnaLnmoTlgLzkuLogbnVsbCDovazmjaLkuLrnqbrlrZfnrKbkuLINCiAgICAgICAgICAgICAgbGV0IHN0ciA9IEpTT04uc3RyaW5naWZ5KHN1YkluaXREYXRhKS5yZXBsYWNlKC9udWxsL2csICciIicpDQogICAgICAgICAgICAgIGxldCBzdWJEYXRhID0gSlNPTi5wYXJzZShzdHIpDQogICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzdWJEYXRhKSB7DQogICAgICAgICAgICAgICAgLy/ngrnmt7vliqDml7bliKTmlq3opoHmlrDlop7lrZDooajorrDlvZXkuK3nmoTlrZnooajmmK/lkKbmnInlgLwNCiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ3N1Yl8nKSA9PSAwICYmIHN1YkRhdGFba2V5XS5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgICBzdWJEYXRhW2tleV0gPSBbXSAvL+acieWImea4heepug0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAvL+eCuea3u+WKoOaXtuWIpOaWreimgeaWsOWinuWtkOihqOiusOW9leS4reeahOWtl+auteaYr+WQpuacieWAvA0KICAgICAgICAgICAgICAgIC8vIGlmKHN1YkRhdGFba2V5XSl7DQogICAgICAgICAgICAgICAgLy8gICAgIHN1YkRhdGFba2V5XSA9ICIiOy8v5pyJ5YiZ5riF56m6DQogICAgICAgICAgICAgICAgLy8gfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCBmaWxsT2JqID0gdGhpcy50b0ZpbGxPcmcocGF0aEFyclsxXSArICcuJyArIHBhdGhBcnJbMl0sIHN1YkRhdGEpDQogICAgICAgICAgICAgIGZpbGxPYmouc3ViX2d1aWQ9dGhpcy5ndWlkKCk7DQogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXS5wdXNoKGZpbGxPYmopDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBndWlkKCl7DQogICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7DQogICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwNCiAgICAgICAgICAgICAgICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpOw0KICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5a2Z6KGo6buY6K6k5YC85Zue5aGrDQogICAgICAgICAgYWRkU3VuVGFiKHN1YlRhYlBhdGgsIHN1YkluZGV4KSB7DQogICAgICAgICAgICBsZXQgcGF0aEFyciA9IHN1YlRhYlBhdGguc3BsaXQoJy4nKQ0KICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgNCkgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Z6KGo6Lev5b6E5pyJ6K+vJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGxldCBzdWJUYWJOYW1lID0gcGF0aEFyclsyXS5yZXBsYWNlKCdzdWJfJywgJycpDQogICAgICAgICAgICAgIGxldCBzdW5UYWJOYW1lID0gcGF0aEFyclszXS5yZXBsYWNlKCdzdWJfJywgJycpDQogICAgICAgICAgICAgIGxldCBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtwYXRoQXJyWzFdXS5pbml0RGF0YVtzdWJUYWJOYW1lXS5pbml0RGF0YVtzdW5UYWJOYW1lXSB8fCB7fQ0KICAgICAgICAgICAgICAvL+WIpOaWreW9k+WJjeWtmeihqOaYr+WQpuWtmOacieWbnuaYvuWAvA0KICAgICAgICAgICAgICBpZiAodGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsICYmIHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5oYXMoc3ViVGFiUGF0aCkpIHsNCiAgICAgICAgICAgICAgICAvL3RoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXS5wdXNoKHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5nZXQoc3ViVGFiUGF0aCkpOw0KICAgICAgICAgICAgICAgIHN1YkluaXREYXRhID0gdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmdldChzdWJUYWJQYXRoKQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIC8v5oqK5pWw57uE6YeM6Z2i55qE5YC85Li6IG51bGwg6L2s5o2i5Li656m65a2X56ym5LiyDQogICAgICAgICAgICAgIGxldCBzdHIgPSBKU09OLnN0cmluZ2lmeShzdWJJbml0RGF0YSkucmVwbGFjZSgvbnVsbC9nLCAnIiInKQ0KICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXVtzdWJJbmRleF1bcGF0aEFyclszXV0pIHsNCiAgICAgICAgICAgICAgICBsZXQga2V5ID0gW3BhdGhBcnJbM11dDQogICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbmV3IEFycmF5KCkNCiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW2tleV0gPSB2YWx1ZQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCBzdW5Cb2RhdGE9SlNPTi5wYXJzZShzdHIpOw0KICAgICAgICAgICAgICBzdW5Cb2RhdGEuc3ViX2d1aWQ9dGhpcy5ndWlkKCk7DQogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXVtzdWJJbmRleF1bcGF0aEFyclszXV0ucHVzaChzdW5Cb2RhdGEpDQogICAgICAgICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCkgLy/ov6vkvb8gVnVlIOWunuS+i+mHjeaWsOa4suafkw0KDQogICAgICAgICAgICAgIC8vIHRoaXMucGVybWlzc2lvbi50YWJsZVtzdW5UYWJOYW1lXS5yZXF1aXJlZCA9ICJmYWxzZSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBhZGRTdWJUYWJsZUJ5TmFtZShzdWJUYWJsZU5hbWUpIHsNCiAgICAgICAgICAgIGZvciAobGV0IGJvQWxpYXMgaW4gdGhpcy5kYXRhKSB7DQogICAgICAgICAgICAgIGxldCBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtib0FsaWFzXS5pbml0RGF0YVtzdWJUYWJsZU5hbWVdIHx8IHt9DQogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXSAmJiB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXS5sZW5ndGggPCAxKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV0ucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN1YkluaXREYXRhKSkpDQogICAgICAgICAgICAgICAgLy8g5a2Z6KGo5b+F5aGrIOm7mOiupOa3u+WKoOS4gOadoQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHRhYmxlTmFtZSBpbiB0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZVt0YWJsZU5hbWVdLnJlcXVpcmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF0uaGFzT3duUHJvcGVydHkoJ3N1Yl8nICsgdGFibGVOYW1lKSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXS5sZW5ndGggPCAxDQogICAgICAgICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdLnB1c2goDQogICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEuaW5pdERhdGFbdGFibGVOYW1lXSkpDQogICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdLmhhc093blByb3BlcnR5KCdzdWJfJyArIHRhYmxlTmFtZSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdDQogICAgICAgICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdID0gW10NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0ucHVzaChzdWJJbml0RGF0YS5pbml0RGF0YVt0YWJsZU5hbWVdKQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZGVsZXRlUm93KHN1YlRhYmxlUGF0aCwgaXRlbSkgew0KICAgICAgICAgICAgbGV0IHBhdGhBcnIgPSBzdWJUYWJsZVBhdGguc3BsaXQoJy4nKQ0KICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMikgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGxldCBzdWJUYWJOYW1lID0gcGF0aEFyclsxXS5yZXBsYWNlKCdzdWJfJywgJycpDQogICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0ubGVuZ3RoID09IDEgJiYNCiAgICAgICAgICAgICAgICAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09IHRydWUgfHwgdGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09ICd0cnVlJykNCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo5b+F5aGr5LiA5p2h6K6w5b2VJywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dLnJlbW92ZShpdGVtKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZGVsZXRlU3VuUm93KHN1YlRhYmxlUGF0aCwgaXRlbSwgc3ViSW5kZXgpIHsNCiAgICAgICAgICAgIGxldCBwYXRoQXJyID0gc3ViVGFibGVQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtmeihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBsZXQgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMV0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBsZXQgc3VuVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dW3N1YkluZGV4XVtwYXRoQXJyWzJdXS5sZW5ndGggPT0gMSAmJg0KICAgICAgICAgICAgICAgICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3VuVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKQ0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZnooajlv4XloavkuIDmnaHorrDlvZUnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1bc3ViSW5kZXhdW3BhdGhBcnJbMl1dLnJlbW92ZShpdGVtKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgY2xlYXJBbGwoc3ViVGFibGVQYXRoLCBpc0hvdCwgaW5kZXgpIHsNCiAgICAgICAgICAgIGxldCBwYXRoQXJyID0gc3ViVGFibGVQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDIpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIC8v5a2Z6KGoDQogICAgICAgICAgICB9IGVsc2UgaWYgKChpbmRleCB8fCBpbmRleCA9PT0gMCkgJiYgcGF0aEFyci5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1baW5kZXhdW3BhdGhBcnJbMl1dLmVtcHR5KCkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGNvbnN0IHN1YlRhYk5hbWUgPSBwYXRoQXJyWzFdLnJlcGxhY2UoJ3N1Yl8nLCAnJykNCiAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzBdXVtwYXRoQXJyWzFdXS5sZW5ndGggPT0gMSAmJg0KICAgICAgICAgICAgICAgICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKQ0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajlv4XloavkuIDmnaHorrDlvZUnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0uZW1wdHkoKQ0KICAgICAgICAgICAgICBpZiAoaXNIb3QpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoDQogICAgICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEobnVsbCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgYWRkSW5pdFRlbXBsYXRlRGF0YShzdWJUYWJsZVBhdGgpIHsNCiAgICAgICAgICAgIGNvbnN0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGgNCiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLnRvQWRkSW5pdFRlbXBsYXRlRGF0YSgpDQogICAgICAgICAgfSwNCiAgICAgICAgICBtZXJnZUNlbGxSZWZyZXNoKHN1YlRhYmxlUGF0aCkgew0KICAgICAgICAgICAgY29uc3QgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aA0KICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0ubWVyZ2VDZWxsUmVmcmVzaCgpDQogICAgICAgICAgfSwNCiAgICAgICAgICBleGVjQ2VsbE1hdGhFeHAoc3ViVGFibGVQYXRoKSB7DQogICAgICAgICAgICBjb25zdCBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoDQogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5leGVjQ2VsbE1hdGhFeHAoKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZXhlY0Nyb3NzTWFwcGluZyhzdWJUYWJsZVBhdGgpIHsNCiAgICAgICAgICAgIGNvbnN0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGgNCiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLmV4ZWNDcm9zc01hcHBpbmcoKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZ2V0SG90VGFibGVEYXRhKHN1YlRhYmxlUGF0aCkgew0KICAgICAgICAgICAgY29uc3QgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aA0KICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZ2V0SG90VGFibGVEYXRhKCkNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v54K55Ye75YiG6aG15qCh6aqM5oyJ6ZKu6Kem5Y+R5LqL5Lu2DQogICAgICAgICAgbmV4dFN0ZXBDbGljayhpc0NoZWNrLCBpbmRleCwgd2F5KSB7DQogICAgICAgICAgICBsZXQgY2hpbGRyZW5zID0gdGhpcy4kcmVmcy5vbmxpbmVGb3JtLiRjaGlsZHJlblswXS4kcmVmcw0KICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IHdheSA9PSAnYmFjaycgPyBpbmRleCAtIDEgOiBpbmRleCArIDENCiAgICAgICAgICAgIC8v6L+b5YWl5LiL5LiA5Liq6aG1562+5bm25LiU6ZyA6KaB5qCh6aqM5b2T5YmN6aG1562+44CC5YiZ6L+b6KGM5qCh6aqMDQogICAgICAgICAgICBpZiAod2F5ID09ICduZXh0JyAmJiBpc0NoZWNrID09ICd5Jykgew0KICAgICAgICAgICAgICB0aGlzLiR2YWxpZGF0b3IudmFsaWRhdGVBbGwoJ2N1c3RvbS1mb3JtJykudGhlbihyZXN1bHQgPT4gew0KICAgICAgICAgICAgICAgIGxldCBjdXJUYWJIYXNFcnJvciA9IGZhbHNlDQogICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAgIGxldCBjdXJFbCA9IGNoaWxkcmVuc1snbmV4dF9zdGVwX2NoZWNrXycgKyBpbmRleF0uJGVsDQogICAgICAgICAgICAgICAgICB0aGlzLiR2YWxpZGF0b3IuZXJyb3JzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChjdXJFbC5jb250YWlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShpdGVtLmZpZWxkKVswXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICBjdXJUYWJIYXNFcnJvciA9IHRydWUNCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHJlc3VsdCB8fCAhY3VyVGFiSGFzRXJyb3IpIHsNCiAgICAgICAgICAgICAgICAgIGNoaWxkcmVucy5lbF90YWJsZV9jaGVjay5jdXJyZW50TmFtZSA9IG5leHRJbmRleCArICcnDQogICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zQXJyYXkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGlsZHJlbnMpDQogICAgICAgICAgICAgICAgICBjaGlsZHJlbnNBcnJheS5yZW1vdmUoJ2NvbGxhcHNlJykNCiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZHJlbnNBcnJheS5sZW5ndGggLSAzICYmIHdheSA9PSAnbmV4dCcpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnc3RhcnRGbG93QnRuQ2hhbmdlJywgdHJ1ZSkNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBjaGlsZHJlbnMuZWxfdGFibGVfY2hlY2suY3VycmVudE5hbWUgPSBuZXh0SW5kZXggKyAnJw0KICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zQXJyYXkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGlsZHJlbnMpDQogICAgICAgICAgICAgIGNoaWxkcmVuc0FycmF5LnJlbW92ZSgnY29sbGFwc2UnKQ0KICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGRyZW5zQXJyYXkubGVuZ3RoIC0gMyAmJiB3YXkgPT0gJ25leHQnKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnc3RhcnRGbG93QnRuQ2hhbmdlJywgdHJ1ZSkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgdG9GaWxsT3JnKHBhdGgsIHJvdykgew0KICAgICAgICAgICAgY29uc3QgZmlsbE9yZ0NvbmYgPSB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdDQogICAgICAgICAgICBsZXQgZmlsbE9iaiA9IHt9DQogICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYgJiYgdGhpcy5maWxsT3JnKSB7DQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5uYW1lKSB7DQogICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhdGggPSBmaWxsT3JnQ29uZi5uYW1lLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBmaWxsT2JqW25hbWVQYXRoW25hbWVQYXRoLmxlbmd0aCAtIDFdXSA9IHRoaXMuZmlsbE9yZy5uYW1lDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGZpbGxPcmdDb25mLmlkKSB7DQogICAgICAgICAgICAgICAgY29uc3QgaWRQYXRoID0gZmlsbE9yZ0NvbmYuaWQuc3BsaXQoJy4nKQ0KICAgICAgICAgICAgICAgIGZpbGxPYmpbaWRQYXRoW2lkUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuaWQNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYuY29kZSkgew0KICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQYXRoID0gZmlsbE9yZ0NvbmYuY29kZS5zcGxpdCgnLicpDQogICAgICAgICAgICAgICAgZmlsbE9ialtjb2RlUGF0aFtjb2RlUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuY29kZQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5pbnN0SWQpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBpbnN0SWRQYXRoID0gZmlsbE9yZ0NvbmYuaW5zdElkLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBmaWxsT2JqW2luc3RJZFBhdGhbaW5zdElkUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgPyB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgOiAnJw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHJldHVybiB7Li4ucm93LCAuLi5maWxsT2JqfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHJvdw0KICAgICAgICAgIH0sDQogICAgICAgICAgaW5pdEZpbGwocGF0aCwgY29uZikgew0KICAgICAgICAgICAgLy/mlLbpm4boh6rliqjlm57loavkv6Hmga8NCiAgICAgICAgICAgIGlmIChwYXRoICYmIGNvbmYpIHsNCiAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBjb25zdCBjb25mSnNvbiA9IHRoaXMuZmlsbE9yZ0NvbmZNYXBbcGF0aF0gPyB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdIDogSlNPTi5wYXJzZShjb25mKQ0KICAgICAgICAgICAgICAgIGlmIChjb25mSnNvbi5pZCB8fCBjb25mSnNvbi5jb2RlIHx8IGNvbmZKc29uLm5hbWUgfHwgY29uZkpzb24uaW5zdElkKSB7DQogICAgICAgICAgICAgICAgICB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdID0gY29uZkpzb24NCiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZpcnN0RmlsbChwYXRoLCBjb25mSnNvbikNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgaW5pdEZpcnN0RmlsbChwYXRoLCBjb25mKSB7DQogICAgICAgICAgICAvL+WkhOeQhuesrOS4gOihjOeahOWbnuWhqw0KICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBwYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXSAmJiB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXS5sZW5ndGggPT0gMSAmJiB0aGlzLmZpbGxPcmcuaWQpIHsNCiAgICAgICAgICAgICAgaWYgKGNvbmYuaWQpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBpZFBhdGggPSBjb25mLmlkLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2lkUGF0aFsyXV0pIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2lkUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcuaWQNCiAgICAgICAgICAgICAgICAgIGlmIChjb25mLmNvZGUpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZVBhdGggPSBjb25mLmNvZGUuc3BsaXQoJy4nKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2NvZGVQYXRoWzJdXSkgew0KICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2NvZGVQYXRoWzJdXSA9IHRoaXMuZmlsbE9yZy5jb2RlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChjb25mLm5hbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhdGggPSBjb25mLm5hbWUuc3BsaXQoJy4nKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW25hbWVQYXRoWzJdXSkgew0KICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW25hbWVQYXRoWzJdXSA9IHRoaXMuZmlsbE9yZy5uYW1lDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGNvbmYuaW5zdElkKSB7DQogICAgICAgICAgICAgICAgY29uc3QgaW5zdElkUGF0aCA9IGNvbmYuaW5zdElkLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2luc3RJZFBhdGhbMl1dKSB7DQogICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpbnN0SWRQYXRoWzJdXSA9IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA/IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA6ICcnDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBpc1Nob3dBZGRCdXR0b24ocGF0aCwgbWF4Um93LCBzdWJJbmRleCkgew0KICAgICAgICAgICAgaWYgKG1heFJvdyA9PT0gMCkgcmV0dXJuIGZhbHNlDQogICAgICAgICAgICBsZXQgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKQ0KICAgICAgICAgICAgaWYgKHN1YkluZGV4ID49IDApIHsNCiAgICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgNCkgew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtwYXRoQXJyWzNdXQ0KICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA+PSBtYXhSb3cNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMykgew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dDQogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID49IG1heFJvdw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2UNCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIGNvbXBvbmVudHM6IHsNCiAgICAgICAgICBFaXBQYWdpbmF0aW9uLA0KICAgICAgICAgIEVpcFN1YlBhZ2luYXRpb24sDQogICAgICAgICAgRWlwU3ViSW1wb3J0RGlhbG9nLA0KICAgICAgICAgIEVpcFN1YkV4cG9ydERpYWxvZywNCiAgICAgICAgICBFaXBQYWdpbmF0aW9uTGF5b3V0LA0KICAgICAgICAgIEVpcElucHV0LA0KICAgICAgICAgIEVpcENoZWNrYm94LA0KICAgICAgICAgIEVpcFNlbGVjdCwNCiAgICAgICAgICBFaXBVc2VyU2VsZWN0b3IsDQogICAgICAgICAgRWlwRGVtZW5zaW9uU2VsZWN0b3IsDQogICAgICAgICAgRWlwSm9iU2VsZWN0b3IsDQogICAgICAgICAgRWlwT3JnU2VsZWN0b3IsDQogICAgICAgICAgRWlwUG9zdFNlbGVjdG9yLA0KICAgICAgICAgIEVpcFJvbGVTZWxlY3RvciwNCiAgICAgICAgICBFaXBSYWRpbywNCiAgICAgICAgICBFaXBUZXh0YXJlYSwNCiAgICAgICAgICBFaXBGb250LA0KICAgICAgICAgIEVpcERpYWxvZywNCiAgICAgICAgICBFaXBCdXR0b24sDQogICAgICAgICAgRWlwRGF0ZSwNCiAgICAgICAgICBFaXBJbWcsDQogICAgICAgICAgRWlwVmlld2VyLA0KICAgICAgICAgIEVpcFN3aXRjaCwNCiAgICAgICAgICBIdEZpbGUsDQogICAgICAgICAgVlJ1bnRpbWVUZW1wbGF0ZSwNCiAgICAgICAgICBIdEdhbmdlZFNlbGVjdCwNCiAgICAgICAgICBFaXBSZWxGbG93LA0KICAgICAgICAgIEVpcFN1YkRpYWxvZywNCiAgICAgICAgICBIdExhYmVsLA0KICAgICAgICAgIEh0RGlnaXRhbCwNCiAgICAgICAgICBIdEN1cnJlbmN5LA0KICAgICAgICAgIEVpcFJlYWx0aW1lSW5wdXQsDQogICAgICAgICAgRWlwUmVhbHRpbWVUZXh0YXJlYSwNCiAgICAgICAgICBFaXBTdGVwLA0KICAgICAgICAgIEh0SW5wdXRBdXRvY29tcGxldGUsDQogICAgICAgICAgSHRUcmVlc2VsZWN0LA0KICAgICAgICAgIEh0Q2FzY2FkZXIsDQogICAgICAgICAgSHRUcmVlLA0KICAgICAgICAgIEVpcEF0dGFjaG1lbnQsDQogICAgICAgICAgRWlwRGljLA0KICAgICAgICAgIEVpcEF1dG9jb21wbGV0ZSwNCiAgICAgICAgICBFaXBDYXNjYWRlciwNCiAgICAgICAgICBFaXBUcmVlc2VsZWN0LA0KICAgICAgICAgIEVpcENvbGxhcHNlLA0KICAgICAgICAgIEVpcFBhZ2luYXRpb25TdGVwcywNCiAgICAgICAgICBFaXBNYXAsDQogICAgICAgICAgRWlwRGF0YVZpZXcsDQogICAgICAgICAgRWlwU3VuRGlhbG9nLA0KICAgICAgICAgIEVpcFRhZywNCiAgICAgICAgICBFaXBIb3RUYWJsZSwNCiAgICAgICAgICBFaXBIb3RTdWJEaWFsb2csDQogICAgICAgICAgQ29udHJhY3RQcmV2aWV3LA0KICAgICAgICAgIEVpcFN1YnRhYmxlQmFja2ZpbGwsDQogICAgICAgICAgRWlwRGl2aWRlciwNCiAgICAgICAgICBFaXBPZmZpY2UsDQogICAgICAgICAgRWlwUXJjb2RlLA0KICAgICAgICAgIEVpcFNpZ25hdHVyZSwNCiAgICAgICAgICBFaXBUYWJzLA0KICAgICAgICAgIEVpcEZvbnRVZWRpdG9yDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfQ0KICB9DQp9DQo="},null]}