@arsedizioni/ars-utils 18.2.118 → 18.2.120
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/clipper.common/common/definitions.d.ts +0 -1
- package/clipper.ui/documents.d.ts +2 -38
- package/clipper.ui/public_api.d.ts +1 -1
- package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +12 -30
- package/clipper.ui/ui/document/document.component.d.ts +3 -7
- package/clipper.ui/ui/document-manager/document-manager.d.ts +28 -47
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +3 -6
- package/clipper.ui/ui/references/references.component.d.ts +0 -3
- package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +3 -31
- package/esm2022/clipper.common/common/definitions.mjs +1 -2
- package/esm2022/clipper.ui/documents.mjs +2 -166
- package/esm2022/clipper.ui/public_api.mjs +2 -2
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +26 -55
- package/esm2022/clipper.ui/ui/document/document.component.mjs +14 -18
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +98 -102
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +9 -19
- package/esm2022/clipper.ui/ui/references/references.component.mjs +7 -8
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +5 -77
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +0 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2449 -2721
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Component, computed,
|
|
1
|
+
import { Component, computed, input } from '@angular/core';
|
|
2
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
2
3
|
import { MatDividerModule } from '@angular/material/divider';
|
|
3
4
|
import { MatIconModule } from '@angular/material/icon';
|
|
4
5
|
import { MatMenuModule } from '@angular/material/menu';
|
|
5
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
6
|
-
import { ClipperService } from '@arsedizioni/ars-utils/clipper.common';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
8
7
|
import * as i1 from "@angular/material/menu";
|
|
9
8
|
import * as i2 from "@angular/material/icon";
|
|
@@ -11,29 +10,20 @@ import * as i3 from "@angular/material/divider";
|
|
|
11
10
|
import * as i4 from "@angular/material/tooltip";
|
|
12
11
|
export class ClipperDocumentMenuComponent {
|
|
13
12
|
constructor() {
|
|
14
|
-
this.
|
|
13
|
+
this.parent = input();
|
|
15
14
|
this.selectionSource = input('selection');
|
|
16
15
|
this.selection = computed(() => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return this.clipperService.bag;
|
|
21
|
-
case 'selection':
|
|
22
|
-
return this.parent()?.selection?.all;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return [];
|
|
16
|
+
return this.selectionSource() === 'selection'
|
|
17
|
+
? this.parent().selection?.all
|
|
18
|
+
: this.parent().clipperService.bag;
|
|
26
19
|
});
|
|
27
20
|
this.useSelections = input(false);
|
|
28
|
-
this.parent = input();
|
|
29
21
|
this.item = input();
|
|
30
22
|
this.isReference = input(false);
|
|
31
23
|
this.isReadable = input(true);
|
|
32
24
|
this.isDeadline = input(false);
|
|
33
25
|
this.isLawInForce = input(false);
|
|
34
26
|
this.isLaw = input(false);
|
|
35
|
-
this.canPrint = input(false);
|
|
36
|
-
this.canFind = input(false);
|
|
37
27
|
}
|
|
38
28
|
/**
|
|
39
29
|
* Check if current item or selection is read
|
|
@@ -58,10 +48,10 @@ export class ClipperDocumentMenuComponent {
|
|
|
58
48
|
this.parent()?.setRead(value, this.item());
|
|
59
49
|
}
|
|
60
50
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
61
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: {
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent().exportPdf(item() ? item() : selection()[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n <mat-divider></mat-divider>\r\n \r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead === true)) {\r\n <button mat-menu-item\r\n [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n }\r\n @if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !== true)) {\r\n <button mat-menu-item \r\n [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n </button>\r\n }\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent().references(item() ? item() : selection()[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent().references(item() ? item() : selection()[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n}\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
62
52
|
}
|
|
63
53
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, decorators: [{
|
|
64
54
|
type: Component,
|
|
65
|
-
args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent()
|
|
55
|
+
args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent().exportPdf(item() ? item() : selection()[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n <mat-divider></mat-divider>\r\n \r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead === true)) {\r\n <button mat-menu-item\r\n [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n }\r\n @if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !== true)) {\r\n <button mat-menu-item \r\n [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n </button>\r\n }\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent().references(item() ? item() : selection()[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent().references(item() ? item() : selection()[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n}\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n" }]
|
|
66
56
|
}] });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7QUFZNUYsTUFBTSxPQUFPLDRCQUE0QjtJQVB6QztRQVNVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRS9DLG9CQUFlLEdBQUcsS0FBSyxDQUErQixXQUFXLENBQUMsQ0FBQztRQUN6RCxjQUFTLEdBQWtDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztvQkFDL0IsS0FBSyxLQUFLO3dCQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ2pDLEtBQUssV0FBVzt3QkFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7UUFDSCxrQkFBYSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0QyxXQUFNLEdBQUcsS0FBSyxFQUE4QixDQUFDO1FBQzdDLFNBQUksR0FBRyxLQUFLLEVBQXVCLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLFVBQUssR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBd0JqQztJQXRCQzs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0EvQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK2dEQ2pCekMsb3pNQThJVyx5REQvSEMsYUFBYSw2dkJBQUUsYUFBYSxtTEFBRSxnQkFBZ0Isa0lBQUUsZ0JBQWdCOzsyRkFFL0QsNEJBQTRCO2tCQVB4QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlclNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjbGlwcGVyLWRvY3VtZW50LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgIHtcclxuXHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSlcclxuXHJcbiAgc2VsZWN0aW9uU291cmNlID0gaW5wdXQ8J2JhZycgfCAnc2VsZWN0aW9uJyB8ICdub25lJz4oJ3NlbGVjdGlvbicpO1xyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb246IFNpZ25hbDxDbGlwcGVyRG9jdW1lbnRJbmZvW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMudXNlU2VsZWN0aW9ucygpKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ2JhZyc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jbGlwcGVyU2VydmljZS5iYWc7XHJcbiAgICAgICAgY2FzZSAnc2VsZWN0aW9uJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH0pO1xyXG4gIHVzZVNlbGVjdGlvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgcGFyZW50ID0gaW5wdXQ8Q2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXI+KCk7XHJcbiAgaXRlbSA9IGlucHV0PENsaXBwZXJEb2N1bWVudEluZm8+KCk7XHJcbiAgaXNSZWZlcmVuY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNSZWFkYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIGlzRGVhZGxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXdJbkZvcmNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTGF3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhblByaW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbkZpbmQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgaXRlbSBvciBzZWxlY3Rpb24gaXMgcmVhZFxyXG4gICAqIEByZXR1cm5zIDAgaWYgbm90IHJlYWQsIDEgaWYgcmVhZCwgMiBpZiB1bmtub3duXHJcbiAgICovXHJcbiAgaXNSZWFkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHJldHVybiB0aGlzLml0ZW0oKS5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIGlmICh0aGlzLnBhcmVudCgpPy5oYXNBbnlTZWxlY3Rpb24oKSkgcmV0dXJuIDI7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMucGFyZW50KCk/LmdldFNpbmdsZVNlbGVjdGlvbigpO1xyXG4gICAgaWYgKGZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbi5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBpcyByZWFkIGZsYWcgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWU6IHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBzZXRSZWFkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBhcmVudCgpPy5zZXRSZWFkKHZhbHVlLCB0aGlzLml0ZW0oKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJAaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnc2VsZWN0aW9uJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5zZWxlY3Rpb24/LmNsZWFyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidEZXNlbGV6aW9uYSB0dXR0aSdcIj5cclxuICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPkRlc2VsZXppb25hIHR1dHRpXHJcbjwvYnV0dG9uPlxyXG59IEBlbHNlIGlmIChzZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ2JhZycpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKT8ub3BlbkJhZygpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInR2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9ybydcIj5cclxuICA8bWF0LWljb24+d29ya19vdXRsaW5lPC9tYXQtaWNvbj5HZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoc2VsZWN0aW9uU291cmNlKCkpIHtcclxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbn1cclxuQGlmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpIGRvY3VtZW50bydcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKT8ub3BlbihpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQpXCI+XHJcbiAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuUHJpbnQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5wcmludCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU3RhbXBhIGRvY3VtZW50bydcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxzcGFuIGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPnByaW50PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+U3RhbXBhPC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJhY2NlbnQgc21hbGwgYm9sZFwiPkN0cmwrUDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9idXR0b24+XHJcbn1cclxuQGlmKGNhbkZpbmQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5maW5kKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUcm92YSBuZWwgZG9jdW1lbnRvJ1wiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPHNwYW4gZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZmluZF9pbl9wYWdlPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+VHJvdmEgbmVsIGRvY3VtZW50bzwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DdHJsK0Y8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoc2VsZWN0aW9uU291cmNlKCkgIT09ICdiYWcnKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dpdW5naSBhaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpPy5hZGRJdGVtc1RvQmFnKGl0ZW0oKSA/IFtpdGVtKCldIDogc2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPiAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKT8uc2VuZEl0ZW1zVG8oaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSlcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCI+XHJcbiAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCgoaXRlbSgpICYmIGl0ZW0oKS5tb2RlbCAhPSAxMSkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEgJiYgc2VsZWN0aW9uKClbMF0ubW9kZWwgIT0gMTEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5leHBvcnRQZGYoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTYWx2YSBkb2N1bWVudG8gaW4gcGRmJ1wiPlxyXG4gIDxtYXQtaWNvbj5zYXZlX2FsdDwvbWF0LWljb24+U2FsdmEgaW4gcGRmXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmEgdW4gbGluayBwZXJtYW5lbnRlIGRhIHV0aWxpenphcmUgZXN0ZXJuYW1lbnRlJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpPy5zaG93TGluayhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+bGluazwvbWF0LWljb24+TGlua1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxpbmtzTWVudVwiPlxyXG4gIDxtYXQtaWNvbj5jb21wYXJlX2Fycm93czwvbWF0LWljb24+Q29sbGVnYW1lbnRpXHJcbjwvYnV0dG9uPlxyXG59XHJcblxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzUmVhZGFibGUoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCA9PT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCA9PT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIj5cclxuICA8bWF0LWljb24+b3V0bGluZWRfZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBkYSBsZWdnZXJlXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCAhPT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCAhPT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZ2nDoCBsZXR0bydcIiAoY2xpY2spPVwic2V0UmVhZCh0cnVlKVwiPlxyXG4gIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5cclxuQGlmICgoaXNMYXdJbkZvcmNlKCkgfHwgaXNEZWFkbGluZSgpKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSByZXBvcnQgdXRpbGl6em8nXCIgKGNsaWNrKT1cInBhcmVudCgpPy5yZXBvcnQoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG48bWF0LW1lbnUgI2xpbmtzTWVudT1cIm1hdE1lbnVcIj5cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgcmljaGlhbWF0aSBkYSBxdWVzdG8nXCJcclxuICAgIChjbGljayk9XCJwYXJlbnQoKT8ub3BlblJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpLmRvY3VtZW50SWQgOiBzZWxlY3Rpb24oKVswXS5kb2N1bWVudElkLCAxKVwiPlxyXG4gICAgRG9jdW1lbnRpIHJpY2hpYW1hdGlcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICggIWlzUmVmZXJlbmNlKCkgJiYoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGkgZG9jdW1lbnRpIGNoZSByaWNoaWFtYW5vIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpPy5vcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDIpXCI+XHJcbiAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGdpdXJpc3BydWRlbnphJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgNClcIj5cclxuICAgIEp1cmlzXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgaXNMYXdJbkZvcmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBtb2RpZmljaGUgbm9ybWF0aXZlJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9tYXQtbWVudT5cclxuQGlmICgoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID4gMCkgJiYgcGFyZW50KCk/LlJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPiAwKSAmJiBwYXJlbnQoKT8uUlNfZW5hYmxlZChpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKSAmJiAhdXNlU2VsZWN0aW9ucygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBtYXRUb29sdGlwPVwiUmVnaXN0cm8gJiBTY2FkZW56YXJpb1wiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wemlvbmkgZGkgUmVnaXN0cm8gJiBTY2FkZW56YXJpbydcIlxyXG4gIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UlNcIj5cclxuICA8bWF0LWljb24+YWxhcm1fb248L21hdC1pY29uPlxyXG4gIFJlZ2lzdHJvIGUgc2NhZGVuemFyaW9cclxuPC9idXR0b24+XHJcbn1cclxuPG1hdC1tZW51ICNtZW51UlM9XCJtYXRNZW51XCI+XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ051b3ZhIGxlZ2dlJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uUlNfbmV3TGF3KFtpdGVtKCldKVwiPlxyXG4gICAgTnVvdmEgbGVnZ2VcclxuICA8L2J1dHRvbj5cclxuICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBhdHRpdml0w6AnXCIgKGNsaWNrKT1cInBhcmVudCgpPy5SU19uZXdBY3Rpdml0eShpdGVtKCkpXCI+XHJcbiAgICBOdW92YSBhdHRpdml0w6BcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uUlNfdXNhZ2VSZXBvcnQoaXRlbSgpKVwiPlxyXG4gICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG48L21hdC1tZW51PiJdfQ==
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFXdkQsTUFBTSxPQUFPLDRCQUE0QjtJQVB6QztRQVNFLFdBQU0sR0FBRyxLQUFLLEVBQThCLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxLQUFLLENBQXNCLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBa0MsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqRSxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxXQUFXO2dCQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxrQkFBYSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0QyxTQUFJLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBeUIvQjtJQXRCQzs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0F0Q1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsZ3hDQ2Z6Qyx5NktBaUlBLHlERHBIWSxhQUFhLDZ2QkFBRSxhQUFhLG1MQUFFLGdCQUFnQixrSUFBRSxnQkFBZ0I7OzJGQUUvRCw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNpZ25hbCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjbGlwcGVyLWRvY3VtZW50LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQge1xyXG5cclxuICBwYXJlbnQgPSBpbnB1dDxDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlcj4oKTtcclxuICBzZWxlY3Rpb25Tb3VyY2UgPSBpbnB1dDwnYmFnJyB8ICdzZWxlY3Rpb24nPignc2VsZWN0aW9uJyk7XHJcbiAgcHJvdGVjdGVkIHNlbGVjdGlvbjogU2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ3NlbGVjdGlvbidcclxuICAgICAgPyB0aGlzLnBhcmVudCgpLnNlbGVjdGlvbj8uYWxsXHJcbiAgICAgIDogdGhpcy5wYXJlbnQoKS5jbGlwcGVyU2VydmljZS5iYWc7XHJcbiAgfSk7XHJcbiAgdXNlU2VsZWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpdGVtID0gaW5wdXQ8Q2xpcHBlckRvY3VtZW50SW5mbz4oKTtcclxuICBpc1JlZmVyZW5jZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1JlYWRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNEZWFkbGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjdXJyZW50IGl0ZW0gb3Igc2VsZWN0aW9uIGlzIHJlYWRcclxuICAgKiBAcmV0dXJucyAwIGlmIG5vdCByZWFkLCAxIGlmIHJlYWQsIDIgaWYgdW5rbm93blxyXG4gICAqL1xyXG4gIGlzUmVhZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSByZXR1cm4gdGhpcy5pdGVtKCkuaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQoKT8uaGFzQW55U2VsZWN0aW9uKCkpIHJldHVybiAyO1xyXG4gICAgY29uc3QgZmlyc3RTZWxlY3Rpb24gPSB0aGlzLnBhcmVudCgpPy5nZXRTaW5nbGVTZWxlY3Rpb24oKTtcclxuICAgIGlmIChmaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmlyc3RTZWxlY3Rpb24uaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgaXMgcmVhZCBmbGFnIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlOiB0cnVlIG9yIGZhbHNlXHJcbiAgICovXHJcbiAgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wYXJlbnQoKT8uc2V0UmVhZCh2YWx1ZSwgdGhpcy5pdGVtKCkpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ3NlbGVjdGlvbicpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5zZWxlY3Rpb24/LmNsZWFyKClcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Rlc2VsZXppb25hIHR1dHRpJ1wiPlxyXG4gIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLm1hbmFnZUJhZygpXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkdlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxufVxyXG5AaWYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcmkgZG9jdW1lbnRvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLm9wZW4oaXRlbSgpID8gaXRlbSgpLmRvY3VtZW50SWQgOiBzZWxlY3Rpb24oKVswXS5kb2N1bWVudElkKVwiPlxyXG4gIDxtYXQtaWNvbj48L21hdC1pY29uPkFwcmlcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ2JhZycpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuYWRkSXRlbXNUb0JhZyhpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKVwiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkFnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmICgoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID4gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuc2VuZEl0ZW1zVG8oaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSlcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCI+XHJcbiAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCgoaXRlbSgpICYmIGl0ZW0oKS5tb2RlbCAhPSAxMSkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEgJiYgc2VsZWN0aW9uKClbMF0ubW9kZWwgIT0gMTEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuIFxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRQZGYoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2FsdmEgZG9jdW1lbnRvIGluIHBkZidcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlNhbHZhIGluIHBkZlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmEgdW4gbGluayBwZXJtYW5lbnRlIGRhIHV0aWxpenphcmUgZXN0ZXJuYW1lbnRlJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLnNob3dMaW5rKGl0ZW0oKSA/IGl0ZW0oKSA6IHNlbGVjdGlvbigpWzBdKVwiPlxyXG4gIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5MaW5rXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbVxyXG4gIFttYXRNZW51VHJpZ2dlckZvcl09XCJsaW5rc01lbnVcIj5cclxuICA8bWF0LWljb24+Y29tcGFyZV9hcnJvd3M8L21hdC1pY29uPkNvbGxlZ2FtZW50aVxyXG48L2J1dHRvbj5cclxufVxyXG5cclxuQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc1JlYWRhYmxlKCkpIHtcclxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICBcclxuQGlmIChpdGVtKCkgPyBpdGVtKCkuaXNSZWFkID09PSB0cnVlIDogKHBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbC5sZW5ndGggIT0gMSB8fCBwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGxbMF0uaXNSZWFkID09PSB0cnVlKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbVxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBkYSBsZWdnZXJlJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uc2V0UmVhZChmYWxzZSwgaXRlbSgpKVwiPlxyXG4gICAgPG1hdC1pY29uPm91dGxpbmVkX2ZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZGEgbGVnZ2VyZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGl0ZW0oKSA/IGl0ZW0oKS5pc1JlYWQgIT09IHRydWUgOiAocGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsLmxlbmd0aCAhPSAxIHx8IHBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbFswXS5pc1JlYWQgIT09IHRydWUpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBnacOgIGxldHRvJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uc2V0UmVhZCh0cnVlLCBpdGVtKCkpXCI+XHJcbiAgICA8bWF0LWljb24+ZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBnacOgIGxldHRvXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG59XHJcblxyXG5AaWYgKChpc0xhd0luRm9yY2UoKSB8fCBpc0RlYWRsaW5lKCkpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgcmVwb3J0IHV0aWxpenpvJ1wiIChjbGljayk9XCJwYXJlbnQoKS5yZXBvcnQoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG48bWF0LW1lbnUgI2xpbmtzTWVudT1cIm1hdE1lbnVcIj5cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSByaWNoaWFtYXRpIGRhIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpLnJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0sIDEpXCI+XHJcbiAgICBEb2N1bWVudGkgcmljaGlhbWF0aVxyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICggIWlzUmVmZXJlbmNlKCkgJiYoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlc3RvJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCkucmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSwgMilcIj5cclxuICAgIERvY3VtZW50aSBjaGUgcmljaGlhbWFub1xyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgZ2l1cmlzcHJ1ZGVuemEnXCIgKGNsaWNrKT1cInBhcmVudCgpLnJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0sIDQpXCI+XHJcbiAgICBKdXJpc1xyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgbW9kaWZpY2hlIG5vcm1hdGl2ZSdcIiAoY2xpY2spPVwicGFyZW50KCkucmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG48L2J1dHRvbj5cclxufVxyXG48L21hdC1tZW51PlxyXG5AaWYgKChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPiAwKSAmJiAgcGFyZW50KCkuUlNfZW5hYmxlZChpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKSAmJiAhdXNlU2VsZWN0aW9ucygpKSB7XHJcbjxtYXQtZGl2aWRlciA+PC9tYXQtZGl2aWRlcj5cclxufSBcclxuQGlmICgoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID4gMCkgJiYgIHBhcmVudCgpLlJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gbWF0VG9vbHRpcD1cIlJlZ2lzdHJvICYgU2NhZGVuemFyaW9cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B6aW9uaSBkaSBSZWdpc3RybyAmIFNjYWRlbnphcmlvJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UlNcIj5cclxuICAgIDxtYXQtaWNvbj5hbGFybV9vbjwvbWF0LWljb24+XHJcbiAgICBSZWdpc3RybyBlIHNjYWRlbnphcmlvXHJcbiAgPC9idXR0b24+XHJcbn1cclxuICA8bWF0LW1lbnUgI21lbnVSUz1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3TGF3KFtpdGVtKCldKVwiPlxyXG4gICAgICBOdW92YSBsZWdnZVxyXG4gICAgPC9idXR0b24+XHJcbiAgICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgYXR0aXZpdMOgJ1wiIChjbGljayk9XCJwYXJlbnQoKS5SU19uZXdBY3Rpdml0eShpdGVtKCkpXCI+XHJcbiAgICAgIE51b3ZhIGF0dGl2aXTDoFxyXG4gICAgPC9idXR0b24+XHJcbn1cclxuICAgIEBpZiAoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID09PSAxKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZXBvcnQgdXRpbGl6em8gbm9ybWEnXCIgKGNsaWNrKT1cInBhcmVudCgpLlJTX3VzYWdlUmVwb3J0KGl0ZW0oKSlcIj5cclxuICAgICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgICA8L2J1dHRvbj5cclxufVxyXG4gIDwvbWF0LW1lbnU+XHJcbiJdfQ==
|