@smarterplan/ngx-smarterplan-core 1.0.41 → 1.0.42

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.
@@ -1,4 +1,6 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { waitUntil } from '../../../helpers.service';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "@angular/router";
4
6
  import * as i2 from "../../../services/models/space.service";
@@ -27,13 +29,18 @@ export class NavigationBarComponent {
27
29
  this.zonesPerSpace = null;
28
30
  this.zonesPerFloor = null;
29
31
  this.childrenZones = null;
30
- this.spaceSubscription = this.spaceService.locationUpdated.subscribe((locs) => {
32
+ this.destroy$ = new Subject();
33
+ this.spaceService.locationUpdated
34
+ .pipe(takeUntil(this.destroy$))
35
+ .subscribe((locs) => {
31
36
  this.locations = locs;
32
37
  if (this.selectedLocation) {
33
38
  this.selectedLocation = this.findLocationByID(this.selectedLocation.id); // Update Object (object address will change);
34
39
  }
35
40
  });
36
- this.viewerSubscription = this.viewerService.viewerIsOn.subscribe((data) => {
41
+ this.viewerService.viewerIsOn
42
+ .pipe(takeUntil(this.destroy$))
43
+ .subscribe((data) => {
37
44
  // console.log('menu navigation received update', data);
38
45
  this.currentLocationID = data.spaceID;
39
46
  this.currentModel3d = data.model3D;
@@ -52,21 +59,33 @@ export class NavigationBarComponent {
52
59
  /**
53
60
  * We listen for Location change event
54
61
  */
55
- this.locationIDSubscription =
56
- this.navigatorService.locationIDChange.subscribe((id) => {
57
- this.clearData();
58
- this.selectedLocation = this.findLocationByID(id);
59
- this.navigatorService.currentNavBarLocationID = id;
60
- this.onSelectedLocationChanged();
61
- });
62
+ this.navigatorService.locationIDChange
63
+ .pipe(takeUntil(this.destroy$))
64
+ .subscribe((id) => {
65
+ this.clearData();
66
+ this.selectedLocation = this.findLocationByID(id);
67
+ this.navigatorService.currentNavBarLocationID = id;
68
+ this.onSelectedLocationChanged();
69
+ });
70
+ this.navigatorService.zonesForUserChange
71
+ .pipe(takeUntil(this.destroy$))
72
+ .subscribe(async (zones) => {
73
+ if (zones) {
74
+ await waitUntil(() => this.floorsPerSpace !== null);
75
+ const floorZone = zones.find((zone) => zone.layer && zone.layer.name === "FLOOR");
76
+ if (floorZone) {
77
+ this.selectedFloor = this.floorsPerSpace.find((f) => f.id === floorZone.id);
78
+ this.onFloorClick(false);
79
+ }
80
+ }
81
+ });
62
82
  }
63
83
  ngOnInit() {
64
84
  this.initLocations();
65
85
  }
66
86
  ngOnDestroy() {
67
- this.spaceSubscription.unsubscribe();
68
- this.viewerSubscription.unsubscribe();
69
- this.locationIDSubscription.unsubscribe();
87
+ this.destroy$.next(true);
88
+ this.destroy$.complete();
70
89
  }
71
90
  async initLocations() {
72
91
  this.locations = this.spaceService.locationsForUser;
@@ -123,6 +142,21 @@ export class NavigationBarComponent {
123
142
  if (this.visitsPerSpace.length === 1) {
124
143
  this.selectedModel3d = this.visitsPerSpace[0].model3d;
125
144
  this.floorsPerSpace = this.zonesPerSpace.filter((zone) => zone.layer && zone.layer.name.includes('FLOOR'));
145
+ // sort from highest floor to lowest
146
+ this.floorsPerSpace.sort((a, b) => {
147
+ if (a.metadata && b.metadata) {
148
+ const metadataA = JSON.parse(a.metadata);
149
+ const metadataB = JSON.parse(b.metadata);
150
+ return (metadataB.matterportFloorSequence -
151
+ metadataA.matterportFloorSequence);
152
+ }
153
+ return a.name.localeCompare(b.name);
154
+ });
155
+ const multiFloorZones = this.zonesPerSpace.filter((zone) => zone.isMultipleFloorZone);
156
+ // sort alphabetically
157
+ multiFloorZones.sort((a, b) => a.name.localeCompare(b.name));
158
+ // merge multiFloor and Floors
159
+ this.floorsPerSpace = [...this.floorsPerSpace, ...multiFloorZones];
126
160
  if (this.floorsPerSpace.length === 1) {
127
161
  [this.selectedFloor] = this.floorsPerSpace;
128
162
  this.onFloorClick(false);
@@ -133,11 +167,16 @@ export class NavigationBarComponent {
133
167
  console.log('error onChosenLocation', error);
134
168
  }
135
169
  }
136
- async onLocationClick() {
170
+ onLocationClick() {
137
171
  this.clearData();
138
- await this.sendUpdateLocationEvent();
172
+ this.sendUpdateLocationEvent();
139
173
  }
140
174
  async onFloorClick(emitEvent = true) {
175
+ if (this.selectedFloor && this.selectedFloor.isMultipleFloorZone) {
176
+ this.selectedZone = this.selectedFloor;
177
+ this.onZoneClick();
178
+ return;
179
+ }
141
180
  this.sweepToGo = null;
142
181
  this.selectedZone = null;
143
182
  this.selectedChildZone = null;
@@ -150,6 +189,7 @@ export class NavigationBarComponent {
150
189
  this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);
151
190
  }
152
191
  this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;
192
+ await waitUntil(() => this.zonesPerSpace !== null && this.zonesPerSpace !== undefined);
153
193
  this.zonesPerFloor = this.zonesPerSpace.filter((zone) =>
154
194
  // zone.id === this.selectedFloor.id ||
155
195
  zone.parentID === this.selectedFloor.id);
@@ -236,12 +276,12 @@ export class NavigationBarComponent {
236
276
  }
237
277
  }
238
278
  NavigationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NavigationBarComponent, deps: [{ token: i1.Router }, { token: i2.SpaceService }, { token: i3.ZoneService }, { token: i4.VisitService }, { token: i5.ViewerService }, { token: i6.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
239
- NavigationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: NavigationBarComponent, selector: "lib-navigation-bar", viewQueries: [{ propertyName: "navbarSelectMenu", first: true, predicate: ["navbarSelectMenu"], descendants: true }], ngImport: i0, template: "<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let zone of floorsPerSpace\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n", styles: [":host{position:sticky;top:0;height:123px}.navbar{z-index:200;padding:.4rem 1rem}.navbar.second-nav{z-index:199;background-color:var(--smarterplan-primary)}input,select{margin-right:15px}.select{background:transparent;border:none;color:#fff;margin:6px 20px 0}.form-control{width:auto;min-width:80px;max-width:18%}.location{width:auto;max-width:35%}.floor,.zone{width:auto;max-width:30%}button{color:#fff;padding:5px 10px;font-size:1.1em}.btn-3d:active:hover:not([disabled]){color:var(--smarterplan-secondary)}.btn-3d[disabled]:hover{color:#fff}.navbar-toggler{margin-right:1em}.select-menu{max-width:inherit}#btn-icon{width:30px;height:30px;background:url(../../../../../assets/icons/goTo3d.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../../assets/icons/goTo3d-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../../assets/icons/goTo3d.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px}\n"], directives: [{ type: i7.NgbNavbar, selector: ".navbar" }, { type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i10.TranslatePipe } });
279
+ NavigationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: NavigationBarComponent, selector: "lib-navigation-bar", viewQueries: [{ propertyName: "navbarSelectMenu", first: true, predicate: ["navbarSelectMenu"], descendants: true }], ngImport: i0, template: "<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let floor of floorsPerSpace\" [ngValue]=\"floor\">{{ floor.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n", styles: [":host{position:sticky;top:0;height:123px}.navbar{z-index:200;padding:.4rem 1rem}.navbar.second-nav{z-index:199;background-color:var(--smarterplan-primary)}input,select{margin-right:15px}.select{background:transparent;border:none;color:#fff;margin:6px 20px 0}.form-control{width:auto;min-width:80px;max-width:18%}.location{width:auto;max-width:35%}.floor,.zone{width:auto;max-width:30%}button{color:#fff;padding:5px 10px;font-size:1.1em}.btn-3d:active:hover:not([disabled]){color:var(--smarterplan-secondary)}.btn-3d[disabled]:hover{color:#fff}.navbar-toggler{margin-right:1em}.select-menu{max-width:inherit}#btn-icon{width:30px;height:30px;background:url(../../../../../assets/icons/goTo3d.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../../assets/icons/goTo3d-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../../assets/icons/goTo3d.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px}\n"], directives: [{ type: i7.NgbNavbar, selector: ".navbar" }, { type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i10.TranslatePipe } });
240
280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NavigationBarComponent, decorators: [{
241
281
  type: Component,
242
- args: [{ selector: 'lib-navigation-bar', template: "<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let zone of floorsPerSpace\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n", styles: [":host{position:sticky;top:0;height:123px}.navbar{z-index:200;padding:.4rem 1rem}.navbar.second-nav{z-index:199;background-color:var(--smarterplan-primary)}input,select{margin-right:15px}.select{background:transparent;border:none;color:#fff;margin:6px 20px 0}.form-control{width:auto;min-width:80px;max-width:18%}.location{width:auto;max-width:35%}.floor,.zone{width:auto;max-width:30%}button{color:#fff;padding:5px 10px;font-size:1.1em}.btn-3d:active:hover:not([disabled]){color:var(--smarterplan-secondary)}.btn-3d[disabled]:hover{color:#fff}.navbar-toggler{margin-right:1em}.select-menu{max-width:inherit}#btn-icon{width:30px;height:30px;background:url(../../../../../assets/icons/goTo3d.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../../assets/icons/goTo3d-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../../assets/icons/goTo3d.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px}\n"] }]
282
+ args: [{ selector: 'lib-navigation-bar', template: "<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let floor of floorsPerSpace\" [ngValue]=\"floor\">{{ floor.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n", styles: [":host{position:sticky;top:0;height:123px}.navbar{z-index:200;padding:.4rem 1rem}.navbar.second-nav{z-index:199;background-color:var(--smarterplan-primary)}input,select{margin-right:15px}.select{background:transparent;border:none;color:#fff;margin:6px 20px 0}.form-control{width:auto;min-width:80px;max-width:18%}.location{width:auto;max-width:35%}.floor,.zone{width:auto;max-width:30%}button{color:#fff;padding:5px 10px;font-size:1.1em}.btn-3d:active:hover:not([disabled]){color:var(--smarterplan-secondary)}.btn-3d[disabled]:hover{color:#fff}.navbar-toggler{margin-right:1em}.select-menu{max-width:inherit}#btn-icon{width:30px;height:30px;background:url(../../../../../assets/icons/goTo3d.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../../assets/icons/goTo3d-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../../assets/icons/goTo3d.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px}\n"] }]
243
283
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.SpaceService }, { type: i3.ZoneService }, { type: i4.VisitService }, { type: i5.ViewerService }, { type: i6.NavigatorService }]; }, propDecorators: { navbarSelectMenu: [{
244
284
  type: ViewChild,
245
285
  args: ['navbarSelectMenu']
246
286
  }] } });
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL21lbnUtYmFyL25hdmlnYXRpb24tYmFyL25hdmlnYXRpb24tYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9tZW51LWJhci9uYXZpZ2F0aW9uLWJhci9uYXZpZ2F0aW9uLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBZTdELE1BQU0sT0FBTyxzQkFBc0I7SUF1Qy9CLFlBQ1ksTUFBYyxFQUNkLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGdCQUFrQztRQUxsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTlCOUMscUJBQWdCLEdBQVUsSUFBSSxDQUFDO1FBSS9CLGtCQUFhLEdBQVMsSUFBSSxDQUFDO1FBRTNCLGlCQUFZLEdBQVMsSUFBSSxDQUFDO1FBRTFCLHNCQUFpQixHQUFTLElBQUksQ0FBQztRQUUvQixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUUvQixtQkFBYyxHQUFXLElBQUksQ0FBQztRQUU5QixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUU3QixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUU3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LENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7O21IQXpTUSxzQkFBc0I7dUdBQXRCLHNCQUFzQixnTENmbkMsK3pHQXFEQTsyRkR0Q2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLG9CQUFvQjt3T0FLQyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3BhY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kZWxzL3NwYWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaXNpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RlbHMvdmlzaXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kZWxzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwYWNlLCBWaXNpdCwgWm9uZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1uYXZpZ2F0aW9uLWJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2aWdhdGlvbi1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbmF2aWdhdGlvbi1iYXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25CYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnbmF2YmFyU2VsZWN0TWVudScpIG5hdmJhclNlbGVjdE1lbnUhOiBhbnk7XHJcblxyXG4gICAgbG9jYXRpb25zOiBTcGFjZVtdO1xyXG5cclxuICAgIHNwYWNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgdmlld2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgbG9jYXRpb25JRFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGN1cnJlbnRMb2NhdGlvbklEOiBzdHJpbmc7XHJcblxyXG4gICAgY3VycmVudE1vZGVsM2Q6IHN0cmluZztcclxuXHJcbiAgICBzZWxlY3RlZExvY2F0aW9uOiBTcGFjZSA9IG51bGw7XHJcblxyXG4gICAgc2VsZWN0ZWRNb2RlbDNkOiBzdHJpbmc7XHJcblxyXG4gICAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gICAgc2VsZWN0ZWRab25lOiBab25lID0gbnVsbDtcclxuXHJcbiAgICBzZWxlY3RlZENoaWxkWm9uZTogWm9uZSA9IG51bGw7XHJcblxyXG4gICAgdmlzaXRzUGVyU3BhY2U6IFZpc2l0W10gPSBudWxsO1xyXG5cclxuICAgIGZsb29yc1BlclNwYWNlOiBab25lW10gPSBudWxsO1xyXG5cclxuICAgIHpvbmVzUGVyU3BhY2U6IFpvbmVbXSA9IG51bGw7XHJcblxyXG4gICAgem9uZXNQZXJGbG9vcjogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgICBjaGlsZHJlblpvbmVzOiBab25lW10gPSBudWxsO1xyXG5cclxuICAgIHN3ZWVwVG9Hbzogc3RyaW5nO1xyXG5cclxuICAgIGZsb29yVG9HbzogWm9uZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aXNpdFNlcnZpY2U6IFZpc2l0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNwYWNlU3Vic2NyaXB0aW9uID0gdGhpcy5zcGFjZVNlcnZpY2UubG9jYXRpb25VcGRhdGVkLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKGxvY3MpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gbG9jcztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSB0aGlzLmZpbmRMb2NhdGlvbkJ5SUQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbi5pZFxyXG4gICAgICAgICAgICAgICAgICAgICk7IC8vIFVwZGF0ZSBPYmplY3QgKG9iamVjdCBhZGRyZXNzIHdpbGwgY2hhbmdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy52aWV3ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdlclNlcnZpY2Uudmlld2VySXNPbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChkYXRhOiB7IHNwYWNlSUQ6IHN0cmluZzsgbW9kZWwzRDogc3RyaW5nOyBzd2VlcDogc3RyaW5nIHwgbnVsbDsgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ21lbnUgbmF2aWdhdGlvbiByZWNlaXZlZCB1cGRhdGUnLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uSUQgPSBkYXRhLnNwYWNlSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNb2RlbDNkID0gZGF0YS5tb2RlbDNEO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLnNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLnNlbGVjdGVkTG9jYXRpb24gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkICE9PSBkYXRhLnNwYWNlSUQpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnNcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9IHRoaXMuZmluZExvY2F0aW9uQnlJRChkYXRhLnNwYWNlSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlIGxpc3RlbiBmb3IgTG9jYXRpb24gY2hhbmdlIGV2ZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbklEU3Vic2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmxvY2F0aW9uSURDaGFuZ2Uuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uID0gdGhpcy5maW5kTG9jYXRpb25CeUlEKGlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyTG9jYXRpb25JRCA9IGlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkTG9jYXRpb25DaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdExvY2F0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3BhY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB0aGlzLnZpZXdlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMubG9jYXRpb25JRFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRMb2NhdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB0aGlzLnNwYWNlU2VydmljZS5sb2NhdGlvbnNGb3JVc2VyO1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRMb2NhdGlvbnNGb3JDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TG9jYXRpb25JRCAmJiB0aGlzLmxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9IHRoaXMuZmluZExvY2F0aW9uQnlJRCh0aGlzLmN1cnJlbnRMb2NhdGlvbklEKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kVXBkYXRlTG9jYXRpb25FdmVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBhIGxvY2F0aW9uIHdpdGggYSBnaXZlbiBJRFxyXG4gICAgICogQHBhcmFtIGlkIElEIGZvciB0aGUgbG9jYXRpb25cclxuICAgICAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiBvciBudWxsIGlmIG5vIGxvY2F0aW9uIHdlcmUgZm91bmRcclxuICAgICAqL1xyXG4gICAgZmluZExvY2F0aW9uQnlJRChpZDogc3RyaW5nKTogU3BhY2Uge1xyXG4gICAgICAgIGNvbnN0IHNwYWNlID0gdGhpcy5sb2NhdGlvbnMuZmluZCgobG9jKSA9PiBsb2MuaWQgPT09IGlkKTtcclxuICAgICAgICByZXR1cm4gc3BhY2UgfHwgbnVsbDsgLyoqIENvbnZlcnQgdG8gbnVsbCBpZiB1bmRlZmluZWQgKi9cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGEoY2xlYXJWaXNpdHM6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vcnNQZXJTcGFjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnpvbmVzUGVyRmxvb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW5ab25lcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsM2QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3dlZXBUb0dvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZsb29yVG9HbyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFpvbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlsZFpvbmUgPSBudWxsO1xyXG4gICAgICAgIGlmIChjbGVhclZpc2l0cykge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2l0c1BlclNwYWNlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy56b25lc1BlclNwYWNlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHRoZSBzZWxlY3RlZExvY2F0aW9uIGNoYW5nZXNcclxuICAgICAqIFNlbmQgYSBldmVudCB0byBsb2NhdGlvbklEQ2hhbmdlIGZyb20gTmF2aWdhdG9yU2VydmljZVxyXG4gICAgICogVGhlIGV2ZW50IHdpbGwgYmUgY2F0Y2ggYnkgdGhpcyBjb21wb25lbnQgYW5kIHRoZSBmaWx0ZXIgYmFyIHdpbGwgYmUgdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHNlbmRVcGRhdGVMb2NhdGlvbkV2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uSUQgPSB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPyB0aGlzLnNlbGVjdGVkTG9jYXRpb24uaWQgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlLm5leHQobG9jYXRpb25JRCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TZWxlY3RlZExvY2F0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaXRzUGVyU3BhY2UgPSBhd2FpdCB0aGlzLnZpc2l0U2VydmljZS5nZXRWaXNpdHNGb3JTcGFjZUZvclVzZXIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24uaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy56b25lc1BlclNwYWNlID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRab25lc0J5U3BhY2VGb3JVc2VyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpc2l0c1BlclNwYWNlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsM2QgPSB0aGlzLnZpc2l0c1BlclNwYWNlWzBdLm1vZGVsM2Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yc1BlclNwYWNlID0gdGhpcy56b25lc1BlclNwYWNlLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoem9uZSkgPT4gem9uZS5sYXllciAmJiB6b25lLmxheWVyLm5hbWUuaW5jbHVkZXMoJ0ZMT09SJylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG9vcnNQZXJTcGFjZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5zZWxlY3RlZEZsb29yXSA9IHRoaXMuZmxvb3JzUGVyU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZsb29yQ2xpY2soZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIG9uQ2hvc2VuTG9jYXRpb24nLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTG9jYXRpb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkZsb29yQ2xpY2soZW1pdEV2ZW50ID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc3dlZXBUb0dvID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoaWxkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubmF2QmFyWm9uZUlEQ2hhbmdlLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyWm9uZUlEID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkRmxvb3IuaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQ7XHJcbiAgICAgICAgdGhpcy56b25lc1BlckZsb29yID0gdGhpcy56b25lc1BlclNwYWNlLmZpbHRlcihcclxuICAgICAgICAgICAgKHpvbmUpID0+XHJcbiAgICAgICAgICAgICAgICAvLyB6b25lLmlkID09PSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQgfHxcclxuICAgICAgICAgICAgICAgIHpvbmUucGFyZW50SUQgPT09IHRoaXMuc2VsZWN0ZWRGbG9vci5pZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25ab25lQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoaWxkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvb3IgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyWm9uZUlEID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkRmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoaWxkcmVuWm9uZXMgPSB0aGlzLnpvbmVzUGVyU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT4gem9uZS5wYXJlbnRJRCA9PT0gdGhpcy5zZWxlY3RlZFpvbmUuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkWm9uZS5pZCk7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkWm9uZS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblZpc2l0Q2xpY2soZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YShmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgY29uc3QgdmlzaXQgPSB0aGlzLnZpc2l0c1BlclNwYWNlW2luZGV4XTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwzZCA9IHZpc2l0Lm1vZGVsM2Q7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Wm9uZUZvclZpc2l0ID0gYXdhaXQgdGhpcy52aXNpdFNlcnZpY2UuZ2V0RGVmYXVsdFpvbmVGb3JWaXNpdChcclxuICAgICAgICAgICAgdmlzaXRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmxvb3JzUGVyU3BhY2UgPSB0aGlzLnpvbmVzUGVyU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgIHpvbmUubGF5ZXIgJiZcclxuICAgICAgICAgICAgICAgIHpvbmUubGF5ZXIubmFtZS5pbmNsdWRlcygnRkxPT1InKSAmJlxyXG4gICAgICAgICAgICAgICAgem9uZS5wYXJlbnRJRCA9PT0gcGFyZW50Wm9uZUZvclZpc2l0LmlkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnb1RvKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkWm9uZSAmJiAhdGhpcy5zZWxlY3RlZFpvbmUudmlydHVhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnN3ZWVwVG9HbyA9IHRoaXMuc2VsZWN0ZWRab25lLnN0YXJ0U3dlZXBJRFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkWm9uZS5zdGFydFN3ZWVwSURcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFpvbmUuc3dlZXBJRHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvb3IgJiYgIXRoaXMuc2VsZWN0ZWRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JUb0dvID0gdGhpcy5zZWxlY3RlZEZsb29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc1dpdGhpblNhbWVWaXNpdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Ub1N3ZWVwT3JGbG9vcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN3ZWVwVG9Hbykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFN3ZWVwVG9Nb3ZlKHRoaXMuc3dlZXBUb0dvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbG9vclRvR28gJiYgdGhpcy5mbG9vcnNQZXJTcGFjZS5sZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5mbG9vclRvR28gPSB0aGlzLmZsb29yVG9HbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Zpc2l0JywgdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkXSwge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgbW9kZWwzRDogdGhpcy5zZWxlY3RlZE1vZGVsM2QgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzV2l0aGluU2FtZVZpc2l0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uSUQgPT09IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbi5pZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwzZCA9PT0gdGhpcy5jdXJyZW50TW9kZWwzZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ29Ub1N3ZWVwT3JGbG9vcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zd2VlcFRvR28pIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmdvVG9Td2VlcFdpdGhSb3RhdGlvbih0aGlzLnN3ZWVwVG9Hbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZsb29yVG9Hbykge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuZ29Ub0Zsb29yKHRoaXMuZmxvb3JUb0dvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFzSGlzdG9yeSgpOiBib29sZWFuIHtcclxuICAgIC8vICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLm1vZGVsSGFzSGlzdG9yeSh0aGlzLnNlbGVjdGVkTW9kZWwzZCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgY2FuR28oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgdmlld2VySXNSZWFkeSA9XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyU2VydmljZS5pc0xvYWRlZCAmJiB0aGlzLnZpZXdlclNlcnZpY2Uuc2hvd2luZ1ZpZXdlcjtcclxuICAgICAgICBjb25zdCBub1ZpZXdlciA9ICF0aGlzLnZpZXdlclNlcnZpY2Uuc2hvd2luZ1ZpZXdlcjtcclxuICAgICAgICByZXR1cm4gdmlld2VySXNSZWFkeSB8fCBub1ZpZXdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TG9jYXRpb24oKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIDwgNzUwICYmXHJcbiAgICAgICAgICAgIHRoaXMubmF2YmFyU2VsZWN0TWVudSAmJlxyXG4gICAgICAgICAgICB0aGlzLm5hdmJhclNlbGVjdE1lbnUubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuc2VhcmNoKCdzaG93JykgPT09IC0xICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExvY2F0aW9uLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxufVxyXG4iLCI8bmF2IGNsYXNzPVwibmF2YmFyIG5hdmJhci1leHBhbmQtbWQgbmF2YmFyLWRhcmsgbmF2YmFyLWludmVyc2Ugc2Vjb25kLW5hdlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggY29sLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZS0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6bWFwLW1hcmtlci1vdXRsaW5lXCIgc3R5bGU9XCJjb2xvcjogd2hpdGU7XCIgZGF0YS13aWR0aD1cIjMwXCIgZGF0YS1oZWlnaHQ9XCIzMFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAjbmF2YmFyU2VsZWN0TWVudSBjbGFzcz1cImNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZVwiIGlkPVwibmF2LWl0ZW0tY29udGFpbmVyLWJsdWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1tZC1yb3cgXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmbGV4LWZpbGwgbG9jYXRpb24gc2VsZWN0LW1lbnVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkxvY2F0aW9uQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIiBzZWxlY3RlZD57eyAnTG9jYXRpb24nIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvYyBvZiBsb2NhdGlvbnM7IGluZGV4IGFzIGluZGV4XCIgW25nVmFsdWVdPVwibG9jXCI+IHt7IGxvYy5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmbGV4LWZpbGwgc2VsZWN0LW1lbnVcIiAoY2hhbmdlKT1cIm9uVmlzaXRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aXNpdHNQZXJTcGFjZSAmJiB2aXNpdHNQZXJTcGFjZS5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCIgc2VsZWN0ZWQgZGlzYWJsZWQgaGlkZGVuPnt7J1Zpc2l0JyB8IHRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZpc2l0IG9mIHZpc2l0c1BlclNwYWNlOyBpbmRleCBhcyBpbmRleFwiIHZhbHVlPVwie3tpbmRleH19XCI+e3sgdmlzaXQubmFtZX19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1maWxsIGZsb29yIHNlbGVjdC1tZW51XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZsb29yXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GbG9vckNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgc2VsZWN0ZWQ+e3snRmxvb3InIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgem9uZSBvZiBmbG9vcnNQZXJTcGFjZVwiIFtuZ1ZhbHVlXT1cInpvbmVcIj57eyB6b25lLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1maWxsIHNlbGVjdC1tZW51IHpvbmVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkWm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uWm9uZUNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgc2VsZWN0ZWQ+e3snWm9uZScgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB6b25lIG9mIHpvbmVzUGVyRmxvb3JcIiBbbmdWYWx1ZV09XCJ6b25lXCI+e3sgem9uZS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZmlsbCBzZWxlY3QtbWVudVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDaGlsZFpvbmVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNoaWxkcmVuWm9uZXMgJiYgY2hpbGRyZW5ab25lcy5sZW5ndGg+MFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIiBzZWxlY3RlZCBkaXNhYmxlZD57eydab25lJyB8IHRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHpvbmUgb2YgY2hpbGRyZW5ab25lc1wiIFtuZ1ZhbHVlXT1cInpvbmVcIj57eyB6b25lLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwhLS0gPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmbGV4LWZpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBpMThuPnt7J0Zhdm9yaXRlcycgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDA7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGVyX2NpcmNsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSdidG4taWNvbicgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZExvY2F0aW9uIHx8ICFzZWxlY3RlZE1vZGVsM2QgfHwgIWNhbkdvKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG8oKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImdvVG8oKVwiIGNsYXNzPVwiYnRuIHJvdW5kZWQtcGlsbCBidG4tM2RcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkTG9jYXRpb24gfHwgIXNlbGVjdGVkTW9kZWwzZCB8fCAhY2FuR28oKVwiPnt7JzNEIHZpc2l0JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGg0IHN0eWxlPVwibGluZS1oZWlnaHQ6IDI5cHg7bWFyZ2luOiAwO1wiICpuZ0lmPVwic2hvd0xvY2F0aW9uKClcIj5cbiAgICAgICAgICAgIHt7IHNob3dMb2NhdGlvbigpIH19XG4gICAgICAgIDwvaDQ+XG4gICAgPC9kaXY+XG48L25hdj5cbiJdfQ==
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL21lbnUtYmFyL25hdmlnYXRpb24tYmFyL25hdmlnYXRpb24tYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9tZW51LWJhci9uYXZpZ2F0aW9uLWJhci9uYXZpZ2F0aW9uLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFhckQsTUFBTSxPQUFPLHNCQUFzQjtJQW1DL0IsWUFDWSxNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsZ0JBQWtDO1FBTGxDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBaEM5QyxxQkFBZ0IsR0FBVSxJQUFJLENBQUM7UUFJL0Isa0JBQWEsR0FBUyxJQUFJLENBQUM7UUFFM0IsaUJBQVksR0FBUyxJQUFJLENBQUM7UUFFMUIsc0JBQWlCLEdBQVMsSUFBSSxDQUFDO1FBRS9CLG1CQUFjLEdBQVks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c0JBQXNCO3VHQUF0QixzQkFBc0IsZ0xDaEJuQyxnMEdBb0RBOzJGRHBDYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0ksb0JBQW9CO3dPQUtDLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwYWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGVscy9zcGFjZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlzaXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kZWxzL3Zpc2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGVscy96b25lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTcGFjZSwgVmlzaXQsIFpvbmUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItbmF2aWdhdGlvbi1iYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRpb24tYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25hdmlnYXRpb24tYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ25hdmJhclNlbGVjdE1lbnUnKSBuYXZiYXJTZWxlY3RNZW51ITogYW55O1xyXG5cclxuICAgIGxvY2F0aW9uczogU3BhY2VbXTtcclxuXHJcbiAgICBjdXJyZW50TG9jYXRpb25JRDogc3RyaW5nO1xyXG5cclxuICAgIGN1cnJlbnRNb2RlbDNkOiBzdHJpbmc7XHJcblxyXG4gICAgc2VsZWN0ZWRMb2NhdGlvbjogU3BhY2UgPSBudWxsO1xyXG5cclxuICAgIHNlbGVjdGVkTW9kZWwzZDogc3RyaW5nO1xyXG5cclxuICAgIHNlbGVjdGVkRmxvb3I6IFpvbmUgPSBudWxsO1xyXG5cclxuICAgIHNlbGVjdGVkWm9uZTogWm9uZSA9IG51bGw7XHJcblxyXG4gICAgc2VsZWN0ZWRDaGlsZFpvbmU6IFpvbmUgPSBudWxsO1xyXG5cclxuICAgIHZpc2l0c1BlclNwYWNlOiBWaXNpdFtdID0gbnVsbDtcclxuXHJcbiAgICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgICB6b25lc1BlclNwYWNlOiBab25lW10gPSBudWxsO1xyXG5cclxuICAgIHpvbmVzUGVyRmxvb3I6IFpvbmVbXSA9IG51bGw7XHJcblxyXG4gICAgY2hpbGRyZW5ab25lczogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgICBzd2VlcFRvR286IHN0cmluZztcclxuXHJcbiAgICBmbG9vclRvR286IFpvbmU7XHJcblxyXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpc2l0U2VydmljZTogVmlzaXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc3BhY2VTZXJ2aWNlLmxvY2F0aW9uVXBkYXRlZFxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAobG9jcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gbG9jcztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9IHRoaXMuZmluZExvY2F0aW9uQnlJRChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbi5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApOyAvLyBVcGRhdGUgT2JqZWN0IChvYmplY3QgYWRkcmVzcyB3aWxsIGNoYW5nZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS52aWV3ZXJJc09uXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChkYXRhOiB7IHNwYWNlSUQ6IHN0cmluZzsgbW9kZWwzRDogc3RyaW5nOyBzd2VlcDogc3RyaW5nIHwgbnVsbDsgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdtZW51IG5hdmlnYXRpb24gcmVjZWl2ZWQgdXBkYXRlJywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb25JRCA9IGRhdGEuc3BhY2VJRDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNb2RlbDNkID0gZGF0YS5tb2RlbDNEO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zcGFjZUlEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5zZWxlY3RlZExvY2F0aW9uIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24uaWQgIT09IGRhdGEuc3BhY2VJRCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uID0gdGhpcy5maW5kTG9jYXRpb25CeUlEKGRhdGEuc3BhY2VJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlIGxpc3RlbiBmb3IgTG9jYXRpb24gY2hhbmdlIGV2ZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmxvY2F0aW9uSURDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uID0gdGhpcy5maW5kTG9jYXRpb25CeUlEKGlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyTG9jYXRpb25JRCA9IGlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkTG9jYXRpb25DaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuem9uZXNGb3JVc2VyQ2hhbmdlXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoem9uZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh6b25lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiB0aGlzLmZsb29yc1BlclNwYWNlICE9PSBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9vclpvbmUgPSB6b25lcy5maW5kKCh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmxvb3Jab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IHRoaXMuZmxvb3JzUGVyU3BhY2UuZmluZCgoZikgPT4gZi5pZCA9PT0gZmxvb3Jab25lLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZsb29yQ2xpY2soZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0TG9jYXRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0TG9jYXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMubG9jYXRpb25zID0gdGhpcy5zcGFjZVNlcnZpY2UubG9jYXRpb25zRm9yVXNlcjtcclxuICAgICAgICBpZiAodGhpcy5sb2NhdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0TG9jYXRpb25zRm9yQ3VycmVudFVzZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudExvY2F0aW9uSUQgJiYgdGhpcy5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSB0aGlzLmZpbmRMb2NhdGlvbkJ5SUQodGhpcy5jdXJyZW50TG9jYXRpb25JRCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFVwZGF0ZUxvY2F0aW9uRXZlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgYSBsb2NhdGlvbiB3aXRoIGEgZ2l2ZW4gSURcclxuICAgICAqIEBwYXJhbSBpZCBJRCBmb3IgdGhlIGxvY2F0aW9uXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbG9jYXRpb24gb3IgbnVsbCBpZiBubyBsb2NhdGlvbiB3ZXJlIGZvdW5kXHJcbiAgICAgKi9cclxuICAgIGZpbmRMb2NhdGlvbkJ5SUQoaWQ6IHN0cmluZyk6IFNwYWNlIHtcclxuICAgICAgICBjb25zdCBzcGFjZSA9IHRoaXMubG9jYXRpb25zLmZpbmQoKGxvYykgPT4gbG9jLmlkID09PSBpZCk7XHJcbiAgICAgICAgcmV0dXJuIHNwYWNlIHx8IG51bGw7IC8qKiBDb252ZXJ0IHRvIG51bGwgaWYgdW5kZWZpbmVkICovXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEYXRhKGNsZWFyVmlzaXRzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JzUGVyU3BhY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy56b25lc1BlckZsb29yID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuWm9uZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbDNkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN3ZWVwVG9HbyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mbG9vclRvR28gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRab25lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpbGRab25lID0gbnVsbDtcclxuICAgICAgICBpZiAoY2xlYXJWaXNpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy52aXNpdHNQZXJTcGFjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZXNQZXJTcGFjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB0aGUgc2VsZWN0ZWRMb2NhdGlvbiBjaGFuZ2VzXHJcbiAgICAgKiBTZW5kIGEgZXZlbnQgdG8gbG9jYXRpb25JRENoYW5nZSBmcm9tIE5hdmlnYXRvclNlcnZpY2VcclxuICAgICAqIFRoZSBldmVudCB3aWxsIGJlIGNhdGNoIGJ5IHRoaXMgY29tcG9uZW50IGFuZCB0aGUgZmlsdGVyIGJhciB3aWxsIGJlIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBzZW5kVXBkYXRlTG9jYXRpb25FdmVudCgpIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbklEID0gdGhpcy5zZWxlY3RlZExvY2F0aW9uID8gdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkIDogbnVsbDtcclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5uZXh0KGxvY2F0aW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU2VsZWN0ZWRMb2NhdGlvbkNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2l0c1BlclNwYWNlID0gYXdhaXQgdGhpcy52aXNpdFNlcnZpY2UuZ2V0VmlzaXRzRm9yU3BhY2VGb3JVc2VyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZXNQZXJTcGFjZSA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlRm9yVXNlcihcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbi5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52aXNpdHNQZXJTcGFjZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbDNkID0gdGhpcy52aXNpdHNQZXJTcGFjZVswXS5tb2RlbDNkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vcnNQZXJTcGFjZSA9IHRoaXMuem9uZXNQZXJTcGFjZS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lLmluY2x1ZGVzKCdGTE9PUicpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gc29ydCBmcm9tIGhpZ2hlc3QgZmxvb3IgdG8gbG93ZXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yc1BlclNwYWNlLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5tZXRhZGF0YSAmJiBiLm1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhQSA9IEpTT04ucGFyc2UoYS5tZXRhZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhQiA9IEpTT04ucGFyc2UoYi5tZXRhZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUIubWF0dGVycG9ydEZsb29yU2VxdWVuY2UgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFBLm1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUZsb29yWm9uZXMgPSB0aGlzLnpvbmVzUGVyU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmlzTXVsdGlwbGVGbG9vclpvbmVcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyBzb3J0IGFscGhhYmV0aWNhbGx5XHJcbiAgICAgICAgICAgICAgICBtdWx0aUZsb29yWm9uZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBtdWx0aUZsb29yIGFuZCBGbG9vcnNcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzUGVyU3BhY2UgPSBbLi4udGhpcy5mbG9vcnNQZXJTcGFjZSwgLi4ubXVsdGlGbG9vclpvbmVzXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb29yc1BlclNwYWNlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnNlbGVjdGVkRmxvb3JdID0gdGhpcy5mbG9vcnNQZXJTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmxvb3JDbGljayhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igb25DaG9zZW5Mb2NhdGlvbicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Mb2NhdGlvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zZW5kVXBkYXRlTG9jYXRpb25FdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRmxvb3JDbGljayhlbWl0RXZlbnQgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vciAmJiB0aGlzLnNlbGVjdGVkRmxvb3IuaXNNdWx0aXBsZUZsb29yWm9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSA9IHRoaXMuc2VsZWN0ZWRGbG9vcjtcclxuICAgICAgICAgICAgdGhpcy5vblpvbmVDbGljaygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3dlZXBUb0dvID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoaWxkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubmF2QmFyWm9uZUlEQ2hhbmdlLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyWm9uZUlEID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkRmxvb3IuaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQ7XHJcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHRoaXMuem9uZXNQZXJTcGFjZSAhPT0gbnVsbCAmJiB0aGlzLnpvbmVzUGVyU3BhY2UgIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy56b25lc1BlckZsb29yID0gdGhpcy56b25lc1BlclNwYWNlLmZpbHRlcihcclxuICAgICAgICAgICAgKHpvbmUpID0+XHJcbiAgICAgICAgICAgICAgICAvLyB6b25lLmlkID09PSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQgfHxcclxuICAgICAgICAgICAgICAgIHpvbmUucGFyZW50SUQgPT09IHRoaXMuc2VsZWN0ZWRGbG9vci5pZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25ab25lQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoaWxkWm9uZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvb3IgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50TmF2QmFyWm9uZUlEID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkRmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkRmxvb3IuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoaWxkcmVuWm9uZXMgPSB0aGlzLnpvbmVzUGVyU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT4gem9uZS5wYXJlbnRJRCA9PT0gdGhpcy5zZWxlY3RlZFpvbmUuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5uYXZCYXJab25lSURDaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkWm9uZS5pZCk7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnROYXZCYXJab25lSUQgPSB0aGlzLnNlbGVjdGVkWm9uZS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblZpc2l0Q2xpY2soZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YShmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgY29uc3QgdmlzaXQgPSB0aGlzLnZpc2l0c1BlclNwYWNlW2luZGV4XTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwzZCA9IHZpc2l0Lm1vZGVsM2Q7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Wm9uZUZvclZpc2l0ID0gYXdhaXQgdGhpcy52aXNpdFNlcnZpY2UuZ2V0RGVmYXVsdFpvbmVGb3JWaXNpdChcclxuICAgICAgICAgICAgdmlzaXRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmxvb3JzUGVyU3BhY2UgPSB0aGlzLnpvbmVzUGVyU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgIHpvbmUubGF5ZXIgJiZcclxuICAgICAgICAgICAgICAgIHpvbmUubGF5ZXIubmFtZS5pbmNsdWRlcygnRkxPT1InKSAmJlxyXG4gICAgICAgICAgICAgICAgem9uZS5wYXJlbnRJRCA9PT0gcGFyZW50Wm9uZUZvclZpc2l0LmlkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnb1RvKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkWm9uZSAmJiAhdGhpcy5zZWxlY3RlZFpvbmUudmlydHVhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnN3ZWVwVG9HbyA9IHRoaXMuc2VsZWN0ZWRab25lLnN0YXJ0U3dlZXBJRFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkWm9uZS5zdGFydFN3ZWVwSURcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFpvbmUuc3dlZXBJRHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvb3IgJiYgIXRoaXMuc2VsZWN0ZWRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JUb0dvID0gdGhpcy5zZWxlY3RlZEZsb29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc1dpdGhpblNhbWVWaXNpdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Ub1N3ZWVwT3JGbG9vcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN3ZWVwVG9Hbykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFN3ZWVwVG9Nb3ZlKHRoaXMuc3dlZXBUb0dvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbG9vclRvR28gJiYgdGhpcy5mbG9vcnNQZXJTcGFjZS5sZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5mbG9vclRvR28gPSB0aGlzLmZsb29yVG9HbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Zpc2l0JywgdGhpcy5zZWxlY3RlZExvY2F0aW9uLmlkXSwge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgbW9kZWwzRDogdGhpcy5zZWxlY3RlZE1vZGVsM2QgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzV2l0aGluU2FtZVZpc2l0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uSUQgPT09IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbi5pZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwzZCA9PT0gdGhpcy5jdXJyZW50TW9kZWwzZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ29Ub1N3ZWVwT3JGbG9vcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zd2VlcFRvR28pIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmdvVG9Td2VlcFdpdGhSb3RhdGlvbih0aGlzLnN3ZWVwVG9Hbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZsb29yVG9Hbykge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuZ29Ub0Zsb29yKHRoaXMuZmxvb3JUb0dvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFzSGlzdG9yeSgpOiBib29sZWFuIHtcclxuICAgIC8vICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLm1vZGVsSGFzSGlzdG9yeSh0aGlzLnNlbGVjdGVkTW9kZWwzZCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgY2FuR28oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgdmlld2VySXNSZWFkeSA9XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyU2VydmljZS5pc0xvYWRlZCAmJiB0aGlzLnZpZXdlclNlcnZpY2Uuc2hvd2luZ1ZpZXdlcjtcclxuICAgICAgICBjb25zdCBub1ZpZXdlciA9ICF0aGlzLnZpZXdlclNlcnZpY2Uuc2hvd2luZ1ZpZXdlcjtcclxuICAgICAgICByZXR1cm4gdmlld2VySXNSZWFkeSB8fCBub1ZpZXdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TG9jYXRpb24oKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIDwgNzUwICYmXHJcbiAgICAgICAgICAgIHRoaXMubmF2YmFyU2VsZWN0TWVudSAmJlxyXG4gICAgICAgICAgICB0aGlzLm5hdmJhclNlbGVjdE1lbnUubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuc2VhcmNoKCdzaG93JykgPT09IC0xICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExvY2F0aW9uLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxufVxyXG4iLCI8bmF2IGNsYXNzPVwibmF2YmFyIG5hdmJhci1leHBhbmQtbWQgbmF2YmFyLWRhcmsgbmF2YmFyLWludmVyc2Ugc2Vjb25kLW5hdlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggY29sLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZS0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6bWFwLW1hcmtlci1vdXRsaW5lXCIgc3R5bGU9XCJjb2xvcjogd2hpdGU7XCIgZGF0YS13aWR0aD1cIjMwXCIgZGF0YS1oZWlnaHQ9XCIzMFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgI25hdmJhclNlbGVjdE1lbnUgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2VcIiBpZD1cIm5hdi1pdGVtLWNvbnRhaW5lci1ibHVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtbWQtcm93IFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1maWxsIGxvY2F0aW9uIHNlbGVjdC1tZW51XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Mb2NhdGlvbkNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgc2VsZWN0ZWQ+e3sgJ0xvY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb2Mgb2YgbG9jYXRpb25zOyBpbmRleCBhcyBpbmRleFwiIFtuZ1ZhbHVlXT1cImxvY1wiPiB7eyBsb2MubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1maWxsIHNlbGVjdC1tZW51XCIgKGNoYW5nZSk9XCJvblZpc2l0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmlzaXRzUGVyU3BhY2UgJiYgdmlzaXRzUGVyU3BhY2UubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGVmYXVsdFwiIHNlbGVjdGVkIGRpc2FibGVkIGhpZGRlbj57eydWaXNpdCcgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2aXNpdCBvZiB2aXNpdHNQZXJTcGFjZTsgaW5kZXggYXMgaW5kZXhcIiB2YWx1ZT1cInt7aW5kZXh9fVwiPnt7IHZpc2l0Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZmlsbCBmbG9vciBzZWxlY3QtbWVudVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGbG9vclwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmxvb3JDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIHNlbGVjdGVkPnt7J0Zsb29yJyB8IHRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGZsb29yIG9mIGZsb29yc1BlclNwYWNlXCIgW25nVmFsdWVdPVwiZmxvb3JcIj57eyBmbG9vci5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZmlsbCBzZWxlY3QtbWVudSB6b25lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFpvbmVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblpvbmVDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIHNlbGVjdGVkPnt7J1pvbmUnIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgem9uZSBvZiB6b25lc1BlckZsb29yXCIgW25nVmFsdWVdPVwiem9uZVwiPnt7IHpvbmUubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmbGV4LWZpbGwgc2VsZWN0LW1lbnVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ2hpbGRab25lXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGlsZHJlblpvbmVzICYmIGNoaWxkcmVuWm9uZXMubGVuZ3RoPjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgc2VsZWN0ZWQgZGlzYWJsZWQ+e3snWm9uZScgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB6b25lIG9mIGNoaWxkcmVuWm9uZXNcIiBbbmdWYWx1ZV09XCJ6b25lXCI+e3sgem9uZS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1maWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gaTE4bj57eydGYXZvcml0ZXMnIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRlcl9jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0nYnRuLWljb24nIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRMb2NhdGlvbiB8fCAhc2VsZWN0ZWRNb2RlbDNkIHx8ICFjYW5HbygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvKClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJnb1RvKClcIiBjbGFzcz1cImJ0biByb3VuZGVkLXBpbGwgYnRuLTNkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZExvY2F0aW9uIHx8ICFzZWxlY3RlZE1vZGVsM2QgfHwgIWNhbkdvKClcIj57eyczRCB2aXNpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxoNCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyOXB4O21hcmdpbjogMDtcIiAqbmdJZj1cInNob3dMb2NhdGlvbigpXCI+XG4gICAgICAgICAgICB7eyBzaG93TG9jYXRpb24oKSB9fVxuICAgICAgICA8L2g0PlxuICAgIDwvZGl2PlxuPC9uYXY+XG4iXX0=
@@ -35,16 +35,19 @@ export class ZoneService {
35
35
  return this.getZonesBySpace(spaceID);
36
36
  }
37
37
  list.push(allowedZone);
38
- const children = await this.API.ListZones({
39
- parentID: { eq: allowedZone.id },
40
- });
41
- if (children.items.length > 0) {
42
- for (const child of children.items) {
38
+ // allow all children zones of an allowed parent
39
+ const children = (await this.API.__proto__.ZonesByZone(allowedZone.id)).items;
40
+ if (children.length > 0) {
41
+ for (const child of children) {
43
42
  const childZone = { ...child };
44
43
  childZone.virtual = this.zoneIsVirtual(child);
45
44
  list.push(childZone);
46
45
  }
47
46
  }
47
+ // allow the parent Floor of the allowed zone
48
+ if (allowedZone.parent.layer && allowedZone.parent.layer.name === "FLOOR") {
49
+ list.push(allowedZone.parent);
50
+ }
48
51
  }
49
52
  else {
50
53
  return this.getZonesBySpace(spaceID);
@@ -215,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
215
218
  type: Inject,
216
219
  args: ['currentAPIService']
217
220
  }] }, { type: i1.BaseUserService }]; } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvem9uZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT25ELE1BQU0sT0FBTyxXQUFXO0lBR3BCLFlBQXlDLFdBQWdCLEVBQVUsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzNGLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWU7UUFDakMsTUFBTSxJQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUksS0FBSyxFQUFFO2dCQUNQLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtvQkFDNUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBVSxDQUFDO29CQUN2QyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3pCO2FBQ0o7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDbkQ7SUFFTCxDQUFDO0lBRUQs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QyxPQUFPLENBQUMsQ0FBQztRQUNyRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFlO1FBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFHRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFlBQW9CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pGLENBQUM7O3dHQXBQUSxXQUFXLGtCQUdBLG1CQUFtQjs0R0FIOUIsV0FBVyxjQUZSLE1BQU07MkZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRGJPYmplY3RUeXBlLCBab25lIH0gZnJvbSBcIi4uLy4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3VzZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBab25lU2VydmljZSB7XHJcbiAgICBBUEk6IGFueTsgLy9BV1MgQVBJU2VydmljZVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSwgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRab25lc0J5U3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxab25lPj4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3Q6IFpvbmVbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLkFQSS5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ1pvbmVzQnlTcGFjZScpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAgICAgaWYgKHpvbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHpvbmUgb2Ygem9uZXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB6b25lT2JqZWN0ID0geyAuLi56b25lIH0gYXMgWm9uZTtcclxuICAgICAgICAgICAgICAgICAgICB6b25lT2JqZWN0LnZpcnR1YWwgPSB0aGlzLnpvbmVJc1ZpcnR1YWwoem9uZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHpvbmVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWm9uZXNCeVNwYWNlIG5vdCBpbXBsZW1lbnRlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Wm9uZXNCeVNwYWNlRm9yVXNlcihzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25Gb3JMb2NhdGlvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IFtdO1xyXG4gICAgICAgIGlmIChtaXNzaW9uRm9yTG9jYXRpb24gJiYgbWlzc2lvbkZvckxvY2F0aW9uLnpvbmVJRCkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkWm9uZSA9IGF3YWl0IHRoaXMuZ2V0Wm9uZShtaXNzaW9uRm9yTG9jYXRpb24uem9uZUlEKTtcclxuICAgICAgICAgICAgYWxsb3dlZFpvbmUudmlydHVhbCA9IHRoaXMuem9uZUlzVmlydHVhbChhbGxvd2VkWm9uZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3dlZFpvbmUucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgd2hvbGUgYnVpbGRpbmcgaXMgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpc3QucHVzaChhbGxvd2VkWm9uZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5BUEkuTGlzdFpvbmVzKHtcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiB7IGVxOiBhbGxvd2VkWm9uZS5pZCB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4uaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFpvbmUgPSB7IC4uLmNoaWxkIH0gYXMgWm9uZTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZFpvbmUudmlydHVhbCA9IHRoaXMuem9uZUlzVmlydHVhbChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKGNoaWxkWm9uZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRab25lc0J5U3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclpvbmVzSURzRm9yVXNlcih6b25lczogWm9uZVtdKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgICAgICBjb25zdCB7IHNwYWNlSUQgfSA9IHpvbmVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHpvbmVJRHMgPSBuZXcgU2V0KHpvbmVzLm1hcCgoem9uZSkgPT4gem9uZS5pZCkpO1xyXG4gICAgICAgIGNvbnN0IGFsbG93ZWRab25lcyA9IGF3YWl0IHRoaXMuZ2V0Wm9uZXNCeVNwYWNlRm9yVXNlcihzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZFpvbmVzID0gYWxsb3dlZFpvbmVzLmZpbHRlcigoem9uZSkgPT5cclxuICAgICAgICAgICAgem9uZUlEcy5oYXMoem9uZS5pZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyZWRab25lcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVab25lKHsgaWQ6IHpvbmVJRCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRab25lc0ZvclN3ZWVwRm9yU3BhY2UoXHJcbiAgICAgICAgc3dlZXBJRDogc3RyaW5nLFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3Qgem9uZXNTcGFjZSA9IChhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uWm9uZXNCeVNwYWNlKHNwYWNlSUQpKS5pdGVtcztcclxuICAgICAgICByZXR1cm4gem9uZXNTcGFjZS5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLnN3ZWVwSURzICYmIHpvbmUuc3dlZXBJRHMuaW5jbHVkZXMoc3dlZXBJRCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xyXG4gICAgc29ydFpvbmVzRnJvbUNoaWxkVG9QYXJlbnQoem9uZXNUb1NvcnQ6IFpvbmVbXSkge1xyXG4gICAgICAgIC8vIGdldCBkZWZhdWx0XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFpvbmUgPSB6b25lc1RvU29ydC5maW5kKCh6KSA9PiAhei5wYXJlbnRJRCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2YgPSB6b25lc1RvU29ydC5pbmRleE9mKGRlZmF1bHRab25lKTtcclxuICAgICAgICAgICAgem9uZXNUb1NvcnQuc3BsaWNlKGluZGV4T2YsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB6b25lcyA9IHpvbmVzVG9Tb3J0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEucGFyZW50SUQgPT09IGIuaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBzbyBmYXIgYnkgbnVtYmVyIG9mIG5hdmlnYXRpb24gcG9pbnRzIGluIHRoZW1cclxuICAgICAgICAvLyBjb25zdCB6b25lcyA9IHpvbmVzVG9Tb3J0LnNvcnQoXHJcbiAgICAgICAgLy8gICAgIChhLCBiKSA9PiBhLm5hdmlnYXRpb25zLml0ZW1zLmxlbmd0aCAtIGIubmF2aWdhdGlvbnMuaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHpvbmVzLnB1c2goZGVmYXVsdFpvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gem9uZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Wm9uZXNGb3JPYmplY3QoXHJcbiAgICAgICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGlmIChvYmplY3QucG9pcy5pdGVtcyAmJiBvYmplY3QucG9pcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gb2JqZWN0LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRab25lc0ZvclN3ZWVwRm9yU3BhY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pLm1hdHRlcnBvcnRTd2VlcElELFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB6b25lcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVWaXJ0dWFsWm9uZSh6b25lSW5wdXQ6IFpvbmUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHMgPSBbXTtcclxuICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZVpvbmUoem9uZUlucHV0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInZpcnR1YWwgem9uZSBjcmVhdGVkXCIsIHpvbmUpO1xyXG4gICAgICAgIHJldHVybiB6b25lO1xyXG4gICAgfVxyXG5cclxuICAgIHpvbmVJc1ZpcnR1YWwoem9uZTogWm9uZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghem9uZS5zd2VlcElEcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoem9uZS50YWdzICYmIHpvbmUudGFncy5pbmNsdWRlcyhcInZpcnR1YWxcIikpIHx8XHJcbiAgICAgICAgICAgIHpvbmUuc3dlZXBJRHMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TW9kZWwzREZvclpvbmUoem9uZUlEOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uR2V0Wm9uZSh6b25lSUQpO1xyXG4gICAgICAgIGlmICh6b25lLm5vZGVJRHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5HZXROb2RlKHpvbmUubm9kZUlEc1swXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLm1vZGVsM0Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFpvbmUoem9uZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldFpvbmUoem9uZUlEKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREZWZhdWx0Wm9uZUZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKS50aGVuKGFzeW5jICh6b25lcykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB6b25lc0J1aWxkaW5nID0gem9uZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh6b25lc0J1aWxkaW5nLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHpvbmVzQnVpbGRpbmdbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Wm9uZSA9IHpvbmVzLmZpbmQoKHpvbmUpID0+ICF6b25lLnBhcmVudElEKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFpvbmU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlKGlucHV0OiBab25lKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVab25lKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3luYyBnZXRTb3J0ZWRab25lc0ZvclN3ZWVwRm9yVXNlcihcclxuICAgIC8vICAgICBzd2VlcDogc3RyaW5nLFxyXG4gICAgLy8gICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIC8vICk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAvLyAgICAgaWYgKCFzcGFjZUlEKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBbXTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLmdldFpvbmVzRm9yU3dlZXBGb3JTcGFjZShzd2VlcCwgc3BhY2VJRCk7XHJcbiAgICAvLyAgICAgaWYgKHpvbmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gW107XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnN0IGZpbHRlcmVkWm9uZXMgPSBhd2FpdCB0aGlzLmZpbHRlclpvbmVzSURzRm9yVXNlcih6b25lcyk7XHJcbiAgICAvLyAgICAgaWYgKGZpbHRlcmVkWm9uZXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBsZXQgem9uZXNTb3J0ZWQgPSB0aGlzLnNvcnRab25lc0Zyb21DaGlsZFRvUGFyZW50KGZpbHRlcmVkWm9uZXMpO1xyXG4gICAgLy8gICAgICAgICB6b25lc1NvcnRlZCA9IHpvbmVzU29ydGVkLmZpbHRlcigoem9uZSkgPT4gem9uZSAhPT0gdW5kZWZpbmVkKTtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHpvbmVzU29ydGVkO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gW107XHJcbiAgICAvLyB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlWm9uZShpbnB1dDogYW55KTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVab25lKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRab25lc0Zvck5vZGVGb3JTcGFjZShcclxuICAgICAgICBub2RlSUQ6IHN0cmluZyxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uWm9uZXNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oYXN5bmMgKHpvbmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkWm9uZXMgPSB6b25lcy5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoem9uZSkgPT4gem9uZS5ub2RlSURzICYmIHpvbmUubm9kZUlEcy5pbmNsdWRlcyhub2RlSUQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRab25lcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIFpvbmUgKGxheWVyIEZMT09SKSBmb3IgYSBtYXR0ZXJwb3J0IHN3ZWVwIElEIGluIGEgZ2l2ZW4gU3BhY2VcclxuICAgICAqIEBwYXJhbSBzd2VlcElEIFxyXG4gICAgICogQHBhcmFtIHNwYWNlSUQgXHJcbiAgICAgKiBAcmV0dXJucyBab25lXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEZsb29yWm9uZUZvclN3ZWVwSW5TcGFjZShzd2VlcElEOiBzdHJpbmcsIHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRab25lc0ZvclN3ZWVwRm9yU3BhY2Uoc3dlZXBJRCwgc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgZmxvb3JzID0gem9uZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT4gem9uZS5sYXllciAmJiB6b25lLmxheWVyLm5hbWUuaW5jbHVkZXMoXCJGTE9PUlwiKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmbG9vcnMubGVuZ3RoID4gMCA/IGZsb29yc1swXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgem9uZXMgd2l0aCBhdWRpbyB0cmFjayBmb3IgZW50aXJlIHNwYWNlXHJcbiAgICAgKiBAcGFyYW0gc3BhY2VJRCBcclxuICAgICAqIEByZXR1cm5zICBQcm9taXNlPFpvbmVbXT5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QXVkaW9ab25lc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsWm9uZXMgPSBhd2FpdCB0aGlzLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICByZXR1cm4gYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLmF1ZGlvSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGF1ZGlvIHpvbmVzIGZvciB1c2VyICh3aXRoaW4gYWxsb3dlZCB6b25lcylcclxuICAgICAqIEBwYXJhbSBzcGFjZUlEIFxyXG4gICAgICogQHJldHVybnMgIFByb21pc2U8Wm9uZVtdPlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRBdWRpb1pvbmVzRm9yVXNlckZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3QgdXNlclpvbmVzID0gYXdhaXQgdGhpcy5nZXRab25lc0J5U3BhY2VGb3JVc2VyKHNwYWNlSUQpO1xyXG4gICAgICAgIHJldHVybiB1c2VyWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLmF1ZGlvSUQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBab25lcyBieSBQYXJlbnQgWm9uZSBJRFxyXG4gICAgICogQHBhcmFtIHBhcmVudFpvbmVJRCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8Wm9uZVtdPlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRab25lc0J5UGFyZW50Wm9uZShwYXJlbnRab25lSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5ab25lc0J5Wm9uZShwYXJlbnRab25lSUQpLnRoZW4oKHJlcykgPT4gcmVzLml0ZW1zKTtcclxuICAgIH1cclxufVxyXG4iXX0=
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvem9uZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT25ELE1BQU0sT0FBTyxXQUFXO0lBR3BCLFlBQXlDLFdBQWdCLEVBQVUsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzNGLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWU7UUFDakMsTUFBTSxJQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUksS0FBSyxFQUFFO2dCQUNQLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtvQkFDNUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBVSxDQUFDO29CQUN2QyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3pCO2FBQ0o7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDbkQ7SUFFTCxDQUFDO0lBRUQs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TSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBZTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNEJBQTRCLENBQUMsT0FBZTtRQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxZQUFvQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRixDQUFDOzt3R0F2UFEsV0FBVyxrQkFHQSxtQkFBbUI7NEdBSDlCLFdBQVcsY0FGUixNQUFNOzJGQUVULFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJZ0IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERiT2JqZWN0VHlwZSwgWm9uZSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWm9uZVNlcnZpY2Uge1xyXG4gICAgQVBJOiBhbnk7IC8vQVdTIEFQSVNlcnZpY2VcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8Wm9uZT4+IHtcclxuICAgICAgICBjb25zdCBsaXN0OiBab25lW10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5BUEkuX19wcm90b19fLmhhc093blByb3BlcnR5KCdab25lc0J5U3BhY2UnKSkge1xyXG4gICAgICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5ab25lc0J5U3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgICAgIGlmICh6b25lcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZU9iamVjdCA9IHsgLi4uem9uZSB9IGFzIFpvbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgem9uZU9iamVjdC52aXJ0dWFsID0gdGhpcy56b25lSXNWaXJ0dWFsKHpvbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCh6b25lT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1pvbmVzQnlTcGFjZSBub3QgaW1wbGVtZW50ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFpvbmVzQnlTcGFjZUZvclVzZXIoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uRm9yTG9jYXRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcclxuICAgICAgICBpZiAobWlzc2lvbkZvckxvY2F0aW9uICYmIG1pc3Npb25Gb3JMb2NhdGlvbi56b25lSUQpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3dlZFpvbmUgPSBhd2FpdCB0aGlzLmdldFpvbmUobWlzc2lvbkZvckxvY2F0aW9uLnpvbmVJRCk7XHJcbiAgICAgICAgICAgIGFsbG93ZWRab25lLnZpcnR1YWwgPSB0aGlzLnpvbmVJc1ZpcnR1YWwoYWxsb3dlZFpvbmUpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93ZWRab25lLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhlIHdob2xlIGJ1aWxkaW5nIGlzIGF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0LnB1c2goYWxsb3dlZFpvbmUpO1xyXG4gICAgICAgICAgICAvLyBhbGxvdyBhbGwgY2hpbGRyZW4gem9uZXMgb2YgYW4gYWxsb3dlZCBwYXJlbnRcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlpvbmVzQnlab25lKGFsbG93ZWRab25lLmlkKSkuaXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRab25lID0geyAuLi5jaGlsZCB9IGFzIFpvbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRab25lLnZpcnR1YWwgPSB0aGlzLnpvbmVJc1ZpcnR1YWwoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChjaGlsZFpvbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFsbG93IHRoZSBwYXJlbnQgRmxvb3Igb2YgdGhlIGFsbG93ZWQgem9uZVxyXG4gICAgICAgICAgICBpZiAoYWxsb3dlZFpvbmUucGFyZW50LmxheWVyICYmIGFsbG93ZWRab25lLnBhcmVudC5sYXllci5uYW1lID09PSBcIkZMT09SXCIpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaChhbGxvd2VkWm9uZS5wYXJlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJab25lc0lEc0ZvclVzZXIoem9uZXM6IFpvbmVbXSk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3QgeyBzcGFjZUlEIH0gPSB6b25lc1swXTtcclxuICAgICAgICBjb25zdCB6b25lSURzID0gbmV3IFNldCh6b25lcy5tYXAoKHpvbmUpID0+IHpvbmUuaWQpKTtcclxuICAgICAgICBjb25zdCBhbGxvd2VkWm9uZXMgPSBhd2FpdCB0aGlzLmdldFpvbmVzQnlTcGFjZUZvclVzZXIoc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRab25lcyA9IGFsbG93ZWRab25lcy5maWx0ZXIoKHpvbmUpID0+XHJcbiAgICAgICAgICAgIHpvbmVJRHMuaGFzKHpvbmUuaWQpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkWm9uZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlWm9uZSh6b25lSUQ6IHN0cmluZyk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlWm9uZSh7IGlkOiB6b25lSUQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Wm9uZXNGb3JTd2VlcEZvclNwYWNlKFxyXG4gICAgICAgIHN3ZWVwSUQ6IHN0cmluZyxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzU3BhY2UgPSAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlpvbmVzQnlTcGFjZShzcGFjZUlEKSkuaXRlbXM7XHJcbiAgICAgICAgcmV0dXJuIHpvbmVzU3BhY2UuZmlsdGVyKFxyXG4gICAgICAgICAgICAoem9uZSkgPT4gem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmluY2x1ZGVzKHN3ZWVwSUQpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcclxuICAgIHNvcnRab25lc0Zyb21DaGlsZFRvUGFyZW50KHpvbmVzVG9Tb3J0OiBab25lW10pIHtcclxuICAgICAgICAvLyBnZXQgZGVmYXVsdFxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRab25lID0gem9uZXNUb1NvcnQuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleE9mID0gem9uZXNUb1NvcnQuaW5kZXhPZihkZWZhdWx0Wm9uZSk7XHJcbiAgICAgICAgICAgIHpvbmVzVG9Tb3J0LnNwbGljZShpbmRleE9mLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSB6b25lc1RvU29ydC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLnBhcmVudElEID09PSBiLmlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc28gZmFyIGJ5IG51bWJlciBvZiBuYXZpZ2F0aW9uIHBvaW50cyBpbiB0aGVtXHJcbiAgICAgICAgLy8gY29uc3Qgem9uZXMgPSB6b25lc1RvU29ydC5zb3J0KFxyXG4gICAgICAgIC8vICAgICAoYSwgYikgPT4gYS5uYXZpZ2F0aW9ucy5pdGVtcy5sZW5ndGggLSBiLm5hdmlnYXRpb25zLml0ZW1zLmxlbmd0aCxcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgICB6b25lcy5wdXNoKGRlZmF1bHRab25lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHpvbmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFpvbmVzRm9yT2JqZWN0KFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgICAgICBpZiAob2JqZWN0LnBvaXMuaXRlbXMgJiYgb2JqZWN0LnBvaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBbcG9pXSA9IG9iamVjdC5wb2lzLml0ZW1zO1xyXG4gICAgICAgICAgICBpZiAocG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0Wm9uZXNGb3JTd2VlcEZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCxcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gem9uZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlVmlydHVhbFpvbmUoem9uZUlucHV0OiBab25lKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgem9uZUlucHV0LnN3ZWVwSURzID0gW107XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVab25lKHpvbmVJbnB1dCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ2aXJ0dWFsIHpvbmUgY3JlYXRlZFwiLCB6b25lKTtcclxuICAgICAgICByZXR1cm4gem9uZTtcclxuICAgIH1cclxuXHJcbiAgICB6b25lSXNWaXJ0dWFsKHpvbmU6IFpvbmUpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXpvbmUuc3dlZXBJRHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHpvbmUudGFncyAmJiB6b25lLnRhZ3MuaW5jbHVkZXMoXCJ2aXJ0dWFsXCIpKSB8fFxyXG4gICAgICAgICAgICB6b25lLnN3ZWVwSURzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1vZGVsM0RGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkdldFpvbmUoem9uZUlEKTtcclxuICAgICAgICBpZiAoem9uZS5ub2RlSURzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uR2V0Tm9kZSh6b25lLm5vZGVJRHNbMF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5tb2RlbDNEO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRab25lKHpvbmVJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGVmYXVsdFpvbmVGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRab25lc0J5U3BhY2Uoc3BhY2VJRCkudGhlbihhc3luYyAoem9uZXMpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgem9uZXNCdWlsZGluZyA9IHpvbmVzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJCVUlMRElOR1wiLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoem9uZXNCdWlsZGluZy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB6b25lc0J1aWxkaW5nWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFpvbmUgPSB6b25lcy5maW5kKCh6b25lKSA9PiAhem9uZS5wYXJlbnRJRCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRab25lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZShpbnB1dDogWm9uZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlWm9uZShpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgZ2V0U29ydGVkWm9uZXNGb3JTd2VlcEZvclVzZXIoXHJcbiAgICAvLyAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgIC8vICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAvLyApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgLy8gICAgIGlmICghc3BhY2VJRCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gW107XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRab25lc0ZvclN3ZWVwRm9yU3BhY2Uoc3dlZXAsIHNwYWNlSUQpO1xyXG4gICAgLy8gICAgIGlmICh6b25lcy5sZW5ndGggPT09IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBjb25zdCBmaWx0ZXJlZFpvbmVzID0gYXdhaXQgdGhpcy5maWx0ZXJab25lc0lEc0ZvclVzZXIoem9uZXMpO1xyXG4gICAgLy8gICAgIGlmIChmaWx0ZXJlZFpvbmVzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgbGV0IHpvbmVzU29ydGVkID0gdGhpcy5zb3J0Wm9uZXNGcm9tQ2hpbGRUb1BhcmVudChmaWx0ZXJlZFpvbmVzKTtcclxuICAgIC8vICAgICAgICAgem9uZXNTb3J0ZWQgPSB6b25lc1NvcnRlZC5maWx0ZXIoKHpvbmUpID0+IHpvbmUgIT09IHVuZGVmaW5lZCk7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB6b25lc1NvcnRlZDtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIFtdO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZVpvbmUoaW5wdXQ6IGFueSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlWm9uZShpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Wm9uZXNGb3JOb2RlRm9yU3BhY2UoXHJcbiAgICAgICAgbm9kZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlpvbmVzQnlTcGFjZShzcGFjZUlEKS50aGVuKGFzeW5jICh6b25lcykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFpvbmVzID0gem9uZXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubm9kZUlEcyAmJiB6b25lLm5vZGVJRHMuaW5jbHVkZXMobm9kZUlEKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkWm9uZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBab25lIChsYXllciBGTE9PUikgZm9yIGEgbWF0dGVycG9ydCBzd2VlcCBJRCBpbiBhIGdpdmVuIFNwYWNlXHJcbiAgICAgKiBAcGFyYW0gc3dlZXBJRCBcclxuICAgICAqIEBwYXJhbSBzcGFjZUlEIFxyXG4gICAgICogQHJldHVybnMgWm9uZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRGbG9vclpvbmVGb3JTd2VlcEluU3BhY2Uoc3dlZXBJRDogc3RyaW5nLCBzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0Wm9uZXNGb3JTd2VlcEZvclNwYWNlKHN3ZWVwSUQsIHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGZsb29ycyA9IHpvbmVzLmZpbHRlcihcclxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lLmluY2x1ZGVzKFwiRkxPT1JcIiksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmxvb3JzLmxlbmd0aCA+IDAgPyBmbG9vcnNbMF0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHpvbmVzIHdpdGggYXVkaW8gdHJhY2sgZm9yIGVudGlyZSBzcGFjZVxyXG4gICAgICogQHBhcmFtIHNwYWNlSUQgXHJcbiAgICAgKiBAcmV0dXJucyAgUHJvbWlzZTxab25lW10+XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEF1ZGlvWm9uZXNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbFpvbmVzID0gYXdhaXQgdGhpcy5nZXRab25lc0J5U3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgcmV0dXJuIGFsbFpvbmVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5hdWRpb0lEKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdWRpbyB6b25lcyBmb3IgdXNlciAod2l0aGluIGFsbG93ZWQgem9uZXMpXHJcbiAgICAgKiBAcGFyYW0gc3BhY2VJRCBcclxuICAgICAqIEByZXR1cm5zICBQcm9taXNlPFpvbmVbXT5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QXVkaW9ab25lc0ZvclVzZXJGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXJab25lcyA9IGF3YWl0IHRoaXMuZ2V0Wm9uZXNCeVNwYWNlRm9yVXNlcihzcGFjZUlEKTtcclxuICAgICAgICByZXR1cm4gdXNlclpvbmVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5hdWRpb0lEKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgWm9uZXMgYnkgUGFyZW50IFpvbmUgSURcclxuICAgICAqIEBwYXJhbSBwYXJlbnRab25lSUQgc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPFpvbmVbXT5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0Wm9uZXNCeVBhcmVudFpvbmUocGFyZW50Wm9uZUlEOiBzdHJpbmcpOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uWm9uZXNCeVpvbmUocGFyZW50Wm9uZUlEKS50aGVuKChyZXMpID0+IHJlcy5pdGVtcyk7XHJcbiAgICB9XHJcbn1cclxuIl19