@smarterplan/ngx-smarterplan-locations 0.2.21 → 0.2.23

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.
@@ -0,0 +1,47 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ngx-translate/core";
4
+ import * as i2 from "@angular/common";
5
+ export class PlanLegendComponent {
6
+ constructor(translate) {
7
+ this.translate = translate;
8
+ this.isAudioZone = false;
9
+ this.buttonsToRender = [];
10
+ this.colorToText = {};
11
+ }
12
+ async ngOnInit() {
13
+ this.render();
14
+ }
15
+ async render() {
16
+ this.buttonsToRender = [
17
+ {
18
+ url: `url("https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17")`,
19
+ text: this.translate.instant("legend.green")
20
+ },
21
+ {
22
+ url: `url("https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17")`,
23
+ text: this.translate.instant("legend.red")
24
+ }
25
+ ];
26
+ if (this.isAudioZone) {
27
+ let audioPoints = [{
28
+ url: `url("https://api.iconify.design/mdi:close-circle-outline.svg?color=black&height=17&width=17")`,
29
+ text: this.translate.instant("legend.black")
30
+ },
31
+ {
32
+ url: `url("https://api.iconify.design/mdi:adjust.svg?color=orange&height=17&width=17")`,
33
+ text: this.translate.instant("legend.orange")
34
+ }];
35
+ this.buttonsToRender = this.buttonsToRender.concat(audioPoints);
36
+ }
37
+ }
38
+ }
39
+ PlanLegendComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
40
+ PlanLegendComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: PlanLegendComponent, selector: "lib-plan-legend", inputs: { isAudioZone: "isAudioZone" }, ngImport: i0, template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\r\n <h5>{{\"legend.title\" | translate}}</h5>\r\n <div class=\"legendBox\">\r\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\r\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\r\n <span>{{elemnt.text}}</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "translate": i1.TranslatePipe } });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'lib-plan-legend', template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\r\n <h5>{{\"legend.title\" | translate}}</h5>\r\n <div class=\"legendBox\">\r\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\r\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\r\n <span>{{elemnt.text}}</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"] }]
44
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { isAudioZone: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi1sZWdlbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvcGxhbi1sZWdlbmQvcGxhbi1sZWdlbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvcGxhbi1sZWdlbmQvcGxhbi1sZWdlbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWMsTUFBTSxlQUFlLENBQUM7Ozs7QUFRckUsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixZQUNVLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBUDVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXRDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXJCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO0lBSWQsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQjtnQkFDRSxHQUFHLEVBQUUsaUZBQWlGO2dCQUN0RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQzdDO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLDZGQUE2RjtnQkFDbEcsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUMzQztTQUNGLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQztvQkFDakIsR0FBRyxFQUFFLCtGQUErRjtvQkFDcEcsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztpQkFDN0M7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLGtGQUFrRjtvQkFDdkYsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztpQkFDOUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUNsRTtJQUNILENBQUM7O2dIQXJDVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrRkNSaEMsc1pBU0E7MkZERGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjt1R0FLbEIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBsYW4tbGVnZW5kJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGxhbi1sZWdlbmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BsYW4tbGVnZW5kLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYW5MZWdlbmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGlzQXVkaW9ab25lPzpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGJ1dHRvbnNUb1JlbmRlciA9IFtdO1xyXG5cclxuICBjb2xvclRvVGV4dCA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcigpXHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXIoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbnNUb1JlbmRlciA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHVybDogYHVybChcImh0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL21kaTphZGp1c3Quc3ZnP2NvbG9yPWdyZWVuJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWAsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImxlZ2VuZC5ncmVlblwiKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdXJsOiBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmNsb3NlLWNpcmNsZS1vdXRsaW5lLnN2Zz9jb2xvcj1yZWQmaGVpZ2h0PTE3JndpZHRoPTE3XCIpYCxcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwibGVnZW5kLnJlZFwiKVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgICBpZiAodGhpcy5pc0F1ZGlvWm9uZSkge1xyXG4gICAgICAgIGxldCBhdWRpb1BvaW50cyA9IFt7XHJcbiAgICAgICAgICB1cmw6IGB1cmwoXCJodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9tZGk6Y2xvc2UtY2lyY2xlLW91dGxpbmUuc3ZnP2NvbG9yPWJsYWNrJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWAsXHJcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwibGVnZW5kLmJsYWNrXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1cmw6IGB1cmwoXCJodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9tZGk6YWRqdXN0LnN2Zz9jb2xvcj1vcmFuZ2UmaGVpZ2h0PTE3JndpZHRoPTE3XCIpYCxcclxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJsZWdlbmQub3JhbmdlXCIpXHJcbiAgICAgICAgfV1cclxuICAgICAgICB0aGlzLmJ1dHRvbnNUb1JlbmRlciA9IHRoaXMuYnV0dG9uc1RvUmVuZGVyLmNvbmNhdChhdWRpb1BvaW50cylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vc3R5bGVCdXR0b24oZWxlbWVudCwgU3dlZXBTdGF0ZS5ESVNBQkxFRCk7XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtdC0zIG1zLTNcIiBjbGFzcz1cImxlZ2VuZENvbnRhaW5lclwiPlxyXG4gICAgPGg1Pnt7XCJsZWdlbmQudGl0bGVcIiB8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRCb3hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kUm93XCIgKm5nRm9yPVwibGV0IGVsZW1udCBvZiBidXR0b25zVG9SZW5kZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxlZ2VuZEljb25cIiBbbmdTdHlsZV0gPSBcInsnYmFja2dyb3VuZC1pbWFnZSc6IGVsZW1udC51cmx9XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7ZWxlbW50LnRleHR9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -125,7 +125,7 @@ export class AddAudioZoneComponent {
125
125
  this.fromPlan = true;
126
126
  }
127
127
  onSelectedSweepsFromPlan(result) {
128
- if (result.sweeps) {
128
+ if (result && result.sweeps) {
129
129
  this.chosenScansOnPlan = result.sweeps;
130
130
  this.scansModified = true;
131
131
  }
@@ -227,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
227
227
  }], currentAudioZone: [{
228
228
  type: Input
229
229
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLWF1ZGlvLXpvbmUvYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLWF1ZGlvLXpvbmUvYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBOEUsV0FBVyxFQUFrRCxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQVE1TCxNQUFNLE9BQU8scUJBQXFCO0lBOEM5QixZQUNZLEVBQWUsRUFDZixXQUF3QixFQUN4QixZQUEwQixFQUMxQixXQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsY0FBOEIsRUFDOUIsU0FBMkI7UUFOM0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQWpEN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBUWhELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGFB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LGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDakUsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdkM7WUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUMzQjtJQUNMLENBQUM7O2tIQS9QUSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwrT0NYbEMsc3hJQXlFQTsyRkQ5RGEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG9CQUFvQjtpUkFNckIsT0FBTztzQkFBZixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkF3QkcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlLCBMYXllclNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdGlvblNlcnZpY2UsIExheWVyLCBab25lLCBDb21tZW50VHlwZSwgQ29tbWVudFNlcnZpY2UsIENvbW1lbnQsIGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1hZGQtYXVkaW8tem9uZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEF1ZGlvWm9uZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIEBPdXRwdXQoKSB1cGRhdGVkWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGRlZmF1bHRab25lOiBab25lO1xyXG5cclxuICAgIEBJbnB1dCgpIHpvbmVzOiBab25lW107XHJcblxyXG4gICAgQElucHV0KCkgcGFyZW50Wm9uZTogWm9uZTtcclxuXHJcbiAgICBpc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGZyb21QbGFuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY2hvc2VuU2NhbnNPblBsYW46IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY3VycmVudE9yZ0lkOiBzdHJpbmc7XHJcblxyXG4gICAgYXVkaW9MYXllcjogTGF5ZXI7XHJcblxyXG4gICAgY29tbWVudEZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBmaWxlVG9VcGxvYWQ6IEZpbGU7XHJcblxyXG4gICAgYXVkaW9zRm9yU3BhY2U6IENvbW1lbnRbXTtcclxuXHJcbiAgICBpc0FkZGluZ0F1ZGlvID0gZmFsc2U7XHJcblxyXG4gICAgY2hvc2VuQXVkaW86IENvbW1lbnQ7XHJcblxyXG4gICAgYXVkaW9ab25lczogWm9uZVtdO1xyXG5cclxuICAgIEBJbnB1dCgpIGN1cnJlbnRBdWRpb1pvbmU6IFpvbmU7XHJcblxyXG4gICAgc2NhbnNNb2RpZmllZCA9IGZhbHNlO1xyXG5cclxuICAgIG9jY3VwaWVkU3dlZXBzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHVuYXZhaWxhYmxlU3dlZXBzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHdvcmtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBhdWRpb1VwbG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb21tZW50U2VydmljZTogQ29tbWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBdWRpb1pvbmUpIHtcclxuICAgICAgICAgICAgLy8gd2UgYXJlIGVkaXRpbmcgem9uZVxyXG4gICAgICAgICAgICB0aGlzLmNob3NlbkF1ZGlvID0gdGhpcy5jdXJyZW50QXVkaW9ab25lLmF1ZGlvO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gdGhpcy5jdXJyZW50QXVkaW9ab25lLnN3ZWVwSURzO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudFpvbmUgPSB0aGlzLmN1cnJlbnRBdWRpb1pvbmUucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0dXAoKSB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICAgICAgbGV0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXVkaW9MYXllciA9IGxheWVycy5maW5kKChsYXllcikgPT4gbGF5ZXIubmFtZSA9PT0gXCJBVURJT1wiKTtcclxuICAgICAgICBpZiAoIXRoaXMuYXVkaW9MYXllcikge1xyXG4gICAgICAgICAgICAvLyBmaXJzdCB0aW1lIGNyZWF0aW5nIEF1ZGlvIFpvbmUgXHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9MYXllciA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKFwiQVVESU9cIiwgdGhpcy5jdXJyZW50T3JnSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50Wm9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudFpvbmUgPSB0aGlzLmRlZmF1bHRab25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1ZGlvWm9uZXMgPSB0aGlzLnpvbmVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5hdWRpb0lEICYmIHpvbmUucGFyZW50SUQgPT09IHRoaXMucGFyZW50Wm9uZS5pZCk7XHJcbiAgICAgICAgdGhpcy5vY2N1cGllZFN3ZWVwcyA9IHRoaXMuYXVkaW9ab25lcy5mbGF0TWFwKCh6b25lKSA9PiB6b25lLnN3ZWVwSURzKTtcclxuICAgICAgICAvLyB1bmF2YWlsYWJsZSBzd2VlcHM6IHN3ZWVwcyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gcGFyZW50IHpvbmVcclxuICAgICAgICB0aGlzLnVuYXZhaWxhYmxlU3dlZXBzID0gdGhpcy5kZWZhdWx0Wm9uZS5zd2VlcElEcy5maWx0ZXIoKHN3ZWVwKSA9PiAhdGhpcy5wYXJlbnRab25lLnN3ZWVwSURzLmluY2x1ZGVzKHN3ZWVwKSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRBdWRpb3MoKTtcclxuICAgICAgICB0aGlzLmNvbW1lbnRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgdHlwZTogQ29tbWVudFR5cGUuQVVESU8sXHJcbiAgICAgICAgICAgIG93bmVySUQ6IG1pc3Npb24uaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53b3JraW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50QXVkaW9ab25lKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5jdXJyZW50QXVkaW9ab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgc3dlZXBJRHM6IHRoaXMuY2hvc2VuU2NhbnNPblBsYW4sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVRha2VuU3dlZXBzRnJvbU90aGVyWm9uZXMoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KHRoaXMuY3VycmVudEF1ZGlvWm9uZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGAke3RoaXMucGFyZW50Wm9uZS5uYW1lfSAtICR7dGhpcy5jaG9zZW5BdWRpby50aXRsZX1gLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZTogMCxcclxuICAgICAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIGxheWVySUQ6IHRoaXMuYXVkaW9MYXllci5pZCxcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiB0aGlzLnBhcmVudFpvbmUuaWQsXHJcbiAgICAgICAgICAgICAgICBpc011c2V1bVZpc2l0Wm9uZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpc011bHRpcGxlRmxvb3Jab25lOiB0aGlzLnBhcmVudFpvbmUuaXNNdWx0aXBsZUZsb29yWm9uZSxcclxuICAgICAgICAgICAgICAgIGF1ZGlvSUQ6IHRoaXMuY2hvc2VuQXVkaW8uaWQsXHJcbiAgICAgICAgICAgIH0gYXMgWm9uZTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lSW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoem9uZUlucHV0KVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jICh6b25lQ3JlYXRlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb1pvbmUgPSB6b25lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUYWtlblN3ZWVwc0Zyb21PdGhlclpvbmVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdCh6b25lQ3JlYXRlZC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lSW5wdXQ6IFpvbmUpIHtcclxuICAgICAgICBpZiAodGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEcyA9IHRoaXMuY2hvc2VuU2NhbnNPblBsYW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6b25lSW5wdXQuc3dlZXBJRHMgJiYgem9uZUlucHV0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmF2Rm9yU3dlZXAgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0Zvck1hdHRlcnBvcnRJREZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEc1swXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubm9kZUlEcyA9IFtuYXZGb3JTd2VlcFswXS5ub2RlSURdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zY2Fuc01vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5jYW5jZWxFZGl0Wm9uZVwiKTtcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbWVudEZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBbXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZWRab25lLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVBsYW4oKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tUGxhbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RlZFN3ZWVwc0Zyb21QbGFuKHJlc3VsdDogeyBcInN3ZWVwc1wiOiBzdHJpbmdbXTsgXCJzdGFydFN3ZWVwSURcIjogc3RyaW5nOyB9KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zd2VlcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHJlc3VsdC5zd2VlcHM7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbnNNb2RpZmllZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbVBsYW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGaWxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSAodGFyZ2V0LmZpbGVzIGFzIEZpbGVMaXN0KVswXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVwbG9hZEF1ZGlvKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgY29tbWVudElucHV0ID0gdGhpcy5jb21tZW50Rm9ybS52YWx1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdBdWRpbyA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuY3JlYXRlQ29tbWVudFdpdGhGaWxlKFxyXG4gICAgICAgICAgICAgICAgY29tbWVudElucHV0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9zRm9yU3BhY2UucHVzaChuZXdBdWRpbyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1VwbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRBdWRpb3MoKSB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlTcGFjZUlEKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9zRm9yU3BhY2UgPSBhdHRhY2htZW50cy5maWx0ZXIoKGF0dGFjaG1lbnQpID0+IGF0dGFjaG1lbnQudHlwZSA9PT0gQ29tbWVudFR5cGUuQVVESU8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbEF1ZGlvVXBsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY29tbWVudEZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpbyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvbkNob29zZUF1ZGlvKGF1ZGlvOiBDb21tZW50KSB7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5BdWRpbyA9IGF1ZGlvO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF1ZGlvWm9uZSA9IHRoaXMuYXVkaW9ab25lcy5maW5kKCh6b25lKSA9PiB6b25lLmF1ZGlvSUQgPT09IHRoaXMuY2hvc2VuQXVkaW8uaWQpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBdWRpb1pvbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHRoaXMuY3VycmVudEF1ZGlvWm9uZS5zd2VlcElEcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBuZXdseSBzZWxlY3RlZCBzd2VlcHMgZm9yIGN1cnJlbnQgem9uZSAodGhleSBhcmUgaW4gY2hvc2VuU2NhbnNPblBsYW4pIGZyb20gb3RoZXIgYXVkaW8gem9uZXMuIFxyXG4gICAgICogUnVsZTogb25lIHN3ZWVwID0gb25lIGF1ZGlvLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVUYWtlblN3ZWVwc0Zyb21PdGhlclpvbmVzKCkge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYXVkaW9ab25lcy5tYXAoYXN5bmMgKHpvbmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuY3VycmVudEF1ZGlvWm9uZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3dlZXBzID0gem9uZS5zd2VlcElEcy5maWx0ZXIoKHN3ZWVwSUQpID0+ICF0aGlzLmNob3NlblNjYW5zT25QbGFuLmluY2x1ZGVzKHN3ZWVwSUQpKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTd2VlcHMubGVuZ3RoICE9PSB6b25lLnN3ZWVwSURzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh7IGlkOiB6b25lLmlkLCBzd2VlcElEczogbmV3U3dlZXBzIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlIGF1ZGlvIGFzIENvbW1lbnQsIGFsbCBpdHMgYXVkaW8gWm9uZXMgYW5kIGZpbGUgZnJvbSBTMyAodXNpbmcgbGFtYmRhIGZ1bmN0aW9uKVxyXG4gICAgICovXHJcbiAgICBhc3luYyBvbkRlbGV0ZUF1ZGlvKCkge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5kZWxldGVBdWRpb1wiKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGVDb21tZW50KHRoaXMuY2hvc2VuQXVkaW8uaWQpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXVkaW9zRm9yU3BhY2UuaW5kZXhPZih0aGlzLmNob3NlbkF1ZGlvKTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb3NGb3JTcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gZGVsZXRlIGFsbCB6b25lcyB3aXRoIHRoaXMgY29tbWVudCBhdWRpb1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpb1pvbmVzVG9EZWxldGUgPSB0aGlzLnpvbmVzLmZpbHRlcigoeikgPT4gei5hdWRpb0lEID09PSB0aGlzLmNob3NlbkF1ZGlvLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYXVkaW9ab25lc1RvRGVsZXRlLm1hcChhc3luYyAoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS5kZWxldGVab25lKHpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhab25lID0gdGhpcy5hdWRpb1pvbmVzLmluZGV4T2YodGhpcy5jdXJyZW50QXVkaW9ab25lKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleFpvbmUgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdWRpb1pvbmVzLnNsaWNlKGluZGV4Wm9uZSwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW9ab25lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5BdWRpbyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBjb2wtbWQtNiBjb2wtc20tN1wiICpuZ0lmPVwiaXNBZGRpbmdBdWRpb1wiPlxyXG4gICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblVwbG9hZEF1ZGlvKClcIiBbZm9ybUdyb3VwXT1cImNvbW1lbnRGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpbGVcIiBjbGFzcz1cImJ0biBidG4tbGFiZWwtZmlsZSByb3VuZGVkLXBpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlXCIgKGNoYW5nZSk9XCJoYW5kbGVGaWxlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Nob29zZSBGaWxlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpbGVUb1VwbG9hZFwiPnt7IGZpbGVUb1VwbG9hZC5uYW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwid29ya2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cImZyb21QbGFuIHx8IHdvcmtpbmdcIj57eydVcGxvYWQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxBdWRpb1VwbG9hZCgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nYi1hbGVydCB0eXBlPVwic3VjY2Vzc1wiIFtkaXNtaXNzaWJsZV09XCJ0cnVlXCIgKm5nSWY9XCIhd29ya2luZyAmJiBhdWRpb1VwbG9hZGVkXCIgKGNsb3NlZCk9XCJhdWRpb1VwbG9hZGVkPWZhbHNlXCI+XHJcbiAgICAgICAge3sgJ2FkZC1hdWRpby5zdWNjZXNzJyB8IHRyYW5zbGF0ZSB9fSAhXHJcbiAgICA8L25nYi1hbGVydD5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtN1wiICpuZ0lmPVwiIWlzQWRkaW5nQXVkaW8gJiYgYXVkaW9zRm9yU3BhY2VcIj5cclxuICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbi1yb3dcIiA+XHJcbiAgICAgICAgICAgIDxwPjEuPC9wPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiIGlkPVwiZHJvcGRvd25CYXNpYzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+e3tjaG9zZW5BdWRpbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuQXVkaW8udGl0bGUgOiAoJ2Nob29zZS1hdWRpbycgfCB0cmFuc2xhdGUpIH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBuZ2JEcm9wZG93bkl0ZW0gKm5nRm9yPVwibGV0IGF1ZGlvIG9mIGF1ZGlvc0ZvclNwYWNlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hvb3NlQXVkaW8oYXVkaW8pXCI+e3sgYXVkaW8udGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHA+e3snb3InIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImlzQWRkaW5nQXVkaW89dHJ1ZVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+IHt7J2FkZC1hdWRpby5hZGQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgIDxwPjIuPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cInRvZ2dsZVBsYW4oKVwiIFtkaXNhYmxlZF09XCIhY2hvc2VuQXVkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydDaG9vc2Ugc2NhbiBwb2ludHMgb24gcGxhbicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkRlbGV0ZUF1ZGlvKClcIiBbZGlzYWJsZWRdPVwiIWNob3NlbkF1ZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0RlbGV0ZSBhdWRpbycgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tcm93XCIgKm5nSWY9XCJjaG9zZW5BdWRpb1wiPlxyXG4gICAgICAgICAgICA8cD57eyBjaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggfX0ge3snc2NhbnMtY2hvc2VuLWF1ZGlvJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cImZyb21QbGFuIHx8ICF0aGlzLmNob3NlbkF1ZGlvXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj57eydTYXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LXBsYW5cIiAqbmdJZj1cImZyb21QbGFuXCI+XHJcbiAgICAgICAgPGxpYi1zd2VlcC1wbGFuLXNlbGVjdGlvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtpbnB1dFpvbmVdPVwiY3VycmVudEF1ZGlvWm9uZVwiIFtzcGFjZUlEXT1cInNwYWNlSURcIiBcclxuICAgICAgICBbb2NjdXBpZWRTd2VlcHNdPVwib2NjdXBpZWRTd2VlcHNcIiBbdW5hdmFpbGFibGVTd2VlcHNdPVwidW5hdmFpbGFibGVTd2VlcHNcIiBbZWRpdGluZ0F1ZGlvWm9uZV09XCJ0cnVlXCJcclxuICAgICAgICAoc3dlZXBzU2VsZWN0ZWQpPVwib25TZWxlY3RlZFN3ZWVwc0Zyb21QbGFuKCRldmVudClcIj48L2xpYi1zd2VlcC1wbGFuLXNlbGVjdGlvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLWF1ZGlvLXpvbmUvYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLWF1ZGlvLXpvbmUvYWRkLWF1ZGlvLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBOEUsV0FBVyxFQUFrRCxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQVE1TCxNQUFNLE9BQU8scUJBQXFCO0lBOEM5QixZQUNZLEVBQWUsRUFDZixXQUF3QixFQUN4QixZQUEwQixFQUMxQixXQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsY0FBOEIsRUFDOUIsU0FBMkI7UUFOM0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQWpEN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBUWhELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGFB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O1lBQzNDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDcEQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN2QztZQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQzs7a0hBL1BRLHFCQUFxQjtzR0FBckIscUJBQXFCLCtPQ1hsQyxzeElBeUVBOzJGRDlEYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksb0JBQW9CO2lSQU1yQixPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRSxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQXdCRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UsIExheWVyU2VydmljZSwgQmFzZVVzZXJTZXJ2aWNlLCBOYXZpZ2F0aW9uU2VydmljZSwgTGF5ZXIsIFpvbmUsIENvbW1lbnRUeXBlLCBDb21tZW50U2VydmljZSwgQ29tbWVudCwgZmlsdGVyVW5pcXVlQXJyYXlCeUlEIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWFkZC1hdWRpby16b25lJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGQtYXVkaW8tem9uZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZGQtYXVkaW8tem9uZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkQXVkaW9ab25lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSBzcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIHVwZGF0ZWRab25lID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQElucHV0KCkgZGVmYXVsdFpvbmU6IFpvbmU7XHJcblxyXG4gICAgQElucHV0KCkgem9uZXM6IFpvbmVbXTtcclxuXHJcbiAgICBASW5wdXQoKSBwYXJlbnRab25lOiBab25lO1xyXG5cclxuICAgIGlzU3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gICAgZnJvbVBsYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjaG9zZW5TY2Fuc09uUGxhbjogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjdXJyZW50T3JnSWQ6IHN0cmluZztcclxuXHJcbiAgICBhdWRpb0xheWVyOiBMYXllcjtcclxuXHJcbiAgICBjb21tZW50Rm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIGZpbGVUb1VwbG9hZDogRmlsZTtcclxuXHJcbiAgICBhdWRpb3NGb3JTcGFjZTogQ29tbWVudFtdO1xyXG5cclxuICAgIGlzQWRkaW5nQXVkaW8gPSBmYWxzZTtcclxuXHJcbiAgICBjaG9zZW5BdWRpbzogQ29tbWVudDtcclxuXHJcbiAgICBhdWRpb1pvbmVzOiBab25lW107XHJcblxyXG4gICAgQElucHV0KCkgY3VycmVudEF1ZGlvWm9uZTogWm9uZTtcclxuXHJcbiAgICBzY2Fuc01vZGlmaWVkID0gZmFsc2U7XHJcblxyXG4gICAgb2NjdXBpZWRTd2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgdW5hdmFpbGFibGVTd2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgd29ya2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGF1ZGlvVXBsb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbW1lbnRTZXJ2aWNlOiBDb21tZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEF1ZGlvWm9uZSkge1xyXG4gICAgICAgICAgICAvLyB3ZSBhcmUgZWRpdGluZyB6b25lXHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuQXVkaW8gPSB0aGlzLmN1cnJlbnRBdWRpb1pvbmUuYXVkaW87XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSB0aGlzLmN1cnJlbnRBdWRpb1pvbmUuc3dlZXBJRHM7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Wm9uZSA9IHRoaXMuY3VycmVudEF1ZGlvWm9uZS5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXR1cCgpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgICAgICBsZXQgbGF5ZXJzID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuZ2V0TGF5ZXJGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE9yZ0lkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hdWRpb0xheWVyID0gbGF5ZXJzLmZpbmQoKGxheWVyKSA9PiBsYXllci5uYW1lID09PSBcIkFVRElPXCIpO1xyXG4gICAgICAgIGlmICghdGhpcy5hdWRpb0xheWVyKSB7XHJcbiAgICAgICAgICAgIC8vIGZpcnN0IHRpbWUgY3JlYXRpbmcgQXVkaW8gWm9uZSBcclxuICAgICAgICAgICAgdGhpcy5hdWRpb0xheWVyID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24oXCJBVURJT1wiLCB0aGlzLmN1cnJlbnRPcmdJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Wm9uZSA9IHRoaXMuZGVmYXVsdFpvbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXVkaW9ab25lcyA9IHRoaXMuem9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLmF1ZGlvSUQgJiYgem9uZS5wYXJlbnRJRCA9PT0gdGhpcy5wYXJlbnRab25lLmlkKTtcclxuICAgICAgICB0aGlzLm9jY3VwaWVkU3dlZXBzID0gdGhpcy5hdWRpb1pvbmVzLmZsYXRNYXAoKHpvbmUpID0+IHpvbmUuc3dlZXBJRHMpO1xyXG4gICAgICAgIC8vIHVuYXZhaWxhYmxlIHN3ZWVwczogc3dlZXBzIHRoYXQgZG8gbm90IGJlbG9uZyB0byBwYXJlbnQgem9uZVxyXG4gICAgICAgIHRoaXMudW5hdmFpbGFibGVTd2VlcHMgPSB0aGlzLmRlZmF1bHRab25lLnN3ZWVwSURzLmZpbHRlcigoc3dlZXApID0+ICF0aGlzLnBhcmVudFpvbmUuc3dlZXBJRHMuaW5jbHVkZXMoc3dlZXApKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEF1ZGlvcygpO1xyXG4gICAgICAgIHRoaXMuY29tbWVudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdGl0bGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICB0eXBlOiBDb21tZW50VHlwZS5BVURJTyxcclxuICAgICAgICAgICAgb3duZXJJRDogbWlzc2lvbi5pZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBdWRpb1pvbmUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS51cGRhdGVab25lKHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmN1cnJlbnRBdWRpb1pvbmUuaWQsXHJcbiAgICAgICAgICAgICAgICBzd2VlcElEczogdGhpcy5jaG9zZW5TY2Fuc09uUGxhbixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFrZW5Td2VlcHNGcm9tT3RoZXJab25lcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRab25lLmVtaXQodGhpcy5jdXJyZW50QXVkaW9ab25lLmlkKTtcclxuICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgem9uZUlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogYCR7dGhpcy5wYXJlbnRab25lLm5hbWV9IC0gJHt0aGlzLmNob3NlbkF1ZGlvLnRpdGxlfWAsXHJcbiAgICAgICAgICAgICAgICBzdXJmYWNlOiAwLFxyXG4gICAgICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogdGhpcy5hdWRpb0xheWVyLmlkLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SUQ6IHRoaXMucGFyZW50Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIGlzTXVzZXVtVmlzaXRab25lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGlzTXVsdGlwbGVGbG9vclpvbmU6IHRoaXMucGFyZW50Wm9uZS5pc011bHRpcGxlRmxvb3Jab25lLFxyXG4gICAgICAgICAgICAgICAgYXVkaW9JRDogdGhpcy5jaG9zZW5BdWRpby5pZCxcclxuICAgICAgICAgICAgfSBhcyBab25lO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTd2VlcHNBbmROb2RlRm9yWm9uZUlucHV0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSh6b25lSW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHpvbmVDcmVhdGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF1ZGlvWm9uZSA9IHpvbmVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVRha2VuU3dlZXBzRnJvbU90aGVyWm9uZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KHpvbmVDcmVhdGVkLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRTd2VlcHNBbmROb2RlRm9yWm9uZUlucHV0KHpvbmVJbnB1dDogWm9uZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN3ZWVwSURzID0gdGhpcy5jaG9zZW5TY2Fuc09uUGxhbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHpvbmVJbnB1dC5zd2VlcElEcyAmJiB6b25lSW5wdXQuc3dlZXBJRHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBuYXZGb3JTd2VlcCA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldE5hdmlnYXRpb25zRm9yTWF0dGVycG9ydElERm9yU3BhY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgem9uZUlucHV0LnN3ZWVwSURzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5ub2RlSURzID0gW25hdkZvclN3ZWVwWzBdLm5vZGVJRF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjYW5zTW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmNhbmNlbEVkaXRab25lXCIpO1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21tZW50Rm9ybSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlUGxhbigpIHtcclxuICAgICAgICB0aGlzLmZyb21QbGFuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGVkU3dlZXBzRnJvbVBsYW4ocmVzdWx0OiB7IFwic3dlZXBzXCI6IHN0cmluZ1tdOyBcInN0YXJ0U3dlZXBJRFwiOiBzdHJpbmc7IH0pIHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zd2VlcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHJlc3VsdC5zd2VlcHM7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbnNNb2RpZmllZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbVBsYW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGaWxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSAodGFyZ2V0LmZpbGVzIGFzIEZpbGVMaXN0KVswXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVwbG9hZEF1ZGlvKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgY29tbWVudElucHV0ID0gdGhpcy5jb21tZW50Rm9ybS52YWx1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdBdWRpbyA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuY3JlYXRlQ29tbWVudFdpdGhGaWxlKFxyXG4gICAgICAgICAgICAgICAgY29tbWVudElucHV0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9zRm9yU3BhY2UucHVzaChuZXdBdWRpbyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1VwbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRBdWRpb3MoKSB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlTcGFjZUlEKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9zRm9yU3BhY2UgPSBhdHRhY2htZW50cy5maWx0ZXIoKGF0dGFjaG1lbnQpID0+IGF0dGFjaG1lbnQudHlwZSA9PT0gQ29tbWVudFR5cGUuQVVESU8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbEF1ZGlvVXBsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY29tbWVudEZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpbyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvbkNob29zZUF1ZGlvKGF1ZGlvOiBDb21tZW50KSB7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5BdWRpbyA9IGF1ZGlvO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF1ZGlvWm9uZSA9IHRoaXMuYXVkaW9ab25lcy5maW5kKCh6b25lKSA9PiB6b25lLmF1ZGlvSUQgPT09IHRoaXMuY2hvc2VuQXVkaW8uaWQpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBdWRpb1pvbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHRoaXMuY3VycmVudEF1ZGlvWm9uZS5zd2VlcElEcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBuZXdseSBzZWxlY3RlZCBzd2VlcHMgZm9yIGN1cnJlbnQgem9uZSAodGhleSBhcmUgaW4gY2hvc2VuU2NhbnNPblBsYW4pIGZyb20gb3RoZXIgYXVkaW8gem9uZXMuIFxyXG4gICAgICogUnVsZTogb25lIHN3ZWVwID0gb25lIGF1ZGlvLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVUYWtlblN3ZWVwc0Zyb21PdGhlclpvbmVzKCkge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYXVkaW9ab25lcy5tYXAoYXN5bmMgKHpvbmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuY3VycmVudEF1ZGlvWm9uZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3dlZXBzID0gem9uZS5zd2VlcElEcy5maWx0ZXIoKHN3ZWVwSUQpID0+ICF0aGlzLmNob3NlblNjYW5zT25QbGFuLmluY2x1ZGVzKHN3ZWVwSUQpKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTd2VlcHMubGVuZ3RoICE9PSB6b25lLnN3ZWVwSURzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh7IGlkOiB6b25lLmlkLCBzd2VlcElEczogbmV3U3dlZXBzIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlIGF1ZGlvIGFzIENvbW1lbnQsIGFsbCBpdHMgYXVkaW8gWm9uZXMgYW5kIGZpbGUgZnJvbSBTMyAodXNpbmcgbGFtYmRhIGZ1bmN0aW9uKVxyXG4gICAgICovXHJcbiAgICBhc3luYyBvbkRlbGV0ZUF1ZGlvKCkge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5kZWxldGVBdWRpb1wiKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGVDb21tZW50KHRoaXMuY2hvc2VuQXVkaW8uaWQpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXVkaW9zRm9yU3BhY2UuaW5kZXhPZih0aGlzLmNob3NlbkF1ZGlvKTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb3NGb3JTcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gZGVsZXRlIGFsbCB6b25lcyB3aXRoIHRoaXMgY29tbWVudCBhdWRpb1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpb1pvbmVzVG9EZWxldGUgPSB0aGlzLnpvbmVzLmZpbHRlcigoeikgPT4gei5hdWRpb0lEID09PSB0aGlzLmNob3NlbkF1ZGlvLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYXVkaW9ab25lc1RvRGVsZXRlLm1hcChhc3luYyAoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS5kZWxldGVab25lKHpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhab25lID0gdGhpcy5hdWRpb1pvbmVzLmluZGV4T2YodGhpcy5jdXJyZW50QXVkaW9ab25lKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleFpvbmUgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdWRpb1pvbmVzLnNsaWNlKGluZGV4Wm9uZSwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW9ab25lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5BdWRpbyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBjb2wtbWQtNiBjb2wtc20tN1wiICpuZ0lmPVwiaXNBZGRpbmdBdWRpb1wiPlxyXG4gICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblVwbG9hZEF1ZGlvKClcIiBbZm9ybUdyb3VwXT1cImNvbW1lbnRGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpbGVcIiBjbGFzcz1cImJ0biBidG4tbGFiZWwtZmlsZSByb3VuZGVkLXBpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlXCIgKGNoYW5nZSk9XCJoYW5kbGVGaWxlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Nob29zZSBGaWxlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpbGVUb1VwbG9hZFwiPnt7IGZpbGVUb1VwbG9hZC5uYW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwid29ya2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cImZyb21QbGFuIHx8IHdvcmtpbmdcIj57eydVcGxvYWQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxBdWRpb1VwbG9hZCgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nYi1hbGVydCB0eXBlPVwic3VjY2Vzc1wiIFtkaXNtaXNzaWJsZV09XCJ0cnVlXCIgKm5nSWY9XCIhd29ya2luZyAmJiBhdWRpb1VwbG9hZGVkXCIgKGNsb3NlZCk9XCJhdWRpb1VwbG9hZGVkPWZhbHNlXCI+XHJcbiAgICAgICAge3sgJ2FkZC1hdWRpby5zdWNjZXNzJyB8IHRyYW5zbGF0ZSB9fSAhXHJcbiAgICA8L25nYi1hbGVydD5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtN1wiICpuZ0lmPVwiIWlzQWRkaW5nQXVkaW8gJiYgYXVkaW9zRm9yU3BhY2VcIj5cclxuICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbi1yb3dcIiA+XHJcbiAgICAgICAgICAgIDxwPjEuPC9wPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiIGlkPVwiZHJvcGRvd25CYXNpYzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+e3tjaG9zZW5BdWRpbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuQXVkaW8udGl0bGUgOiAoJ2Nob29zZS1hdWRpbycgfCB0cmFuc2xhdGUpIH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBuZ2JEcm9wZG93bkl0ZW0gKm5nRm9yPVwibGV0IGF1ZGlvIG9mIGF1ZGlvc0ZvclNwYWNlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hvb3NlQXVkaW8oYXVkaW8pXCI+e3sgYXVkaW8udGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHA+e3snb3InIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImlzQWRkaW5nQXVkaW89dHJ1ZVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+IHt7J2FkZC1hdWRpby5hZGQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgIDxwPjIuPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cInRvZ2dsZVBsYW4oKVwiIFtkaXNhYmxlZF09XCIhY2hvc2VuQXVkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydDaG9vc2Ugc2NhbiBwb2ludHMgb24gcGxhbicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkRlbGV0ZUF1ZGlvKClcIiBbZGlzYWJsZWRdPVwiIWNob3NlbkF1ZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0RlbGV0ZSBhdWRpbycgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tcm93XCIgKm5nSWY9XCJjaG9zZW5BdWRpb1wiPlxyXG4gICAgICAgICAgICA8cD57eyBjaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggfX0ge3snc2NhbnMtY2hvc2VuLWF1ZGlvJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cImZyb21QbGFuIHx8ICF0aGlzLmNob3NlbkF1ZGlvXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj57eydTYXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LXBsYW5cIiAqbmdJZj1cImZyb21QbGFuXCI+XHJcbiAgICAgICAgPGxpYi1zd2VlcC1wbGFuLXNlbGVjdGlvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtpbnB1dFpvbmVdPVwiY3VycmVudEF1ZGlvWm9uZVwiIFtzcGFjZUlEXT1cInNwYWNlSURcIiBcclxuICAgICAgICBbb2NjdXBpZWRTd2VlcHNdPVwib2NjdXBpZWRTd2VlcHNcIiBbdW5hdmFpbGFibGVTd2VlcHNdPVwidW5hdmFpbGFibGVTd2VlcHNcIiBbZWRpdGluZ0F1ZGlvWm9uZV09XCJ0cnVlXCJcclxuICAgICAgICAoc3dlZXBzU2VsZWN0ZWQpPVwib25TZWxlY3RlZFN3ZWVwc0Zyb21QbGFuKCRldmVudClcIj48L2xpYi1zd2VlcC1wbGFuLXNlbGVjdGlvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -256,20 +256,22 @@ export class AddZoneComponent {
256
256
  }
257
257
  }
258
258
  onSelectedSweepsFromPlan(result) {
259
- if (result.sweeps) {
260
- this.chosenScansOnPlan = result.sweeps;
261
- }
262
- if (result.startSweepID) {
263
- this.zoneForm.controls.startSweepID.setValue(result.startSweepID);
259
+ if (result) {
260
+ if (result.sweeps) {
261
+ this.chosenScansOnPlan = result.sweeps;
262
+ }
263
+ if (result.startSweepID) {
264
+ this.zoneForm.controls.startSweepID.setValue(result.startSweepID);
265
+ }
264
266
  }
265
267
  this.fromPlan = false;
266
268
  }
267
269
  }
268
270
  AddZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AddZoneComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ZoneService }, { token: i2.LayerService }, { token: i2.BaseUserService }, { token: i2.NavigationService }], target: i0.ɵɵFactoryTarget.Component });
269
- AddZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: AddZoneComponent, selector: "lib-add-zone", inputs: { zoneEdit: "zoneEdit", spaceID: "spaceID", images360: "images360", navigationIDs: "navigationIDs", zones: "zones", newZoneDataFromEditor: "newZoneDataFromEditor", chosenPlan: "chosenPlan", isMuseumVisit: "isMuseumVisit", defaultZone: "defaultZone" }, outputs: { updatedZone: "updatedZone" }, ngImport: i0, template: "<div class=\"main-container\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" required formControlName=\"name\">\r\n <!-- <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Multiple Floors' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"multipleFloors\" \r\n (change)=\"onChangeMultipleFloors()\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <!-- <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3 mt-3\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'add-all-scans' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-primary rounded-pill me-2\" [disabled]=\"fromPlan\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"edit-plan\" *ngIf=\"fromPlan\">\r\n <lib-sweep-plan-selection style=\"width: 100%;\" [newZoneData]=\"newZoneDataFromEditor\" [spaceID]=\"spaceID\"\r\n [inputZone]=\"zoneEdit\" (sweepsSelected)=\"onSelectedSweepsFromPlan($event)\"></lib-sweep-plan-selection>\r\n </div>\r\n</div>", styles: [".main-container{display:flex;flex-direction:column}.edit-plan{display:flex;margin:8px 0}.form-range{width:100%}h2{color:var(--smarterplan-primary);padding:0}.col-form-label{margin-bottom:1rem}.btn-outline-primary{margin-right:1rem}.new-type-input{margin-bottom:1rem}.new-type-text{margin-bottom:.5rem}.row{margin:0}p{margin:0;padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px)}\n"], components: [{ type: i3.CarouselComponent, selector: "lib-carousel", inputs: ["images"], outputs: ["currentScan"] }, { type: i4.SweepPlanSelectionComponent, selector: "lib-sweep-plan-selection", inputs: ["spaceID", "chosenScansOnPlan", "newZoneData", "occupiedSweeps", "unavailableSweeps", "editingAudioZone", "inputZone"], outputs: ["sweepsSelected"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i6.TranslatePipe } });
271
+ AddZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: AddZoneComponent, selector: "lib-add-zone", inputs: { zoneEdit: "zoneEdit", spaceID: "spaceID", images360: "images360", navigationIDs: "navigationIDs", zones: "zones", newZoneDataFromEditor: "newZoneDataFromEditor", chosenPlan: "chosenPlan", isMuseumVisit: "isMuseumVisit", defaultZone: "defaultZone" }, outputs: { updatedZone: "updatedZone" }, ngImport: i0, template: "<div class=\"main-container\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" required formControlName=\"name\">\r\n <!-- <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Multiple Floors' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"multipleFloors\" \r\n (change)=\"onChangeMultipleFloors()\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <!-- <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3 mt-3\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'add-all-scans' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-primary rounded-pill me-2\" [disabled]=\"fromPlan\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"edit-plan\" *ngIf=\"fromPlan\">\r\n <lib-sweep-plan-selection style=\"width: 100%;\" [newZoneData]=\"newZoneDataFromEditor\" [spaceID]=\"spaceID\"\r\n [inputZone]=\"zoneEdit\" (sweepsSelected)=\"onSelectedSweepsFromPlan($event)\"></lib-sweep-plan-selection>\r\n </div>\r\n</div>", styles: [".main-container{display:flex;flex-direction:column}.edit-plan{display:flex;margin:8px 0}.form-range{width:100%}h2{color:var(--smarterplan-primary);padding:0}.col-form-label{margin-bottom:1rem}.btn-outline-primary{margin-right:1rem}.new-type-input{margin-bottom:1rem}.new-type-text{margin-bottom:.5rem}.row{margin:0}p{margin:0;padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px)}button{min-width:80px}\n"], components: [{ type: i3.CarouselComponent, selector: "lib-carousel", inputs: ["images"], outputs: ["currentScan"] }, { type: i4.SweepPlanSelectionComponent, selector: "lib-sweep-plan-selection", inputs: ["spaceID", "chosenScansOnPlan", "newZoneData", "occupiedSweeps", "unavailableSweeps", "editingAudioZone", "inputZone"], outputs: ["sweepsSelected"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i6.TranslatePipe } });
270
272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AddZoneComponent, decorators: [{
271
273
  type: Component,
272
- args: [{ selector: 'lib-add-zone', template: "<div class=\"main-container\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" required formControlName=\"name\">\r\n <!-- <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Multiple Floors' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"multipleFloors\" \r\n (change)=\"onChangeMultipleFloors()\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <!-- <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3 mt-3\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'add-all-scans' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-primary rounded-pill me-2\" [disabled]=\"fromPlan\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"edit-plan\" *ngIf=\"fromPlan\">\r\n <lib-sweep-plan-selection style=\"width: 100%;\" [newZoneData]=\"newZoneDataFromEditor\" [spaceID]=\"spaceID\"\r\n [inputZone]=\"zoneEdit\" (sweepsSelected)=\"onSelectedSweepsFromPlan($event)\"></lib-sweep-plan-selection>\r\n </div>\r\n</div>", styles: [".main-container{display:flex;flex-direction:column}.edit-plan{display:flex;margin:8px 0}.form-range{width:100%}h2{color:var(--smarterplan-primary);padding:0}.col-form-label{margin-bottom:1rem}.btn-outline-primary{margin-right:1rem}.new-type-input{margin-bottom:1rem}.new-type-text{margin-bottom:.5rem}.row{margin:0}p{margin:0;padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px)}\n"] }]
274
+ args: [{ selector: 'lib-add-zone', template: "<div class=\"main-container\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" required formControlName=\"name\">\r\n <!-- <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Multiple Floors' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"multipleFloors\" \r\n (change)=\"onChangeMultipleFloors()\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <!-- <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3 mt-3\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 || images360.length === 0\">\r\n {{'add-all-scans' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-primary rounded-pill me-2\" [disabled]=\"fromPlan\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"edit-plan\" *ngIf=\"fromPlan\">\r\n <lib-sweep-plan-selection style=\"width: 100%;\" [newZoneData]=\"newZoneDataFromEditor\" [spaceID]=\"spaceID\"\r\n [inputZone]=\"zoneEdit\" (sweepsSelected)=\"onSelectedSweepsFromPlan($event)\"></lib-sweep-plan-selection>\r\n </div>\r\n</div>", styles: [".main-container{display:flex;flex-direction:column}.edit-plan{display:flex;margin:8px 0}.form-range{width:100%}h2{color:var(--smarterplan-primary);padding:0}.col-form-label{margin-bottom:1rem}.btn-outline-primary{margin-right:1rem}.new-type-input{margin-bottom:1rem}.new-type-text{margin-bottom:.5rem}.row{margin:0}p{margin:0;padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px)}button{min-width:80px}\n"] }]
273
275
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ZoneService }, { type: i2.LayerService }, { type: i2.BaseUserService }, { type: i2.NavigationService }]; }, propDecorators: { zoneEdit: [{
274
276
  type: Input
275
277
  }], spaceID: [{
@@ -291,4 +293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
291
293
  }], defaultZone: [{
292
294
  type: Input
293
295
  }] } });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFTckYsTUFBTSxPQUFPLGdCQUFnQjtJQWdEekIsWUFDWSxFQUFlLEVBQ2YsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsaUJBQW9DO1FBSnBDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXZDdEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSXZDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBSXhDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRXpCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUkxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUlwQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUkzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLHNCQUFpQixHQUFhLEVBQUUsQ0FB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SUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckU7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDOzs2R0F0VVEsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaVdDVjdCLHU2UEFpSU07MkZEdkhPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDSSxjQUFjO3FOQU1mLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIFpvbmUsIFBsYW4sIExheWVyLCBab25lU2VydmljZSwgTGF5ZXJTZXJ2aWNlLCBCYXNlVXNlclNlcnZpY2UsIE5hdmlnYXRpb25TZXJ2aWNlXHJcbn0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1hZGQtem9uZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYWRkLXpvbmUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkWm9uZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgem9uZUVkaXQ6IFpvbmU7XHJcblxyXG4gICAgQElucHV0KCkgc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIGltYWdlczM2MDogeyBwYXRoOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmc7IH1bXTtcclxuXHJcbiAgICBASW5wdXQoKSBuYXZpZ2F0aW9uSURzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBASW5wdXQoKSB6b25lczogWm9uZVtdO1xyXG5cclxuICAgIEBJbnB1dCgpIG5ld1pvbmVEYXRhRnJvbUVkaXRvcjogYW55O1xyXG5cclxuICAgIEBPdXRwdXQoKSB1cGRhdGVkWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGNob3NlblBsYW46IFBsYW47XHJcblxyXG4gICAgQElucHV0KCkgaXNNdXNldW1WaXNpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIGRlZmF1bHRab25lOiBab25lO1xyXG5cclxuICAgIHBhcmVudFpvbmVzOiBab25lW10gPSBbXTtcclxuXHJcbiAgICBjYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHpvbmVGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjdXJyZW50U2NhblNob3dpbmc6IG51bWJlcjtcclxuXHJcbiAgICBjaG9zZW5TY2FuczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBsYXllcnM6IExheWVyW107XHJcblxyXG4gICAgZnJvbVBsYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjaG9zZW5TY2Fuc09uUGxhbjogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjdXJyZW50T3JnSWQ6IHN0cmluZztcclxuXHJcbiAgICB6b25lSW5pdGlhbE5hdkNvdW50ID0gMDtcclxuXHJcbiAgICB6b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBmYWxzZTtcclxuXHJcbiAgICBtdWx0aXBsZUZsb29ycyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcmVudFpvbmVzID0gdGhpcy56b25lcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGFyZW50Wm9uZXMudW5zaGlmdCh0aGlzLmRlZmF1bHRab25lKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVycygpO1xyXG4gICAgICAgIHRoaXMuaW5pdFpvbmVGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlTGF5ZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T3JnSWQgPSBtaXNzaW9uLm9yZ2FuaXNhdGlvbklEO1xyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGZpbHRlciBvdXQgbGF5ZXJzIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbVxyXG4gICAgICAgIHRoaXMubGF5ZXJzID0gbGF5ZXJzLmZpbHRlcigobCkgPT4gbC5uYW1lICE9PSBcIkJVSUxESU5HXCIgJiYgbC5uYW1lICE9PSBcIkZMT09SXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRab25lRm9ybSgpIHtcclxuICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdC5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKHRoaXMuem9uZUVkaXQubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBtZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShcIm1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHRoaXMuem9uZVNlcnZpY2Uuem9uZUlzVmlydHVhbCh0aGlzLnpvbmVFZGl0KTtcclxuICAgICAgICAgICAgaWYgKCFpc1ZpcnR1YWwpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5hdmlnYXRpb25zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gdGhpcy56b25lRWRpdC5pc011c2V1bVZpc2l0Wm9uZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUZsb29ycyA9IHRoaXMuem9uZUVkaXQuaXNNdWx0aXBsZUZsb29yWm9uZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuem9uZUVkaXQuaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbdGhpcy56b25lRWRpdC5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogdGhpcy56b25lRWRpdC5sYXllciA/IHRoaXMuem9uZUVkaXQubGF5ZXIuaWQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZTogdGhpcy56b25lRWRpdC5zdXJmYWNlID8gdGhpcy56b25lRWRpdC5zdXJmYWNlIDogMCxcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiB0aGlzLnpvbmVFZGl0LnBhcmVudElELFxyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLnpvbmVFZGl0LnBhcmVudCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgICAgIHN0YXJ0U3dlZXBJRDogdGhpcy56b25lRWRpdC5zdGFydFN3ZWVwSUQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdab25lRGF0YUZyb21FZGl0b3IgPyB0aGlzLm5ld1pvbmVEYXRhRnJvbUVkaXRvci5uYW1lIDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN1cmZhY2U6IDAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJRDogdGhpcy5kZWZhdWx0Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgICAgIHN0YXJ0U3dlZXBJRDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0Wm9uZSgpIHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuem9uZUZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnpvbmVGb3JtLmdldFJhd1ZhbHVlKCk7IC8vYmVjYXVzZSB3ZSBuZWVkIHZhbHVlcyBvZiBkaXNhYmxlcyBjb250cm9scyBhcyB3ZWxsXHJcbiAgICAgICAgaWYgKGZvcm1WYWx1ZS5uZXdMYXllcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUxheWVyKGZvcm1WYWx1ZS5uZXdMYXllcikudGhlbigobGF5ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZS5sYXllcklEID0gbGF5ZXIuaWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB6b25lSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxyXG4gICAgICAgICAgICBzdXJmYWNlOiBmb3JtVmFsdWUuc3VyZmFjZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklEOiBmb3JtVmFsdWUubGF5ZXJJRCxcclxuICAgICAgICAgICAgcGFyZW50SUQ6IGZvcm1WYWx1ZS5wYXJlbnRJRCxcclxuICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgaXNNdWx0aXBsZUZsb29yWm9uZTogdGhpcy5tdWx0aXBsZUZsb29ycyxcclxuICAgICAgICAgICAgc3dlZXBJRHM6IFtdLFxyXG4gICAgICAgICAgICBzdGFydFN3ZWVwSUQ6IGZvcm1WYWx1ZS5zdGFydFN3ZWVwSUQsXHJcbiAgICAgICAgfSBhcyBab25lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZVVwZGF0ZSA9IHpvbmVJbnB1dDtcclxuICAgICAgICAgICAgICAgIHpvbmVVcGRhdGUuc3dlZXBJRHMgPSB0aGlzLnpvbmVFZGl0LnN3ZWVwSURzO1xyXG4gICAgICAgICAgICAgICAgem9uZVVwZGF0ZS5pZCA9IGZvcm1WYWx1ZS5pZDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUVkaXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KHpvbmVVcGRhdGUuaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lSW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF6b25lSW5wdXQucGFyZW50SUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgYnVpbGRpbmcgYXMgcGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gdGhpcy5kZWZhdWx0Wm9uZS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKHpvbmVJbnB1dClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbih6b25lQ3JlYXRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdCh6b25lQ3JlYXRlZC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuem9uZUZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBbXTtcclxuICAgICAgICB0aGlzLmNob3NlblNjYW5zID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnpvbmVGb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVBsYW4oKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tUGxhbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkU2NhbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hvc2VuU2NhbnMuaW5jbHVkZXModGhpcy5jdXJyZW50U2NhblNob3dpbmcpKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkaW5nIHNjYW5cIiwgdGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLnB1c2godGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KFwiU2NhbiBhbHJlYWR5IGFkZGVkIVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVTY2FuSW1hZ2Uoc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlU2NhblBsYW4oc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zT25QbGFuLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldFN3ZWVwc0FuZE5vZGVGb3Jab25lSW5wdXQoem9uZUlucHV0OiBab25lKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5sZW5ndGggIT09IHRoaXMuem9uZUluaXRpYWxOYXZDb3VudCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5mcm9tUGxhblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSBjaG9zZSBzY2FucyBmcm9tIHRoZSBjYXJvdXNlbFxyXG4gICAgICAgICAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5tYXAoYXN5bmMgKHNjYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXVpZCA9IHRoaXMuaW1hZ2VzMzYwW3NjYW5dLmZpbGVuYW1lLnNwbGl0KFwiX1wiKVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwSUQgPSB0aGlzLm5hdmlnYXRpb25JRHMuZmluZCgobmF2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hdi5pbmNsdWRlcyhpbWFnZVV1aWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3dlZXBJRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3ZWVwSURzLnB1c2goc3dlZXBJRCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHMgPSBzd2VlcElEcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3ZSBhcmUgbm90IGNvbWluZyBmcm9tIGdhbGxlcnkgY2hvaWNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEcyA9IHRoaXMuY2hvc2VuU2NhbnNPblBsYW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh6b25lSW5wdXQuc3dlZXBJRHMgJiYgem9uZUlucHV0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmF2Rm9yU3dlZXAgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0Zvck1hdHRlcnBvcnRJREZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEc1swXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubm9kZUlEcyA9IFtuYXZGb3JTd2VlcFswXS5ub2RlSURdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVMYXllcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXZpZ2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnpvbmVFZGl0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy56b25lSW5pdGlhbE5hdkNvdW50ID0gdGhpcy56b25lRWRpdC5zd2VlcElEcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdkxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zWm9uZUVkaXQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRWRpdC5zd2VlcElEcy5tYXAoYXN5bmMgKHN3ZWVwSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5zWm9uZUVkaXQucHVzaChzd2VlcElEKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW1hZ2VzMzYwLmZpbmRJbmRleCgoaW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltLmZpbGVuYW1lLmluY2x1ZGVzKHN3ZWVwSUQuc2xpY2UoMCwgOCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2TGlzdC5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IG5hdkxpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBzY2Fuc1pvbmVFZGl0O1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIGluaVBsYW5Gb3JEcmF3KCkge1xyXG4gICAgLy8gICAgIHRoaXMudG9nZ2xlUGxhbigpO1xyXG4gICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLm9uUGxhbkNsaWNrKCk7XHJcbiAgICAvLyAgICAgfSwgNTAwKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYWxsIHN3ZWVwcyBvZiB0aGUgc3BhY2VcclxuICAgICAqL1xyXG4gICAgb25BZGRBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBkZWZhdWx0Wm9uZS5zd2VlcElEcztcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5zZXRWYWx1ZShkZWZhdWx0Wm9uZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmxvb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdFpvbmUoKTogWm9uZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuem9uZXMuZmluZChcclxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIgJiYgem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbGUgZmxvb3JzIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZU11bHRpcGxlRmxvb3JzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlRmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRab25lID0gdGhpcy5nZXREZWZhdWx0Wm9uZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuc2V0VmFsdWUoZGVmYXVsdFpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtLmdldChcInBhcmVudElEXCIpLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGVkU3dlZXBzRnJvbVBsYW4ocmVzdWx0OiB7IHN3ZWVwczogc3RyaW5nW107IHN0YXJ0U3dlZXBJRDogc3RyaW5nOyB9KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zd2VlcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHJlc3VsdC5zd2VlcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuc3RhcnRTd2VlcElEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uY29udHJvbHMuc3RhcnRTd2VlcElELnNldFZhbHVlKHJlc3VsdC5zdGFydFN3ZWVwSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21QbGFuID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiICpuZ0lmPVwiem9uZUZvcm1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtN1wiPlxyXG4gICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdFpvbmUoKVwiIFtmb3JtR3JvdXBdPVwiem9uZUZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBIG5hbWUgaXMgcmVxdWlyZWQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiAqbmdJZj1cIiFpc011c2V1bVZpc2l0ICYmICF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snVHlwZSBvZiB6b25lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGF5ZXJJRFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVsbFwiIHNlbGVjdGVkIGRpc2FibGVkIGhpZGRlbj4ge3sgem9uZUVkaXQgJiYgem9uZUVkaXQubGF5ZXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZUVkaXQubGF5ZXIubmFtZSA6ICdDaG9vc2UgdHlwZSd9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYXllciBvZiBsYXllcnNcIiBbdmFsdWVdPVwibGF5ZXIuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxheWVyLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0xIG5ldy10eXBlLXRleHRcIj57eydvciBhZGQgbmV3IHR5cGUgb2Ygem9uZScgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbmV3LXR5cGUtaW5wdXRcIiBmb3JtQ29udHJvbE5hbWU9XCJuZXdMYXllclwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tSWYgRWRpdGluZyBab25lIHBvc3NpYmlsaXR5IHRvIGFzc2lnbiBpdCB0byBtdXNldW0gaXRpbmVyYXJ5LS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiem9uZUVkaXQgJiYgIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eyAnTXVzZXVtIEl0aW5lcmFyeScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrYm94LWFwcGx5IG10LTNcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImlzTXVzZXVtVmlzaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiAqbmdJZj1cIiF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3sgJ011bHRpcGxlIEZsb29ycycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrYm94LWFwcGx5IG10LTNcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIm11bHRpcGxlRmxvb3JzXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZU11bHRpcGxlRmxvb3JzKClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzdXJmYWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiAqbmdJZj1cIiF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snUGFyZW50IHpvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJlbnRJRFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB6b25lIG9mIHBhcmVudFpvbmVzXCIgW25nVmFsdWVdPVwiem9uZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgem9uZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3c6IGF1dG87XCIgKm5nSWY9XCIhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J1NjYW4gUG9pbnRzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJjb2wtc20tMlwiICpuZ0lmPVwiem9uZUVkaXRcIj57eyB6b25lRWRpdC5zd2VlcElEcy5sZW5ndGggfX0gc2NhbnM8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb2xcIiAqbmdJZj1cImNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA9PT0gMCAmJiBjaG9zZW5TY2Fucy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydObyBzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIiAqbmdJZj1cImNob3NlblNjYW5zT25QbGFuICYmIGNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBjaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggfX0ge3snc2NhbiBwb2ludHMgY2hvc2VuJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgc2NhbiBvZiBjaG9zZW5TY2Fuc09uUGxhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1lLTJcIj57eyBzY2FuIHwgc2xpY2U6MDo4IH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25SZW1vdmVTY2FuUGxhbihzY2FuKVwiIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOnRyYXNoLWNhbi1vdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCIgKm5nSWY9XCJjYXJvdXNlbElzVmlzaWJsZSAmJiBjaG9zZW5TY2FucyAmJiBjaG9zZW5TY2Fucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgY2hvc2VuU2NhbnMubGVuZ3RoIH19IHt7J3NjYW4gcG9pbnRzIGNob3NlbicgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzY2FuIG9mIGNob3NlblNjYW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWUtMlwiPnt7IGltYWdlczM2MFtzY2FuXS5maWxlbmFtZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uUmVtb3ZlU2NhbkltYWdlKHNjYW4pXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6dHJhc2gtY2FuLW91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTMgbXQtM1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwidG9nZ2xlUGxhbigpXCI+e3snQ2hvb3NlIHNjYW4gcG9pbnRzIG9uIHBsYW4nIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cInRvZ2dsZUNhcm91c2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZnJvbVBsYW4gfHwgIWltYWdlczM2MCB8fCBpbWFnZXMzNjAubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Nob29zZSBzY2FuIHBvaW50cyBmcm9tIGdhbGxlcnknIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQWRkQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZnJvbVBsYW4gfHwgIWltYWdlczM2MCB8fCBpbWFnZXMzNjAubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J2FkZC1hbGwtc2NhbnMnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05vIHZpc2libGUgc2NhbiBwb2ludHMnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibm9TY2FuUG9pbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXJvdXNlbElzVmlzaWJsZVwiIGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1jYXJvdXNlbCAqbmdJZj1cImltYWdlczM2MCAmJiBpbWFnZXMzNjAubGVuZ3RoID4gMFwiIFtpbWFnZXNdPVwiaW1hZ2VzMzYwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFNjYW4pPVwiY3VycmVudFNjYW5TaG93aW5nPSRldmVudFwiPjwvbGliLWNhcm91c2VsPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMiBtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRTY2FuKClcIj57eydBZGQgdG8gem9uZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cImZyb21QbGFuXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImVkaXQtcGxhblwiICpuZ0lmPVwiZnJvbVBsYW5cIj5cclxuICAgICAgICA8bGliLXN3ZWVwLXBsYW4tc2VsZWN0aW9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW25ld1pvbmVEYXRhXT1cIm5ld1pvbmVEYXRhRnJvbUVkaXRvclwiIFtzcGFjZUlEXT1cInNwYWNlSURcIlxyXG4gICAgICAgIFtpbnB1dFpvbmVdPVwiem9uZUVkaXRcIiAoc3dlZXBzU2VsZWN0ZWQpPVwib25TZWxlY3RlZFN3ZWVwc0Zyb21QbGFuKCRldmVudClcIj48L2xpYi1zd2VlcC1wbGFuLXNlbGVjdGlvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFTckYsTUFBTSxPQUFPLGdCQUFnQjtJQWdEekIsWUFDWSxFQUFlLEVBQ2YsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsaUJBQW9DO1FBSnBDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXZDdEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSXZDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBSXhDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRXpCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUkxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUlwQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUkzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUlqQyx3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFFeEIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBUW5CLENBQUM7SUFFTCxRQUFRO1FBQ0osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUN0RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FDMUQsSUFBSSxDQUFDLFlBQVksQ0FDcEIsQ0FBQztRQUNGLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQ25GO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDO1lBQzlELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLENBQUM7WUFDakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDMUIsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM1RCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO2dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUM1QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTthQUMzQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNqQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxFQUFFO29CQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2lCQUN4QjtnQkFDRCxPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsQ0FBQztnQkFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM3QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDckMsWUFBWSxFQUFFLElBQUk7YUFDckIsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDdEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLHFEQUFxRDtRQUNwRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFDcEIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdEQsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxNQUFNLFNBQVMsR0FBRztZQUNkLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87WUFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDckMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDeEMsUUFBUSxFQUFFLEVBQUU7WUFDWixZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVk7U0FDL0IsQ0FBQztRQUVWLElBQUk7WUFDQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUM3QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM3QyxVQUFVLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNO2dCQUVILE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDckIseUJBQXlCO29CQUN6QixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2lCQUM1QztnQkFDRCxNQUFNLElBQUksQ0FBQyxXQUFXO3FCQUNqQixNQUFNLENBQUMsU0FBUyxDQUFDO3FCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLENBQUM7YUFDVjtTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckQsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xEO2FBQU07WUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQUMsU0FBZTtRQUM5QyxJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLG1CQUFtQjtZQUNwRCxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ2hCO1lBQ0Usc0NBQXNDO1lBQ3RDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDNUMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLE9BQU8sRUFBRTtvQkFDVCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMxQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDakM7YUFBTTtZQUNILHdDQUF3QztZQUN4QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUMvQztTQUNKO1FBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRCxNQUFNLFdBQVcsR0FDYixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQ0FBcUMsQ0FDOUQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO1lBQ04sU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUMvQyxJQUFJLEVBQ0osSUFBSSxDQUFDLFlBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN6RCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7WUFDN0IsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQWUsRUFBRSxFQUFFO2dCQUNqRCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUMxQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3ZCO1lBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7WUFDdkMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDNUI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQscUJBQXFCO0lBQ3JCLHlCQUF5QjtJQUN6Qix5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLGVBQWU7SUFDZixJQUFJO0lBRUo7O09BRUc7SUFDSCxRQUFRO1FBQ0osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN0RyxDQUFDO0lBQ04sQ0FBQztJQUNEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0M7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBbUQ7UUFDeEUsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDMUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3JFO1NBQ0o7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDOzs2R0F4VVEsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaVdDVjdCLHU2UEFpSU07MkZEdkhPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDSSxjQUFjO3FOQU1mLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIFpvbmUsIFBsYW4sIExheWVyLCBab25lU2VydmljZSwgTGF5ZXJTZXJ2aWNlLCBCYXNlVXNlclNlcnZpY2UsIE5hdmlnYXRpb25TZXJ2aWNlXHJcbn0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1hZGQtem9uZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYWRkLXpvbmUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkWm9uZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgem9uZUVkaXQ6IFpvbmU7XHJcblxyXG4gICAgQElucHV0KCkgc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIGltYWdlczM2MDogeyBwYXRoOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmc7IH1bXTtcclxuXHJcbiAgICBASW5wdXQoKSBuYXZpZ2F0aW9uSURzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBASW5wdXQoKSB6b25lczogWm9uZVtdO1xyXG5cclxuICAgIEBJbnB1dCgpIG5ld1pvbmVEYXRhRnJvbUVkaXRvcjogYW55O1xyXG5cclxuICAgIEBPdXRwdXQoKSB1cGRhdGVkWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGNob3NlblBsYW46IFBsYW47XHJcblxyXG4gICAgQElucHV0KCkgaXNNdXNldW1WaXNpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIGRlZmF1bHRab25lOiBab25lO1xyXG5cclxuICAgIHBhcmVudFpvbmVzOiBab25lW10gPSBbXTtcclxuXHJcbiAgICBjYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHpvbmVGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjdXJyZW50U2NhblNob3dpbmc6IG51bWJlcjtcclxuXHJcbiAgICBjaG9zZW5TY2FuczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBsYXllcnM6IExheWVyW107XHJcblxyXG4gICAgZnJvbVBsYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjaG9zZW5TY2Fuc09uUGxhbjogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjdXJyZW50T3JnSWQ6IHN0cmluZztcclxuXHJcbiAgICB6b25lSW5pdGlhbE5hdkNvdW50ID0gMDtcclxuXHJcbiAgICB6b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBmYWxzZTtcclxuXHJcbiAgICBtdWx0aXBsZUZsb29ycyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcmVudFpvbmVzID0gdGhpcy56b25lcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGFyZW50Wm9uZXMudW5zaGlmdCh0aGlzLmRlZmF1bHRab25lKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVycygpO1xyXG4gICAgICAgIHRoaXMuaW5pdFpvbmVGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlTGF5ZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T3JnSWQgPSBtaXNzaW9uLm9yZ2FuaXNhdGlvbklEO1xyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGZpbHRlciBvdXQgbGF5ZXJzIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbVxyXG4gICAgICAgIHRoaXMubGF5ZXJzID0gbGF5ZXJzLmZpbHRlcigobCkgPT4gbC5uYW1lICE9PSBcIkJVSUxESU5HXCIgJiYgbC5uYW1lICE9PSBcIkZMT09SXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRab25lRm9ybSgpIHtcclxuICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdC5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKHRoaXMuem9uZUVkaXQubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBtZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShcIm1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHRoaXMuem9uZVNlcnZpY2Uuem9uZUlzVmlydHVhbCh0aGlzLnpvbmVFZGl0KTtcclxuICAgICAgICAgICAgaWYgKCFpc1ZpcnR1YWwpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5hdmlnYXRpb25zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gdGhpcy56b25lRWRpdC5pc011c2V1bVZpc2l0Wm9uZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUZsb29ycyA9IHRoaXMuem9uZUVkaXQuaXNNdWx0aXBsZUZsb29yWm9uZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuem9uZUVkaXQuaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbdGhpcy56b25lRWRpdC5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogdGhpcy56b25lRWRpdC5sYXllciA/IHRoaXMuem9uZUVkaXQubGF5ZXIuaWQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZTogdGhpcy56b25lRWRpdC5zdXJmYWNlID8gdGhpcy56b25lRWRpdC5zdXJmYWNlIDogMCxcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiB0aGlzLnpvbmVFZGl0LnBhcmVudElELFxyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLnpvbmVFZGl0LnBhcmVudCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgICAgIHN0YXJ0U3dlZXBJRDogdGhpcy56b25lRWRpdC5zdGFydFN3ZWVwSUQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdab25lRGF0YUZyb21FZGl0b3IgPyB0aGlzLm5ld1pvbmVEYXRhRnJvbUVkaXRvci5uYW1lIDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN1cmZhY2U6IDAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJRDogdGhpcy5kZWZhdWx0Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgICAgIHN0YXJ0U3dlZXBJRDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0Wm9uZSgpIHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuem9uZUZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnpvbmVGb3JtLmdldFJhd1ZhbHVlKCk7IC8vYmVjYXVzZSB3ZSBuZWVkIHZhbHVlcyBvZiBkaXNhYmxlcyBjb250cm9scyBhcyB3ZWxsXHJcbiAgICAgICAgaWYgKGZvcm1WYWx1ZS5uZXdMYXllcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUxheWVyKGZvcm1WYWx1ZS5uZXdMYXllcikudGhlbigobGF5ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZS5sYXllcklEID0gbGF5ZXIuaWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB6b25lSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxyXG4gICAgICAgICAgICBzdXJmYWNlOiBmb3JtVmFsdWUuc3VyZmFjZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklEOiBmb3JtVmFsdWUubGF5ZXJJRCxcclxuICAgICAgICAgICAgcGFyZW50SUQ6IGZvcm1WYWx1ZS5wYXJlbnRJRCxcclxuICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgaXNNdWx0aXBsZUZsb29yWm9uZTogdGhpcy5tdWx0aXBsZUZsb29ycyxcclxuICAgICAgICAgICAgc3dlZXBJRHM6IFtdLFxyXG4gICAgICAgICAgICBzdGFydFN3ZWVwSUQ6IGZvcm1WYWx1ZS5zdGFydFN3ZWVwSUQsXHJcbiAgICAgICAgfSBhcyBab25lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZVVwZGF0ZSA9IHpvbmVJbnB1dDtcclxuICAgICAgICAgICAgICAgIHpvbmVVcGRhdGUuc3dlZXBJRHMgPSB0aGlzLnpvbmVFZGl0LnN3ZWVwSURzO1xyXG4gICAgICAgICAgICAgICAgem9uZVVwZGF0ZS5pZCA9IGZvcm1WYWx1ZS5pZDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUVkaXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KHpvbmVVcGRhdGUuaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lSW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF6b25lSW5wdXQucGFyZW50SUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgYnVpbGRpbmcgYXMgcGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gdGhpcy5kZWZhdWx0Wm9uZS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKHpvbmVJbnB1dClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbih6b25lQ3JlYXRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdCh6b25lQ3JlYXRlZC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuem9uZUZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBbXTtcclxuICAgICAgICB0aGlzLmNob3NlblNjYW5zID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnpvbmVGb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVBsYW4oKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tUGxhbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkU2NhbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hvc2VuU2NhbnMuaW5jbHVkZXModGhpcy5jdXJyZW50U2NhblNob3dpbmcpKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkaW5nIHNjYW5cIiwgdGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLnB1c2godGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KFwiU2NhbiBhbHJlYWR5IGFkZGVkIVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVTY2FuSW1hZ2Uoc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlU2NhblBsYW4oc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zT25QbGFuLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldFN3ZWVwc0FuZE5vZGVGb3Jab25lSW5wdXQoem9uZUlucHV0OiBab25lKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5sZW5ndGggIT09IHRoaXMuem9uZUluaXRpYWxOYXZDb3VudCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5mcm9tUGxhblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSBjaG9zZSBzY2FucyBmcm9tIHRoZSBjYXJvdXNlbFxyXG4gICAgICAgICAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5tYXAoYXN5bmMgKHNjYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXVpZCA9IHRoaXMuaW1hZ2VzMzYwW3NjYW5dLmZpbGVuYW1lLnNwbGl0KFwiX1wiKVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwSUQgPSB0aGlzLm5hdmlnYXRpb25JRHMuZmluZCgobmF2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hdi5pbmNsdWRlcyhpbWFnZVV1aWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3dlZXBJRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3ZWVwSURzLnB1c2goc3dlZXBJRCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHMgPSBzd2VlcElEcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3ZSBhcmUgbm90IGNvbWluZyBmcm9tIGdhbGxlcnkgY2hvaWNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEcyA9IHRoaXMuY2hvc2VuU2NhbnNPblBsYW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh6b25lSW5wdXQuc3dlZXBJRHMgJiYgem9uZUlucHV0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmF2Rm9yU3dlZXAgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0Zvck1hdHRlcnBvcnRJREZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEc1swXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubm9kZUlEcyA9IFtuYXZGb3JTd2VlcFswXS5ub2RlSURdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVMYXllcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXZpZ2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnpvbmVFZGl0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy56b25lSW5pdGlhbE5hdkNvdW50ID0gdGhpcy56b25lRWRpdC5zd2VlcElEcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdkxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zWm9uZUVkaXQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRWRpdC5zd2VlcElEcy5tYXAoYXN5bmMgKHN3ZWVwSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5zWm9uZUVkaXQucHVzaChzd2VlcElEKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW1hZ2VzMzYwLmZpbmRJbmRleCgoaW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltLmZpbGVuYW1lLmluY2x1ZGVzKHN3ZWVwSUQuc2xpY2UoMCwgOCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2TGlzdC5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IG5hdkxpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBzY2Fuc1pvbmVFZGl0O1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIGluaVBsYW5Gb3JEcmF3KCkge1xyXG4gICAgLy8gICAgIHRoaXMudG9nZ2xlUGxhbigpO1xyXG4gICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLm9uUGxhbkNsaWNrKCk7XHJcbiAgICAvLyAgICAgfSwgNTAwKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYWxsIHN3ZWVwcyBvZiB0aGUgc3BhY2VcclxuICAgICAqL1xyXG4gICAgb25BZGRBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBkZWZhdWx0Wm9uZS5zd2VlcElEcztcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5zZXRWYWx1ZShkZWZhdWx0Wm9uZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmxvb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdFpvbmUoKTogWm9uZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuem9uZXMuZmluZChcclxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIgJiYgem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbGUgZmxvb3JzIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZU11bHRpcGxlRmxvb3JzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlRmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRab25lID0gdGhpcy5nZXREZWZhdWx0Wm9uZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuc2V0VmFsdWUoZGVmYXVsdFpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtLmdldChcInBhcmVudElEXCIpLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGVkU3dlZXBzRnJvbVBsYW4ocmVzdWx0OiB7IHN3ZWVwczogc3RyaW5nW107IHN0YXJ0U3dlZXBJRDogc3RyaW5nOyB9KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnN3ZWVwcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHJlc3VsdC5zd2VlcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydFN3ZWVwSUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uY29udHJvbHMuc3RhcnRTd2VlcElELnNldFZhbHVlKHJlc3VsdC5zdGFydFN3ZWVwSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbVBsYW4gPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCIgKm5nSWY9XCJ6b25lRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC03XCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0Wm9uZSgpXCIgW2Zvcm1Hcm91cF09XCJ6b25lRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIWlzTXVzZXVtVmlzaXQgJiYgIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydUeXBlIG9mIHpvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXllcklEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJudWxsXCIgc2VsZWN0ZWQgZGlzYWJsZWQgaGlkZGVuPiB7eyB6b25lRWRpdCAmJiB6b25lRWRpdC5sYXllciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lRWRpdC5sYXllci5uYW1lIDogJ0Nob29zZSB0eXBlJ319PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGxheWVyc1wiIFt2YWx1ZV09XCJsYXllci5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGF5ZXIubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgbmV3LXR5cGUtdGV4dFwiPnt7J29yIGFkZCBuZXcgdHlwZSBvZiB6b25lJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBuZXctdHlwZS1pbnB1dFwiIGZvcm1Db250cm9sTmFtZT1cIm5ld0xheWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS1JZiBFZGl0aW5nIFpvbmUgcG9zc2liaWxpdHkgdG8gYXNzaWduIGl0IHRvIG11c2V1bSBpdGluZXJhcnktLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCJ6b25lRWRpdCAmJiAhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7ICdNdXNldW0gSXRpbmVyYXJ5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXNNdXNldW1WaXNpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eyAnTXVsdGlwbGUgRmxvb3JzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibXVsdGlwbGVGbG9vcnNcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydTdXJmYWNlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInN1cmZhY2VcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydQYXJlbnQgem9uZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcmVudElEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHpvbmUgb2YgcGFyZW50Wm9uZXNcIiBbbmdWYWx1ZV09XCJ6b25lLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0bztcIiAqbmdJZj1cIiF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cImNvbC1zbS0yXCIgKm5nSWY9XCJ6b25lRWRpdFwiPnt7IHpvbmVFZGl0LnN3ZWVwSURzLmxlbmd0aCB9fSBzY2FuczwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbFwiICpuZ0lmPVwiY2hvc2VuU2NhbnNPblBsYW4ubGVuZ3RoID09PSAwICYmIGNob3NlblNjYW5zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J05vIHNjYW4gcG9pbnRzIGNob3NlbicgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiICpuZ0lmPVwiY2hvc2VuU2NhbnNPblBsYW4gJiYgY2hvc2VuU2NhbnNPblBsYW4ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGNob3NlblNjYW5zT25QbGFuLmxlbmd0aCB9fSB7eydzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBzY2FuIG9mIGNob3NlblNjYW5zT25QbGFuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWUtMlwiPnt7IHNjYW4gfCBzbGljZTowOjggfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvblJlbW92ZVNjYW5QbGFuKHNjYW4pXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6dHJhc2gtY2FuLW91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIiAqbmdJZj1cImNhcm91c2VsSXNWaXNpYmxlICYmIGNob3NlblNjYW5zICYmIGNob3NlblNjYW5zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBjaG9zZW5TY2Fucy5sZW5ndGggfX0ge3snc2NhbiBwb2ludHMgY2hvc2VuJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHNjYW4gb2YgY2hvc2VuU2NhbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtZS0yXCI+e3sgaW1hZ2VzMzYwW3NjYW5dLmZpbGVuYW1lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25SZW1vdmVTY2FuSW1hZ2Uoc2NhbilcIiBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTp0cmFzaC1jYW4tb3V0bGluZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMyBtdC0zXCIgKm5nSWY9XCIhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJ0b2dnbGVQbGFuKClcIj57eydDaG9vc2Ugc2NhbiBwb2ludHMgb24gcGxhbicgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwidG9nZ2xlQ2Fyb3VzZWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmcm9tUGxhbiB8fCAhaW1hZ2VzMzYwIHx8IGltYWdlczM2MC5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snQ2hvb3NlIHNjYW4gcG9pbnRzIGZyb20gZ2FsbGVyeScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRBbGwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmcm9tUGxhbiB8fCAhaW1hZ2VzMzYwIHx8IGltYWdlczM2MC5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snYWRkLWFsbC1zY2FucycgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTm8gdmlzaWJsZSBzY2FuIHBvaW50cycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVja2JveC1hcHBseSBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJub1NjYW5Qb2ludHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhcm91c2VsSXNWaXNpYmxlXCIgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWNhcm91c2VsICpuZ0lmPVwiaW1hZ2VzMzYwICYmIGltYWdlczM2MC5sZW5ndGggPiAwXCIgW2ltYWdlc109XCJpbWFnZXMzNjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjdXJyZW50U2Nhbik9XCJjdXJyZW50U2NhblNob3dpbmc9JGV2ZW50XCI+PC9saWItY2Fyb3VzZWw+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yIG10LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFNjYW4oKVwiPnt7J0FkZCB0byB6b25lJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiBbZGlzYWJsZWRdPVwiZnJvbVBsYW5cIj57eydTYXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC1wbGFuXCIgKm5nSWY9XCJmcm9tUGxhblwiPlxyXG4gICAgICAgIDxsaWItc3dlZXAtcGxhbi1zZWxlY3Rpb24gc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbbmV3Wm9uZURhdGFdPVwibmV3Wm9uZURhdGFGcm9tRWRpdG9yXCIgW3NwYWNlSURdPVwic3BhY2VJRFwiXHJcbiAgICAgICAgW2lucHV0Wm9uZV09XCJ6b25lRWRpdFwiIChzd2VlcHNTZWxlY3RlZCk9XCJvblNlbGVjdGVkU3dlZXBzRnJvbVBsYW4oJGV2ZW50KVwiPjwvbGliLXN3ZWVwLXBsYW4tc2VsZWN0aW9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==