@eo-sdk/client 11.14.17 → 11.14.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/eo-framework/actions/actions/open-context-action/open-context-action.d.ts.map +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +6 -4
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +4 -0
- package/assets/_default/i18n/en.json +4 -0
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-framework/actions/actions/open-context-action/open-context-action.mjs +5 -2
- package/esm2022/app/eo-framework/form-elements/reference/reference.component.mjs +2 -2
- package/esm2022/app/eo-framework/object-details/object-history/object-history.component.mjs +3 -3
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +28 -17
- package/fesm2022/eo-sdk-client.mjs +30 -17
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -8,12 +8,13 @@ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "@eo-sdk/core";
|
|
10
10
|
import * as i2 from "../../../eo-framework-core/api/grid.service";
|
|
11
|
-
import * as i3 from "@angular/
|
|
12
|
-
import * as i4 from "
|
|
13
|
-
import * as i5 from "
|
|
14
|
-
import * as i6 from "
|
|
15
|
-
import * as i7 from "
|
|
16
|
-
import * as i8 from "../../../eo-framework-core/pipes/
|
|
11
|
+
import * as i3 from "@angular/router";
|
|
12
|
+
import * as i4 from "@angular/common";
|
|
13
|
+
import * as i5 from "./indexdata-summary-entry/indexdata-summary-entry.component";
|
|
14
|
+
import * as i6 from "../../accordion/simple-accordion/simple-accordion.component";
|
|
15
|
+
import * as i7 from "@ngx-translate/core";
|
|
16
|
+
import * as i8 from "../../../eo-framework-core/pipes/filesize.pipe";
|
|
17
|
+
import * as i9 from "../../../eo-framework-core/pipes/locale-date.pipe";
|
|
17
18
|
let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
18
19
|
static { IndexdataSummaryComponent_1 = this; }
|
|
19
20
|
set indexdata(id) {
|
|
@@ -56,6 +57,9 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
56
57
|
}
|
|
57
58
|
this.emptyState = UtilitiesService.isEmpty(this.coreValues) && UtilitiesService.isEmpty(this.dataValues) && UtilitiesService.isEmpty(Object.keys(this.baseparams || {}));
|
|
58
59
|
}
|
|
60
|
+
isVersionsState() {
|
|
61
|
+
return this.router.url.includes('versions');
|
|
62
|
+
}
|
|
59
63
|
static collect(data, elements = [], collection, force = false) {
|
|
60
64
|
elements.forEach(el => {
|
|
61
65
|
if (el.type !== 'TABLE') {
|
|
@@ -76,13 +80,14 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
76
80
|
});
|
|
77
81
|
return collection;
|
|
78
82
|
}
|
|
79
|
-
constructor(translate, gridApi, dmsService, userService, cd, storageService) {
|
|
83
|
+
constructor(translate, gridApi, dmsService, userService, cd, storageService, router) {
|
|
80
84
|
this.translate = translate;
|
|
81
85
|
this.gridApi = gridApi;
|
|
82
86
|
this.dmsService = dmsService;
|
|
83
87
|
this.userService = userService;
|
|
84
88
|
this.cd = cd;
|
|
85
89
|
this.storageService = storageService;
|
|
90
|
+
this.router = router;
|
|
86
91
|
this.moreInfoAcc = false;
|
|
87
92
|
this.dataInfoAcc = false;
|
|
88
93
|
this.infoFolderAcc = false;
|
|
@@ -186,7 +191,15 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
186
191
|
return null;
|
|
187
192
|
};
|
|
188
193
|
return Object.keys(data)
|
|
189
|
-
.filter((key) =>
|
|
194
|
+
.filter((key) => {
|
|
195
|
+
const typeLabelObj = findTypeAndLabelByName(formElements, key);
|
|
196
|
+
if (typeLabelObj && typeLabelObj.type === 'TABLE') {
|
|
197
|
+
return Array.isArray(data[key]);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
})
|
|
190
203
|
.map((key) => {
|
|
191
204
|
const typeLabelObj = findTypeAndLabelByName(formElements, key);
|
|
192
205
|
if (typeLabelObj) {
|
|
@@ -235,6 +248,8 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
235
248
|
};
|
|
236
249
|
}).filter((v) => v._value);
|
|
237
250
|
};
|
|
251
|
+
this.isUserAllowedToShowStorageSection = this.userService.getCurrentUser().hasPrivilege('MANAGE_STORAGES');
|
|
252
|
+
this.getCachedAccordionState();
|
|
238
253
|
}
|
|
239
254
|
onValueClick(event, item = {}) {
|
|
240
255
|
if (item.reference || item.version) {
|
|
@@ -280,12 +295,8 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
280
295
|
this.infoFolderAcc = JSON.parse(this.storageService.getItem(this.cacheKey + 'contextfolder'));
|
|
281
296
|
this.dataInfoAcc = JSON.parse(this.storageService.getItem(this.cacheKey + 'storage-info'));
|
|
282
297
|
}
|
|
283
|
-
|
|
284
|
-
this.isUserAllowedToShowStorageSection = this.userService.getCurrentUser().hasPrivilege('MANAGE_STORAGES');
|
|
285
|
-
this.getCachedAccordionState();
|
|
286
|
-
}
|
|
287
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: IndexdataSummaryComponent, deps: [{ token: i1.TranslateService }, { token: i2.GridService }, { token: i1.DmsService }, { token: i1.UserService }, { token: i0.ChangeDetectorRef }, { token: i1.LocalStorageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
288
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: IndexdataSummaryComponent, selector: "eo-indexdata-summary", inputs: { baseparams: "baseparams", enableVersions: "enableVersions", isChangesTab: "isChangesTab", indexdata: "indexdata", dmsObject: "dmsObject", diff: "diff" }, ngImport: i0, template: "<div class=\"empty-container\" *ngIf=\"emptyState\">{{'eo.indexdata.summary.no.change' | translate}}</div>\n<div class=\"indexdata-summary\">\n\n <div class=\"core-section\" *ngIf=\"coreValues?.length\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of coreValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n\n @if (item?.contextFolder && !diffActive) {\n <eo-simple-accordion [header]=\"item.contextFolder?.type?.label + ':'\"\n [item]=\"item\" [selected]=\"infoFolderAcc\" (selectChange)=\"onContextfolderToggle($event)\">\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues2\"\n [label]=\"item.label\" [value]=\"item.data\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </eo-simple-accordion>\n }\n </div>\n <div class=\"data-section\" *ngIf=\"dataValues && dataValues.length\">\n <eo-simple-accordion #dataAccordion\n [header]=\"('eo.indexdata.summary.more' | translate)\"\n [selected]=\"moreInfoAcc\"\n (selectChange)=\"onMoreInfoToggle($event)\">\n <div class=\"data\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n\n <div class=\"baseparams-section\" *ngIf=\"baseparams\">\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.modifiedOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modified' | translate\"\n [value]=\"baseparams.modifiedOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modifier' | translate\"\n [value]=\"baseparams.modifiedBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.createdOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.created' | translate\"\n [value]=\"baseparams.createdOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.creator' | translate\"\n [value]=\"baseparams.createdBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.object.summary.version' | translate\"\n [value]=\"getVersionLink(baseparams.version)\"\n (onValueClicked)=\"onValueClick($event, {version: baseparams.version})\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\" [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.type' | translate\" \n [value]=\"this.item.type.label + ' (' + this.item.type.name + ')'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filename' | translate\"\n [value]=\"baseparams.contentFileName\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentFileSize\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filesize' | translate\"\n [value]=\"diffActive ? {val1: baseparams.contentFileSize['val1'] | fileSize, val2: baseparams.contentFileSize['val2'] | fileSize} : (baseparams.contentFileSize | fileSize)\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetypegroup' | translate\"\n [value]=\"baseparams.mimeGroup\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetype' | translate\"\n [value]=\"baseparams.mimeType\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.id' | translate\"\n [value]=\"baseparams.id\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentId !== baseparams.id && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.contentId' | translate\"\n [value]=\"baseparams.contentId\">\n </eo-indexdata-summary-entry>\n </div>\n\n @if(storageInfos?.length && isUserAllowedToShowStorageSection && !isChangesTab) {\n <div class=\"storageinfo\">\n <eo-simple-accordion [header]=\"('eo.state.settings.storageinfo' | translate)\"\n [selected]=\"dataInfoAcc\"\n (selectChange)=\"onStorageInfoToggle($event)\">\n\n <div class=\"storageinfo-entry baseparams-section\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.global.baseparam.digest' | translate\"\n [value]=\"baseparams.digest\">\n </eo-indexdata-summary-entry>\n </div>\n\n <div class=\"storageinfo-entry baseparams-section\" *ngFor=\"let stInfo of storageInfos; trackBy: trackByIndex\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.retention' | translate\"\n [value]=\"stInfo.retention | localeDate : 'eoShortDate'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.permanence' | translate\"\n [value]=\"stInfo.permanence\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.setname' | translate\"\n [value]=\"stInfo.setname\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.storagename' | translate\"\n [value]=\"stInfo.storagename\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.location' | translate\"\n [value]=\"stInfo.location\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n }\n\n</div>\n", styles: [":host{display:block}:host .core-section,:host .data-section,:host .baseparams-section{list-style:none;margin:0;line-height:1.5em}:host .core-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section .data{margin-bottom:var(--app-pane-padding);margin-top:calc(var(--app-pane-padding) / 2)}:host .storageinfo{margin-top:var(--app-pane-padding)}:host .storageinfo .storageinfo-entry{margin-top:var(--app-pane-padding)}:host .empty-container{position:absolute;inset:2em;overflow:hidden;display:flex;justify-content:center;align-items:center}:host ::ng-deep .chip{width:max-content}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IndexdataSummaryEntryComponent, selector: "eo-indexdata-summary-entry", inputs: ["label", "item", "value", "className"], outputs: ["onValueClicked"] }, { kind: "component", type: i5.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "styles", "headerClass", "iconObjectType", "itemAmount", "resultListLink", "selected", "item"], outputs: ["selectChange"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.FileSizePipe, name: "fileSize" }, { kind: "pipe", type: i8.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: IndexdataSummaryComponent, deps: [{ token: i1.TranslateService }, { token: i2.GridService }, { token: i1.DmsService }, { token: i1.UserService }, { token: i0.ChangeDetectorRef }, { token: i1.LocalStorageService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
299
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: IndexdataSummaryComponent, selector: "eo-indexdata-summary", inputs: { baseparams: "baseparams", enableVersions: "enableVersions", isChangesTab: "isChangesTab", indexdata: "indexdata", dmsObject: "dmsObject", diff: "diff" }, ngImport: i0, template: "<div class=\"empty-container\" *ngIf=\"emptyState\">{{'eo.indexdata.summary.no.change' | translate}}</div>\n<div class=\"indexdata-summary\">\n\n <div class=\"core-section\" *ngIf=\"coreValues?.length\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of coreValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n\n @if (item?.contextFolder && !isVersionsState()) {\n <eo-simple-accordion [header]=\"item.contextFolder?.type?.label + ':'\"\n [item]=\"item\" [selected]=\"infoFolderAcc\" (selectChange)=\"onContextfolderToggle($event)\">\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues2\"\n [label]=\"item.label\" [value]=\"item.data\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </eo-simple-accordion>\n }\n </div>\n <div class=\"data-section\" *ngIf=\"dataValues && dataValues.length\">\n <eo-simple-accordion #dataAccordion\n [header]=\"('eo.indexdata.summary.more' | translate)\"\n [selected]=\"moreInfoAcc\"\n (selectChange)=\"onMoreInfoToggle($event)\">\n <div class=\"data\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n\n <div class=\"baseparams-section\" *ngIf=\"baseparams\">\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.modifiedOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modified' | translate\"\n [value]=\"baseparams.modifiedOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modifier' | translate\"\n [value]=\"baseparams.modifiedBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.createdOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.created' | translate\"\n [value]=\"baseparams.createdOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.creator' | translate\"\n [value]=\"baseparams.createdBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.object.summary.version' | translate\"\n [value]=\"getVersionLink(baseparams.version)\"\n (onValueClicked)=\"onValueClick($event, {version: baseparams.version})\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\" [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.type' | translate\"\n [value]=\"this.item.type.label + ' (' + this.item.type.name + ')'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filename' | translate\"\n [value]=\"baseparams.contentFileName\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentFileSize\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filesize' | translate\"\n [value]=\"diffActive ? {val1: baseparams.contentFileSize['val1'] | fileSize, val2: baseparams.contentFileSize['val2'] | fileSize} : (baseparams.contentFileSize | fileSize)\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetypegroup' | translate\"\n [value]=\"baseparams.mimeGroup\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetype' | translate\"\n [value]=\"baseparams.mimeType\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.id' | translate\"\n [value]=\"baseparams.id\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentId !== baseparams.id && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.contentId' | translate\"\n [value]=\"baseparams.contentId\">\n </eo-indexdata-summary-entry>\n </div>\n\n @if(storageInfos?.length && isUserAllowedToShowStorageSection && !isChangesTab) {\n <div class=\"storageinfo\">\n <eo-simple-accordion [header]=\"('eo.state.settings.storageinfo' | translate)\"\n [selected]=\"dataInfoAcc\"\n (selectChange)=\"onStorageInfoToggle($event)\">\n\n <div class=\"storageinfo-entry baseparams-section\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.global.baseparam.digest' | translate\"\n [value]=\"baseparams.digest\">\n </eo-indexdata-summary-entry>\n </div>\n\n <div class=\"storageinfo-entry baseparams-section\" *ngFor=\"let stInfo of storageInfos; trackBy: trackByIndex\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.retention' | translate\"\n [value]=\"stInfo.retention | localeDate : 'eoShortDate'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.permanence' | translate\"\n [value]=\"stInfo.permanence\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.setname' | translate\"\n [value]=\"stInfo.setname\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.storagename' | translate\"\n [value]=\"stInfo.storagename\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.location' | translate\"\n [value]=\"stInfo.location\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n }\n\n</div>\n", styles: [":host{display:block}:host .core-section,:host .data-section,:host .baseparams-section{list-style:none;margin:0;line-height:1.5em}:host .core-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section .data{margin-bottom:var(--app-pane-padding);margin-top:calc(var(--app-pane-padding) / 2)}:host .storageinfo{margin-top:var(--app-pane-padding)}:host .storageinfo .storageinfo-entry{margin-top:var(--app-pane-padding)}:host .empty-container{position:absolute;inset:2em;overflow:hidden;display:flex;justify-content:center;align-items:center}:host ::ng-deep .chip{width:max-content}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.IndexdataSummaryEntryComponent, selector: "eo-indexdata-summary-entry", inputs: ["label", "item", "value", "className"], outputs: ["onValueClicked"] }, { kind: "component", type: i6.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "styles", "headerClass", "iconObjectType", "itemAmount", "resultListLink", "selected", "item"], outputs: ["selectChange"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.FileSizePipe, name: "fileSize" }, { kind: "pipe", type: i9.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
289
300
|
};
|
|
290
301
|
IndexdataSummaryComponent = IndexdataSummaryComponent_1 = __decorate([
|
|
291
302
|
UntilDestroy()
|
|
@@ -293,8 +304,8 @@ IndexdataSummaryComponent = IndexdataSummaryComponent_1 = __decorate([
|
|
|
293
304
|
export { IndexdataSummaryComponent };
|
|
294
305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: IndexdataSummaryComponent, decorators: [{
|
|
295
306
|
type: Component,
|
|
296
|
-
args: [{ selector: 'eo-indexdata-summary', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"empty-container\" *ngIf=\"emptyState\">{{'eo.indexdata.summary.no.change' | translate}}</div>\n<div class=\"indexdata-summary\">\n\n <div class=\"core-section\" *ngIf=\"coreValues?.length\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of coreValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n\n @if (item?.contextFolder && !
|
|
297
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.GridService }, { type: i1.DmsService }, { type: i1.UserService }, { type: i0.ChangeDetectorRef }, { type: i1.LocalStorageService }], propDecorators: { baseparams: [{
|
|
307
|
+
args: [{ selector: 'eo-indexdata-summary', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"empty-container\" *ngIf=\"emptyState\">{{'eo.indexdata.summary.no.change' | translate}}</div>\n<div class=\"indexdata-summary\">\n\n <div class=\"core-section\" *ngIf=\"coreValues?.length\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of coreValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n\n @if (item?.contextFolder && !isVersionsState()) {\n <eo-simple-accordion [header]=\"item.contextFolder?.type?.label + ':'\"\n [item]=\"item\" [selected]=\"infoFolderAcc\" (selectChange)=\"onContextfolderToggle($event)\">\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues2\"\n [label]=\"item.label\" [value]=\"item.data\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </eo-simple-accordion>\n }\n </div>\n <div class=\"data-section\" *ngIf=\"dataValues && dataValues.length\">\n <eo-simple-accordion #dataAccordion\n [header]=\"('eo.indexdata.summary.more' | translate)\"\n [selected]=\"moreInfoAcc\"\n (selectChange)=\"onMoreInfoToggle($event)\">\n <div class=\"data\">\n\n <eo-indexdata-summary-entry *ngFor=\"let item of dataValues\"\n [label]=\"item.label\"\n [value]=\"item._value\"\n (onValueClicked)=\"onValueClick($event, item)\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n\n <div class=\"baseparams-section\" *ngIf=\"baseparams\">\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.modifiedOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modified' | translate\"\n [value]=\"baseparams.modifiedOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.modifier' | translate\"\n [value]=\"baseparams.modifiedBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.createdOn && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.created' | translate\"\n [value]=\"baseparams.createdOn | localeDate\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.creator' | translate\"\n [value]=\"baseparams.createdBy\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.object.summary.version' | translate\"\n [value]=\"getVersionLink(baseparams.version)\"\n (onValueClicked)=\"onValueClick($event, {version: baseparams.version})\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\" [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.type' | translate\"\n [value]=\"this.item.type.label + ' (' + this.item.type.name + ')'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filename' | translate\"\n [value]=\"baseparams.contentFileName\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentFileSize\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.filesize' | translate\"\n [value]=\"diffActive ? {val1: baseparams.contentFileSize['val1'] | fileSize, val2: baseparams.contentFileSize['val2'] | fileSize} : (baseparams.contentFileSize | fileSize)\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetypegroup' | translate\"\n [value]=\"baseparams.mimeGroup\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.mimetype' | translate\"\n [value]=\"baseparams.mimeType\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"!diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.id' | translate\"\n [value]=\"baseparams.id\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry *ngIf=\"baseparams.contentId !== baseparams.id && !diffActive\"\n [className]=\"'baseparams-section'\"\n [label]=\"'eo.global.baseparam.contentId' | translate\"\n [value]=\"baseparams.contentId\">\n </eo-indexdata-summary-entry>\n </div>\n\n @if(storageInfos?.length && isUserAllowedToShowStorageSection && !isChangesTab) {\n <div class=\"storageinfo\">\n <eo-simple-accordion [header]=\"('eo.state.settings.storageinfo' | translate)\"\n [selected]=\"dataInfoAcc\"\n (selectChange)=\"onStorageInfoToggle($event)\">\n\n <div class=\"storageinfo-entry baseparams-section\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.global.baseparam.digest' | translate\"\n [value]=\"baseparams.digest\">\n </eo-indexdata-summary-entry>\n </div>\n\n <div class=\"storageinfo-entry baseparams-section\" *ngFor=\"let stInfo of storageInfos; trackBy: trackByIndex\">\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.retention' | translate\"\n [value]=\"stInfo.retention | localeDate : 'eoShortDate'\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.permanence' | translate\"\n [value]=\"stInfo.permanence\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.setname' | translate\"\n [value]=\"stInfo.setname\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.storagename' | translate\"\n [value]=\"stInfo.storagename\">\n </eo-indexdata-summary-entry>\n\n <eo-indexdata-summary-entry [className]=\"'storageinfo-subentry'\"\n [label]=\"'eo.object.storageinfo.location' | translate\"\n [value]=\"stInfo.location\">\n </eo-indexdata-summary-entry>\n </div>\n </eo-simple-accordion>\n </div>\n }\n\n</div>\n", styles: [":host{display:block}:host .core-section,:host .data-section,:host .baseparams-section{list-style:none;margin:0;line-height:1.5em}:host .core-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section{margin-bottom:calc(var(--app-pane-padding) / 2)}:host .data-section .data{margin-bottom:var(--app-pane-padding);margin-top:calc(var(--app-pane-padding) / 2)}:host .storageinfo{margin-top:var(--app-pane-padding)}:host .storageinfo .storageinfo-entry{margin-top:var(--app-pane-padding)}:host .empty-container{position:absolute;inset:2em;overflow:hidden;display:flex;justify-content:center;align-items:center}:host ::ng-deep .chip{width:max-content}\n"] }]
|
|
308
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.GridService }, { type: i1.DmsService }, { type: i1.UserService }, { type: i0.ChangeDetectorRef }, { type: i1.LocalStorageService }, { type: i3.Router }], propDecorators: { baseparams: [{
|
|
298
309
|
type: Input
|
|
299
310
|
}], enableVersions: [{
|
|
300
311
|
type: Input
|
|
@@ -307,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
307
318
|
}], diff: [{
|
|
308
319
|
type: Input
|
|
309
320
|
}] } });
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUF3RixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFMUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFVNUQsSUFBTSx5QkFBeUIsR0FBL0IsTUFBTSx5QkFBeUI7O0lBc0JwQyxJQUNJLFNBQVMsQ0FBQyxFQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENB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VyxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQThKRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzs4R0EvVFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsZ09DaEJ0Qyxva1FBeUpBOztBRHpJYSx5QkFBeUI7SUFQckMsWUFBWSxFQUFFO0dBT0YseUJBQXlCLENBZ1VyQzs7MkZBaFVZLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTTtvT0FvQnRDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdGLFNBQVM7c0JBRFosS0FBSztnQkFRRixTQUFTO3NCQURaLEtBQUs7Z0JBV08sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbGl0aWVzU2VydmljZX0gZnJvbSAnLi8uLi8uLi91dGlsL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCYXNlUGFyYW1zLCBEbXNPYmplY3QsIERtc1NlcnZpY2UsIExvY2FsU3RvcmFnZVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0lTdW1tYXJ5RW50cnlEaWZmVmFsdWV9IGZyb20gJy4vaW5kZXhkYXRhLXN1bW1hcnktZW50cnkuaW50ZXJmYWNlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RGF0YVZhbHVlRGlmZmVyZW5jZSwgSW5kZXhEYXRhQXJyYXlEZXRhaWxzfSBmcm9tICcuL2luZGV4ZGF0YS1zdW1tYXJ5LmludGVyZmFjZSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8taW5kZXhkYXRhLXN1bW1hcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbmRleGRhdGEtc3VtbWFyeS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBJbmRleGRhdGFTdW1tYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBpc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgX2luZGV4RGF0YTogSW5kZXhEYXRhO1xuXG4gIGNvcmVWYWx1ZXM6IGFueVtdO1xuICBkYXRhVmFsdWVzOiBhbnlbXTtcbiAgZGF0YVZhbHVlczI6IGFueVtdO1xuICBzdG9yYWdlSW5mb3M6IGFueVtdO1xuICBpdGVtOiBEbXNPYmplY3Q7XG4gIG1vcmVJbmZvQWNjID0gZmFsc2U7XG4gIGRhdGFJbmZvQWNjID0gZmFsc2U7XG4gIGluZm9Gb2xkZXJBY2MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjYWNoZUtleSA9ICdhY2NvcmRpb24uc3RhdGUtLSc7XG4gIGRpZmZBY3RpdmUgPSBmYWxzZTtcbiAgZW1wdHlTdGF0ZSA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgYmFzZXBhcmFtczogQmFzZVBhcmFtcztcbiAgQElucHV0KCkgZW5hYmxlVmVyc2lvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBpc0NoYW5nZXNUYWIgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaW5kZXhkYXRhKGlkOiBJbmRleERhdGEpIHtcbiAgICB0aGlzLl9pbmRleERhdGEgPSBpZDtcbiAgICB0aGlzLmNvcmVWYWx1ZXMgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaWQsIDApLmZpbHRlcih2YWx1ZSA9PiAhdmFsdWUubmFtZS5zdGFydHNXaXRoKCd5dXYnKSk7XG4gICAgdGhpcy5kYXRhVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGlkLCAxKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkbXNPYmplY3QoaXRlbTogRG1zT2JqZWN0KSB7XG4gICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICB0aGlzLmdldEZvbGRlckluZm9zKGl0ZW0pO1xuICAgIHRoaXMuc3RvcmFnZUluZm9zID0gbnVsbDtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNvbnRlbnQgJiYgdGhpcy5pc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb24pIHtcbiAgICAgIHRoaXMuZ2V0U3RvcmFnZUluZm9zKCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkaWZmKHtpbmRleGRhdGEsIGluZGV4ZGF0YTIsIGJhc2VwYXJhbXMsIGJhc2VwYXJhbXMyfSkge1xuICAgIHRoaXMuZGlmZkFjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBkaWZmVmFsdWUgPSAodmFsMSwgdmFsMik6IElTdW1tYXJ5RW50cnlEaWZmVmFsdWUgPT4gIShVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsMSkgJiYgVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHZhbDIpKSAmJiB2YWwxICE9PSB2YWwyID8ge3ZhbDEsIHZhbDJ9IDogbnVsbDtcblxuICAgIGlmIChiYXNlcGFyYW1zICYmIGJhc2VwYXJhbXMyKSB7XG4gICAgICB0aGlzLmJhc2VwYXJhbXMgPSB7fSBhcyBCYXNlUGFyYW1zO1xuICAgICAgWydjb250ZW50RmlsZU5hbWUnLCAnY29udGVudEZpbGVTaXplJywgJ21pbWVHcm91cCddXG4gICAgICAgIC5mb3JFYWNoKGsgPT4gZGlmZlZhbHVlKGJhc2VwYXJhbXNba10sIGJhc2VwYXJhbXMyW2tdKSAmJiAodGhpcy5iYXNlcGFyYW1zW2tdID0gZGlmZlZhbHVlKGJhc2VwYXJhbXNba10sIGJhc2VwYXJhbXMyW2tdKSkpO1xuICAgIH1cblxuICAgIGlmIChpbmRleGRhdGEgJiYgaW5kZXhkYXRhMikge1xuICAgICAgY29uc3QgY29yZVZhbHVlczIgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhMiwgMCwgdHJ1ZSkucmVkdWNlKChhY2MsIGN1cikgPT4gKGFjY1tjdXIucW5hbWVdID0gY3VyLCBhY2MpLCB7fSk7XG4gICAgICBjb25zdCBjb3JlVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGluZGV4ZGF0YSwgMCwgdHJ1ZSlcbiAgICAgICAgLm1hcCgoe2xhYmVsLCBfdmFsdWUsIHFuYW1lLCByZWZlcmVuY2V9KSA9PiAoe2xhYmVsLCByZWZlcmVuY2UsIF92YWx1ZTogZGlmZlZhbHVlKF92YWx1ZSwgY29yZVZhbHVlczJbcW5hbWVdLl92YWx1ZSl9KSlcbiAgICAgICAgLmZpbHRlcih2ID0+IHYuX3ZhbHVlKTtcblxuICAgICAgY29uc3QgZGF0YVZhbHVlczIgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhMiwgMSwgdHJ1ZSkucmVkdWNlKChhY2MsIGN1cikgPT4gKGFjY1tjdXIucW5hbWVdID0gY3VyLCBhY2MpLCB7fSk7XG4gICAgICBsZXQgZGF0YVZhbHVlczogRGF0YVZhbHVlRGlmZmVyZW5jZVtdID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGluZGV4ZGF0YSwgMSwgdHJ1ZSlcbiAgICAgICAgLm1hcCgoe2xhYmVsLCBfdmFsdWUsIHFuYW1lLCByZWZlcmVuY2V9KSA9PiAoe2xhYmVsLCByZWZlcmVuY2UsIF92YWx1ZTogZGlmZlZhbHVlKF92YWx1ZSwgZGF0YVZhbHVlczJbcW5hbWVdLl92YWx1ZSl9KSlcbiAgICAgICAgLmZpbHRlcih2ID0+IHYuX3ZhbHVlKTtcblxuICAgICAgY29uc3QgaW5kZXhEYXRhQXJyYXlEZXRhaWxzOiBJbmRleERhdGFBcnJheURldGFpbHNbXSA9IHRoaXMuZ2V0SW5kZXhEYXRhQXJyYXlEZXRhaWxzKGluZGV4ZGF0YSk7XG4gICAgICBjb25zdCBpbmRleERhdGEyQXJyYXlEZXRhaWxzOiBJbmRleERhdGFBcnJheURldGFpbHNbXSA9IHRoaXMuZ2V0SW5kZXhEYXRhQXJyYXlEZXRhaWxzKGluZGV4ZGF0YTIpO1xuICAgICAgZGF0YVZhbHVlcyA9IFsuLi5kYXRhVmFsdWVzLCAuLi50aGlzLmV4dHJhY3REYXRhVmFsdWVzV2l0aERpZmZlcmVuY2VzKGluZGV4RGF0YUFycmF5RGV0YWlscywgaW5kZXhEYXRhMkFycmF5RGV0YWlscyldO1xuXG4gICAgICB0aGlzLmNvcmVWYWx1ZXMgPSBjb3JlVmFsdWVzO1xuICAgICAgdGhpcy5kYXRhVmFsdWVzID0gZGF0YVZhbHVlcztcbiAgICAgIHRoaXMubW9yZUluZm9BY2MgPSAhIWRhdGFWYWx1ZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuZW1wdHlTdGF0ZSA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh0aGlzLmNvcmVWYWx1ZXMpICYmIFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh0aGlzLmRhdGFWYWx1ZXMpICYmIFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eShPYmplY3Qua2V5cyh0aGlzLmJhc2VwYXJhbXMgfHwge30pKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0KGRhdGE6IHt9LCBlbGVtZW50czogYW55W10gPSBbXSwgY29sbGVjdGlvbjogYW55W10sIGZvcmNlID0gZmFsc2UpIHtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGlmIChlbC50eXBlICE9PSAnVEFCTEUnKSB7XG4gICAgICAgIGlmIChlbC5lbGVtZW50cykge1xuICAgICAgICAgIGNvbGxlY3Rpb24uY29uY2F0KEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQuY29sbGVjdChkYXRhLCBlbC5lbGVtZW50cywgY29sbGVjdGlvbiwgZm9yY2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQga2V5ID0gZWwubmFtZTtcbiAgICAgICAgICBpZiAoZm9yY2UgfHwgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pID8gZGF0YVtrZXldLmxlbmd0aCA6IHRydWUpKSkge1xuICAgICAgICAgICAgLy8gb25seSBhZGQgYXJyYXlzIHdoZW4gdGhleSBjb250YWluIGFueSB2YWx1ZXNcbiAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChPYmplY3QuYXNzaWduKHt9LCBlbCwge1xuICAgICAgICAgICAgICB2YWx1ZTogZGF0YVtrZXldLFxuICAgICAgICAgICAgICBtZXRhOiBkYXRhW2tleSArICdfbWV0YSddXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBncmlkQXBpOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGRtc1NlcnZpY2U6IERtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSkge1xuXG4gIH1cblxuICBvblZhbHVlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55ID0ge30pIHtcbiAgICBpZiAoaXRlbS5yZWZlcmVuY2UgfHwgaXRlbS52ZXJzaW9uKSB7XG4gICAgICB0aGlzLmdyaWRBcGkub3BlblJvdXRlckxpbmsoZXZlbnQsICdlbnRyeScpO1xuICAgIH1cbiAgfVxuXG4gIGdldFZlcnNpb25MaW5rKHZlcnNpb246IG51bWJlcikge1xuICAgIGNvbnN0IGxpbmsgPSBgdmVyc2lvbnMvJHt0aGlzLml0ZW0uaWR9P3R5cGU9JHt0aGlzLml0ZW0udHlwZU5hbWV9JnZlcnNpb249JHt2ZXJzaW9ufWA7XG4gICAgcmV0dXJuIGA8YSBjbGFzcz1cImxpbmsgcm91dGVyLWxpbmtcIiBocmVmPVwiJHtsaW5rfVwiIHRhcmdldD1cIl9ibGFua1wiIG9uY2xpY2s9XCJyZXR1cm4gZmFsc2U7XCI+JHt2ZXJzaW9ufTwvYT5gO1xuICB9XG5cbiAgcHJvY2Vzc0luZGV4RGF0YShpZDogSW5kZXhEYXRhLCBpbmRleCA9IDAsIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaWQgJiYgaWQuZm9ybSAmJiBpZC5kYXRhID8gdGhpcy5ncmlkQXBpLmdldFJlc29sdmVkRGVmcyhJbmRleGRhdGFTdW1tYXJ5Q29tcG9uZW50LmNvbGxlY3QoaWQuZGF0YSwgaWQuZm9ybS5lbGVtZW50c1tpbmRleF0uZWxlbWVudHMsIFtdLCBmb3JjZSkpIDogW107XG4gIH1cblxuICBvbk1vcmVJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdtb3JlLWluZm8nLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICBvbkNvbnRleHRmb2xkZXJUb2dnbGUoaW5mbzogYm9vbGVhbikge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2NvbnRleHRmb2xkZXInLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICBvblN0b3JhZ2VJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdzdG9yYWdlLWluZm8nLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBnZXRTdG9yYWdlSW5mb3MoKSB7XG4gICAgdGhpcy5kbXNTZXJ2aWNlLmdldFN0b3JhZ2VJbmZvKHRoaXMuaXRlbS5pZCwgdGhpcy5pdGVtLnR5cGVOYW1lLCB0aGlzLml0ZW0udmVyc2lvbilcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgY2F0Y2hFcnJvcihVdGlscy5jYXRjaFNraXAoZXJyID0+IGVyci5zdGF0dXMgPT09IDQwNCkpXG4gICAgICApLnN1YnNjcmliZSgocmVzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JhZ2VJbmZvcyA9IHJlcztcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Rm9sZGVySW5mb3MoaXRlbTogRG1zT2JqZWN0KSB7XG4gICAgdGhpcy5kYXRhVmFsdWVzMiA9IGl0ZW0uY29udGV4dEZvbGRlcj8udHlwZT8uZWxlbWVudHMuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnNlbGVjdGVkZm9yZW5yaWNobWVudCkubWFwKGl0ZW1zID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLml0ZW1zLFxuICAgICAgICBkYXRhOiBpdGVtLmNvbnRleHRGb2xkZXIuZGF0YVtpdGVtcy5uYW1lXVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKSB7XG4gICAgdGhpcy5tb3JlSW5mb0FjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnbW9yZS1pbmZvJykpO1xuICAgIHRoaXMuaW5mb0ZvbGRlckFjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnY29udGV4dGZvbGRlcicpKTtcbiAgICB0aGlzLmRhdGFJbmZvQWNjID0gSlNPTi5wYXJzZSh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5jYWNoZUtleSArICdzdG9yYWdlLWluZm8nKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdHdvIHZhbHVlcyBkZWVwbHkgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICAgKiBJdCBjb21wYXJlcyBvYmplY3RzIHJlY3Vyc2l2ZWx5LCBpbmNsdWRpbmcgdGhlaXIgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsMSAtIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsMiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZGVlcGx5IGVxdWFsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGNvbXBhcmVDb250ZW50VmFsdWVFcXVhbGl0eSA9ICh2YWwxOiBhbnksIHZhbDI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbDIgIT09ICdvYmplY3QnIHx8IHZhbDEgPT0gbnVsbCB8fCB2YWwyID09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHZhbDFrZXlzID0gT2JqZWN0LmtleXModmFsMSk7XG4gICAgY29uc3QgdmFsMmtleXMgPSBPYmplY3Qua2V5cyh2YWwyKTtcblxuICAgIGlmICh2YWwxa2V5cy5sZW5ndGggIT09IHZhbDJrZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdmFsMWtleXMpIHtcbiAgICAgIGlmICghdmFsMmtleXMuaW5jbHVkZXMoa2V5KSB8fCAhdGhpcy5jb21wYXJlQ29udGVudFZhbHVlRXF1YWxpdHkodmFsMVtrZXldLCB2YWwyW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byB2YWx1ZXMgYW5kIHJldHVybnMgYSBzdW1tYXJ5IG9mIHRoZWlyIGRpZmZlcmVuY2VzLlxuICAgKiBJZiB0aGUgdmFsdWVzIGFyZSBhcnJheXMsIGl0IGNvbXBhcmVzIHRoZWlyIGxlbmd0aHMgYW5kLCBpZiBlcXVhbCwgdGhlaXIgY29udGVudHMuXG4gICAqIEZvciBub24tYXJyYXkgdmFsdWVzLCBpdCBjaGVja3MgZm9yIGVxdWFsaXR5IG9yIGlmIGVpdGhlciBpcyBjb25zaWRlcmVkIFwiZW1wdHlcIiBieSBhIHV0aWxpdHkgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB2YWwxIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0gdmFsMiBUaGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGB2YWwxYCBhbmQgYHZhbDJgIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbmNlcywgb3IgYG51bGxgIGlmIG5vIGRpZmZlcmVuY2VzIGFyZSBmb3VuZC5cbiAgICogICAgICAgICAgRm9yIGFycmF5cywgdGhlIGRpZmZlcmVuY2VzIGFyZSB0aGUgY291bnQgb2YgZGlmZmVyaW5nIGl0ZW1zIG9yIHRoZSBkaWZmZXJlbmNlIGluIGxlbmd0aHMuXG4gICAqICAgICAgICAgIEZvciBvdGhlciB2YWx1ZXMsIGl0IHJldHVybnMgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIGlmIHRoZXkgZGlmZmVyLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIFwiZW1wdHlcIiB2YWx1ZXMuXG4gICAqICAgICAgICAgIFJldHVybnMgYG51bGxgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsIG9yIGJvdGggXCJlbXB0eVwiLlxuICAgKi9cbiAgZ2V0RGF0YVZhbHVlRGlmZmVyZW5jZXMgPSAodmFsMTogYW55LCB2YWwyOiBhbnkpOiBJU3VtbWFyeUVudHJ5RGlmZlZhbHVlID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwxKSAmJiBBcnJheS5pc0FycmF5KHZhbDIpKSB7XG4gICAgICBjb25zdCBsZW5ndGgxID0gdmFsMS5sZW5ndGg7XG4gICAgICBjb25zdCBsZW5ndGgyID0gdmFsMi5sZW5ndGg7XG5cbiAgICAgIGlmIChsZW5ndGgxICE9PSBsZW5ndGgyKSB7XG4gICAgICAgIHJldHVybiB7dmFsMTogbGVuZ3RoMS50b1N0cmluZygpLCB2YWwyOiBsZW5ndGgyLnRvU3RyaW5nKCl9O1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudCBjb250ZW50IGRpZmZlcmVuY2VzIHdoZW4gbGVuZ3RocyBhcmUgdGhlIHNhbWVcbiAgICAgIGxldCBkaWZmZXJlbmNlcyA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDE7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyZUNvbnRlbnRWYWx1ZUVxdWFsaXR5KHZhbDFbaV0sIHZhbDJbaV0pKSB7XG4gICAgICAgICAgZGlmZmVyZW5jZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlmZmVyZW5jZXMgPiAwKSB7XG4gICAgICAgIHJldHVybiB7dmFsMTogZGlmZmVyZW5jZXMudG9TdHJpbmcoKSwgdmFsMjogZGlmZmVyZW5jZXMudG9TdHJpbmcoKX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0VtcHR5VmFsMSA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwxKTtcbiAgICBjb25zdCBpc0VtcHR5VmFsMiA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwyKTtcblxuICAgIGlmIChpc0VtcHR5VmFsMSAmJiBpc0VtcHR5VmFsMikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbDEgIT09IHZhbDIgfHwgaXNFbXB0eVZhbDEgfHwgaXNFbXB0eVZhbDIpIHtcbiAgICAgIHJldHVybiB7dmFsMTogaXNFbXB0eVZhbDEgPyBcIlwiIDogdmFsMSwgdmFsMjogaXNFbXB0eVZhbDIgPyBcIlwiIDogdmFsMn07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3QgdGhhdCBhcmUgYXJyYXlzIGFuZCByZXR1cm5zIHRoZWlyIGRldGFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIG9iamVjdCB0byBhbmFseXplLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMsIGVhY2ggcmVwcmVzZW50aW5nIGEgcHJvcGVydHkgb2YgdGhlIGlucHV0IG9iamVjdFxuICAgKiB0aGF0IGlzIGFuIGFycmF5LiBFYWNoIG9iamVjdCBpbmNsdWRlcyB0aGUgcHJvcGVydHkgbmFtZSAoYGxhYmVsYCksIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcbiAgICogaW4gdGhlIGFycmF5IChgbGVuZ3RoYCksIHRoZSBhcnJheSBjb250ZW50IGl0c2VsZiAoYGNvbnRlbnRgKSwgYW5kIHRoZSB0eXBlIG9mIHRoZSBhcnJheSAoYHR5cGVgKS5cbiAgICovXG4gIGdldEluZGV4RGF0YUFycmF5RGV0YWlscyA9IChpbmRleERhdGE6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogSW5kZXhEYXRhQXJyYXlEZXRhaWxzW10gPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBpbmRleERhdGEuZGF0YTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHMgPSBpbmRleERhdGEuZm9ybS5lbGVtZW50cztcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgYnkgaXRzIGxhYmVsXG4gICAgY29uc3QgZmluZFR5cGVBbmRMYWJlbEJ5TmFtZSA9IChlbGVtZW50cywgbGFiZWwpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09PSBsYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7dHlwZTogZWxlbWVudC50eXBlLCBsYWJlbDogZWxlbWVudC5sYWJlbH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudHMgJiYgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdHlwZUxhYmVsSW5mbyA9IGZpbmRUeXBlQW5kTGFiZWxCeU5hbWUoZWxlbWVudC5lbGVtZW50cywgbGFiZWwpO1xuICAgICAgICAgIGlmICh0eXBlTGFiZWxJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZUxhYmVsSW5mbztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKVxuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGVMYWJlbE9iaiA9IGZpbmRUeXBlQW5kTGFiZWxCeU5hbWUoZm9ybUVsZW1lbnRzLCBrZXkpO1xuICAgICAgICBpZiAodHlwZUxhYmVsT2JqKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiB0eXBlTGFiZWxPYmoubGFiZWwsXG4gICAgICAgICAgICBsZW5ndGg6IGRhdGFba2V5XS5sZW5ndGgsXG4gICAgICAgICAgICBjb250ZW50OiBkYXRhW2tleV0sXG4gICAgICAgICAgICB0eXBlOiB0eXBlTGFiZWxPYmoudHlwZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICBsZW5ndGg6IGRhdGFba2V5XS5sZW5ndGgsXG4gICAgICAgICAgICBjb250ZW50OiBkYXRhW2tleV0sXG4gICAgICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ29tcGFyZXMgdGhlIGNvbnRlbnQgb2YgdHdvIHNldHMgb2YgaW5kZXggZGF0YSBhcnJheSBkZXRhaWxzIGFuZCBleHRyYWN0cyB0aGUgZGlmZmVyZW5jZXMuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFwcyB0aHJvdWdoIHRoZSBmaXJzdCBzZXQgb2YgaW5kZXggZGF0YSBhcnJheSBkZXRhaWxzLCBmaW5kcyB0aGUgbWF0Y2hpbmdcbiAgICogY29udGVudCBmcm9tIHRoZSBzZWNvbmQgc2V0IGJ5IGxhYmVsLCBhbmQgdGhlbiBjYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uXG4gICAqIEl0IHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGxhYmVscyBhbmQgdGhlIGNhbGN1bGF0ZWQgZGlmZmVyZW5jZXMsIGZpbHRlcmluZyBvdXRcbiAgICogYW55IGVudHJpZXMgd2l0aG91dCBhIGRpZmZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXhEYXRhQXJyYXlEZXRhaWxbXX0gaW5kZXhEYXRhQXJyYXlEZXRhaWxzIC0gVGhlIGZpcnN0IHNldCBvZiBpbmRleCBkYXRhIGFycmF5IGRldGFpbHMuXG4gICAqIEBwYXJhbSB7SW5kZXhEYXRhQXJyYXlEZXRhaWxbXX0gaW5kZXhEYXRhMkFycmF5RGV0YWlscyAtIFRoZSBzZWNvbmQgc2V0IG9mIGluZGV4IGRhdGEgYXJyYXkgZGV0YWlscy5cbiAgICogQHJldHVybnMge0FycmF5PHtsYWJlbDogc3RyaW5nLCBfdmFsdWU6IGFueX0+fSBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgbGFiZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlcy5cbiAgICovXG4gIGV4dHJhY3REYXRhVmFsdWVzV2l0aERpZmZlcmVuY2VzID0gKGluZGV4RGF0YUFycmF5RGV0YWlscywgaW5kZXhEYXRhMkFycmF5RGV0YWlscyk6IERhdGFWYWx1ZURpZmZlcmVuY2VbXSA9PiB7XG4gICAgcmV0dXJuIGluZGV4RGF0YUFycmF5RGV0YWlscy5tYXAoKHtsYWJlbCwgdHlwZSwgY29udGVudH0pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nUHJvcCA9IGluZGV4RGF0YTJBcnJheURldGFpbHMuZmluZChwcm9wID0+IHByb3AubGFiZWwgPT09IGxhYmVsKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQyID0gbWF0Y2hpbmdQcm9wID8gbWF0Y2hpbmdQcm9wLmNvbnRlbnQgOiBbXTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5nZXREYXRhVmFsdWVEaWZmZXJlbmNlcyhjb250ZW50LCBjb250ZW50Mik7XG4gICAgICBpZiAodHlwZSA9PT0gXCJUQUJMRVwiICYmIG5ld1ZhbHVlICYmIG5ld1ZhbHVlLnZhbDEgJiYgbmV3VmFsdWUudmFsMikge1xuICAgICAgICBuZXdWYWx1ZS52YWwxID0gXCJcIjtcbiAgICAgICAgbmV3VmFsdWUudmFsMiA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmluZGV4ZGF0YS5zdW1tYXJ5LnRhYmxlLmNoYW5nZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIF92YWx1ZTogbmV3VmFsdWUsXG4gICAgICB9O1xuICAgIH0pLmZpbHRlcigodjoge192YWx1ZTogYW55O30pID0+IHYuX3ZhbHVlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNVc2VyQWxsb3dlZFRvU2hvd1N0b3JhZ2VTZWN0aW9uID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLmhhc1ByaXZpbGVnZSgnTUFOQUdFX1NUT1JBR0VTJyk7XG4gICAgdGhpcy5nZXRDYWNoZWRBY2NvcmRpb25TdGF0ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhEYXRhIHtcbiAgZm9ybTogYW55O1xuICBkYXRhOiBhbnk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZW1wdHktY29udGFpbmVyXCIgKm5nSWY9XCJlbXB0eVN0YXRlXCI+e3snZW8uaW5kZXhkYXRhLnN1bW1hcnkubm8uY2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG48ZGl2IGNsYXNzPVwiaW5kZXhkYXRhLXN1bW1hcnlcIj5cblxuICA8ZGl2IGNsYXNzPVwiY29yZS1zZWN0aW9uXCIgKm5nSWY9XCJjb3JlVmFsdWVzPy5sZW5ndGhcIj5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb3JlVmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5fdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNsaWNrZWQpPVwib25WYWx1ZUNsaWNrKCRldmVudCwgaXRlbSlcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgQGlmIChpdGVtPy5jb250ZXh0Rm9sZGVyICYmICFkaWZmQWN0aXZlKSB7XG4gICAgICA8ZW8tc2ltcGxlLWFjY29yZGlvbiBbaGVhZGVyXT1cIml0ZW0uY29udGV4dEZvbGRlcj8udHlwZT8ubGFiZWwgKyAnOidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiIFtzZWxlY3RlZF09XCJpbmZvRm9sZGVyQWNjXCIgKHNlbGVjdENoYW5nZSk9XCJvbkNvbnRleHRmb2xkZXJUb2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVZhbHVlczJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIiBbdmFsdWVdPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2xpY2tlZCk9XCJvblZhbHVlQ2xpY2soJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuICAgICAgPC9lby1zaW1wbGUtYWNjb3JkaW9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRhLXNlY3Rpb25cIiAqbmdJZj1cImRhdGFWYWx1ZXMgJiYgZGF0YVZhbHVlcy5sZW5ndGhcIj5cbiAgICA8ZW8tc2ltcGxlLWFjY29yZGlvbiAjZGF0YUFjY29yZGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJdPVwiKCdlby5pbmRleGRhdGEuc3VtbWFyeS5tb3JlJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJtb3JlSW5mb0FjY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJvbk1vcmVJbmZvVG9nZ2xlKCRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+XG5cbiAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFWYWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uX3ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2xpY2tlZCk9XCJvblZhbHVlQ2xpY2soJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuICAgICAgPC9kaXY+XG4gICAgPC9lby1zaW1wbGUtYWNjb3JkaW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYmFzZXBhcmFtcy1zZWN0aW9uXCIgKm5nSWY9XCJiYXNlcGFyYW1zXCI+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCJiYXNlcGFyYW1zLm1vZGlmaWVkT24gJiYgIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1vZGlmaWVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1vZGlmaWVkT24gfCBsb2NhbGVEYXRlXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cIiFkaWZmQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5tb2RpZmllcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5tb2RpZmllZEJ5XCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMuY3JlYXRlZE9uICYmICFkaWZmQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5jcmVhdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmNyZWF0ZWRPbiB8IGxvY2FsZURhdGVcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmNyZWF0b3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY3JlYXRlZEJ5XCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cIiFkaWZmQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN1bW1hcnkudmVyc2lvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmVyc2lvbkxpbmsoYmFzZXBhcmFtcy52ZXJzaW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2xpY2tlZCk9XCJvblZhbHVlQ2xpY2soJGV2ZW50LCB7dmVyc2lvbjogYmFzZXBhcmFtcy52ZXJzaW9ufSlcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIiBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLnR5cGUnIHwgdHJhbnNsYXRlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aGlzLml0ZW0udHlwZS5sYWJlbCArICcgKCcgKyB0aGlzLml0ZW0udHlwZS5uYW1lICsgJyknXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmNvbnRlbnRGaWxlTmFtZVwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCJiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uZmlsZXNpemUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRpZmZBY3RpdmUgPyB7dmFsMTogYmFzZXBhcmFtcy5jb250ZW50RmlsZVNpemVbJ3ZhbDEnXSB8IGZpbGVTaXplLCB2YWwyOiBiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZVsndmFsMiddIHwgZmlsZVNpemV9IDogKGJhc2VwYXJhbXMuY29udGVudEZpbGVTaXplIHwgZmlsZVNpemUpXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1pbWV0eXBlZ3JvdXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMubWltZUdyb3VwXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1pbWV0eXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1pbWVUeXBlXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cIiFkaWZmQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5pZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5pZFwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCJiYXNlcGFyYW1zLmNvbnRlbnRJZCAhPT0gYmFzZXBhcmFtcy5pZCAmJiAhZGlmZkFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uY29udGVudElkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmNvbnRlbnRJZFwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG4gIDwvZGl2PlxuXG4gIEBpZihzdG9yYWdlSW5mb3M/Lmxlbmd0aCAmJiBpc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb24gJiYgIWlzQ2hhbmdlc1RhYikge1xuICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mb1wiPlxuICAgICAgPGVvLXNpbXBsZS1hY2NvcmRpb24gW2hlYWRlcl09XCIoJ2VvLnN0YXRlLnNldHRpbmdzLnN0b3JhZ2VpbmZvJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRhdGFJbmZvQWNjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25TdG9yYWdlSW5mb1RvZ2dsZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JhZ2VpbmZvLWVudHJ5IGJhc2VwYXJhbXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uZGlnZXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmRpZ2VzdFwiPlxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mby1lbnRyeSBiYXNlcGFyYW1zLXNlY3Rpb25cIiAqbmdGb3I9XCJsZXQgc3RJbmZvIG9mIHN0b3JhZ2VJbmZvczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnJldGVudGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnJldGVudGlvbiB8IGxvY2FsZURhdGUgOiAnZW9TaG9ydERhdGUnXCI+XG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5wZXJtYW5lbmNlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8ucGVybWFuZW5jZVwiPlxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3RvcmFnZWluZm8uc2V0bmFtZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnNldG5hbWVcIj5cbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnN0b3JhZ2VuYW1lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8uc3RvcmFnZW5hbWVcIj5cbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLmxvY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8ubG9jYXRpb25cIj5cbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICA8L2Rpdj5cbiAgfVxuXG48L2Rpdj5cbiJdfQ==
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUF3RixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFMUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBVzVELElBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCOztJQXNCcEMsSUFDSSxTQUFTLENBQUMsRUFBYTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFDSSxTQUFTLENBQUMsSUFBZTtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYSxJQUFJLENBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUM7UUFDaEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUEwQixFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXJLLElBQUksVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBZ0IsQ0FBQztZQUNuQyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQztpQkFDaEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0gsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO2lCQUN6RCxHQUFHLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2lCQUN0SCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNySCxJQUFJLFVBQVUsR0FBMEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO2lCQUM5RSxHQUFHLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2lCQUN0SCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFekIsTUFBTSxxQkFBcUIsR0FBNEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sc0JBQXNCLEdBQTRCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxxQkFBcUIsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7WUFFdEgsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNLLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUSxFQUFFLFdBQWtCLEVBQUUsRUFBRSxVQUFpQixFQUFFLEtBQUssR0FBRyxLQUFLO1FBQzdFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsVUFBVSxDQUFDLE1BQU0sQ0FBQywyQkFBeUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNsQixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hHLCtDQUErQzt3QkFDL0MsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7NEJBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDOzRCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7eUJBQzFCLENBQUMsQ0FBQyxDQUFDO29CQUNOLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFtQixTQUEyQixFQUNyQyxPQUFvQixFQUNuQixVQUFzQixFQUN0QixXQUF3QixFQUN4QixFQUFxQixFQUNyQixjQUFtQyxFQUNuQyxNQUFjO1FBTkwsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQUNuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBOUZ4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUNkLGFBQVEsR0FBRyxtQkFBbUIsQ0FBQztRQUN2QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFJVixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQW1KOUI7Ozs7Ozs7OztXQVNHO1FBQ0gsZ0NBQTJCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsSUFBUyxFQUFXLEVBQUU7WUFDOUQsSUFBSSxJQUFJLEtBQUssSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUvQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUV2RyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXRELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDdkcsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7Ozs7O1dBV0c7UUFDSCw0QkFBdUIsR0FBRyxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQTBCLEVBQUU7WUFDekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFFNUIsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUMsQ0FBQztnQkFDOUQsQ0FBQztnQkFFRCxzREFBc0Q7Z0JBQ3RELElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN4RCxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNwQixPQUFPLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFDLENBQUM7Z0JBQ3RFLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkQsSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDO1lBQ3hFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVGOzs7Ozs7O1dBT0c7UUFDSCw2QkFBd0IsR0FBRyxDQUFDLFNBQStCLEVBQTJCLEVBQUU7WUFDdEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUM1QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUU3Qyw4REFBOEQ7WUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDakQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUMzQixPQUFPLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUMsQ0FBQztvQkFDcEQsQ0FBQztvQkFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3BELE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3RFLElBQUksYUFBYSxFQUFFLENBQUM7NEJBQ2xCLE9BQU8sYUFBYSxDQUFDO3dCQUN2QixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQztZQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNkLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9ELElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLE9BQU87d0JBQ0wsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO3dCQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07d0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUNsQixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7cUJBQ3hCLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU87d0JBQ0wsS0FBSyxFQUFFLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO3dCQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFDbEIsSUFBSSxFQUFFLEVBQUU7cUJBQ1QsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7Ozs7V0FXRztRQUNILHFDQUFnQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsc0JBQXNCLEVBQXlCLEVBQUU7WUFDMUcsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtnQkFDMUQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25FLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNuQixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQzlFLENBQUM7Z0JBQ0QsT0FBTztvQkFDTCxLQUFLO29CQUNMLElBQUk7b0JBQ0osTUFBTSxFQUFFLFFBQVE7aUJBQ2pCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBOU5BLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLE9BQVksRUFBRTtRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE1BQU0sSUFBSSxHQUFHLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDdEYsT0FBTyxxQ0FBcUMsSUFBSSw2Q0FBNkMsT0FBTyxNQUFNLENBQUM7SUFDN0csQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsMkJBQXlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0osQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWE7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFhO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBYTtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDaEYsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDcEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQ3ZELENBQUMsU0FBUyxDQUFDLENBQUMsR0FBVSxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7WUFDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBZTtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0csT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDMUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDOzhHQXJLVSx5QkFBeUI7a0dBQXpCLHlCQUF5QixnT0NqQnRDLDBrUUF5SkE7O0FEeElhLHlCQUF5QjtJQVByQyxZQUFZLEVBQUU7R0FPRix5QkFBeUIsQ0F5VXJDOzsyRkF6VVkseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNO3lQQW9CdEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsU0FBUztzQkFEWixLQUFLO2dCQVFGLFNBQVM7c0JBRFosS0FBSztnQkFXTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsaXRpZXNTZXJ2aWNlfSBmcm9tICcuLy4uLy4uL3V0aWwvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCYXNlUGFyYW1zLCBEbXNPYmplY3QsIERtc1NlcnZpY2UsIExvY2FsU3RvcmFnZVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0lTdW1tYXJ5RW50cnlEaWZmVmFsdWV9IGZyb20gJy4vaW5kZXhkYXRhLXN1bW1hcnktZW50cnkuaW50ZXJmYWNlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RGF0YVZhbHVlRGlmZmVyZW5jZSwgSW5kZXhEYXRhQXJyYXlEZXRhaWxzfSBmcm9tICcuL2luZGV4ZGF0YS1zdW1tYXJ5LmludGVyZmFjZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1pbmRleGRhdGEtc3VtbWFyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmRleGRhdGEtc3VtbWFyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luZGV4ZGF0YS1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQge1xuXG4gIGlzVXNlckFsbG93ZWRUb1Nob3dTdG9yYWdlU2VjdGlvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaW5kZXhEYXRhOiBJbmRleERhdGE7XG5cbiAgY29yZVZhbHVlczogYW55W107XG4gIGRhdGFWYWx1ZXM6IGFueVtdO1xuICBkYXRhVmFsdWVzMjogYW55W107XG4gIHN0b3JhZ2VJbmZvczogYW55W107XG4gIGl0ZW06IERtc09iamVjdDtcbiAgbW9yZUluZm9BY2MgPSBmYWxzZTtcbiAgZGF0YUluZm9BY2MgPSBmYWxzZTtcbiAgaW5mb0ZvbGRlckFjYyA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlS2V5ID0gJ2FjY29yZGlvbi5zdGF0ZS0tJztcbiAgZGlmZkFjdGl2ZSA9IGZhbHNlO1xuICBlbXB0eVN0YXRlID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBiYXNlcGFyYW1zOiBCYXNlUGFyYW1zO1xuICBASW5wdXQoKSBlbmFibGVWZXJzaW9ucyA9IHRydWU7XG4gIEBJbnB1dCgpIGlzQ2hhbmdlc1RhYiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpbmRleGRhdGEoaWQ6IEluZGV4RGF0YSkge1xuICAgIHRoaXMuX2luZGV4RGF0YSA9IGlkO1xuICAgIHRoaXMuY29yZVZhbHVlcyA9IHRoaXMucHJvY2Vzc0luZGV4RGF0YShpZCwgMCkuZmlsdGVyKHZhbHVlID0+ICF2YWx1ZS5uYW1lLnN0YXJ0c1dpdGgoJ3l1dicpKTtcbiAgICB0aGlzLmRhdGFWYWx1ZXMgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaWQsIDEpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGRtc09iamVjdChpdGVtOiBEbXNPYmplY3QpIHtcbiAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgIHRoaXMuZ2V0Rm9sZGVySW5mb3MoaXRlbSk7XG4gICAgdGhpcy5zdG9yYWdlSW5mb3MgPSBudWxsO1xuICAgIGlmIChpdGVtICYmIGl0ZW0uY29udGVudCAmJiB0aGlzLmlzVXNlckFsbG93ZWRUb1Nob3dTdG9yYWdlU2VjdGlvbikge1xuICAgICAgdGhpcy5nZXRTdG9yYWdlSW5mb3MoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRDYWNoZWRBY2NvcmRpb25TdGF0ZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRpZmYoe2luZGV4ZGF0YSwgaW5kZXhkYXRhMiwgYmFzZXBhcmFtcywgYmFzZXBhcmFtczJ9KSB7XG4gICAgdGhpcy5kaWZmQWN0aXZlID0gdHJ1ZTtcblxuICAgIGNvbnN0IGRpZmZWYWx1ZSA9ICh2YWwxLCB2YWwyKTogSVN1bW1hcnlFbnRyeURpZmZWYWx1ZSA9PiAhKFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwxKSAmJiBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsMikpICYmIHZhbDEgIT09IHZhbDIgPyB7dmFsMSwgdmFsMn0gOiBudWxsO1xuXG4gICAgaWYgKGJhc2VwYXJhbXMgJiYgYmFzZXBhcmFtczIpIHtcbiAgICAgIHRoaXMuYmFzZXBhcmFtcyA9IHt9IGFzIEJhc2VQYXJhbXM7XG4gICAgICBbJ2NvbnRlbnRGaWxlTmFtZScsICdjb250ZW50RmlsZVNpemUnLCAnbWltZUdyb3VwJ11cbiAgICAgICAgLmZvckVhY2goayA9PiBkaWZmVmFsdWUoYmFzZXBhcmFtc1trXSwgYmFzZXBhcmFtczJba10pICYmICh0aGlzLmJhc2VwYXJhbXNba10gPSBkaWZmVmFsdWUoYmFzZXBhcmFtc1trXSwgYmFzZXBhcmFtczJba10pKSk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ZGF0YSAmJiBpbmRleGRhdGEyKSB7XG4gICAgICBjb25zdCBjb3JlVmFsdWVzMiA9IHRoaXMucHJvY2Vzc0luZGV4RGF0YShpbmRleGRhdGEyLCAwLCB0cnVlKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiAoYWNjW2N1ci5xbmFtZV0gPSBjdXIsIGFjYyksIHt9KTtcbiAgICAgIGNvbnN0IGNvcmVWYWx1ZXMgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhLCAwLCB0cnVlKVxuICAgICAgICAubWFwKCh7bGFiZWwsIF92YWx1ZSwgcW5hbWUsIHJlZmVyZW5jZX0pID0+ICh7bGFiZWwsIHJlZmVyZW5jZSwgX3ZhbHVlOiBkaWZmVmFsdWUoX3ZhbHVlLCBjb3JlVmFsdWVzMltxbmFtZV0uX3ZhbHVlKX0pKVxuICAgICAgICAuZmlsdGVyKHYgPT4gdi5fdmFsdWUpO1xuXG4gICAgICBjb25zdCBkYXRhVmFsdWVzMiA9IHRoaXMucHJvY2Vzc0luZGV4RGF0YShpbmRleGRhdGEyLCAxLCB0cnVlKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiAoYWNjW2N1ci5xbmFtZV0gPSBjdXIsIGFjYyksIHt9KTtcbiAgICAgIGxldCBkYXRhVmFsdWVzOiBEYXRhVmFsdWVEaWZmZXJlbmNlW10gPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhLCAxLCB0cnVlKVxuICAgICAgICAubWFwKCh7bGFiZWwsIF92YWx1ZSwgcW5hbWUsIHJlZmVyZW5jZX0pID0+ICh7bGFiZWwsIHJlZmVyZW5jZSwgX3ZhbHVlOiBkaWZmVmFsdWUoX3ZhbHVlLCBkYXRhVmFsdWVzMltxbmFtZV0uX3ZhbHVlKX0pKVxuICAgICAgICAuZmlsdGVyKHYgPT4gdi5fdmFsdWUpO1xuXG4gICAgICBjb25zdCBpbmRleERhdGFBcnJheURldGFpbHM6IEluZGV4RGF0YUFycmF5RGV0YWlsc1tdID0gdGhpcy5nZXRJbmRleERhdGFBcnJheURldGFpbHMoaW5kZXhkYXRhKTtcbiAgICAgIGNvbnN0IGluZGV4RGF0YTJBcnJheURldGFpbHM6IEluZGV4RGF0YUFycmF5RGV0YWlsc1tdID0gdGhpcy5nZXRJbmRleERhdGFBcnJheURldGFpbHMoaW5kZXhkYXRhMik7XG4gICAgICBkYXRhVmFsdWVzID0gWy4uLmRhdGFWYWx1ZXMsIC4uLnRoaXMuZXh0cmFjdERhdGFWYWx1ZXNXaXRoRGlmZmVyZW5jZXMoaW5kZXhEYXRhQXJyYXlEZXRhaWxzLCBpbmRleERhdGEyQXJyYXlEZXRhaWxzKV07XG5cbiAgICAgIHRoaXMuY29yZVZhbHVlcyA9IGNvcmVWYWx1ZXM7XG4gICAgICB0aGlzLmRhdGFWYWx1ZXMgPSBkYXRhVmFsdWVzO1xuICAgICAgdGhpcy5tb3JlSW5mb0FjYyA9ICEhZGF0YVZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5lbXB0eVN0YXRlID0gVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHRoaXMuY29yZVZhbHVlcykgJiYgVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHRoaXMuZGF0YVZhbHVlcykgJiYgVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KE9iamVjdC5rZXlzKHRoaXMuYmFzZXBhcmFtcyB8fCB7fSkpO1xuICB9XG5cbiAgaXNWZXJzaW9uc1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ3ZlcnNpb25zJyk7XG4gIH1cblxuICBzdGF0aWMgY29sbGVjdChkYXRhOiB7fSwgZWxlbWVudHM6IGFueVtdID0gW10sIGNvbGxlY3Rpb246IGFueVtdLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBpZiAoZWwudHlwZSAhPT0gJ1RBQkxFJykge1xuICAgICAgICBpZiAoZWwuZWxlbWVudHMpIHtcbiAgICAgICAgICBjb2xsZWN0aW9uLmNvbmNhdChJbmRleGRhdGFTdW1tYXJ5Q29tcG9uZW50LmNvbGxlY3QoZGF0YSwgZWwuZWxlbWVudHMsIGNvbGxlY3Rpb24sIGZvcmNlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGtleSA9IGVsLm5hbWU7XG4gICAgICAgICAgaWYgKGZvcmNlIHx8IChkYXRhLmhhc093blByb3BlcnR5KGtleSkgJiYgKEFycmF5LmlzQXJyYXkoZGF0YVtrZXldKSA/IGRhdGFba2V5XS5sZW5ndGggOiB0cnVlKSkpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgYWRkIGFycmF5cyB3aGVuIHRoZXkgY29udGFpbiBhbnkgdmFsdWVzXG4gICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZWwsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGRhdGFba2V5XSxcbiAgICAgICAgICAgICAgbWV0YTogZGF0YVtrZXkgKyAnX21ldGEnXVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwdWJsaWMgZ3JpZEFwaTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkbXNTZXJ2aWNlOiBEbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuXG4gICAgdGhpcy5pc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuaGFzUHJpdmlsZWdlKCdNQU5BR0VfU1RPUkFHRVMnKTtcbiAgICB0aGlzLmdldENhY2hlZEFjY29yZGlvblN0YXRlKCk7XG4gIH1cblxuICBvblZhbHVlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55ID0ge30pIHtcbiAgICBpZiAoaXRlbS5yZWZlcmVuY2UgfHwgaXRlbS52ZXJzaW9uKSB7XG4gICAgICB0aGlzLmdyaWRBcGkub3BlblJvdXRlckxpbmsoZXZlbnQsICdlbnRyeScpO1xuICAgIH1cbiAgfVxuXG4gIGdldFZlcnNpb25MaW5rKHZlcnNpb246IG51bWJlcikge1xuICAgIGNvbnN0IGxpbmsgPSBgdmVyc2lvbnMvJHt0aGlzLml0ZW0uaWR9P3R5cGU9JHt0aGlzLml0ZW0udHlwZU5hbWV9JnZlcnNpb249JHt2ZXJzaW9ufWA7XG4gICAgcmV0dXJuIGA8YSBjbGFzcz1cImxpbmsgcm91dGVyLWxpbmtcIiBocmVmPVwiJHtsaW5rfVwiIHRhcmdldD1cIl9ibGFua1wiIG9uY2xpY2s9XCJyZXR1cm4gZmFsc2U7XCI+JHt2ZXJzaW9ufTwvYT5gO1xuICB9XG5cbiAgcHJvY2Vzc0luZGV4RGF0YShpZDogSW5kZXhEYXRhLCBpbmRleCA9IDAsIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaWQgJiYgaWQuZm9ybSAmJiBpZC5kYXRhID8gdGhpcy5ncmlkQXBpLmdldFJlc29sdmVkRGVmcyhJbmRleGRhdGFTdW1tYXJ5Q29tcG9uZW50LmNvbGxlY3QoaWQuZGF0YSwgaWQuZm9ybS5lbGVtZW50c1tpbmRleF0uZWxlbWVudHMsIFtdLCBmb3JjZSkpIDogW107XG4gIH1cblxuICBvbk1vcmVJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdtb3JlLWluZm8nLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICBvbkNvbnRleHRmb2xkZXJUb2dnbGUoaW5mbzogYm9vbGVhbikge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2NvbnRleHRmb2xkZXInLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICBvblN0b3JhZ2VJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdzdG9yYWdlLWluZm8nLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBnZXRTdG9yYWdlSW5mb3MoKSB7XG4gICAgdGhpcy5kbXNTZXJ2aWNlLmdldFN0b3JhZ2VJbmZvKHRoaXMuaXRlbS5pZCwgdGhpcy5pdGVtLnR5cGVOYW1lLCB0aGlzLml0ZW0udmVyc2lvbilcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgY2F0Y2hFcnJvcihVdGlscy5jYXRjaFNraXAoZXJyID0+IGVyci5zdGF0dXMgPT09IDQwNCkpXG4gICAgICApLnN1YnNjcmliZSgocmVzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JhZ2VJbmZvcyA9IHJlcztcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Rm9sZGVySW5mb3MoaXRlbTogRG1zT2JqZWN0KSB7XG4gICAgdGhpcy5kYXRhVmFsdWVzMiA9IGl0ZW0uY29udGV4dEZvbGRlcj8udHlwZT8uZWxlbWVudHMuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnNlbGVjdGVkZm9yZW5yaWNobWVudCkubWFwKGl0ZW1zID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLml0ZW1zLFxuICAgICAgICBkYXRhOiBpdGVtLmNvbnRleHRGb2xkZXIuZGF0YVtpdGVtcy5uYW1lXVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKSB7XG4gICAgdGhpcy5tb3JlSW5mb0FjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnbW9yZS1pbmZvJykpO1xuICAgIHRoaXMuaW5mb0ZvbGRlckFjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnY29udGV4dGZvbGRlcicpKTtcbiAgICB0aGlzLmRhdGFJbmZvQWNjID0gSlNPTi5wYXJzZSh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5jYWNoZUtleSArICdzdG9yYWdlLWluZm8nKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdHdvIHZhbHVlcyBkZWVwbHkgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICAgKiBJdCBjb21wYXJlcyBvYmplY3RzIHJlY3Vyc2l2ZWx5LCBpbmNsdWRpbmcgdGhlaXIgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsMSAtIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsMiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZGVlcGx5IGVxdWFsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGNvbXBhcmVDb250ZW50VmFsdWVFcXVhbGl0eSA9ICh2YWwxOiBhbnksIHZhbDI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbDIgIT09ICdvYmplY3QnIHx8IHZhbDEgPT0gbnVsbCB8fCB2YWwyID09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHZhbDFrZXlzID0gT2JqZWN0LmtleXModmFsMSk7XG4gICAgY29uc3QgdmFsMmtleXMgPSBPYmplY3Qua2V5cyh2YWwyKTtcblxuICAgIGlmICh2YWwxa2V5cy5sZW5ndGggIT09IHZhbDJrZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdmFsMWtleXMpIHtcbiAgICAgIGlmICghdmFsMmtleXMuaW5jbHVkZXMoa2V5KSB8fCAhdGhpcy5jb21wYXJlQ29udGVudFZhbHVlRXF1YWxpdHkodmFsMVtrZXldLCB2YWwyW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byB2YWx1ZXMgYW5kIHJldHVybnMgYSBzdW1tYXJ5IG9mIHRoZWlyIGRpZmZlcmVuY2VzLlxuICAgKiBJZiB0aGUgdmFsdWVzIGFyZSBhcnJheXMsIGl0IGNvbXBhcmVzIHRoZWlyIGxlbmd0aHMgYW5kLCBpZiBlcXVhbCwgdGhlaXIgY29udGVudHMuXG4gICAqIEZvciBub24tYXJyYXkgdmFsdWVzLCBpdCBjaGVja3MgZm9yIGVxdWFsaXR5IG9yIGlmIGVpdGhlciBpcyBjb25zaWRlcmVkIFwiZW1wdHlcIiBieSBhIHV0aWxpdHkgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB2YWwxIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0gdmFsMiBUaGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGB2YWwxYCBhbmQgYHZhbDJgIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbmNlcywgb3IgYG51bGxgIGlmIG5vIGRpZmZlcmVuY2VzIGFyZSBmb3VuZC5cbiAgICogICAgICAgICAgRm9yIGFycmF5cywgdGhlIGRpZmZlcmVuY2VzIGFyZSB0aGUgY291bnQgb2YgZGlmZmVyaW5nIGl0ZW1zIG9yIHRoZSBkaWZmZXJlbmNlIGluIGxlbmd0aHMuXG4gICAqICAgICAgICAgIEZvciBvdGhlciB2YWx1ZXMsIGl0IHJldHVybnMgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIGlmIHRoZXkgZGlmZmVyLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIFwiZW1wdHlcIiB2YWx1ZXMuXG4gICAqICAgICAgICAgIFJldHVybnMgYG51bGxgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsIG9yIGJvdGggXCJlbXB0eVwiLlxuICAgKi9cbiAgZ2V0RGF0YVZhbHVlRGlmZmVyZW5jZXMgPSAodmFsMTogYW55LCB2YWwyOiBhbnkpOiBJU3VtbWFyeUVudHJ5RGlmZlZhbHVlID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwxKSAmJiBBcnJheS5pc0FycmF5KHZhbDIpKSB7XG4gICAgICBjb25zdCBsZW5ndGgxID0gdmFsMS5sZW5ndGg7XG4gICAgICBjb25zdCBsZW5ndGgyID0gdmFsMi5sZW5ndGg7XG5cbiAgICAgIGlmIChsZW5ndGgxICE9PSBsZW5ndGgyKSB7XG4gICAgICAgIHJldHVybiB7dmFsMTogbGVuZ3RoMS50b1N0cmluZygpLCB2YWwyOiBsZW5ndGgyLnRvU3RyaW5nKCl9O1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudCBjb250ZW50IGRpZmZlcmVuY2VzIHdoZW4gbGVuZ3RocyBhcmUgdGhlIHNhbWVcbiAgICAgIGxldCBkaWZmZXJlbmNlcyA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDE7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyZUNvbnRlbnRWYWx1ZUVxdWFsaXR5KHZhbDFbaV0sIHZhbDJbaV0pKSB7XG4gICAgICAgICAgZGlmZmVyZW5jZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlmZmVyZW5jZXMgPiAwKSB7XG4gICAgICAgIHJldHVybiB7dmFsMTogZGlmZmVyZW5jZXMudG9TdHJpbmcoKSwgdmFsMjogZGlmZmVyZW5jZXMudG9TdHJpbmcoKX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0VtcHR5VmFsMSA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwxKTtcbiAgICBjb25zdCBpc0VtcHR5VmFsMiA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwyKTtcblxuICAgIGlmIChpc0VtcHR5VmFsMSAmJiBpc0VtcHR5VmFsMikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbDEgIT09IHZhbDIgfHwgaXNFbXB0eVZhbDEgfHwgaXNFbXB0eVZhbDIpIHtcbiAgICAgIHJldHVybiB7dmFsMTogaXNFbXB0eVZhbDEgPyBcIlwiIDogdmFsMSwgdmFsMjogaXNFbXB0eVZhbDIgPyBcIlwiIDogdmFsMn07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3QgdGhhdCBhcmUgYXJyYXlzIGFuZCByZXR1cm5zIHRoZWlyIGRldGFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIG9iamVjdCB0byBhbmFseXplLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMsIGVhY2ggcmVwcmVzZW50aW5nIGEgcHJvcGVydHkgb2YgdGhlIGlucHV0IG9iamVjdFxuICAgKiB0aGF0IGlzIGFuIGFycmF5LiBFYWNoIG9iamVjdCBpbmNsdWRlcyB0aGUgcHJvcGVydHkgbmFtZSAoYGxhYmVsYCksIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcbiAgICogaW4gdGhlIGFycmF5IChgbGVuZ3RoYCksIHRoZSBhcnJheSBjb250ZW50IGl0c2VsZiAoYGNvbnRlbnRgKSwgYW5kIHRoZSB0eXBlIG9mIHRoZSBhcnJheSAoYHR5cGVgKS5cbiAgICovXG4gIGdldEluZGV4RGF0YUFycmF5RGV0YWlscyA9IChpbmRleERhdGE6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogSW5kZXhEYXRhQXJyYXlEZXRhaWxzW10gPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBpbmRleERhdGEuZGF0YTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHMgPSBpbmRleERhdGEuZm9ybS5lbGVtZW50cztcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgYnkgaXRzIGxhYmVsXG4gICAgY29uc3QgZmluZFR5cGVBbmRMYWJlbEJ5TmFtZSA9IChlbGVtZW50cywgbGFiZWwpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09PSBsYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7dHlwZTogZWxlbWVudC50eXBlLCBsYWJlbDogZWxlbWVudC5sYWJlbH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudHMgJiYgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdHlwZUxhYmVsSW5mbyA9IGZpbmRUeXBlQW5kTGFiZWxCeU5hbWUoZWxlbWVudC5lbGVtZW50cywgbGFiZWwpO1xuICAgICAgICAgIGlmICh0eXBlTGFiZWxJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZUxhYmVsSW5mbztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlTGFiZWxPYmogPSBmaW5kVHlwZUFuZExhYmVsQnlOYW1lKGZvcm1FbGVtZW50cywga2V5KTtcbiAgICAgICAgaWYgKHR5cGVMYWJlbE9iaiAmJiB0eXBlTGFiZWxPYmoudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGFba2V5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZUxhYmVsT2JqID0gZmluZFR5cGVBbmRMYWJlbEJ5TmFtZShmb3JtRWxlbWVudHMsIGtleSk7XG4gICAgICAgIGlmICh0eXBlTGFiZWxPYmopIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWw6IHR5cGVMYWJlbE9iai5sYWJlbCxcbiAgICAgICAgICAgIGxlbmd0aDogZGF0YVtrZXldLmxlbmd0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGFba2V5XSxcbiAgICAgICAgICAgIHR5cGU6IHR5cGVMYWJlbE9iai50eXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgIGxlbmd0aDogZGF0YVtrZXldLmxlbmd0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGFba2V5XSxcbiAgICAgICAgICAgIHR5cGU6ICcnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGUgY29udGVudCBvZiB0d28gc2V0cyBvZiBpbmRleCBkYXRhIGFycmF5IGRldGFpbHMgYW5kIGV4dHJhY3RzIHRoZSBkaWZmZXJlbmNlcy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBtYXBzIHRocm91Z2ggdGhlIGZpcnN0IHNldCBvZiBpbmRleCBkYXRhIGFycmF5IGRldGFpbHMsIGZpbmRzIHRoZSBtYXRjaGluZ1xuICAgKiBjb250ZW50IGZyb20gdGhlIHNlY29uZCBzZXQgYnkgbGFiZWwsIGFuZCB0aGVuIGNhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS5cbiAgICogSXQgcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbGFiZWxzIGFuZCB0aGUgY2FsY3VsYXRlZCBkaWZmZXJlbmNlcywgZmlsdGVyaW5nIG91dFxuICAgKiBhbnkgZW50cmllcyB3aXRob3V0IGEgZGlmZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtJbmRleERhdGFBcnJheURldGFpbFtdfSBpbmRleERhdGFBcnJheURldGFpbHMgLSBUaGUgZmlyc3Qgc2V0IG9mIGluZGV4IGRhdGEgYXJyYXkgZGV0YWlscy5cbiAgICogQHBhcmFtIHtJbmRleERhdGFBcnJheURldGFpbFtdfSBpbmRleERhdGEyQXJyYXlEZXRhaWxzIC0gVGhlIHNlY29uZCBzZXQgb2YgaW5kZXggZGF0YSBhcnJheSBkZXRhaWxzLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8e2xhYmVsOiBzdHJpbmcsIF92YWx1ZTogYW55fT59IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBsYWJlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2VzLlxuICAgKi9cbiAgZXh0cmFjdERhdGFWYWx1ZXNXaXRoRGlmZmVyZW5jZXMgPSAoaW5kZXhEYXRhQXJyYXlEZXRhaWxzLCBpbmRleERhdGEyQXJyYXlEZXRhaWxzKTogRGF0YVZhbHVlRGlmZmVyZW5jZVtdID0+IHtcbiAgICByZXR1cm4gaW5kZXhEYXRhQXJyYXlEZXRhaWxzLm1hcCgoe2xhYmVsLCB0eXBlLCBjb250ZW50fSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdQcm9wID0gaW5kZXhEYXRhMkFycmF5RGV0YWlscy5maW5kKHByb3AgPT4gcHJvcC5sYWJlbCA9PT0gbGFiZWwpO1xuICAgICAgY29uc3QgY29udGVudDIgPSBtYXRjaGluZ1Byb3AgPyBtYXRjaGluZ1Byb3AuY29udGVudCA6IFtdO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZURpZmZlcmVuY2VzKGNvbnRlbnQsIGNvbnRlbnQyKTtcbiAgICAgIGlmICh0eXBlID09PSBcIlRBQkxFXCIgJiYgbmV3VmFsdWUgJiYgbmV3VmFsdWUudmFsMSAmJiBuZXdWYWx1ZS52YWwyKSB7XG4gICAgICAgIG5ld1ZhbHVlLnZhbDEgPSBcIlwiO1xuICAgICAgICBuZXdWYWx1ZS52YWwyID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uaW5kZXhkYXRhLnN1bW1hcnkudGFibGUuY2hhbmdlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgX3ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH07XG4gICAgfSkuZmlsdGVyKCh2OiB7X3ZhbHVlOiBhbnk7fSkgPT4gdi5fdmFsdWUpO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4RGF0YSB7XG4gIGZvcm06IGFueTtcbiAgZGF0YTogYW55O1xufVxuIiwiPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRhaW5lclwiICpuZ0lmPVwiZW1wdHlTdGF0ZVwiPnt7J2VvLmluZGV4ZGF0YS5zdW1tYXJ5Lm5vLmNoYW5nZScgfCB0cmFuc2xhdGV9fTwvZGl2PlxuPGRpdiBjbGFzcz1cImluZGV4ZGF0YS1zdW1tYXJ5XCI+XG5cbiAgPGRpdiBjbGFzcz1cImNvcmUtc2VjdGlvblwiICpuZ0lmPVwiY29yZVZhbHVlcz8ubGVuZ3RoXCI+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29yZVZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uX3ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgIEBpZiAoaXRlbT8uY29udGV4dEZvbGRlciAmJiAhaXNWZXJzaW9uc1N0YXRlKCkpIHtcbiAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtoZWFkZXJdPVwiaXRlbS5jb250ZXh0Rm9sZGVyPy50eXBlPy5sYWJlbCArICc6J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCIgW3NlbGVjdGVkXT1cImluZm9Gb2xkZXJBY2NcIiAoc2VsZWN0Q2hhbmdlKT1cIm9uQ29udGV4dGZvbGRlclRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhVmFsdWVzMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiIFt2YWx1ZV09XCJpdGVtLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG4gICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRhdGEtc2VjdGlvblwiICpuZ0lmPVwiZGF0YVZhbHVlcyAmJiBkYXRhVmFsdWVzLmxlbmd0aFwiPlxuICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uICNkYXRhQWNjb3JkaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlcl09XCIoJ2VvLmluZGV4ZGF0YS5zdW1tYXJ5Lm1vcmUnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm1vcmVJbmZvQWNjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uTW9yZUluZm9Ub2dnbGUoJGV2ZW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj5cblxuICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5fdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG4gICAgICA8L2Rpdj5cbiAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJiYXNlcGFyYW1zLXNlY3Rpb25cIiAqbmdJZj1cImJhc2VwYXJhbXNcIj5cblxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMubW9kaWZpZWRPbiAmJiAhZGlmZkFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0ubW9kaWZpZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMubW9kaWZpZWRPbiB8IGxvY2FsZURhdGVcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1vZGlmaWVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1vZGlmaWVkQnlcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiYmFzZXBhcmFtcy5jcmVhdGVkT24gJiYgIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmNyZWF0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY3JlYXRlZE9uIHwgbG9jYWxlRGF0ZVwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCIhZGlmZkFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uY3JlYXRvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5jcmVhdGVkQnlcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3VtbWFyeS52ZXJzaW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWZXJzaW9uTGluayhiYXNlcGFyYW1zLnZlcnNpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIHt2ZXJzaW9uOiBiYXNlcGFyYW1zLnZlcnNpb259KVwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCIhZGlmZkFjdGl2ZVwiIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0udHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGhpcy5pdGVtLnR5cGUubGFiZWwgKyAnICgnICsgdGhpcy5pdGVtLnR5cGUubmFtZSArICcpJ1wiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5maWxlbmFtZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5jb250ZW50RmlsZU5hbWVcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiYmFzZXBhcmFtcy5jb250ZW50RmlsZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmZpbGVzaXplJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkaWZmQWN0aXZlID8ge3ZhbDE6IGJhc2VwYXJhbXMuY29udGVudEZpbGVTaXplWyd2YWwxJ10gfCBmaWxlU2l6ZSwgdmFsMjogYmFzZXBhcmFtcy5jb250ZW50RmlsZVNpemVbJ3ZhbDInXSB8IGZpbGVTaXplfSA6IChiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZSB8IGZpbGVTaXplKVwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5taW1ldHlwZWdyb3VwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1pbWVHcm91cFwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5taW1ldHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5taW1lVHlwZVwiPlxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCIhZGlmZkFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uaWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuaWRcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiYmFzZXBhcmFtcy5jb250ZW50SWQgIT09IGJhc2VwYXJhbXMuaWQgJiYgIWRpZmZBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmNvbnRlbnRJZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5jb250ZW50SWRcIj5cbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuICA8L2Rpdj5cblxuICBAaWYoc3RvcmFnZUluZm9zPy5sZW5ndGggJiYgaXNVc2VyQWxsb3dlZFRvU2hvd1N0b3JhZ2VTZWN0aW9uICYmICFpc0NoYW5nZXNUYWIpIHtcbiAgICA8ZGl2IGNsYXNzPVwic3RvcmFnZWluZm9cIj5cbiAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtoZWFkZXJdPVwiKCdlby5zdGF0ZS5zZXR0aW5ncy5zdG9yYWdlaW5mbycgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJkYXRhSW5mb0FjY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uU3RvcmFnZUluZm9Ub2dnbGUoJGV2ZW50KVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mby1lbnRyeSBiYXNlcGFyYW1zLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmRpZ2VzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5kaWdlc3RcIj5cbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmFnZWluZm8tZW50cnkgYmFzZXBhcmFtcy1zZWN0aW9uXCIgKm5nRm9yPVwibGV0IHN0SW5mbyBvZiBzdG9yYWdlSW5mb3M7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiPlxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5yZXRlbnRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0SW5mby5yZXRlbnRpb24gfCBsb2NhbGVEYXRlIDogJ2VvU2hvcnREYXRlJ1wiPlxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XG5cbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3RvcmFnZWluZm8ucGVybWFuZW5jZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnBlcm1hbmVuY2VcIj5cbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxuXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnNldG5hbWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0SW5mby5zZXRuYW1lXCI+XG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5zdG9yYWdlbmFtZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnN0b3JhZ2VuYW1lXCI+XG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cblxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5sb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLmxvY2F0aW9uXCI+XG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XG4gICAgPC9kaXY+XG4gIH1cblxuPC9kaXY+XG4iXX0=
|