fabrikantencore 2.8.1 → 2.8.3
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.
- package/esm2022/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.mjs +38 -20
- package/esm2022/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.mjs +5 -4
- package/esm2022/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +2 -2
- package/fesm2022/fabrikantencore.mjs +30 -13
- package/fesm2022/fabrikantencore.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.d.ts +3 -1
- package/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.d.ts +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { TranslationCategory, TranslationSubCategory } from '../../swagger/SwaggerClient';
|
|
3
|
+
import { FabFormDialogComponent } from '../fab-form-dialog/fab-form-dialog.component';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "../../services/mobile.service";
|
|
5
6
|
import * as i2 from "../../services/fabrikanten.service";
|
|
@@ -7,17 +8,18 @@ import * as i3 from "../../services/translate.service";
|
|
|
7
8
|
import * as i4 from "../../services/bestek.service";
|
|
8
9
|
import * as i5 from "../../services/texture.service";
|
|
9
10
|
import * as i6 from "../../services/svg.service";
|
|
10
|
-
import * as i7 from "
|
|
11
|
-
import * as i8 from "../../services/
|
|
12
|
-
import * as i9 from "
|
|
13
|
-
import * as i10 from "@angular/
|
|
14
|
-
import * as i11 from "@angular/
|
|
15
|
-
import * as i12 from "@angular/
|
|
16
|
-
import * as i13 from "@angular/material/
|
|
17
|
-
import * as i14 from "@angular/material/
|
|
18
|
-
import * as i15 from "@angular/material/
|
|
19
|
-
import * as i16 from "@angular/material/legacy-
|
|
20
|
-
import * as i17 from "
|
|
11
|
+
import * as i7 from "@angular/material/legacy-dialog";
|
|
12
|
+
import * as i8 from "../../services/webgl.service";
|
|
13
|
+
import * as i9 from "../../services/toebehoren.service";
|
|
14
|
+
import * as i10 from "@angular/common";
|
|
15
|
+
import * as i11 from "@angular/material/legacy-form-field";
|
|
16
|
+
import * as i12 from "@angular/forms";
|
|
17
|
+
import * as i13 from "@angular/material/legacy-button";
|
|
18
|
+
import * as i14 from "@angular/material/icon";
|
|
19
|
+
import * as i15 from "@angular/material/button-toggle";
|
|
20
|
+
import * as i16 from "@angular/material/legacy-select";
|
|
21
|
+
import * as i17 from "@angular/material/legacy-core";
|
|
22
|
+
import * as i18 from "../fab-input-code/fab-input-code.component";
|
|
21
23
|
class FabActionmenuComponent {
|
|
22
24
|
MobileService;
|
|
23
25
|
FabrikantenService;
|
|
@@ -25,6 +27,7 @@ class FabActionmenuComponent {
|
|
|
25
27
|
BestekService;
|
|
26
28
|
TextureService;
|
|
27
29
|
SVGService;
|
|
30
|
+
dialog;
|
|
28
31
|
WebGLService;
|
|
29
32
|
ToebehorenService;
|
|
30
33
|
ChangeDetectorRef;
|
|
@@ -35,13 +38,14 @@ class FabActionmenuComponent {
|
|
|
35
38
|
return TranslationSubCategory;
|
|
36
39
|
}
|
|
37
40
|
display;
|
|
38
|
-
constructor(MobileService, FabrikantenService, TranslateService, BestekService, TextureService, SVGService, WebGLService, ToebehorenService, ChangeDetectorRef) {
|
|
41
|
+
constructor(MobileService, FabrikantenService, TranslateService, BestekService, TextureService, SVGService, dialog, WebGLService, ToebehorenService, ChangeDetectorRef) {
|
|
39
42
|
this.MobileService = MobileService;
|
|
40
43
|
this.FabrikantenService = FabrikantenService;
|
|
41
44
|
this.TranslateService = TranslateService;
|
|
42
45
|
this.BestekService = BestekService;
|
|
43
46
|
this.TextureService = TextureService;
|
|
44
47
|
this.SVGService = SVGService;
|
|
48
|
+
this.dialog = dialog;
|
|
45
49
|
this.WebGLService = WebGLService;
|
|
46
50
|
this.ToebehorenService = ToebehorenService;
|
|
47
51
|
this.ChangeDetectorRef = ChangeDetectorRef;
|
|
@@ -131,10 +135,24 @@ class FabActionmenuComponent {
|
|
|
131
135
|
this.FabrikantenService.OpenBCBLink();
|
|
132
136
|
}
|
|
133
137
|
DownloadPDFTemplate(template) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
+
if (this.FabrikantenService.FabrikantenSettingsViewModel.downloadFormEnabled && !this.FabrikantenService.FabrikantenViewModel.hasFilledForms) {
|
|
139
|
+
var dialogRef = this.dialog.open(FabFormDialogComponent, {
|
|
140
|
+
data: {
|
|
141
|
+
form: this.FabrikantenService.FabrikantenSettingsViewModel.downloadForm
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
dialogRef.afterClosed().subscribe((data) => {
|
|
145
|
+
if (this.FabrikantenService.FabrikantenViewModel.hasFilledForms) {
|
|
146
|
+
this.DownloadPDFTemplate(template);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
var url = "/Download/CreatePDF?pLanguageId=" + this.TranslateService.ActiveLanguage.id;
|
|
152
|
+
url += "&pPDFTemplateId=" + template.templateId;
|
|
153
|
+
url += "&pSessionId=" + this.FabrikantenService.FabrikantenViewModel.sessionId;
|
|
154
|
+
window.open(url, "_blank");
|
|
155
|
+
}
|
|
138
156
|
}
|
|
139
157
|
Download(downloaditem, custombcbeboid) {
|
|
140
158
|
this.FabrikantenService.Download(downloaditem, custombcbeboid);
|
|
@@ -149,14 +167,14 @@ class FabActionmenuComponent {
|
|
|
149
167
|
this.SVGService.LoadFabrikantenSVGViewModel(this.FabrikantenService.FabrikantenViewModel.sessionId, this.ChangeDetectorRef);
|
|
150
168
|
}
|
|
151
169
|
}
|
|
152
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: FabActionmenuComponent, deps: [{ token: i1.MobileService }, { token: i2.FabrikantenService }, { token: i3.TranslateService }, { token: i4.BestekService }, { token: i5.TextureService }, { token: i6.SVGService }, { token: i7.
|
|
153
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: FabActionmenuComponent, selector: "app-fab-actionmenu", inputs: { display: "display" }, ngImport: i0, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n \r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"ShowInputCode()\">\r\n <app-fab-input-code></app-fab-input-code>\r\n</div>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i15.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i16.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i17.FabInputCodeComponent, selector: "app-fab-input-code" }], encapsulation: i0.ViewEncapsulation.None });
|
|
170
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: FabActionmenuComponent, deps: [{ token: i1.MobileService }, { token: i2.FabrikantenService }, { token: i3.TranslateService }, { token: i4.BestekService }, { token: i5.TextureService }, { token: i6.SVGService }, { token: i7.MatLegacyDialog }, { token: i8.WebGLService }, { token: i9.ToebehorenService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: FabActionmenuComponent, selector: "app-fab-actionmenu", inputs: { display: "display" }, ngImport: i0, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n \r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"ShowInputCode()\">\r\n <app-fab-input-code></app-fab-input-code>\r\n</div>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i15.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i15.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i16.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i18.FabInputCodeComponent, selector: "app-fab-input-code" }], encapsulation: i0.ViewEncapsulation.None });
|
|
154
172
|
}
|
|
155
173
|
export { FabActionmenuComponent };
|
|
156
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: FabActionmenuComponent, decorators: [{
|
|
157
175
|
type: Component,
|
|
158
176
|
args: [{ selector: 'app-fab-actionmenu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n \r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"ShowInputCode()\">\r\n <app-fab-input-code></app-fab-input-code>\r\n</div>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"] }]
|
|
159
|
-
}], ctorParameters: function () { return [{ type: i1.MobileService }, { type: i2.FabrikantenService }, { type: i3.TranslateService }, { type: i4.BestekService }, { type: i5.TextureService }, { type: i6.SVGService }, { type: i7.
|
|
177
|
+
}], ctorParameters: function () { return [{ type: i1.MobileService }, { type: i2.FabrikantenService }, { type: i3.TranslateService }, { type: i4.BestekService }, { type: i5.TextureService }, { type: i6.SVGService }, { type: i7.MatLegacyDialog }, { type: i8.WebGLService }, { type: i9.ToebehorenService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { display: [{
|
|
160
178
|
type: Input
|
|
161
179
|
}] } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1hY3Rpb25tZW51L2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTdkYsT0FBTyxFQUE2RSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJLLE1BTWEsc0JBQXNCO0lBWWQ7SUFDVjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbEJULElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVRLE9BQU8sQ0FBUztJQUV6QixZQUFtQixhQUE0QixFQUN0QyxrQkFBc0MsRUFDdEMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFSMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQs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QUM7UUFDaEQsR0FBRyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBRS9FLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxRQUFRLENBQUMsWUFBc0QsRUFBRSxjQUFrQztRQUN0RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM3SDtJQUNILENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzdIO0lBQ0gsQ0FBQzt1R0F4SlUsc0JBQXNCOzJGQUF0QixzQkFBc0IsMEZDakJuQyxxd1RBa0xBOztTRGpLYSxzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0IsaUJBR2YsaUJBQWlCLENBQUMsSUFBSTtpVkFZNUIsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlc3Rla1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXN0ZWsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2JpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9iaWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTVkdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RleHR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvZWJlaG9yZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9lYmVob3Jlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViR0xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2ViZ2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwsIEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIFRyYW5zbGF0aW9uQ2F0ZWdvcnksIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmFiLWFjdGlvbm1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGYWJBY3Rpb25tZW51Q29tcG9uZW50IHtcclxuXHJcbiAgcHVibGljIGdldCBUcmFuc2xhdGlvbkNhdGVnb3J5KCkge1xyXG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uQ2F0ZWdvcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkoKSB7XHJcbiAgICByZXR1cm4gVHJhbnNsYXRpb25TdWJDYXRlZ29yeTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIE1vYmlsZVNlcnZpY2U6IE1vYmlsZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgRmFicmlrYW50ZW5TZXJ2aWNlOiBGYWJyaWthbnRlblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHB1YmxpYyBCZXN0ZWtTZXJ2aWNlOiBCZXN0ZWtTZXJ2aWNlLFxyXG4gICAgcHVibGljIFRleHR1cmVTZXJ2aWNlOiBUZXh0dXJlU2VydmljZSxcclxuICAgIHB1YmxpYyBTVkdTZXJ2aWNlOiBTVkdTZXJ2aWNlLFxyXG4gICAgcHVibGljIFdlYkdMU2VydmljZTogV2ViR0xTZXJ2aWNlLFxyXG4gICAgcHVibGljIFRvZWJlaG9yZW5TZXJ2aWNlOiBUb2ViZWhvcmVuU2VydmljZSxcclxuICAgIHB1YmxpYyBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93RG93bmxvYWRDYXRlZ29yeShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gbmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93M0RCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIjNEXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvdzJEQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCIyRFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCZXN0ZWtCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIkJlc3Rla1wiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dUZXh0dXJlQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCJUZXh0dXJlXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RvZWJlaG9yZW5CdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIlRvZWJlaG9yZW5cIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QkNCQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LnNob3dCQ0JCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0lucHV0Q29kZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5pbnB1dENvZGVFbmFibGVkID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID09IFwiU1RBQlVcIiAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuc3VmICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlZyaWpcIiAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkQmVzdGVrKHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QmVzdGVrLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGRvd25sb2FkIHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gY29weSBzcGVjaWZpY2F0aW9uc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwQm9hcmRTVUYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1ZiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJFcnJvcjogdW5hYmxlZCB0byBjb3B5IHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCZXN0ZWtTZWxlY3QoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5TaG93VnJpaigpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93U1RBQlUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdGFidSAhPSAnJyAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnN0YWJ1ICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93U1VGKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3VmICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3VmICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93T1NGKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8ub3NmaHRtbCAhPSAnJyAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/Lm9zZmh0bWwgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dWcmlqKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LmVuYWJsZVZyaWplQmVzdGVrVGVrc3QgPT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnZyaWpCZXN0ZWtIVE1MICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8udnJpakJlc3Rla0hUTUwgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5CQ0JMaW5rKCk6IHZvaWQge1xyXG4gICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuT3BlbkJDQkxpbmsoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEb3dubG9hZFBERlRlbXBsYXRlKHRlbXBsYXRlOiBGYWJyaWthbnRlblBERlRlbXBsYXRlVmlld01vZGVsKTogdm9pZCB7XHJcblxyXG4gICAgdmFyIHVybCA9IFwiL0Rvd25sb2FkL0NyZWF0ZVBERj9wTGFuZ3VhZ2VJZD1cIiArIHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgIHVybCArPSBcIiZwUERGVGVtcGxhdGVJZD1cIiArIHRlbXBsYXRlLnRlbXBsYXRlSWQ7XHJcbiAgICB1cmwgKz0gXCImcFNlc3Npb25JZD1cIiArIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWZyZXNoU25lZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2U/LkZhYnJpa2FudGVuVmlld01vZGVsPy5zZXNzaW9uSWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNWR1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuU1ZHVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZCwgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVmcmVzaFNjaGFhbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZT8uRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlc3Npb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU1ZHU2VydmljZS5Mb2FkRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsICE9IG51bGxcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2hvdzJEQnV0dG9ucygpXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzZWxlY3QtbWF0LWxhYmVsXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TbmVkZSkgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNWR1NlcnZpY2UuU25lZGVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlJlZnJlc2hTbmVkZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc25lZGUgb2YgU1ZHU2VydmljZS5TbmVkZXNcIiBbdmFsdWVdPVwic25lZGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TbmVkZUl0ZW0sIG51bGwsIHNuZWRlKSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNjaGFhbCkgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNWR1NlcnZpY2UuU2NoYWFsXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJSZWZyZXNoU2NoYWFsKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMCdcIj4xOjE8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEnXCI+MToyPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicyJ1wiPjE6NTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMydcIj4xOjEwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic0J1wiPjE6MjA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzUnXCI+MTo1MDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNidcIj4xOjEwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNydcIj4xOjIwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInOCdcIj4xOjUwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInOSdcIj4xOjEwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEwJ1wiPjE6MjAwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMTEnXCI+MTo1MDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMidcIj4xOjEwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMydcIj4xOjIwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxNCdcIj4xOjUwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QmVzdGVrQnV0dG9ucygpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QmVzdGVrU2VsZWN0KClcIj5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3Rla1wiIChjaGFuZ2UpPVwiQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID0gJGV2ZW50LnNvdXJjZS52YWx1ZVwiIGFwcGVhcmFuY2U9XCJsZWdhY3lcIj5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dTVEFCVSgpXCIgdmFsdWU9XCJTVEFCVVwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU1RBQlUpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dPU0YoKVwiIHZhbHVlPVwiT1NGXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5PU0YpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dWcmlqKClcIiB2YWx1ZT1cIlZyaWpcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNwZWNpZmljYXRpb25UZXh0KSB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJDb3B5VG9DbGlwQm9hcmQoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGNvbnRlbnRfY29weVwiPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5DbGlwYm9hcmQpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiQ29weVRvQ2xpcEJvYXJkU1VGKClcIiAqbmdJZj1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSAnU1RBQlUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZFNVRikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJEb3dubG9hZEJlc3RlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuRG93bmxvYWQpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2hvd1RvZWJlaG9yZW5CdXR0b25zKClcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj5Ub2ViZWhvcmVuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJGYWJyaWthbnRlblNlcnZpY2UuU2VsZWN0ZWRUb2ViZWhvcmVuXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJUb2ViZWhvcmVuU2VydmljZS5PcGVuVG9lYmVob3Jlbih0aGlzLkNoYW5nZURldGVjdG9yUmVmKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW5cIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIhaXRlbS5iY2JQcm9kdWN0XCIgW3ZhbHVlXT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuVG9lYmVob3JlbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBpdGVtLmlkKSB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXRlbS5iY2JQcm9kdWN0XCIgW3ZhbHVlXT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG93bmxvYWRjYXRlZ29yeSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZENhdGVnb3JpZXNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dEb3dubG9hZENhdGVnb3J5KGRvd25sb2FkY2F0ZWdvcnkubmFtZSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb3dubG9hZGl0ZW0gb2YgZG93bmxvYWRjYXRlZ29yeS5pdGVtc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkY2F0ZWdvcnkubmFtZSA9PSAnVG9lYmVob3JlbidcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIFtuZ0NsYXNzXT1cImRvd25sb2FkaXRlbS5maWxlVHlwZSArICctYnV0dG9uJ1wiIChjbGljayk9XCJEb3dubG9hZChkb3dubG9hZGl0ZW0sIEZhYnJpa2FudGVuU2VydmljZS5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKT8uYmNiZWJvSWQpXCIgKm5nSWY9XCIoIWRvd25sb2FkaXRlbS5pc05hdGl2ZVJldml0IHx8IFdlYkdMU2VydmljZS5IYXNOYXRpdmVSRkEoKSkgJiYgKEZhYnJpa2FudGVuU2VydmljZS5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKSAhPSBudWxsKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGZpbGVfZG93bmxvYWRcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRvd25sb2FkaXRlbS5sb2FkaW5nXCI+Li4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIGRvd25sb2FkaXRlbS50cmFuc2xhdGlvblN1YkNhdGVnb3J5KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkY2F0ZWdvcnkubmFtZSAhPSAnVG9lYmVob3JlbidcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIFtuZ0NsYXNzXT1cImRvd25sb2FkaXRlbS5maWxlVHlwZSArICctYnV0dG9uJ1wiIChjbGljayk9XCJEb3dubG9hZChkb3dubG9hZGl0ZW0sIHVuZGVmaW5lZClcIiAqbmdJZj1cIiFkb3dubG9hZGl0ZW0uaXNOYXRpdmVSZXZpdCB8fCBXZWJHTFNlcnZpY2UuSGFzTmF0aXZlUkZBKClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPi4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZG93bmxvYWRpdGVtLmxvYWRpbmdcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBkb3dubG9hZGl0ZW0udHJhbnNsYXRpb25TdWJDYXRlZ29yeSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwZGZ0ZW1wbGF0ZSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LnBkZlRlbXBsYXRlc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkUERGVGVtcGxhdGUocGRmdGVtcGxhdGUpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU3BlY2lmaWNhdGlvbikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93VGV4dHVyZUJ1dHRvbnMoKVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5MaW5rKFRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC5wYXRyb29uVVJMKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuVGV4dHVyZSkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJPcGVuTGluayhUZXh0dXJlU2VydmljZS5GYWJyaWthbnRlblRleHR1cmVWaWV3TW9kZWwuYnVtcFVSTClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkJ1bXBtYXApIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5CQ0JMaW5rKClcIiAqbmdJZj1cIlNob3dCQ0JCdXR0b24oKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuQkNCKSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJTaG93SW5wdXRDb2RlKClcIj5cclxuICA8YXBwLWZhYi1pbnB1dC1jb2RlPjwvYXBwLWZhYi1pbnB1dC1jb2RlPlxyXG48L2Rpdj5cclxuIl19
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1hY3Rpb25tZW51L2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVdkYsT0FBTyxFQUE2RSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RixNQU1hLHNCQUFzQjtJQVlkO0lBQ1Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbkJULElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVRLE9BQU8sQ0FBUztJQUV6QixZQUFtQixhQUE0QixFQUN0QyxrQkFBc0MsRUFDdEMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLE1BQWlCLEVBQ2pCLFlBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFUMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxxQkFBZ0Is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QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDN0g7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM3SDtJQUNILENBQUM7dUdBeEtVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLDBGQ25CbkMscXdUQWtMQTs7U0QvSmEsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUk7K1dBWTVCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEJlc3Rla1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXN0ZWsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2JpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9iaWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTVkdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RleHR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvZWJlaG9yZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9lYmVob3Jlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViR0xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2ViZ2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwsIEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIFRyYW5zbGF0aW9uQ2F0ZWdvcnksIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5pbXBvcnQgeyBGYWJGb3JtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZmFiLWZvcm0tZGlhbG9nL2ZhYi1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmFiLWFjdGlvbm1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGYWJBY3Rpb25tZW51Q29tcG9uZW50IHtcclxuXHJcbiAgcHVibGljIGdldCBUcmFuc2xhdGlvbkNhdGVnb3J5KCkge1xyXG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uQ2F0ZWdvcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkoKSB7XHJcbiAgICByZXR1cm4gVHJhbnNsYXRpb25TdWJDYXRlZ29yeTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIE1vYmlsZVNlcnZpY2U6IE1vYmlsZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgRmFicmlrYW50ZW5TZXJ2aWNlOiBGYWJyaWthbnRlblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHB1YmxpYyBCZXN0ZWtTZXJ2aWNlOiBCZXN0ZWtTZXJ2aWNlLFxyXG4gICAgcHVibGljIFRleHR1cmVTZXJ2aWNlOiBUZXh0dXJlU2VydmljZSxcclxuICAgIHB1YmxpYyBTVkdTZXJ2aWNlOiBTVkdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHVibGljIFdlYkdMU2VydmljZTogV2ViR0xTZXJ2aWNlLFxyXG4gICAgcHVibGljIFRvZWJlaG9yZW5TZXJ2aWNlOiBUb2ViZWhvcmVuU2VydmljZSxcclxuICAgIHB1YmxpYyBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93RG93bmxvYWRDYXRlZ29yeShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gbmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93M0RCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIjNEXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvdzJEQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCIyRFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCZXN0ZWtCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIkJlc3Rla1wiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dUZXh0dXJlQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCJUZXh0dXJlXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RvZWJlaG9yZW5CdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIlRvZWJlaG9yZW5cIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QkNCQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LnNob3dCQ0JCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0lucHV0Q29kZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5pbnB1dENvZGVFbmFibGVkID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID09IFwiU1RBQlVcIiAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuc3VmICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlZyaWpcIiAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkQmVzdGVrKHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QmVzdGVrLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGRvd25sb2FkIHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gY29weSBzcGVjaWZpY2F0aW9uc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwQm9hcmRTVUYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1ZiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJFcnJvcjogdW5hYmxlZCB0byBjb3B5IHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCZXN0ZWtTZWxlY3QoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5TaG93VnJpaigpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93U1RBQlUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdGFidSAhPSAnJyAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnN0YWJ1ICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93U1VGKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3VmICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3VmICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93T1NGKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8ub3NmaHRtbCAhPSAnJyAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/Lm9zZmh0bWwgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dWcmlqKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LmVuYWJsZVZyaWplQmVzdGVrVGVrc3QgPT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnZyaWpCZXN0ZWtIVE1MICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8udnJpakJlc3Rla0hUTUwgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5CQ0JMaW5rKCk6IHZvaWQge1xyXG4gICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuT3BlbkJDQkxpbmsoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEb3dubG9hZFBERlRlbXBsYXRlKHRlbXBsYXRlOiBGYWJyaWthbnRlblBERlRlbXBsYXRlVmlld01vZGVsKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuZG93bmxvYWRGb3JtRW5hYmxlZCAmJiAhdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuaGFzRmlsbGVkRm9ybXMpIHtcclxuICAgICAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRmFiRm9ybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGZvcm06IHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuZG93bmxvYWRGb3JtXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLmhhc0ZpbGxlZEZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLkRvd25sb2FkUERGVGVtcGxhdGUodGVtcGxhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFyIHVybCA9IFwiL0Rvd25sb2FkL0NyZWF0ZVBERj9wTGFuZ3VhZ2VJZD1cIiArIHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgICAgdXJsICs9IFwiJnBQREZUZW1wbGF0ZUlkPVwiICsgdGVtcGxhdGUudGVtcGxhdGVJZDtcclxuICAgICAgdXJsICs9IFwiJnBTZXNzaW9uSWQ9XCIgKyB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWZyZXNoU25lZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2U/LkZhYnJpa2FudGVuVmlld01vZGVsPy5zZXNzaW9uSWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNWR1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuU1ZHVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZCwgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVmcmVzaFNjaGFhbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZT8uRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlc3Npb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU1ZHU2VydmljZS5Mb2FkRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsICE9IG51bGxcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2hvdzJEQnV0dG9ucygpXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzZWxlY3QtbWF0LWxhYmVsXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TbmVkZSkgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNWR1NlcnZpY2UuU25lZGVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlJlZnJlc2hTbmVkZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc25lZGUgb2YgU1ZHU2VydmljZS5TbmVkZXNcIiBbdmFsdWVdPVwic25lZGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TbmVkZUl0ZW0sIG51bGwsIHNuZWRlKSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNjaGFhbCkgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNWR1NlcnZpY2UuU2NoYWFsXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJSZWZyZXNoU2NoYWFsKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMCdcIj4xOjE8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEnXCI+MToyPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicyJ1wiPjE6NTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMydcIj4xOjEwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic0J1wiPjE6MjA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzUnXCI+MTo1MDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNidcIj4xOjEwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNydcIj4xOjIwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInOCdcIj4xOjUwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInOSdcIj4xOjEwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEwJ1wiPjE6MjAwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMTEnXCI+MTo1MDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMidcIj4xOjEwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMydcIj4xOjIwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxNCdcIj4xOjUwMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QmVzdGVrQnV0dG9ucygpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QmVzdGVrU2VsZWN0KClcIj5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3Rla1wiIChjaGFuZ2UpPVwiQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID0gJGV2ZW50LnNvdXJjZS52YWx1ZVwiIGFwcGVhcmFuY2U9XCJsZWdhY3lcIj5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dTVEFCVSgpXCIgdmFsdWU9XCJTVEFCVVwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU1RBQlUpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dPU0YoKVwiIHZhbHVlPVwiT1NGXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5PU0YpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cIlNob3dWcmlqKClcIiB2YWx1ZT1cIlZyaWpcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNwZWNpZmljYXRpb25UZXh0KSB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJDb3B5VG9DbGlwQm9hcmQoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGNvbnRlbnRfY29weVwiPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5DbGlwYm9hcmQpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiQ29weVRvQ2xpcEJvYXJkU1VGKClcIiAqbmdJZj1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSAnU1RBQlUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZFNVRikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJEb3dubG9hZEJlc3RlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuRG93bmxvYWQpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2hvd1RvZWJlaG9yZW5CdXR0b25zKClcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj5Ub2ViZWhvcmVuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJGYWJyaWthbnRlblNlcnZpY2UuU2VsZWN0ZWRUb2ViZWhvcmVuXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJUb2ViZWhvcmVuU2VydmljZS5PcGVuVG9lYmVob3Jlbih0aGlzLkNoYW5nZURldGVjdG9yUmVmKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW5cIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIhaXRlbS5iY2JQcm9kdWN0XCIgW3ZhbHVlXT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuVG9lYmVob3JlbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBpdGVtLmlkKSB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXRlbS5iY2JQcm9kdWN0XCIgW3ZhbHVlXT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG93bmxvYWRjYXRlZ29yeSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZENhdGVnb3JpZXNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dEb3dubG9hZENhdGVnb3J5KGRvd25sb2FkY2F0ZWdvcnkubmFtZSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb3dubG9hZGl0ZW0gb2YgZG93bmxvYWRjYXRlZ29yeS5pdGVtc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkY2F0ZWdvcnkubmFtZSA9PSAnVG9lYmVob3JlbidcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIFtuZ0NsYXNzXT1cImRvd25sb2FkaXRlbS5maWxlVHlwZSArICctYnV0dG9uJ1wiIChjbGljayk9XCJEb3dubG9hZChkb3dubG9hZGl0ZW0sIEZhYnJpa2FudGVuU2VydmljZS5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKT8uYmNiZWJvSWQpXCIgKm5nSWY9XCIoIWRvd25sb2FkaXRlbS5pc05hdGl2ZVJldml0IHx8IFdlYkdMU2VydmljZS5IYXNOYXRpdmVSRkEoKSkgJiYgKEZhYnJpa2FudGVuU2VydmljZS5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKSAhPSBudWxsKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGZpbGVfZG93bmxvYWRcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRvd25sb2FkaXRlbS5sb2FkaW5nXCI+Li4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIGRvd25sb2FkaXRlbS50cmFuc2xhdGlvblN1YkNhdGVnb3J5KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkY2F0ZWdvcnkubmFtZSAhPSAnVG9lYmVob3JlbidcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIFtuZ0NsYXNzXT1cImRvd25sb2FkaXRlbS5maWxlVHlwZSArICctYnV0dG9uJ1wiIChjbGljayk9XCJEb3dubG9hZChkb3dubG9hZGl0ZW0sIHVuZGVmaW5lZClcIiAqbmdJZj1cIiFkb3dubG9hZGl0ZW0uaXNOYXRpdmVSZXZpdCB8fCBXZWJHTFNlcnZpY2UuSGFzTmF0aXZlUkZBKClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPi4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZG93bmxvYWRpdGVtLmxvYWRpbmdcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBkb3dubG9hZGl0ZW0udHJhbnNsYXRpb25TdWJDYXRlZ29yeSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwZGZ0ZW1wbGF0ZSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LnBkZlRlbXBsYXRlc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkUERGVGVtcGxhdGUocGRmdGVtcGxhdGUpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU3BlY2lmaWNhdGlvbikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93VGV4dHVyZUJ1dHRvbnMoKVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5MaW5rKFRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC5wYXRyb29uVVJMKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuVGV4dHVyZSkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJPcGVuTGluayhUZXh0dXJlU2VydmljZS5GYWJyaWthbnRlblRleHR1cmVWaWV3TW9kZWwuYnVtcFVSTClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkJ1bXBtYXApIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5CQ0JMaW5rKClcIiAqbmdJZj1cIlNob3dCQ0JCdXR0b24oKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuQkNCKSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJTaG93SW5wdXRDb2RlKClcIj5cclxuICA8YXBwLWZhYi1pbnB1dC1jb2RlPjwvYXBwLWZhYi1pbnB1dC1jb2RlPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -23,7 +23,7 @@ class FabFormDialogComponent {
|
|
|
23
23
|
TranslateService;
|
|
24
24
|
ChangeDetectorRef;
|
|
25
25
|
Form;
|
|
26
|
-
FormGroup
|
|
26
|
+
FormGroup;
|
|
27
27
|
get TranslationCategory() {
|
|
28
28
|
return TranslationCategory;
|
|
29
29
|
}
|
|
@@ -38,6 +38,7 @@ class FabFormDialogComponent {
|
|
|
38
38
|
this.FabrikantenService = FabrikantenService;
|
|
39
39
|
this.TranslateService = TranslateService;
|
|
40
40
|
this.ChangeDetectorRef = ChangeDetectorRef;
|
|
41
|
+
this.FormGroup = this.formBuilder.group({});
|
|
41
42
|
this.Form = data.form;
|
|
42
43
|
var cats = this.Form.formCategories;
|
|
43
44
|
if (cats != null) {
|
|
@@ -89,14 +90,14 @@ class FabFormDialogComponent {
|
|
|
89
90
|
this.dialogRef.close();
|
|
90
91
|
}
|
|
91
92
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: FabFormDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3.FabrikantenApiClient }, { token: i4.FabrikantenService }, { token: i5.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: FabFormDialogComponent, selector: "app-fab-form-dialog", ngImport: i0, template: "<div style=\"width: 500px;\">\n <form [formGroup]=\"FormGroup\"
|
|
93
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: FabFormDialogComponent, selector: "app-fab-form-dialog", ngImport: i0, template: "<div style=\"width: 500px;\">\n <form [formGroup]=\"FormGroup\">\n <ng-container *ngFor=\"let cat of Form.formCategories\">\n <div class=\"form-cat-name\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Category, cat.id) }}\n </div>\n <ng-container *ngFor=\"let row of cat.rows\">\n <div class=\"form-cat-inputs displayflex\">\n <div class=\"form-cat-input\" *ngFor=\"let input of row.inputs\">\n <ng-container *ngIf=\"input.formInputType == 1 || input.formInputType == 6\">\n <mat-form-field appearance=\"fill\" class=\"full-width form-cat-input-input\">\n <mat-label>\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Input, input.id) }}\n </mat-label>\n <input matInput type=\"text\" formControlName=\"{{ input.name }}\">\n <mat-error></mat-error>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngIf=\"input.formInputType == 2\">\n <mat-form-field appearance=\"fill\" class=\"full-width form-cat-input-select\">\n <mat-label class=\"select-mat-label filter-name\">\n {{ input.name }}\n </mat-label>\n <mat-select formControlName=\"{{ input.name }}\">\n <ng-container *ngFor=\"let option of input.options\">\n <mat-option [value]=\"option.id\" class=\"select-mat-option\">\n <span class=\"name-span\">\n {{ option.name }}\n </span>\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngIf=\"input.formInputType == 5\">\n <mat-form-field class=\"full-width form-cat-input-textarea\">\n <mat-label>\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Input, input.id) }}\n </mat-label>\n <textarea matInput formControlName=\"{{ input.name }}\" style=\"height: 100px;\"></textarea>\n </mat-form-field>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <div class=\"form-button-row\">\n <button mat-raised-button (click)=\"Close()\" class=\"form-cat-close form-button-row-button\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Close) }}\n </button>\n <button mat-raised-button (click)=\"OnSubmit()\" class=\"form-cat-submit form-button-row-button\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Send) }}\n </button>\n </div>\n </form>\n</div>\n", styles: ["app-fab-form-dialog .mat-form-field-wrapper{padding-bottom:0}app-fab-form-dialog .mat-form-field-underline{bottom:0}app-fab-form-dialog .displayflex{display:flex}app-fab-form-dialog .form-cat-name{border-bottom:1px solid #000;font-size:20px;padding:5px}app-fab-form-dialog .form-cat-input{padding:5px;width:100%}app-fab-form-dialog .form-button-row{text-align:right}app-fab-form-dialog .form-button-row-button{margin:5px}app-fab-form-dialog .full-width{width:100%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.MatLegacyError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", 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]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i9.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
93
94
|
}
|
|
94
95
|
export { FabFormDialogComponent };
|
|
95
96
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: FabFormDialogComponent, decorators: [{
|
|
96
97
|
type: Component,
|
|
97
|
-
args: [{ selector: 'app-fab-form-dialog', encapsulation: ViewEncapsulation.None, template: "<div style=\"width: 500px;\">\n <form [formGroup]=\"FormGroup\"
|
|
98
|
+
args: [{ selector: 'app-fab-form-dialog', encapsulation: ViewEncapsulation.None, template: "<div style=\"width: 500px;\">\n <form [formGroup]=\"FormGroup\">\n <ng-container *ngFor=\"let cat of Form.formCategories\">\n <div class=\"form-cat-name\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Category, cat.id) }}\n </div>\n <ng-container *ngFor=\"let row of cat.rows\">\n <div class=\"form-cat-inputs displayflex\">\n <div class=\"form-cat-input\" *ngFor=\"let input of row.inputs\">\n <ng-container *ngIf=\"input.formInputType == 1 || input.formInputType == 6\">\n <mat-form-field appearance=\"fill\" class=\"full-width form-cat-input-input\">\n <mat-label>\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Input, input.id) }}\n </mat-label>\n <input matInput type=\"text\" formControlName=\"{{ input.name }}\">\n <mat-error></mat-error>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngIf=\"input.formInputType == 2\">\n <mat-form-field appearance=\"fill\" class=\"full-width form-cat-input-select\">\n <mat-label class=\"select-mat-label filter-name\">\n {{ input.name }}\n </mat-label>\n <mat-select formControlName=\"{{ input.name }}\">\n <ng-container *ngFor=\"let option of input.options\">\n <mat-option [value]=\"option.id\" class=\"select-mat-option\">\n <span class=\"name-span\">\n {{ option.name }}\n </span>\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngIf=\"input.formInputType == 5\">\n <mat-form-field class=\"full-width form-cat-input-textarea\">\n <mat-label>\n {{ TranslateService.GetActiveValue(TranslationCategory.Forms, TranslationSubCategory.Input, input.id) }}\n </mat-label>\n <textarea matInput formControlName=\"{{ input.name }}\" style=\"height: 100px;\"></textarea>\n </mat-form-field>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <div class=\"form-button-row\">\n <button mat-raised-button (click)=\"Close()\" class=\"form-cat-close form-button-row-button\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Close) }}\n </button>\n <button mat-raised-button (click)=\"OnSubmit()\" class=\"form-cat-submit form-button-row-button\">\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Send) }}\n </button>\n </div>\n </form>\n</div>\n", styles: ["app-fab-form-dialog .mat-form-field-wrapper{padding-bottom:0}app-fab-form-dialog .mat-form-field-underline{bottom:0}app-fab-form-dialog .displayflex{display:flex}app-fab-form-dialog .form-cat-name{border-bottom:1px solid #000;font-size:20px;padding:5px}app-fab-form-dialog .form-cat-input{padding:5px;width:100%}app-fab-form-dialog .form-button-row{text-align:right}app-fab-form-dialog .form-button-row-button{margin:5px}app-fab-form-dialog .full-width{width:100%}\n"] }]
|
|
98
99
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.MatLegacyDialogRef }, { type: undefined, decorators: [{
|
|
99
100
|
type: Inject,
|
|
100
101
|
args: [MAT_DIALOG_DATA]
|
|
101
102
|
}] }, { type: i3.FabrikantenApiClient }, { type: i4.FabrikantenService }, { type: i5.TranslateService }, { type: i0.ChangeDetectorRef }]; } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZm9ybS1kaWFsb2cvZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZm9ybS1kaWFsb2cvZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hJLE9BQU8sRUFBNEIsYUFBYSxFQUF3Qix5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BMLE9BQU8sRUFBNEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFJdEUsTUFNYSxzQkFBc0I7SUFjdkI7SUFDRDtJQUN5QjtJQUN4QjtJQUNBO0lBQ0Q7SUFDQztJQWxCSCxJQUFJLENBQTJCO0lBQy9CLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU5QyxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLHNCQUFzQjtRQUMvQixPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUNVLFdBQXdCLEVBQ3pCLFNBQStDLEVBQ3RCLElBQVMsRUFDakMsb0JBQTBDLEVBQzFDLGtCQUFzQyxFQUN2QyxnQkFB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TyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUVyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO3VHQXZGVSxzQkFBc0IsK0VBZ0J2QixlQUFlOzJGQWhCZCxzQkFBc0IsMkRDYm5DLDQ0RkEyREE7O1NEOUNhLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHFCQUFxQixpQkFHaEIsaUJBQWlCLENBQUMsSUFBSTs7MEJBa0JsQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2dSZWYgYXMgTWF0RGlhbG9nUmVmLCBNQVRfTEVHQUNZX0RJQUxPR19EQVRBIGFzIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgRmFicmlrYW50ZW5Gb3JtVmlld01vZGVsLCBGb3JtSW5wdXRUeXBlLCBGYWJyaWthbnRlbkFwaUNsaWVudCwgRmFicmlrYW50ZW5TZXRGb3JtUmVxdWVzdCwgVHJhbnNsYXRpb25DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmFicmlrYW50ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XHJcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZhYi1mb3JtLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mYWItZm9ybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mYWItZm9ybS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBGYWJGb3JtRGlhbG9nQ29tcG9uZW50IHtcblxuICBwdWJsaWMgRm9ybTogRmFicmlrYW50ZW5Gb3JtVmlld01vZGVsO1xuICBwdWJsaWMgRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7fSk7XHJcblxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uQ2F0ZWdvcnkoKSB7XG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uQ2F0ZWdvcnk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkoKSB7XG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RmFiRm9ybURpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBGYWJyaWthbnRlbkFwaUNsaWVudDogRmFicmlrYW50ZW5BcGlDbGllbnQsXG4gICAgcHJpdmF0ZSBGYWJyaWthbnRlblNlcnZpY2U6IEZhYnJpa2FudGVuU2VydmljZSxcbiAgICBwdWJsaWMgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLkZvcm0gPSBkYXRhLmZvcm07XG5cbiAgICB2YXIgY2F0cyA9IHRoaXMuRm9ybS5mb3JtQ2F0ZWdvcmllcztcblxuICAgIGlmIChjYXRzICE9IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2F0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcm93cyA9IGNhdHNbaV0ucm93cztcclxuXHJcbiAgICAgICAgaWYgKHJvd3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3dzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dHMgPSByb3dzW2pdLmlucHV0cztcclxuXHJcbiAgICAgICAgICAgIGlmIChpbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgaW5wdXRzLmxlbmd0aDsgcCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIFZhbGlkYXRvcnNBcnJheTogVmFsaWRhdG9yRm5bXSA9IG5ldyBBcnJheSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dHNbcF0uZm9ybUlucHV0VHlwZSA9PSBGb3JtSW5wdXRUeXBlLkVtYWlsKSB7XHJcbiAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dHNbcF0ucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgVmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0c1twXS5mb3JtSW5wdXRUeXBlID09IEZvcm1JbnB1dFR5cGUuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5Gb3JtR3JvdXAuYWRkQ29udHJvbChpbnB1dHNbcF0ubmFtZSArIFwiXCIsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpbnB1dHNbcF0uc2VsZWN0ZWRPcHRpb24/LmlkLCBWYWxpZGF0b3JzQXJyYXkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLkZvcm1Hcm91cC5hZGRDb250cm9sKGlucHV0c1twXS5uYW1lICsgXCJcIiwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGlucHV0c1twXS52YWx1ZSwgVmFsaWRhdG9yc0FycmF5KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuRm9ybUdyb3VwLmFkZENvbnRyb2woJ2NvbnRyb2xOYW1lJyxcclxuICAgICAgICAgICAgICAgIC8vICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woeyBkaXNhYmxlZDogZmFsc2UsIHZhbHVlOiBjb250cm9sVmFsdWUgfSwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIE9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuU2V0Rm9ybVJlcXVlc3QoKTtcclxuXHJcbiAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICByZXF1ZXN0LmZvcm1JZCA9IHRoaXMuRm9ybS5pZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2V0Rm9ybShyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLlJlbG9hZE1vZGVsKHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYsIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cblxuICBwdWJsaWMgQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XG59XG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6IDUwMHB4O1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJPblN1Ym1pdCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0IG9mIEZvcm0uZm9ybUNhdGVnb3JpZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhdC1uYW1lXCI+XG4gICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Gb3JtcywgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5DYXRlZ29yeSwgY2F0LmlkKSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgY2F0LnJvd3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2F0LWlucHV0cyBkaXNwbGF5ZmxleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhdC1pbnB1dFwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiByb3cuaW5wdXRzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXQuZm9ybUlucHV0VHlwZSA9PSAxIHx8IGlucHV0LmZvcm1JbnB1dFR5cGUgPT0gNlwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1jYXQtaW5wdXQtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkZvcm1zLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LklucHV0LCBpbnB1dC5pZCkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ7eyBpbnB1dC5uYW1lIH19XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXQuZm9ybUlucHV0VHlwZSA9PSAyXCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWNhdC1pbnB1dC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VsZWN0LW1hdC1sYWJlbCBmaWx0ZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgaW5wdXQubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInt7IGlucHV0Lm5hbWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpbnB1dC5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBjbGFzcz1cInNlbGVjdC1tYXQtb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lLXNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlucHV0LmZvcm1JbnB1dFR5cGUgPT0gNVwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tY2F0LWlucHV0LXRleHRhcmVhXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Gb3JtcywgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5JbnB1dCwgaW5wdXQuaWQpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInt7IGlucHV0Lm5hbWUgfX1cIiBzdHlsZT1cImhlaWdodDogMTAwcHg7XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tYnV0dG9uLXJvd1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ2xvc2UoKVwiIGNsYXNzPVwiZm9ybS1jYXQtY2xvc2UgZm9ybS1idXR0b24tcm93LWJ1dHRvblwiPlxuICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsb3NlKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImZvcm0tY2F0LXN1Ym1pdCBmb3JtLWJ1dHRvbi1yb3ctYnV0dG9uXCI+XG4gICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU2VuZCkgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZm9ybS1kaWFsb2cvZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZm9ybS1kaWFsb2cvZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hJLE9BQU8sRUFBNEIsYUFBYSxFQUF3Qix5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BMLE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFJakYsTUFNYSxzQkFBc0I7SUFjdkI7SUFDRDtJQUN5QjtJQUN4QjtJQUNBO0lBQ0Q7SUFDQztJQWxCSCxJQUFJLENBQTJCO0lBQy9CLFNBQVMsQ0FBWTtJQUU1QixJQUFXLG1CQUFtQjtRQUM1QixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLHNCQUFzQjtRQUMvQixPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUNVLFdBQXdCLEVBQ3pCLFNBQStDLEVBQ3RCLElBQVMsRUFDakMsb0JBQTBDLEVBQzFDLGtCQUFzQyxFQUN2QyxnQkFBa0MsRUFDakMsaUJBQW9DO1FBTnBDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FB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LElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtnQkFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBRXJDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7dUdBeEZVLHNCQUFzQiwrRUFnQnZCLGVBQWU7MkZBaEJkLHNCQUFzQiwyRENibkMseTNGQTJEQTs7U0Q5Q2Esc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UscUJBQXFCLGlCQUdoQixpQkFBaUIsQ0FBQyxJQUFJOzswQkFrQmxDLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBGYWJyaWthbnRlbkZvcm1WaWV3TW9kZWwsIEZvcm1JbnB1dFR5cGUsIEZhYnJpa2FudGVuQXBpQ2xpZW50LCBGYWJyaWthbnRlblNldEZvcm1SZXF1ZXN0LCBUcmFuc2xhdGlvbkNhdGVnb3J5LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vc3dhZ2dlci9Td2FnZ2VyQ2xpZW50JztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mYWItZm9ybS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRmFiRm9ybURpYWxvZ0NvbXBvbmVudCB7XG5cbiAgcHVibGljIEZvcm06IEZhYnJpa2FudGVuRm9ybVZpZXdNb2RlbDtcbiAgcHVibGljIEZvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG5cbiAgcHVibGljIGdldCBUcmFuc2xhdGlvbkNhdGVnb3J5KCkge1xuICAgIHJldHVybiBUcmFuc2xhdGlvbkNhdGVnb3J5O1xuICB9XG5cbiAgcHVibGljIGdldCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5KCkge1xuICAgIHJldHVybiBUcmFuc2xhdGlvblN1YkNhdGVnb3J5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEZhYkZvcm1EaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgRmFicmlrYW50ZW5BcGlDbGllbnQ6IEZhYnJpa2FudGVuQXBpQ2xpZW50LFxuICAgIHByaXZhdGUgRmFicmlrYW50ZW5TZXJ2aWNlOiBGYWJyaWthbnRlblNlcnZpY2UsXG4gICAgcHVibGljIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5Gb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHt9KVxuICAgIHRoaXMuRm9ybSA9IGRhdGEuZm9ybTtcblxuICAgIHZhciBjYXRzID0gdGhpcy5Gb3JtLmZvcm1DYXRlZ29yaWVzO1xuXG4gICAgaWYgKGNhdHMgIT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3dzID0gY2F0c1tpXS5yb3dzO1xyXG5cclxuICAgICAgICBpZiAocm93cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvd3MubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIGlucHV0cyA9IHJvd3Nbal0uaW5wdXRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBpbnB1dHMubGVuZ3RoOyBwKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgVmFsaWRhdG9yc0FycmF5OiBWYWxpZGF0b3JGbltdID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0c1twXS5mb3JtSW5wdXRUeXBlID09IEZvcm1JbnB1dFR5cGUuRW1haWwpIHtcclxuICAgICAgICAgICAgICAgICAgVmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0c1twXS5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzQXJyYXkucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRzW3BdLmZvcm1JbnB1dFR5cGUgPT0gRm9ybUlucHV0VHlwZS5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLkZvcm1Hcm91cC5hZGRDb250cm9sKGlucHV0c1twXS5uYW1lICsgXCJcIiwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGlucHV0c1twXS5zZWxlY3RlZE9wdGlvbj8uaWQsIFZhbGlkYXRvcnNBcnJheSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuRm9ybUdyb3VwLmFkZENvbnRyb2woaW5wdXRzW3BdLm5hbWUgKyBcIlwiLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woaW5wdXRzW3BdLnZhbHVlLCBWYWxpZGF0b3JzQXJyYXkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5Gb3JtR3JvdXAuYWRkQ29udHJvbCgnY29udHJvbE5hbWUnLFxyXG4gICAgICAgICAgICAgICAgLy8gIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh7IGRpc2FibGVkOiBmYWxzZSwgdmFsdWU6IGNvbnRyb2xWYWx1ZSB9LCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgT25TdWJtaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5Gb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5TZXRGb3JtUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICAgIHJlcXVlc3QuZm9ybUlkID0gdGhpcy5Gb3JtLmlkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZXRGb3JtKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuUmVsb2FkTW9kZWwodGhpcy5DaGFuZ2VEZXRlY3RvclJlZiwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgICB0aGlzLkNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxuXG4gIHB1YmxpYyBDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cbn1cbiIsIjxkaXYgc3R5bGU9XCJ3aWR0aDogNTAwcHg7XCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiRm9ybUdyb3VwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0IG9mIEZvcm0uZm9ybUNhdGVnb3JpZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhdC1uYW1lXCI+XG4gICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Gb3JtcywgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5DYXRlZ29yeSwgY2F0LmlkKSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgY2F0LnJvd3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2F0LWlucHV0cyBkaXNwbGF5ZmxleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhdC1pbnB1dFwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiByb3cuaW5wdXRzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXQuZm9ybUlucHV0VHlwZSA9PSAxIHx8IGlucHV0LmZvcm1JbnB1dFR5cGUgPT0gNlwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1jYXQtaW5wdXQtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkZvcm1zLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LklucHV0LCBpbnB1dC5pZCkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ7eyBpbnB1dC5uYW1lIH19XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXQuZm9ybUlucHV0VHlwZSA9PSAyXCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWNhdC1pbnB1dC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VsZWN0LW1hdC1sYWJlbCBmaWx0ZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgaW5wdXQubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInt7IGlucHV0Lm5hbWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpbnB1dC5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBjbGFzcz1cInNlbGVjdC1tYXQtb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lLXNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlucHV0LmZvcm1JbnB1dFR5cGUgPT0gNVwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tY2F0LWlucHV0LXRleHRhcmVhXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Gb3JtcywgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5JbnB1dCwgaW5wdXQuaWQpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInt7IGlucHV0Lm5hbWUgfX1cIiBzdHlsZT1cImhlaWdodDogMTAwcHg7XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tYnV0dG9uLXJvd1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ2xvc2UoKVwiIGNsYXNzPVwiZm9ybS1jYXQtY2xvc2UgZm9ybS1idXR0b24tcm93LWJ1dHRvblwiPlxuICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsb3NlKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJPblN1Ym1pdCgpXCIgY2xhc3M9XCJmb3JtLWNhdC1zdWJtaXQgZm9ybS1idXR0b24tcm93LWJ1dHRvblwiPlxuICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNlbmQpIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
|