@wavemaker/app-ng-runtime 11.15.4-rc.250 → 11.15.5-1.256

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 (53) hide show
  1. package/components/base/bundles/index.umd.js +4 -13
  2. package/components/base/esm2022/utils/widget-utils.mjs +5 -4
  3. package/components/base/esm2022/widgets/common/base/base.component.mjs +1 -11
  4. package/components/base/fesm2022/index.mjs +4 -13
  5. package/components/base/fesm2022/index.mjs.map +1 -1
  6. package/components/containers/tabs/bundles/index.umd.js +1 -1
  7. package/components/containers/tabs/esm2022/tabs.animator.mjs +2 -2
  8. package/components/containers/tabs/fesm2022/index.mjs +1 -1
  9. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  10. package/components/data/form/bundles/index.umd.js +6 -3
  11. package/components/data/form/esm2022/form.component.mjs +5 -2
  12. package/components/data/form/esm2022/live-form/live-form.directive.mjs +3 -3
  13. package/components/data/form/fesm2022/index.mjs +6 -3
  14. package/components/data/form/fesm2022/index.mjs.map +1 -1
  15. package/components/data/form/live-form/live-form.directive.d.ts +1 -1
  16. package/components/data/list/bundles/index.umd.js +6 -0
  17. package/components/data/list/esm2022/list.component.mjs +7 -1
  18. package/components/data/list/fesm2022/index.mjs +6 -0
  19. package/components/data/list/fesm2022/index.mjs.map +1 -1
  20. package/components/data/pagination/bundles/index.umd.js +45 -7
  21. package/components/data/pagination/esm2022/pagination.component.mjs +46 -8
  22. package/components/data/pagination/fesm2022/index.mjs +45 -7
  23. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  24. package/components/data/pagination/pagination.component.d.ts +1 -0
  25. package/components/data/table/bundles/index.umd.js +228 -20
  26. package/components/data/table/esm2022/table-column/table-column.directive.mjs +6 -1
  27. package/components/data/table/esm2022/table-cud.directive.mjs +14 -3
  28. package/components/data/table/esm2022/table-filter.directive.mjs +6 -1
  29. package/components/data/table/esm2022/table.component.mjs +206 -19
  30. package/components/data/table/fesm2022/index.mjs +229 -21
  31. package/components/data/table/fesm2022/index.mjs.map +1 -1
  32. package/components/data/table/table.component.d.ts +16 -1
  33. package/core/bundles/index.umd.js +7 -1
  34. package/core/esm2022/utils/dom.mjs +4 -2
  35. package/core/esm2022/utils/utils.mjs +5 -1
  36. package/core/fesm2022/index.mjs +7 -1
  37. package/core/fesm2022/index.mjs.map +1 -1
  38. package/npm-shrinkwrap.json +2 -2
  39. package/package-lock.json +2 -2
  40. package/package.json +1 -1
  41. package/runtime/base/bundles/index.umd.js +45 -12
  42. package/runtime/base/components/app-component/app.component.d.ts +1 -1
  43. package/runtime/base/esm2022/components/app-component/app.component.mjs +23 -12
  44. package/runtime/base/esm2022/guards/role.guard.mjs +2 -2
  45. package/runtime/base/esm2022/services/app.manager.service.mjs +23 -1
  46. package/runtime/base/fesm2022/index.mjs +45 -12
  47. package/runtime/base/fesm2022/index.mjs.map +1 -1
  48. package/runtime/base/services/app.manager.service.d.ts +5 -0
  49. package/scripts/datatable/datatable.js +282 -44
  50. package/transpiler/bundles/index.umd.js +3 -0
  51. package/transpiler/esm2022/build.mjs +4 -1
  52. package/transpiler/fesm2022/index.mjs +3 -0
  53. package/transpiler/fesm2022/index.mjs.map +1 -1
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.15.4-rc.250",
3
+ "version": "11.15.5-1.256",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.15.4-rc.250",
9
+ "version": "11.15.5-1.256",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.15.4-rc.250",
3
+ "version": "11.15.5-1.256",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.15.4-rc.250",
9
+ "version": "11.15.5-1.256",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.15.4-rc.250",
3
+ "version": "11.15.5-1.256",
4
4
  "description": "All modules required for a WaveMaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -418,6 +418,28 @@
418
418
  notifyApp(template, type, title) {
419
419
  this.$app.notifyApp(template, type, title);
420
420
  }
421
+ /**
422
+ * Notifies access denied for a page (e.g. RoleGuard) and invokes App.onServiceError
423
+ * with a 403-shaped response.
424
+ */
425
+ notifyAccessDenied(pageName, message) {
426
+ const errorMessage = message
427
+ || lodashEs.get(this.getAppLocale(), 'LABEL_ACCESS_DENIED')
428
+ || this.$app.appLocale?.LABEL_ACCESS_DENIED
429
+ || 'Access Denied';
430
+ const pagePath = pageName || this.$security.getCurrentRoutePage();
431
+ const errorResponse = {
432
+ message: errorMessage,
433
+ status: 403,
434
+ statusText: 'Forbidden',
435
+ ok: false,
436
+ url: pagePath ? `./pages/${pagePath}/page.min.json` : '',
437
+ body: null,
438
+ error: errorMessage
439
+ };
440
+ this.appOnServiceError(errorMessage, errorResponse);
441
+ this.notifyApp(errorMessage, 'error');
442
+ }
421
443
  /**
422
444
  * Triggers the onBeforeService method defined in app.js of the app
423
445
  * @param requestParams
@@ -4336,7 +4358,7 @@
4336
4358
  return Promise.resolve(true);
4337
4359
  }
4338
4360
  // current loggedin user doesn't have access to the page that the user is trying to view
4339
- this.appManager.notifyApp(this.app.appLocale.LABEL_ACCESS_DENIED || 'Access Denied', 'error');
4361
+ this.appManager.notifyAccessDenied(route.routeConfig?.path, this.app.appLocale.LABEL_ACCESS_DENIED || 'Access Denied');
4340
4362
  return Promise.resolve(false);
4341
4363
  }
4342
4364
  else {
@@ -4456,6 +4478,11 @@
4456
4478
  }], ctorParameters: () => [{ type: i1__namespace.AbstractI18nService }] });
4457
4479
 
4458
4480
  class AppComponent {
4481
+ set routerOutlet(outlet) {
4482
+ if (outlet) {
4483
+ this.overrideRouterOutlet(outlet);
4484
+ }
4485
+ }
4459
4486
  constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager, customIconsLoaderService) {
4460
4487
  this.elRef = elRef;
4461
4488
  this.oAuthService = oAuthService;
@@ -4566,20 +4593,26 @@
4566
4593
  });
4567
4594
  setTimeout(() => {
4568
4595
  this.app.dynamicComponentContainerRef = this.dynamicComponentContainerRef;
4569
- this.overrideRouterOutlet();
4570
4596
  }, 10);
4571
4597
  }
4572
- overrideRouterOutlet() {
4573
- //override the attach/detach methods
4574
- const oAttach = this.routerOutlet.attach;
4575
- const oDetach = this.routerOutlet.detach;
4576
- this.routerOutlet.attach = (componentRef, activatedRoute) => {
4577
- oAttach.call(this.routerOutlet, componentRef, activatedRoute);
4578
- componentRef.instance.ngOnAttach();
4598
+ overrideRouterOutlet(outlet) {
4599
+ if (outlet.__isPatched) {
4600
+ return;
4601
+ }
4602
+ outlet.__isPatched = true;
4603
+ const oAttach = outlet.attach;
4604
+ const oDetach = outlet.detach;
4605
+ outlet.attach = (componentRef, activatedRoute) => {
4606
+ oAttach.call(outlet, componentRef, activatedRoute);
4607
+ if (componentRef?.instance?.ngOnAttach) {
4608
+ componentRef.instance.ngOnAttach();
4609
+ }
4579
4610
  };
4580
- this.routerOutlet.detach = () => {
4581
- this.app.activePage.ngOnDetach();
4582
- const componentRef = oDetach.call(this.routerOutlet);
4611
+ outlet.detach = () => {
4612
+ if (this.app?.activePage?.ngOnDetach) {
4613
+ this.app.activePage.ngOnDetach();
4614
+ }
4615
+ const componentRef = oDetach.call(outlet);
4583
4616
  return componentRef;
4584
4617
  };
4585
4618
  }
@@ -25,7 +25,7 @@ export declare class AppComponent implements DoCheck, AfterViewInit, OnDestroy {
25
25
  private retryCount;
26
26
  private navigationEndSubscription;
27
27
  appLocale: any;
28
- routerOutlet: RouterOutlet;
28
+ set routerOutlet(outlet: RouterOutlet | undefined);
29
29
  dynamicComponentContainerRef: ViewContainerRef;
30
30
  spinner: SPINNER;
31
31
  constructor(_pipeProvider: PipeProvider, _appRef: ApplicationRef, elRef: ElementRef, oAuthService: OAuthService, dialogService: AbstractDialogService, spinnerService: AbstractSpinnerService, ngZone: NgZone, router: Router, app: App, appManager: AppManagerService, customIconsLoaderService: CustomIconsLoaderService);
@@ -19,6 +19,11 @@ import * as i3 from "@wm/core";
19
19
  import * as i4 from "@angular/router";
20
20
  import * as i5 from "../../services/app.manager.service";
21
21
  export class AppComponent {
22
+ set routerOutlet(outlet) {
23
+ if (outlet) {
24
+ this.overrideRouterOutlet(outlet);
25
+ }
26
+ }
22
27
  constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager, customIconsLoaderService) {
23
28
  this.elRef = elRef;
24
29
  this.oAuthService = oAuthService;
@@ -129,20 +134,26 @@ export class AppComponent {
129
134
  });
130
135
  setTimeout(() => {
131
136
  this.app.dynamicComponentContainerRef = this.dynamicComponentContainerRef;
132
- this.overrideRouterOutlet();
133
137
  }, 10);
134
138
  }
135
- overrideRouterOutlet() {
136
- //override the attach/detach methods
137
- const oAttach = this.routerOutlet.attach;
138
- const oDetach = this.routerOutlet.detach;
139
- this.routerOutlet.attach = (componentRef, activatedRoute) => {
140
- oAttach.call(this.routerOutlet, componentRef, activatedRoute);
141
- componentRef.instance.ngOnAttach();
139
+ overrideRouterOutlet(outlet) {
140
+ if (outlet.__isPatched) {
141
+ return;
142
+ }
143
+ outlet.__isPatched = true;
144
+ const oAttach = outlet.attach;
145
+ const oDetach = outlet.detach;
146
+ outlet.attach = (componentRef, activatedRoute) => {
147
+ oAttach.call(outlet, componentRef, activatedRoute);
148
+ if (componentRef?.instance?.ngOnAttach) {
149
+ componentRef.instance.ngOnAttach();
150
+ }
142
151
  };
143
- this.routerOutlet.detach = () => {
144
- this.app.activePage.ngOnDetach();
145
- const componentRef = oDetach.call(this.routerOutlet);
152
+ outlet.detach = () => {
153
+ if (this.app?.activePage?.ngOnDetach) {
154
+ this.app.activePage.ngOnDetach();
155
+ }
156
+ const componentRef = oDetach.call(outlet);
146
157
  return componentRef;
147
158
  };
148
159
  }
@@ -198,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
198
209
  type: ViewChild,
199
210
  args: ['dynamicComponent', { read: ViewContainerRef }]
200
211
  }] } });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFFSCxjQUFjLEVBQ2QsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFDSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsR0FBRyxFQUNILHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDbEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNy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QUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUcseUJBQXlCLENBQUMsWUFDN0wsVUFBVSxpQkFFTCxpQkFBaUIsQ0FBQyxJQUFJOzhXQVVaLFlBQVk7c0JBQXBDLFNBQVM7dUJBQUMsWUFBWTtnQkFFb0MsNEJBQTRCO3NCQUF0RixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FsZXJ0RGlhbG9nQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kaWFsb2dzL2FsZXJ0LWRpYWxvZyc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvY29uZmlybS1kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWN0aXZhdGVkUm91dGUsXG4gICAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgICBOYXZpZ2F0aW9uRW5kLFxuICAgIE5hdmlnYXRpb25FcnJvcixcbiAgICBOYXZpZ2F0aW9uU3RhcnQsXG4gICAgUm91dGVyLFxuICAgIFJvdXRlck91dGxldFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge3NldFRoZW1lfSBmcm9tICduZ3gtYm9vdHN0cmFwL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgYWRkQ2xhc3MsXG4gICAgQXBwLFxuICAgIEN1c3RvbUljb25zTG9hZGVyU2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2V0QXBwUmVmLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRQaXBlUHJvdmlkZXJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJ0B3bS9vQXV0aCc7XG5pbXBvcnQge0FwcE1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7UGlwZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9waXBlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBTcGlubmVyQ29tcG9uZW50fSBmcm9tICcuLi9hcHAtc3Bpbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtEaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvZGVzaWduLWRpYWxvZyc7XG5pbXBvcnQge0NvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbFBhcmFtSGFuZGxlckRpcmVjdGl2ZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcblxuaW50ZXJmYWNlIFNQSU5ORVIge1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IEFycmF5PHN0cmluZz47XG4gICAgYXJpYWxhYmVsOiBzdHJpbmc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck91dGxldCwgQWxlcnREaWFsb2dDb21wb25lbnQsIENvbmZpcm1EaWFsb2dDb21wb25lbnQsIERpYWxvZ0NvbXBvbmVudCwgQXBwU3Bpbm5lckNvbXBvbmVudCwgQ29udGFpbmVyRGlyZWN0aXZlLCBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlICwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGFydEFwcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0FwcGxpY2F0aW9uVHlwZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVTa2lwVG9NYWluQ29udGVudCA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gJ3RydWUnIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gdHJ1ZTtcbiAgICBwcml2YXRlIHJldHJ5Q291bnQgPSAwO1xuICAgIHByaXZhdGUgbmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBhcHBMb2NhbGU6IGFueSA9IHt9O1xuXG4gICAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgc3Bpbm5lcjogU1BJTk5FUiA9IHsgc2hvdzogZmFsc2UsIG1lc3NhZ2VzOiBbXSwgYXJpYWxhYmVsOiAnJyB9O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfcGlwZVByb3ZpZGVyOiBQaXBlUHJvdmlkZXIsXG4gICAgICAgIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21JY29uc0xvYWRlclNlcnZpY2U6IEN1c3RvbUljb25zTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzZXRQaXBlUHJvdmlkZXIoX3BpcGVQcm92aWRlcik7XG4gICAgICAgIHNldE5nWm9uZShuZ1pvbmUpO1xuICAgICAgICBzZXRBcHBSZWYoX2FwcFJlZik7XG5cbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBhcHAuYXBwTG9jYWxlO1xuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG4gICAgICAgIGlmICh0aGlzLmlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUljb25zTG9hZGVyU2VydmljZS5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gT0F1dGggY2hhbmdlc1xuICAgICAgICBvQXV0aFNlcnZpY2UuZ2V0T0F1dGhQcm92aWRlcnNBc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKHByb3ZpZGVyczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVyc0NvbmZpZyA9IHByb3ZpZGVycztcbiAgICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU9BdXRoRGlhbG9nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgbWVzc2FnZSBzb3VyY2UgdG8gc2hvdy9oaWRlIGFwcCBzcGlubmVyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuZ2V0TWVzc2FnZVNvdXJjZSgpLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGlzIHRvIGF2b2lkICdFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yJ1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLnNob3cgPSBkYXRhLnNob3c7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLm1lc3NhZ2VzID0gZGF0YS5tZXNzYWdlcztcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIuYXJpYWxhYmVsID0gZGF0YS5tZXNzYWdlcy50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNldCB0aGVtZSB0byBiczMgb24gbmd4LWJvb3RzdHJhcC4gVGhpcyBhdm9pZHMgcnVudGltZSBjYWxjdWxhdGlvbiB0byBkZXRlcm1pbmUgYnMgdGhlbWUuIFRodXMgcmVzb2x2ZXMgcGVyZm9ybWFuY2UuXG4gICAgICAgIHNldFRoZW1lKCdiczMnKTtcblxuICAgICAgICBsZXQgc3Bpbm5lcklkO1xuXG4gICAgICAgIGxldCBvblBhZ2VSZW5kZXJlZCA9IG5vb3A7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhZ2UgPSBlLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgICAgIHBhZ2UgPSBwYWdlLnN1YnN0cmluZygxKTtcblxuICAgICAgICAgICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5hY3RpdmVMYXlvdXROYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLmxheW91dFBhZ2VzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcC5hY3RpdmVMYXlvdXROYW1lICYmIHRoaXMuYXBwLmxheW91dFBhZ2VzICYmIHRoaXMuYXBwLmxheW91dFBhZ2VzLmxlbmd0aCAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5pbmNsdWRlcyhwYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVySWQgPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coJycsICd3bVJvdXRlck91dGxldCcsICcnLCAnd21Sb3V0ZXJPdXRsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVySWQgPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coJycsICdnbG9iYWxTcGlubmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKG5vZGUsICdwYWdlLWxvYWQtaW4tcHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlTG9hZFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZShzcGlubmVySWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXBhZ2Utb3V0bGV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5hY3RpdmVQYWdlTG9hZFRpbWUgPSBEYXRlLm5vdygpIC0gcGFnZUxvYWRTdGFydFRpbWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5zdWJzY3JpYmUoJ3BhZ2VBdHRhY2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldCgpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldCgpIHtcbiAgICAgICAgLy9vdmVycmlkZSB0aGUgYXR0YWNoL2RldGFjaCBtZXRob2RzXG4gICAgICAgIGNvbnN0IG9BdHRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5hdHRhY2g7XG4gICAgICAgIGNvbnN0IG9EZXRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5kZXRhY2g7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSwgYWN0aXZhdGVkUm91dGU6ICBBY3RpdmF0ZWRSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgb0F0dGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0LCBjb21wb25lbnRSZWYsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5uZ09uQXR0YWNoKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmRldGFjaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwLmFjdGl2ZVBhZ2UubmdPbkRldGFjaCgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gb0RldGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2tpcFRvQXBwQ29udGVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50cnlGb2N1c0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyeUZvY3VzQ29udGVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGVudEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoY29udGVudEVsKSB7XG4gICAgICAgICAgICBjb250ZW50RWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpOyAvLyBFbnN1cmUgaXQncyBmb2N1c2FibGVcbiAgICAgICAgICAgIGNvbnRlbnRFbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29udGVudEVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0cnlDb3VudCA8IDEwKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlGb2N1c0NvbnRlbnQoKSwgMTAwKTsgLy8gUmV0cnkgZXZlcnkgMTAwbXNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGFuZycsIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcC1mb2N1cy1zdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgJGludm9rZVdhdGNoZXJzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24pe1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIkBpZiAoc3RhcnRBcHApIHtcbiAgICBAaWYoZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgPGRpdiBpZD1cImFwcC1mb2N1cy1zdGFydFwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBjbGFzcz1cInNraXBcIiAoY2xpY2spPVwic2tpcFRvQXBwQ29udGVudCgkZXZlbnQpXCI+e3thcHBMb2NhbGUuTEFCRUxfU0tJUF9UT19NQUlOX0NPTlRFTlQgfHwgJ1NraXAgdG8gbWFpbiBjb250ZW50J319PC9hPlxuICAgIH1cbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gIEBpZiAoaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICA8ZGl2IHdtQ29udGFpbmVyIHBhcnRpYWxDb250YWluZXIgY29udGVudD1cIkNvbW1vblwiIGhpZGRlbiBjbGFzcz1cIm5nLWhpZGVcIj48L2Rpdj5cbiAgfVxuICA8YXBwLXNwaW5uZXIgbmFtZT1cImdsb2JhbHNwaW5uZXJcIiBjbGFzc25hbWU9XCJnbG9iYWwtc3Bpbm5lclwiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3Bpbm5lci5hcmlhbGFiZWwgfHwgJ0xvYWRpbmcnXCIgW3Nob3ddPVwic3Bpbm5lci5zaG93XCIgW3NwaW5uZXJtZXNzYWdlc109XCJzcGlubmVyLm1lc3NhZ2VzXCI+PC9hcHAtc3Bpbm5lcj5cbiAgPGRpdiB3bURpYWxvZyBuYW1lPVwib0F1dGhMb2dpbkRpYWxvZ1wiIHRpdGxlPVwiQXBwbGljYXRpb24gaXMgcmVxdWVzdGluZyB5b3UgdG8gc2lnbiBpbiB3aXRoXCJcbiAgICBjbG9zZS5ldmVudD1cImNsb3NlT0F1dGhEaWFsb2coKVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGlhbG9nQm9keT5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtaXRlbXNcIj5cbiAgICAgICAgQGZvciAocHJvdmlkZXIgb2YgcHJvdmlkZXJzQ29uZmlnOyB0cmFjayBwcm92aWRlcikge1xuICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJwcm92aWRlci5pbnZva2UoKVwiPnt7cHJvdmlkZXIubmFtZX19PC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPGRpdiB3bUNvbmZpcm1EaWFsb2cgbmFtZT1cIl9hcHAtY29uZmlybS1kaWFsb2dcIiB0aXRsZS5iaW5kPVwidGl0bGVcIiBtZXNzYWdlLmJpbmQ9XCJtZXNzYWdlXCIgb2t0ZXh0LmJpbmQ9XCJva3RleHRcIlxuICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbHRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICBlc2NhcGUuZXZlbnQ9XCJvbkVzY2FwZSgpXCIgb2suZXZlbnQ9XCJvbk9rKClcIiBjYW5jZWwuZXZlbnQ9XCJvbkNhbmNlbCgpXCIgY2xvc2UuZXZlbnQ9XCJvbkNsb3NlKClcIiBvcGVuZWQuZXZlbnQ9XCJvbk9wZW4oKVwiPjwvZGl2PlxuICBAaWYgKCFpc0FwcGxpY2F0aW9uVHlwZSkge1xuICAgIDxkaXYgIHdtQ29uZmlybURpYWxvZyBuYW1lPVwiUHJlZmFiQ29uZmlybURpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICBlc2NhcGUuZXZlbnQ9XCJvbkVzY2FwZSgpXCIgb2suZXZlbnQ9XCJvbk9rKClcIiBjYW5jZWwuZXZlbnQ9XCJvbkNhbmNlbCgpXCIgY2xvc2UuZXZlbnQ9XCJvbkNsb3NlKClcIiBvcGVuZWQuZXZlbnQ9XCJvbk9wZW4oKVwiPjwvZGl2PlxuICB9XG4gIEBpZiAoIWlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgPGRpdiAgd21BbGVydERpYWxvZyBuYW1lPVwiUHJlZmFiQWxlcnREaWFsb2dcIiB0aXRsZS5iaW5kPVwidGl0bGVcIiBtZXNzYWdlLmJpbmQ9XCJ0ZXh0XCIgb2t0ZXh0LmJpbmQ9XCJva0J1dHRvblRleHRcIlxuICAgICAgY2FuY2VsdGV4dC5iaW5kPVwiY2FuY2VsQnV0dG9uVGV4dFwiIGNsb3NhYmxlPVwiZmFsc2VcIiBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgfVxuICA8ZGl2IHdtQXBwRXh0PjwvZGl2PlxuICA8aSBpZD1cIndtLW1vYmlsZS1kaXNwbGF5XCI+PC9pPlxufVxuPCEtLUR1bW15IGNvbnRhaW5lciB0byBjcmVhdGUgdGhlIGNvbXBvbmVudCBkeW5hbWljYWxseS0tPlxuPG5nLWNvbnRhaW5lciAjZHluYW1pY0NvbXBvbmVudD48L25nLWNvbnRhaW5lcj5cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFFSCxjQUFjLEVBQ2QsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFDSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsR0FBRyxFQUNILHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDbEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWV0QyxNQUFNLE9BQU8sWUFBWTtJQVFyQixJQUE2QixZQUFZLENBQUMsTUFBZ0M7UUFDdEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUtELFlBQ0ksYUFBMkIsRUFDM0IsT0FBdUIsRUFDZixLQUFpQixFQUNqQixZQUEwQixFQUMxQixhQUFvQyxFQUNwQyxjQUFzQyxFQUM5QyxNQUFjLEVBQ04sTUFBYyxFQUNmLEdBQVEsRUFDUCxVQUE2QixFQUM3Qix3QkFBa0Q7UUFSbEQsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBRXRDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1AsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQTNCdkQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyx1QkFBdUIsS0FBSyxNQUFNLElBQUksc0JBQXNCLEVBQUUsQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLENBQUM7UUFDbEosZUFBVSxHQUFHLENBQUMsQ0FBQztRQUV2QixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBVXBCLFlBQU8sR0FBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFnR2hFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQWxGdEIsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsRUFBRSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixZQUFZLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztZQUNqQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzFFLHVFQUF1RTtZQUN2RSxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILHVIQUF1SDtRQUN2SCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsSUFBSSxTQUFTLENBQUM7UUFFZCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxZQUFZLGVBQWUsRUFBRSxDQUFDO2dCQUMvQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDUixJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUM5QixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzFILFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO2dCQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQWdCLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1AsUUFBUSxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxjQUFjLEdBQUcsR0FBRyxFQUFFO29CQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBZ0IsQ0FBQztvQkFDdEUsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDUCxXQUFXLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7b0JBQy9DLENBQUM7b0JBQ0QsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQztZQUNOLENBQUM7aUJBQU0sSUFBSSxDQUFDLFlBQVksYUFBYSxJQUFJLENBQUMsWUFBWSxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksZUFBZSxFQUFFLENBQUM7Z0JBQ3JHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNiLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDeEMsY0FBYyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUtELGVBQWU7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUs7UUFDVCw0REFBNEQ7UUFDNUQsNkNBQTZDO1FBQzdDLDREQUE0RDtRQUM1RCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUM7UUFDOUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQW9CO1FBQzdDLElBQUssTUFBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBQ0EsTUFBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFpQixFQUFFLGNBQThCLEVBQUUsRUFBRTtZQUNsRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbkQsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNyQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxPQUFPLFlBQVksQ0FBQztRQUN4QixDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQWdCLENBQUM7UUFFN0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1lBQ2xFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUN2RSxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07aUJBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FBQztpQkFDL0MsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3RELElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ0wsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLGVBQWUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7K0dBaE5RLFlBQVk7bUdBQVosWUFBWSxrSEFRVixZQUFZLDhJQU1nQixnQkFBZ0IsNkJDNUUzRCxxNUVBd0NBLDJDRGlCYyxZQUFZLCtCQUFFLFlBQVksMkpBQUUsb0JBQW9CLCtEQUFFLHNCQUFzQixpRUFBRSxlQUFlLDBEQUFFLG1CQUFtQix1SEFBRSxrQkFBa0IsMERBQUUsNEJBQTRCLCtEQUFHLHlCQUF5Qjs7NEZBSzdMLFlBQVk7a0JBUHhCLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUcseUJBQXlCLENBQUMsWUFDN0wsVUFBVSxpQkFFTCxpQkFBaUIsQ0FBQyxJQUFJOzhXQVVSLFlBQVk7c0JBQXhDLFNBQVM7dUJBQUMsWUFBWTtnQkFNb0MsNEJBQTRCO3NCQUF0RixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FsZXJ0RGlhbG9nQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kaWFsb2dzL2FsZXJ0LWRpYWxvZyc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvY29uZmlybS1kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWN0aXZhdGVkUm91dGUsXG4gICAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgICBOYXZpZ2F0aW9uRW5kLFxuICAgIE5hdmlnYXRpb25FcnJvcixcbiAgICBOYXZpZ2F0aW9uU3RhcnQsXG4gICAgUm91dGVyLFxuICAgIFJvdXRlck91dGxldFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge3NldFRoZW1lfSBmcm9tICduZ3gtYm9vdHN0cmFwL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgYWRkQ2xhc3MsXG4gICAgQXBwLFxuICAgIEN1c3RvbUljb25zTG9hZGVyU2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2V0QXBwUmVmLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRQaXBlUHJvdmlkZXJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJ0B3bS9vQXV0aCc7XG5pbXBvcnQge0FwcE1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7UGlwZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9waXBlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBTcGlubmVyQ29tcG9uZW50fSBmcm9tICcuLi9hcHAtc3Bpbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtEaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvZGVzaWduLWRpYWxvZyc7XG5pbXBvcnQge0NvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbFBhcmFtSGFuZGxlckRpcmVjdGl2ZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcblxuaW50ZXJmYWNlIFNQSU5ORVIge1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IEFycmF5PHN0cmluZz47XG4gICAgYXJpYWxhYmVsOiBzdHJpbmc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck91dGxldCwgQWxlcnREaWFsb2dDb21wb25lbnQsIENvbmZpcm1EaWFsb2dDb21wb25lbnQsIERpYWxvZ0NvbXBvbmVudCwgQXBwU3Bpbm5lckNvbXBvbmVudCwgQ29udGFpbmVyRGlyZWN0aXZlLCBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlICwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGFydEFwcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0FwcGxpY2F0aW9uVHlwZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVTa2lwVG9NYWluQ29udGVudCA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gJ3RydWUnIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gdHJ1ZTtcbiAgICBwcml2YXRlIHJldHJ5Q291bnQgPSAwO1xuICAgIHByaXZhdGUgbmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBhcHBMb2NhbGU6IGFueSA9IHt9O1xuXG4gICAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIHNldCByb3V0ZXJPdXRsZXQob3V0bGV0OiBSb3V0ZXJPdXRsZXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG91dGxldCkge1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldChvdXRsZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgc3Bpbm5lcjogU1BJTk5FUiA9IHsgc2hvdzogZmFsc2UsIG1lc3NhZ2VzOiBbXSwgYXJpYWxhYmVsOiAnJyB9O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfcGlwZVByb3ZpZGVyOiBQaXBlUHJvdmlkZXIsXG4gICAgICAgIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21JY29uc0xvYWRlclNlcnZpY2U6IEN1c3RvbUljb25zTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzZXRQaXBlUHJvdmlkZXIoX3BpcGVQcm92aWRlcik7XG4gICAgICAgIHNldE5nWm9uZShuZ1pvbmUpO1xuICAgICAgICBzZXRBcHBSZWYoX2FwcFJlZik7XG5cbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBhcHAuYXBwTG9jYWxlO1xuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG4gICAgICAgIGlmICh0aGlzLmlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUljb25zTG9hZGVyU2VydmljZS5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gT0F1dGggY2hhbmdlc1xuICAgICAgICBvQXV0aFNlcnZpY2UuZ2V0T0F1dGhQcm92aWRlcnNBc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKHByb3ZpZGVyczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVyc0NvbmZpZyA9IHByb3ZpZGVycztcbiAgICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU9BdXRoRGlhbG9nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgbWVzc2FnZSBzb3VyY2UgdG8gc2hvdy9oaWRlIGFwcCBzcGlubmVyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuZ2V0TWVzc2FnZVNvdXJjZSgpLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGlzIHRvIGF2b2lkICdFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yJ1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLnNob3cgPSBkYXRhLnNob3c7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLm1lc3NhZ2VzID0gZGF0YS5tZXNzYWdlcztcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIuYXJpYWxhYmVsID0gZGF0YS5tZXNzYWdlcy50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNldCB0aGVtZSB0byBiczMgb24gbmd4LWJvb3RzdHJhcC4gVGhpcyBhdm9pZHMgcnVudGltZSBjYWxjdWxhdGlvbiB0byBkZXRlcm1pbmUgYnMgdGhlbWUuIFRodXMgcmVzb2x2ZXMgcGVyZm9ybWFuY2UuXG4gICAgICAgIHNldFRoZW1lKCdiczMnKTtcblxuICAgICAgICBsZXQgc3Bpbm5lcklkO1xuXG4gICAgICAgIGxldCBvblBhZ2VSZW5kZXJlZCA9IG5vb3A7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhZ2UgPSBlLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgICAgIHBhZ2UgPSBwYWdlLnN1YnN0cmluZygxKTtcblxuICAgICAgICAgICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5hY3RpdmVMYXlvdXROYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLmxheW91dFBhZ2VzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcC5hY3RpdmVMYXlvdXROYW1lICYmIHRoaXMuYXBwLmxheW91dFBhZ2VzICYmIHRoaXMuYXBwLmxheW91dFBhZ2VzLmxlbmd0aCAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5pbmNsdWRlcyhwYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVySWQgPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coJycsICd3bVJvdXRlck91dGxldCcsICcnLCAnd21Sb3V0ZXJPdXRsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVySWQgPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coJycsICdnbG9iYWxTcGlubmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKG5vZGUsICdwYWdlLWxvYWQtaW4tcHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlTG9hZFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZShzcGlubmVySWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXBhZ2Utb3V0bGV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5hY3RpdmVQYWdlTG9hZFRpbWUgPSBEYXRlLm5vdygpIC0gcGFnZUxvYWRTdGFydFRpbWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5zdWJzY3JpYmUoJ3BhZ2VBdHRhY2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldChvdXRsZXQ6IFJvdXRlck91dGxldCkge1xuICAgICAgICBpZiAoKG91dGxldCBhcyBhbnkpLl9faXNQYXRjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKG91dGxldCBhcyBhbnkpLl9faXNQYXRjaGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBvQXR0YWNoID0gb3V0bGV0LmF0dGFjaDtcbiAgICAgICAgY29uc3Qgb0RldGFjaCA9IG91dGxldC5kZXRhY2g7XG5cbiAgICAgICAgb3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSA9PiB7XG4gICAgICAgICAgICBvQXR0YWNoLmNhbGwob3V0bGV0LCBjb21wb25lbnRSZWYsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRSZWY/Lmluc3RhbmNlPy5uZ09uQXR0YWNoKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25BdHRhY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvdXRsZXQuZGV0YWNoID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwPy5hY3RpdmVQYWdlPy5uZ09uRGV0YWNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZS5uZ09uRGV0YWNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBvRGV0YWNoLmNhbGwob3V0bGV0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2tpcFRvQXBwQ29udGVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50cnlGb2N1c0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyeUZvY3VzQ29udGVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGVudEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoY29udGVudEVsKSB7XG4gICAgICAgICAgICBjb250ZW50RWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpOyAvLyBFbnN1cmUgaXQncyBmb2N1c2FibGVcbiAgICAgICAgICAgIGNvbnRlbnRFbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29udGVudEVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0cnlDb3VudCA8IDEwKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlGb2N1c0NvbnRlbnQoKSwgMTAwKTsgLy8gUmV0cnkgZXZlcnkgMTAwbXNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGFuZycsIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcC1mb2N1cy1zdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgJGludm9rZVdhdGNoZXJzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24pe1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIkBpZiAoc3RhcnRBcHApIHtcbiAgICBAaWYoZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgPGRpdiBpZD1cImFwcC1mb2N1cy1zdGFydFwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBjbGFzcz1cInNraXBcIiAoY2xpY2spPVwic2tpcFRvQXBwQ29udGVudCgkZXZlbnQpXCI+e3thcHBMb2NhbGUuTEFCRUxfU0tJUF9UT19NQUlOX0NPTlRFTlQgfHwgJ1NraXAgdG8gbWFpbiBjb250ZW50J319PC9hPlxuICAgIH1cbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gIEBpZiAoaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICA8ZGl2IHdtQ29udGFpbmVyIHBhcnRpYWxDb250YWluZXIgY29udGVudD1cIkNvbW1vblwiIGhpZGRlbiBjbGFzcz1cIm5nLWhpZGVcIj48L2Rpdj5cbiAgfVxuICA8YXBwLXNwaW5uZXIgbmFtZT1cImdsb2JhbHNwaW5uZXJcIiBjbGFzc25hbWU9XCJnbG9iYWwtc3Bpbm5lclwiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3Bpbm5lci5hcmlhbGFiZWwgfHwgJ0xvYWRpbmcnXCIgW3Nob3ddPVwic3Bpbm5lci5zaG93XCIgW3NwaW5uZXJtZXNzYWdlc109XCJzcGlubmVyLm1lc3NhZ2VzXCI+PC9hcHAtc3Bpbm5lcj5cbiAgPGRpdiB3bURpYWxvZyBuYW1lPVwib0F1dGhMb2dpbkRpYWxvZ1wiIHRpdGxlPVwiQXBwbGljYXRpb24gaXMgcmVxdWVzdGluZyB5b3UgdG8gc2lnbiBpbiB3aXRoXCJcbiAgICBjbG9zZS5ldmVudD1cImNsb3NlT0F1dGhEaWFsb2coKVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGlhbG9nQm9keT5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtaXRlbXNcIj5cbiAgICAgICAgQGZvciAocHJvdmlkZXIgb2YgcHJvdmlkZXJzQ29uZmlnOyB0cmFjayBwcm92aWRlcikge1xuICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJwcm92aWRlci5pbnZva2UoKVwiPnt7cHJvdmlkZXIubmFtZX19PC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPGRpdiB3bUNvbmZpcm1EaWFsb2cgbmFtZT1cIl9hcHAtY29uZmlybS1kaWFsb2dcIiB0aXRsZS5iaW5kPVwidGl0bGVcIiBtZXNzYWdlLmJpbmQ9XCJtZXNzYWdlXCIgb2t0ZXh0LmJpbmQ9XCJva3RleHRcIlxuICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbHRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICBlc2NhcGUuZXZlbnQ9XCJvbkVzY2FwZSgpXCIgb2suZXZlbnQ9XCJvbk9rKClcIiBjYW5jZWwuZXZlbnQ9XCJvbkNhbmNlbCgpXCIgY2xvc2UuZXZlbnQ9XCJvbkNsb3NlKClcIiBvcGVuZWQuZXZlbnQ9XCJvbk9wZW4oKVwiPjwvZGl2PlxuICBAaWYgKCFpc0FwcGxpY2F0aW9uVHlwZSkge1xuICAgIDxkaXYgIHdtQ29uZmlybURpYWxvZyBuYW1lPVwiUHJlZmFiQ29uZmlybURpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICBlc2NhcGUuZXZlbnQ9XCJvbkVzY2FwZSgpXCIgb2suZXZlbnQ9XCJvbk9rKClcIiBjYW5jZWwuZXZlbnQ9XCJvbkNhbmNlbCgpXCIgY2xvc2UuZXZlbnQ9XCJvbkNsb3NlKClcIiBvcGVuZWQuZXZlbnQ9XCJvbk9wZW4oKVwiPjwvZGl2PlxuICB9XG4gIEBpZiAoIWlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgPGRpdiAgd21BbGVydERpYWxvZyBuYW1lPVwiUHJlZmFiQWxlcnREaWFsb2dcIiB0aXRsZS5iaW5kPVwidGl0bGVcIiBtZXNzYWdlLmJpbmQ9XCJ0ZXh0XCIgb2t0ZXh0LmJpbmQ9XCJva0J1dHRvblRleHRcIlxuICAgICAgY2FuY2VsdGV4dC5iaW5kPVwiY2FuY2VsQnV0dG9uVGV4dFwiIGNsb3NhYmxlPVwiZmFsc2VcIiBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgfVxuICA8ZGl2IHdtQXBwRXh0PjwvZGl2PlxuICA8aSBpZD1cIndtLW1vYmlsZS1kaXNwbGF5XCI+PC9pPlxufVxuPCEtLUR1bW15IGNvbnRhaW5lciB0byBjcmVhdGUgdGhlIGNvbXBvbmVudCBkeW5hbWljYWxseS0tPlxuPG5nLWNvbnRhaW5lciAjZHluYW1pY0NvbXBvbmVudD48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -28,7 +28,7 @@ export class RoleGuard {
28
28
  return Promise.resolve(true);
29
29
  }
30
30
  // current loggedin user doesn't have access to the page that the user is trying to view
31
- this.appManager.notifyApp(this.app.appLocale.LABEL_ACCESS_DENIED || 'Access Denied', 'error');
31
+ this.appManager.notifyAccessDenied(route.routeConfig?.path, this.app.appLocale.LABEL_ACCESS_DENIED || 'Access Denied');
32
32
  return Promise.resolve(false);
33
33
  }
34
34
  else {
@@ -44,4 +44,4 @@ export class RoleGuard {
44
44
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleGuard, decorators: [{
45
45
  type: Injectable
46
46
  }], ctorParameters: () => [{ type: i1.SecurityService }, { type: i2.AuthGuard }, { type: i3.AbstractToasterService }, { type: i3.App }, { type: i4.AppManagerService }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvZ3VhcmRzL3JvbGUuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFHdkMsTUFBTSxPQUFPLFNBQVM7SUFFbEIsWUFDWSxlQUFnQyxFQUNoQyxTQUFvQixFQUNwQixjQUFzQyxFQUN0QyxHQUFRLEVBQ1IsVUFBNkI7UUFKN0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDUixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUN0QyxDQUFDO0lBRUosV0FBVyxDQUFDLEtBQTZCO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRTdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7YUFDbEMsSUFBSSxDQUFDLENBQUMsVUFBbUIsRUFBRSxFQUFFO1lBQzFCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBRW5FLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2dCQUVELHdGQUF3RjtnQkFDeEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixJQUFJLGVBQWUsRUFDekQsT0FBTyxDQUNWLENBQUM7Z0JBRUYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWxDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixvQkFBb0I7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO2dCQUVwRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0F0Q1EsU0FBUzttSEFBVCxTQUFTOzs0RkFBVCxTQUFTO2tCQURyQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFic3RyYWN0VG9hc3RlclNlcnZpY2UsIEFwcCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5cbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4vYXV0aC5ndWFyZCc7XG5pbXBvcnQgeyBBcHBNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwcC5tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtpbnRlcnNlY3Rpb259IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJvbGVHdWFyZCB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhdXRoR3VhcmQ6IEF1dGhHdWFyZCxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogQWJzdHJhY3RUb2FzdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZVxuICAgICkge31cblxuICAgIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRSb2xlcyA9IHJvdXRlLmRhdGEuYWxsb3dlZFJvbGVzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhHdWFyZC5pc0F1dGhlbnRpY2F0ZWQoKVxuICAgICAgICAgICAgLnRoZW4oKGlzTG9nZ2VkSW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNMb2dnZWRJbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyUm9sZXMgPSB0aGlzLnNlY3VyaXR5U2VydmljZS5nZXQoKS51c2VySW5mby51c2VyUm9sZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FjY2VzcyA9IGludGVyc2VjdGlvbihhbGxvd2VkUm9sZXMsIHVzZXJSb2xlcykubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBsb2dnZWRpbiB1c2VyIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhZ2UgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gdmlld1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5QXBwKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYXBwTG9jYWxlLkxBQkVMX0FDQ0VTU19ERU5JRUQgfHwgJ0FjY2VzcyBEZW5pZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gTG9naW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLmhhbmRsZTQwMShyb3V0ZS5yb3V0ZUNvbmZpZy5wYXRoLCB7cXVlcnlQYXJhbXM6IHJvdXRlLnF1ZXJ5UGFyYW1zfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvZ3VhcmRzL3JvbGUuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFHdkMsTUFBTSxPQUFPLFNBQVM7SUFFbEIsWUFDWSxlQUFnQyxFQUNoQyxTQUFvQixFQUNwQixjQUFzQyxFQUN0QyxHQUFRLEVBQ1IsVUFBNkI7UUFKN0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDUixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUN0QyxDQUFDO0lBRUosV0FBVyxDQUFDLEtBQTZCO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRTdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7YUFDbEMsSUFBSSxDQUFDLENBQUMsVUFBbUIsRUFBRSxFQUFFO1lBQzFCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBRW5FLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2dCQUVELHdGQUF3RjtnQkFDeEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FDOUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixJQUFJLGVBQWUsQ0FDNUQsQ0FBQztnQkFFRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7Z0JBRXBGLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXRDUSxTQUFTO21IQUFULFNBQVM7OzRGQUFULFNBQVM7a0JBRHJCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWJzdHJhY3RUb2FzdGVyU2VydmljZSwgQXBwIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcblxuaW1wb3J0IHsgQXV0aEd1YXJkIH0gZnJvbSAnLi9hdXRoLmd1YXJkJztcbmltcG9ydCB7IEFwcE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLm1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQge2ludGVyc2VjdGlvbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm9sZUd1YXJkIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGF1dGhHdWFyZDogQXV0aEd1YXJkLFxuICAgICAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlIGFwcE1hbmFnZXI6IEFwcE1hbmFnZXJTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgYWxsb3dlZFJvbGVzID0gcm91dGUuZGF0YS5hbGxvd2VkUm9sZXM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aEd1YXJkLmlzQXV0aGVudGljYXRlZCgpXG4gICAgICAgICAgICAudGhlbigoaXNMb2dnZWRJbjogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldCgpLnVzZXJJbmZvLnVzZXJSb2xlcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQWNjZXNzID0gaW50ZXJzZWN0aW9uKGFsbG93ZWRSb2xlcywgdXNlclJvbGVzKS5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGxvZ2dlZGluIHVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUgcGFnZSB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnlBY2Nlc3NEZW5pZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZS5yb3V0ZUNvbmZpZz8ucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLmFwcExvY2FsZS5MQUJFTF9BQ0NFU1NfREVOSUVEIHx8ICdBY2Nlc3MgRGVuaWVkJ1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gTG9naW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLmhhbmRsZTQwMShyb3V0ZS5yb3V0ZUNvbmZpZy5wYXRoLCB7cXVlcnlQYXJhbXM6IHJvdXRlLnF1ZXJ5UGFyYW1zfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19