@lenne.tech/ng-base 14.11.1 → 14.13.0
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/base-components/components/model-form/model-form.component.d.ts +12 -2
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +5 -1
- package/base-components/components/model-table/model-table.component.d.ts +1 -1
- package/base-components/components/upload-image/upload-image.component.d.ts +18 -7
- package/esm2020/base-components/components/change-password/change-password.component.mjs +4 -4
- package/esm2020/base-components/components/fab-button/fab-button.component.mjs +4 -4
- package/esm2020/base-components/components/input/input.component.mjs +3 -3
- package/esm2020/base-components/components/model-form/model-form.component.mjs +50 -10
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +6 -3
- package/esm2020/base-components/components/model-table/model-table.component.mjs +3 -3
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +4 -3
- package/esm2020/base-components/components/tags/tags.component.mjs +19 -13
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +74 -33
- package/esm2020/base-prototype/pages/register/register.component.mjs +4 -4
- package/esm2020/base-prototype/pages/reset-password/reset-password.component.mjs +4 -4
- package/esm2020/shared/interfaces/compress-options.interface.mjs +2 -0
- package/esm2020/shared/public-api.mjs +4 -1
- package/esm2020/shared/services/file.service.mjs +89 -0
- package/esm2020/shared/validators/secure-password.validator.mjs +7 -0
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +165 -68
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +5 -5
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +90 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +156 -66
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +5 -5
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +94 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/package.json +3 -2
- package/shared/interfaces/compress-options.interface.d.ts +15 -0
- package/shared/public-api.d.ts +3 -0
- package/shared/services/file.service.d.ts +22 -0
- package/shared/validators/secure-password.validator.d.ts +2 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { BasicUser, GraphQLRequestType, ToastType,
|
|
2
|
+
import { BasicUser, fullEmail, GraphQLRequestType, ToastType, } from '@lenne.tech/ng-base/shared';
|
|
3
3
|
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@lenne.tech/ng-base/shared";
|
|
@@ -9,7 +9,7 @@ import * as i4 from "@angular/common";
|
|
|
9
9
|
import * as i5 from "../model-form-sub/model-form-sub.component";
|
|
10
10
|
import * as i6 from "../fab-button/fab-button.component";
|
|
11
11
|
export class ModelFormComponent {
|
|
12
|
-
constructor(graphQLMetaService, graphQLService, formsService, authService, router, route, cmsService, toastService) {
|
|
12
|
+
constructor(graphQLMetaService, graphQLService, formsService, authService, router, route, cmsService, toastService, fileService) {
|
|
13
13
|
this.graphQLMetaService = graphQLMetaService;
|
|
14
14
|
this.graphQLService = graphQLService;
|
|
15
15
|
this.formsService = formsService;
|
|
@@ -18,6 +18,7 @@ export class ModelFormComponent {
|
|
|
18
18
|
this.route = route;
|
|
19
19
|
this.cmsService = cmsService;
|
|
20
20
|
this.toastService = toastService;
|
|
21
|
+
this.fileService = fileService;
|
|
21
22
|
this.delete = true;
|
|
22
23
|
this.onlyUpdateMode = false;
|
|
23
24
|
this.duplicate = false;
|
|
@@ -119,6 +120,7 @@ export class ModelFormComponent {
|
|
|
119
120
|
if (this.logging) {
|
|
120
121
|
console.log('ModelFormComponent::get->value', response);
|
|
121
122
|
}
|
|
123
|
+
this.object = response;
|
|
122
124
|
this.form.patchValue({ ...{}, ...response });
|
|
123
125
|
// Process patchFields for reference input
|
|
124
126
|
for (const [key, value] of Object.entries(this.config)) {
|
|
@@ -316,7 +318,7 @@ export class ModelFormComponent {
|
|
|
316
318
|
* @returns The id of the newly created or updated object.
|
|
317
319
|
*/
|
|
318
320
|
submit(secret = false) {
|
|
319
|
-
return new Promise((resolve, reject) => {
|
|
321
|
+
return new Promise(async (resolve, reject) => {
|
|
320
322
|
if (!secret) {
|
|
321
323
|
this.loading = true;
|
|
322
324
|
}
|
|
@@ -361,6 +363,32 @@ export class ModelFormComponent {
|
|
|
361
363
|
if (this.logging) {
|
|
362
364
|
console.log('ModelFormComponent::submit->valueToGraphql', data);
|
|
363
365
|
}
|
|
366
|
+
if (this.fileChanges?.length) {
|
|
367
|
+
for (const fileChange of this.fileChanges) {
|
|
368
|
+
const key = fileChange.field;
|
|
369
|
+
if (fileChange.file) {
|
|
370
|
+
// Upload
|
|
371
|
+
if (this.form.get(key).value) {
|
|
372
|
+
// Delete
|
|
373
|
+
const deleteResult = await this.fileService.delete(this.config[key]?.url, this.config[key]?.deletePath || '/files/', this.object[key]);
|
|
374
|
+
if (deleteResult) {
|
|
375
|
+
data[key] = '';
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const uploadResult = await this.fileService.upload(this.config[key]?.url, this.config[key]?.uploadPath || '/files/upload', fileChange.file, this.config[key]?.compressOptions);
|
|
379
|
+
if (uploadResult?.id) {
|
|
380
|
+
data[key] = uploadResult.id;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// Delete
|
|
385
|
+
const result = await this.fileService.delete(this.config[key]?.url, this.config[key]?.deletePath || '/files/', this.object[key]);
|
|
386
|
+
if (result) {
|
|
387
|
+
data[key] = '';
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
364
392
|
this.graphQLService
|
|
365
393
|
.graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {
|
|
366
394
|
arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },
|
|
@@ -412,19 +440,31 @@ export class ModelFormComponent {
|
|
|
412
440
|
this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });
|
|
413
441
|
event.subscribe(() => this.duplicateObject());
|
|
414
442
|
}
|
|
415
|
-
if (this.operation === 'update') {
|
|
443
|
+
if (this.operation === 'update' && this.delete) {
|
|
416
444
|
const event = new EventEmitter();
|
|
417
|
-
this.fabButtons.push({ icon: 'bi-
|
|
445
|
+
this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });
|
|
418
446
|
event.subscribe(() => this.deleteObject());
|
|
419
447
|
}
|
|
420
448
|
}
|
|
449
|
+
processFileChanges(event) {
|
|
450
|
+
const index = this.fileChanges?.findIndex((e) => e.field === event.field);
|
|
451
|
+
if (index !== undefined && index !== -1) {
|
|
452
|
+
this.fileChanges[index] = event;
|
|
453
|
+
}
|
|
454
|
+
else if (this.fileChanges) {
|
|
455
|
+
this.fileChanges.push(event);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
this.fileChanges = [event];
|
|
459
|
+
}
|
|
460
|
+
}
|
|
421
461
|
}
|
|
422
|
-
ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.FormsService }, { token: i1.AuthService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.CmsService }, { token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
423
|
-
ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", label: "label", id: "id", delete: "delete", onlyUpdateMode: "onlyUpdateMode", duplicate: "duplicate", logging: "logging", config: "config", showFavButton: "showFavButton" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n", styles: [".responsive-back{display:flex;align-items:center;margin-right:6px}.responsive-back .bi-arrow-left{font-size:28px}h2{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.responsive-action-button{position:fixed;bottom:15px;right:15px;z-index:100}\n"], dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "component", type: i5.ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["fields", "form", "config"], outputs: ["imageChanged"] }, { kind: "component", type: i6.FabButtonComponent, selector: "base-fab-button", inputs: ["fabIcon", "buttons"] }] });
|
|
462
|
+
ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.FormsService }, { token: i1.AuthService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.CmsService }, { token: i1.ToastService }, { token: i1.FileService }], target: i0.ɵɵFactoryTarget.Component });
|
|
463
|
+
ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", label: "label", id: "id", delete: "delete", onlyUpdateMode: "onlyUpdateMode", duplicate: "duplicate", logging: "logging", config: "config", showFavButton: "showFavButton" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n", styles: [".responsive-back{display:flex;align-items:center;margin-right:6px}.responsive-back .bi-arrow-left{font-size:28px}h2{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.responsive-action-button{position:fixed;bottom:15px;right:15px;z-index:100}\n"], dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "component", type: i5.ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["fields", "form", "config"], outputs: ["imageChanged", "fileChanged"] }, { kind: "component", type: i6.FabButtonComponent, selector: "base-fab-button", inputs: ["fabIcon", "buttons"] }] });
|
|
424
464
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, decorators: [{
|
|
425
465
|
type: Component,
|
|
426
|
-
args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n", styles: [".responsive-back{display:flex;align-items:center;margin-right:6px}.responsive-back .bi-arrow-left{font-size:28px}h2{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.responsive-action-button{position:fixed;bottom:15px;right:15px;z-index:100}\n"] }]
|
|
427
|
-
}], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }, { type: i1.FormsService }, { type: i1.AuthService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i1.CmsService }, { type: i1.ToastService }]; }, propDecorators: { modelName: [{
|
|
466
|
+
args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n", styles: [".responsive-back{display:flex;align-items:center;margin-right:6px}.responsive-back .bi-arrow-left{font-size:28px}h2{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.responsive-action-button{position:fixed;bottom:15px;right:15px;z-index:100}\n"] }]
|
|
467
|
+
}], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }, { type: i1.FormsService }, { type: i1.AuthService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i1.CmsService }, { type: i1.ToastService }, { type: i1.FileService }]; }, propDecorators: { modelName: [{
|
|
428
468
|
type: Input
|
|
429
469
|
}], label: [{
|
|
430
470
|
type: Input
|
|
@@ -445,4 +485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
445
485
|
}], finished: [{
|
|
446
486
|
type: Output
|
|
447
487
|
}] } });
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFJVCxrQkFBa0IsRUFNbEIsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBU25HLE1BQU0sT0FBTyxrQkFBa0I7SUFnQzdCLFlBQ1Usa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE1BQWMsRUFDZCxLQUFxQixFQUNyQixVQUFzQixFQUN0QixZQUEwQjtRQVAxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXBDM0IsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLG1CQUFj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UyxLQUFLLFFBQVEsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1RSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7K0dBcGVVLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtUQ3pCL0IsZzlFQStEQTsyRkR0Q2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGlCQUFpQjtpU0FLbEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBCYXNpY1VzZXIsXG4gIEZvcm1zU2VydmljZSxcbiAgR3JhcGhRTE1ldGEsXG4gIEdyYXBoUUxNZXRhU2VydmljZSxcbiAgR3JhcGhRTFJlcXVlc3RUeXBlLFxuICBHcmFwaFFMU2VydmljZSxcbiAgR3JhcGhRTFR5cGUsXG4gIENtc1NlcnZpY2UsXG4gIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gIFRvYXN0U2VydmljZSxcbiAgVG9hc3RUeXBlLFxuICBmdWxsRW1haWwsXG59IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9mYWItYnV0dG9uL2ZhYi1idXR0b24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBkZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBvbmx5VXBkYXRlTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkdXBsaWNhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9nZ2luZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHt9O1xuICBASW5wdXQoKSBzaG93RmF2QnV0dG9uID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIF9sb2FkaW5nID0gZmFsc2U7XG4gIGZpZWxkczogUmVjb3JkPHN0cmluZywgR3JhcGhRTFR5cGU+O1xuICBvcGVyYXRpb246IHN0cmluZztcbiAga2V5czogc3RyaW5nW10gPSBbXTtcbiAgdXNlcjogQmFzaWNVc2VyO1xuICBmYWJCdXR0b25zOiBCdXR0b25bXSA9IFtdO1xuXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcbiAgICAgIH0sIDQwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JhcGhRTFNlcnZpY2U6IEdyYXBoUUxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybXNTZXJ2aWNlOiBGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNtc1NlcnZpY2U6IENtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0IHVzZXIgZm9yIHJvbGVzIGNoZWNrXG4gICAgdGhpcy51c2VyID0gQmFzaWNVc2VyLm1hcCh0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyKTtcblxuICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdEZhYkFjdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBSZWluaXQgZm9ybSBmb3IgbmV3IG1vZGVsIG9yIGxvYWQgYW5kIHBhdGNoIGZvcm0gd2l0aCBuZXcgaWRcbiAgICBpZiAoY2hhbmdlc1snbW9kZWxOYW1lJ10gfHwgY2hhbmdlc1snaWQnXSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqID4gSWYgdGhlIG1vZGVsIG5hbWUgYW5kIG1ldGFkYXRhIGFyZSBwcmVzZW50LCBzZXQgdGhlIG9wZXJhdGlvbiB0byB1cGRhdGUgb3IgY3JlYXRlLCBnZXQgdGhlIGZpZWxkcyBmcm9tIHRoZVxuICAgKiBtZXRhZGF0YSwgY3JlYXRlIHRoZSBmb3JtLCBhbmQgaWYgdGhlIHZhbHVlIGlzIHByZXNlbnQsIHBhdGNoIHRoZSBmb3JtIHdpdGggdGhlIHZhbHVlXG4gICAqL1xuICBpbml0KGlkPzogc3RyaW5nKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlkICYmIHRoaXMub25seVVwZGF0ZU1vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2RlbE5hbWUgJiYgdGhpcy5tZXRhKSB7XG4gICAgICB0aGlzLm9wZXJhdGlvbiA9IHRoaXMuaWQgPyAndXBkYXRlJyA6ICdjcmVhdGUnO1xuXG4gICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPm9wZXJhdGlvbicsIHRoaXMub3BlcmF0aW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+bWV0YS5nZXRBcmdzJyxcbiAgICAgICAgICB0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMubWV0YS5nZXRBcmdzKHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgIH0pLmZpZWxkcztcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZHNbJ2lucHV0J10uZmllbGRzIGFzIGFueTtcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5pZCcsIHRoaXMuaWQpO1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5maWVsZHMnLCB0aGlzLmZpZWxkcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPmtleXMnLCB0aGlzLmtleXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0odGhpcy5maWVsZHMpO1xuXG4gICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICB0aGlzLmdldE9iamVjdEJ5SWQodGhpcy5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEga2V5IGFzIGFuIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBrZXlzIGZyb20gdGhlIHN1Yi1vYmplY3RcbiAgICovXG4gIGdldEtleXNGcm9tU3ViT2JqZWN0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmllbGRzW2tleV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGFuIGlkLCBhbmQgdGhlbiBjYWxscyB0aGUgZ3JhcGhRTFNlcnZpY2UgdG8gZ2V0IHRoZSBvYmplY3QgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBvYmplY3QgdG8gYmUgbG9hZGVkXG4gICAqL1xuICBnZXRPYmplY3RCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+aWQnLCBpZCk7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXRPYmplY3RCeUlkLT5yZXF1ZXN0RmllbGRzJywgdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KHRoaXMuZmllbGRzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwoJ2dldCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgYXJndW1lbnRzOiB7IGlkIH0sXG4gICAgICAgIGZpZWxkczogdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KHRoaXMuZmllbGRzKSxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXQtPnZhbHVlJywgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgLi4ue30sIC4uLnJlc3BvbnNlIH0pO1xuXG4gICAgICAgICAgLy8gUHJvY2VzcyBwYXRjaEZpZWxkcyBmb3IgcmVmZXJlbmNlIGlucHV0XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcpKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBub3QgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy50eXBlID09PSAnUmVmZXJlbmNlJyAmJiAhdGhpcy5maWVsZHNba2V5XT8uaXNMaXN0KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1cbiAgICAgICAgICAgICAgICAgIC5nZXQoa2V5KVxuICAgICAgICAgICAgICAgICAgLnBhdGNoVmFsdWUocmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldPy5pZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy50eXBlID09PSAnUmVmZXJlbmNlJyAmJiB0aGlzLmZpZWxkc1trZXldPy5pc0xpc3QpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVxuICAgICAgICAgICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgICAgICAgICAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldPy5tYXAoKGUpID0+IGU/LmlkKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPnBhdGNoZWRGb3JtJywgdGhpcy5mb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9hZCBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgR3JhcGhRTCB0eXBlIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgb2JqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiAtIFRoaXMgaXMgdGhlIG9iamVjdCB0aGF0IGlzIHJldHVybmVkIGZyb20gdGhlXG4gICAqIGludHJvc3BlY3Rpb24gcXVlcnkuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG9iamVjdHMuXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0T2JqZWN0KGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbikge1xuICAgIGNvbnN0IHJlcXVlc3RGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnW2tleV0/LmV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbmZpZ1trZXldPy5leGNsdWRlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRzW2tleV0/LmZpZWxkcyk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWdba2V5XT8udHlwZSAhPT0gJ1JlZmVyZW5jZScpIHtcbiAgICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2goa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2goeyBbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldOiBbJ2lkJ10gfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1YmtleXMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QoZmllbGRzW2tleV0uZmllbGRzIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pO1xuICAgICAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2tleV0gPSBzdWJrZXlzO1xuICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2gocmVzdWx0T2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpjcmVhdGVSZXF1ZXN0T2JqZWN0LT5yZXF1ZXN0RmllbGRzJywgcmVxdWVzdEZpZWxkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBjb2xsZWN0aW9uIG9mIEdyYXBoUUwgdHlwZXMgYW5kIGNyZWF0ZXMgYSBmb3JtIGdyb3VwIHdpdGggYSBmb3JtIGNvbnRyb2wgZm9yIGVhY2ggdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlRm9ybShmaWVsZHM6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCBncm91cDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWU/LmZpZWxkcyk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm91cFtrZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCB0aGlzLnByb2Nlc3NWYWxpZGF0b3JzKHRoaXMuY29uZmlnW2tleV0sIHZhbHVlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cFtrZXldID0gdGhpcy5jcmVhdGVGb3JtKGZpZWxkc1trZXldLmZpZWxkcyBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpjcmVhdGVGb3JtLT5ncm91cCcsIGdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgZm9ybSB2YWxpZGF0b3JzIGZvciBjb250cm9sXG4gICAqL1xuICBwcm9jZXNzVmFsaWRhdG9ycyhjb25maWc6IGFueSwgdmFsdWU6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfCBHcmFwaFFMVHlwZSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGlmIChjb25maWc/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWc/LnJlcXVpcmVkIDogdmFsdWUuaXNSZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWc/LnR5cGUgPT09ICdFbWFpbCcpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKGZ1bGxFbWFpbCgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZz8udHlwZSA9PT0gJ1Bhc3N3b3JkJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoNikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZz8ubWluID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oY29uZmlnLm1pbikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZz8ubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoY29uZmlnLm1heCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBkZWxldGUgdGhlIG9iamVjdCB3aXRoIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgZGVsZXRlT2JqZWN0KCkge1xuICAgIHRoaXMuY21zU2VydmljZS5kZWxldGVPYmplY3QodGhpcy5pZCwgdGhpcy5tb2RlbE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgIHR5cGU6IFRvYXN0VHlwZS5TVUNDRVNTLFxuICAgICAgICB0aXRsZTogJ0VyZm9sZ3JlaWNoJyxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMubGFiZWwgKyAnIHd1cmRlIGVyZm9sZ3JlaWNoIGdlbMO2c2NodC4nLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgc2VuZHMgYSBHcmFwaFFMIG11dGF0aW9uIHRvIHRoZSBzZXJ2ZXIgdG8gZHVwbGljYXRlIHRoZSBvYmplY3RcbiAgICovXG4gIGFzeW5jIGR1cGxpY2F0ZU9iamVjdCgpIHtcbiAgICB0aGlzLmNtc1NlcnZpY2UuZHVwbGljYXRlT2JqZWN0KHRoaXMuaWQsIHRoaXMubW9kZWxOYW1lKS50aGVuKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlPy5pZCkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMubGFiZWwgKyAnIHd1cmRlIGVyZm9sZ3JlaWNoIGR1cGxpemllcnQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgcmV0dXJuZWQuXG4gICAqL1xuICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNtc1NlcnZpY2UuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgdGhlIGtleSBvZiB0aGUgZm9ybSBjb250cm9sIHRoYXQgaGFzIGNoYW5nZWQsIGdldHMgdGhlIHZhbHVlIG9mIHRoYXQgZm9ybSBjb250cm9sLCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgKiBrZXkgYW5kIHZhbHVlLCBhbmQgdGhlbiBzZW5kcyB0aGF0IG9iamVjdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXIgdG8gdXBkYXRlIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgaW1hZ2VDaGFuZ2VkKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIGRhdGFba2V5XSA9IHRoaXMuZm9ybS5nZXQoa2V5KS52YWx1ZTtcblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+Ym9keScsIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAgICAgLmdyYXBoUWwoJ3VwZGF0ZScgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICAgIGFyZ3VtZW50czogeyBpZDogdGhpcy5pZCwgaW5wdXQ6IGRhdGEgfSxcbiAgICAgICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+c3VjY2VzcycsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+ZXJyb3InLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KHNlY3JldCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCAmJiAhc2VjcmV0KSB7XG4gICAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0gYXMgYW55KTtcbiAgICAgICAgdGhpcy5mb3Jtc1NlcnZpY2Uuc2Nyb2xsVG9JbnZhbGlkQ29udHJvbCh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICF0aGlzLmlkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lEIGlzIG1pc3NpbmcgZm9yIHVwZGF0ZSEnKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPmZvcm1WYWx1ZScsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmNvbmZpZ1trZXldPy5yb2xlcyA/ICF0aGlzLnVzZXIuaGFzQWxsUm9sZXModGhpcy5jb25maWdba2V5XT8ucm9sZXMpIDogZmFsc2UpIHx8XG4gICAgICAgICAgdGhpcy5jb25maWdba2V5XT8uZXhjbHVkZVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gT2JqZWN0LmtleXMoZGF0YVtrZXldKVxuICAgICAgICAgICAgLmZpbHRlcigoaykgPT4gZGF0YVtrZXldW2tdICE9IG51bGwpXG4gICAgICAgICAgICAucmVkdWNlKChhLCBrKSA9PiAoeyAuLi5hLCBba106IGRhdGFba2V5XVtrXSB9KSwge30pO1xuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGFba2V5XSk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnT2JqZWN0IGlzIGVtcHR5IGZyb20gcmVzdWx0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0eXBlIGZvciBncmFwaHFsIG1ldGhvZFxuICAgICAgICBpZiAodGhpcy5maWVsZHNba2V5XT8udHlwZSA9PT0gJ0Zsb2F0Jykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPnZhbHVlVG9HcmFwaHFsJywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgLmdyYXBoUWwodGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiBkYXRhIH0gOiB7IGlucHV0OiBkYXRhIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICB0aGlzLmxhYmVsICsgJyB3dXJkZSBlcmZvbGdyZWljaCAnICsgKHRoaXMub3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdlcnN0ZWxsdC4nIDogJ2FrdHVhbGlzaWVydC4nKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCBvbiAnICsgdGhpcy5vcGVyYXRpb24sIGVycik7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLkVSUk9SLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgJ0JlaW0gJyArXG4gICAgICAgICAgICAgICAgICAodGhpcy5vcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ2Vyc3RlbGxlbicgOiAnYWt0dWFsaXNpZXJlbicpICtcbiAgICAgICAgICAgICAgICAgICcgdm9uICcgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5sYWJlbCArXG4gICAgICAgICAgICAgICAgICAnIGlzdCBldHdhcyBzY2hpZWZnZWxhdWZlbi4nLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBmYWIgYnV0dG9ucyBmb3IgbW9iaWxlIGRldmljZXNcbiAgICovXG4gIGluaXRGYWJBY3Rpb25zKCkge1xuICAgIGNvbnN0IHNhdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICB0aGlzLmZhYkJ1dHRvbnMucHVzaCh7IGljb246ICdiaS1jaGVjay1sZycsIGNvbG9yOiAndmFyKC0tYnMtc3VjY2VzcyknLCBldmVudDogc2F2ZUV2ZW50IH0pO1xuICAgIHNhdmVFdmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWJtaXQoZmFsc2UpKTtcblxuICAgIGlmICh0aGlzLmR1cGxpY2F0ZSAmJiB0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICAgdGhpcy5mYWJCdXR0b25zLnB1c2goeyBpY29uOiAnYmktYmFjaycsIGNvbG9yOiAndmFyKC0tYnMtaW5mbyknLCBldmVudCB9KTtcbiAgICAgIGV2ZW50LnN1YnNjcmliZSgoKSA9PiB0aGlzLmR1cGxpY2F0ZU9iamVjdCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICAgIHRoaXMuZmFiQnV0dG9ucy5wdXNoKHsgaWNvbjogJ2JpLXgtbGcnLCBjb2xvcjogJ3ZhcigtLWJzLWRhbmdlciknLCBldmVudCB9KTtcbiAgICAgIGV2ZW50LnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlbGV0ZU9iamVjdCgpKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiZm9ybVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVzcG9uc2l2ZS1iYWNrIGQtZmxleCBkLWxnLW5vbmVcIj5cbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktYXJyb3ctbGVmdFwiIHJvdXRlckxpbms9XCIuLi9cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGgyIGNsYXNzPVwibWItMFwiPlxuICAgICAge3sgbGFiZWwgPyBsYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihtb2RlbE5hbWUpIH19IHt7IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnYmVhcmJlaXRlbicgOiAnZXJzdGVsbGVuJyB9fVxuICAgIDwvaDI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbGctZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1lLTJcIiAqbmdJZj1cImlkICYmIGR1cGxpY2F0ZSAmJiAhX2xvYWRpbmdcIiAoY2xpY2spPVwiZHVwbGljYXRlT2JqZWN0KClcIj5cbiAgICAgICAgRHVwbGl6aWVyZW5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udG91Y2hlZCAmJiAhZm9ybS5kaXJ0eVwiXG4gICAgICAgIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCJcbiAgICAgICAgKm5nSWY9XCIhX2xvYWRpbmdcIlxuICAgICAgPlxuICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwiX2xvYWRpbmdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPGJhc2UtbW9kZWwtZm9ybS1zdWJcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgKGltYWdlQ2hhbmdlZCk9XCJpbWFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgPjwvYmFzZS1tb2RlbC1mb3JtLXN1Yj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1sZy1mbGV4IG10LTRcIiBbbmdDbGFzc109XCJpZCAmJiBkZWxldGUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1lbmQnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWQgJiYgZGVsZXRlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlT2JqZWN0KClcIj5Mw7ZzY2hlbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS50b3VjaGVkICYmICFmb3JtLmRpcnR5XCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0KGZhbHNlKVwiXG4gICAgICAgICAgKm5nSWY9XCIhX2xvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJfbG9hZGluZ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZC1ibG9jayBkLWxnLW5vbmUgcmVzcG9uc2l2ZS1hY3Rpb24tYnV0dG9uXCIgKm5nSWY9XCJzaG93RmF2QnV0dG9uXCI+XG4gIDxiYXNlLWZhYi1idXR0b24gW2J1dHRvbnNdPVwiZmFiQnV0dG9uc1wiPjwvYmFzZS1mYWItYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFJVCxTQUFTLEVBR1Qsa0JBQWtCLEVBS2xCLFNBQVMsR0FDVixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBU25HLE1BQU0sT0FBTyxrQkFBa0I7SUFrQzdCLFlBQ1Usa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE1BQWMsRUFDZCxLQUFxQixFQUNyQixVQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QjtRQVJ4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FB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QUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDOzsrR0EvaEJVLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtUQzFCL0Isb2dGQWdFQTsyRkR0Q2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGlCQUFpQjsyVEFLbEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBCYXNpY1VzZXIsXG4gIENtc1NlcnZpY2UsXG4gIEZpbGVTZXJ2aWNlLFxuICBGb3Jtc1NlcnZpY2UsXG4gIGZ1bGxFbWFpbCxcbiAgR3JhcGhRTE1ldGEsXG4gIEdyYXBoUUxNZXRhU2VydmljZSxcbiAgR3JhcGhRTFJlcXVlc3RUeXBlLFxuICBHcmFwaFFMU2VydmljZSxcbiAgR3JhcGhRTFR5cGUsXG4gIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gIFRvYXN0U2VydmljZSxcbiAgVG9hc3RUeXBlLFxufSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vZmFiLWJ1dHRvbi9mYWItYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGVsZXRlID0gdHJ1ZTtcbiAgQElucHV0KCkgb25seVVwZGF0ZU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZHVwbGljYXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvZ2dpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgc2hvd0ZhdkJ1dHRvbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZpbmlzaGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG1ldGE6IEdyYXBoUUxNZXRhO1xuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBfbG9hZGluZyA9IGZhbHNlO1xuICBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdyYXBoUUxUeXBlPjtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZ1tdID0gW107XG4gIHVzZXI6IEJhc2ljVXNlcjtcbiAgb2JqZWN0OiBhbnk7XG4gIGZhYkJ1dHRvbnM6IEJ1dHRvbltdID0gW107XG4gIGZpbGVDaGFuZ2VzOiBbeyBmaWVsZDogc3RyaW5nOyBmaWxlOiBGaWxlIHwgbnVsbCB9XTtcblxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgICB9LCA0MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjbXNTZXJ2aWNlOiBDbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCB1c2VyIGZvciByb2xlcyBjaGVja1xuICAgIHRoaXMudXNlciA9IEJhc2ljVXNlci5tYXAodGhpcy5hdXRoU2VydmljZS5jdXJyZW50VXNlcik7XG5cbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmluaXRGYWJBY3Rpb25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gUmVpbml0IGZvcm0gZm9yIG5ldyBtb2RlbCBvciBsb2FkIGFuZCBwYXRjaCBmb3JtIHdpdGggbmV3IGlkXG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddIHx8IGNoYW5nZXNbJ2lkJ10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA+IElmIHRoZSBtb2RlbCBuYW1lIGFuZCBtZXRhZGF0YSBhcmUgcHJlc2VudCwgc2V0IHRoZSBvcGVyYXRpb24gdG8gdXBkYXRlIG9yIGNyZWF0ZSwgZ2V0IHRoZSBmaWVsZHMgZnJvbSB0aGVcbiAgICogbWV0YWRhdGEsIGNyZWF0ZSB0aGUgZm9ybSwgYW5kIGlmIHRoZSB2YWx1ZSBpcyBwcmVzZW50LCBwYXRjaCB0aGUgZm9ybSB3aXRoIHRoZSB2YWx1ZVxuICAgKi9cbiAgaW5pdChpZD86IHN0cmluZykge1xuICAgIGlmIChpZCkge1xuICAgICAgdGhpcy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pZCAmJiB0aGlzLm9ubHlVcGRhdGVNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5vcGVyYXRpb24gPSB0aGlzLmlkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5vcGVyYXRpb24nLCB0aGlzLm9wZXJhdGlvbik7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPm1ldGEuZ2V0QXJncycsXG4gICAgICAgICAgdGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLm1ldGEuZ2V0QXJncyh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICB9KS5maWVsZHM7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRzWydpbnB1dCddLmZpZWxkcyBhcyBhbnk7XG4gICAgICB0aGlzLmtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+aWQnLCB0aGlzLmlkKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+ZmllbGRzJywgdGhpcy5maWVsZHMpO1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5rZXlzJywgdGhpcy5rZXlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVGb3JtKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgdGhpcy5nZXRPYmplY3RCeUlkKHRoaXMuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGtleSBhcyBhbiBhcmd1bWVudCwgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBzdWItb2JqZWN0XG4gICAqL1xuICBnZXRLZXlzRnJvbVN1Yk9iamVjdChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkc1trZXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBpZCwgYW5kIHRoZW4gY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGxvYWRlZFxuICAgKi9cbiAgZ2V0T2JqZWN0QnlJZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPmlkJywgaWQpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+cmVxdWVzdEZpZWxkcycsIHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcykpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKCdnZXQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogeyBpZCB9LFxuICAgICAgICBmaWVsZHM6IHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcyksXG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0LT52YWx1ZScsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9iamVjdCA9IHJlc3BvbnNlO1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgLi4ue30sIC4uLnJlc3BvbnNlIH0pO1xuXG4gICAgICAgICAgLy8gUHJvY2VzcyBwYXRjaEZpZWxkcyBmb3IgcmVmZXJlbmNlIGlucHV0XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcpKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBub3QgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy50eXBlID09PSAnUmVmZXJlbmNlJyAmJiAhdGhpcy5maWVsZHNba2V5XT8uaXNMaXN0KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1cbiAgICAgICAgICAgICAgICAgIC5nZXQoa2V5KVxuICAgICAgICAgICAgICAgICAgLnBhdGNoVmFsdWUocmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldPy5pZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy50eXBlID09PSAnUmVmZXJlbmNlJyAmJiB0aGlzLmZpZWxkc1trZXldPy5pc0xpc3QpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVxuICAgICAgICAgICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgICAgICAgICAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldPy5tYXAoKGUpID0+IGU/LmlkKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPnBhdGNoZWRGb3JtJywgdGhpcy5mb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9hZCBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgR3JhcGhRTCB0eXBlIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgb2JqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiAtIFRoaXMgaXMgdGhlIG9iamVjdCB0aGF0IGlzIHJldHVybmVkIGZyb20gdGhlXG4gICAqIGludHJvc3BlY3Rpb24gcXVlcnkuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG9iamVjdHMuXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0T2JqZWN0KGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbikge1xuICAgIGNvbnN0IHJlcXVlc3RGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnW2tleV0/LmV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbmZpZ1trZXldPy5leGNsdWRlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRzW2tleV0/LmZpZWxkcyk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWdba2V5XT8udHlwZSAhPT0gJ1JlZmVyZW5jZScpIHtcbiAgICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2goa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2goeyBbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA/IHRoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgOiBrZXldOiBbJ2lkJ10gfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1YmtleXMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QoZmllbGRzW2tleV0uZmllbGRzIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pO1xuICAgICAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2tleV0gPSBzdWJrZXlzO1xuICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2gocmVzdWx0T2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpjcmVhdGVSZXF1ZXN0T2JqZWN0LT5yZXF1ZXN0RmllbGRzJywgcmVxdWVzdEZpZWxkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBjb2xsZWN0aW9uIG9mIEdyYXBoUUwgdHlwZXMgYW5kIGNyZWF0ZXMgYSBmb3JtIGdyb3VwIHdpdGggYSBmb3JtIGNvbnRyb2wgZm9yIGVhY2ggdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlRm9ybShmaWVsZHM6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCBncm91cDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWU/LmZpZWxkcyk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm91cFtrZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCB0aGlzLnByb2Nlc3NWYWxpZGF0b3JzKHRoaXMuY29uZmlnW2tleV0sIHZhbHVlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cFtrZXldID0gdGhpcy5jcmVhdGVGb3JtKGZpZWxkc1trZXldLmZpZWxkcyBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpjcmVhdGVGb3JtLT5ncm91cCcsIGdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgZm9ybSB2YWxpZGF0b3JzIGZvciBjb250cm9sXG4gICAqL1xuICBwcm9jZXNzVmFsaWRhdG9ycyhjb25maWc6IGFueSwgdmFsdWU6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfCBHcmFwaFFMVHlwZSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGlmIChjb25maWc/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWc/LnJlcXVpcmVkIDogdmFsdWUuaXNSZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWc/LnR5cGUgPT09ICdFbWFpbCcpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKGZ1bGxFbWFpbCgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZz8udHlwZSA9PT0gJ1Bhc3N3b3JkJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoNikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZz8ubWluID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oY29uZmlnLm1pbikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZz8ubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoY29uZmlnLm1heCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBkZWxldGUgdGhlIG9iamVjdCB3aXRoIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgZGVsZXRlT2JqZWN0KCkge1xuICAgIHRoaXMuY21zU2VydmljZS5kZWxldGVPYmplY3QodGhpcy5pZCwgdGhpcy5tb2RlbE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgIHR5cGU6IFRvYXN0VHlwZS5TVUNDRVNTLFxuICAgICAgICB0aXRsZTogJ0VyZm9sZ3JlaWNoJyxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMubGFiZWwgKyAnIHd1cmRlIGVyZm9sZ3JlaWNoIGdlbMO2c2NodC4nLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgc2VuZHMgYSBHcmFwaFFMIG11dGF0aW9uIHRvIHRoZSBzZXJ2ZXIgdG8gZHVwbGljYXRlIHRoZSBvYmplY3RcbiAgICovXG4gIGFzeW5jIGR1cGxpY2F0ZU9iamVjdCgpIHtcbiAgICB0aGlzLmNtc1NlcnZpY2UuZHVwbGljYXRlT2JqZWN0KHRoaXMuaWQsIHRoaXMubW9kZWxOYW1lKS50aGVuKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlPy5pZCkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMubGFiZWwgKyAnIHd1cmRlIGVyZm9sZ3JlaWNoIGR1cGxpemllcnQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgcmV0dXJuZWQuXG4gICAqL1xuICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNtc1NlcnZpY2UuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgdGhlIGtleSBvZiB0aGUgZm9ybSBjb250cm9sIHRoYXQgaGFzIGNoYW5nZWQsIGdldHMgdGhlIHZhbHVlIG9mIHRoYXQgZm9ybSBjb250cm9sLCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgKiBrZXkgYW5kIHZhbHVlLCBhbmQgdGhlbiBzZW5kcyB0aGF0IG9iamVjdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXIgdG8gdXBkYXRlIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgaW1hZ2VDaGFuZ2VkKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIGRhdGFba2V5XSA9IHRoaXMuZm9ybS5nZXQoa2V5KS52YWx1ZTtcblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+Ym9keScsIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAgICAgLmdyYXBoUWwoJ3VwZGF0ZScgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICAgIGFyZ3VtZW50czogeyBpZDogdGhpcy5pZCwgaW5wdXQ6IGRhdGEgfSxcbiAgICAgICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+c3VjY2VzcycsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmltYWdlQ2hhbmdlZC0+ZXJyb3InLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KHNlY3JldCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCAmJiAhc2VjcmV0KSB7XG4gICAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0gYXMgYW55KTtcbiAgICAgICAgdGhpcy5mb3Jtc1NlcnZpY2Uuc2Nyb2xsVG9JbnZhbGlkQ29udHJvbCh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICF0aGlzLmlkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lEIGlzIG1pc3NpbmcgZm9yIHVwZGF0ZSEnKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPmZvcm1WYWx1ZScsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmNvbmZpZ1trZXldPy5yb2xlcyA/ICF0aGlzLnVzZXIuaGFzQWxsUm9sZXModGhpcy5jb25maWdba2V5XT8ucm9sZXMpIDogZmFsc2UpIHx8XG4gICAgICAgICAgdGhpcy5jb25maWdba2V5XT8uZXhjbHVkZVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gT2JqZWN0LmtleXMoZGF0YVtrZXldKVxuICAgICAgICAgICAgLmZpbHRlcigoaykgPT4gZGF0YVtrZXldW2tdICE9IG51bGwpXG4gICAgICAgICAgICAucmVkdWNlKChhLCBrKSA9PiAoeyAuLi5hLCBba106IGRhdGFba2V5XVtrXSB9KSwge30pO1xuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGFba2V5XSk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnT2JqZWN0IGlzIGVtcHR5IGZyb20gcmVzdWx0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0eXBlIGZvciBncmFwaHFsIG1ldGhvZFxuICAgICAgICBpZiAodGhpcy5maWVsZHNba2V5XT8udHlwZSA9PT0gJ0Zsb2F0Jykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPnZhbHVlVG9HcmFwaHFsJywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbGVDaGFuZ2VzPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlQ2hhbmdlIG9mIHRoaXMuZmlsZUNoYW5nZXMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBmaWxlQ2hhbmdlLmZpZWxkO1xuICAgICAgICAgIGlmIChmaWxlQ2hhbmdlLmZpbGUpIHtcbiAgICAgICAgICAgIC8vIFVwbG9hZFxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5nZXQoa2V5KS52YWx1ZSkge1xuICAgICAgICAgICAgICAvLyBEZWxldGVcbiAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5kZWxldGUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdba2V5XT8udXJsLFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2tleV0/LmRlbGV0ZVBhdGggfHwgJy9maWxlcy8nLFxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0W2tleV1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoZGVsZXRlUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS51cGxvYWQoXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnW2tleV0/LnVybCxcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdba2V5XT8udXBsb2FkUGF0aCB8fCAnL2ZpbGVzL3VwbG9hZCcsXG4gICAgICAgICAgICAgIGZpbGVDaGFuZ2UuZmlsZSxcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdba2V5XT8uY29tcHJlc3NPcHRpb25zXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodXBsb2FkUmVzdWx0Py5pZCkge1xuICAgICAgICAgICAgICBkYXRhW2tleV0gPSB1cGxvYWRSZXN1bHQuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlbGV0ZVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5kZWxldGUoXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnW2tleV0/LnVybCxcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdba2V5XT8uZGVsZXRlUGF0aCB8fCAnL2ZpbGVzLycsXG4gICAgICAgICAgICAgIHRoaXMub2JqZWN0W2tleV1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgLmdyYXBoUWwodGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiBkYXRhIH0gOiB7IGlucHV0OiBkYXRhIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICB0aGlzLmxhYmVsICsgJyB3dXJkZSBlcmZvbGdyZWljaCAnICsgKHRoaXMub3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdlcnN0ZWxsdC4nIDogJ2FrdHVhbGlzaWVydC4nKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCBvbiAnICsgdGhpcy5vcGVyYXRpb24sIGVycik7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLkVSUk9SLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgJ0JlaW0gJyArXG4gICAgICAgICAgICAgICAgICAodGhpcy5vcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ2Vyc3RlbGxlbicgOiAnYWt0dWFsaXNpZXJlbicpICtcbiAgICAgICAgICAgICAgICAgICcgdm9uICcgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5sYWJlbCArXG4gICAgICAgICAgICAgICAgICAnIGlzdCBldHdhcyBzY2hpZWZnZWxhdWZlbi4nLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBmYWIgYnV0dG9ucyBmb3IgbW9iaWxlIGRldmljZXNcbiAgICovXG4gIGluaXRGYWJBY3Rpb25zKCkge1xuICAgIGNvbnN0IHNhdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICB0aGlzLmZhYkJ1dHRvbnMucHVzaCh7IGljb246ICdiaS1jaGVjay1sZycsIGNvbG9yOiAndmFyKC0tYnMtc3VjY2VzcyknLCBldmVudDogc2F2ZUV2ZW50IH0pO1xuICAgIHNhdmVFdmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWJtaXQoZmFsc2UpKTtcblxuICAgIGlmICh0aGlzLmR1cGxpY2F0ZSAmJiB0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICAgdGhpcy5mYWJCdXR0b25zLnB1c2goeyBpY29uOiAnYmktYmFjaycsIGNvbG9yOiAndmFyKC0tYnMtaW5mbyknLCBldmVudCB9KTtcbiAgICAgIGV2ZW50LnN1YnNjcmliZSgoKSA9PiB0aGlzLmR1cGxpY2F0ZU9iamVjdCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmIHRoaXMuZGVsZXRlKSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICAgIHRoaXMuZmFiQnV0dG9ucy5wdXNoKHsgaWNvbjogJ2JpLXRyYXNoMycsIGNvbG9yOiAndmFyKC0tYnMtZGFuZ2VyKScsIGV2ZW50IH0pO1xuICAgICAgZXZlbnQuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVsZXRlT2JqZWN0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NGaWxlQ2hhbmdlcyhldmVudDogeyBmaWVsZDogc3RyaW5nOyBmaWxlOiBGaWxlIHwgbnVsbCB9KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbGVDaGFuZ2VzPy5maW5kSW5kZXgoKGUpID0+IGUuZmllbGQgPT09IGV2ZW50LmZpZWxkKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWxlQ2hhbmdlc1tpbmRleF0gPSBldmVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZXMucHVzaChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZXMgPSBbZXZlbnRdO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJmb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyZXNwb25zaXZlLWJhY2sgZC1mbGV4IGQtbGctbm9uZVwiPlxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1hcnJvdy1sZWZ0XCIgcm91dGVyTGluaz1cIi4uL1wiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8aDIgY2xhc3M9XCJtYi0wXCI+XG4gICAgICB7eyBsYWJlbCA/IGxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX0ge3sgb3BlcmF0aW9uID09PSAndXBkYXRlJyA/ICdiZWFyYmVpdGVuJyA6ICdlcnN0ZWxsZW4nIH19XG4gICAgPC9oMj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1sZy1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWUtMlwiICpuZ0lmPVwiaWQgJiYgZHVwbGljYXRlICYmICFfbG9hZGluZ1wiIChjbGljayk9XCJkdXBsaWNhdGVPYmplY3QoKVwiPlxuICAgICAgICBEdXBsaXppZXJlblxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS50b3VjaGVkICYmICFmb3JtLmRpcnR5XCJcbiAgICAgICAgKGNsaWNrKT1cInN1Ym1pdChmYWxzZSlcIlxuICAgICAgICAqbmdJZj1cIiFfbG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJfbG9hZGluZ1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8YmFzZS1tb2RlbC1mb3JtLXN1YlxuICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAoaW1hZ2VDaGFuZ2VkKT1cImltYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmaWxlQ2hhbmdlZCk9XCJwcm9jZXNzRmlsZUNoYW5nZXMoJGV2ZW50KVwiXG4gICAgPjwvYmFzZS1tb2RlbC1mb3JtLXN1Yj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1sZy1mbGV4IG10LTRcIiBbbmdDbGFzc109XCJpZCAmJiBkZWxldGUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1lbmQnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWQgJiYgZGVsZXRlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlT2JqZWN0KClcIj5Mw7ZzY2hlbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS50b3VjaGVkICYmICFmb3JtLmRpcnR5XCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0KGZhbHNlKVwiXG4gICAgICAgICAgKm5nSWY9XCIhX2xvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJfbG9hZGluZ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZC1ibG9jayBkLWxnLW5vbmUgcmVzcG9uc2l2ZS1hY3Rpb24tYnV0dG9uXCIgKm5nSWY9XCJzaG93RmF2QnV0dG9uXCI+XG4gIDxiYXNlLWZhYi1idXR0b24gW2J1dHRvbnNdPVwiZmFiQnV0dG9uc1wiPjwvYmFzZS1mYWItYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|