ontimize-web-ngx 15.0.4 → 15.1.1

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 (89) hide show
  1. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +15 -13
  3. package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +3 -3
  4. package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +10 -1
  5. package/esm2020/lib/components/button/o-button.component.mjs +27 -11
  6. package/esm2020/lib/components/form/index.mjs +2 -1
  7. package/esm2020/lib/components/form/o-form-tokens.mjs +3 -0
  8. package/esm2020/lib/components/form/o-form.component.mjs +42 -15
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +7 -3
  10. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -1
  11. package/esm2020/lib/components/input/combo/o-combo.component.mjs +10 -3
  12. package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +5 -1
  13. package/esm2020/lib/components/input/radio/o-radio.component.mjs +7 -5
  14. package/esm2020/lib/components/list/o-list.component.mjs +8 -4
  15. package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +13 -4
  16. package/esm2020/lib/components/o-service-base-component.class.mjs +11 -5
  17. package/esm2020/lib/components/o-service-component.class.mjs +64 -1
  18. package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +2 -2
  19. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +2 -4
  20. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +8 -7
  21. package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +2 -4
  22. package/esm2020/lib/components/table/o-table.component.mjs +30 -13
  23. package/esm2020/lib/components/tree/o-tree.component.mjs +7 -3
  24. package/esm2020/lib/interfaces/app-menu.interface.mjs +1 -1
  25. package/esm2020/lib/interfaces/service-data-component.interface.mjs +1 -1
  26. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +1 -1
  27. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +17 -1
  28. package/esm2020/lib/services/app-menu.service.mjs +36 -2
  29. package/esm2020/lib/services/o-auth.service.mjs +7 -1
  30. package/esm2020/lib/services/permissions/permissions.service.mjs +40 -6
  31. package/esm2020/lib/types/form/index.mjs +2 -0
  32. package/esm2020/lib/types/form/o-form-global-config.type.mjs +2 -0
  33. package/esm2020/lib/types/index.mjs +3 -1
  34. package/esm2020/lib/types/o-component-permissions-by-route.type.mjs +2 -0
  35. package/esm2020/lib/types/o-form-permissions.type.mjs +1 -1
  36. package/esm2020/lib/types/o-global-config.type.mjs +3 -0
  37. package/esm2020/lib/types/o-grid-permissions.type.mjs +2 -0
  38. package/esm2020/lib/types/o-list-permissions.type.mjs +2 -0
  39. package/esm2020/lib/types/o-service-base-permissions.type.mjs +2 -0
  40. package/esm2020/lib/types/o-tree-permissions.type.mjs +2 -0
  41. package/esm2020/lib/types/table/o-table-global-config.type.mjs +1 -1
  42. package/esm2020/lib/types/table/o-table-permissions.type.mjs +1 -1
  43. package/esm2020/lib/util/codes.mjs +9 -1
  44. package/esm2020/lib/util/util.mjs +16 -1
  45. package/fesm2015/ontimize-web-ngx.mjs +1297 -1018
  46. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  47. package/fesm2020/ontimize-web-ngx.mjs +1296 -1018
  48. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  49. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +4 -4
  50. package/lib/components/bar-menu/o-bar-menu.component.d.ts +4 -0
  51. package/lib/components/button/o-button.component.d.ts +11 -2
  52. package/lib/components/form/index.d.ts +1 -0
  53. package/lib/components/form/o-form-tokens.d.ts +3 -0
  54. package/lib/components/form/o-form.component.d.ts +11 -4
  55. package/lib/components/grid/o-grid.component.d.ts +4 -0
  56. package/lib/components/input/combo/combo-search/o-combo-search.component.d.ts +1 -0
  57. package/lib/components/input/combo/o-combo.component.d.ts +2 -0
  58. package/lib/components/input/date-input/o-date-input.component.d.ts +1 -0
  59. package/lib/components/input/radio/o-radio.component.d.ts +2 -1
  60. package/lib/components/list/o-list.component.d.ts +4 -0
  61. package/lib/components/list/renderers/o-list-item-text-renderer.class.d.ts +4 -1
  62. package/lib/components/o-service-base-component.class.d.ts +2 -0
  63. package/lib/components/o-service-component.class.d.ts +11 -0
  64. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -1
  65. package/lib/components/table/o-table.component.d.ts +3 -3
  66. package/lib/components/tree/o-tree.component.d.ts +4 -0
  67. package/lib/interfaces/app-menu.interface.d.ts +1 -0
  68. package/lib/interfaces/service-data-component.interface.d.ts +1 -0
  69. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +1 -0
  70. package/lib/services/app-menu.service.d.ts +7 -1
  71. package/lib/services/o-auth.service.d.ts +1 -0
  72. package/lib/services/permissions/permissions.service.d.ts +14 -3
  73. package/lib/types/form/index.d.ts +1 -0
  74. package/lib/types/form/o-form-global-config.type.d.ts +3 -0
  75. package/lib/types/index.d.ts +2 -0
  76. package/lib/types/o-component-permissions-by-route.type.d.ts +5 -0
  77. package/lib/types/o-form-permissions.type.d.ts +2 -7
  78. package/lib/types/o-global-config.type.d.ts +5 -0
  79. package/lib/types/o-grid-permissions.type.d.ts +2 -0
  80. package/lib/types/o-list-permissions.type.d.ts +2 -0
  81. package/lib/types/o-service-base-permissions.type.d.ts +7 -0
  82. package/lib/types/o-tree-permissions.type.d.ts +2 -0
  83. package/lib/types/table/o-table-global-config.type.d.ts +5 -0
  84. package/lib/types/table/o-table-permissions.type.d.ts +2 -4
  85. package/lib/util/codes.d.ts +8 -1
  86. package/lib/util/util.d.ts +2 -0
  87. package/package.json +1 -1
  88. package/theme.scss +72 -71
  89. package/theming/ontimize-style.scss +1 -30
@@ -11,6 +11,7 @@ import { OFormLayoutManagerService } from '../../services/o-form-layout-manager.
11
11
  import { AbstractComponentStateService } from '../../services/state/o-component-state.service';
12
12
  import { OFormLayoutManagerComponentStateService } from '../../services/state/o-form-layout-manager-component-state.service';
13
13
  import { OTranslateService } from '../../services/translate/o-translate.service';
14
+ import { O_GLOBAL_CONFIG } from '../../types/o-global-config.type';
14
15
  import { Codes } from '../../util/codes';
15
16
  import { Util } from '../../util/util';
16
17
  import { OFormLayoutDialogComponent } from './dialog/o-form-layout-dialog.component';
@@ -146,6 +147,21 @@ export class OFormLayoutManagerComponent {
146
147
  this.updateStateStorage();
147
148
  }));
148
149
  }
150
+ this.getInjectionTokenConfig();
151
+ }
152
+ getInjectionTokenConfig() {
153
+ try {
154
+ const oGlobalConfig = this.injector.get(O_GLOBAL_CONFIG);
155
+ if (Util.isDefined(oGlobalConfig.storeState)) {
156
+ this.storeState = oGlobalConfig.storeState;
157
+ if (!this.storeState) {
158
+ this.subscription.unsubscribe();
159
+ }
160
+ }
161
+ ;
162
+ }
163
+ catch (error) {
164
+ }
149
165
  }
150
166
  get state() {
151
167
  return this.componentStateService.state;
@@ -523,4 +539,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
523
539
  type: HostListener,
524
540
  args: ['window:beforeunload', []]
525
541
  }] } });
526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUdSLFFBQVEsRUFDUixRQUFRLEVBRVIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBaUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUl6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztB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QUFHLFFBQVEsQ0FBQztBQUN2QixvQ0FBUSxHQUFHLEtBQUssQ0FBQztBQUNqQiwyQ0FBZSxHQUFHLFlBQVksQ0FBQzt5SEFSL0IsMkJBQTJCOzZHQUEzQiwyQkFBMkIsMCtCQVI5QjtRQUNULDZCQUE2QjtRQUM3QixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsdUNBQXVDLEVBQUU7UUFDekYsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFO0tBQzlFLDJOQ2hGSCx5aENBdUJjO0FEeUdaO0lBQUMscUJBQXFCLEVBQUU7OytEQUNVOzRGQTdDcEIsMkJBQTJCO2tCQWQxQyxTQUFTOytCQUNFLHVCQUF1QixVQUN6QixvQ0FBb0MsV0FDbkMscUNBQXFDLGFBR25DO3dCQUNULDZCQUE2Qjt3QkFDN0IsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHVDQUF1QyxFQUFFO3dCQUN6RixFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLDZCQUE2QixFQUFFO3FCQUM5RSxRQUNLO3dCQUNKLCtCQUErQixFQUFFLE1BQU07cUJBQ3hDOzswQkF3S0UsUUFBUTs7MEJBQUksUUFBUTs0Q0ExSGhCLFVBQVUsTUFvQlYsU0FBUztzQkFEZixTQUFTO3VCQUFDLFVBQVU7Z0JBSWQsVUFBVTtzQkFEaEIsU0FBUzt1QkFBQyxXQUFXO2dCQTJLZixtQkFBbUI7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9sb2NhbC1zdG9yYWdlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLW1vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1jb21wb25lbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZUNsYXNzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWZvcm0tbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zLCBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tbGF5b3V0LWRldGFpbC1jb21wb25lbnQtZGF0YS50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cvby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQgfSBmcm9tICcuL2d1YXJkcy9vLWZvcm0tbGF5b3V0LWNhbi1hY3RpdmF0ZS1jaGlsZC5ndWFyZCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIgPSBbXG4gICdvYXR0cjogYXR0cicsXG4gICdtb2RlJyxcbiAgJ3N0b3JlU3RhdGU6IHN0b3JlLXN0YXRlJyxcblxuICAvLyBDb21tb24gZm9yIGRpYWxvZyBhbmQgdGFiIG1vZGVcbiAgLy8gZGVwcmVjYXRlZCwgb25seSBtYW50YWluZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICd0aXRsZScsXG4gICdsYWJlbENvbHVtbnM6IGxhYmVsLWNvbHVtbnMnLFxuICAnc2VwYXJhdG9yJyxcblxuICAvLyBhdHRyIG9mIHRoZSBjaGlsZCBmb3JtIGZyb20gd2hpY2ggdGhlIGRhdGEgZm9yIGJ1aWxkaW5nIHRoZSB0YWIgdGl0bGUgd2lsbCBiZSBvYnRhaW5lZCAob25seSBpbiB0YWIgbW9kZSlcbiAgLy8gZGVwcmVjYXRlZCwgb25seSBtYW50YWluZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICd0aXRsZURhdGFPcmlnaW46IHRpdGxlLWRhdGEtb3JpZ2luJyxcblxuICAvLyBPbmx5IGRpYWxvZyBvcHRpb25zIGNvbmZpZ3VyYWJsZSBhcyBhbiBpbnB1dCBvZiB0aGUgby1mb3JtLWxheW91dC1tYW5hZ2VyICh1c2UgdGhlIG8tZm9ybS1sYXlvdXQtZGlhbG9nLW9wdGlvbnMgZGlyZWN0aXZlKVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ2RpYWxvZ1dpZHRoOiBkaWFsb2ctd2lkdGgnLFxuICAnZGlhbG9nTWluV2lkdGg6IGRpYWxvZy1taW4td2lkdGgnLFxuICAnZGlhbG9nTWF4V2lkdGg6IGRpYWxvZy1tYXgtd2lkdGgnLFxuICAnZGlhbG9nSGVpZ2h0OiBkaWFsb2ctaGVpZ2h0JyxcbiAgJ2RpYWxvZ01pbkhlaWdodDogZGlhbG9nLW1pbi1oZWlnaHQnLFxuICAnZGlhbG9nTWF4SGVpZ2h0IGRpYWxvZy1tYXgtaGVpZ2h0JyxcbiAgJ2RpYWxvZ0NsYXNzOiBkaWFsb2ctY2xhc3MnLFxuICAnZGlhbG9nVGl0bGVTZXBhcmF0b3I6IGRpYWxvZy10aXRsZS1zZXBhcmF0b3InXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fRk9STV9MQVlPVVRfTUFOQUdFUiA9IFtcbiAgJ29uTWFpblRhYlNlbGVjdGVkJyxcbiAgJ29uU2VsZWN0ZWRUYWJDaGFuZ2UnLFxuICAnb25DbG9zZVRhYidcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZm9ybS1sYXlvdXQtbWFuYWdlcicsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSLFxuICB0ZW1wbGF0ZVVybDogJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSwgdXNlRXhpc3Rpbmc6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9XG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybS1sYXlvdXQtbWFuYWdlcl0nOiAndHJ1ZSdcbiAgfVxufSkgZXhwb3J0IGNsYXNzIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IHtcblxuICAvLyBkZWNsYXJpbmcgdGhpcyBwcm9wZXJ0eSB0byBoYXZlIGFjY2VzIHRvIHN0YXRpYyBtZW1iZXJzIGluIHRoZSB0ZW1wbGF0ZVxuICBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQgPSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQ7XG5cblxuICBwdWJsaWMgc3RhdGljIERJQUxPR19NT0RFID0gJ2RpYWxvZyc7XG4gIHB1YmxpYyBzdGF0aWMgVEFCX01PREUgPSAndGFiJztcbiAgcHVibGljIHN0YXRpYyBTUExJVF9QQU5FX01PREUgPSAnc3BsaXQtcGFuZSc7XG5cbiAgcHVibGljIG9hdHRyOiBzdHJpbmc7XG4gIHB1YmxpYyBfbW9kZTogc3RyaW5nID0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFO1xuICBwdWJsaWMgc3RyZXRjaFRhYnMgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlTW9kZVZhbHVlcyA9IFtPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREUsIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERSwgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERV07XG4gICAgdGhpcy5fbW9kZSA9ICh2YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoYXZhaWxhYmxlTW9kZVZhbHVlcy5pbmRleE9mKHRoaXMuX21vZGUpID09PSAtMSkge1xuICAgICAgdGhpcy5fbW9kZSA9IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VwYXJhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAgKi9cbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzdG9yZVN0YXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCB1c2VyIHNob3VsZCB1c2UgdGhlIG9wdGlvbnMgaW5wdXRcbiAgKi9cbiAgcHVibGljIHRpdGxlRGF0YU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbmV4dCBpbnB1dHMgYXJlIGRlcHJlY2F0ZWQgYW5kIHVzZXIgc2hvdWxkIHVzZSB0aGUgT0Zvcm1MYXlvdXREaWFsb2dPcHRpb25zRGlyZWN0aXZlIGlucHV0c1xuICAgKi9cbiAgcHVibGljIGRpYWxvZ1dpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNaW5XaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWF4V2lkdGg6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0hlaWdodDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWluSGVpZ2h0OiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNYXhIZWlnaHQ6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0NsYXNzOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gJzonO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJylcbiAgcHVibGljIG9UYWJHcm91cDogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZTtcbiAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZCgnc3BsaXRQYW5lJylcbiAgcHVibGljIG9TcGxpdFBhbmU6IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGU7XG5cbiAgcHVibGljIG9uTWFpblRhYlNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25TZWxlY3RlZFRhYkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2xvc2VUYWI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIF9sYWJlbENvbHVtbnM6IHN0cmluZztcblxuICBnZXQgbGFiZWxDb2x1bW5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgbGFiZWxDb2x1bW5zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbENvbHVtbnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xhYmVsQ29sc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGdldCBsYWJlbENvbHNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sc0FycmF5O1xuICB9XG5cbiAgc2V0IGxhYmVsQ29sc0FycmF5KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2xhYmVsQ29sc0FycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX3RhYkdyb3VwT3B0aW9uczogYW55ID0ge307XG5cbiAgZ2V0IHRhYkdyb3VwT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl90YWJHcm91cE9wdGlvbnM7XG4gIH1cblxuICBhZGRUYWJHcm91cE9wdGlvbnModmFsdWU6IGFueSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fdGFiR3JvdXBPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdzdHJldGNoVGFicycpKSB7XG4gICAgICB0aGlzLnN0cmV0Y2hUYWJzID0gdmFsdWVbJ3N0cmV0Y2hUYWJzJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9kaWFsb2dPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgZGlhbG9nT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dPcHRpb25zO1xuICB9XG5cbiAgYWRkRGlhbG9nT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9kaWFsb2dPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdkaWFsb2dUaXRsZVNlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gdmFsdWVbJ2RpYWxvZ1RpdGxlU2VwYXJhdG9yJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zcGxpdFBhbmVPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgc3BsaXRQYW5lT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zcGxpdFBhbmVPcHRpb25zO1xuICB9XG5cbiAgYWRkU3BsaXRQYW5lT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9zcGxpdFBhbmVPcHRpb25zLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkaW5nR3VhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG4gIHB1YmxpYyBfbWFya0ZvclVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb25UcmlnZ2VyVXBkYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcm90ZWN0ZWQgY29tcG9uZW50U3RhdGVTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHBhcmVudEZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlXG4gICkge1xuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlPihBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSBhcyBUeXBlPE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZT4pO1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uub25Sb3V0ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnN0YXRlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQWN0aXZhdGVDaGlsZEd1YXJkKCk7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9hdHRyKSkge1xuICAgICAgdGhpcy5vYXR0ciA9ICh0aGlzLnRpdGxlIHx8ICcnKSArIHRoaXMubW9kZTtcbiAgICAgIGNvbnNvbGUud2Fybignby1mb3JtLWxheW91dC1tYW5hZ2VyIG11c3QgaGF2ZSBhbiB1bmlxdWUgYXR0cicpO1xuICAgIH1cbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UucmVnaXN0ZXJGb3JtTGF5b3V0TWFuYWdlcih0aGlzKTtcbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5pbml0aWFsaXplKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5lbFJlZikge1xuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5vRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLnJlbW92ZUZvcm1MYXlvdXRNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuZGVzdHJveUFjdGl2YXRlQ2hpbGRHdWFyZCgpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9hdHRyO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50XycgKyB0aGlzLm9hdHRyO1xuICB9XG5cbiAgcHVibGljIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMuYWN0Um91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShwYXJhbXNba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldERhdGFUb1N0b3JlKCkgOiB7fTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbXSlcbiAgcHVibGljIGJlZm9yZXVubG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbEZyb21VcmxQYXJhbXModXJsUGFyYW1zOiBvYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBsYWJlbCA9ICcnO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh1cmxQYXJhbXMpO1xuICAgIGtleXMuZm9yRWFjaCgocGFyYW0sIGkpID0+IHtcbiAgICAgIGxhYmVsICs9IHVybFBhcmFtc1twYXJhbV0gKyAoKGkgPCBrZXlzLmxlbmd0aCAtIDEpID8gdGhpcy5zZXBhcmF0b3IgOiAnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1EYXRhRnJvbUxhYmVsQ29sdW1ucyhkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goeCA9PiB7XG4gICAgICBpZiAodGhpcy5sYWJlbENvbHNBcnJheS5pbmRleE9mKHgpID4gLTEpIHtcbiAgICAgICAgZm9ybURhdGFbeF0gPSBkYXRhW3hdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBY3RpdmF0ZUNoaWxkR3VhcmQoKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVDb25maWcgPSB0aGlzLmdldFBhcmVudEFjdFJvdXRlUm91dGUoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocm91dGVDb25maWcpKSB7XG4gICAgICBjb25zdCBjYW5BY3RpdmF0ZUNoaWxkQXJyYXkgPSAocm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCB8fCBbXSk7XG4gICAgICBsZXQgcHJldmlvdXNseUFkZGVkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2FuQWN0aXZhdGVDaGlsZEFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkQ2hpbGQgPSB0aGlzLmluamVjdG9yLmdldChDYW5BY3RpdmF0ZUZvcm1MYXlvdXRDaGlsZEd1YXJkKTtcbiAgICAgICAgcHJldmlvdXNseUFkZGVkID0gKGNhbkFjdGl2YXRlQ2hpbGRBcnJheVtpXSA9PT0gZ3VhcmRDaGlsZC5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmIChwcmV2aW91c2x5QWRkZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFwcmV2aW91c2x5QWRkZWQpIHtcbiAgICAgICAgdGhpcy5hZGRpbmdHdWFyZCA9IHRydWU7XG4gICAgICAgIGNhbkFjdGl2YXRlQ2hpbGRBcnJheS5wdXNoKENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQpO1xuICAgICAgICByb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkID0gY2FuQWN0aXZhdGVDaGlsZEFycmF5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95QWN0aXZhdGVDaGlsZEd1YXJkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZGRpbmdHdWFyZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UuYWN0aXZlRm9ybUxheW91dE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgcm91dGVDb25maWcgPSB0aGlzLmdldFBhcmVudEFjdFJvdXRlUm91dGUoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocm91dGVDb25maWcpKSB7XG4gICAgICBmb3IgKGxldCBpID0gKHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQgfHwgW10pLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkQ2hpbGQgPSB0aGlzLmluamVjdG9yLmdldChDYW5BY3RpdmF0ZUZvcm1MYXlvdXRDaGlsZEd1YXJkKTtcbiAgICAgICAgaWYgKHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGRbaV0gPT09IGd1YXJkQ2hpbGQuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICByb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0RpYWxvZ01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFO1xuICB9XG5cbiAgcHVibGljIGlzVGFiTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuVEFCX01PREU7XG4gIH1cblxuICBwdWJsaWMgaXNTcGxpdFBhbmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5TUExJVF9QQU5FX01PREU7XG4gIH1cblxuICBwdWJsaWMgYWRkRGV0YWlsQ29tcG9uZW50KGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3RGV0YWlsQ29tcDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgPSB7XG4gICAgICBwYXJhbXM6IGNoaWxkUm91dGUucGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXM6IGNoaWxkUm91dGUucXVlcnlQYXJhbXMsXG4gICAgICB1cmxTZWdtZW50czogY2hpbGRSb3V0ZS51cmwsXG4gICAgICBjb21wb25lbnQ6IGNoaWxkUm91dGUucm91dGVDb25maWcuY29tcG9uZW50LFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBpZDogVXRpbC5yYW5kb21OdW1iZXIoKS50b1N0cmluZygpLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgaW5uZXJGb3Jtc0luZm86IHt9LFxuICAgICAgaW5zZXJ0aW9uTW9kZTogY2hpbGRSb3V0ZS5xdWVyeVBhcmFtc1tDb2Rlcy5JTlNFUlRJT05fTU9ERV0gPT09ICd0cnVlJ1xuICAgIH07XG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlKCkpIHtcbiAgICAgIHRoaXMub3BlbkZvcm1MYXlvdXREaWFsb2cobmV3RGV0YWlsQ29tcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgICBjb21wUmVmLm9wZW5EZXRhaWwobmV3RGV0YWlsQ29tcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlRGV0YWlsKG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi5jbG9zZURldGFpbChvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEZXRhaWxzKGRldGFpbHNEYXRhOiBhbnlbXSA9IFtdLCBvcHRpb25zPzogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzVGFiTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYkdyb3VwKSkge1xuICAgICAgdGhpcy5vVGFiR3JvdXAuY2xvc2VEZXRhaWxzKGRldGFpbHNEYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbkZvcm1MYXlvdXREaWFsb2coZGV0YWlsQ29tcDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpOiB2b2lkIHtcbiAgICBjb25zdCBjc3NjbGFzcyA9IFsnby1mb3JtLWxheW91dC1kaWFsb2ctb3ZlcmxheSddO1xuICAgIGlmICh0aGlzLmRpYWxvZ0NsYXNzKSB7XG4gICAgICBjc3NjbGFzcy5wdXNoKHRoaXMuZGlhbG9nQ2xhc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxvZ09wdGlvbnMgPSAodGhpcy5kaWFsb2dPcHRpb25zIHx8IHt9KTtcblxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBkYXRhOiBkZXRhaWxDb21wLFxuICAgICAgICBsYXlvdXRNYW5hZ2VyQ29tcG9uZW50OiB0aGlzLFxuICAgICAgICB0aXRsZTogKHRoaXMudGl0bGUgfHwgZGlhbG9nT3B0aW9ucy50aXRsZSksXG4gICAgICAgIGRpYWxvZ1RpdGxlU2VwYXJhdG9yOiB0aGlzLmRpYWxvZ1RpdGxlU2VwYXJhdG9yXG4gICAgICB9LFxuICAgICAgd2lkdGg6IGRpYWxvZ09wdGlvbnMud2lkdGggfHwgdGhpcy5kaWFsb2dXaWR0aCxcbiAgICAgIG1pbldpZHRoOiBkaWFsb2dPcHRpb25zLm1pbldpZHRoIHx8IHRoaXMuZGlhbG9nTWluV2lkdGgsXG4gICAgICBtYXhXaWR0aDogZGlhbG9nT3B0aW9ucy5tYXhXaWR0aCB8fCB0aGlzLmRpYWxvZ01heFdpZHRoLFxuICAgICAgaGVpZ2h0OiBkaWFsb2dPcHRpb25zLmhlaWdodCB8fCB0aGlzLmRpYWxvZ0hlaWdodCxcbiAgICAgIG1pbkhlaWdodDogZGlhbG9nT3B0aW9ucy5taW5IZWlnaHQgfHwgdGhpcy5kaWFsb2dNaW5IZWlnaHQsXG4gICAgICBtYXhIZWlnaHQ6IGRpYWxvZ09wdGlvbnMubWF4SGVpZ2h0IHx8IHRoaXMuZGlhbG9nTWF4SGVpZ2h0LFxuICAgICAgZGlzYWJsZUNsb3NlOiBkaWFsb2dPcHRpb25zLmRpc2FibGVDbG9zZSB8fCB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogZGlhbG9nT3B0aW9ucy5jbGFzcyB8fCBjc3NjbGFzc1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5kaWFsb2dPcHRpb25zKSB7XG4gICAgICBkaWFsb2dDb25maWcuY2xvc2VPbk5hdmlnYXRpb24gPSB0aGlzLmRpYWxvZ09wdGlvbnMuY2xvc2VPbk5hdmlnYXRpb247XG4gICAgICBkaWFsb2dDb25maWcuYmFja2Ryb3BDbGFzcyA9IHRoaXMuZGlhbG9nT3B0aW9ucy5iYWNrZHJvcENsYXNzO1xuICAgICAgZGlhbG9nQ29uZmlnLnBvc2l0aW9uID0gdGhpcy5kaWFsb2dPcHRpb25zLnBvc2l0aW9uO1xuICAgICAgZGlhbG9nQ29uZmlnLmRpc2FibGVDbG9zZSA9IHRoaXMuZGlhbG9nT3B0aW9ucy5kaXNhYmxlQ2xvc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1hcmtGb3JVcGRhdGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVJZk5lZWRlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWxvYWRNYWluQ29tcG9uZW50cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1DYWNoZURhdGEoKTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldEZvcm1DYWNoZURhdGEoKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RpZmllZFN0YXRlKGZvcm1BdHRyOiBzdHJpbmcsIG1vZGlmaWVkOiBib29sZWFuLCBjb25maXJtRXhpdDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgIGNvbXBSZWYuc2V0TW9kaWZpZWRTdGF0ZShmb3JtQXR0ciwgbW9kaWZpZWQsIGNvbmZpcm1FeGl0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWxGcm9tRGF0YShkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBsYWJlbCA9ICcnO1xuICAgIGNvbnN0IGlzRGF0YURlZmluZWQgPSBVdGlsLmlzRGVmaW5lZChkYXRhKTtcbiAgICBpZiAoaXNEYXRhRGVmaW5lZCAmJiBkYXRhLmhhc093blByb3BlcnR5KCduZXdfdGFiX3RpdGxlJykpIHtcbiAgICAgIGxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChkYXRhLm5ld190YWJfdGl0bGUpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhRGVmaW5lZCAmJiB0aGlzLmxhYmVsQ29sc0FycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheS5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICBpZiAoZGF0YVtjb2xdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYWJlbCArPSBkYXRhW2NvbF0gKyAoKGlkeCA8IHRoaXMubGFiZWxDb2xzQXJyYXkubGVuZ3RoIC0gMSkgPyB0aGlzLnNlcGFyYXRvciA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVOYXZpZ2F0aW9uKGRhdGE6IGFueSwga2V5c1ZhbHVlczogYW55LCBpbnNlcnRpb25Nb2RlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi51cGRhdGVOYXZpZ2F0aW9uKGRhdGEsIGtleXNWYWx1ZXMsIGluc2VydGlvbk1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBY3RpdmVEYXRhKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgIGNvbXBSZWYudXBkYXRlQWN0aXZlRGF0YShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldFJvdXRlT2ZBY3RpdmVJdGVtKCkgOiBbXTtcbiAgfVxuXG4gIHB1YmxpYyBpc01haW5Db21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUoKSkge1xuICAgICAgcmV0dXJuICFjb21wLm9Gb3JtTGF5b3V0RGlhbG9nO1xuICAgIH1cbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpICYmIGNvbXBSZWYuaXNNYWluQ29tcG9uZW50KGNvbXApO1xuICB9XG5cbiAgcHVibGljIGdldFJvdXRlRm9yQ29tcG9uZW50KGNvbXA6IElMYXlvdXRNYW5hZ2VyQ29tcG9uZW50KTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLnBhcmVudEZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBwYXJlbnRSb3V0ZSA9IHRoaXMucGFyZW50Rm9ybUxheW91dE1hbmFnZXIuZ2V0Um91dGVGb3JDb21wb25lbnQoY29tcCk7XG4gICAgICBpZiAocGFyZW50Um91dGUgJiYgcGFyZW50Um91dGUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5wYXJlbnRSb3V0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5pc01haW5Db21wb25lbnQoY29tcCkpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVJvdXRlID0gdGhpcy5nZXRSb3V0ZU9mQWN0aXZlSXRlbSgpO1xuICAgICAgaWYgKGFjdGl2ZVJvdXRlICYmIGFjdGl2ZVJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uYWN0aXZlUm91dGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldEFzQWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTogdm9pZCB7XG4gICAgdGhpcy5vRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmFjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRNYWluQ29tcG9uZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZS5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dUb1VwZGF0ZU5hdmlnYXRpb24oZm9ybUF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5pc1RhYk1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJHcm91cCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy50aXRsZURhdGFPcmlnaW4pKSA/XG4gICAgICB0aGlzLnRpdGxlRGF0YU9yaWdpbiA9PT0gZm9ybUF0dHIgOlxuICAgICAgdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTdGF0ZVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UgfHwgIXRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc1RhYk1vZGUgPSB0aGlzLmlzVGFiTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYkdyb3VwKTtcbiAgICBjb25zdCBpc1NwbGl0UGFuZU1vZGUgPSB0aGlzLmlzU3BsaXRQYW5lTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1NwbGl0UGFuZSk7XG4gICAgaWYgKGlzVGFiTW9kZSB8fCBpc1NwbGl0UGFuZU1vZGUpIHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS51cGRhdGVDb21wb25lbnRTdG9yYWdlKHRoaXMsIHRoaXMuZ2V0Um91dGVLZXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJlbnRBY3RSb3V0ZVJvdXRlKCk6IFJvdXRlIHtcbiAgICBsZXQgYWN0Um91dGUgPSB0aGlzLmFjdFJvdXRlO1xuICAgIHdoaWxlIChhY3RSb3V0ZS5wYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBhY3RSb3V0ZS5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChhY3RSb3V0ZS5yb3V0ZUNvbmZpZy5jaGlsZHJlbiB8fCBhY3RSb3V0ZS5yb3V0ZUNvbmZpZy5sb2FkQ2hpbGRyZW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBhY3RSb3V0ZSA9IGFjdFJvdXRlLnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGFjdFJvdXRlLnJvdXRlQ29uZmlnO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUlmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLm1hcmtGb3JVcGRhdGUpIHtcbiAgICAgIHRoaXMubWFya0ZvclVwZGF0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5vblRyaWdnZXJVcGRhdGUuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbXMoKTogYW55IHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpID8gY29tcFJlZi5nZXRQYXJhbXMoKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHNldCBtYXJrRm9yVXBkYXRlKGFyZzogYm9vbGVhbikge1xuICAgIHRoaXMuX21hcmtGb3JVcGRhdGUgPSBhcmc7XG4gICAgaWYgKHRoaXMuaXNTcGxpdFBhbmVNb2RlKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlSWZOZWVkZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWFya0ZvclVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya0ZvclVwZGF0ZTtcbiAgfVxuXG4gIGdldCBpZ25vcmVDYW5EZWFjdGl2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1NwbGl0UGFuZU1vZGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk6IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUge1xuICAgIGxldCBjb21wUmVmO1xuICAgIGlmICh0aGlzLmlzVGFiTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYkdyb3VwKSkge1xuICAgICAgY29tcFJlZiA9IHRoaXMub1RhYkdyb3VwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RpYWxvZ01vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmRpYWxvZ1JlZikpIHtcbiAgICAgIGNvbXBSZWYgPSB0aGlzLmRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTcGxpdFBhbmVNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vU3BsaXRQYW5lKSkge1xuICAgICAgY29tcFJlZiA9IHRoaXMub1NwbGl0UGFuZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBSZWY7XG4gIH1cblxuICBhbGxvd05hdmlnYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzVGFiTW9kZSgpO1xuICB9XG5cbiAgcHVibGljIGNhbkFkZERldGFpbENvbXBvbmVudCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIFV0aWwud3JhcEludG9PYnNlcnZhYmxlKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpID8gY29tcFJlZi5jYW5BZGREZXRhaWxDb21wb25lbnQoKSA6IHRydWUpO1xuICB9XG5cbiAgcHVibGljIGhhc1RvQ29uZmlybUV4aXQoZGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEsIG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9wdGlvbnMpICYmIG9wdGlvbnMuZXhpdFdpdGhvdXRDb25maXJtYXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZm9ybXNBdHRyID0gT2JqZWN0LmtleXMoZGF0YS5pbm5lckZvcm1zSW5mbyk7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChmb3Jtc0F0dHIubGVuZ3RoID4gMCkge1xuICAgICAgZm9ybXNBdHRyLmZvckVhY2goZm9ybUF0dHIgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gZGF0YS5pbm5lckZvcm1zSW5mb1tmb3JtQXR0cl07XG4gICAgICAgICAgcmVzdWx0ID0gZm9ybURhdGEuY29uZmlybU9uRXhpdCAmJiBmb3JtRGF0YS5tb2RpZmllZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRPZkFjdGl2ZUl0ZW0oKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpID8gYCR7dGhpcy5vYXR0cn0tJHtjb21wUmVmLmdldElkT2ZBY3RpdmVJdGVtKCl9LWAgOiAnJztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuVEFCX01PREVcIj5cbiAgICA8by1mb3JtLWxheW91dC10YWJncm91cCAjdGFiR3JvdXAgW3RpdGxlXT1cInRpdGxlXCIgKG9uTWFpblRhYlNlbGVjdGVkKT1cIm9uTWFpblRhYlNlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAob25TZWxlY3RlZFRhYkNoYW5nZSk9XCJvblNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQoJGV2ZW50KVwiIChvbkNsb3NlVGFiKT1cIm9uQ2xvc2VUYWIuZW1pdCgkZXZlbnQpXCJcbiAgICAgIFtvcHRpb25zXT1cInRhYkdyb3VwT3B0aW9uc1wiIFtzdHJldGNoLXRhYnNdPVwic3RyZXRjaFRhYnNcIj5cbiAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudEJsb2NrXCI+PC9uZy1jb250ZW50PlxuICAgIDwvby1mb3JtLWxheW91dC10YWJncm91cD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERVwiPlxuICAgIDxvLWZvcm0tbGF5b3V0LXNwbGl0LXBhbmUgI3NwbGl0UGFuZSBbb3B0aW9uc109XCJzcGxpdFBhbmVPcHRpb25zXCI+XG4gICAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRCbG9ja1wiPjwvbmctY29udGVudD5cbiAgICA8L28tZm9ybS1sYXlvdXQtc3BsaXQtcGFuZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFXCI+XG4gICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50QmxvY2tcIj48L25nLWNvbnRlbnQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50QmxvY2s+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+Il19
542
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUdSLFFBQVEsRUFDUixRQUFRLEVBRVIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBaUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUl6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztB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QixFQUFFLE1BQU07cUJBQ3hDOzswQkF3S0UsUUFBUTs7MEJBQUksUUFBUTs0Q0ExSGhCLFVBQVUsTUFvQlYsU0FBUztzQkFEZixTQUFTO3VCQUFDLFVBQVU7Z0JBSWQsVUFBVTtzQkFEaEIsU0FBUzt1QkFBQyxXQUFXO2dCQTRMZixtQkFBbUI7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9sb2NhbC1zdG9yYWdlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLW1vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1jb21wb25lbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZUNsYXNzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWZvcm0tbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zLCBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tbGF5b3V0LWRldGFpbC1jb21wb25lbnQtZGF0YS50eXBlJztcbmltcG9ydCB7IE9fR0xPQkFMX0NPTkZJRyB9IGZyb20gJy4uLy4uL3R5cGVzL28tZ2xvYmFsLWNvbmZpZy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cvby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQgfSBmcm9tICcuL2d1YXJkcy9vLWZvcm0tbGF5b3V0LWNhbi1hY3RpdmF0ZS1jaGlsZC5ndWFyZCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIgPSBbXG4gICdvYXR0cjogYXR0cicsXG4gICdtb2RlJyxcbiAgJ3N0b3JlU3RhdGU6IHN0b3JlLXN0YXRlJyxcblxuICAvLyBDb21tb24gZm9yIGRpYWxvZyBhbmQgdGFiIG1vZGVcbiAgLy8gZGVwcmVjYXRlZCwgb25seSBtYW50YWluZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICd0aXRsZScsXG4gICdsYWJlbENvbHVtbnM6IGxhYmVsLWNvbHVtbnMnLFxuICAnc2VwYXJhdG9yJyxcblxuICAvLyBhdHRyIG9mIHRoZSBjaGlsZCBmb3JtIGZyb20gd2hpY2ggdGhlIGRhdGEgZm9yIGJ1aWxkaW5nIHRoZSB0YWIgdGl0bGUgd2lsbCBiZSBvYnRhaW5lZCAob25seSBpbiB0YWIgbW9kZSlcbiAgLy8gZGVwcmVjYXRlZCwgb25seSBtYW50YWluZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICd0aXRsZURhdGFPcmlnaW46IHRpdGxlLWRhdGEtb3JpZ2luJyxcblxuICAvLyBPbmx5IGRpYWxvZyBvcHRpb25zIGNvbmZpZ3VyYWJsZSBhcyBhbiBpbnB1dCBvZiB0aGUgby1mb3JtLWxheW91dC1tYW5hZ2VyICh1c2UgdGhlIG8tZm9ybS1sYXlvdXQtZGlhbG9nLW9wdGlvbnMgZGlyZWN0aXZlKVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ2RpYWxvZ1dpZHRoOiBkaWFsb2ctd2lkdGgnLFxuICAnZGlhbG9nTWluV2lkdGg6IGRpYWxvZy1taW4td2lkdGgnLFxuICAnZGlhbG9nTWF4V2lkdGg6IGRpYWxvZy1tYXgtd2lkdGgnLFxuICAnZGlhbG9nSGVpZ2h0OiBkaWFsb2ctaGVpZ2h0JyxcbiAgJ2RpYWxvZ01pbkhlaWdodDogZGlhbG9nLW1pbi1oZWlnaHQnLFxuICAnZGlhbG9nTWF4SGVpZ2h0IGRpYWxvZy1tYXgtaGVpZ2h0JyxcbiAgJ2RpYWxvZ0NsYXNzOiBkaWFsb2ctY2xhc3MnLFxuICAnZGlhbG9nVGl0bGVTZXBhcmF0b3I6IGRpYWxvZy10aXRsZS1zZXBhcmF0b3InXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fRk9STV9MQVlPVVRfTUFOQUdFUiA9IFtcbiAgJ29uTWFpblRhYlNlbGVjdGVkJyxcbiAgJ29uU2VsZWN0ZWRUYWJDaGFuZ2UnLFxuICAnb25DbG9zZVRhYidcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZm9ybS1sYXlvdXQtbWFuYWdlcicsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSLFxuICB0ZW1wbGF0ZVVybDogJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSwgdXNlRXhpc3Rpbmc6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9XG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybS1sYXlvdXQtbWFuYWdlcl0nOiAndHJ1ZSdcbiAgfVxufSkgZXhwb3J0IGNsYXNzIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IHtcblxuICAvLyBkZWNsYXJpbmcgdGhpcyBwcm9wZXJ0eSB0byBoYXZlIGFjY2VzIHRvIHN0YXRpYyBtZW1iZXJzIGluIHRoZSB0ZW1wbGF0ZVxuICBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQgPSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQ7XG5cblxuICBwdWJsaWMgc3RhdGljIERJQUxPR19NT0RFID0gJ2RpYWxvZyc7XG4gIHB1YmxpYyBzdGF0aWMgVEFCX01PREUgPSAndGFiJztcbiAgcHVibGljIHN0YXRpYyBTUExJVF9QQU5FX01PREUgPSAnc3BsaXQtcGFuZSc7XG5cbiAgcHVibGljIG9hdHRyOiBzdHJpbmc7XG4gIHB1YmxpYyBfbW9kZTogc3RyaW5nID0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFO1xuICBwdWJsaWMgc3RyZXRjaFRhYnMgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlTW9kZVZhbHVlcyA9IFtPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREUsIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERSwgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERV07XG4gICAgdGhpcy5fbW9kZSA9ICh2YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoYXZhaWxhYmxlTW9kZVZhbHVlcy5pbmRleE9mKHRoaXMuX21vZGUpID09PSAtMSkge1xuICAgICAgdGhpcy5fbW9kZSA9IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VwYXJhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAgKi9cbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzdG9yZVN0YXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCB1c2VyIHNob3VsZCB1c2UgdGhlIG9wdGlvbnMgaW5wdXRcbiAgKi9cbiAgcHVibGljIHRpdGxlRGF0YU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbmV4dCBpbnB1dHMgYXJlIGRlcHJlY2F0ZWQgYW5kIHVzZXIgc2hvdWxkIHVzZSB0aGUgT0Zvcm1MYXlvdXREaWFsb2dPcHRpb25zRGlyZWN0aXZlIGlucHV0c1xuICAgKi9cbiAgcHVibGljIGRpYWxvZ1dpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNaW5XaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWF4V2lkdGg6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0hlaWdodDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWluSGVpZ2h0OiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNYXhIZWlnaHQ6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0NsYXNzOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gJzonO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJylcbiAgcHVibGljIG9UYWJHcm91cDogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZTtcbiAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZCgnc3BsaXRQYW5lJylcbiAgcHVibGljIG9TcGxpdFBhbmU6IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGU7XG5cbiAgcHVibGljIG9uTWFpblRhYlNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25TZWxlY3RlZFRhYkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2xvc2VUYWI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIF9sYWJlbENvbHVtbnM6IHN0cmluZztcblxuICBnZXQgbGFiZWxDb2x1bW5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgbGFiZWxDb2x1bW5zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbENvbHVtbnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xhYmVsQ29sc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGdldCBsYWJlbENvbHNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sc0FycmF5O1xuICB9XG5cbiAgc2V0IGxhYmVsQ29sc0FycmF5KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2xhYmVsQ29sc0FycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX3RhYkdyb3VwT3B0aW9uczogYW55ID0ge307XG5cbiAgZ2V0IHRhYkdyb3VwT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl90YWJHcm91cE9wdGlvbnM7XG4gIH1cblxuICBhZGRUYWJHcm91cE9wdGlvbnModmFsdWU6IGFueSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fdGFiR3JvdXBPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdzdHJldGNoVGFicycpKSB7XG4gICAgICB0aGlzLnN0cmV0Y2hUYWJzID0gdmFsdWVbJ3N0cmV0Y2hUYWJzJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9kaWFsb2dPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgZGlhbG9nT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dPcHRpb25zO1xuICB9XG5cbiAgYWRkRGlhbG9nT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9kaWFsb2dPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdkaWFsb2dUaXRsZVNlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gdmFsdWVbJ2RpYWxvZ1RpdGxlU2VwYXJhdG9yJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zcGxpdFBhbmVPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgc3BsaXRQYW5lT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zcGxpdFBhbmVPcHRpb25zO1xuICB9XG5cbiAgYWRkU3BsaXRQYW5lT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9zcGxpdFBhbmVPcHRpb25zLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkaW5nR3VhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG4gIHB1YmxpYyBfbWFya0ZvclVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb25UcmlnZ2VyVXBkYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcm90ZWN0ZWQgY29tcG9uZW50U3RhdGVTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHBhcmVudEZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlXG4gICkge1xuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlPihBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSBhcyBUeXBlPE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZT4pO1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uub25Sb3V0ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdGhpcy5nZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpO1xuXG4gIH1cblxuICBwcml2YXRlIGdldEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvR2xvYmFsQ29uZmlnLnN0b3JlU3RhdGUpKSB7XG4gICAgICAgIHRoaXMuc3RvcmVTdGF0ZSA9IG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRBY3RpdmF0ZUNoaWxkR3VhcmQoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMub2F0dHIpKSB7XG4gICAgICB0aGlzLm9hdHRyID0gKHRoaXMudGl0bGUgfHwgJycpICsgdGhpcy5tb2RlO1xuICAgICAgY29uc29sZS53YXJuKCdvLWZvcm0tbGF5b3V0LW1hbmFnZXIgbXVzdCBoYXZlIGFuIHVuaXF1ZSBhdHRyJyk7XG4gICAgfVxuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5yZWdpc3RlckZvcm1MYXlvdXRNYW5hZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLmluaXRpYWxpemUodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmVsUmVmKSB7XG4gICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UucmVtb3ZlRm9ybUxheW91dE1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5kZXN0cm95QWN0aXZhdGVDaGlsZEd1YXJkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub2F0dHI7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcG9uZW50S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRfJyArIHRoaXMub2F0dHI7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVLZXkoKTogc3RyaW5nIHtcbiAgICBsZXQgcm91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgdGhpcy5hY3RSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgcm91dGUgPSByb3V0ZS5yZXBsYWNlKHBhcmFtc1trZXldLCBrZXkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFUb1N0b3JlKCk6IGFueSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0RGF0YVRvU3RvcmUoKSA6IHt9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBwdWJsaWMgYmVmb3JldW5sb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICB9XG5cbiAgcHVibGljIGdldExhYmVsRnJvbVVybFBhcmFtcyh1cmxQYXJhbXM6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gJyc7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHVybFBhcmFtcyk7XG4gICAga2V5cy5mb3JFYWNoKChwYXJhbSwgaSkgPT4ge1xuICAgICAgbGFiZWwgKz0gdXJsUGFyYW1zW3BhcmFtXSArICgoaSA8IGtleXMubGVuZ3RoIC0gMSkgPyB0aGlzLnNlcGFyYXRvciA6ICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybURhdGFGcm9tTGFiZWxDb2x1bW5zKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0ge307XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmICh0aGlzLmxhYmVsQ29sc0FycmF5LmluZGV4T2YoeCkgPiAtMSkge1xuICAgICAgICBmb3JtRGF0YVt4XSA9IGRhdGFbeF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHVibGljIGFkZEFjdGl2YXRlQ2hpbGRHdWFyZCgpOiB2b2lkIHtcbiAgICBjb25zdCByb3V0ZUNvbmZpZyA9IHRoaXMuZ2V0UGFyZW50QWN0Um91dGVSb3V0ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZUNvbmZpZykpIHtcbiAgICAgIGNvbnN0IGNhbkFjdGl2YXRlQ2hpbGRBcnJheSA9IChyb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkIHx8IFtdKTtcbiAgICAgIGxldCBwcmV2aW91c2x5QWRkZWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYW5BY3RpdmF0ZUNoaWxkQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ3VhcmRDaGlsZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQpO1xuICAgICAgICBwcmV2aW91c2x5QWRkZWQgPSAoY2FuQWN0aXZhdGVDaGlsZEFycmF5W2ldID09PSBndWFyZENoaWxkLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgaWYgKHByZXZpb3VzbHlBZGRlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXByZXZpb3VzbHlBZGRlZCkge1xuICAgICAgICB0aGlzLmFkZGluZ0d1YXJkID0gdHJ1ZTtcbiAgICAgICAgY2FuQWN0aXZhdGVDaGlsZEFycmF5LnB1c2goQ2FuQWN0aXZhdGVGb3JtTGF5b3V0Q2hpbGRHdWFyZCk7XG4gICAgICAgIHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQgPSBjYW5BY3RpdmF0ZUNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lBY3RpdmF0ZUNoaWxkR3VhcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFkZGluZ0d1YXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5hY3RpdmVGb3JtTGF5b3V0TWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCByb3V0ZUNvbmZpZyA9IHRoaXMuZ2V0UGFyZW50QWN0Um91dGVSb3V0ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZUNvbmZpZykpIHtcbiAgICAgIGZvciAobGV0IGkgPSAocm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCB8fCBbXSkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZ3VhcmRDaGlsZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQpO1xuICAgICAgICBpZiAocm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZFtpXSA9PT0gZ3VhcmRDaGlsZC5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRGlhbG9nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREU7XG4gIH1cblxuICBwdWJsaWMgaXNUYWJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NwbGl0UGFuZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXRhaWxDb21wb25lbnQoY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdEZXRhaWxDb21wOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSA9IHtcbiAgICAgIHBhcmFtczogY2hpbGRSb3V0ZS5wYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogY2hpbGRSb3V0ZS5xdWVyeVBhcmFtcyxcbiAgICAgIHVybFNlZ21lbnRzOiBjaGlsZFJvdXRlLnVybCxcbiAgICAgIGNvbXBvbmVudDogY2hpbGRSb3V0ZS5yb3V0ZUNvbmZpZy5jb21wb25lbnQsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGlkOiBVdGlsLnJhbmRvbU51bWJlcigpLnRvU3RyaW5nKCksXG4gICAgICBsYWJlbDogJycsXG4gICAgICBpbm5lckZvcm1zSW5mbzoge30sXG4gICAgICBpbnNlcnRpb25Nb2RlOiBjaGlsZFJvdXRlLnF1ZXJ5UGFyYW1zW0NvZGVzLklOU0VSVElPTl9NT0RFXSA9PT0gJ3RydWUnXG4gICAgfTtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUoKSkge1xuICAgICAgdGhpcy5vcGVuRm9ybUxheW91dERpYWxvZyhuZXdEZXRhaWxDb21wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICAgIGNvbXBSZWYub3BlbkRldGFpbChuZXdEZXRhaWxDb21wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEZXRhaWwob3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICBjb21wUmVmLmNsb3NlRGV0YWlsKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZURldGFpbHMoZGV0YWlsc0RhdGE6IGFueVtdID0gW10sIG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApKSB7XG4gICAgICB0aGlzLm9UYWJHcm91cC5jbG9zZURldGFpbHMoZGV0YWlsc0RhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRm9ybUxheW91dERpYWxvZyhkZXRhaWxDb21wOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGNzc2NsYXNzID0gWydvLWZvcm0tbGF5b3V0LWRpYWxvZy1vdmVybGF5J107XG4gICAgaWYgKHRoaXMuZGlhbG9nQ2xhc3MpIHtcbiAgICAgIGNzc2NsYXNzLnB1c2godGhpcy5kaWFsb2dDbGFzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nT3B0aW9ucyA9ICh0aGlzLmRpYWxvZ09wdGlvbnMgfHwge30pO1xuXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGE6IGRldGFpbENvbXAsXG4gICAgICAgIGxheW91dE1hbmFnZXJDb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHRpdGxlOiAodGhpcy50aXRsZSB8fCBkaWFsb2dPcHRpb25zLnRpdGxlKSxcbiAgICAgICAgZGlhbG9nVGl0bGVTZXBhcmF0b3I6IHRoaXMuZGlhbG9nVGl0bGVTZXBhcmF0b3JcbiAgICAgIH0sXG4gICAgICB3aWR0aDogZGlhbG9nT3B0aW9ucy53aWR0aCB8fCB0aGlzLmRpYWxvZ1dpZHRoLFxuICAgICAgbWluV2lkdGg6IGRpYWxvZ09wdGlvbnMubWluV2lkdGggfHwgdGhpcy5kaWFsb2dNaW5XaWR0aCxcbiAgICAgIG1heFdpZHRoOiBkaWFsb2dPcHRpb25zLm1heFdpZHRoIHx8IHRoaXMuZGlhbG9nTWF4V2lkdGgsXG4gICAgICBoZWlnaHQ6IGRpYWxvZ09wdGlvbnMuaGVpZ2h0IHx8IHRoaXMuZGlhbG9nSGVpZ2h0LFxuICAgICAgbWluSGVpZ2h0OiBkaWFsb2dPcHRpb25zLm1pbkhlaWdodCB8fCB0aGlzLmRpYWxvZ01pbkhlaWdodCxcbiAgICAgIG1heEhlaWdodDogZGlhbG9nT3B0aW9ucy5tYXhIZWlnaHQgfHwgdGhpcy5kaWFsb2dNYXhIZWlnaHQsXG4gICAgICBkaXNhYmxlQ2xvc2U6IGRpYWxvZ09wdGlvbnMuZGlzYWJsZUNsb3NlIHx8IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBkaWFsb2dPcHRpb25zLmNsYXNzIHx8IGNzc2NsYXNzXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRpYWxvZ09wdGlvbnMpIHtcbiAgICAgIGRpYWxvZ0NvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IHRoaXMuZGlhbG9nT3B0aW9ucy5jbG9zZU9uTmF2aWdhdGlvbjtcbiAgICAgIGRpYWxvZ0NvbmZpZy5iYWNrZHJvcENsYXNzID0gdGhpcy5kaWFsb2dPcHRpb25zLmJhY2tkcm9wQ2xhc3M7XG4gICAgICBkaWFsb2dDb25maWcucG9zaXRpb24gPSB0aGlzLmRpYWxvZ09wdGlvbnMucG9zaXRpb247XG4gICAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdGhpcy5kaWFsb2dPcHRpb25zLmRpc2FibGVDbG9zZTtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubWFya0ZvclVwZGF0ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlmTmVlZGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbG9hZE1haW5Db21wb25lbnRzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybUNhY2hlRGF0YSgpOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0Rm9ybUNhY2hlRGF0YSgpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGlmaWVkU3RhdGUoZm9ybUF0dHI6IHN0cmluZywgbW9kaWZpZWQ6IGJvb2xlYW4sIGNvbmZpcm1FeGl0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi5zZXRNb2RpZmllZFN0YXRlKGZvcm1BdHRyLCBtb2RpZmllZCwgY29uZmlybUV4aXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbEZyb21EYXRhKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gJyc7XG4gICAgY29uc3QgaXNEYXRhRGVmaW5lZCA9IFV0aWwuaXNEZWZpbmVkKGRhdGEpO1xuICAgIGlmIChpc0RhdGFEZWZpbmVkICYmIGRhdGEuaGFzT3duUHJvcGVydHkoJ25ld190YWJfdGl0bGUnKSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGRhdGEubmV3X3RhYl90aXRsZSk7XG4gICAgfSBlbHNlIGlmIChpc0RhdGFEZWZpbmVkICYmIHRoaXMubGFiZWxDb2xzQXJyYXkubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmxhYmVsQ29sc0FycmF5LmZvckVhY2goKGNvbCwgaWR4KSA9PiB7XG4gICAgICAgIGlmIChkYXRhW2NvbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxhYmVsICs9IGRhdGFbY29sXSArICgoaWR4IDwgdGhpcy5sYWJlbENvbHNBcnJheS5sZW5ndGggLSAxKSA/IHRoaXMuc2VwYXJhdG9yIDogJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZU5hdmlnYXRpb24oZGF0YTogYW55LCBrZXlzVmFsdWVzOiBhbnksIGluc2VydGlvbk1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICBjb21wUmVmLnVwZGF0ZU5hdmlnYXRpb24oZGF0YSwga2V5c1ZhbHVlcywgaW5zZXJ0aW9uTW9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUFjdGl2ZURhdGEoZGF0YTogYW55KSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi51cGRhdGVBY3RpdmVEYXRhKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3V0ZU9mQWN0aXZlSXRlbSgpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKSA6IFtdO1xuICB9XG5cbiAgcHVibGljIGlzTWFpbkNvbXBvbmVudChjb21wOiBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGlhbG9nTW9kZSgpKSB7XG4gICAgICByZXR1cm4gIWNvbXAub0Zvcm1MYXlvdXREaWFsb2c7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgJiYgY29tcFJlZi5pc01haW5Db21wb25lbnQoY29tcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVGb3JDb21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgIGNvbnN0IHBhcmVudFJvdXRlID0gdGhpcy5wYXJlbnRGb3JtTGF5b3V0TWFuYWdlci5nZXRSb3V0ZUZvckNvbXBvbmVudChjb21wKTtcbiAgICAgIGlmIChwYXJlbnRSb3V0ZSAmJiBwYXJlbnRSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnBhcmVudFJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzTWFpbkNvbXBvbmVudChjb21wKSkge1xuICAgICAgY29uc3QgYWN0aXZlUm91dGUgPSB0aGlzLmdldFJvdXRlT2ZBY3RpdmVJdGVtKCk7XG4gICAgICBpZiAoYWN0aXZlUm91dGUgJiYgYWN0aXZlUm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5hY3RpdmVSb3V0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UuYWN0aXZlRm9ybUxheW91dE1hbmFnZXIgPSB0aGlzO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZE1haW5Db21wb25lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMub25UcmlnZ2VyVXBkYXRlLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhbGxvd1RvVXBkYXRlTmF2aWdhdGlvbihmb3JtQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmlzVGFiTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYkdyb3VwKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnRpdGxlRGF0YU9yaWdpbikpID9cbiAgICAgIHRoaXMudGl0bGVEYXRhT3JpZ2luID09PSBmb3JtQXR0ciA6XG4gICAgICB0cnVlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YXRlU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubG9jYWxTdG9yYWdlU2VydmljZSB8fCAhdGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzVGFiTW9kZSA9IHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApO1xuICAgIGNvbnN0IGlzU3BsaXRQYW5lTW9kZSA9IHRoaXMuaXNTcGxpdFBhbmVNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vU3BsaXRQYW5lKTtcbiAgICBpZiAoaXNUYWJNb2RlIHx8IGlzU3BsaXRQYW5lTW9kZSkge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudFN0b3JhZ2UodGhpcywgdGhpcy5nZXRSb3V0ZUtleSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmVudEFjdFJvdXRlUm91dGUoKTogUm91dGUge1xuICAgIGxldCBhY3RSb3V0ZSA9IHRoaXMuYWN0Um91dGU7XG4gICAgd2hpbGUgKGFjdFJvdXRlLnBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGFjdFJvdXRlLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGFjdFJvdXRlLnJvdXRlQ29uZmlnLmNoaWxkcmVuIHx8IGFjdFJvdXRlLnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFjdFJvdXRlID0gYWN0Um91dGUucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gYWN0Um91dGUucm91dGVDb25maWc7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMubWFya0ZvclVwZGF0ZSkge1xuICAgICAgdGhpcy5tYXJrRm9yVXBkYXRlID0gZmFsc2U7XG4gICAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBhcmFtcygpOiBhbnkge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldFBhcmFtcygpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc2V0IG1hcmtGb3JVcGRhdGUoYXJnOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbWFya0ZvclVwZGF0ZSA9IGFyZztcbiAgICBpZiAodGhpcy5pc1NwbGl0UGFuZU1vZGUoKSkge1xuICAgICAgdGhpcy51cGRhdGVJZk5lZWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtYXJrRm9yVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrRm9yVXBkYXRlO1xuICB9XG5cbiAgZ2V0IGlnbm9yZUNhbkRlYWN0aXZhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzU3BsaXRQYW5lTW9kZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExheW91dE1vZGVDb21wb25lbnQoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB7XG4gICAgbGV0IGNvbXBSZWY7XG4gICAgaWYgKHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApKSB7XG4gICAgICBjb21wUmVmID0gdGhpcy5vVGFiR3JvdXA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGlhbG9nTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGlhbG9nUmVmKSkge1xuICAgICAgY29tcFJlZiA9IHRoaXMuZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NwbGl0UGFuZU1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9TcGxpdFBhbmUpKSB7XG4gICAgICBjb21wUmVmID0gdGhpcy5vU3BsaXRQYW5lO1xuICAgIH1cbiAgICByZXR1cm4gY29tcFJlZjtcbiAgfVxuXG4gIGFsbG93TmF2aWdhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNUYWJNb2RlKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuQWRkRGV0YWlsQ29tcG9uZW50KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC53cmFwSW50b09ic2VydmFibGUoVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmNhbkFkZERldGFpbENvbXBvbmVudCgpIDogdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgaGFzVG9Db25maXJtRXhpdChkYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSwgb3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQob3B0aW9ucykgJiYgb3B0aW9ucy5leGl0V2l0aG91dENvbmZpcm1hdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmb3Jtc0F0dHIgPSBPYmplY3Qua2V5cyhkYXRhLmlubmVyRm9ybXNJbmZvKTtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGZvcm1zQXR0ci5sZW5ndGggPiAwKSB7XG4gICAgICBmb3Jtc0F0dHIuZm9yRWFjaChmb3JtQXR0ciA9PiB7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkYXRhLmlubmVyRm9ybXNJbmZvW2Zvcm1BdHRyXTtcbiAgICAgICAgICByZXN1bHQgPSBmb3JtRGF0YS5jb25maXJtT25FeGl0ICYmIGZvcm1EYXRhLm1vZGlmaWVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJZE9mQWN0aXZlSXRlbSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBgJHt0aGlzLm9hdHRyfS0ke2NvbXBSZWYuZ2V0SWRPZkFjdGl2ZUl0ZW0oKX0tYCA6ICcnO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJtb2RlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIk9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERVwiPlxuICAgIDxvLWZvcm0tbGF5b3V0LXRhYmdyb3VwICN0YWJHcm91cCBbdGl0bGVdPVwidGl0bGVcIiAob25NYWluVGFiU2VsZWN0ZWQpPVwib25NYWluVGFiU2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uU2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCgkZXZlbnQpXCIgKG9uQ2xvc2VUYWIpPVwib25DbG9zZVRhYi5lbWl0KCRldmVudClcIlxuICAgICAgW29wdGlvbnNdPVwidGFiR3JvdXBPcHRpb25zXCIgW3N0cmV0Y2gtdGFic109XCJzdHJldGNoVGFic1wiPlxuICAgICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50QmxvY2tcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuU1BMSVRfUEFORV9NT0RFXCI+XG4gICAgPG8tZm9ybS1sYXlvdXQtc3BsaXQtcGFuZSAjc3BsaXRQYW5lIFtvcHRpb25zXT1cInNwbGl0UGFuZU9wdGlvbnNcIj5cbiAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudEJsb2NrXCI+PC9uZy1jb250ZW50PlxuICAgIDwvby1mb3JtLWxheW91dC1zcGxpdC1wYW5lPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREVcIj5cbiAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRCbG9ja1wiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRCbG9jaz5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -4,25 +4,56 @@ import { Subject } from 'rxjs';
4
4
  import { AppConfig } from '../config/app-config';
5
5
  import { Codes } from '../util/codes';
6
6
  import { Util } from '../util/util';
7
+ import { PermissionsService } from './permissions/permissions.service';
7
8
  import * as i0 from "@angular/core";
8
9
  export class AppMenuService {
9
10
  constructor(injector) {
10
11
  this.injector = injector;
11
12
  this.onClick = new Subject;
13
+ this.onPermissionMenuChanged = new Subject();
12
14
  this._config = this.injector.get(AppConfig);
13
- this.MENU_ROOTS = this._config.getMenuConfiguration();
14
15
  this.router = this.injector.get(Router);
15
16
  this.router.events.subscribe((event) => {
16
17
  if (event instanceof NavigationEnd) {
17
18
  this.setActiveItem();
18
19
  }
19
20
  });
21
+ this.setMenuItemsByMenuConfiguration();
22
+ this.permissionsService = this.injector.get(PermissionsService);
23
+ this.permissionsService.onChangePermissions.subscribe(x => {
24
+ this.mergeMenuItemsWithPermissions();
25
+ this.onPermissionMenuChanged.next();
26
+ });
27
+ }
28
+ setMenuItemsByMenuConfiguration() {
29
+ const defaultMenuConfiguration = Util.cloneArray(this._config.getMenuConfiguration());
30
+ this.MENU_ROOTS = defaultMenuConfiguration;
20
31
  this.ALL_MENU_ITEMS = [];
21
32
  for (let i = 0, len = this.MENU_ROOTS.length; i < len; i++) {
22
33
  const item = this.MENU_ROOTS[i];
23
34
  this.ALL_MENU_ITEMS = this.ALL_MENU_ITEMS.concat(this.getMenuItems(item));
24
35
  }
25
36
  }
37
+ mergeMenuItemsWithPermissions() {
38
+ this.setMenuItemsByMenuConfiguration();
39
+ const permissionsMenu = this.permissionsService.getAllMenuPermissions();
40
+ if (Util.isDefined(permissionsMenu)) {
41
+ this.MENU_ROOTS = [...this.MENU_ROOTS.map(menu => {
42
+ const indexPermission = permissionsMenu.findIndex(permission => permission.attr === menu.id);
43
+ if (indexPermission > -1) {
44
+ menu.visible = permissionsMenu[indexPermission].visible;
45
+ }
46
+ return menu;
47
+ })];
48
+ this.ALL_MENU_ITEMS = [...this.ALL_MENU_ITEMS.map(menu => {
49
+ const indexPermission = permissionsMenu.findIndex(permission => permission.attr === menu.id);
50
+ if (indexPermission > -1) {
51
+ menu.visible = permissionsMenu[indexPermission].visible;
52
+ }
53
+ return menu;
54
+ })];
55
+ }
56
+ }
26
57
  getMenuRoots() {
27
58
  return this.MENU_ROOTS;
28
59
  }
@@ -71,6 +102,9 @@ export class AppMenuService {
71
102
  isRouteItem(item) {
72
103
  return Util.isDefined(item.route);
73
104
  }
105
+ isVisible(item) {
106
+ return !Util.isDefined(item.visible) || (Util.isDefined(item.visible) && item.visible);
107
+ }
74
108
  getMenuItems(item) {
75
109
  const menuGroup = item;
76
110
  const items = menuGroup.items;
@@ -103,4 +137,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
103
137
  providedIn: 'root'
104
138
  }]
105
139
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lbnUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFXakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUtwQyxNQUFNLE9BQU8sY0FBYztJQVV6QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRmpDLFlBQU8sR0FBa0IsSUFBSSxPQUFhLENBQUM7UUFHaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFF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amVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQge1xuICBNZW51R3JvdXAsXG4gIE1lbnVJdGVtLFxuICBNZW51SXRlbUFjdGlvbixcbiAgTWVudUl0ZW1Mb2NhbGUsXG4gIE1lbnVJdGVtTG9nb3V0LFxuICBNZW51SXRlbVJvdXRlLFxuICBNZW51SXRlbVVzZXJJbmZvXG59IGZyb20gJy4uL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1lbnVSb290SXRlbSB9IGZyb20gJy4uL3R5cGVzL21lbnUtcm9vdC1pdGVtLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBNZW51U2VydmljZSB7XG5cbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgX2NvbmZpZzogQXBwQ29uZmlnO1xuICBwcm90ZWN0ZWQgTUVOVV9ST09UUzogTWVudVJvb3RJdGVtW107XG4gIHByb3RlY3RlZCBBTExfTUVOVV9JVEVNUzogTWVudVJvb3RJdGVtW107XG4gIHByb3RlY3RlZCBhY3RpdmVJdGVtOiBNZW51SXRlbVJvdXRlO1xuXG4gIHB1YmxpYyBvbkNsaWNrOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcENvbmZpZyk7XG4gICAgdGhpcy5NRU5VX1JPT1RTID0gdGhpcy5fY29uZmlnLmdldE1lbnVDb25maWd1cmF0aW9uKCk7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5BTExfTUVOVV9JVEVNUyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLk1FTlVfUk9PVFMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW06IE1lbnVSb290SXRlbSA9IHRoaXMuTUVOVV9ST09UU1tpXTtcbiAgICAgIHRoaXMuQUxMX01FTlVfSVRFTVMgPSB0aGlzLkFMTF9NRU5VX0lURU1TLmNvbmNhdCh0aGlzLmdldE1lbnVJdGVtcyhpdGVtKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TWVudVJvb3RzKCk6IE1lbnVSb290SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5NRU5VX1JPT1RTO1xuICB9XG5cbiAgZ2V0TWVudVJvb3RCeUlkKGlkOiBzdHJpbmcpOiBNZW51Um9vdEl0ZW0ge1xuICAgIHJldHVybiB0aGlzLk1FTlVfUk9PVFMuZmluZChjID0+IGMuaWQgPT09IGlkKTtcbiAgfVxuXG4gIGdldEFsbE1lbnVJdGVtcygpOiBNZW51Um9vdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuQUxMX01FTlVfSVRFTVM7XG4gIH1cblxuICBnZXRNZW51SXRlbUJ5SWQoaWQ6IHN0cmluZyk6IE1lbnVJdGVtIHwgTWVudUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5BTExfTUVOVV9JVEVNUy5maW5kKGkgPT4gaS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgZ2V0TWVudUl0ZW1UeXBlKGl0ZW06IE1lbnVSb290SXRlbSk6IHN0cmluZyB7XG4gICAgbGV0IHR5cGU6IHN0cmluZztcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgKChpdGVtIGFzIE1lbnVJdGVtTG9nb3V0KS5yb3V0ZSA9PT0gQ29kZXMuTE9HSU5fUk9VVEUpOlxuICAgICAgICB0eXBlID0gJ2xvZ291dCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAoKGl0ZW0gYXMgTWVudUl0ZW1BY3Rpb24pLmFjdGlvbiAhPT0gdW5kZWZpbmVkKTpcbiAgICAgICAgdHlwZSA9ICdhY3Rpb24nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgKChpdGVtIGFzIE1lbnVJdGVtTG9jYWxlKS5sb2NhbGUgIT09IHVuZGVmaW5lZCk6XG4gICAgICAgIHR5cGUgPSAnbG9jYWxlJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgoaXRlbSBhcyBNZW51SXRlbVVzZXJJbmZvKS51c2VyICE9PSB1bmRlZmluZWQpOlxuICAgICAgICB0eXBlID0gJ3VzZXItaW5mbyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAoKGl0ZW0gYXMgTWVudUdyb3VwKS5pdGVtcyAhPT0gdW5kZWZpbmVkKTpcbiAgICAgICAgdHlwZSA9ICdncm91cCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHlwZSA9ICdkZWZhdWx0JztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgaXNNZW51R3JvdXAoaXRlbTogTWVudVJvb3RJdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWVudUl0ZW1UeXBlKGl0ZW0pID09PSAnZ3JvdXAnO1xuICB9XG5cbiAgaXNNZW51R3JvdXBSb3V0ZShpdGVtOiBNZW51Um9vdEl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNZW51SXRlbVR5cGUoaXRlbSkgPT09ICdncm91cCcgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgncm91dGUnKTtcbiAgfVxuXG4gIGlzSXRlbUFjdGl2ZShpdGVtOiBNZW51SXRlbVJvdXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbSAmJiB0aGlzLmFjdGl2ZUl0ZW0ucm91dGUgPT09IGl0ZW0ucm91dGU7XG4gIH1cblxuICBpc1JvdXRlSXRlbShpdGVtOiBNZW51SXRlbVJvdXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGl0ZW0ucm91dGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW51SXRlbXMoaXRlbTogTWVudVJvb3RJdGVtKTogTWVudVJvb3RJdGVtW10ge1xuICAgIGNvbnN0IG1lbnVHcm91cCA9IGl0ZW0gYXMgTWVudUdyb3VwO1xuICAgIGNvbnN0IGl0ZW1zID0gbWVudUdyb3VwLml0ZW1zO1xuICAgIGlmIChpdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5pc01lbnVHcm91cFJvdXRlKG1lbnVHcm91cCkpIHtcbiAgICAgICAgcmV0dXJuIFtpdGVtXS5jb25jYXQoaXRlbXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBbaXRlbV07XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUl0ZW0oKTogdm9pZCB7XG4gICAgbGV0IGFjdGl2ZUl0ZW06IE1lbnVJdGVtUm91dGU7XG4gICAgY29uc3Qgcm91dGVJdGVtczogTWVudUl0ZW1Sb3V0ZVtdID0gdGhpcy5BTExfTUVOVV9JVEVNUy5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzUm91dGVJdGVtKGl0ZW0pKSBhcyBNZW51SXRlbVJvdXRlW107XG4gICAgY29uc3QgcGF0aE1hdGNoRnVsbEl0ZW1zID0gcm91dGVJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnBhdGhNYXRjaCA9PT0gJ2Z1bGwnKTtcbiAgICBpZiAocGF0aE1hdGNoRnVsbEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZUl0ZW0gPSBwYXRoTWF0Y2hGdWxsSXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm91dGUgPT09IHRoaXMucm91dGVyLnVybCk7XG4gICAgfVxuICAgIGlmICghYWN0aXZlSXRlbSkge1xuICAgICAgYWN0aXZlSXRlbSA9IHJvdXRlSXRlbXMuZmluZChpdGVtID0+IHRoaXMucm91dGVyLnVybC5zdGFydHNXaXRoKGl0ZW0ucm91dGUpKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVJdGVtID0gYWN0aXZlSXRlbTtcbiAgfVxuXG59XG4iXX0=
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lbnUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUt2RSxNQUFNLE9BQU8sY0FBYztJQVl6QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSGpDLFlBQU8sR0FBa0IsSUFBSSxPQUFhLENBQUM7UUFDM0MsNEJBQXVCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFHNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3RCO1FB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QUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoRixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5RTtRQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM5RTtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7OzRHQXpKVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7XG4gIE1lbnVDb21tb25JdGVtLFxuICBNZW51R3JvdXAsXG4gIE1lbnVJdGVtLFxuICBNZW51SXRlbUFjdGlvbixcbiAgTWVudUl0ZW1Mb2NhbGUsXG4gIE1lbnVJdGVtTG9nb3V0LFxuICBNZW51SXRlbVJvdXRlLFxuICBNZW51SXRlbVVzZXJJbmZvXG59IGZyb20gJy4uL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1lbnVSb290SXRlbSB9IGZyb20gJy4uL3R5cGVzL21lbnUtcm9vdC1pdGVtLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwTWVudVNlcnZpY2Uge1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIF9jb25maWc6IEFwcENvbmZpZztcbiAgcHJvdGVjdGVkIE1FTlVfUk9PVFM6IE1lbnVSb290SXRlbVtdO1xuICBwcm90ZWN0ZWQgQUxMX01FTlVfSVRFTVM6IE1lbnVSb290SXRlbVtdO1xuICBwcm90ZWN0ZWQgYWN0aXZlSXRlbTogTWVudUl0ZW1Sb3V0ZTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlO1xuXG4gIHB1YmxpYyBvbkNsaWNrOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD47XG4gIHB1YmxpYyBvblBlcm1pc3Npb25NZW51Q2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcENvbmZpZyk7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXRNZW51SXRlbXNCeU1lbnVDb25maWd1cmF0aW9uKCk7XG5cbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25zU2VydmljZSk7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2Uub25DaGFuZ2VQZXJtaXNzaW9ucy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICB0aGlzLm1lcmdlTWVudUl0ZW1zV2l0aFBlcm1pc3Npb25zKCk7XG4gICAgICB0aGlzLm9uUGVybWlzc2lvbk1lbnVDaGFuZ2VkLm5leHQoKVxuICAgIH0pO1xuXG4gIH1cblxuICBzZXRNZW51SXRlbXNCeU1lbnVDb25maWd1cmF0aW9uKCkge1xuICAgIC8qXG4gICAgICBzcHJlYWQgb3BlcmF0b3IgKC4uLikgaW4gYXJyYXkgbXVsdGktbGV2ZWwgbm90IHdvcmtzXG4gICAgICBKU09OLnBhcnNlIGFuZCBKU09OLnN0cmluZ2lmeSBhcmUgdGhlIHNwZWNpZmljIG1ldGhvZHMgdXNlZCBmb3IgbXVsdGktbGV2ZWwgZGVlcCBjb3B5aW5nXG4gICAgKi9cbiAgICBjb25zdCBkZWZhdWx0TWVudUNvbmZpZ3VyYXRpb24gPSBVdGlsLmNsb25lQXJyYXkodGhpcy5fY29uZmlnLmdldE1lbnVDb25maWd1cmF0aW9uKCkpO1xuICAgIHRoaXMuTUVOVV9ST09UUyA9IGRlZmF1bHRNZW51Q29uZmlndXJhdGlvbjtcbiAgICB0aGlzLkFMTF9NRU5VX0lURU1TID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuTUVOVV9ST09UUy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaXRlbTogTWVudVJvb3RJdGVtID0gdGhpcy5NRU5VX1JPT1RTW2ldO1xuICAgICAgdGhpcy5BTExfTUVOVV9JVEVNUyA9IHRoaXMuQUxMX01FTlVfSVRFTVMuY29uY2F0KHRoaXMuZ2V0TWVudUl0ZW1zKGl0ZW0pKTtcbiAgICB9XG4gIH1cblxuICBtZXJnZU1lbnVJdGVtc1dpdGhQZXJtaXNzaW9ucygpIHtcblxuICAgIHRoaXMuc2V0TWVudUl0ZW1zQnlNZW51Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zTWVudSA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE1lbnVQZXJtaXNzaW9ucygpO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHBlcm1pc3Npb25zTWVudSkpIHtcbiAgICAgIHRoaXMuTUVOVV9ST09UUyA9IFsuLi50aGlzLk1FTlVfUk9PVFMubWFwKG1lbnUgPT4ge1xuICAgICAgICBjb25zdCBpbmRleFBlcm1pc3Npb24gPSBwZXJtaXNzaW9uc01lbnUuZmluZEluZGV4KHBlcm1pc3Npb24gPT4gcGVybWlzc2lvbi5hdHRyID09PSBtZW51LmlkKTtcbiAgICAgICAgaWYgKGluZGV4UGVybWlzc2lvbiA+IC0xKSB7XG4gICAgICAgICAgbWVudS52aXNpYmxlID0gcGVybWlzc2lvbnNNZW51W2luZGV4UGVybWlzc2lvbl0udmlzaWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVudTtcbiAgICAgIH0pXTtcblxuICAgICAgdGhpcy5BTExfTUVOVV9JVEVNUyA9IFsuLi50aGlzLkFMTF9NRU5VX0lURU1TLm1hcChtZW51ID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhQZXJtaXNzaW9uID0gcGVybWlzc2lvbnNNZW51LmZpbmRJbmRleChwZXJtaXNzaW9uID0+IHBlcm1pc3Npb24uYXR0ciA9PT0gbWVudS5pZCk7XG4gICAgICAgIGlmIChpbmRleFBlcm1pc3Npb24gPiAtMSkge1xuICAgICAgICAgIG1lbnUudmlzaWJsZSA9IHBlcm1pc3Npb25zTWVudVtpbmRleFBlcm1pc3Npb25dLnZpc2libGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnU7XG4gICAgICB9KV07XG4gICAgfVxuICB9XG5cbiAgZ2V0TWVudVJvb3RzKCk6IE1lbnVSb290SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5NRU5VX1JPT1RTO1xuICB9XG5cbiAgZ2V0TWVudVJvb3RCeUlkKGlkOiBzdHJpbmcpOiBNZW51Um9vdEl0ZW0ge1xuICAgIHJldHVybiB0aGlzLk1FTlVfUk9PVFMuZmluZChjID0+IGMuaWQgPT09IGlkKTtcbiAgfVxuXG4gIGdldEFsbE1lbnVJdGVtcygpOiBNZW51Um9vdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuQUxMX01FTlVfSVRFTVM7XG4gIH1cblxuICBnZXRNZW51SXRlbUJ5SWQoaWQ6IHN0cmluZyk6IE1lbnVJdGVtIHwgTWVudUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5BTExfTUVOVV9JVEVNUy5maW5kKGkgPT4gaS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgZ2V0TWVudUl0ZW1UeXBlKGl0ZW06IE1lbnVSb290SXRlbSk6IHN0cmluZyB7XG4gICAgbGV0IHR5cGU6IHN0cmluZztcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgKChpdGVtIGFzIE1lbnVJdGVtTG9nb3V0KS5yb3V0ZSA9PT0gQ29kZXMuTE9HSU5fUk9VVEUpOlxuICAgICAgICB0eXBlID0gJ2xvZ291dCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAoKGl0ZW0gYXMgTWVudUl0ZW1BY3Rpb24pLmFjdGlvbiAhPT0gdW5kZWZpbmVkKTpcbiAgICAgICAgdHlwZSA9ICdhY3Rpb24nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgKChpdGVtIGFzIE1lbnVJdGVtTG9jYWxlKS5sb2NhbGUgIT09IHVuZGVmaW5lZCk6XG4gICAgICAgIHR5cGUgPSAnbG9jYWxlJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgoaXRlbSBhcyBNZW51SXRlbVVzZXJJbmZvKS51c2VyICE9PSB1bmRlZmluZWQpOlxuICAgICAgICB0eXBlID0gJ3VzZXItaW5mbyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAoKGl0ZW0gYXMgTWVudUdyb3VwKS5pdGVtcyAhPT0gdW5kZWZpbmVkKTpcbiAgICAgICAgdHlwZSA9ICdncm91cCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHlwZSA9ICdkZWZhdWx0JztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgaXNNZW51R3JvdXAoaXRlbTogTWVudVJvb3RJdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWVudUl0ZW1UeXBlKGl0ZW0pID09PSAnZ3JvdXAnO1xuICB9XG5cbiAgaXNNZW51R3JvdXBSb3V0ZShpdGVtOiBNZW51Um9vdEl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNZW51SXRlbVR5cGUoaXRlbSkgPT09ICdncm91cCcgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgncm91dGUnKTtcbiAgfVxuXG4gIGlzSXRlbUFjdGl2ZShpdGVtOiBNZW51SXRlbVJvdXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbSAmJiB0aGlzLmFjdGl2ZUl0ZW0ucm91dGUgPT09IGl0ZW0ucm91dGU7XG4gIH1cblxuICBpc1JvdXRlSXRlbShpdGVtOiBNZW51SXRlbVJvdXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGl0ZW0ucm91dGUpO1xuICB9XG5cbiAgaXNWaXNpYmxlKGl0ZW06IE1lbnVDb21tb25JdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFVdGlsLmlzRGVmaW5lZChpdGVtLnZpc2libGUpIHx8IChVdGlsLmlzRGVmaW5lZChpdGVtLnZpc2libGUpICYmIGl0ZW0udmlzaWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbnVJdGVtcyhpdGVtOiBNZW51Um9vdEl0ZW0pOiBNZW51Um9vdEl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUdyb3VwID0gaXRlbSBhcyBNZW51R3JvdXA7XG4gICAgY29uc3QgaXRlbXMgPSBtZW51R3JvdXAuaXRlbXM7XG4gICAgaWYgKGl0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmlzTWVudUdyb3VwUm91dGUobWVudUdyb3VwKSkge1xuICAgICAgICByZXR1cm4gW2l0ZW1dLmNvbmNhdChpdGVtcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIFtpdGVtXTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlSXRlbSgpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlSXRlbTogTWVudUl0ZW1Sb3V0ZTtcbiAgICBjb25zdCByb3V0ZUl0ZW1zOiBNZW51SXRlbVJvdXRlW10gPSB0aGlzLkFMTF9NRU5VX0lURU1TLmZpbHRlcihpdGVtID0+IHRoaXMuaXNSb3V0ZUl0ZW0oaXRlbSkpIGFzIE1lbnVJdGVtUm91dGVbXTtcbiAgICBjb25zdCBwYXRoTWF0Y2hGdWxsSXRlbXMgPSByb3V0ZUl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ucGF0aE1hdGNoID09PSAnZnVsbCcpO1xuICAgIGlmIChwYXRoTWF0Y2hGdWxsSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aXZlSXRlbSA9IHBhdGhNYXRjaEZ1bGxJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb3V0ZSA9PT0gdGhpcy5yb3V0ZXIudXJsKTtcbiAgICB9XG4gICAgaWYgKCFhY3RpdmVJdGVtKSB7XG4gICAgICBhY3RpdmVJdGVtID0gcm91dGVJdGVtcy5maW5kKGl0ZW0gPT4gdGhpcy5yb3V0ZXIudXJsLnN0YXJ0c1dpdGgoaXRlbS5yb3V0ZSkpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUl0ZW0gPSBhY3RpdmVJdGVtO1xuICB9XG5cbn1cbiJdfQ==
@@ -101,12 +101,14 @@ export class OntimizeAuthService extends AuthService {
101
101
  onLogoutSuccess(sessionId) {
102
102
  if (sessionId === 0) {
103
103
  this.clearSessionData();
104
+ this.restartPermission();
104
105
  this.redirectLogin(false);
105
106
  }
106
107
  }
107
108
  onLogoutError(error) {
108
109
  console.error('Error on logout');
109
110
  this.clearSessionData();
111
+ this.restartPermission();
110
112
  this.redirectLogin(false);
111
113
  }
112
114
  clearSessionData() {
@@ -128,10 +130,14 @@ export class OntimizeAuthService extends AuthService {
128
130
  extras[Codes.QUERY_PARAMS] = arg;
129
131
  this.router.navigate([Codes.LOGIN_ROUTE], extras);
130
132
  }
133
+ restartPermission() {
134
+ const permissionsService = this.injector.get(PermissionsService);
135
+ permissionsService.restart();
136
+ }
131
137
  }
132
138
  OntimizeAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
133
139
  OntimizeAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService });
134
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService, decorators: [{
135
141
  type: Injectable
136
142
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvby1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUd0RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQVFsRCxZQUFzQixRQUFrQjtRQUN0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFESSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRXRDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5RCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BGLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNuRCxDQUFDO0lBRU0sNEJBQTRCLENBQUMsTUFBYztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLE9BQU8sQ0FBZSxPQUFPLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sY0FBYyxHQUFvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUNqRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzNFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUM7b0JBQ3BFLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztvQkFDcEQsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDaEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxTQUEwQjtRQUU5QyxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixFQUFFLEVBQUUsU0FBUztTQUNkLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFVO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUQsTUFBTSxjQUFjLEdBQW9CLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDeEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3BFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDM0UsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDM0IsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNyQixhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMxQixhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sZUFBZSxDQUFDLFNBQWlCO1FBQ3RDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFVO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQWlCO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUEwQixLQUFLO1FBQzNDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7O2lIQTNJVSxtQkFBbUI7cUhBQW5CLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IElBdXRoU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvYXV0aC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi90eXBlcy9jb25maWcudHlwZSc7XG5pbXBvcnQgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4uL3R5cGVzL3Nlc3Npb24taW5mby50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9SZW1vdGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vcmVtb3RlLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9udGltaXplQXV0aFNlcnZpY2UgZXh0ZW5kcyBBdXRoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfdXNlcjogc3RyaW5nO1xuICBwcml2YXRlIF9jb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcbiAgcHJpdmF0ZSBvbnRTZXJ2aWNlOiBPbnRpbWl6ZVNlcnZpY2U7XG4gIHByaXZhdGUgbG9naW5TdG9yYWdlU2VydmljZTogTG9naW5TdG9yYWdlU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcENvbmZpZykuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChMb2dpblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGlmIChzZXNzaW9uSW5mbyAmJiBzZXNzaW9uSW5mby5pZCAmJiBzZXNzaW9uSW5mby51c2VyICYmIHNlc3Npb25JbmZvLnVzZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXNlciA9IHNlc3Npb25JbmZvLnVzZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB1c2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvY2FsU3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuX2xvY2FsU3RvcmFnZUtleTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKGNvbmZpZzogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5vbnRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT250aW1pemVTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXJ2Q29uZiA9IHt9O1xuICAgIHNlcnZDb25mW0NvZGVzLlNFU1NJT05fS0VZXSA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIHRoaXMub250U2VydmljZS5jb25maWd1cmVTZXJ2aWNlKHNlcnZDb25mKTtcbiAgfVxuXG4gIHB1YmxpYyByZXRyaWV2ZUF1dGhTZXJ2aWNlKCk6IFByb21pc2U8SUF1dGhTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElBdXRoU2VydmljZT4ocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAodGhpcy5vbnRTZXJ2aWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm9udFNlcnZpY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKHRoaXMuX2NvbmZpZyk7XG4gICAgICAgIHJlc29sdmUodGhpcy5vbnRTZXJ2aWNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dpbih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLnJldHJpZXZlQXV0aFNlcnZpY2UoKS50aGVuKHNlcnZpY2UgPT4ge1xuICAgICAgICBzZXJ2aWNlLnN0YXJ0c2Vzc2lvbih1c2VyLCBwYXNzd29yZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dpblN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCByZW1vdGVDb25maWdTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1JlbW90ZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nQXJyYXkgPSBbXTtcbiAgICAgICAgICBwZW5kaW5nQXJyYXkucHVzaChwZXJtaXNzaW9uc1NlcnZpY2UuZ2V0VXNlclBlcm1pc3Npb25zQXNQcm9taXNlKCkpO1xuICAgICAgICAgIHBlbmRpbmdBcnJheS5wdXNoKHJlbW90ZUNvbmZpZ1NlcnZpY2UuaW5pdGlhbGl6ZSgpKTtcbiAgICAgICAgICBjb21iaW5lTGF0ZXN0KHBlbmRpbmdBcnJheSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm9uTG9naW5FcnJvcihlcnJvcik7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcm9tKGRhdGFPYnNlcnZhYmxlLnRvUHJvbWlzZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ2luU3VjY2VzcyhzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHNhdmUgdXNlciBhbmQgc2Vzc2lvbmlkIGludG8gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICB1c2VyOiB0aGlzLl91c2VyLFxuICAgICAgaWQ6IHNlc3Npb25JZFxuICAgIH07XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnN0b3JlU2Vzc2lvbkluZm8oc2Vzc2lvbik7XG4gICAgdGhpcy5vbkxvZ2luLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25Mb2dpbkVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0KCdFUlJPUicsICdNRVNTQUdFUy5FUlJPUl9MT0dJTicpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMub25Mb2dvdXQubmV4dChudWxsKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShpbm5lck9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMucmV0cmlldmVBdXRoU2VydmljZSgpLnRoZW4oc2VydmljZSA9PiB7XG4gICAgICAgIHNlcnZpY2UuZW5kc2Vzc2lvbihzZXNzaW9uSW5mby51c2VyLCBzZXNzaW9uSW5mby5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPUmVtb3RlQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgICAgICAgIHJlbW90ZUNvbmZpZ1NlcnZpY2UuZmluYWxpemUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ291dFN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgICBpbm5lck9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIGlubmVyT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaW5uZXJPYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZyb20oZGF0YU9ic2VydmFibGUudG9Qcm9taXNlKCkpO1xuICB9XG5cbiAgcHVibGljIG9uTG9nb3V0U3VjY2VzcyhzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzZXNzaW9uSWQgPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uRGF0YSgpO1xuICAgICAgdGhpcy5yZWRpcmVjdExvZ2luKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Mb2dvdXRFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9nb3V0Jyk7XG4gICAgdGhpcy5jbGVhclNlc3Npb25EYXRhKCk7XG4gICAgdGhpcy5yZWRpcmVjdExvZ2luKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlc3Npb25EYXRhKCk6IHZvaWQge1xuICAgIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5zZXNzaW9uRXhwaXJlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2Vzc2lvbkluZm8oKTogU2Vzc2lvbkluZm8ge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkluZm8oKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9yZVNlc3Npb25JbmZvKGluZm86IFNlc3Npb25JbmZvKTogdm9pZCB7XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnN0b3JlU2Vzc2lvbkluZm8oaW5mbyk7XG4gIH1cblxuICByZWRpcmVjdExvZ2luKHNlc3Npb25FeHBpcmVkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBhcmcgPSB7fTtcbiAgICBhcmdbQ29kZXMuU0VTU0lPTl9FWFBJUkVEX0tFWV0gPSBzZXNzaW9uRXhwaXJlZDtcbiAgICBjb25zdCBleHRyYXMgPSB7fTtcbiAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IGFyZztcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ29kZXMuTE9HSU5fUk9VVEVdLCBleHRyYXMpO1xuICB9XG5cbn1cbiJdfQ==
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvby1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUd0RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQVFsRCxZQUFzQixRQUFrQjtRQUN0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFESSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRXRDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElB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QztJQUVNLGdCQUFnQixDQUFDLElBQWlCO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUEwQixLQUFLO1FBQzNDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pFLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7O2lIQWxKVSxtQkFBbUI7cUhBQW5CLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IElBdXRoU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvYXV0aC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi90eXBlcy9jb25maWcudHlwZSc7XG5pbXBvcnQgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4uL3R5cGVzL3Nlc3Npb24taW5mby50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9SZW1vdGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vcmVtb3RlLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9udGltaXplQXV0aFNlcnZpY2UgZXh0ZW5kcyBBdXRoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfdXNlcjogc3RyaW5nO1xuICBwcml2YXRlIF9jb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcbiAgcHJpdmF0ZSBvbnRTZXJ2aWNlOiBPbnRpbWl6ZVNlcnZpY2U7XG4gIHByaXZhdGUgbG9naW5TdG9yYWdlU2VydmljZTogTG9naW5TdG9yYWdlU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcENvbmZpZykuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChMb2dpblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGlmIChzZXNzaW9uSW5mbyAmJiBzZXNzaW9uSW5mby5pZCAmJiBzZXNzaW9uSW5mby51c2VyICYmIHNlc3Npb25JbmZvLnVzZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXNlciA9IHNlc3Npb25JbmZvLnVzZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB1c2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvY2FsU3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuX2xvY2FsU3RvcmFnZUtleTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKGNvbmZpZzogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5vbnRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT250aW1pemVTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXJ2Q29uZiA9IHt9O1xuICAgIHNlcnZDb25mW0NvZGVzLlNFU1NJT05fS0VZXSA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIHRoaXMub250U2VydmljZS5jb25maWd1cmVTZXJ2aWNlKHNlcnZDb25mKTtcbiAgfVxuXG4gIHB1YmxpYyByZXRyaWV2ZUF1dGhTZXJ2aWNlKCk6IFByb21pc2U8SUF1dGhTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElBdXRoU2VydmljZT4ocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAodGhpcy5vbnRTZXJ2aWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm9udFNlcnZpY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKHRoaXMuX2NvbmZpZyk7XG4gICAgICAgIHJlc29sdmUodGhpcy5vbnRTZXJ2aWNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dpbih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLnJldHJpZXZlQXV0aFNlcnZpY2UoKS50aGVuKHNlcnZpY2UgPT4ge1xuICAgICAgICBzZXJ2aWNlLnN0YXJ0c2Vzc2lvbih1c2VyLCBwYXNzd29yZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dpblN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCByZW1vdGVDb25maWdTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1JlbW90ZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nQXJyYXkgPSBbXTtcbiAgICAgICAgICBwZW5kaW5nQXJyYXkucHVzaChwZXJtaXNzaW9uc1NlcnZpY2UuZ2V0VXNlclBlcm1pc3Npb25zQXNQcm9taXNlKCkpO1xuICAgICAgICAgIHBlbmRpbmdBcnJheS5wdXNoKHJlbW90ZUNvbmZpZ1NlcnZpY2UuaW5pdGlhbGl6ZSgpKTtcbiAgICAgICAgICBjb21iaW5lTGF0ZXN0KHBlbmRpbmdBcnJheSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm9uTG9naW5FcnJvcihlcnJvcik7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcm9tKGRhdGFPYnNlcnZhYmxlLnRvUHJvbWlzZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ2luU3VjY2VzcyhzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHNhdmUgdXNlciBhbmQgc2Vzc2lvbmlkIGludG8gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICB1c2VyOiB0aGlzLl91c2VyLFxuICAgICAgaWQ6IHNlc3Npb25JZFxuICAgIH07XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnN0b3JlU2Vzc2lvbkluZm8oc2Vzc2lvbik7XG4gICAgdGhpcy5vbkxvZ2luLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25Mb2dpbkVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0KCdFUlJPUicsICdNRVNTQUdFUy5FUlJPUl9MT0dJTicpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMub25Mb2dvdXQubmV4dChudWxsKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShpbm5lck9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMucmV0cmlldmVBdXRoU2VydmljZSgpLnRoZW4oc2VydmljZSA9PiB7XG4gICAgICAgIHNlcnZpY2UuZW5kc2Vzc2lvbihzZXNzaW9uSW5mby51c2VyLCBzZXNzaW9uSW5mby5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPUmVtb3RlQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgICAgICAgIHJlbW90ZUNvbmZpZ1NlcnZpY2UuZmluYWxpemUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ291dFN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgICBpbm5lck9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIGlubmVyT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaW5uZXJPYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZyb20oZGF0YU9ic2VydmFibGUudG9Qcm9taXNlKCkpO1xuICB9XG5cbiAgcHVibGljIG9uTG9nb3V0U3VjY2VzcyhzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzZXNzaW9uSWQgPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uRGF0YSgpO1xuICAgICAgdGhpcy5yZXN0YXJ0UGVybWlzc2lvbigpO1xuICAgICAgdGhpcy5yZWRpcmVjdExvZ2luKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Mb2dvdXRFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9nb3V0Jyk7XG4gICAgdGhpcy5jbGVhclNlc3Npb25EYXRhKCk7XG4gICAgdGhpcy5yZXN0YXJ0UGVybWlzc2lvbigpO1xuICAgIHRoaXMucmVkaXJlY3RMb2dpbihmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZXNzaW9uRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2Uuc2Vzc2lvbkV4cGlyZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0xvZ2dlZEluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuaXNMb2dnZWRJbigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlc3Npb25JbmZvKCk6IFNlc3Npb25JbmZvIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcmVTZXNzaW9uSW5mbyhpbmZvOiBTZXNzaW9uSW5mbyk6IHZvaWQge1xuICAgIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5zdG9yZVNlc3Npb25JbmZvKGluZm8pO1xuICB9XG5cbiAgcmVkaXJlY3RMb2dpbihzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgYXJnID0ge307XG4gICAgYXJnW0NvZGVzLlNFU1NJT05fRVhQSVJFRF9LRVldID0gc2Vzc2lvbkV4cGlyZWQ7XG4gICAgY29uc3QgZXh0cmFzID0ge307XG4gICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBhcmc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0NvZGVzLkxPR0lOX1JPVVRFXSwgZXh0cmFzKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0YXJ0UGVybWlzc2lvbigpIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChQZXJtaXNzaW9uc1NlcnZpY2UpO1xuICAgIHBlcm1pc3Npb25zU2VydmljZS5yZXN0YXJ0KCk7XG4gIH1cblxufVxuIl19