@eo-sdk/client 8.16.7 → 8.16.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.d.ts +1 -0
  2. package/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.d.ts +1 -0
  3. package/app/eo-framework-core/api/grid.service.d.ts +2 -0
  4. package/assets/_default/config/main.json +1 -7
  5. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js +45 -20
  6. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js.map +1 -1
  7. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js +2 -2
  8. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js.map +1 -1
  9. package/bundles/eo-sdk-client.umd.js +54 -35
  10. package/bundles/eo-sdk-client.umd.js.map +1 -1
  11. package/bundles/eo-sdk-client.umd.min.js +1 -1
  12. package/bundles/eo-sdk-client.umd.min.js.map +1 -1
  13. package/eo-sdk-client.metadata.json +1 -1
  14. package/esm2015/app/eo-client/about-state/about-state.component.js +3 -3
  15. package/esm2015/app/eo-framework/app-shell/app-bar/app-process/app-process.component.js +2 -2
  16. package/esm2015/app/eo-framework/form-elements/form-input/form-input.component.js +2 -2
  17. package/esm2015/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.js +7 -3
  18. package/esm2015/app/eo-framework/form-elements/string/string.component.js +2 -2
  19. package/esm2015/app/eo-framework/grid/column-configurator/column-configurator.component.js +1 -1
  20. package/esm2015/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.js +4 -2
  21. package/esm2015/app/eo-framework/grid/filters/list-filter.component.js +2 -2
  22. package/esm2015/app/eo-framework/inbox-details/inbox-details.component.js +5 -1
  23. package/esm2015/app/eo-framework/object-form/object-form/form-element/form-element.component.js +5 -2
  24. package/esm2015/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.js +3 -2
  25. package/esm2015/app/eo-framework-core/api/grid.service.js +30 -26
  26. package/esm2015/app/eo-framework-core/api/plugins.service.js +2 -1
  27. package/esm2015/projects/eo-sdk/core/lib/service/auth/auth.service.js +5 -5
  28. package/esm2015/projects/eo-sdk/core/lib/service/backend/backend.service.js +21 -14
  29. package/esm2015/projects/eo-sdk/core/lib/service/config/config.service.js +22 -4
  30. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js +45 -20
  31. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js.map +1 -1
  32. package/fesm2015/eo-sdk-client.js +54 -35
  33. package/fesm2015/eo-sdk-client.js.map +1 -1
  34. package/package.json +2 -2
  35. package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.metadata.json +1 -1
  36. package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +2 -0
  37. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts +5 -0
  38. package/projects/eo-sdk/core/package.json +1 -1
  39. package/scss/_form.scss +2 -2
  40. package/styles.css +1 -1
@@ -191,6 +191,7 @@ export class PluginsService {
191
191
  return {
192
192
  serviceBase: this.backend.getServiceBase()
193
193
  // todo: do we have to provide the plugin developers with these informations?
194
+ // after speaking to Andreas also removed from documentation
194
195
  // pluginsBase: $eoConfig.getPluginBase(),
195
196
  // pluginStatesBase: $eoConfig.getPluginStatesBase(),
196
197
  // themeBase: $eoConfig.getThemeBase()
@@ -257,4 +258,4 @@ PluginsService.ctorParameters = () => [
257
258
  { type: ApplicationRef },
258
259
  { type: NgZone }
259
260
  ];
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9hcGkvcGx1Z2lucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQ0csTUFBTSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFDdEUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFtQixLQUFLLEVBQ3hFLGdCQUFnQixFQUFlLFVBQVUsRUFDMUMsTUFBTSxjQUFjLENBQUM7QUFFdEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBRTdDLE1BQU0sT0FBTyxjQUFjO0lBb0N6QixZQUFvQixPQUF1QixFQUNqQyxhQUFtQyxFQUNuQyxTQUEyQixFQUMzQixNQUFjLEVBQ2YsU0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE1BQXNCLEVBQ3RCLE1BQWM7UUFYSixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtR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RUFBRSxFQUFFO1lBQ3RCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDekIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFPO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO2FBQzNELFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBVTtRQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7WUFyUUYsVUFBVTs7O1lBTjZCLGNBQWM7WUFBcEMsb0JBQW9CO1lBQWtCLGdCQUFnQjtZQUE5RCxNQUFNO1lBRWQsZ0JBQWdCO1lBRGhCLFVBQVU7WUFKSixNQUFNO1lBQ04sWUFBWTtZQUdOLFlBQVk7WUFBRSxXQUFXO1lBTC9CLGNBQWM7WUFBYyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXBwbGljYXRpb25SZWYsIEluamVjdGFibGUsIE5nWm9uZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWdlbnRTZXJ2aWNlfSBmcm9tICcuLi9hZ2VudC9hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVvVXNlciwgTG9nZ2VyLCBOb3RpZmljYXRpb25zU2VydmljZSwgQmFja2VuZFNlcnZpY2UsIENsaXBib2FyZFNlcnZpY2UsXG4gIERtc1NlcnZpY2UsIEV2ZW50U2VydmljZSwgVXNlclNlcnZpY2UsIERtc09iamVjdCwgQ2xpcGJvYXJkQWN0aW9uLCBVdGlscyxcbiAgVHJhbnNsYXRlU2VydmljZSwgSHR0cE9wdGlvbnMsIEVuYWlvRXZlbnRcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcblxuZXhwb3J0IGNvbnN0IFVORE9DS19XSU5ET1dfTkFNRSA9ICdlb1ZpZXdlcic7XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGx1Z2luc1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgdXNlcjogRW9Vc2VyO1xuICBwcml2YXRlIGFnZW50QWN0aW9uID0ge1xuICAgIE9QRU46ICdlby5hZ2VudC5hY3Rpb24ub3BlbicsXG4gICAgTUFJTDogJ2VvLmFnZW50LmFjdGlvbi5tYWlsJyxcbiAgICBNQUlMX0FTX1BERjogJ2VvLmFnZW50LmFjdGlvbi5tYWlsLXBkZicsXG4gICAgQ0xJUEJPQVJEOiAnZW8uYWdlbnQuYWN0aW9uLmNsaXBib2FyZCcsXG4gICAgQ0xJUEJPQVJEX0FTX1BERjogJ2VvLmFnZW50LmFjdGlvbi5jbGlwYm9hcmQtcGRmJyxcbiAgICBFWFRFUk5BTDogJ2VvLmFnZW50LmFjdGlvbi5leHRlcm5hbCdcbiAgfTtcblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpKCkge1xuICAgIHJldHVybiB0aGlzLmdldEFwaSgpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RnVuY3Rpb24odmFsdWU6IHN0cmluZyB8IEZ1bmN0aW9uIHwgYW55LCBwYXJhbXM/OiBzdHJpbmcsIGFyZ3M/OiBhbnkpIHtcbiAgICBjb25zdCBmbmMgPSB2YWx1ZT8udG9TdHJpbmcoKS50cmltKCk7XG4gICAgaWYgKCFmbmMpIHJldHVybjtcbiAgICBjb25zdCBmID0gZm5jLm1hdGNoKC9eZnVuY3Rpb258XlxcKC4qXFwpXFxzKj0+LylcbiAgICAgID8gYHJldHVybiAoJHtmbmN9KS5hcHBseSh0aGlzLGFyZ3VtZW50cylgXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIWZuYy5zdGFydHNXaXRoKFwiJ1wiKVxuICAgICAgPyBgcmV0dXJuICcke2ZuY30nYFxuICAgICAgOiBgcmV0dXJuICR7Zm5jfWA7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLihwYXJhbXMgfHwgJ2FwaScpLnNwbGl0KCcsJykubWFwKChhKSA9PiBhLnRyaW0oKSksIGYpLmFwcGx5KHRoaXMuYXBpLCBhcmdzIHx8IFt0aGlzLmFwaV0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNsaXBib2FyZDogQ2xpcGJvYXJkU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkbXNTZXJ2aWNlOiBEbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhZ2VudFNlcnZpY2U6IEFnZW50U2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG5cbiAgICB3aW5kb3dbJ2FwaSddID0gdGhpcy5hcGk7XG5cbiAgICB0aGlzLnVzZXJTZXJ2aWNlXG4gICAgICAudXNlciRcbiAgICAgIC5zdWJzY3JpYmUoKHVzZXIpID0+IHRoaXMudXNlciA9IHVzZXIpO1xuICB9XG5cbiAgLy8gdG9kbzogY3JlYXRlIGlucmVmYWNlIGZvciBBUElcblxuICBwdWJsaWMgZ2V0QXBpKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldGVjdENoYW5nZXM6ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0sXG4gICAgICByb3V0ZXI6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnJvdXRlclxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBlbmFpb0V2ZW50VHlwZTogRW5haW9FdmVudCxcbiAgICAgICAgb246ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmV2ZW50U2VydmljZS5vbih0eXBlKSksXG4gICAgICAgIHRyaWdnZXI6ICh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKHR5cGUsIGRhdGEpKVxuICAgICAgfSxcbiAgICAgIHNlc3Npb246IHtcbiAgICAgICAgZ2V0VXNlcjogKCkgPT4gdGhpcy5nZXRDdXJyZW50VXNlcigpXG4gICAgICB9LFxuICAgICAgZG1zOiB7XG4gICAgICAgIGdldE9iamVjdDogKGlkLCB0eXBlLCB2ZXJzaW9uKSA9PiB0aGlzLmdldERtc09iamVjdChpZCwgdHlwZSwgdmVyc2lvbiksXG4gICAgICAgIGdldFJlc3VsdDogKGZpZWxkcywgdHlwZSkgPT4gdGhpcy5nZXRSZXN1bHQoZmllbGRzLCB0eXBlKSxcbiAgICAgICAgZG93bmxvYWRDb250ZW50OiAoZG1zT2JqZWN0czogRG1zT2JqZWN0W10sIHJlbmRpdGlvbj86ICdQREYnXG4gICAgICAgICAgfCAnVElGRidcbiAgICAgICAgICB8ICdURVhUJ1xuICAgICAgICAgIHwgJ0pQRUcnKSA9PiB0aGlzLmJhY2tlbmQuZG93bmxvYWRDb250ZW50KGRtc09iamVjdHMsIHJlbmRpdGlvbilcbiAgICAgIH0sXG4gICAgICBodHRwOiB7XG4gICAgICAgIGdldDogKHVyaSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5nZXQodXJpLCBiYXNlLCBvcHRpb25zKSxcbiAgICAgICAgcG9zdDogKHVyaSwgZGF0YSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5wb3N0KHVyaSwgZGF0YSwgYmFzZSwgb3B0aW9ucyksXG4gICAgICAgIGRlbDogKHVyaSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5kZWwodXJpLCBiYXNlLCBvcHRpb25zKSxcbiAgICAgICAgcHV0OiAodXJpLCBkYXRhLCBiYXNlLCBvcHRpb25zKSA9PiB0aGlzLnB1dCh1cmksIGRhdGEsIGJhc2UsIG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5nZXRDb25maWcoKVxuICAgICAgfSxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdmlld2VyOiAoKSA9PiB3aW5kb3dbVU5ET0NLX1dJTkRPV19OQU1FXSB8fCAod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VvLW1lZGlhIGlmcmFtZVtzcmNdJykgfHwge30pWydjb250ZW50V2luZG93J10sXG4gICAgICAgIHRyaWdnZXJFcnJvcjogKGVyciwgd2luLCBwYXJhbWV0ZXJzKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihVTkRPQ0tfV0lORE9XX05BTUUgKyAnRXJyb3InLCB7IGVyciwgd2luLCBwYXJhbWV0ZXJzIH0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcjogKCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuZXZlbnRTZXJ2aWNlLm9uKFVORE9DS19XSU5ET1dfTkFNRSArICdFcnJvcicpKVxuICAgICAgfSxcbiAgICAgIHV0aWw6IHtcbiAgICAgICAgJDogKHNlbGVjdG9ycywgZWxlbWVudCkgPT4gKGVsZW1lbnQgfHwgd2luZG93LmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9ycyksXG4gICAgICAgICQkOiAoc2VsZWN0b3JzLCBlbGVtZW50KSA9PiAoZWxlbWVudCB8fCB3aW5kb3cuZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKSxcbiAgICAgICAgc3R5bGVzOiAoc3R5bGVzLCBpZCA9ICdfX3N0eWxlcycsIHdpbjogYW55ID0gd2luZG93KSA9PiB7XG4gICAgICAgICAgbGV0IHMgPSB3aW4uZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIHMgPSB3aW4uZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHMuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICAgICAgICAgIHdpbi5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzLmlubmVySFRNTCA9IHN0eWxlcztcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiAoa2V5LCBkYXRhKSA9PiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGtleSwgZGF0YSksXG4gICAgICAgIGVuY29kZUZpbGVOYW1lOiAoZmlsZW5hbWUpID0+IHRoaXMuZW5jb2RlRmlsZU5hbWUoZmlsZW5hbWUpLFxuICAgICAgICBub3RpZmllcjoge1xuICAgICAgICAgIHN1Y2Nlc3M6ICh0ZXh0LCB0aXRsZSkgPT4gdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGl0bGUsIHRleHQpLFxuICAgICAgICAgIGVycm9yOiAodGV4dCwgdGl0bGUpID0+IHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcih0aXRsZSwgdGV4dCksXG4gICAgICAgICAgaW5mbzogKHRleHQsIHRpdGxlKSA9PiB0aGlzLm5vdGlmaWNhdGlvbnMuaW5mbyh0aXRsZSwgdGV4dCksXG4gICAgICAgICAgd2FybmluZzogKHRleHQsIHRpdGxlKSA9PiB0aGlzLm5vdGlmaWNhdGlvbnMud2FybmluZyh0aXRsZSwgdGV4dClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsaXBib2FyZDoge1xuICAgICAgICBzZXQ6IChlbGVtZW50czogRG1zT2JqZWN0W10sIGFjdGlvbjogQ2xpcGJvYXJkQWN0aW9uKSA9PiB0aGlzLmNsaXBib2FyZC5zZXQoZWxlbWVudHMsIGFjdGlvbiksXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5jbGlwYm9hcmQuZ2V0KCksXG4gICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmNsaXBib2FyZC5jbGVhcigpXG4gICAgICB9LFxuICAgICAgLy8gQWdlbnRcbiAgICAgIGFnZW50OiB7XG4gICAgICAgIGdldEF2YWlsYWJpbGl0eTogKCkgPT4gdGhpcy5nZXRBZ2VudEF2YWlsYWJpbGl0eSgpLFxuICAgICAgICBleGVjdXRlQWN0aW9uOiAoYWN0aW9uLCBhcmdzKSA9PiB0aGlzLmV4ZWN1dGVBZ2VudEFjdGlvbihhY3Rpb24sIGFyZ3MpLFxuICAgICAgICBhY3Rpb246IHRoaXMuYWdlbnRBY3Rpb25cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYWdlbnRTZXJ2aWNlLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5hZ2VudFNlcnZpY2UuYWdlbnRBdmFpbGFiaWxpdHkuQ09OTkVDVEVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5hZ2VudFNlcnZpY2UuYWdlbnRBdmFpbGFiaWxpdHkuVU5BVkFJTEFCTEUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVBZ2VudEFjdGlvbihhY3Rpb24sIGFyZ3MpIHtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uQ0xJUEJPQVJEOlxuICAgICAgICB0aGlzLmFnZW50U2VydmljZS5jb3B5VG9DbGlwYm9hcmQoYXJncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmFnZW50QWN0aW9uLkNMSVBCT0FSRF9BU19QREY6XG4gICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZChhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uRVhURVJOQUw6XG4gICAgICAgIGlmICghYXJncy5leGVjdXRhYmxlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ01pc3NpbmcgZmllbGQgYXJncy5leGVjdXRhYmxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGFyZ3MuYXJncyAmJiBhcmdzLmFyZ3MubGVuZ3RoID09PSAwKSAmJiAhQXJyYXkuaXNBcnJheShhcmdzLmFyZ3MpKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZpZWxkIGFyZ3MuYXJncyBtdXN0IGJlIGVtcHR5IG9yIGFycmF5LicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLnNlbmRFeHRlcm5hbEFjdGlvbihhcmdzLmV4ZWN1dGFibGUsIGFyZ3MuYXJncyB8fCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uTUFJTDpcbiAgICAgIGNhc2UgdGhpcy5hZ2VudEFjdGlvbi5NQUlMX0FTX1BERjpcbiAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2Uuc2VuZEFzTWFpbChhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uT1BFTjpcbiAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2Uub3BlbkRvY3VtZW50KGFyZ3MsIGFyZ3MubG9jayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCh1cmksIGJhc2UgPSAnJywgb3B0aW9ucz86IEh0dHBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLmdldCh1cmksIHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgKyBiYXNlLCBvcHRpb25zIHx8IHtvYnNlcnZlOiAncmVzcG9uc2UnfSkucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zID8gcmVzIDogeyBzdGF0dXM6IHJlcy5zdGF0dXMsIGRhdGE6IHJlcy5ib2R5IH07XG4gICAgICAgIH0pKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQodXJpLCBkYXRhLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KHVyaSwgZGF0YSwgdGhpcy5iYWNrZW5kLmdldEhvc3QoKSArIGJhc2UsIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIHBvc3QodXJpLCBkYXRhLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdCh1cmksIGRhdGEsIHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgKyBiYXNlLCBvcHRpb25zKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWwodXJpLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKHVyaSwgdGhpcy5iYWNrZW5kLmdldEhvc3QoKSArIGJhc2UsIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRVc2VyKCk6IEVvVXNlciB7XG4gICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfVxuXG4gIHB1YmxpYyBlbmNvZGVGaWxlTmFtZShmaWxlbmFtZSkge1xuICAgIHJldHVybiBVdGlscy5lbmNvZGVGaWxlTmFtZShmaWxlbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXJ2aWNlQmFzZTogdGhpcy5iYWNrZW5kLmdldFNlcnZpY2VCYXNlKClcblxuICAgICAgLy8gdG9kbzogZG8gd2UgaGF2ZSB0byBwcm92aWRlIHRoZSBwbHVnaW4gZGV2ZWxvcGVycyB3aXRoIHRoZXNlIGluZm9ybWF0aW9ucz9cbiAgICAgIC8vIHBsdWdpbnNCYXNlOiAkZW9Db25maWcuZ2V0UGx1Z2luQmFzZSgpLFxuICAgICAgLy8gcGx1Z2luU3RhdGVzQmFzZTogJGVvQ29uZmlnLmdldFBsdWdpblN0YXRlc0Jhc2UoKSxcbiAgICAgIC8vIHRoZW1lQmFzZTogJGVvQ29uZmlnLmdldFRoZW1lQmFzZSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmZXRjaGVzIGRtcyBvYmplY3RzIGZyb20gdGhlIHNlcnZlciB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXJhbXNcbiAgICpcbiAgICogQHBhcmFtIGZpZWxkcyAtIHRoZSBmaWVsZHMgdG8gbWF0Y2hlZC4gZXhhbXBsZToge25hbWU6ICdtYXgnLCBwbHo6ICc0NzExMX1cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgdGFyZ2V0IG9iamVjdCB0eXBlXG4gICAqXG4gICAqIEByZXR1cm5zIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgYnkgYW4gYXJyYXkgb2YgRG1zT2JqZWN0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVzdWx0KGZpZWxkcywgdHlwZSk6IFByb21pc2U8RG1zT2JqZWN0W10+IHtcblxuICAgIGxldCBxID0gT2JqZWN0LmtleXMoZmllbGRzKS5maWx0ZXIoayA9PiAoZmllbGRzW2tdICE9PSB1bmRlZmluZWQgJiYgZmllbGRzW2tdICE9PSBudWxsKSkubWFwKGsgPT4gayArICc9JyArIGZpZWxkc1trXSkuam9pbignOycpO1xuXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLmdldEpzb24oYC9yZXN1bHQvcXVlcnk/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocSl9JnR5cGU9JHt0eXBlfWApXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGxldCByZXNPYmplY3RzID0gW107XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICByZXNPYmplY3RzLnB1c2gobmV3IERtc09iamVjdChpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNPYmplY3RzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2godGhpcy5oYW5kbGVFcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSBETVMgb2JqZWN0IGZyb20gdGhlIGJhY2tlbmQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgRE1TLU9iamVjdCB0byBiZSBmZXRjaGVkLlxuICAgKiBAcGFyYW0gW3R5cGVdIC0gVGhlIG9iamVjdCB0eXBlIG9mIHRoZSBzZWxlY3RlZCBETVMtT2JqZWN0LiBXaWxsIGltcHJvdmUgcGVyZm9ybWFuY2UgaWYgc2V0LlxuICAgKiBAcGFyYW0gW3ZlcnNpb25dIC0gcmV0cmlldmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBkbXMgb2JqZWN0XG4gICAqIEBwYXJhbSBbaW50ZW50XSAtIHVzZWQgZm9yIHNlcnZlciBzaWRlIGxvZ2dpbmcuIElmIHlvdSBwcm92aWRlIGFuIGludGVudCwgdGhlXG4gICAqXG4gICAqIEByZXR1cm5zIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIERNUyBvYmplY3QgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyBnZXREbXNPYmplY3QoaWQsIHR5cGUsIHZlcnNpb24sIGludGVudD8pOiBQcm9taXNlPERtc09iamVjdD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3QoaWQsIHR5cGUsIHZlcnNpb24sIGludGVudClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2godGhpcy5oYW5kbGVFcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgfVxufVxuIl19
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9hcGkvcGx1Z2lucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQ0csTUFBTSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFDdEUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFtQixLQUFLLEVBQ3hFLGdCQUFnQixFQUFlLFVBQVUsRUFDMUMsTUFBTSxjQUFjLENBQUM7QUFFdEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBRTdDLE1BQU0sT0FBTyxjQUFjO0lBb0N6QixZQUFvQixPQUF1QixFQUNqQyxhQUFtQyxFQUNuQyxTQUEyQixFQUMzQixNQUFjLEVBQ2YsU0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE1BQXNCLEVBQ3RCLE1BQWM7UUFYSixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtR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QUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUN0QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQzthQUMzRCxTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDZixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVU7UUFDNUIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7O1lBdFFGLFVBQVU7OztZQU42QixjQUFjO1lBQXBDLG9CQUFvQjtZQUFrQixnQkFBZ0I7WUFBOUQsTUFBTTtZQUVkLGdCQUFnQjtZQURoQixVQUFVO1lBSkosTUFBTTtZQUNOLFlBQVk7WUFHTixZQUFZO1lBQUUsV0FBVztZQUwvQixjQUFjO1lBQWMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0FwcGxpY2F0aW9uUmVmLCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FnZW50U2VydmljZX0gZnJvbSAnLi4vYWdlbnQvYWdlbnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBFb1VzZXIsIExvZ2dlciwgTm90aWZpY2F0aW9uc1NlcnZpY2UsIEJhY2tlbmRTZXJ2aWNlLCBDbGlwYm9hcmRTZXJ2aWNlLFxuICBEbXNTZXJ2aWNlLCBFdmVudFNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBEbXNPYmplY3QsIENsaXBib2FyZEFjdGlvbiwgVXRpbHMsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsIEh0dHBPcHRpb25zLCBFbmFpb0V2ZW50XG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBVTkRPQ0tfV0lORE9XX05BTUUgPSAnZW9WaWV3ZXInO1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBsdWdpbnNTZXJ2aWNlIHtcblxuICBwcml2YXRlIHVzZXI6IEVvVXNlcjtcbiAgcHJpdmF0ZSBhZ2VudEFjdGlvbiA9IHtcbiAgICBPUEVOOiAnZW8uYWdlbnQuYWN0aW9uLm9wZW4nLFxuICAgIE1BSUw6ICdlby5hZ2VudC5hY3Rpb24ubWFpbCcsXG4gICAgTUFJTF9BU19QREY6ICdlby5hZ2VudC5hY3Rpb24ubWFpbC1wZGYnLFxuICAgIENMSVBCT0FSRDogJ2VvLmFnZW50LmFjdGlvbi5jbGlwYm9hcmQnLFxuICAgIENMSVBCT0FSRF9BU19QREY6ICdlby5hZ2VudC5hY3Rpb24uY2xpcGJvYXJkLXBkZicsXG4gICAgRVhURVJOQUw6ICdlby5hZ2VudC5hY3Rpb24uZXh0ZXJuYWwnXG4gIH07XG5cbiAgcHVibGljIGdldCBjdXJyZW50VXJsKCkge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci51cmw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBcGkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZ1bmN0aW9uKHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbiB8IGFueSwgcGFyYW1zPzogc3RyaW5nLCBhcmdzPzogYW55KSB7XG4gICAgY29uc3QgZm5jID0gdmFsdWU/LnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIGlmICghZm5jKSByZXR1cm47XG4gICAgY29uc3QgZiA9IGZuYy5tYXRjaCgvXmZ1bmN0aW9ufF5cXCguKlxcKVxccyo9Pi8pXG4gICAgICA/IGByZXR1cm4gKCR7Zm5jfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpYFxuICAgICAgOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFmbmMuc3RhcnRzV2l0aChcIidcIilcbiAgICAgID8gYHJldHVybiAnJHtmbmN9J2BcbiAgICAgIDogYHJldHVybiAke2ZuY31gO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbiguLi4ocGFyYW1zIHx8ICdhcGknKS5zcGxpdCgnLCcpLm1hcCgoYSkgPT4gYS50cmltKCkpLCBmKS5hcHBseSh0aGlzLmFwaSwgYXJncyB8fCBbdGhpcy5hcGldKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbGlwYm9hcmQ6IENsaXBib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcixcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG1zU2VydmljZTogRG1zU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWdlbnRTZXJ2aWNlOiBBZ2VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuXG4gICAgd2luZG93WydhcGknXSA9IHRoaXMuYXBpO1xuXG4gICAgdGhpcy51c2VyU2VydmljZVxuICAgICAgLnVzZXIkXG4gICAgICAuc3Vic2NyaWJlKCh1c2VyKSA9PiB0aGlzLnVzZXIgPSB1c2VyKTtcbiAgfVxuXG4gIC8vIHRvZG86IGNyZWF0ZSBpbnJlZmFjZSBmb3IgQVBJXG5cbiAgcHVibGljIGdldEFwaSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBkZXRlY3RDaGFuZ2VzOiAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0sXG4gICAgICByb3V0ZXI6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnJvdXRlclxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBlbmFpb0V2ZW50VHlwZTogRW5haW9FdmVudCxcbiAgICAgICAgb246ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmV2ZW50U2VydmljZS5vbih0eXBlKSksXG4gICAgICAgIHRyaWdnZXI6ICh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKHR5cGUsIGRhdGEpKVxuICAgICAgfSxcbiAgICAgIHNlc3Npb246IHtcbiAgICAgICAgZ2V0VXNlcjogKCkgPT4gdGhpcy5nZXRDdXJyZW50VXNlcigpXG4gICAgICB9LFxuICAgICAgZG1zOiB7XG4gICAgICAgIGdldE9iamVjdDogKGlkLCB0eXBlLCB2ZXJzaW9uKSA9PiB0aGlzLmdldERtc09iamVjdChpZCwgdHlwZSwgdmVyc2lvbiksXG4gICAgICAgIGdldFJlc3VsdDogKGZpZWxkcywgdHlwZSkgPT4gdGhpcy5nZXRSZXN1bHQoZmllbGRzLCB0eXBlKSxcbiAgICAgICAgZG93bmxvYWRDb250ZW50OiAoZG1zT2JqZWN0czogRG1zT2JqZWN0W10sIHJlbmRpdGlvbj86ICdQREYnXG4gICAgICAgICAgfCAnVElGRidcbiAgICAgICAgICB8ICdURVhUJ1xuICAgICAgICAgIHwgJ0pQRUcnKSA9PiB0aGlzLmJhY2tlbmQuZG93bmxvYWRDb250ZW50KGRtc09iamVjdHMsIHJlbmRpdGlvbilcbiAgICAgIH0sXG4gICAgICBodHRwOiB7XG4gICAgICAgIGdldDogKHVyaSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5nZXQodXJpLCBiYXNlLCBvcHRpb25zKSxcbiAgICAgICAgcG9zdDogKHVyaSwgZGF0YSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5wb3N0KHVyaSwgZGF0YSwgYmFzZSwgb3B0aW9ucyksXG4gICAgICAgIGRlbDogKHVyaSwgYmFzZSwgb3B0aW9ucykgPT4gdGhpcy5kZWwodXJpLCBiYXNlLCBvcHRpb25zKSxcbiAgICAgICAgcHV0OiAodXJpLCBkYXRhLCBiYXNlLCBvcHRpb25zKSA9PiB0aGlzLnB1dCh1cmksIGRhdGEsIGJhc2UsIG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5nZXRDb25maWcoKVxuICAgICAgfSxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdmlld2VyOiAoKSA9PiB3aW5kb3dbVU5ET0NLX1dJTkRPV19OQU1FXSB8fCAod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VvLW1lZGlhIGlmcmFtZVtzcmNdJykgfHwge30pWydjb250ZW50V2luZG93J10sXG4gICAgICAgIHRyaWdnZXJFcnJvcjogKGVyciwgd2luLCBwYXJhbWV0ZXJzKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihVTkRPQ0tfV0lORE9XX05BTUUgKyAnRXJyb3InLCB7IGVyciwgd2luLCBwYXJhbWV0ZXJzIH0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcjogKCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuZXZlbnRTZXJ2aWNlLm9uKFVORE9DS19XSU5ET1dfTkFNRSArICdFcnJvcicpKVxuICAgICAgfSxcbiAgICAgIHV0aWw6IHtcbiAgICAgICAgJDogKHNlbGVjdG9ycywgZWxlbWVudCkgPT4gKGVsZW1lbnQgfHwgd2luZG93LmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9ycyksXG4gICAgICAgICQkOiAoc2VsZWN0b3JzLCBlbGVtZW50KSA9PiAoZWxlbWVudCB8fCB3aW5kb3cuZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKSxcbiAgICAgICAgc3R5bGVzOiAoc3R5bGVzLCBpZCA9ICdfX3N0eWxlcycsIHdpbjogYW55ID0gd2luZG93KSA9PiB7XG4gICAgICAgICAgbGV0IHMgPSB3aW4uZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIHMgPSB3aW4uZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHMuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICAgICAgICAgIHdpbi5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzLmlubmVySFRNTCA9IHN0eWxlcztcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiAoa2V5LCBkYXRhKSA9PiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGtleSwgZGF0YSksXG4gICAgICAgIGVuY29kZUZpbGVOYW1lOiAoZmlsZW5hbWUpID0+IHRoaXMuZW5jb2RlRmlsZU5hbWUoZmlsZW5hbWUpLFxuICAgICAgICBub3RpZmllcjoge1xuICAgICAgICAgIHN1Y2Nlc3M6ICh0ZXh0LCB0aXRsZSkgPT4gdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGl0bGUsIHRleHQpLFxuICAgICAgICAgIGVycm9yOiAodGV4dCwgdGl0bGUpID0+IHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcih0aXRsZSwgdGV4dCksXG4gICAgICAgICAgaW5mbzogKHRleHQsIHRpdGxlKSA9PiB0aGlzLm5vdGlmaWNhdGlvbnMuaW5mbyh0aXRsZSwgdGV4dCksXG4gICAgICAgICAgd2FybmluZzogKHRleHQsIHRpdGxlKSA9PiB0aGlzLm5vdGlmaWNhdGlvbnMud2FybmluZyh0aXRsZSwgdGV4dClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsaXBib2FyZDoge1xuICAgICAgICBzZXQ6IChlbGVtZW50czogRG1zT2JqZWN0W10sIGFjdGlvbjogQ2xpcGJvYXJkQWN0aW9uKSA9PiB0aGlzLmNsaXBib2FyZC5zZXQoZWxlbWVudHMsIGFjdGlvbiksXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5jbGlwYm9hcmQuZ2V0KCksXG4gICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmNsaXBib2FyZC5jbGVhcigpXG4gICAgICB9LFxuICAgICAgLy8gQWdlbnRcbiAgICAgIGFnZW50OiB7XG4gICAgICAgIGdldEF2YWlsYWJpbGl0eTogKCkgPT4gdGhpcy5nZXRBZ2VudEF2YWlsYWJpbGl0eSgpLFxuICAgICAgICBleGVjdXRlQWN0aW9uOiAoYWN0aW9uLCBhcmdzKSA9PiB0aGlzLmV4ZWN1dGVBZ2VudEFjdGlvbihhY3Rpb24sIGFyZ3MpLFxuICAgICAgICBhY3Rpb246IHRoaXMuYWdlbnRBY3Rpb25cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYWdlbnRTZXJ2aWNlLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5hZ2VudFNlcnZpY2UuYWdlbnRBdmFpbGFiaWxpdHkuQ09OTkVDVEVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5hZ2VudFNlcnZpY2UuYWdlbnRBdmFpbGFiaWxpdHkuVU5BVkFJTEFCTEUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVBZ2VudEFjdGlvbihhY3Rpb24sIGFyZ3MpIHtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uQ0xJUEJPQVJEOlxuICAgICAgICB0aGlzLmFnZW50U2VydmljZS5jb3B5VG9DbGlwYm9hcmQoYXJncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmFnZW50QWN0aW9uLkNMSVBCT0FSRF9BU19QREY6XG4gICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZChhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uRVhURVJOQUw6XG4gICAgICAgIGlmICghYXJncy5leGVjdXRhYmxlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ01pc3NpbmcgZmllbGQgYXJncy5leGVjdXRhYmxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGFyZ3MuYXJncyAmJiBhcmdzLmFyZ3MubGVuZ3RoID09PSAwKSAmJiAhQXJyYXkuaXNBcnJheShhcmdzLmFyZ3MpKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZpZWxkIGFyZ3MuYXJncyBtdXN0IGJlIGVtcHR5IG9yIGFycmF5LicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLnNlbmRFeHRlcm5hbEFjdGlvbihhcmdzLmV4ZWN1dGFibGUsIGFyZ3MuYXJncyB8fCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uTUFJTDpcbiAgICAgIGNhc2UgdGhpcy5hZ2VudEFjdGlvbi5NQUlMX0FTX1BERjpcbiAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2Uuc2VuZEFzTWFpbChhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuYWdlbnRBY3Rpb24uT1BFTjpcbiAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2Uub3BlbkRvY3VtZW50KGFyZ3MsIGFyZ3MubG9jayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCh1cmksIGJhc2UgPSAnJywgb3B0aW9ucz86IEh0dHBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLmdldCh1cmksIHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgKyBiYXNlLCBvcHRpb25zIHx8IHtvYnNlcnZlOiAncmVzcG9uc2UnfSkucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zID8gcmVzIDogeyBzdGF0dXM6IHJlcy5zdGF0dXMsIGRhdGE6IHJlcy5ib2R5IH07XG4gICAgICAgIH0pKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQodXJpLCBkYXRhLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KHVyaSwgZGF0YSwgdGhpcy5iYWNrZW5kLmdldEhvc3QoKSArIGJhc2UsIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIHBvc3QodXJpLCBkYXRhLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdCh1cmksIGRhdGEsIHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgKyBiYXNlLCBvcHRpb25zKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWwodXJpLCBiYXNlID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKHVyaSwgdGhpcy5iYWNrZW5kLmdldEhvc3QoKSArIGJhc2UsIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRVc2VyKCk6IEVvVXNlciB7XG4gICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfVxuXG4gIHB1YmxpYyBlbmNvZGVGaWxlTmFtZShmaWxlbmFtZSkge1xuICAgIHJldHVybiBVdGlscy5lbmNvZGVGaWxlTmFtZShmaWxlbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXJ2aWNlQmFzZTogdGhpcy5iYWNrZW5kLmdldFNlcnZpY2VCYXNlKClcblxuICAgICAgLy8gdG9kbzogZG8gd2UgaGF2ZSB0byBwcm92aWRlIHRoZSBwbHVnaW4gZGV2ZWxvcGVycyB3aXRoIHRoZXNlIGluZm9ybWF0aW9ucz9cbiAgICAgIC8vIGFmdGVyIHNwZWFraW5nIHRvIEFuZHJlYXMgYWxzbyByZW1vdmVkIGZyb20gZG9jdW1lbnRhdGlvblxuICAgICAgLy8gcGx1Z2luc0Jhc2U6ICRlb0NvbmZpZy5nZXRQbHVnaW5CYXNlKCksXG4gICAgICAvLyBwbHVnaW5TdGF0ZXNCYXNlOiAkZW9Db25maWcuZ2V0UGx1Z2luU3RhdGVzQmFzZSgpLFxuICAgICAgLy8gdGhlbWVCYXNlOiAkZW9Db25maWcuZ2V0VGhlbWVCYXNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgZG1zIG9iamVjdHMgZnJvbSB0aGUgc2VydmVyIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gdGhlIGZpZWxkcyB0byBtYXRjaGVkLiBleGFtcGxlOiB7bmFtZTogJ21heCcsIHBsejogJzQ3MTExfVxuICAgKiBAcGFyYW0gdHlwZSAtIHRoZSB0YXJnZXQgb2JqZWN0IHR5cGVcbiAgICpcbiAgICogQHJldHVybnMgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCBieSBhbiBhcnJheSBvZiBEbXNPYmplY3RzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBnZXRSZXN1bHQoZmllbGRzLCB0eXBlKTogUHJvbWlzZTxEbXNPYmplY3RbXT4ge1xuXG4gICAgbGV0IHEgPSBPYmplY3Qua2V5cyhmaWVsZHMpLmZpbHRlcihrID0+IChmaWVsZHNba10gIT09IHVuZGVmaW5lZCAmJiBmaWVsZHNba10gIT09IG51bGwpKS5tYXAoayA9PiBrICsgJz0nICsgZmllbGRzW2tdKS5qb2luKCc7Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAuZ2V0SnNvbihgL3Jlc3VsdC9xdWVyeT9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxKX0mdHlwZT0ke3R5cGV9YClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJlc09iamVjdHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXNwb25zZSkge1xuICAgICAgICAgIHJlc09iamVjdHMucHVzaChuZXcgRG1zT2JqZWN0KGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc09iamVjdHMpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCh0aGlzLmhhbmRsZUVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIERNUyBvYmplY3QgZnJvbSB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBETVMtT2JqZWN0IHRvIGJlIGZldGNoZWQuXG4gICAqIEBwYXJhbSBbdHlwZV0gLSBUaGUgb2JqZWN0IHR5cGUgb2YgdGhlIHNlbGVjdGVkIERNUy1PYmplY3QuIFdpbGwgaW1wcm92ZSBwZXJmb3JtYW5jZSBpZiBzZXQuXG4gICAqIEBwYXJhbSBbdmVyc2lvbl0gLSByZXRyaWV2ZSBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGRtcyBvYmplY3RcbiAgICogQHBhcmFtIFtpbnRlbnRdIC0gdXNlZCBmb3Igc2VydmVyIHNpZGUgbG9nZ2luZy4gSWYgeW91IHByb3ZpZGUgYW4gaW50ZW50LCB0aGVcbiAgICpcbiAgICogQHJldHVybnMgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCBieSB0aGUgRE1TIG9iamVjdCBmZXRjaGVkIGZyb20gdGhlIHNlcnZlclxuICAgKi9cbiAgcHVibGljIGdldERtc09iamVjdChpZCwgdHlwZSwgdmVyc2lvbiwgaW50ZW50Pyk6IFByb21pc2U8RG1zT2JqZWN0PiB7XG5cbiAgICByZXR1cm4gdGhpcy5kbXNTZXJ2aWNlLmdldERtc09iamVjdChpZCwgdHlwZSwgdmVyc2lvbiwgaW50ZW50KVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCh0aGlzLmhhbmRsZUVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICB9XG59XG4iXX0=
@@ -94,7 +94,7 @@ export class AuthService {
94
94
  const loginHeader = new HttpHeaders({
95
95
  'Content-Type': 'application/x-www-form-urlencoded'
96
96
  });
97
- return this.http.post(host + this.config.getLoginBase() + '/login', `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, {
97
+ return this.http.post(host + this.config.getContextPath() + '/login', `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, {
98
98
  headers: loginHeader,
99
99
  responseType: 'text',
100
100
  withCredentials: this.coreConfig.withCredentials
@@ -227,7 +227,7 @@ export class AuthService {
227
227
  'Content-Type': 'application/json'
228
228
  });
229
229
  return this.http
230
- .get(`${host || ''}${this.config.getLoginBase()}/auth/info`, { headers, withCredentials: this.coreConfig.withCredentials })
230
+ .get(`${host || ''}${this.config.getContextPath()}/auth/info`, { headers, withCredentials: this.coreConfig.withCredentials })
231
231
  .pipe(switchMap((info) => {
232
232
  this.gatewayInfo = info;
233
233
  this.envService.cloudEnvironment = (this.gatewayInfo && this.gatewayInfo.oauth2);
@@ -289,14 +289,14 @@ export class AuthService {
289
289
  // remove stored access data
290
290
  this.storage.removeItem(this.TOKEN_STORAGE_KEY).subscribe();
291
291
  if (this.coreConfig.environment.production && EnvironmentEnaio.isWebEnvironment()) {
292
- window.location.href = this.config.getLoginBase() + '/logout';
292
+ window.location.href = this.config.getContextPath() + '/logout';
293
293
  return;
294
294
  }
295
295
  }
296
296
  if (gatewayLogout) {
297
297
  // by default we are just resetting internal state to 'logged out' and in
298
298
  // some cases call gateways logout endpoint to do logout stuff there silently
299
- this.http.get(`${this.profile.host || ''}${this.config.getLoginBase()}/logout`, { withCredentials: this.coreConfig.withCredentials }).subscribe();
299
+ this.http.get(`${this.profile.host || ''}${this.config.getContextPath()}/logout`, { withCredentials: this.coreConfig.withCredentials }).subscribe();
300
300
  }
301
301
  this.backend.setAuthProfile(this.profile);
302
302
  this.eventService.trigger(EnaioEvent.LOGOUT);
@@ -373,4 +373,4 @@ AuthService.ctorParameters = () => [
373
373
  { type: LocalStorage },
374
374
  { type: LocalStorageService }
375
375
  ];
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL2F1dGgvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsSUFBSSxrQkFBa0IsRUFDM0QsRUFBRSxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFDbEQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUMsVUFBVSxFQUFxQixXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVB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QUMsaUJBQWlCLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDakQ7UUFFRCxNQUFNLElBQUksR0FBRztZQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUU7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNsQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQ3BCLENBQUM7SUFDSixDQUFDOzs7WUF4WEYsVUFBVTs7O1lBM0JILE1BQU07WUFvQk4sVUFBVSx1QkF5Q2IsTUFBTSxTQUFDLFdBQVc7WUE5RGYsZUFBZTtZQXVCZixrQkFBa0I7WUF4QmxCLFVBQVU7WUFnQlYsVUFBVTtZQWpCVSxNQUFNO1lBc0IxQixnQkFBZ0I7WUFWaEIsbUJBQW1CO1lBSm5CLE1BQU07WUFHTixZQUFZO1lBRFosY0FBYztZQUpkLGNBQWM7WUFEZCxhQUFhO1lBRWIsV0FBVztZQVFYLFlBQVk7WUFJWixtQkFBbUI7WUFObkIsWUFBWTtZQUNaLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIHRocm93RXJyb3IsIGludGVydmFsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIGNhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QXBwQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9jYWNoZS9hcHAtY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7RW9Vc2VyfSBmcm9tICcuLi8uLi9tb2RlbC9lby11c2VyLm1vZGVsJztcbmltcG9ydCB7U3lzdGVtU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5zZXJ2aWNlJztcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7QXV0aFByb2ZpbGV9IGZyb20gJy4vYXV0aC1wcm9maWxlLmludGVyZmFjZSc7XG5pbXBvcnQge1ByZXBhcmVTZXJ2aWNlfSBmcm9tICcuLi9wcmVwYXJlL3ByZXBhcmUuc2VydmljZSc7XG5pbXBvcnQge0luYm94U2VydmljZX0gZnJvbSAnLi4vaW5ib3gvaW5ib3guc2VydmljZSc7XG5pbXBvcnQge0NhcGFiaWxpdGllc1NlcnZpY2V9IGZyb20gJy4uL2NhcGFiaWxpdGllcy9jYXBhYmlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSAnQG5neC1wd2EvbG9jYWwtc3RvcmFnZSc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi9ldmVudHMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0VuYWlvRXZlbnR9IGZyb20gJy4uL2V2ZW50cy9ldmVudHMnO1xuaW1wb3J0IHtCcG1TZXJ2aWNlfSBmcm9tICcuLi9icG0vYnBtLnNlcnZpY2UnO1xuaW1wb3J0IHtHYXRld2F5SW5mb30gZnJvbSAnLi9nYXRld2F5LWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7U3lzdGVtU3RhdHVzU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtLXN0YXR1cy9zeXN0ZW0tc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHtFbnZpcm9ubWVudEVuYWlvfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC5lbmFpbyc7XG5pbXBvcnQge0xvZ2luRGV2aWNlUmVzdWx0LCBTdG9yZWRUb2tlbn0gZnJvbSAnLi9hdXRoLmNsb3VkLmludGVyZmFjZSc7XG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvcmVDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQge0NPUkVfQ09ORklHfSBmcm9tICcuLi8uLi9jb25maWcvY29yZS1pbml0LnRva2Vucyc7XG5pbXBvcnQge0Vudmlyb25tZW50U2VydmljZX0gZnJvbSAnLi4vZW52aXJvbm1lbnQvZW52aXJvbm1lbnQuc2VydmljZSc7XG5cbi8qKlxuICogYEF1dGhTZXJ2aWNlYCBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGFnYWluc3QgYW4geXV1dmlzPHN1cD4mcmVnOzwvc3VwPiBSQUQgYmFja2VuZC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcblxuICBwcml2YXRlIFRPS0VOX1NUT1JBR0VfS0VZID0gJ2VvLmF1dGguY2xvdWQuY3JlZGVudGlhbHMnO1xuICBwcml2YXRlIHVzZXJQcm9maWxlVXJpID0gdGhpcy51c2VyU2VydmljZS5VU0VSX0ZFVENIX1VSSTtcbiAgcHJpdmF0ZSBhdXRoU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgbG9nZ2VkSW5DYWNoZUtleSA9ICdlby51c2VyLmxvZ2dlZEluJztcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0byBzdWJzY3JpYmUgdG8gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGJlaW5nIGF1dGhlbnRpY2F0ZWQuIFdpbGwgZW1pdCB0cnVlIHdoZW4gYSB1c2VyIGxvZ2dlZCBpbixcbiAgICogZmFsc2Ugd2hlbiB0aGUgdXNlciBsb2dnZWQgb3V0IG9yIHRoZSBnYXRld2F5cyBzZXNzaW9uIHRpbWVkIG91dC5cbiAgICovXG4gIHB1YmxpYyBhdXRoZW50aWNhdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXV0aFNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGhvc3RzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGdhdGV3YXlJbmZvOiBHYXRld2F5SW5mbztcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHByb2ZpbGU6IEF1dGhQcm9maWxlID0ge1xuICAgIGhvc3Q6ICcnLFxuICAgIHVzZXI6IG51bGwsXG4gICAgYXV0aDogbnVsbCxcbiAgICBhY3RpdmU6IGZhbHNlXG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBDb25maWcsXG4gICAgQEluamVjdChDT1JFX0NPTkZJRykgcHVibGljIGNvcmVDb25maWc6IENvcmVDb25maWcsXG4gICAgcHJpdmF0ZSBhcHBDYWNoZTogQXBwQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW52U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGJwbVNlcnZpY2U6IEJwbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0aWVzU2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgaW5ib3hTZXJ2aWNlOiBJbmJveFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmVwYXJlU2VydmljZTogUHJlcGFyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVN0YXR1c1NlcnZpY2U6IFN5c3RlbVN0YXR1c1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2U6IExvY2FsU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgbG9jYWw6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGV2dCA9PiB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5sb2dnZWRJbkNhY2hlS2V5KSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBKU09OLnBhcnNlKGV2dC5uZXdWYWx1ZSkuaG9zdDtcbiAgICAgICAgdGhpcy5pbml0VXNlcihob3N0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpbiBhIHVzZXIgdXNpbmcgZm9ybSBiYXNlZCBsb2dpbi5cbiAgICogQHBhcmFtIGhvc3QgVGhlIHRhcmdldCBob3N0IChjb3VsZCBiZSBudWxsIGlmIHlvdSBhcmUgcnVubmluZyBpbiB3ZWIgZW52aXJvbm1lbnQpXG4gICAqIEBwYXJhbSB1c2VybmFtZSBUaGUgdXNlcm5hbWVcbiAgICogQHBhcmFtIHBhc3N3b3JkIFRoZSBwYXNzd29yZFxuICAgKiBAcmV0dXJucyBSZXNvbHZlcyB3aXRoIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgcHVibGljIGxvZ2luKGhvc3Q6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8RW9Vc2VyPiB7XG5cbiAgICBob3N0ID0gaG9zdCB8fCAnJztcbiAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZkLmFwcGVuZCgndXNlcm5hbWUnLCBlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpKTtcbiAgICBmZC5hcHBlbmQoJ3Bhc3N3b3JkJywgZW5jb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKSk7XG5cbiAgICBjb25zdCBsb2dpbkhlYWRlciA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoaG9zdCArIHRoaXMuY29uZmlnLmdldExvZ2luQmFzZSgpICsgJy9sb2dpbicsXG4gICAgICBgdXNlcm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfSZwYXNzd29yZD0ke2VuY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCwge1xuICAgICAgaGVhZGVyczogbG9naW5IZWFkZXIsXG4gICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc1xuICAgIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5pbml0VXNlcihob3N0KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyBpbiB0byBhIGNsb3VkIGJhY2tlbmQgdXNpbmcgZGV2aWNlIGZsb3cuXG4gICAqIEBwYXJhbSBob3N0IFRoZSB0YXJnZXQgaG9zdCAoY291bGQgYmUgbnVsbCBpZiB5b3UgYXJlIHJ1bm5pbmcgaW4gd2ViIGVudmlyb25tZW50KVxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSB0ZW5hbnRcbiAgICogQHJldHVybnMgUmVzb2x2ZXMgd2l0aCB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICovXG4gIHB1YmxpYyBjbG91ZExvZ2luKGhvc3Q6IHN0cmluZywgdGVuYW50OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVvVXNlcj4ge1xuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvID0+IHtcbiAgICAgIGNvbnN0IHN0b3BUcmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAvL2NvbnN0IHRhcmdldEhvc3QgPSB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygwLCB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoJy9lbnRlcicpKTsgLy8gaG9zdCB8fCAnJztcbiAgICAgIGNvbnN0IHRhcmdldEhvc3QgPSBob3N0IHx8ICcnO1xuICAgICAgLy8gc3RhcnQgYXV0aCBmbG93XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RhcmdldEhvc3R9L3RlbmFudC8ke3RlbmFudH0vbG9naW5EZXZpY2VgKS5zdWJzY3JpYmUoKHJlczogTG9naW5EZXZpY2VSZXN1bHQpID0+IHtcblxuICAgICAgICAvLyBvcGVuIG5ldyB3aW5kb3cgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIC4uLlxuICAgICAgICBjb25zdCB0YXJnZXRVcmkgPSBgJHt0YXJnZXRIb3N0fS9vYXV0aC8ke3RlbmFudH0/dXNlcl9jb2RlPSR7cmVzLnVzZXJfY29kZX1gO1xuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3cub3Blbih0YXJnZXRVcmksICdhdXRoJyk7XG4gICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAvLyBAc2VlOiBodHRwOi8vYXRhc2hiYWhhci5jb20vcG9zdC8yMDEwLTA0LTI3LWRldGVjdC13aGVuLWEtamF2YXNjcmlwdC1wb3B1cC13aW5kb3ctZ2V0cy1jbG9zZWRcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aW5UaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHdpbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHdpblRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc3RvcFRyaWdnZXIkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgIHN0b3BUcmlnZ2VyJC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC4uLiBhbmQgc3RhcnQgcG9sbGluZyBmb3IgYXV0aGVudGljYXRpb24gcmVzdWx0c1xuICAgICAgICB0aGlzLmNsb3VkTG9naW5Qb2xsRm9yUmVzdWx0KGAke3RhcmdldEhvc3R9L2F1dGgvaW5mby9zdGF0ZT9kZXZpY2VfY29kZT0ke3Jlcy5kZXZpY2VfY29kZX1gLCAxMDAwLCBzdG9wVHJpZ2dlciQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGFjY2Vzc1Rva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG91ZExvZ2luU2V0SGVhZGVycyhhY2Nlc3NUb2tlbiwgdGVuYW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZVRva2VuOiBTdG9yZWRUb2tlbiA9IHtcbiAgICAgICAgICAgICAgICAgIHRlbmFudDogdGVuYW50LFxuICAgICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlRPS0VOX1NUT1JBR0VfS0VZLCBzdG9yZVRva2VuKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGF1dGhSZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYXV0aFJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRVc2VyKHRhcmdldEhvc3QpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ25vdCBhdXRoZW50aWNhdGVkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAodXNlcjogRW9Vc2VyKSA9PiB7XG5cbiAgICAgICAgICAgICAgd2luLmNsb3NlKCk7XG4gICAgICAgICAgICAgIG8ubmV4dCh1c2VyKTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgd2luLmNsb3NlKCk7XG4gICAgICAgICAgICAgIG8uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgIG8uZXJyb3IoJ3VuYWJsZSB0byBjYWxsIGRldmljZSBmbG93IGVuZHBvaW50JywgZXJyKTtcbiAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgcG9sbGluZyBmb3IgbG9naW4gcmVzdWx0cyBpbiBjYXNlIG9mIGxvZ2dpbmcgaW4gdG8gYSBjbG91ZCBiYWNrZW5kLlxuICAgKiBAcGFyYW0gdXJpIFVSSSB0byBwb2xsXG4gICAqIEBwYXJhbSBwb2xsaW5nSW50ZXJ2YWwgUG9sbGluZyBpbnRlcnZhbGwgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSBzdG9wVHJpZ2dlciBTdWJqZWN0IGFjdGluZyBhcyBzdG9wIHRyaWdnZXJcbiAgICogQHJldHVybnMgQWNjZXNzIFRva2VuIGlmIGxvZ2dlZCBpbiBzdWNjZXNzZnVsbHkgb3IgTlVMTCBvdGhlcndpc2VcbiAgICovXG4gIHByaXZhdGUgY2xvdWRMb2dpblBvbGxGb3JSZXN1bHQodXJpOiBzdHJpbmcsIHBvbGxpbmdJbnRlcnZhbDogbnVtYmVyLCBzdG9wVHJpZ2dlcjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG8gPT4ge1xuICAgICAgbGV0IGFjY2Vzc0dyYW50ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhY2Nlc3NEZW5pZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBpbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHN0b3BUcmlnZ2VyKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5odHRwLmdldCh1cmkpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIE9BdXRoIHN0YW5kYXJkIHdlIGFyZSB1c2luZyBpcyByZXR1cm5pbmcgd2l0aCBhIHN0YXR1cyBvZiA0MDAgd2hpbGUgbG9nZ2luZyBpbiAobm8gaWRlYSB3aHk/Pz8pXG4gICAgICAgICAgICAgIC8vIHNvIHdlIGdvdCB0byBmZXRjaCB0aGF0IHRvIG5vdCBicmVhayB0aGUgcGFyZW50IHBpcGVcbiAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGVycik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSlcbiAgICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBhY2Nlc3NHcmFudGVkID0gISFyZXMuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICBhY2Nlc3NEZW5pZWQgPSByZXMuZXJyb3IgPT09ICdhY2Nlc3NfZGVuaWVkJztcblxuICAgICAgICAgICAgICBpZiAoYWNjZXNzR3JhbnRlZCB8fCBhY2Nlc3NEZW5pZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2dnZWQgaW5cbiAgICAgICAgICAgICAgICBzdG9wVHJpZ2dlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgc3RvcFRyaWdnZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBvLm5leHQoYWNjZXNzR3JhbnRlZCA/IHJlcy5hY2Nlc3NfdG9rZW4gOiBudWxsKTtcbiAgICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmVycm9yID09PSAnZXhwaXJlZF90b2tlbicpIHtcbiAgICAgICAgICAgICAgICAvLyBleHBpcmVkIHNvIHNraXAgcG9sbGluZ1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ1Rva2VuIGV4cGlyZWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIG8uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgby5uZXh0KGFjY2Vzc0dyYW50ZWQpO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG91ZExvZ2luU2V0SGVhZGVycyhhY2Nlc3NUb2tlbjogc3RyaW5nLCB0ZW5hbnQ6IHN0cmluZykge1xuICAgIHRoaXMuYmFja2VuZC5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnYmVhcmVyICcgKyBhY2Nlc3NUb2tlbik7XG4gICAgdGhpcy5iYWNrZW5kLnNldEhlYWRlcignWC1JRC1URU5BTlQtTkFNRScsIHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hpbGUgYXBwIGluaXRcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaW5pdFVzZXIoaG9zdD86IHN0cmluZykge1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGAke2hvc3QgfHwgJyd9JHt0aGlzLmNvbmZpZy5nZXRMb2dpbkJhc2UoKX0vYXV0aC9pbmZvYCwge2hlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKGluZm86IEdhdGV3YXlJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuZ2F0ZXdheUluZm8gPSBpbmZvO1xuXG4gICAgICAgIHRoaXMuZW52U2VydmljZS5jbG91ZEVudmlyb25tZW50ID0gKHRoaXMuZ2F0ZXdheUluZm8gJiYgdGhpcy5nYXRld2F5SW5mby5vYXV0aDIpO1xuICAgICAgICBpZiAodGhpcy5pc0Nsb3VkRW52aXJvbm1lbnQoKSkge1xuICAgICAgICAgIC8vIGluIGNhc2Ugb2YgcnVubmluZyBhZ2FpbnN0IGNsb3VkIGJhY2tlbmQsIHdlIHRyeSB0byBmZXRjaFxuICAgICAgICAgIC8vIGFjY2VzcyB0b2tlbiBhbmQgdGVuYW50IGZyb20gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX1NUT1JBR0VfS0VZKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG91ZExvZ2luU2V0SGVhZGVycyhyZXMuYWNjZXNzVG9rZW4sIHJlcy50ZW5hbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoVXNlcihpbmZvLCBob3N0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoVXNlcihpbmZvLCBob3N0KVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGdhdGV3YXlJbmZvXG4gICAqIEBwYXJhbSBob3N0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8RW9Vc2VyPlxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaFVzZXIoZ2F0ZXdheUluZm86IGFueSwgaG9zdD86IHN0cmluZyk6IE9ic2VydmFibGU8RW9Vc2VyPiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChgJHtob3N0IHx8ICcnfSR7dGhpcy5jb25maWcuZ2V0VXJpKCdzZXJ2aWNlQmFzZScpfSR7dGhpcy51c2VyUHJvZmlsZVVyaX1gLCB7aGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvZmlsZSA9IHtcbiAgICAgICAgICAgIGhvc3Q6IGhvc3QgfHwgJycsXG4gICAgICAgICAgICB1c2VyOiB1c2VyLnVzZXIubmFtZSxcbiAgICAgICAgICAgIGF1dGg6IG51bGwsXG4gICAgICAgICAgICBhY3RpdmU6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChob3N0KSB7XG4gICAgICAgICAgICB0aGlzLmFkZEhvc3RDb25maWcoaG9zdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvZ2dlZEluQ2FjaGVLZXksIEpTT04uc3RyaW5naWZ5KHt1c2VySWQ6IHVzZXIudXNlci5pZCwgaG9zdDogaG9zdH0pKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0QXBwKHVzZXIsIGdhdGV3YXlJbmZvLm50bG0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuYXV0aFNvdXJjZS5uZXh0KHRoaXMuaXNMb2dnZWRJbigpKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBvdXQgdGhlIGN1cnJlbnQgdXNlci5cbiAgICogQHBhcmFtIGdhdGV3YXlMb2dvdXQgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIHBlcmZvcm0gYSBnYXRld2F5IGxvZ291dCBhcyB3ZWxsXG4gICAqL1xuICBwdWJsaWMgbG9nb3V0KGdhdGV3YXlMb2dvdXQ/OiBib29sZWFuKSB7XG5cbiAgICB0aGlzLmF1dGhTb3VyY2UubmV4dChmYWxzZSk7XG4gICAgdGhpcy5zeXN0ZW1TdGF0dXNTZXJ2aWNlLnN0b3AoKTtcblxuICAgIHRoaXMucHJvZmlsZSA9IHtcbiAgICAgIGhvc3Q6ICcnLFxuICAgICAgdXNlcjogbnVsbCxcbiAgICAgIGF1dGg6IG51bGwsXG4gICAgICBhY3RpdmU6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmlzQ2xvdWRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAvLyByZW1vdmUgc3RvcmVkIGFjY2VzcyBkYXRhXG4gICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX1NUT1JBR0VfS0VZKS5zdWJzY3JpYmUoKTtcbiAgICAgIGlmICh0aGlzLmNvcmVDb25maWcuZW52aXJvbm1lbnQucHJvZHVjdGlvbiAmJiBFbnZpcm9ubWVudEVuYWlvLmlzV2ViRW52aXJvbm1lbnQoKSkge1xuICAgICAgICAod2luZG93IGFzIGFueSkubG9jYXRpb24uaHJlZiA9IHRoaXMuY29uZmlnLmdldExvZ2luQmFzZSgpICsgJy9sb2dvdXQnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChnYXRld2F5TG9nb3V0KSB7XG4gICAgICAvLyBieSBkZWZhdWx0IHdlIGFyZSBqdXN0IHJlc2V0dGluZyBpbnRlcm5hbCBzdGF0ZSB0byAnbG9nZ2VkIG91dCcgYW5kIGluXG4gICAgICAvLyBzb21lIGNhc2VzIGNhbGwgZ2F0ZXdheXMgbG9nb3V0IGVuZHBvaW50IHRvIGRvIGxvZ291dCBzdHVmZiB0aGVyZSBzaWxlbnRseVxuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLnByb2ZpbGUuaG9zdCB8fCAnJ30ke3RoaXMuY29uZmlnLmdldExvZ2luQmFzZSgpfS9sb2dvdXRgLCB7d2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmJhY2tlbmQuc2V0QXV0aFByb2ZpbGUodGhpcy5wcm9maWxlKTtcbiAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuTE9HT1VUKTtcbiAgfVxuXG4gIGlzQ2xvdWRFbnZpcm9ubWVudCgpOiBib29sZWFuIHtcbiAgICAvLyBvYXV0aDIgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHJ1bm5pbmcgaW4gYSBjbG91ZCBlbnZpcm9ubWVudFxuICAgIHJldHVybiB0aGlzLmdhdGV3YXlJbmZvICYmIHRoaXMuZ2F0ZXdheUluZm8ub2F1dGgyO1xuICB9XG5cbiAgLyoqXG4gICAqIGZvciBkZXNrdG9wIGFuZCBtb2JpbGUgZGV2aWNlcyB3ZSBwcm92aWRlIGEgbGlzdCBvZiBob3N0cyBmb3IgdGhlIGxvZ2luXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgaG9zdFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRIb3N0Q29uZmlnKGhvc3Q6IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0aW5nSG9zdCA9IHRoaXMuaG9zdHMuZmluZChoID0+IGggPT09IGhvc3QpO1xuICAgIGlmICghZXhpc3RpbmdIb3N0KSB7XG4gICAgICB0aGlzLmhvc3RzLnB1c2goaG9zdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIHVzZXIgYmVpbmcgbG9nZ2VkIGluLiBUaGlzIGlzIGtpbmQgb2YgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24gb2Ygc3Vic2NyaWJpbmcgdG8gYGF1dGhlbnRpY2F0ZWQkYC5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGVyZSBpcyBhIGxvZ2dlZCBpbiB1c2VyLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBpc0xvZ2dlZEluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGUudXNlciAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdXNlclxuICAgKiBAcGFyYW0gYm9vbGVhbiBzc29cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxFb1VzZXI+XG4gICAqL1xuICBwcml2YXRlIGluaXRBcHAodXNlcjogYW55LCBzc28/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxFb1VzZXI+IHtcblxuICAgIGNvbnN0IGN1cnJVc2VyID0gbmV3IEVvVXNlcih1c2VyKTtcbiAgICB0aGlzLmJhY2tlbmQuc2V0QXV0aFByb2ZpbGUodGhpcy5wcm9maWxlKTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEN1cnJlbnRVc2VyKHVzZXIpO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IHRoaXMuY2FwYWJpbGl0aWVzU2VydmljZS5zZXRDYXBhYmlsaXRpZXModXNlci5jYXBhYmlsaXRpZXMsIHNzbyk7XG5cbiAgICB0aGlzLnN5c3RlbVN0YXR1c1NlcnZpY2UuaW5pdCh0aGlzLmNvbmZpZy5nZXRSYXcoJ3N5c3RlbVN0YXR1c1VwZGF0ZUludGVydmFsJykpO1xuXG4gICAgLy8gdXBkYXRlIHN0YXRlc1xuICAgIGlmIChjYXBhYmlsaXRpZXMuaW5ib3gpIHtcbiAgICAgIHRoaXMuaW5ib3hTZXJ2aWNlLnJlZnJlc2hJbmJveFN0YXRlKCk7XG4gICAgfVxuICAgIGlmIChjYXBhYmlsaXRpZXMuaW50cmF5KSB7XG4gICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLnJlZnJlc2hQcmVwYXJlZEl0ZW1zQ291bnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RvID0gW1xuICAgICAgdGhpcy5icG1TZXJ2aWNlLmluaXRFeGVjdXRhYmxlUHJvY2Vzc2VzKCksXG4gICAgICB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0U3lzdGVtRGVmaW5pdGlvbihjdXJyVXNlcilcbiAgICBdO1xuXG4gICAgcmV0dXJuIG9ic2VydmFibGVGb3JrSm9pbih0b2RvKS5waXBlKFxuICAgICAgbWFwKCgpID0+IGN1cnJVc2VyKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL2F1dGgvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsSUFBSSxrQkFBa0IsRUFDM0QsRUFBRSxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFDbEQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUMsVUFBVSxFQUFxQixXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVB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QUMsaUJBQWlCLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDakQ7UUFFRCxNQUFNLElBQUksR0FBRztZQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUU7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNsQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQ3BCLENBQUM7SUFDSixDQUFDOzs7WUF4WEYsVUFBVTs7O1lBM0JILE1BQU07WUFvQk4sVUFBVSx1QkF5Q2IsTUFBTSxTQUFDLFdBQVc7WUE5RGYsZUFBZTtZQXVCZixrQkFBa0I7WUF4QmxCLFVBQVU7WUFnQlYsVUFBVTtZQWpCVSxNQUFNO1lBc0IxQixnQkFBZ0I7WUFWaEIsbUJBQW1CO1lBSm5CLE1BQU07WUFHTixZQUFZO1lBRFosY0FBYztZQUpkLGNBQWM7WUFEZCxhQUFhO1lBRWIsV0FBVztZQVFYLFlBQVk7WUFJWixtQkFBbUI7WUFObkIsWUFBWTtZQUNaLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIHRocm93RXJyb3IsIGludGVydmFsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIGNhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QXBwQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9jYWNoZS9hcHAtY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7RW9Vc2VyfSBmcm9tICcuLi8uLi9tb2RlbC9lby11c2VyLm1vZGVsJztcbmltcG9ydCB7U3lzdGVtU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5zZXJ2aWNlJztcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7QXV0aFByb2ZpbGV9IGZyb20gJy4vYXV0aC1wcm9maWxlLmludGVyZmFjZSc7XG5pbXBvcnQge1ByZXBhcmVTZXJ2aWNlfSBmcm9tICcuLi9wcmVwYXJlL3ByZXBhcmUuc2VydmljZSc7XG5pbXBvcnQge0luYm94U2VydmljZX0gZnJvbSAnLi4vaW5ib3gvaW5ib3guc2VydmljZSc7XG5pbXBvcnQge0NhcGFiaWxpdGllc1NlcnZpY2V9IGZyb20gJy4uL2NhcGFiaWxpdGllcy9jYXBhYmlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSAnQG5neC1wd2EvbG9jYWwtc3RvcmFnZSc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi9ldmVudHMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0VuYWlvRXZlbnR9IGZyb20gJy4uL2V2ZW50cy9ldmVudHMnO1xuaW1wb3J0IHtCcG1TZXJ2aWNlfSBmcm9tICcuLi9icG0vYnBtLnNlcnZpY2UnO1xuaW1wb3J0IHtHYXRld2F5SW5mb30gZnJvbSAnLi9nYXRld2F5LWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7U3lzdGVtU3RhdHVzU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtLXN0YXR1cy9zeXN0ZW0tc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHtFbnZpcm9ubWVudEVuYWlvfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC5lbmFpbyc7XG5pbXBvcnQge0xvZ2luRGV2aWNlUmVzdWx0LCBTdG9yZWRUb2tlbn0gZnJvbSAnLi9hdXRoLmNsb3VkLmludGVyZmFjZSc7XG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvcmVDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQge0NPUkVfQ09ORklHfSBmcm9tICcuLi8uLi9jb25maWcvY29yZS1pbml0LnRva2Vucyc7XG5pbXBvcnQge0Vudmlyb25tZW50U2VydmljZX0gZnJvbSAnLi4vZW52aXJvbm1lbnQvZW52aXJvbm1lbnQuc2VydmljZSc7XG5cbi8qKlxuICogYEF1dGhTZXJ2aWNlYCBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGFnYWluc3QgYW4geXV1dmlzPHN1cD4mcmVnOzwvc3VwPiBSQUQgYmFja2VuZC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcblxuICBwcml2YXRlIFRPS0VOX1NUT1JBR0VfS0VZID0gJ2VvLmF1dGguY2xvdWQuY3JlZGVudGlhbHMnO1xuICBwcml2YXRlIHVzZXJQcm9maWxlVXJpID0gdGhpcy51c2VyU2VydmljZS5VU0VSX0ZFVENIX1VSSTtcbiAgcHJpdmF0ZSBhdXRoU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgbG9nZ2VkSW5DYWNoZUtleSA9ICdlby51c2VyLmxvZ2dlZEluJztcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0byBzdWJzY3JpYmUgdG8gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGJlaW5nIGF1dGhlbnRpY2F0ZWQuIFdpbGwgZW1pdCB0cnVlIHdoZW4gYSB1c2VyIGxvZ2dlZCBpbixcbiAgICogZmFsc2Ugd2hlbiB0aGUgdXNlciBsb2dnZWQgb3V0IG9yIHRoZSBnYXRld2F5cyBzZXNzaW9uIHRpbWVkIG91dC5cbiAgICovXG4gIHB1YmxpYyBhdXRoZW50aWNhdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXV0aFNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGhvc3RzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGdhdGV3YXlJbmZvOiBHYXRld2F5SW5mbztcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHByb2ZpbGU6IEF1dGhQcm9maWxlID0ge1xuICAgIGhvc3Q6ICcnLFxuICAgIHVzZXI6IG51bGwsXG4gICAgYXV0aDogbnVsbCxcbiAgICBhY3RpdmU6IGZhbHNlXG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBDb25maWcsXG4gICAgQEluamVjdChDT1JFX0NPTkZJRykgcHVibGljIGNvcmVDb25maWc6IENvcmVDb25maWcsXG4gICAgcHJpdmF0ZSBhcHBDYWNoZTogQXBwQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW52U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGJwbVNlcnZpY2U6IEJwbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0aWVzU2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgaW5ib3hTZXJ2aWNlOiBJbmJveFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmVwYXJlU2VydmljZTogUHJlcGFyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVN0YXR1c1NlcnZpY2U6IFN5c3RlbVN0YXR1c1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2U6IExvY2FsU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgbG9jYWw6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGV2dCA9PiB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5sb2dnZWRJbkNhY2hlS2V5KSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBKU09OLnBhcnNlKGV2dC5uZXdWYWx1ZSkuaG9zdDtcbiAgICAgICAgdGhpcy5pbml0VXNlcihob3N0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpbiBhIHVzZXIgdXNpbmcgZm9ybSBiYXNlZCBsb2dpbi5cbiAgICogQHBhcmFtIGhvc3QgVGhlIHRhcmdldCBob3N0IChjb3VsZCBiZSBudWxsIGlmIHlvdSBhcmUgcnVubmluZyBpbiB3ZWIgZW52aXJvbm1lbnQpXG4gICAqIEBwYXJhbSB1c2VybmFtZSBUaGUgdXNlcm5hbWVcbiAgICogQHBhcmFtIHBhc3N3b3JkIFRoZSBwYXNzd29yZFxuICAgKiBAcmV0dXJucyBSZXNvbHZlcyB3aXRoIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgcHVibGljIGxvZ2luKGhvc3Q6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8RW9Vc2VyPiB7XG5cbiAgICBob3N0ID0gaG9zdCB8fCAnJztcbiAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZkLmFwcGVuZCgndXNlcm5hbWUnLCBlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpKTtcbiAgICBmZC5hcHBlbmQoJ3Bhc3N3b3JkJywgZW5jb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKSk7XG5cbiAgICBjb25zdCBsb2dpbkhlYWRlciA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoaG9zdCArIHRoaXMuY29uZmlnLmdldENvbnRleHRQYXRoKCkgKyAnL2xvZ2luJyxcbiAgICAgIGB1c2VybmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9JnBhc3N3b3JkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gLCB7XG4gICAgICBoZWFkZXJzOiBsb2dpbkhlYWRlcixcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzXG4gICAgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmluaXRVc2VyKGhvc3QpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9nIGluIHRvIGEgY2xvdWQgYmFja2VuZCB1c2luZyBkZXZpY2UgZmxvdy5cbiAgICogQHBhcmFtIGhvc3QgVGhlIHRhcmdldCBob3N0IChjb3VsZCBiZSBudWxsIGlmIHlvdSBhcmUgcnVubmluZyBpbiB3ZWIgZW52aXJvbm1lbnQpXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGhlIHRlbmFudFxuICAgKiBAcmV0dXJucyBSZXNvbHZlcyB3aXRoIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgcHVibGljIGNsb3VkTG9naW4oaG9zdDogc3RyaW5nLCB0ZW5hbnQ6IHN0cmluZyk6IE9ic2VydmFibGU8RW9Vc2VyPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG8gPT4ge1xuICAgICAgY29uc3Qgc3RvcFRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgIC8vY29uc3QgdGFyZ2V0SG9zdCA9IHRoaXMubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZignL2VudGVyJykpOyAvLyBob3N0IHx8ICcnO1xuICAgICAgY29uc3QgdGFyZ2V0SG9zdCA9IGhvc3QgfHwgJyc7XG4gICAgICAvLyBzdGFydCBhdXRoIGZsb3dcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGFyZ2V0SG9zdH0vdGVuYW50LyR7dGVuYW50fS9sb2dpbkRldmljZWApLnN1YnNjcmliZSgocmVzOiBMb2dpbkRldmljZVJlc3VsdCkgPT4ge1xuXG4gICAgICAgIC8vIG9wZW4gbmV3IHdpbmRvdyBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgLi4uXG4gICAgICAgIGNvbnN0IHRhcmdldFVyaSA9IGAke3RhcmdldEhvc3R9L29hdXRoLyR7dGVuYW50fT91c2VyX2NvZGU9JHtyZXMudXNlcl9jb2RlfWA7XG4gICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHRhcmdldFVyaSwgJ2F1dGgnKTtcbiAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgIC8vIEBzZWU6IGh0dHA6Ly9hdGFzaGJhaGFyLmNvbS9wb3N0LzIwMTAtMDQtMjctZGV0ZWN0LXdoZW4tYS1qYXZhc2NyaXB0LXBvcHVwLXdpbmRvdy1nZXRzLWNsb3NlZFxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpblRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAod2luLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2luVGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzdG9wVHJpZ2dlciQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgc3RvcFRyaWdnZXIkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLi4uIGFuZCBzdGFydCBwb2xsaW5nIGZvciBhdXRoZW50aWNhdGlvbiByZXN1bHRzXG4gICAgICAgIHRoaXMuY2xvdWRMb2dpblBvbGxGb3JSZXN1bHQoYCR7dGFyZ2V0SG9zdH0vYXV0aC9pbmZvL3N0YXRlP2RldmljZV9jb2RlPSR7cmVzLmRldmljZV9jb2RlfWAsIDEwMDAsIHN0b3BUcmlnZ2VyJClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRhcCgoYWNjZXNzVG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3VkTG9naW5TZXRIZWFkZXJzKGFjY2Vzc1Rva2VuLCB0ZW5hbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlVG9rZW46IFN0b3JlZFRva2VuID0ge1xuICAgICAgICAgICAgICAgICAgdGVuYW50OiB0ZW5hbnQsXG4gICAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVksIHN0b3JlVG9rZW4pLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoYXV0aFJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhdXRoUmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFVzZXIodGFyZ2V0SG9zdCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcignbm90IGF1dGhlbnRpY2F0ZWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAgICh1c2VyOiBFb1VzZXIpID0+IHtcblxuICAgICAgICAgICAgICB3aW4uY2xvc2UoKTtcbiAgICAgICAgICAgICAgby5uZXh0KHVzZXIpO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICB3aW4uY2xvc2UoKTtcbiAgICAgICAgICAgICAgby5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgby5lcnJvcigndW5hYmxlIHRvIGNhbGwgZGV2aWNlIGZsb3cgZW5kcG9pbnQnLCBlcnIpO1xuICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBwb2xsaW5nIGZvciBsb2dpbiByZXN1bHRzIGluIGNhc2Ugb2YgbG9nZ2luZyBpbiB0byBhIGNsb3VkIGJhY2tlbmQuXG4gICAqIEBwYXJhbSB1cmkgVVJJIHRvIHBvbGxcbiAgICogQHBhcmFtIHBvbGxpbmdJbnRlcnZhbCBQb2xsaW5nIGludGVydmFsbCBpbiBtaWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHN0b3BUcmlnZ2VyIFN1YmplY3QgYWN0aW5nIGFzIHN0b3AgdHJpZ2dlclxuICAgKiBAcmV0dXJucyBBY2Nlc3MgVG9rZW4gaWYgbG9nZ2VkIGluIHN1Y2Nlc3NmdWxseSBvciBOVUxMIG90aGVyd2lzZVxuICAgKi9cbiAgcHJpdmF0ZSBjbG91ZExvZ2luUG9sbEZvclJlc3VsdCh1cmk6IHN0cmluZywgcG9sbGluZ0ludGVydmFsOiBudW1iZXIsIHN0b3BUcmlnZ2VyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUobyA9PiB7XG4gICAgICBsZXQgYWNjZXNzR3JhbnRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGFjY2Vzc0RlbmllZCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGludGVydmFsKHBvbGxpbmdJbnRlcnZhbCkucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoc3RvcFRyaWdnZXIpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0KHVyaSkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgLy8gT0F1dGggc3RhbmRhcmQgd2UgYXJlIHVzaW5nIGlzIHJldHVybmluZyB3aXRoIGEgc3RhdHVzIG9mIDQwMCB3aGlsZSBsb2dnaW5nIGluIChubyBpZGVhIHdoeT8/PylcbiAgICAgICAgICAgICAgLy8gc28gd2UgZ290IHRvIGZldGNoIHRoYXQgdG8gbm90IGJyZWFrIHRoZSBwYXJlbnQgcGlwZVxuICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihlcnIuZXJyb3IpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApKVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIGFjY2Vzc0dyYW50ZWQgPSAhIXJlcy5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICAgIGFjY2Vzc0RlbmllZCA9IHJlcy5lcnJvciA9PT0gJ2FjY2Vzc19kZW5pZWQnO1xuXG4gICAgICAgICAgICAgIGlmIChhY2Nlc3NHcmFudGVkIHx8IGFjY2Vzc0RlbmllZCkge1xuICAgICAgICAgICAgICAgIC8vIGxvZ2dlZCBpblxuICAgICAgICAgICAgICAgIHN0b3BUcmlnZ2VyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBzdG9wVHJpZ2dlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIG8ubmV4dChhY2Nlc3NHcmFudGVkID8gcmVzLmFjY2Vzc190b2tlbiA6IG51bGwpO1xuICAgICAgICAgICAgICAgIG8uY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuZXJyb3IgPT09ICdleHBpcmVkX3Rva2VuJykge1xuICAgICAgICAgICAgICAgIC8vIGV4cGlyZWQgc28gc2tpcCBwb2xsaW5nXG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcignVG9rZW4gZXhwaXJlZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgby5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBvLm5leHQoYWNjZXNzR3JhbnRlZCk7XG4gICAgICAgICAgICAgIG8uY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3VkTG9naW5TZXRIZWFkZXJzKGFjY2Vzc1Rva2VuOiBzdHJpbmcsIHRlbmFudDogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNrZW5kLnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsICdiZWFyZXIgJyArIGFjY2Vzc1Rva2VuKTtcbiAgICB0aGlzLmJhY2tlbmQuc2V0SGVhZGVyKCdYLUlELVRFTkFOVC1OQU1FJywgdGVuYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGlsZSBhcHAgaW5pdFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpbml0VXNlcihob3N0Pzogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoYCR7aG9zdCB8fCAnJ30ke3RoaXMuY29uZmlnLmdldENvbnRleHRQYXRoKCl9L2F1dGgvaW5mb2AsIHtoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29yZUNvbmZpZy53aXRoQ3JlZGVudGlhbHN9KVxuICAgICAgLnBpcGUoc3dpdGNoTWFwKChpbmZvOiBHYXRld2F5SW5mbykgPT4ge1xuICAgICAgICB0aGlzLmdhdGV3YXlJbmZvID0gaW5mbztcblxuICAgICAgICB0aGlzLmVudlNlcnZpY2UuY2xvdWRFbnZpcm9ubWVudCA9ICh0aGlzLmdhdGV3YXlJbmZvICYmIHRoaXMuZ2F0ZXdheUluZm8ub2F1dGgyKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDbG91ZEVudmlyb25tZW50KCkpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIG9mIHJ1bm5pbmcgYWdhaW5zdCBjbG91ZCBiYWNrZW5kLCB3ZSB0cnkgdG8gZmV0Y2hcbiAgICAgICAgICAvLyBhY2Nlc3MgdG9rZW4gYW5kIHRlbmFudCBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvdWRMb2dpblNldEhlYWRlcnMocmVzLmFjY2Vzc1Rva2VuLCByZXMudGVuYW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFVzZXIoaW5mbywgaG9zdCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFVzZXIoaW5mbywgaG9zdClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBnYXRld2F5SW5mb1xuICAgKiBAcGFyYW0gaG9zdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEVvVXNlcj5cbiAgICovXG4gIHByaXZhdGUgZmV0Y2hVc2VyKGdhdGV3YXlJbmZvOiBhbnksIGhvc3Q/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVvVXNlcj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoYCR7aG9zdCB8fCAnJ30ke3RoaXMuY29uZmlnLmdldFVyaSgnc2VydmljZUJhc2UnKX0ke3RoaXMudXNlclByb2ZpbGVVcml9YCwge2hlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2ZpbGUgPSB7XG4gICAgICAgICAgICBob3N0OiBob3N0IHx8ICcnLFxuICAgICAgICAgICAgdXNlcjogdXNlci51c2VyLm5hbWUsXG4gICAgICAgICAgICBhdXRoOiBudWxsLFxuICAgICAgICAgICAgYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaG9zdCkge1xuICAgICAgICAgICAgdGhpcy5hZGRIb3N0Q29uZmlnKGhvc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2dnZWRJbkNhY2hlS2V5LCBKU09OLnN0cmluZ2lmeSh7dXNlcklkOiB1c2VyLnVzZXIuaWQsIGhvc3Q6IGhvc3R9KSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEFwcCh1c2VyLCBnYXRld2F5SW5mby5udGxtKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmF1dGhTb3VyY2UubmV4dCh0aGlzLmlzTG9nZ2VkSW4oKSkpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3Mgb3V0IHRoZSBjdXJyZW50IHVzZXIuXG4gICAqIEBwYXJhbSBnYXRld2F5TG9nb3V0IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBwZXJmb3JtIGEgZ2F0ZXdheSBsb2dvdXQgYXMgd2VsbFxuICAgKi9cbiAgcHVibGljIGxvZ291dChnYXRld2F5TG9nb3V0PzogYm9vbGVhbikge1xuXG4gICAgdGhpcy5hdXRoU291cmNlLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuc3lzdGVtU3RhdHVzU2VydmljZS5zdG9wKCk7XG5cbiAgICB0aGlzLnByb2ZpbGUgPSB7XG4gICAgICBob3N0OiAnJyxcbiAgICAgIHVzZXI6IG51bGwsXG4gICAgICBhdXRoOiBudWxsLFxuICAgICAgYWN0aXZlOiBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc0Nsb3VkRW52aXJvbm1lbnQoKSkge1xuICAgICAgLy8gcmVtb3ZlIHN0b3JlZCBhY2Nlc3MgZGF0YVxuICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSkuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAodGhpcy5jb3JlQ29uZmlnLmVudmlyb25tZW50LnByb2R1Y3Rpb24gJiYgRW52aXJvbm1lbnRFbmFpby5pc1dlYkVudmlyb25tZW50KCkpIHtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLmxvY2F0aW9uLmhyZWYgPSB0aGlzLmNvbmZpZy5nZXRDb250ZXh0UGF0aCgpICsgJy9sb2dvdXQnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChnYXRld2F5TG9nb3V0KSB7XG4gICAgICAvLyBieSBkZWZhdWx0IHdlIGFyZSBqdXN0IHJlc2V0dGluZyBpbnRlcm5hbCBzdGF0ZSB0byAnbG9nZ2VkIG91dCcgYW5kIGluXG4gICAgICAvLyBzb21lIGNhc2VzIGNhbGwgZ2F0ZXdheXMgbG9nb3V0IGVuZHBvaW50IHRvIGRvIGxvZ291dCBzdHVmZiB0aGVyZSBzaWxlbnRseVxuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLnByb2ZpbGUuaG9zdCB8fCAnJ30ke3RoaXMuY29uZmlnLmdldENvbnRleHRQYXRoKCl9L2xvZ291dGAsIHt3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29yZUNvbmZpZy53aXRoQ3JlZGVudGlhbHN9KS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cblxuICAgIHRoaXMuYmFja2VuZC5zZXRBdXRoUHJvZmlsZSh0aGlzLnByb2ZpbGUpO1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5MT0dPVVQpO1xuICB9XG5cbiAgaXNDbG91ZEVudmlyb25tZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIG9hdXRoMiBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgcnVubmluZyBpbiBhIGNsb3VkIGVudmlyb25tZW50XG4gICAgcmV0dXJuIHRoaXMuZ2F0ZXdheUluZm8gJiYgdGhpcy5nYXRld2F5SW5mby5vYXV0aDI7XG4gIH1cblxuICAvKipcbiAgICogZm9yIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzIHdlIHByb3ZpZGUgYSBsaXN0IG9mIGhvc3RzIGZvciB0aGUgbG9naW5cbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBob3N0XG4gICAqL1xuICBwcml2YXRlIGFkZEhvc3RDb25maWcoaG9zdDogc3RyaW5nKSB7XG4gICAgY29uc3QgZXhpc3RpbmdIb3N0ID0gdGhpcy5ob3N0cy5maW5kKGggPT4gaCA9PT0gaG9zdCk7XG4gICAgaWYgKCFleGlzdGluZ0hvc3QpIHtcbiAgICAgIHRoaXMuaG9zdHMucHVzaChob3N0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgdXNlciBiZWluZyBsb2dnZWQgaW4uIFRoaXMgaXMga2luZCBvZiB0aGUgc3luY2hyb25vdXMgdmVyc2lvbiBvZiBzdWJzY3JpYmluZyB0byBgYXV0aGVudGljYXRlZCRgLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZXJlIGlzIGEgbG9nZ2VkIGluIHVzZXIsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZS51c2VyICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyXG4gICAqIEBwYXJhbSBib29sZWFuIHNzb1xuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEVvVXNlcj5cbiAgICovXG4gIHByaXZhdGUgaW5pdEFwcCh1c2VyOiBhbnksIHNzbz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEVvVXNlcj4ge1xuXG4gICAgY29uc3QgY3VyclVzZXIgPSBuZXcgRW9Vc2VyKHVzZXIpO1xuICAgIHRoaXMuYmFja2VuZC5zZXRBdXRoUHJvZmlsZSh0aGlzLnByb2ZpbGUpO1xuICAgIHRoaXMudXNlclNlcnZpY2Uuc2V0Q3VycmVudFVzZXIodXNlcik7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlLnNldENhcGFiaWxpdGllcyh1c2VyLmNhcGFiaWxpdGllcywgc3NvKTtcblxuICAgIHRoaXMuc3lzdGVtU3RhdHVzU2VydmljZS5pbml0KHRoaXMuY29uZmlnLmdldFJhdygnc3lzdGVtU3RhdHVzVXBkYXRlSW50ZXJ2YWwnKSk7XG5cbiAgICAvLyB1cGRhdGUgc3RhdGVzXG4gICAgaWYgKGNhcGFiaWxpdGllcy5pbmJveCkge1xuICAgICAgdGhpcy5pbmJveFNlcnZpY2UucmVmcmVzaEluYm94U3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKGNhcGFiaWxpdGllcy5pbnRyYXkpIHtcbiAgICAgIHRoaXMucHJlcGFyZVNlcnZpY2UucmVmcmVzaFByZXBhcmVkSXRlbXNDb3VudCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvZG8gPSBbXG4gICAgICB0aGlzLmJwbVNlcnZpY2UuaW5pdEV4ZWN1dGFibGVQcm9jZXNzZXMoKSxcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRTeXN0ZW1EZWZpbml0aW9uKGN1cnJVc2VyKVxuICAgIF07XG5cbiAgICByZXR1cm4gb2JzZXJ2YWJsZUZvcmtKb2luKHRvZG8pLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gY3VyclVzZXIpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -8,6 +8,7 @@ import { Logger } from '../logger/logger';
8
8
  import { finalize, shareReplay } from 'rxjs/operators';
9
9
  import { CoreConfig } from '../../config/core-config';
10
10
  import { CORE_CONFIG } from '../../config/core-init.tokens';
11
+ // @ts-ignore
11
12
  /**
12
13
  * `BackendService` encapsulates the communication with the yuuvis<sup>&reg;</sup> RAD REST endpoints.
13
14
  *
@@ -76,49 +77,49 @@ export class BackendService {
76
77
  * @returns Base URI
77
78
  */
78
79
  getServiceBase() {
79
- return this.getHost() + this.config.getUri('serviceBase');
80
+ return this.getHostWithContext() + this.config.getUri('serviceBase');
80
81
  }
81
82
  /**
82
83
  * Gets the base URI for the Search-Service endpoint
83
84
  * @returns Base URI
84
85
  */
85
86
  getSearchBase() {
86
- return this.getHost() + this.config.getUri('searchBase');
87
+ return this.getHostWithContext() + this.config.getUri('searchBase');
87
88
  }
88
89
  /**
89
90
  * Gets the base URI for the Context-Service endpoint
90
91
  * @returns Base URI
91
92
  */
92
93
  getContextBase() {
93
- return this.getHost() + this.config.getUri('contextBase');
94
+ return this.getHostWithContext() + this.config.getUri('contextBase');
94
95
  }
95
96
  /**
96
97
  * Gets the base URI for the Inbox-Service endpoint
97
98
  * @returns Base URI
98
99
  */
99
100
  getInboxBase() {
100
- return this.getHost() + this.config.getUri('inboxBase');
101
+ return this.getHostWithContext() + this.config.getUri('inboxBase');
101
102
  }
102
103
  /**
103
104
  * Gets the base URI for the BPM-Service endpoint
104
105
  * @returns Base URI
105
106
  */
106
107
  getBpmBase() {
107
- return this.getHost() + this.config.getUri('bpmBase');
108
+ return this.getHostWithContext() + this.config.getUri('bpmBase');
108
109
  }
109
110
  /**
110
111
  * Gets the base URI for the Agent-Service endpoint
111
112
  * @returns Base URI
112
113
  */
113
114
  getAgentBase() {
114
- return this.getHost() + this.config.getUri('agentBase');
115
+ return this.getHostWithContext() + this.config.getUri('agentBase');
115
116
  }
116
117
  /**
117
118
  * Gets the base URI for the Status-Service endpoint
118
119
  * @returns Base URI
119
120
  */
120
121
  getStatusBase() {
121
- return this.getHost() + this.config.getUri('statusBase');
122
+ return this.getHostWithContext() + this.config.getUri('statusBase');
122
123
  }
123
124
  /**
124
125
  * @ignore
@@ -132,6 +133,12 @@ export class BackendService {
132
133
  getHost() {
133
134
  return this.authProfile.host || '';
134
135
  }
136
+ getHostWithContext() {
137
+ return (this.authProfile.host || '') + this.config.getContextPath();
138
+ }
139
+ getBaseWithContext(base) {
140
+ return (base === null || base === void 0 ? void 0 : base.startsWith('/')) ? this.config.getContextPath() + base : base;
141
+ }
135
142
  /**
136
143
  * Wrapped HTTP GET method
137
144
  * @param uri The REST URI to be queried
@@ -140,7 +147,7 @@ export class BackendService {
140
147
  * @returns The data retrieved from the given endpoint
141
148
  */
142
149
  get(uri, base, requestOptions) {
143
- return this.http.get((base || this.getServiceBase()) + uri, this.getHttpOptions(requestOptions));
150
+ return this.http.get((this.getBaseWithContext(base) || this.getServiceBase()) + uri, this.getHttpOptions(requestOptions));
144
151
  }
145
152
  /**
146
153
  * Wrapped HTTP PUT method
@@ -151,13 +158,13 @@ export class BackendService {
151
158
  * @returns The return value of the target PUT endpoint
152
159
  */
153
160
  put(uri, data, base, requestOptions) {
154
- return this.http.put((base || this.getServiceBase()) + uri, data, this.getHttpOptions(requestOptions));
161
+ return this.http.put((this.getBaseWithContext(base) || this.getServiceBase()) + uri, data, this.getHttpOptions(requestOptions));
155
162
  }
156
163
  /**
157
164
  * @ignore
158
165
  */
159
166
  getJson(uri, base) {
160
- return this.get(uri, base || this.getServiceBase(), { responseType: 'json' });
167
+ return this.http.get((this.getBaseWithContext(base) || this.getServiceBase()) + uri, this.getHttpOptions({ responseType: 'json' }));
161
168
  }
162
169
  /**
163
170
  * Wrapped HTTP POST method
@@ -168,7 +175,7 @@ export class BackendService {
168
175
  * @returns The return value of the target POST endpoint
169
176
  */
170
177
  post(uri, data, base, requestOptions) {
171
- const baseUri = base || this.getServiceBase();
178
+ const baseUri = this.getBaseWithContext(base) || this.getServiceBase();
172
179
  const payload = data ? JSON.stringify(data) : '';
173
180
  return this.http.post(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));
174
181
  }
@@ -181,7 +188,7 @@ export class BackendService {
181
188
  * @returns The return value of the target POST endpoint
182
189
  */
183
190
  postMultiPart(uri, formData, base, requestOptions) {
184
- const baseUri = base || this.getServiceBase();
191
+ const baseUri = this.getBaseWithContext(base) || this.getServiceBase();
185
192
  const headers = this.getHeaders();
186
193
  headers.delete('Content-Type');
187
194
  const reqOptions = Object.assign({ headers: headers, withCredentials: this.coreConfig.withCredentials }, requestOptions);
@@ -195,7 +202,7 @@ export class BackendService {
195
202
  * @returns The return value of the target DELETE endpoint
196
203
  */
197
204
  del(uri, base, requestOptions) {
198
- return this.http.delete((base || this.getServiceBase()) + uri, this.getHttpOptions(requestOptions));
205
+ return this.http.delete((this.getBaseWithContext(base) || this.getServiceBase()) + uri, this.getHttpOptions(requestOptions));
199
206
  }
200
207
  /**
201
208
  * @ignore
@@ -318,4 +325,4 @@ BackendService.ctorParameters = () => [
318
325
  { type: Logger },
319
326
  { type: Config }
320
327
  ];
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUF1QyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRWhELE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUd4QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUF5QjFEOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQVF6Qjs7T0FFRztJQUNILFlBQW9CLElBQWdCLEVBQ04sVUFBc0IsRUFDMUMsTUFBYyxFQUNkLE1BQWM7UUFISixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ04sZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVpqQixtQkFBYyxHQUFrQyxHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFB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ekYsd0JBQXdCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsTUFBTSxlQUFlLEdBQUcsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25GLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2pHLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ssaUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxXQUFXLENBQUM7WUFDckIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxvQkFBb0IsRUFBRSxPQUFPO1lBQzdCLHNCQUFzQixFQUFFLE9BQU87WUFDL0IsaUJBQWlCLEVBQUUsTUFBTTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUF6VUYsVUFBVTs7O1lBdkNILFVBQVU7WUFRVixVQUFVLHVCQTRDYixNQUFNLFNBQUMsV0FBVztZQWhEZixNQUFNO1lBSE4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBPYnNlcnZhYmxlLCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7RG1zT2JqZWN0fSBmcm9tICcuLi8uLi9tb2RlbC9kbXMtb2JqZWN0Lm1vZGVsJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7QXV0aFByb2ZpbGV9IGZyb20gJy4uL2F1dGgvYXV0aC1wcm9maWxlLmludGVyZmFjZSc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7ZmluYWxpemUsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvcmVDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQge0NPUkVfQ09ORklHfSBmcm9tICcuLi8uLi9jb25maWcvY29yZS1pbml0LnRva2Vucyc7XG5cbi8qKlxuICogSHR0cE9wdGlvbnMgZm9yIGh0dHAgcmVxdWVzdFxuICogQHBhcmFtIG9ic2VydmU6ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJ1xuICogQHBhcmFtIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0J1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBPcHRpb25zIHtcbiAgaGVhZGVycz86XG4gIHwgSHR0cEhlYWRlcnNcbiAgfCB7XG4gICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gIH07XG4gIG9ic2VydmU/OiBhbnk7XG4gIHBhcmFtcz86XG4gIHwgSHR0cFBhcmFtc1xuICB8IHtcbiAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlc3BvbnNlVHlwZT86IGFueTtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuXG4vKipcbiAqIGBCYWNrZW5kU2VydmljZWAgZW5jYXBzdWxhdGVzIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIFJFU1QgZW5kcG9pbnRzLlxuICpcbiAqIEFzIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIHByb3ZpZGVzIGRpZmZlcmVudCBzZXJ2aWNlcywgdGhpcyBzZXJ2aWNlIGlzIGFsc28gY2FwYWJsZSBvZiBwcm92aWRpbmcgdGhlIGJhc2UgVVJJcyBmb3IgdGhvc2Ugc2VydmljZXMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrZW5kU2VydmljZSB7XG5cbiAgcHVibGljIGdyaWREYXRhRmlsdGVyOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9IG1hcCgoZGF0YTogYW55W10pID0+IGRhdGE/LmZpbHRlcigodjogYW55KSA9PiAhdi5fX3JlbW92ZWQpKTtcbiAgcHJpdmF0ZSBhdXRoUHJvZmlsZTogQXV0aFByb2ZpbGU7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBwcml2YXRlIHRlbXAgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxhbnk+PigpO1xuICBwcml2YXRlIGhlYWRlcnMgPSB0aGlzLnNldERlZmF1bHRIZWFkZXJzKCk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KENPUkVfQ09ORklHKSBwdWJsaWMgY29yZUNvbmZpZzogQ29yZUNvbmZpZyxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWcpIHtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgcHJvZmlsZSBpcyBzdXBwb3NlZCB0byB1c2UgTlRMTVxuICAgICAqIEB0eXBlIHtob3N0OiBzdHJpbmc7IG50bG06IGJvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRoUHJvZmlsZSA9IHtcbiAgICAgIGhvc3Q6ICcnLFxuICAgICAgbnRsbTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHNldEF1dGhQcm9maWxlKHByb2ZpbGU/OiBBdXRoUHJvZmlsZSkge1xuICAgIGlmIChwcm9maWxlKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLnNldERlZmF1bHRIZWFkZXJzKCk7XG4gICAgICB0aGlzLmF1dGhQcm9maWxlID0gcHJvZmlsZTtcbiAgICAgIGlmICh0aGlzLmF1dGhQcm9maWxlLmF1dGgpIHtcbiAgICAgICAgLy8gdGhpcy5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmF1dGhQcm9maWxlLmF1dGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZSgnQXV0aG9yaXphdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaGVhZGVyLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBoZWFkZXJzIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IHRoaXMuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBoZWFkZXJzXG4gICAqIEByZXR1cm5zIFRoZSBgSHR0cEhlYWRlcnNgIHRoYXQgYXJlIGN1cnJlbnRseSBzZXQgdXBcbiAgICovXG4gIHB1YmxpYyBnZXRIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHB1YmxpYyBnZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogSHR0cE9wdGlvbnMge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgRE1TLVNlcnZpY2UgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQmFzZSBVUklcbiAgICovXG4gIHB1YmxpYyBnZXRTZXJ2aWNlQmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0KCkgKyB0aGlzLmNvbmZpZy5nZXRVcmkoJ3NlcnZpY2VCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBTZWFyY2gtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaEJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9zdCgpICsgdGhpcy5jb25maWcuZ2V0VXJpKCdzZWFyY2hCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBDb250ZXh0LVNlcnZpY2UgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQmFzZSBVUklcbiAgICovXG4gIHB1YmxpYyBnZXRDb250ZXh0QmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0KCkgKyB0aGlzLmNvbmZpZy5nZXRVcmkoJ2NvbnRleHRCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBJbmJveC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0SW5ib3hCYXNlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEhvc3QoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnaW5ib3hCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBCUE0tU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldEJwbUJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9zdCgpICsgdGhpcy5jb25maWcuZ2V0VXJpKCdicG1CYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBBZ2VudC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0QWdlbnRCYXNlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEhvc3QoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnYWdlbnRCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBTdGF0dXMtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldFN0YXR1c0Jhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9zdCgpICsgdGhpcy5jb25maWcuZ2V0VXJpKCdzdGF0dXNCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGdldEljb25CYXNlKGlkOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiB0aGlzLmdldFNlcnZpY2VCYXNlKCkgKyAnL3VpL2ljb24vJyArIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHB1YmxpYyBnZXRIb3N0KCkge1xuICAgIHJldHVybiB0aGlzLmF1dGhQcm9maWxlLmhvc3QgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlZCBIVFRQIEdFVCBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgUkVTVCBVUkkgdG8gYmUgcXVlcmllZFxuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIGRhdGEgcmV0cmlldmVkIGZyb20gdGhlIGdpdmVuIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZ2V0KHVyaTogc3RyaW5nLCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCgoYmFzZSB8fCB0aGlzLmdldFNlcnZpY2VCYXNlKCkpICsgdXJpLCB0aGlzLmdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlZCBIVFRQIFBVVCBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgJ3Bvc3RlZCdcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBQVVQgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwdXQodXJpOiBzdHJpbmcsIGRhdGE/OiBhbnksIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KChiYXNlIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKSkgKyB1cmksIGRhdGEsIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZ2V0SnNvbih1cmk6IHN0cmluZywgYmFzZT86IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHVyaSwgYmFzZSB8fCB0aGlzLmdldFNlcnZpY2VCYXNlKCksIHtyZXNwb25zZVR5cGU6ICdqc29uJ30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBQT1NUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBPU1QgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwb3N0KHVyaTogc3RyaW5nLCBkYXRhPywgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYmFzZVVyaSA9IGJhc2UgfHwgdGhpcy5nZXRTZXJ2aWNlQmFzZSgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7YmFzZVVyaX0ke3VyaX1gLCBwYXlsb2FkLCB0aGlzLmdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBtdWx0aXBhcnQgZm9ybSBkYXRhIFBPU1QgcmVxdWVzdC5cbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBmb3JtRGF0YSBGb3JtRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBPU1QgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwb3N0TXVsdGlQYXJ0KHVyaTogc3RyaW5nLCBmb3JtRGF0YTogRm9ybURhdGEsIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJhc2VVcmkgPSBiYXNlIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XG4gICAgaGVhZGVycy5kZWxldGUoJ0NvbnRlbnQtVHlwZScpO1xuICAgIGNvbnN0IHJlcU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtoZWFkZXJzOiBoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29yZUNvbmZpZy53aXRoQ3JlZGVudGlhbHN9LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke2Jhc2VVcml9JHt1cml9YCwgZm9ybURhdGEsIHJlcU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBERUxFVEUgbWV0aG9kXG4gICAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBSRVNUIFVSSVxuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IERFTEVURSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGRlbCh1cmk6IHN0cmluZywgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoKGJhc2UgfHwgdGhpcy5nZXRTZXJ2aWNlQmFzZSgpKSArIHVyaSwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogU29mdCB1cGRhdGUgZm9yIGxpc3RzIC0gZW5hYmxlcyBncmlkIHRvIGhhbmRsZSBhbGwgY2hhbmdlc1xuICAgKiB0byBhZGQgbmV3IC0gb25seSBpdGVtIHNob3VsZCBiZSBzcGVjaWZpZWRcbiAgICogdG8gcmVtb3ZlIC0gb25seSBpZCBzaG91bGQgYmUgc3BlY2lmaWVkXG4gICAqIHRvIHVwZGF0ZSAtIGJvdGggcGFyYW1zIHNob3VsZCBiZSBzcGVjaWZpZWRcbiAgICpcbiAgICogQHBhcmFtIGFueVtdIGxpc3QgT3JpZ2luYWwgbGlzdCBvZiBpdGVtc1xuICAgKiBAcGFyYW0gaWQ/OiBzdHJpbmc7IGl0ZW0/OiBhbnkgZGF0YVtdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKGxpc3Q6IGFueVtdLCBkYXRhOiB7aWQ/OiBzdHJpbmcsIGl0ZW0/OiBhbnl9W10pIHtcbiAgICBkYXRhLmZvckVhY2goKHtpZCwgaXRlbX0pID0+IHtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBjb25zdCBfaXRlbSA9IGxpc3QuZmluZChsID0+IGwuaWQgPT09IGlkKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfaXRlbSwgaXRlbSwgaXRlbSA/IHtfX3VwZGF0ZWQ6IHRydWV9IDoge19fcmVtb3ZlZDogdHJ1ZX0pO1xuICAgICAgfSBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgIGxpc3QudW5zaGlmdChPYmplY3QuYXNzaWduKGl0ZW0sIHtfX2FkZGVkOiB0cnVlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogQ2FjaGUgZm9yIHNtYWxsIHJlcXVlc3RzIGxpa2UgaWNvbnMgYW5kIGNvbmZpZ3NcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyB1cmlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZ2V0VmlhQ2FjaGUodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyh1cmkpKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHRoaXMuY2FjaGUuZ2V0KHVyaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWaWFUZW1wQ2FjaGUodXJpLCAoKSA9PiB0aGlzLmh0dHAuZ2V0KHVyaSwge3dpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlOiAndGV4dCd9KS5waXBlKFxuICAgICAgICB0YXAodGV4dCA9PiB0aGlzLmNhY2hlLnNldCh1cmksIHRleHQpKSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIFRlbXBvcmFyeSBDYWNoZSBmb3IgbXVsdGlwbGUgaWRlbnRpY2FsIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgaWRcbiAgICogQHBhcmFtIEZ1bmN0aW9uIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZ2V0VmlhVGVtcENhY2hlKGlkOiBzdHJpbmcsIHJlcXVlc3Q/OiBGdW5jdGlvbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMudGVtcC5oYXMoaWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wLmdldChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3AgPSAocmVxdWVzdCA/IHJlcXVlc3QoKSA6IHRoaXMuZ2V0KGlkKSkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy50ZW1wLmRlbGV0ZShpZCkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICAgIHRoaXMudGVtcC5zZXQoaWQsIHJlc3ApO1xuICAgICAgcmV0dXJuIHJlc3A7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIHRoZSBjb250ZW50IG9mIGRtcyBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gRG1zT2JqZWN0W10gZG1zT2JqZWN0cyBBcnJheSBvZiBkbXMgb2JqZWN0cyB0byBiZSBkb3dubG9hZGVkXG4gICAqIEBwYXJhbSBcIlBERlwiIHwgXCJUSUZGXCIgfCBcIlRFWFRcIiB8IFwiSlBFR1wiIHJlbmRpdGlvbiBUaGUgdHlwZSBvZiByZW5kaXRpb24gdG8gYmUgZG93bmxvYWRlZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIG9yaWdpbmFsIGNvbnRlbnQgd2lsbCBiZSBkb3dubG9hZGVkLlxuICAgKiBQb3NzaWJsZSByZW5kaXRpb25zIGFyZSBgUERGYCwgYFRJRkZgLCBgVEVYVGAsIGBKUEVHYC5cbiAgICovXG4gIHB1YmxpYyBkb3dubG9hZENvbnRlbnQoZG1zT2JqZWN0czogRG1zT2JqZWN0W10sIHJlbmRpdGlvbj86ICdQREYnIHwgJ1RJRkYnIHwgJ1RFWFQnIHwgJ0pQRUcnLCBmaWxlTmFtZVdpdGhWZXJzaW9uTnVtYmVyPzogYm9vbGVhbikge1xuXG4gICAgZG1zT2JqZWN0cy5mb3JFYWNoKGRtc09iamVjdCA9PiB7XG4gICAgICBpZiAoZG1zT2JqZWN0LmNvbnRlbnQpIHtcblxuICAgICAgICBsZXQgdXJpID0gYCR7dGhpcy5nZXRTZXJ2aWNlQmFzZSgpfS9kbXMvJHtkbXNPYmplY3QuY29udGVudC5pZH0vY29udGVudD90eXBlPSR7ZG1zT2JqZWN0LmNvbnRlbnQudHlwZX0mYXNkb3dubG9hZD10cnVlYDtcbiAgICAgICAgaWYgKHJlbmRpdGlvbikge1xuICAgICAgICAgIHVyaSArPSBgJnJlbmRpdGlvbj0ke3JlbmRpdGlvbn0mX2ludGVudD1ET1dOTE9BRF8ke3JlbmRpdGlvbn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVyaSArPSAnJl9pbnRlbnQ9RE9XTkxPQUQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkbXNPYmplY3QuY29udGVudC5pZCA9PT0gZG1zT2JqZWN0LmlkKSB7XG4gICAgICAgICAgdXJpICs9IGAmdmVyc2lvbj0ke2Rtc09iamVjdC52ZXJzaW9ufWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb3dubG9hZCh1cmksIGZpbGVOYW1lV2l0aFZlcnNpb25OdW1iZXIgPyBkbXNPYmplY3QudmVyc2lvbiA6IG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1RoZSBwcm92aWRlZCBkbXMgb2JqZWN0IGhhcyBubyBjb250ZW50JywgZG1zT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZCh1cmk6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikge1xuICAgIHRoaXMuaHR0cC5nZXQodXJpLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJywgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhcbiAgICAgICAgICByZXMuYm9keSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVOYW1lRnJvbUh0dHBSZXNwb25zZShyZXMsIHZlcnNpb24pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlczogSHR0cFJlc3BvbnNlPGFueT4sIHZlcnNpb246IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IHJlcy5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID0gY29udGVudERpc3Bvc2l0aW9uSGVhZGVyLm1hdGNoKCdmaWxlbmFtZVxcXFwqPVVURi04XFwnXFwnKC4qKScpXG4gICAgICB8fCBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIubWF0Y2goJ2ZpbGVuYW1lPVxcXCIoLiopXFxcIicpO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZSA9IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID8gZW5jb2RlZEZpbGVOYW1lTWF0Y2hSZXN1bHRbMV0gOiBudWxsO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZW5jb2RlZEZpbGVOYW1lID8gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRGaWxlTmFtZSkgOiAndW5rbm93bic7XG4gICAgY29uc3QgaW5kZXggPSAhfmZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgPyBmaWxlbmFtZS5sZW5ndGggOiBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgIHJldHVybiAhdmVyc2lvbiA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWUuc2xpY2UoMCwgaW5kZXgpfV92JHt2ZXJzaW9ufSR7ZmlsZW5hbWUuc2xpY2UoaW5kZXgpfWA7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHRoZSBIVFRQIEhlYWRlcnNcbiAgICpcbiAgICogQHJldHVybnMgSHR0cEhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLW9zLWluY2x1ZGUtbGlua3MnOiAnZmFsc2UnLFxuICAgICAgJ1gtb3MtaW5jbHVkZS1hY3Rpb25zJzogJ2ZhbHNlJyxcbiAgICAgICdYLW9zLXN5bmMtaW5kZXgnOiAndHJ1ZSdcbiAgICB9KTtcbiAgfVxufVxuIl19
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUF1QyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRWhELE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUd4QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUF5QjFELGFBQWE7QUFDYjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFRekI7O09BRUc7SUFDSCxZQUFvQixJQUFnQixFQUNOLFVBQXNCLEVBQzFDLE1BQWMsRUFDZCxNQUFjO1FBSEosU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNOLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFaakIsbUJBQWMsR0FBa0MsR0FBRyxDQUFDLENBQUMsSUFB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QyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2pHLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ssaUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxXQUFXLENBQUM7WUFDckIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxvQkFBb0IsRUFBRSxPQUFPO1lBQzdCLHNCQUFzQixFQUFFLE9BQU87WUFDL0IsaUJBQWlCLEVBQUUsTUFBTTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUFqVkYsVUFBVTs7O1lBeENILFVBQVU7WUFRVixVQUFVLHVCQTZDYixNQUFNLFNBQUMsV0FBVztZQWpEZixNQUFNO1lBSE4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBPYnNlcnZhYmxlLCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7RG1zT2JqZWN0fSBmcm9tICcuLi8uLi9tb2RlbC9kbXMtb2JqZWN0Lm1vZGVsJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7QXV0aFByb2ZpbGV9IGZyb20gJy4uL2F1dGgvYXV0aC1wcm9maWxlLmludGVyZmFjZSc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7ZmluYWxpemUsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvcmVDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQge0NPUkVfQ09ORklHfSBmcm9tICcuLi8uLi9jb25maWcvY29yZS1pbml0LnRva2Vucyc7XG5cbi8qKlxuICogSHR0cE9wdGlvbnMgZm9yIGh0dHAgcmVxdWVzdFxuICogQHBhcmFtIG9ic2VydmU6ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJ1xuICogQHBhcmFtIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0J1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBPcHRpb25zIHtcbiAgaGVhZGVycz86XG4gIHwgSHR0cEhlYWRlcnNcbiAgfCB7XG4gICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gIH07XG4gIG9ic2VydmU/OiBhbnk7XG4gIHBhcmFtcz86XG4gIHwgSHR0cFBhcmFtc1xuICB8IHtcbiAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlc3BvbnNlVHlwZT86IGFueTtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuXG4vLyBAdHMtaWdub3JlXG4vKipcbiAqIGBCYWNrZW5kU2VydmljZWAgZW5jYXBzdWxhdGVzIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIFJFU1QgZW5kcG9pbnRzLlxuICpcbiAqIEFzIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIHByb3ZpZGVzIGRpZmZlcmVudCBzZXJ2aWNlcywgdGhpcyBzZXJ2aWNlIGlzIGFsc28gY2FwYWJsZSBvZiBwcm92aWRpbmcgdGhlIGJhc2UgVVJJcyBmb3IgdGhvc2Ugc2VydmljZXMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrZW5kU2VydmljZSB7XG5cbiAgcHVibGljIGdyaWREYXRhRmlsdGVyOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9IG1hcCgoZGF0YTogYW55W10pID0+IGRhdGE/LmZpbHRlcigodjogYW55KSA9PiAhdi5fX3JlbW92ZWQpKTtcbiAgcHJpdmF0ZSBhdXRoUHJvZmlsZTogQXV0aFByb2ZpbGU7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBwcml2YXRlIHRlbXAgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxhbnk+PigpO1xuICBwcml2YXRlIGhlYWRlcnMgPSB0aGlzLnNldERlZmF1bHRIZWFkZXJzKCk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KENPUkVfQ09ORklHKSBwdWJsaWMgY29yZUNvbmZpZzogQ29yZUNvbmZpZyxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWcpIHtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgcHJvZmlsZSBpcyBzdXBwb3NlZCB0byB1c2UgTlRMTVxuICAgICAqIEB0eXBlIHtob3N0OiBzdHJpbmc7IG50bG06IGJvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRoUHJvZmlsZSA9IHtcbiAgICAgIGhvc3Q6ICcnLFxuICAgICAgbnRsbTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHNldEF1dGhQcm9maWxlKHByb2ZpbGU/OiBBdXRoUHJvZmlsZSkge1xuICAgIGlmIChwcm9maWxlKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLnNldERlZmF1bHRIZWFkZXJzKCk7XG4gICAgICB0aGlzLmF1dGhQcm9maWxlID0gcHJvZmlsZTtcbiAgICAgIGlmICh0aGlzLmF1dGhQcm9maWxlLmF1dGgpIHtcbiAgICAgICAgLy8gdGhpcy5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmF1dGhQcm9maWxlLmF1dGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZSgnQXV0aG9yaXphdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaGVhZGVyLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBoZWFkZXJzIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IHRoaXMuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBoZWFkZXJzXG4gICAqIEByZXR1cm5zIFRoZSBgSHR0cEhlYWRlcnNgIHRoYXQgYXJlIGN1cnJlbnRseSBzZXQgdXBcbiAgICovXG4gIHB1YmxpYyBnZXRIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHB1YmxpYyBnZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogSHR0cE9wdGlvbnMge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgRE1TLVNlcnZpY2UgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQmFzZSBVUklcbiAgICovXG4gIHB1YmxpYyBnZXRTZXJ2aWNlQmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0V2l0aENvbnRleHQoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnc2VydmljZUJhc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYXNlIFVSSSBmb3IgdGhlIFNlYXJjaC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VhcmNoQmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0V2l0aENvbnRleHQoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnc2VhcmNoQmFzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgQ29udGV4dC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGV4dEJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9zdFdpdGhDb250ZXh0KCkgKyB0aGlzLmNvbmZpZy5nZXRVcmkoJ2NvbnRleHRCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBJbmJveC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0SW5ib3hCYXNlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEhvc3RXaXRoQ29udGV4dCgpICsgdGhpcy5jb25maWcuZ2V0VXJpKCdpbmJveEJhc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYXNlIFVSSSBmb3IgdGhlIEJQTS1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0QnBtQmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0V2l0aENvbnRleHQoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnYnBtQmFzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgQWdlbnQtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldEFnZW50QmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0V2l0aENvbnRleHQoKSArIHRoaXMuY29uZmlnLmdldFVyaSgnYWdlbnRCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBTdGF0dXMtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldFN0YXR1c0Jhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9zdFdpdGhDb250ZXh0KCkgKyB0aGlzLmNvbmZpZy5nZXRVcmkoJ3N0YXR1c0Jhc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZ2V0SWNvbkJhc2UoaWQ6IHN0cmluZyA9ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VydmljZUJhc2UoKSArICcvdWkvaWNvbi8nICsgaWQ7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGdldEhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFByb2ZpbGUuaG9zdCB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SG9zdFdpdGhDb250ZXh0KCkge1xuICAgIHJldHVybiAodGhpcy5hdXRoUHJvZmlsZS5ob3N0IHx8ICcnKSArIHRoaXMuY29uZmlnLmdldENvbnRleHRQYXRoKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhc2VXaXRoQ29udGV4dChiYXNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYmFzZT8uc3RhcnRzV2l0aCgnLycpID8gdGhpcy5jb25maWcuZ2V0Q29udGV4dFBhdGgoKSArIGJhc2UgOiBiYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBHRVQgbWV0aG9kXG4gICAqIEBwYXJhbSB1cmkgVGhlIFJFU1QgVVJJIHRvIGJlIHF1ZXJpZWRcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHJldHJpZXZlZCBmcm9tIHRoZSBnaXZlbiBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGdldCh1cmk6IHN0cmluZywgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoKHRoaXMuZ2V0QmFzZVdpdGhDb250ZXh0KGJhc2UpIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKSkgKyB1cmksIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgUFVUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBVVCBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHB1dCh1cmk6IHN0cmluZywgZGF0YT86IGFueSwgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoKHRoaXMuZ2V0QmFzZVdpdGhDb250ZXh0KGJhc2UpIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKSkgKyB1cmksIGRhdGEsIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZ2V0SnNvbih1cmk6IHN0cmluZywgYmFzZT86IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoKHRoaXMuZ2V0QmFzZVdpdGhDb250ZXh0KGJhc2UpIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKSkgKyB1cmksIHRoaXMuZ2V0SHR0cE9wdGlvbnMoe3Jlc3BvbnNlVHlwZTogJ2pzb24nfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBQT1NUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBPU1QgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwb3N0KHVyaTogc3RyaW5nLCBkYXRhPywgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYmFzZVVyaSA9IHRoaXMuZ2V0QmFzZVdpdGhDb250ZXh0KGJhc2UpIHx8IHRoaXMuZ2V0U2VydmljZUJhc2UoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke2Jhc2VVcml9JHt1cml9YCwgcGF5bG9hZCwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgbXVsdGlwYXJ0IGZvcm0gZGF0YSBQT1NUIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBSRVNUIFVSSVxuICAgKiBAcGFyYW0gZm9ybURhdGEgRm9ybURhdGEgdG8gYmUgJ3Bvc3RlZCdcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBQT1NUIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcG9zdE11bHRpUGFydCh1cmk6IHN0cmluZywgZm9ybURhdGE6IEZvcm1EYXRhLCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBiYXNlVXJpID0gdGhpcy5nZXRCYXNlV2l0aENvbnRleHQoYmFzZSkgfHwgdGhpcy5nZXRTZXJ2aWNlQmFzZSgpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcbiAgICBoZWFkZXJzLmRlbGV0ZSgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgcmVxT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe2hlYWRlcnM6IGhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30sIHJlcXVlc3RPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7YmFzZVVyaX0ke3VyaX1gLCBmb3JtRGF0YSwgcmVxT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlZCBIVFRQIERFTEVURSBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBiYXNlIFRoZSBCYXNlIFVSSSAoYmFja2VuZCBzZXJ2aWNlKSB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB0YXJnZXQgREVMRVRFIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZGVsKHVyaTogc3RyaW5nLCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSgodGhpcy5nZXRCYXNlV2l0aENvbnRleHQoYmFzZSkgfHwgdGhpcy5nZXRTZXJ2aWNlQmFzZSgpKSArIHVyaSwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogU29mdCB1cGRhdGUgZm9yIGxpc3RzIC0gZW5hYmxlcyBncmlkIHRvIGhhbmRsZSBhbGwgY2hhbmdlc1xuICAgKiB0byBhZGQgbmV3IC0gb25seSBpdGVtIHNob3VsZCBiZSBzcGVjaWZpZWRcbiAgICogdG8gcmVtb3ZlIC0gb25seSBpZCBzaG91bGQgYmUgc3BlY2lmaWVkXG4gICAqIHRvIHVwZGF0ZSAtIGJvdGggcGFyYW1zIHNob3VsZCBiZSBzcGVjaWZpZWRcbiAgICpcbiAgICogQHBhcmFtIGFueVtdIGxpc3QgT3JpZ2luYWwgbGlzdCBvZiBpdGVtc1xuICAgKiBAcGFyYW0gaWQ/OiBzdHJpbmc7IGl0ZW0/OiBhbnkgZGF0YVtdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKGxpc3Q6IGFueVtdLCBkYXRhOiB7aWQ/OiBzdHJpbmcsIGl0ZW0/OiBhbnl9W10pIHtcbiAgICBkYXRhLmZvckVhY2goKHtpZCwgaXRlbX0pID0+IHtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBjb25zdCBfaXRlbSA9IGxpc3QuZmluZChsID0+IGwuaWQgPT09IGlkKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfaXRlbSwgaXRlbSwgaXRlbSA/IHtfX3VwZGF0ZWQ6IHRydWV9IDoge19fcmVtb3ZlZDogdHJ1ZX0pO1xuICAgICAgfSBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgIGxpc3QudW5zaGlmdChPYmplY3QuYXNzaWduKGl0ZW0sIHtfX2FkZGVkOiB0cnVlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogQ2FjaGUgZm9yIHNtYWxsIHJlcXVlc3RzIGxpa2UgaWNvbnMgYW5kIGNvbmZpZ3NcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyB1cmlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZ2V0VmlhQ2FjaGUodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyh1cmkpKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHRoaXMuY2FjaGUuZ2V0KHVyaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWaWFUZW1wQ2FjaGUodXJpLCAoKSA9PiB0aGlzLmh0dHAuZ2V0KHVyaSwge3dpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlOiAndGV4dCd9KS5waXBlKFxuICAgICAgICB0YXAodGV4dCA9PiB0aGlzLmNhY2hlLnNldCh1cmksIHRleHQpKSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIFRlbXBvcmFyeSBDYWNoZSBmb3IgbXVsdGlwbGUgaWRlbnRpY2FsIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgaWRcbiAgICogQHBhcmFtIEZ1bmN0aW9uIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZ2V0VmlhVGVtcENhY2hlKGlkOiBzdHJpbmcsIHJlcXVlc3Q/OiBGdW5jdGlvbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMudGVtcC5oYXMoaWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wLmdldChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3AgPSAocmVxdWVzdCA/IHJlcXVlc3QoKSA6IHRoaXMuZ2V0KGlkKSkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy50ZW1wLmRlbGV0ZShpZCkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICAgIHRoaXMudGVtcC5zZXQoaWQsIHJlc3ApO1xuICAgICAgcmV0dXJuIHJlc3A7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIHRoZSBjb250ZW50IG9mIGRtcyBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gRG1zT2JqZWN0W10gZG1zT2JqZWN0cyBBcnJheSBvZiBkbXMgb2JqZWN0cyB0byBiZSBkb3dubG9hZGVkXG4gICAqIEBwYXJhbSBcIlBERlwiIHwgXCJUSUZGXCIgfCBcIlRFWFRcIiB8IFwiSlBFR1wiIHJlbmRpdGlvbiBUaGUgdHlwZSBvZiByZW5kaXRpb24gdG8gYmUgZG93bmxvYWRlZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIG9yaWdpbmFsIGNvbnRlbnQgd2lsbCBiZSBkb3dubG9hZGVkLlxuICAgKiBQb3NzaWJsZSByZW5kaXRpb25zIGFyZSBgUERGYCwgYFRJRkZgLCBgVEVYVGAsIGBKUEVHYC5cbiAgICovXG4gIHB1YmxpYyBkb3dubG9hZENvbnRlbnQoZG1zT2JqZWN0czogRG1zT2JqZWN0W10sIHJlbmRpdGlvbj86ICdQREYnIHwgJ1RJRkYnIHwgJ1RFWFQnIHwgJ0pQRUcnLCBmaWxlTmFtZVdpdGhWZXJzaW9uTnVtYmVyPzogYm9vbGVhbikge1xuXG4gICAgZG1zT2JqZWN0cy5mb3JFYWNoKGRtc09iamVjdCA9PiB7XG4gICAgICBpZiAoZG1zT2JqZWN0LmNvbnRlbnQpIHtcblxuICAgICAgICBsZXQgdXJpID0gYCR7dGhpcy5nZXRTZXJ2aWNlQmFzZSgpfS9kbXMvJHtkbXNPYmplY3QuY29udGVudC5pZH0vY29udGVudD90eXBlPSR7ZG1zT2JqZWN0LmNvbnRlbnQudHlwZX0mYXNkb3dubG9hZD10cnVlYDtcbiAgICAgICAgaWYgKHJlbmRpdGlvbikge1xuICAgICAgICAgIHVyaSArPSBgJnJlbmRpdGlvbj0ke3JlbmRpdGlvbn0mX2ludGVudD1ET1dOTE9BRF8ke3JlbmRpdGlvbn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVyaSArPSAnJl9pbnRlbnQ9RE9XTkxPQUQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkbXNPYmplY3QuY29udGVudC5pZCA9PT0gZG1zT2JqZWN0LmlkKSB7XG4gICAgICAgICAgdXJpICs9IGAmdmVyc2lvbj0ke2Rtc09iamVjdC52ZXJzaW9ufWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb3dubG9hZCh1cmksIGZpbGVOYW1lV2l0aFZlcnNpb25OdW1iZXIgPyBkbXNPYmplY3QudmVyc2lvbiA6IG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1RoZSBwcm92aWRlZCBkbXMgb2JqZWN0IGhhcyBubyBjb250ZW50JywgZG1zT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZCh1cmk6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikge1xuICAgIHRoaXMuaHR0cC5nZXQodXJpLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJywgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhcbiAgICAgICAgICByZXMuYm9keSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVOYW1lRnJvbUh0dHBSZXNwb25zZShyZXMsIHZlcnNpb24pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlczogSHR0cFJlc3BvbnNlPGFueT4sIHZlcnNpb246IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IHJlcy5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID0gY29udGVudERpc3Bvc2l0aW9uSGVhZGVyLm1hdGNoKCdmaWxlbmFtZVxcXFwqPVVURi04XFwnXFwnKC4qKScpXG4gICAgICB8fCBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIubWF0Y2goJ2ZpbGVuYW1lPVxcXCIoLiopXFxcIicpO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZSA9IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID8gZW5jb2RlZEZpbGVOYW1lTWF0Y2hSZXN1bHRbMV0gOiBudWxsO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZW5jb2RlZEZpbGVOYW1lID8gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRGaWxlTmFtZSkgOiAndW5rbm93bic7XG4gICAgY29uc3QgaW5kZXggPSAhfmZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgPyBmaWxlbmFtZS5sZW5ndGggOiBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgIHJldHVybiAhdmVyc2lvbiA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWUuc2xpY2UoMCwgaW5kZXgpfV92JHt2ZXJzaW9ufSR7ZmlsZW5hbWUuc2xpY2UoaW5kZXgpfWA7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHRoZSBIVFRQIEhlYWRlcnNcbiAgICpcbiAgICogQHJldHVybnMgSHR0cEhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLW9zLWluY2x1ZGUtbGlua3MnOiAnZmFsc2UnLFxuICAgICAgJ1gtb3MtaW5jbHVkZS1hY3Rpb25zJzogJ2ZhbHNlJyxcbiAgICAgICdYLW9zLXN5bmMtaW5kZXgnOiAndHJ1ZSdcbiAgICB9KTtcbiAgfVxufVxuIl19