@smarterplan/ngx-smarterplan-core 1.4.16 → 1.4.18

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 (107) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  4. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  5. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
  6. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  7. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  8. package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
  9. package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
  10. package/esm2022/lib/config.mjs +1 -1
  11. package/esm2022/lib/helpers.service.mjs +1 -1
  12. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  18. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  19. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
  20. package/esm2022/lib/mattertagData.mjs +10 -1
  21. package/esm2022/lib/ngx-smarterplan-core.module.mjs +1 -1
  22. package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
  23. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
  24. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
  25. package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  28. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  29. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  30. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  31. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  32. package/esm2022/lib/services/content.service.mjs +1 -1
  33. package/esm2022/lib/services/filter.service.mjs +11 -1
  34. package/esm2022/lib/services/intervention.service.mjs +1 -1
  35. package/esm2022/lib/services/locale.service.mjs +1 -1
  36. package/esm2022/lib/services/matterport-import.service.mjs +10 -3
  37. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-object3d.service.mjs +1 -1
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +455 -9
  42. package/esm2022/lib/services/matterport-tag.service.mjs +99 -10
  43. package/esm2022/lib/services/matterport.service.mjs +95 -49
  44. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  45. package/esm2022/lib/services/models/base-object.service.mjs +31 -4
  46. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  47. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  48. package/esm2022/lib/services/models/domain.service.mjs +1 -1
  49. package/esm2022/lib/services/models/equipment.service.mjs +14 -13
  50. package/esm2022/lib/services/models/event.service.mjs +1 -1
  51. package/esm2022/lib/services/models/feature.service.mjs +8 -7
  52. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  53. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  54. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  55. package/esm2022/lib/services/models/mission.service.mjs +1 -1
  56. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  57. package/esm2022/lib/services/models/node.service.mjs +1 -1
  58. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  59. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  61. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  62. package/esm2022/lib/services/models/poi.service.mjs +62 -50
  63. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  64. package/esm2022/lib/services/models/property.service.mjs +1 -1
  65. package/esm2022/lib/services/models/space.service.mjs +25 -2
  66. package/esm2022/lib/services/models/template.service.mjs +1 -1
  67. package/esm2022/lib/services/models/ticket.service.mjs +27 -8
  68. package/esm2022/lib/services/models/visit.service.mjs +1 -1
  69. package/esm2022/lib/services/models/zone.service.mjs +9 -5
  70. package/esm2022/lib/services/navigator.service.mjs +14 -1
  71. package/esm2022/lib/services/s3.service.mjs +1 -1
  72. package/esm2022/lib/services/search.service.mjs +1 -1
  73. package/esm2022/lib/services/support.service.mjs +1 -1
  74. package/esm2022/lib/services/tag.service.mjs +16 -16
  75. package/esm2022/lib/services/threejs-import.service.mjs +1 -1
  76. package/esm2022/lib/services/threejs.service.mjs +316 -35
  77. package/esm2022/lib/services/user.service.mjs +1 -1
  78. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  79. package/esm2022/lib/services/validators.service.mjs +1 -1
  80. package/esm2022/lib/services/viewer.service.mjs +147 -8
  81. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  82. package/esm2022/lib/services/zoneChange.service.mjs +10 -1
  83. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  84. package/esm2022/lib/types.service.mjs +1 -1
  85. package/esm2022/lib/validators/email.directive.mjs +1 -1
  86. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  87. package/esm2022/lib/validators/number.directive.mjs +1 -1
  88. package/esm2022/lib/validators/text.directive.mjs +1 -1
  89. package/esm2022/public-api.mjs +1 -1
  90. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +5150 -4022
  91. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  92. package/lib/mattertagData.d.ts +4 -0
  93. package/lib/services/matterport-tag-copy.service.d.ts +128 -2
  94. package/lib/services/matterport-tag.service.d.ts +24 -1
  95. package/lib/services/matterport.service.d.ts +12 -3
  96. package/lib/services/models/base-object.service.d.ts +11 -1
  97. package/lib/services/models/equipment.service.d.ts +2 -1
  98. package/lib/services/models/feature.service.d.ts +2 -1
  99. package/lib/services/models/poi.service.d.ts +1 -0
  100. package/lib/services/models/space.service.d.ts +7 -0
  101. package/lib/services/models/ticket.service.d.ts +4 -1
  102. package/lib/services/threejs.service.d.ts +103 -5
  103. package/lib/services/viewer.service.d.ts +39 -1
  104. package/lib/services/zoneChange.service.d.ts +9 -0
  105. package/lib/types.service.d.ts +8 -0
  106. package/package.json +1 -1
  107. package/src/assets/vs-app.json +67 -67
@@ -7,14 +7,15 @@ import { BaseObjectService } from './base-object.service';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "./poi.service";
9
9
  import * as i2 from "./navigation.service";
10
- import * as i3 from "./operation.service";
11
- import * as i4 from "./ticket.service";
12
- import * as i5 from "../navigator.service";
13
- import * as i6 from "../filter.service";
14
- import * as i7 from "../user.service";
15
- import * as i8 from "../viewer.service";
16
- import * as i9 from "@ng-bootstrap/ng-bootstrap";
17
- import * as i10 from "../zoneChange.service";
10
+ import * as i3 from "./visit.service";
11
+ import * as i4 from "./operation.service";
12
+ import * as i5 from "./ticket.service";
13
+ import * as i6 from "../navigator.service";
14
+ import * as i7 from "../filter.service";
15
+ import * as i8 from "../user.service";
16
+ import * as i9 from "../viewer.service";
17
+ import * as i10 from "@ng-bootstrap/ng-bootstrap";
18
+ import * as i11 from "../zoneChange.service";
18
19
  export class EquipmentService extends BaseObjectService {
19
20
  operationService;
20
21
  ticketsService;
@@ -55,8 +56,8 @@ export class EquipmentService extends BaseObjectService {
55
56
  awsKinesisAnalytics; //AWS
56
57
  isMuseumUser = false;
57
58
  destroy$ = new Subject();
58
- constructor(apiInjected, awsKinesisAnalyticsInjected, poiService, navigationService, operationService, ticketsService, navigatorService, filterService, userService, viewerService, modalService, zoneChangeService) {
59
- super(poiService, navigationService);
59
+ constructor(apiInjected, awsKinesisAnalyticsInjected, poiService, navigationService, visitService, operationService, ticketsService, navigatorService, filterService, userService, viewerService, modalService, zoneChangeService) {
60
+ super(poiService, navigationService, visitService);
60
61
  this.operationService = operationService;
61
62
  this.ticketsService = ticketsService;
62
63
  this.navigatorService = navigatorService;
@@ -689,7 +690,7 @@ export class EquipmentService extends BaseObjectService {
689
690
  this.destroy$.next(true);
690
691
  this.destroy$.complete();
691
692
  }
692
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EquipmentService, deps: [{ token: 'currentAPIService' }, { token: 'currentAwsKinesisAnalyticsService' }, { token: i1.PoiService }, { token: i2.NavigationService }, { token: i3.OperationService }, { token: i4.TicketsService }, { token: i5.NavigatorService }, { token: i6.FilterService }, { token: i7.BaseUserService }, { token: i8.ViewerService }, { token: i9.NgbModal }, { token: i10.ZoneChangeService }], target: i0.ɵɵFactoryTarget.Injectable });
693
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EquipmentService, deps: [{ token: 'currentAPIService' }, { token: 'currentAwsKinesisAnalyticsService' }, { token: i1.PoiService }, { token: i2.NavigationService }, { token: i3.VisitService }, { token: i4.OperationService }, { token: i5.TicketsService }, { token: i6.NavigatorService }, { token: i7.FilterService }, { token: i8.BaseUserService }, { token: i9.ViewerService }, { token: i10.NgbModal }, { token: i11.ZoneChangeService }], target: i0.ɵɵFactoryTarget.Injectable });
693
694
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EquipmentService, providedIn: 'root' });
694
695
  }
695
696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EquipmentService, decorators: [{
@@ -703,5 +704,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
703
704
  }] }, { type: undefined, decorators: [{
704
705
  type: Inject,
705
706
  args: ['currentAwsKinesisAnalyticsService']
706
- }] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.OperationService }, { type: i4.TicketsService }, { type: i5.NavigatorService }, { type: i6.FilterService }, { type: i7.BaseUserService }, { type: i8.ViewerService }, { type: i9.NgbModal }, { type: i10.ZoneChangeService }] });
707
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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QTBEakIsbUJBQW1CLGFBQ25CLG1DQUFtQzs0R0EzRGxDLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTJESSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaCxcbiAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LFxuICB3YWl0VW50aWwsXG59IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vLi4vbWF0dGVydGFnRGF0YSc7XG5pbXBvcnQge1xuICBOb3RlLFxuICBab25lLFxuICBFcXVpcG1lbnQsXG4gIEVxdWlwbWVudERvY3VtZW50LFxuICBUaWNrZXQsXG4gIFR5cGVOb3RlLFxuICBNaXNzaW9uLFxuICBFdmVudFN0YXR1cyxcbiAgRXZlbnRUeXBlLFxuICBPcGVyYXRpb24sXG4gIFBPSSxcbiAgUG9pVHlwZSxcbiAgUm9sZVN0YXR1cyxcbiAgU3BNb2R1bGUsXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICBkZWxldGVGcm9tUzMsXG4gIGdldFNpZ25lZEZpbGUsXG4gIGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50LFxuICB1cGxvYWRGaWxlVG9TMyxcbn0gZnJvbSAnLi4vczMuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tICcuLi91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gJy4uL3ZpZXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLW9iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlcmF0aW9uU2VydmljZSB9IGZyb20gJy4vb3BlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vcG9pLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuL3RpY2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFpvbmVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uL3pvbmVDaGFuZ2Uuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXF1aXBtZW50U2VydmljZSBleHRlbmRzIEJhc2VPYmplY3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcmVmaXggPSB7XG4gICAgdGVjaG5pY2FsOiAnZXF1aXBtZW50cy9ub3RlL3RlY2huaWNhbC8nLFxuICAgIGltYWdlOiAnZXF1aXBtZW50cy9ub3RlL2ltYWdlLycsXG4gICAgZmluYW5jaWFsOiAnZXF1aXBtZW50cy9ub3RlL2ZpbmFuY2lhbC8nLFxuICAgIGluZm9ybWF0aW9uOiAnZXF1aXBtZW50cy9ub3RlL2luZm9ybWF0aW9uLycsXG4gICAgb3RoZXI6ICdlcXVpcG1lbnRzL25vdGUvb3RoZXIvJyxcbiAgICBjb250cmFjdHVhbDogJ2VxdWlwbWVudHMvbm90ZS9jb250cmFjdHVhbC8nLFxuICB9O1xuXG4gIGVxdWlwbWVudHNVcGRhdGVkOiBTdWJqZWN0PHtcbiAgICBzcGFjZTogRXF1aXBtZW50W107XG4gICAgem9uZTogRXF1aXBtZW50W107XG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjdXJyZW50RXF1aXBtZW50czoge1xuICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgRXF1aXBtZW50W10+O1xuICB9ID0ge1xuICAgICAgc3BhY2U6IFtdLFxuICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcbiAgICB9O1xuXG4gIGVxdWlwbWVudHNUYWdzOiBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4obnVsbCk7XG5cbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XG5cbiAgY3VycmVudFpvbmU6IFpvbmU7XG5cbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcblxuICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcblxuICAvKiogTnVsbCBtZWFucyB3ZSBkbyBub3QgYXBwbHkgYSBmaWx0ZXIsIGVtcHR5IGFycmF5IChbXSksIG1lYW5zIHdlIHRoYXQgd2UgaGlkZSBhbGwgZXF1aXBtZW50ICovXG4gIGVxdWlwbWVudERvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xuXG4gIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xuXG4gIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xuXG4gIGRlbGV0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY3JlYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICB1cGRhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHNlbGVjdGVkRmxvb3I6IFpvbmUgPSBudWxsO1xuXG4gIEFQSTogYW55OyAvL0FXU1xuICBhd3NLaW5lc2lzQW5hbHl0aWNzOiBhbnk7IC8vQVdTXG5cbiAgaXNNdXNldW1Vc2VyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXG4gICAgYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkOiBhbnksXG4gICAgcG9pU2VydmljZTogUG9pU2VydmljZSxcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9pU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UpO1xuXG4gICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcbiAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgPSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ7XG5cbiAgICB0aGlzLmlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gICAgdGhpcy51c2VyU2VydmljZS5pc0NoYW5nZWQuc3Vic2NyaWJlKChpc0Nvbm5lY3RlZCkgPT4ge1xuICAgICAgaWYgKGlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKSA9PiB7XG4gICAgICBpZiAoZmxvb3IpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gZmxvb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWFkRXF1aXBtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0RXF1aXBtZW50KGlkKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwKSA9PiB7XG4gICAgICBsZXQgZXF1aXA6IEVxdWlwbWVudDtcbiAgICAgIGlmIChyZWNlaXZlZEVxdWlwKSB7XG4gICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcbiAgICAgICAgZXF1aXAgPSBhd2FpdCB0aGlzLmdldFNpZ25lZFVybHNGb3JFcXVpcG1lbnQocmVjZWl2ZWRFcXVpcCk7XG4gICAgICAgIGlmIChlcXVpcC5kb21haW4pIHtcbiAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluLnBhcmVudElEKSB7XG4gICAgICAgICAgICBlcXVpcC5jaGlsZERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbi5wYXJlbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVxdWlwLnN1YmVxdWlwbWVudHNJRHMpIHtcbiAgICAgICAgICBjb25zdCBzdWJFcXVpcHMgPSBbXTtcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGVxdWlwLnN1YmVxdWlwbWVudHNJRHMubWFwKGFzeW5jIChzdWJJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLkdldEVxdWlwbWVudChzdWJJZCk7XG4gICAgICAgICAgICAgIGlmIChzdWJFcXVpcCkge1xuICAgICAgICAgICAgICAgIHN1YkVxdWlwcy5wdXNoKHN1YkVxdWlwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGVxdWlwLnN1YkVxdWlwbWVudHMgPSBzdWJFcXVpcHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlcXVpcDtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcbiAgICBlcXVpcDogRXF1aXBtZW50LFxuICAgIGltYWdlRmlsZTogRmlsZSxcbiAgICBkb2N1bWVudEZpbGU6IEZpbGVcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQgfCB2b2lkPiB7XG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGVxdWlwKTtcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xuICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLmdldEluc3RhbmNlKCkucmVjb3JkKFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICdPYmplY3QgQ3JlYXRpb24nLFxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ2VxdWlwbWVudCcsXG4gICAgICAgICAgICBwb2k6IGVxdWlwLFxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuY3VycmVudFpvbmUuaWQsXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyZWFtTmFtZTogJ3NtYXJ0ZXJwbGFuS2luZXNpcy1hbmFseXRpY3MnLFxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcbiAgICAgICAgfSxcbiAgICAgICAgJ0FXU0tpbmVzaXMnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5BUEkuQ3JlYXRlRXF1aXBtZW50KGVxdWlwKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwbWVudCkgPT4ge1xuICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcbiAgICAgIGlmIChlcXVpcG1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCBjcmVhdGVkOicsIGVxdWlwbWVudCk7XG4gICAgICAgIGlmIChkb2N1bWVudEZpbGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGRvY3VtZW50RmlsZSwgVHlwZU5vdGUuVEVDSE5JQ0FMKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1hZ2VGaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGltYWdlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlcXVpcG1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgIGNvbnN0IGVxdWlwbWVudCA9IHsgLi4uZXF1aXAgfTtcbiAgICBpZiAoZXF1aXBtZW50Lm5vdGVzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRvY3MgPSBbXTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBlcXVpcG1lbnQubm90ZXMuaXRlbXMubWFwKGFzeW5jIChub3RlKSA9PiB7XG4gICAgICAgICAgZXF1aXBtZW50LmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcG1lbnQpO1xuICAgICAgICAgIGlmIChub3RlLmF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJylbbGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShub3RlLmF0dGFjaG1lbnQpO1xuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgZG9jcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IG5vdGUuYXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICB1cmxTaWduZWQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgbm90ZUlEOiBub3RlLmlkLFxuICAgICAgICAgICAgICB9IGFzIEVxdWlwbWVudERvY3VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgZXF1aXBtZW50LmRvY3VtZW50cyA9IGRvY3M7XG4gICAgICByZXR1cm4gZXF1aXBtZW50O1xuICAgIH1cbiAgICByZXR1cm4gZXF1aXBtZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICBjb25zdCBvcGVyYXRpb25zID0gdGlja2V0Lm9wZXJhdGlvbnMuaXRlbXM7XG4gICAgaWYgKG9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgb3BlcmF0aW9ucy5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpXG4gICAgICApO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wZXJhdGlvbnMubWFwKGFzeW5jIChvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICBvcGVyYXRpb24uZXF1aXBtZW50ID0gYXdhaXQgdGhpcy5yZWFkRXF1aXBtZW50KG9wZXJhdGlvbi5lcXVpcG1lbnRJRCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICAvLyB0byBrZWVwIHRoZSBzb3J0aW5nIGJ5IGNyZWF0ZWRBdFxuICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobykgPT4gby5lcXVpcG1lbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICAvLyBzcGxpdCBieSAxMDBcbiAgICBjb25zdCBsaW1pdCA9IDEwMDtcbiAgICBsZXQgZXF1aXBzVG9rZW4gPSB7IGVxdWlwczogW10sIG5leHRUb2tlbjogbnVsbCB9O1xuICAgIGRvIHtcbiAgICAgIGVxdWlwc1Rva2VuID0gYXdhaXQgdGhpcy5tZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXG4gICAgICAgIHNwYWNlSUQsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBlcXVpcHNUb2tlblxuICAgICAgKTtcbiAgICB9IHdoaWxlIChlcXVpcHNUb2tlbi5uZXh0VG9rZW4pO1xuICAgIHJldHVybiBlcXVpcHNUb2tlbi5lcXVpcHM7XG4gIH1cblxuICBhc3luYyBtZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXG4gICAgc3BhY2VJRDogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZXF1aXBzVG9rZW46IHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsIH1cbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCB9PiB7XG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xuICAgICAgLkVxdWlwbWVudHNCeVNwYWNlKFxuICAgICAgICBzcGFjZUlELFxuICAgICAgICBudWxsLFxuICAgICAgICAnREVTQycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBlcXVpcHNUb2tlbi5uZXh0VG9rZW4gLy8gbmV4dFRva2VuXG4gICAgICApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgZXF1aXBzTGltaXQgPSByZXNwb25zZS5pdGVtcztcbiAgICAgICAgY29uc3QgZXF1aXBzT2JqZWN0ID0ge1xuICAgICAgICAgIGVxdWlwczogWy4uLmVxdWlwc1Rva2VuLmVxdWlwcywgLi4uZXF1aXBzTGltaXRdLFxuICAgICAgICAgIG5leHRUb2tlbjogcmVzcG9uc2UubmV4dFRva2VuLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXF1aXBzT2JqZWN0O1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRJbWFnZUZvckFsbEVxdWlwbWVudHMoXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXG4gICAgaW1hZ2VGaWxlOiBGaWxlXG4gICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICBpZiAoZXF1aXBtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgJ0JBVENIJykudGhlbihcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIGNvbnN0IGVxdWlwcyA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxuICAgICAgICAgICAgICBlcXVpcC5zcGFjZUlEXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxuICAgICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXG4gICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XG4gICAgICAgICAgICAgIGlkOiBlcXVpcC5pZCxcbiAgICAgICAgICAgICAgcGhvdG86IHVybCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXF1aXBzLnB1c2godXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVxdWlwcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIE5vdGUgYXR0YWNoZWQgdG8gYW4gZXF1aXBtZW50IGZyb20gYW4gUzMga2V5IHRoYXQgQUxSRUFEWSBleGlzdHNcbiAgICogKGFzIG9wcG9zZWQgdG8gdXBsb2FkRG9jL3VwbG9hZEltYWdlLCB3aGljaCB1cGxvYWQgYSBmcmVzaCBicm93c2VyIEZpbGUpLlxuICAgKiBVc2VkIHdoZW4gZHVwbGljYXRpbmcgZXF1aXBtZW50IGF0dGFjaG1lbnRzIGR1cmluZyBhIGNyb3NzLXZpc2l0IGNvcHk6IHRoZVxuICAgKiBTMyBvYmplY3QgaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gcGh5c2ljYWxseSBjb3BpZWQgYnkgdGhlIGNhbGxlciBiZWZvcmVoYW5kLFxuICAgKiBzbyB0aGlzIG9ubHkgbmVlZHMgdG8gcmVjb3JkIHRoZSBOb3RlIHBvaW50aW5nIGF0IHRoYXQgbmV3IGtleS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZU5vdGVXaXRoRXhpc3RpbmdBdHRhY2htZW50KFxuICAgIGVxdWlwbWVudElEOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudEtleTogc3RyaW5nLFxuICAgIHR5cGU6IFR5cGVOb3RlLFxuICAgIG93bmVyTWlzc2lvbklEOiBzdHJpbmcgfCBudWxsLFxuICAgIGRhdGVzOiB7IHNpZ25EYXRlPzogbnVtYmVyIHwgbnVsbDsgZXhwaXJhdGlvbkRhdGU/OiBudW1iZXIgfCBudWxsIH0gPSB7fVxuICApOiBQcm9taXNlPE5vdGU+IHtcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgYXR0YWNobWVudDogYXR0YWNobWVudEtleSxcbiAgICAgIHR5cGUsXG4gICAgICBlcXVpcG1lbnRJRCxcbiAgICAgIG93bmVyTWlzc2lvbklELFxuICAgICAgc2lnbkRhdGU6IGRhdGVzLnNpZ25EYXRlID8/IG51bGwsXG4gICAgICBleHBpcmF0aW9uRGF0ZTogZGF0ZXMuZXhwaXJhdGlvbkRhdGUgPz8gbnVsbCxcbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8Tm90ZT4ge1xuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyh0aGlzLnByZWZpeC5pbWFnZSwgaW1hZ2VGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXG4gICAgICBhc3luYyAodXJsKSA9PiB7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oXG4gICAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgbm90ZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcbiAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxuICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwbWVudC5pZCxcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRXF1aXBtZW50KHtcbiAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXG4gICAgICAgICAgICBwaG90bzogdXJsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBub3RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnQoXG4gICAgZXF1aXA6IGFueSxcbiAgICBmaWxlOiBGaWxlID0gbnVsbCxcbiAgICBub3RlVHlwZTogVHlwZU5vdGUgPSBudWxsXG4gICk6IFByb21pc2U8RXF1aXBtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xuICAgICAgLlVwZGF0ZUVxdWlwbWVudChlcXVpcClcbiAgICAgIC50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwbWVudCkgPT4ge1xuICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xuICAgICAgICBpZiAoZXF1aXBtZW50KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCB1cGRhdGVkOicsIGVxdWlwbWVudCk7XG4gICAgICAgICAgaWYgKG5vdGVUeXBlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5vdGVUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuSU1BR0U6XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGZpbGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZmlsZSwgbm90ZVR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXF1aXBtZW50O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRQcmVmaXhEb2ModHlwZTogVHlwZU5vdGUpIHtcbiAgICBsZXQgcHJlZml4O1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUeXBlTm90ZS5JTkZPUk1BVElPTjpcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUeXBlTm90ZS5GSU5BTkNJQUw6XG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVOb3RlLkNPTlRSQUNUVUFMOlxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5jb250cmFjdHVhbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVOb3RlLk9USEVSOlxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC50ZWNobmljYWw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcbiAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcbiAgICBkb2N1bWVudEZpbGU6IEZpbGUsXG4gICAgdHlwZTogVHlwZU5vdGVcbiAgKSB7XG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xuICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCB1cGRhdGVMaXN0ID0gW107XG4gICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXAuc3BhY2VJRCk7XG4gICAgICAgIGNvbnN0IG5ld0VxdWlwID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcbiAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlTGlzdC5wdXNoKG5ld0VxdWlwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVMaXN0O1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyB1cGxvYWREb2MoXG4gICAgZXF1aXBtZW50OiBFcXVpcG1lbnQsXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxuICAgIHR5cGU6IFR5cGVOb3RlXG4gICk6IFByb21pc2U8Tm90ZT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMocHJlZml4LCBkb2N1bWVudEZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwbWVudC5pZCxcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUVxdWlwbWVudChlcXVpcDogRXF1aXBtZW50KTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUVxdWlwbWVudCh7IGlkOiBlcXVpcC5pZCB9KTtcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcblxuICAgIC8vIGRlbGV0ZSBQT0lcbiAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XG4gICAgaWYgKHBvaSkge1xuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShwb2kuaWQpO1xuICAgIH1cbiAgICAvLyBkZWxldGUgbm90ZXMgcmVsYXRlZFxuICAgIGlmIChlcXVpcC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZXF1aXAubm90ZXMuaXRlbXMubWFwKGFzeW5jIChub3RlOiBOb3RlKSA9PiB7XG4gICAgICAgICAgLy8gZGVsZXRlIGZpbGVzIGZyb20gUzNcbiAgICAgICAgICAvKiogTm90IHNoYXJlZCB3aXRoIG90aGVyIGVxdWlwbWVudCAqL1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vdGUuYXR0YWNobWVudCAmJlxuICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMobm90ZS5hdHRhY2htZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZU5vdGUoeyBpZDogbm90ZS5pZCB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGRlbGV0ZSBvcGVyYXRpb25zIChyZW1vdmUgZnJvbSBsaW5rZWQgdGlja2V0cylcbiAgICBhd2FpdCB0aGlzLm9wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uc0ZvckVxdWlwbWVudChlcXVpcC5pZCk7XG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnRMb2NhdGlvbihcbiAgICBlcXVpcDogRXF1aXBtZW50LFxuICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcbiAgKTogUHJvbWlzZTxQT0k+IHtcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcbiAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxuICAgICAgdHlwZTogUG9pVHlwZS5FUVVJUE1FTlQsXG4gICAgICBlbGVtZW50SUQ6IGVxdWlwLmlkLFxuICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcbiAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiB0YWdEYXRhLmdldFN3ZWVwSUQoKSxcbiAgICB9IGFzIFBPSTtcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XG4gICAgcmV0dXJuIHBvaTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVRpY2tldEZyb21FcXVpcG1lbnQoXG4gICAgdGlja2V0OiBUaWNrZXQsXG4gICAgZXF1aXA6IEVxdWlwbWVudFxuICApOiBQcm9taXNlPE9wZXJhdGlvbj4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbkVxdWlwID1cbiAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uVG9EZWxldGUgPSBvcGVyYXRpb25FcXVpcC5maW5kKFxuICAgICAgKG9wKSA9PiBvcC50aWNrZXRJRCA9PT0gdGlja2V0LmlkXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25TZXJ2aWNlXG4gICAgICAuZGVsZXRlT3BlcmF0aW9uKG9wZXJhdGlvblRvRGVsZXRlLmlkKVxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnRpY2tldHNTZXJ2aWNlLmFkZEV2ZW50VG9UaWNrZXQodGlja2V0IGFzIFRpY2tldCwge1xuICAgICAgICAgIHRpdGxlOiAnRXF1aXBlbWVudCByZXRpcsOpIGR1IHRpY2tldCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXG4gICAgICAgICAgc3RhdHVzOiBFdmVudFN0YXR1cy5VTkxJTktFRF9GUk9NX0VRVUlQTUVOVCxcbiAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuVElDS0VULFxuICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxuICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeSh7IGVxdWlwbWVudDogZXF1aXAubmFtZSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGluaXRFcXVpcHMoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEIHx8IHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gdHJ1ZTtcbiAgICBsZXQgZXFMaXN0ID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2UodGhpcy5jdXJyZW50U3BhY2VJRCk7XG4gICAgZXFMaXN0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxuICAgICAgZXFMaXN0XG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xuICAgIGlmIChlcUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gZXFMaXN0LmZpbHRlcihcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMubWFwKGFzeW5jIChlcXVpcCkgPT4ge1xuICAgICAgICAgIGVxdWlwLmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcbiAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IChhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIsXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBmaWx0ZXJlZEVxdWlwcyk7XG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xuICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXG4gICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50RXF1aXBtZW50cyk7XG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJGb3JTcGFjZShcbiAgICBzcGFjZUlELFxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cbiAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xuICAgIGxldCByZXN1bHRzID0gW107XG5cbiAgICBjb25zdCBzcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQpO1xuICAgIGlmIChzcGFjZU1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNvbnN0IGNhblNlZUVxdWlwcyA9IHNwYWNlTWlzc2lvbnMuc29tZShcbiAgICAgIChtKSA9PlxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLm1hbmFnZXJzLmluY2x1ZGVzKG0ucm9sZSkgfHxcbiAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0VcbiAgICApO1xuICAgIGlmICghY2FuU2VlRXF1aXBzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGRvbWFpbnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG0gb2Ygc3BhY2VNaXNzaW9ucykge1xuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xuICAgIH1cbiAgICBpZiAoZG9tYWlucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRCk7XG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxuICAgIC8vICAgICByZXN1bHRzLFxuICAgIC8vICAgICBkb21haW5zLFxuICAgIC8vICk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhc3luYyB1cGRhdGVJY29uRm9yQWxsRXF1aXBtZW50c0luU3BhY2UoXG4gICAgdGFnSWNvbjogc3RyaW5nLFxuICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICBkb21haW5JRDogc3RyaW5nID0gbnVsbFxuICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgcG9pczogUE9JW10gfT4ge1xuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcbiAgICBpZiAoZG9tYWluSUQpIHtcbiAgICAgIGVxdWlwcyA9IGVxdWlwcy5maWx0ZXIoKGVxdWlwKSA9PiBlcXVpcC5kb21haW5JRCA9PT0gZG9tYWluSUQpO1xuICAgIH1cbiAgICBjb25zdCBwb2lzID0gYXdhaXQgdGhpcy51cGRhdGVJY29uRm9yQWxsT2JqZWN0cyhlcXVpcHMsIHRhZ0ljb24pO1xuICAgIHJldHVybiB7IGVxdWlwcywgcG9pcyB9O1xuICB9XG5cbiAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFyY2hpdmVkIHRoaXMgZXF1aXBtZW50ICovXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXG4gICAgICA/IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRC5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcbiAgICAgIClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBzZXRBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCwgYXJjaGl2ZWQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXG4gICAgICA/IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRFxuICAgICAgOiBbXTtcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcblxuICAgIGFyY2hpdmVkTGlzdCA9IGFyY2hpdmVkTGlzdC5maWx0ZXIoKG0pID0+IG0gIT09IG1pc3Npb25JRCk7XG5cbiAgICBpZiAoYXJjaGl2ZWQpIHtcbiAgICAgIGFyY2hpdmVkTGlzdC5wdXNoKG1pc3Npb25JRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRXF1aXBtZW50KHtcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXG4gICAgICBhcmNoaXZlZEZvck1pc3Npb25JRDogYXJjaGl2ZWRMaXN0LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50KSB7XG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xuICAgIGF3YWl0IHRoaXMuQVBJLkRlbGV0ZU5vdGUoeyBpZDogZG9jdW1lbnRfLm5vdGVJRCB9KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9FcXVpcG1lbnRJbjNEKFxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBsZXQgdXJsID0gYHZpc2l0LyR7ZXF1aXBtZW50LnNwYWNlSUR9YDtcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xuICAgICAgdXJsICs9IGAvZXF1aXAvJHtlcXVpcG1lbnQuaWR9YDtcbiAgICB9XG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXG4gICAgICBgJHtlcXVpcG1lbnQuaWR9YFxuICAgICk7XG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcblxuICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubW9kZWwzRCkge1xuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcbiAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBtb3Zpbmcgd2l0aGluIHRoZSBzYW1lIDNEIG1vZGVsXG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9kZWwzRCcpO1xuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XG4gICAgICAgIC8vIHdlIGFkZCB0YWcgdG8gdGhlIHZpc2l0XG4gICAgICAgIGNvbnN0IHBvaSA9IGVxdWlwbWVudC5wb2lzLml0ZW1zWzBdO1xuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAvLyB3ZSBmb3JjZSBhZGQgYmVjYXVzZSB3ZSBtaWdodCBiZSBpbiBhbiBhbm90aGVyIHpvbmVcbiAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlcXVpcG1lbnQsIHBvaSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXG4gICAgICAgIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoKFxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLFxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxuICAgICAgICAgIGVxdWlwbWVudC5zcGFjZUlELFxuICAgICAgICAgIHsgc3dlZXBUb01vdmU6IHJlc3VsdC5zd2VlcCwgcm90YXRpb246IHJlc3VsdC5yb3RhdGlvbiB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUVxdWlwc0ZvclpvbmUoKSB7XG4gICAgdGhpcy51cGRhdGluZy5uZXh0KHRydWUpO1xuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xuICAgIGlmICh0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5oYXModGhpcy56b25lSURGaWx0ZXIpXG4gICAgICApIHtcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaSBoYXZlIGVxdWlwcyBmb3IgdGhpcyB6b25lXCIsIGZpbHRlcmVkRXF1aXBzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcbiAgICAgICAgKSkgYXMgRXF1aXBtZW50W107XG5cbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcbiAgICAgICAgICAuLi5maWx0ZXJlZEVxdWlwcyxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcbiAgICAgICAgICB0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlclxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KGZpbHRlcmVkRXF1aXBzKTsgLy8gYWRkaW5nIHRhZ3Mgb25seSBmb3IgdGhlIGN1cnJlbnQgem9uZVxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgIHpvbmU6IGZpbHRlcmVkRXF1aXBzLFxuICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgIH1cbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJ1cGRhdGUgZHVlIHRvIGRlbGV0ZVwiLCBkZWxldGVkRXF1aXBtZW50KTtcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxuICAgICk7XG4gICAgaWYgKGVxdWlwKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xuICAgICAgY29uc3QgZXF1aXBUb0RlbGV0ZSA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgLmdldCh6b25lKVxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xuICAgICAgaWYgKGVxdWlwVG9EZWxldGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXG4gICAgICAgICAgLmdldCh6b25lKVxuICAgICAgICAgIC5pbmRleE9mKGVxdWlwVG9EZWxldGUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgfVxuXG4gIHVwZGF0ZUR1ZVRvQ3JlYXRlKGNyZWF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgLmdldCh0aGlzLnpvbmVJREZpbHRlcilcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gIH1cblxuICB1cGRhdGVEdWVUb0VxdWlwVXBkYXRlZCh1cGRhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xuICAgIGNvbnN0IGVxdWlwID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5maW5kKFxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcbiAgICApO1xuICAgIGlmIChlcXVpcCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xuICAgICAgaWYgKHRoaXMuaXNBcmNoaXZlZChlcXVpcCkpIHtcbiAgICAgICAgLy8gd2UgcmVtb3ZlIGFyY2hpdmVkIGVxdWlwbWVudFxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAuZ2V0KHpvbmUpXG4gICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gdXBkYXRlZEVxdWlwLmlkKTtcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAgIC5nZXQoem9uZSlcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcbiAgICAgICAgaWYgKHRoaXMuaXNBcmNoaXZlZChlcXVpcCkpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgIC5nZXQoem9uZSlcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gIH1cblxuICBpbml0U3Vic2NyaXB0aW9ucygpIHtcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5nZXRTcE1vZHVsZSgpID09PSBTcE1vZHVsZS5NVVNFVU0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh6b25lKSA9PiB7XG4gICAgICAgIGlmICghem9uZSB8fCAhdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcbiAgICAgICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQobnVsbCk7XG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBudWxsIH0pO1xuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzID0ge1xuICAgICAgICAgICAgc3BhY2U6IFtdLFxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoem9uZS5pZCAhPT0gdGhpcy56b25lSURGaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQgPT09IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcbiAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmRlbGV0ZU9ic2VydmFibGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmNyZWF0ZU9ic2VydmFibGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9DcmVhdGUoZXF1aXBtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU9ic2VydmFibGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9FcXVpcFVwZGF0ZWQoZXF1aXBtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
707
+ }] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.VisitService }, { type: i4.OperationService }, { type: i5.TicketsService }, { type: i6.NavigatorService }, { type: i7.FilterService }, { type: i8.BaseUserService }, { type: i9.ViewerService }, { type: i10.NgbModal }, { type: i11.ZoneChangeService }] });
708
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBVzFELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFnRTNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF0RUYsTUFBTSxHQUFHO1FBQ2YsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLFdBQVcsRUFBRSw4QkFBOEI7S0FDNUMsQ0FBQztJQUVGLGlCQUFpQixHQUdaLElBQUksT0FBTyxFQUFFLENBQUM7SUFFbkIsaUJBQWlCLEdBR2I7UUFDQSxLQUFLLEVBQUUsRUFBRTtR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LENBQUM7d0dBcjFCVSxnQkFBZ0Isa0JBMERqQixtQkFBbUIsYUFDbkIsbUNBQW1DOzRHQTNEbEMsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBMkRJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2gsXHJcbiAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LFxyXG4gIHdhaXRVbnRpbCxcclxufSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgTm90ZSxcclxuICBab25lLFxyXG4gIEVxdWlwbWVudCxcclxuICBFcXVpcG1lbnREb2N1bWVudCxcclxuICBUaWNrZXQsXHJcbiAgVHlwZU5vdGUsXHJcbiAgTWlzc2lvbixcclxuICBFdmVudFN0YXR1cyxcclxuICBFdmVudFR5cGUsXHJcbiAgT3BlcmF0aW9uLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFJvbGVTdGF0dXMsXHJcbiAgU3BNb2R1bGUsXHJcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgZGVsZXRlRnJvbVMzLFxyXG4gIGdldFNpZ25lZEZpbGUsXHJcbiAgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQsXHJcbiAgdXBsb2FkRmlsZVRvUzMsXHJcbn0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL29wZXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaXNpdFNlcnZpY2UgfSBmcm9tICcuL3Zpc2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4vdGlja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lQ2hhbmdlU2VydmljZSB9IGZyb20gXCIuLi96b25lQ2hhbmdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXVpcG1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU9iamVjdFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJlZml4ID0ge1xyXG4gICAgdGVjaG5pY2FsOiAnZXF1aXBtZW50cy9ub3RlL3RlY2huaWNhbC8nLFxyXG4gICAgaW1hZ2U6ICdlcXVpcG1lbnRzL25vdGUvaW1hZ2UvJyxcclxuICAgIGZpbmFuY2lhbDogJ2VxdWlwbWVudHMvbm90ZS9maW5hbmNpYWwvJyxcclxuICAgIGluZm9ybWF0aW9uOiAnZXF1aXBtZW50cy9ub3RlL2luZm9ybWF0aW9uLycsXHJcbiAgICBvdGhlcjogJ2VxdWlwbWVudHMvbm90ZS9vdGhlci8nLFxyXG4gICAgY29udHJhY3R1YWw6ICdlcXVpcG1lbnRzL25vdGUvY29udHJhY3R1YWwvJyxcclxuICB9O1xyXG5cclxuICBlcXVpcG1lbnRzVXBkYXRlZDogU3ViamVjdDx7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lOiBFcXVpcG1lbnRbXTtcclxuICB9PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGN1cnJlbnRFcXVpcG1lbnRzOiB7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgRXF1aXBtZW50W10+O1xyXG4gIH0gPSB7XHJcbiAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgIH07XHJcblxyXG4gIGVxdWlwbWVudHNUYWdzOiBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4obnVsbCk7XHJcblxyXG4gIHpvbmVJREZpbHRlcjogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50Wm9uZTogWm9uZTtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgZmxvb3JzUGVyU3BhY2U6IFpvbmVbXSA9IG51bGw7XHJcblxyXG4gIC8qKiBOdWxsIG1lYW5zIHdlIGRvIG5vdCBhcHBseSBhIGZpbHRlciwgZW1wdHkgYXJyYXkgKFtdKSwgbWVhbnMgd2UgdGhhdCB3ZSBoaWRlIGFsbCBlcXVpcG1lbnQgKi9cclxuICBlcXVpcG1lbnREb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcclxuXHJcbiAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50U3dlZXA6IHN0cmluZztcclxuXHJcbiAgZGVsZXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3JlYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdXBkYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gIEFQSTogYW55OyAvL0FXU1xyXG4gIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcclxuXHJcbiAgaXNNdXNldW1Vc2VyID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXHJcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICB2aXNpdFNlcnZpY2U6IFZpc2l0U2VydmljZSxcclxuICAgIHByaXZhdGUgb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHBvaVNlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCB2aXNpdFNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgPSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ7XHJcblxyXG4gICAgdGhpcy5pc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XHJcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzQ2hhbmdlZC5zdWJzY3JpYmUoKGlzQ29ubmVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2UuZmxvb3JIYXNDaGFuZ2VkLnN1YnNjcmliZSgoZmxvb3IpID0+IHtcclxuICAgICAgaWYgKGZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gZmxvb3I7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVhZEVxdWlwbWVudChpZDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0RXF1aXBtZW50KGlkKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwKSA9PiB7XHJcbiAgICAgIGxldCBlcXVpcDogRXF1aXBtZW50O1xyXG4gICAgICBpZiAocmVjZWl2ZWRFcXVpcCkge1xyXG4gICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcclxuICAgICAgICBlcXVpcCA9IGF3YWl0IHRoaXMuZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChyZWNlaXZlZEVxdWlwKTtcclxuICAgICAgICBpZiAoZXF1aXAuZG9tYWluKSB7XHJcbiAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluLnBhcmVudElEKSB7XHJcbiAgICAgICAgICAgIGVxdWlwLmNoaWxkRG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgICBlcXVpcC5wYXJlbnREb21haW4gPSBlcXVpcC5kb21haW4ucGFyZW50O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXF1aXAuc3ViZXF1aXBtZW50c0lEcykge1xyXG4gICAgICAgICAgY29uc3Qgc3ViRXF1aXBzID0gW107XHJcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZXF1aXAuc3ViZXF1aXBtZW50c0lEcy5tYXAoYXN5bmMgKHN1YklkKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViRXF1aXAgPSBhd2FpdCB0aGlzLkFQSS5HZXRFcXVpcG1lbnQoc3ViSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChzdWJFcXVpcCkge1xyXG4gICAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcXVpcC5zdWJFcXVpcG1lbnRzID0gc3ViRXF1aXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXF1aXA7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBFcXVpcG1lbnQsXHJcbiAgICBpbWFnZUZpbGU6IEZpbGUsXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGVcclxuICApOiBQcm9taXNlPEVxdWlwbWVudCB8IHZvaWQ+IHtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChlcXVpcCk7XHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ2VxdWlwbWVudCcsXHJcbiAgICAgICAgICAgIHBvaTogZXF1aXAsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlclNlcnZpY2UuY3UsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgem9uZUlkOiB0aGlzLmN1cnJlbnRab25lLmlkLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuQVBJLkNyZWF0ZUVxdWlwbWVudChlcXVpcCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgaWYgKGVxdWlwbWVudCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgY3JlYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgIGlmIChkb2N1bWVudEZpbGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZG9jdW1lbnRGaWxlLCBUeXBlTm90ZS5URUNITklDQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1hZ2VGaWxlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGVxdWlwbWVudCwgaW1hZ2VGaWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChlcXVpcDogRXF1aXBtZW50KTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIGNvbnN0IGVxdWlwbWVudCA9IHsgLi4uZXF1aXAgfTtcclxuICAgIGlmIChlcXVpcG1lbnQubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkb2NzID0gW107XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGUpID0+IHtcclxuICAgICAgICAgIGVxdWlwbWVudC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGUuYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJylbbGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhd2FpdCBnZXRTaWduZWRGaWxlKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgICAgZG9jcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBub3RlLmF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICB1cmxTaWduZWQ6IGF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICBub3RlSUQ6IG5vdGUuaWQsXHJcbiAgICAgICAgICAgICAgfSBhcyBFcXVpcG1lbnREb2N1bWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBlcXVpcG1lbnQuZG9jdW1lbnRzID0gZG9jcztcclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yVGlja2V0KHRpY2tldDogVGlja2V0KTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRpY2tldC5vcGVyYXRpb25zLml0ZW1zO1xyXG4gICAgaWYgKG9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBvcGVyYXRpb25zLnNvcnQoXHJcbiAgICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcclxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZEF0KSAtIG5ldyBEYXRlKGEuY3JlYXRlZEF0KVxyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBvcGVyYXRpb24uZXF1aXBtZW50ID0gYXdhaXQgdGhpcy5yZWFkRXF1aXBtZW50KG9wZXJhdGlvbi5lcXVpcG1lbnRJRCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIHRvIGtlZXAgdGhlIHNvcnRpbmcgYnkgY3JlYXRlZEF0XHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucy5tYXAoKG8pID0+IG8uZXF1aXBtZW50KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICAvLyBzcGxpdCBieSAxMDBcclxuICAgIGNvbnN0IGxpbWl0ID0gMTAwO1xyXG4gICAgbGV0IGVxdWlwc1Rva2VuID0geyBlcXVpcHM6IFtdLCBuZXh0VG9rZW46IG51bGwgfTtcclxuICAgIGRvIHtcclxuICAgICAgZXF1aXBzVG9rZW4gPSBhd2FpdCB0aGlzLm1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuXHJcbiAgICAgICk7XHJcbiAgICB9IHdoaWxlIChlcXVpcHNUb2tlbi5uZXh0VG9rZW4pO1xyXG4gICAgcmV0dXJuIGVxdWlwc1Rva2VuLmVxdWlwcztcclxuICB9XHJcblxyXG4gIGFzeW5jIG1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGxpbWl0OiBudW1iZXIsXHJcbiAgICBlcXVpcHNUb2tlbjogeyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfVxyXG4gICk6IFByb21pc2U8eyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuRXF1aXBtZW50c0J5U3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdERVNDJyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuLm5leHRUb2tlbiAvLyBuZXh0VG9rZW5cclxuICAgICAgKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjb25zdCBlcXVpcHNMaW1pdCA9IHJlc3BvbnNlLml0ZW1zO1xyXG4gICAgICAgIGNvbnN0IGVxdWlwc09iamVjdCA9IHtcclxuICAgICAgICAgIGVxdWlwczogWy4uLmVxdWlwc1Rva2VuLmVxdWlwcywgLi4uZXF1aXBzTGltaXRdLFxyXG4gICAgICAgICAgbmV4dFRva2VuOiByZXNwb25zZS5uZXh0VG9rZW4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZXF1aXBzT2JqZWN0O1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZEltYWdlRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgaW1hZ2VGaWxlOiBGaWxlXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgJ0JBVENIJykudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGVxdWlwcyA9IFtdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlcXVpcCBvZiBlcXVpcG1lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgICBlcXVpcC5zcGFjZUlEXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICAgIGlkOiBlcXVpcC5pZCxcclxuICAgICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXF1aXBzLnB1c2godXBkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBlcXVpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIE5vdGUgYXR0YWNoZWQgdG8gYW4gZXF1aXBtZW50IGZyb20gYW4gUzMga2V5IHRoYXQgQUxSRUFEWSBleGlzdHNcclxuICAgKiAoYXMgb3Bwb3NlZCB0byB1cGxvYWREb2MvdXBsb2FkSW1hZ2UsIHdoaWNoIHVwbG9hZCBhIGZyZXNoIGJyb3dzZXIgRmlsZSkuXHJcbiAgICogVXNlZCB3aGVuIGR1cGxpY2F0aW5nIGVxdWlwbWVudCBhdHRhY2htZW50cyBkdXJpbmcgYSBjcm9zcy12aXNpdCBjb3B5OiB0aGVcclxuICAgKiBTMyBvYmplY3QgaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gcGh5c2ljYWxseSBjb3BpZWQgYnkgdGhlIGNhbGxlciBiZWZvcmVoYW5kLFxyXG4gICAqIHNvIHRoaXMgb25seSBuZWVkcyB0byByZWNvcmQgdGhlIE5vdGUgcG9pbnRpbmcgYXQgdGhhdCBuZXcga2V5LlxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZU5vdGVXaXRoRXhpc3RpbmdBdHRhY2htZW50KFxyXG4gICAgZXF1aXBtZW50SUQ6IHN0cmluZyxcclxuICAgIGF0dGFjaG1lbnRLZXk6IHN0cmluZyxcclxuICAgIHR5cGU6IFR5cGVOb3RlLFxyXG4gICAgb3duZXJNaXNzaW9uSUQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICBkYXRlczogeyBzaWduRGF0ZT86IG51bWJlciB8IG51bGw7IGV4cGlyYXRpb25EYXRlPzogbnVtYmVyIHwgbnVsbCB9ID0ge31cclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgIGF0dGFjaG1lbnQ6IGF0dGFjaG1lbnRLZXksXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGVxdWlwbWVudElELFxyXG4gICAgICBvd25lck1pc3Npb25JRCxcclxuICAgICAgc2lnbkRhdGU6IGRhdGVzLnNpZ25EYXRlID8/IG51bGwsXHJcbiAgICAgIGV4cGlyYXRpb25EYXRlOiBkYXRlcy5leHBpcmF0aW9uRGF0ZSA/PyBudWxsLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgZXF1aXBtZW50LnNwYWNlSURcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBub3RlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogYW55LFxyXG4gICAgZmlsZTogRmlsZSA9IG51bGwsXHJcbiAgICBub3RlVHlwZTogVHlwZU5vdGUgPSBudWxsXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLlVwZGF0ZUVxdWlwbWVudChlcXVpcClcclxuICAgICAgLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IHVwZGF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlVHlwZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBmaWxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGZpbGUsIG5vdGVUeXBlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZml4RG9jKHR5cGU6IFR5cGVOb3RlKSB7XHJcbiAgICBsZXQgcHJlZml4O1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuRklOQU5DSUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5DT05UUkFDVFVBTDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5jb250cmFjdHVhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5PVEhFUjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC50ZWNobmljYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApIHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGlzdCA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcC5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBuZXdFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUxpc3QucHVzaChuZXdFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVwZGF0ZUxpc3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2MoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZSxcclxuICAgIHR5cGU6IFR5cGVOb3RlXHJcbiAgKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhwcmVmaXgsIGRvY3VtZW50RmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVFcXVpcG1lbnQoeyBpZDogZXF1aXAuaWQgfSk7XHJcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcclxuXHJcbiAgICAvLyBkZWxldGUgUE9JXHJcbiAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBub3RlcyByZWxhdGVkXHJcbiAgICBpZiAoZXF1aXAubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGU6IE5vdGUpID0+IHtcclxuICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlcyBmcm9tIFMzXHJcbiAgICAgICAgICAvKiogTm90IHNoYXJlZCB3aXRoIG90aGVyIGVxdWlwbWVudCAqL1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBub3RlLmF0dGFjaG1lbnQgJiZcclxuICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTm90ZSh7IGlkOiBub3RlLmlkIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBkZWxldGUgb3BlcmF0aW9ucyAocmVtb3ZlIGZyb20gbGlua2VkIHRpY2tldHMpXHJcbiAgICBhd2FpdCB0aGlzLm9wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uc0ZvckVxdWlwbWVudChlcXVpcC5pZCk7XHJcbiAgICByZXR1cm4gZGVsZXRlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudExvY2F0aW9uKFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApOiBQcm9taXNlPFBPST4ge1xyXG4gICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICB0eXBlOiBQb2lUeXBlLkVRVUlQTUVOVCxcclxuICAgICAgZWxlbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcclxuICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICByZXR1cm4gcG9pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlVGlja2V0RnJvbUVxdWlwbWVudChcclxuICAgIHRpY2tldDogVGlja2V0LFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudFxyXG4gICk6IFByb21pc2U8T3BlcmF0aW9uPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25FcXVpcCA9XHJcbiAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XHJcbiAgICBjb25zdCBvcGVyYXRpb25Ub0RlbGV0ZSA9IG9wZXJhdGlvbkVxdWlwLmZpbmQoXHJcbiAgICAgIChvcCkgPT4gb3AudGlja2V0SUQgPT09IHRpY2tldC5pZFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2VcclxuICAgICAgLmRlbGV0ZU9wZXJhdGlvbihvcGVyYXRpb25Ub0RlbGV0ZS5pZClcclxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudGlja2V0c1NlcnZpY2UuYWRkRXZlbnRUb1RpY2tldCh0aWNrZXQgYXMgVGlja2V0LCB7XHJcbiAgICAgICAgICB0aXRsZTogJ0VxdWlwZW1lbnQgcmV0aXLDqSBkdSB0aWNrZXQnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXHJcbiAgICAgICAgICBzdGF0dXM6IEV2ZW50U3RhdHVzLlVOTElOS0VEX0ZST01fRVFVSVBNRU5ULFxyXG4gICAgICAgICAgdHlwZTogRXZlbnRUeXBlLlRJQ0tFVCxcclxuICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxyXG4gICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHsgZXF1aXBtZW50OiBlcXVpcC5uYW1lIH0pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdEVxdWlwcygpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCB8fCB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgIGVxTGlzdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICBlcUxpc3RcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xyXG4gICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IGVxTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcy5tYXAoYXN5bmMgKGVxdWlwKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcclxuICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxyXG4gICAgc3BhY2VJRCxcclxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICBpZiAoc3BhY2VNaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXHJcbiAgICAgIChtKSA9PlxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSB8fFxyXG4gICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFXHJcbiAgICApO1xyXG4gICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWlucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgLy8gICAgIHJlc3VsdHMsXHJcbiAgICAvLyAgICAgZG9tYWlucyxcclxuICAgIC8vICk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcclxuICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdIH0+IHtcclxuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGlmIChkb21haW5JRCkge1xyXG4gICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLnVwZGF0ZUljb25Gb3JBbGxPYmplY3RzKGVxdWlwcywgdGFnSWNvbik7XHJcbiAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xyXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcclxuICAgICAgKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgIDogW107XHJcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcclxuXHJcbiAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgIGFyY2hpdmVkRm9yTWlzc2lvbklEOiBhcmNoaXZlZExpc3QsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCkge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xyXG4gICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XHJcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXHJcbiAgICAgIGAke2VxdWlwbWVudC5pZH1gXHJcbiAgICApO1xyXG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcclxuXHJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcclxuICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcclxuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vZGVsM0QnKTtcclxuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XHJcbiAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcclxuICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIC8vIHdlIGZvcmNlIGFkZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGFuIGFub3RoZXIgem9uZVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXHJcbiAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcclxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxyXG4gICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXHJcbiAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmhhcyh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcclxuICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xyXG4gICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXHJcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvRGVsZXRlID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xyXG4gICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcclxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0NyZWF0ZShjcmVhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXHJcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZXF1aXApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xyXG4gICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIGluaXRTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgICBpZiAoIXpvbmUgfHwgIXRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMgPSB7XHJcbiAgICAgICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCA9PT0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
128
128
  type: Inject,
129
129
  args: ['currentAPIService']
130
130
  }] }, { type: i1.BaseUserService }, { type: i2.TranslateService }] });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBUzlELE1BQU0sT0FBTyxZQUFZO0lBUVQ7SUFDQTtJQVBaLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztJQUVsQyxHQUFHLENBQU07SUFFVCxZQUNpQyxXQUFnQixFQUNyQyxXQUE0QixFQUM1QixTQUEyQjtRQUQzQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDbkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVEOztTQUVLO0lBQ0wsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVU7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxD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SyxDQUFDLGVBQWU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FDL0IsS0FBSyxDQUFDLGVBQWUsRUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztRQUVOLElBQUksSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7d0dBL0lRLFlBQVksa0JBT1QsbUJBQW1COzRHQVB0QixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQVFRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZGF0ZVRpbWVUb0xvY2FsU3RyaW5nIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMuc2VydmljZVwiO1xuaW1wb3J0IHsgUHJvZmlsZUVudGl0eSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBFdmVudFNlcnZpY2Uge1xuICAgIFxuICAgIHRyYW5zbGF0aW9uRXZlbnRTdWJjcmlwdGlvbnMgPSB7fTtcblxuICAgIEFQSTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSwgXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgKSB7XG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1JVRCBcbiAgICAgKiAqL1xuICAgIGFzeW5jIGNyZWF0ZUV2ZW50KGlucHV0OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVFdmVudChpbnB1dCk7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlRXZlbnQoaW5wdXQ6IGFueSk6IFByb21pc2U8RXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFdmVudChpbnB1dCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlRXZlbnQoZXZlbnRJRDogc3RyaW5nKTogUHJvbWlzZTxFdmVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUV2ZW50KHtpZDogZXZlbnRJRH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEV2ZW50KGV2ZW50SUQ6IHN0cmluZyk6IFByb21pc2U8RXZlbnQ+e1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldEV2ZW50KGV2ZW50SUQpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBDdXN0b20gZ2V0IGJ5IEdTSSBcbiAgICAgKiAqL1xuICAgIGFzeW5jIGdldEV2ZW50c0J5VGlja2V0SUQodGlja2V0SUQ6IHN0cmluZyk6IFByb21pc2U8RXZlbnRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkV2ZW50c0J5VGlja2V0KHRpY2tldElEKS50aGVuKChldmVudHMpPT4gZXZlbnRzLml0ZW1zKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRFdmVudHNCeVRpY2tldElEU29ydGVkQnlEYXRlRGVzYyh0aWNrZXRJRDogc3RyaW5nKTogUHJvbWlzZTxFdmVudFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRXZlbnRzQnlUaWNrZXRCeURhdGUoXG4gICAgICAgICAgICB0aWNrZXRJRCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBcIkRFU0NcIixcbiAgICAgICAgKS50aGVuKChldmVudHMpID0+IGV2ZW50cy5pdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RXZlbnRzQnlHcm91cChncm91cDogc3RyaW5nKTogUHJvbWlzZTxFdmVudFtdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkV2ZW50c0J5R3JvdXAoZ3JvdXApKS5pdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBTT1JUSU5HXG4gICAgICovXG5cbiAgICBzb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcbiAgICAgICAgZXZlbnRzLnNvcnQoKGV2ZW50MSwgZXZlbnQyKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZXZlbnQyLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShldmVudDEuY3JlYXRlZEF0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfVxuXG4gICAgc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcbiAgICAgICAgZXZlbnRzLnNvcnQoKGV2ZW50MSwgZXZlbnQyKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZXZlbnQxLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShldmVudDIuY3JlYXRlZEF0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFRSQU5TTEFUSU9OUyBcbiAgICAgKiAqL1xuICAgIC8qKiBBcHBseSBhIHRyYW5zbGF0aW9uIHRvIGEgdGlja2V0IGV2ZW50LCB3aXRoIHRoZSBjdXJyZW50IGxhbmd1YWdlICovXG4gICAgYXN5bmMgYXBwbHlUaWNrZXRFdmVudFRyYW5zbGF0ZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRlZE1ldGFFdmVudChldmVudCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBldmVudC50cmFuc2xhdGlvblBhdGg7XG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB0aXRsZVBhdGggPSBgJHtwYXRofS50aXRsZWA7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvblBhdGggPSBgJHtwYXRofS5kZXNjcmlwdGlvbmA7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgW3RpdGxlUGF0aCwgZGVzY3JpcHRpb25QYXRoXSxcbiAgICAgICAgICAgICAgICBtZXRhLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGV2ZW50LnRpdGxlID0gdmFsdWVbdGl0bGVQYXRoXTtcbiAgICAgICAgICAgIGV2ZW50LmRlc2NyaXB0aW9uID0gdmFsdWVbZGVzY3JpcHRpb25QYXRoXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBVbnN1YnNjcmliZSBhIHRpY2tldCBldmVudCBmb3IgaGlzIHRyYW5zbGF0aW9uICovXG4gICAgdGlja2V0RXZlbnRTdWJzY3JpYmVUcmFuc2xhdGlvbihldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmlkIGluIHRoaXMudHJhbnNsYXRpb25FdmVudFN1YmNyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy50aWNrZXRFdmVudFVuc3Vic2NyaWJlVHJhbnNsYXRpb24oZXZlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25FdmVudFN1YmNyaXB0aW9uc1tldmVudC5pZF0gPVxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVRpY2tldEV2ZW50VHJhbnNsYXRlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwcGx5VGlja2V0RXZlbnRUcmFuc2xhdGUoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBVbnN1YnNjcmliZSBhIHRpY2tldCBldmVudCBmb3IgaGlzIHRyYW5zbGF0aW9uICovXG4gICAgdGlja2V0RXZlbnRVbnN1YnNjcmliZVRyYW5zbGF0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMudHJhbnNsYXRpb25FdmVudFN1YmNyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbkV2ZW50U3ViY3JpcHRpb25zW2lkXS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudHJhbnNsYXRpb25FdmVudFN1YmNyaXB0aW9uc1tpZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2VuZXJhdGUgdGhlIHRyYW5zbGF0ZWQgbWV0YWRhdGEgb2YgYW4gZXZlbnQsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsYW5ndWFnZSAqL1xuICAgIGFzeW5jIGdldFRyYW5zbGF0ZWRNZXRhRXZlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IG1ldGE6IGFueSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG93bmVyOiBQcm9maWxlRW50aXR5ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS51c2VyRnJvbVVzZXJJRChcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLnVzZXJJRCxcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFkYXRhKSBtZXRhID0gSlNPTi5wYXJzZShldmVudC5tZXRhZGF0YSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgICAgbWV0YS5maXJzdE5hbWUgPSBvd25lci5maXJzdE5hbWU7XG4gICAgICAgIG1ldGEubGFzdE5hbWUgPSBvd25lci5sYXN0TmFtZTtcblxuICAgICAgICBpZiAoZXZlbnQuZXN0aW1hdGVTdGFydERhdGUpIHtcbiAgICAgICAgICAgIG1ldGEuZnJvbURhdGUgPSBkYXRlVGltZVRvTG9jYWxTdHJpbmcoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5lc3RpbWF0ZUVuZERhdGUpXG4gICAgICAgICAgICBtZXRhLnRvRGF0ZSA9IGRhdGVUaW1lVG9Mb2NhbFN0cmluZyhcbiAgICAgICAgICAgICAgICBldmVudC5lc3RpbWF0ZUVuZERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGlmIChtZXRhLm9sZFN0YXR1cylcbiAgICAgICAgICAgIG1ldGEub2xkU3RhdHVzID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChtZXRhLm9sZFN0YXR1cyk7XG4gICAgICAgIGlmIChtZXRhLm5ld1N0YXR1cylcbiAgICAgICAgICAgIG1ldGEubmV3U3RhdHVzID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChtZXRhLm5ld1N0YXR1cyk7XG4gICAgICAgIGlmIChtZXRhLnR5cGUpIG1ldGEudHlwZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWV0YS50eXBlKTtcbiAgICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfVxuICAgXG59XG4iXX0=
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBUzlELE1BQU0sT0FBTyxZQUFZO0lBUVQ7SUFDQTtJQVBaLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztJQUVsQyxHQUFHLENBQU07SUFFVCxZQUNpQyxXQUFnQixFQUNyQyxXQUE0QixFQUM1QixTQUEyQjtRQUQzQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDbkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVEOztTQUVLO0lBQ0wsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVU7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxD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SyxDQUFDLGVBQWU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FDL0IsS0FBSyxDQUFDLGVBQWUsRUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztRQUVOLElBQUksSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7d0dBL0lRLFlBQVksa0JBT1QsbUJBQW1COzRHQVB0QixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQVFRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGRhdGVUaW1lVG9Mb2NhbFN0cmluZyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZmlsZUVudGl0eSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXZlbnRTZXJ2aWNlIHtcclxuICAgIFxyXG4gICAgdHJhbnNsYXRpb25FdmVudFN1YmNyaXB0aW9ucyA9IHt9O1xyXG5cclxuICAgIEFQSTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSwgXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlICkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDUlVEIFxyXG4gICAgICogKi9cclxuICAgIGFzeW5jIGNyZWF0ZUV2ZW50KGlucHV0OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZUV2ZW50KGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVFdmVudChpbnB1dDogYW55KTogUHJvbWlzZTxFdmVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRXZlbnQoaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZUV2ZW50KGV2ZW50SUQ6IHN0cmluZyk6IFByb21pc2U8RXZlbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUV2ZW50KHtpZDogZXZlbnRJRH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEV2ZW50KGV2ZW50SUQ6IHN0cmluZyk6IFByb21pc2U8RXZlbnQ+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0RXZlbnQoZXZlbnRJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogQ3VzdG9tIGdldCBieSBHU0kgXHJcbiAgICAgKiAqL1xyXG4gICAgYXN5bmMgZ2V0RXZlbnRzQnlUaWNrZXRJRCh0aWNrZXRJRDogc3RyaW5nKTogUHJvbWlzZTxFdmVudFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5FdmVudHNCeVRpY2tldCh0aWNrZXRJRCkudGhlbigoZXZlbnRzKT0+IGV2ZW50cy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RXZlbnRzQnlUaWNrZXRJRFNvcnRlZEJ5RGF0ZURlc2ModGlja2V0SUQ6IHN0cmluZyk6IFByb21pc2U8RXZlbnRbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRXZlbnRzQnlUaWNrZXRCeURhdGUoXHJcbiAgICAgICAgICAgIHRpY2tldElELFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBcIkRFU0NcIixcclxuICAgICAgICApLnRoZW4oKGV2ZW50cykgPT4gZXZlbnRzLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRFdmVudHNCeUdyb3VwKGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPEV2ZW50W10+IHtcclxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5FdmVudHNCeUdyb3VwKGdyb3VwKSkuaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIFNPUlRJTkdcclxuICAgICAqL1xyXG5cclxuICAgIHNvcnRFdmVudHNCeUNyZWF0ZWRBdERhdGVEZXNjKGV2ZW50czogRXZlbnRbXSk6IEV2ZW50W10ge1xyXG4gICAgICAgIGV2ZW50cy5zb3J0KChldmVudDEsIGV2ZW50MikgPT4ge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShldmVudDIuY3JlYXRlZEF0KSAtIG5ldyBEYXRlKGV2ZW50MS5jcmVhdGVkQXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBldmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBldmVudHMuc29ydCgoZXZlbnQxLCBldmVudDIpID0+IHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZXZlbnQxLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShldmVudDIuY3JlYXRlZEF0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRSQU5TTEFUSU9OUyBcclxuICAgICAqICovXHJcbiAgICAvKiogQXBwbHkgYSB0cmFuc2xhdGlvbiB0byBhIHRpY2tldCBldmVudCwgd2l0aCB0aGUgY3VycmVudCBsYW5ndWFnZSAqL1xyXG4gICAgYXN5bmMgYXBwbHlUaWNrZXRFdmVudFRyYW5zbGF0ZShldmVudDogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGVkTWV0YUV2ZW50KGV2ZW50KTtcclxuICAgICAgICBjb25zdCBwYXRoID0gZXZlbnQudHJhbnNsYXRpb25QYXRoO1xyXG4gICAgICAgIGlmIChwYXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlUGF0aCA9IGAke3BhdGh9LnRpdGxlYDtcclxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb25QYXRoID0gYCR7cGF0aH0uZGVzY3JpcHRpb25gO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVQYXRoLCBkZXNjcmlwdGlvblBhdGhdLFxyXG4gICAgICAgICAgICAgICAgbWV0YSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZXZlbnQudGl0bGUgPSB2YWx1ZVt0aXRsZVBhdGhdO1xyXG4gICAgICAgICAgICBldmVudC5kZXNjcmlwdGlvbiA9IHZhbHVlW2Rlc2NyaXB0aW9uUGF0aF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBVbnN1YnNjcmliZSBhIHRpY2tldCBldmVudCBmb3IgaGlzIHRyYW5zbGF0aW9uICovXHJcbiAgICB0aWNrZXRFdmVudFN1YnNjcmliZVRyYW5zbGF0aW9uKGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5pZCBpbiB0aGlzLnRyYW5zbGF0aW9uRXZlbnRTdWJjcmlwdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy50aWNrZXRFdmVudFVuc3Vic2NyaWJlVHJhbnNsYXRpb24oZXZlbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uRXZlbnRTdWJjcmlwdGlvbnNbZXZlbnQuaWRdID1cclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VGlja2V0RXZlbnRUcmFuc2xhdGUoZXZlbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFwcGx5VGlja2V0RXZlbnRUcmFuc2xhdGUoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBVbnN1YnNjcmliZSBhIHRpY2tldCBldmVudCBmb3IgaGlzIHRyYW5zbGF0aW9uICovXHJcbiAgICB0aWNrZXRFdmVudFVuc3Vic2NyaWJlVHJhbnNsYXRpb24oaWQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChpZCBpbiB0aGlzLnRyYW5zbGF0aW9uRXZlbnRTdWJjcmlwdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbkV2ZW50U3ViY3JpcHRpb25zW2lkXS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy50cmFuc2xhdGlvbkV2ZW50U3ViY3JpcHRpb25zW2lkXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlbmVyYXRlIHRoZSB0cmFuc2xhdGVkIG1ldGFkYXRhIG9mIGFuIGV2ZW50LCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKi9cclxuICAgIGFzeW5jIGdldFRyYW5zbGF0ZWRNZXRhRXZlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgbWV0YTogYW55ID0ge307XHJcblxyXG4gICAgICAgIGNvbnN0IG93bmVyOiBQcm9maWxlRW50aXR5ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS51c2VyRnJvbVVzZXJJRChcclxuICAgICAgICAgICAgZXZlbnQub3duZXIudXNlcklELFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5tZXRhZGF0YSkgbWV0YSA9IEpTT04ucGFyc2UoZXZlbnQubWV0YWRhdGEpO1xyXG4gICAgICAgIH0gY2F0Y2gge31cclxuICAgICAgICBtZXRhLmZpcnN0TmFtZSA9IG93bmVyLmZpcnN0TmFtZTtcclxuICAgICAgICBtZXRhLmxhc3ROYW1lID0gb3duZXIubGFzdE5hbWU7XHJcblxyXG4gICAgICAgIGlmIChldmVudC5lc3RpbWF0ZVN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICBtZXRhLmZyb21EYXRlID0gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgICAgICAgICAgICAgZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmVzdGltYXRlRW5kRGF0ZSlcclxuICAgICAgICAgICAgbWV0YS50b0RhdGUgPSBkYXRlVGltZVRvTG9jYWxTdHJpbmcoXHJcbiAgICAgICAgICAgICAgICBldmVudC5lc3RpbWF0ZUVuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG1ldGEub2xkU3RhdHVzKVxyXG4gICAgICAgICAgICBtZXRhLm9sZFN0YXR1cyA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWV0YS5vbGRTdGF0dXMpO1xyXG4gICAgICAgIGlmIChtZXRhLm5ld1N0YXR1cylcclxuICAgICAgICAgICAgbWV0YS5uZXdTdGF0dXMgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG1ldGEubmV3U3RhdHVzKTtcclxuICAgICAgICBpZiAobWV0YS50eXBlKSBtZXRhLnR5cGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG1ldGEudHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIG1ldGE7XHJcbiAgICB9XHJcbiAgIFxyXG59XHJcbiJdfQ==