@hestia-earth/ui-components 0.27.0 → 0.27.2
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/common/blank-node-state-notice/blank-node-state-notice.component.d.ts +6 -5
- package/common/data-table/data-table.component.d.ts +10 -12
- package/common/dropdown/dropdown.component.d.ts +5 -5
- package/common/navigation-menu/navigation-menu.component.d.ts +6 -6
- package/common/social-tags/social-tags.component.d.ts +13 -5
- package/esm2022/common/blank-node-state-notice/blank-node-state-notice.component.mjs +9 -16
- package/esm2022/common/data-table/data-table.component.mjs +15 -27
- package/esm2022/common/dropdown/dropdown.component.mjs +8 -15
- package/esm2022/common/navigation-menu/navigation-menu.component.mjs +15 -23
- package/esm2022/common/social-tags/social-tags.component.mjs +21 -18
- package/esm2022/node/node-csv-export-confirm/node-csv-export-confirm.component.mjs +3 -3
- package/esm2022/node/node-csv-select-headers/node-csv-select-headers.component.mjs +4 -4
- package/fesm2022/hestia-earth-ui-components.mjs +63 -95
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,35 +1,38 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostBinding,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, computed, effect, inject, input } from '@angular/core';
|
|
2
2
|
import { Meta } from '@angular/platform-browser';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class SocialTagsComponent {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.meta = inject(Meta);
|
|
7
|
-
this.config = {};
|
|
7
|
+
this.config = input({});
|
|
8
8
|
this.classes = 'is-hidden';
|
|
9
|
-
|
|
10
|
-
ngOnInit() {
|
|
11
|
-
this.meta.addTag({ charset: 'UTF-8' });
|
|
12
|
-
const config = {
|
|
9
|
+
this.configs = computed(() => ({
|
|
13
10
|
'og:url': window.location.href.split('?')[0],
|
|
14
11
|
...this.config
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.meta.updateTag({ name
|
|
20
|
-
|
|
12
|
+
}));
|
|
13
|
+
this.meta.addTag({ charset: 'UTF-8' });
|
|
14
|
+
effect(() => {
|
|
15
|
+
Object.entries(this.configs()).map(([name, content]) => {
|
|
16
|
+
this.meta.updateTag({ name, content });
|
|
17
|
+
if (name === 'og:description') {
|
|
18
|
+
this.meta.updateTag({ name: 'description', content });
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SocialTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: SocialTagsComponent, isStandalone: true, selector: "he-social-tags", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
25
|
}
|
|
26
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SocialTagsComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
28
|
-
args: [{
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
args: [{
|
|
29
|
+
selector: 'he-social-tags',
|
|
30
|
+
template: '',
|
|
31
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
+
standalone: true
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: () => [], propDecorators: { classes: [{
|
|
32
35
|
type: HostBinding,
|
|
33
36
|
args: ['class']
|
|
34
37
|
}] } });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLXRhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9zb2NpYWwtdGFncy9zb2NpYWwtdGFncy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFnQmpELE1BQU0sT0FBTyxtQkFBbUI7SUFhOUI7UUFaUSxTQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxCLFdBQU0sR0FBRyxLQUFLLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBR3pDLFlBQU8sR0FBRyxXQUFXLENBQUM7UUFFckIsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEdBQUcsSUFBSSxDQUFDLE1BQU07U0FDZixDQUFDLENBQUMsQ0FBQztRQUdGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFdkMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F4QlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsb1FBSnBCLEVBQUU7OzJGQUlELG1CQUFtQjtrQkFOL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3dEQU9RLE9BQU87c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW50ZXJmYWNlIElTb2NpYWxUYWdzQ29uZmlnIHtcbiAgJ29nOnR5cGUnPzogc3RyaW5nO1xuICAnb2c6dXJsJz86IHN0cmluZztcbiAgJ29nOnRpdGxlJz86IHN0cmluZztcbiAgJ29nOmRlc2NyaXB0aW9uJz86IHN0cmluZztcbiAgJ29nOmltYWdlJz86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc29jaWFsLXRhZ3MnLFxuICB0ZW1wbGF0ZTogJycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNvY2lhbFRhZ3NDb21wb25lbnQge1xuICBwcml2YXRlIG1ldGEgPSBpbmplY3QoTWV0YSk7XG5cbiAgcHJvdGVjdGVkIGNvbmZpZyA9IGlucHV0PElTb2NpYWxUYWdzQ29uZmlnPih7fSk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHB1YmxpYyBjbGFzc2VzID0gJ2lzLWhpZGRlbic7XG5cbiAgcHJpdmF0ZSBjb25maWdzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAnb2c6dXJsJzogd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXSxcbiAgICAuLi50aGlzLmNvbmZpZ1xuICB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZXRhLmFkZFRhZyh7IGNoYXJzZXQ6ICdVVEYtOCcgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWdzKCkpLm1hcCgoW25hbWUsIGNvbnRlbnRdKSA9PiB7XG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lLCBjb250ZW50IH0pO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ29nOmRlc2NyaXB0aW9uJykge1xuICAgICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lOiAnZGVzY3JpcHRpb24nLCBjb250ZW50IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -32,10 +32,10 @@ export class NodeCsvExportConfirmComponent {
|
|
|
32
32
|
this.downloadFilename = computed(() => fileToExt(this.filename(), this.extension()));
|
|
33
33
|
}
|
|
34
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NodeCsvExportConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.emit(true)\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the Hestia platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.emit(true)\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the Hestia platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"closed.emit(true)\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\"></fa-icon>\n <span>Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"closed.emit(true)\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: ["csv", "keys", "includeDefaultCSV"], outputs: ["headersChanged"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
36
36
|
}
|
|
37
37
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NodeCsvExportConfirmComponent, decorators: [{
|
|
38
38
|
type: Component,
|
|
39
|
-
args: [{ selector: 'he-node-csv-export-confirm', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, DataTableComponent, NodeLinkComponent, NodeCsvSelectHeadersComponent, FaIconComponent], template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.emit(true)\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the Hestia platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n
|
|
39
|
+
args: [{ selector: 'he-node-csv-export-confirm', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, DataTableComponent, NodeLinkComponent, NodeCsvSelectHeadersComponent, FaIconComponent], template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.emit(true)\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the Hestia platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"closed.emit(true)\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\"></fa-icon>\n <span>Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"closed.emit(true)\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n" }]
|
|
40
40
|
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQWVsRixNQUFNLE9BQU8sNkJBQTZCO0lBUjFDO1FBU21CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFFakMsWUFBTyxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUUvQixVQUFLLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFTLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZCLFdBQU0sR0FBRyxNQUFNLEVBQVcsQ0FBQztRQUUzQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3RDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFrQixDQUFDLENBQzlFLENBQUM7UUFDTSxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNsQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDM0IsQ0FBQztRQUVRLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU07WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQzlDLGdDQUFnQyxrQkFBa0IsQ0FDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FDOUYsRUFBRSxDQUNKO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBRVEscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMzRjs4R0FyQ1ksNkJBQTZCO2tHQUE3Qiw2QkFBNkIsc3dCQzFCMUMsbXZHQTBGQSwwRERsRVksVUFBVSxvT0FBRSxrQkFBa0IsdUdBQUUsaUJBQWlCLDRHQUFFLDZCQUE2QixrSkFBRSxlQUFlOzsyRkFFaEcsNkJBQTZCO2tCQVJ6QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxEIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9Dc3YgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYS1jb252ZXJ0JztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhRG93bmxvYWQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCB9IGZyb20gJy4uL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uL25vZGUtbGluay9ub2RlLWxpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIElOb2RlSW5jbHVkZWQge1xuICBub2RlOiBKU09OTEQ8YW55PjtcbiAgaW5jbHVkZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSb3V0ZXJMaW5rLCBEYXRhVGFibGVDb21wb25lbnQsIE5vZGVMaW5rQ29tcG9uZW50LCBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCwgRmFJY29uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRG93bmxvYWQgPSBmYURvd25sb2FkO1xuXG4gIHByb3RlY3RlZCBoZWFkZXJzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVzID0gaW5wdXQ8SlNPTkxEPGFueT5bXT4oW10pO1xuICBwcm90ZWN0ZWQgZmlsZW5hbWUgPSBpbnB1dDxzdHJpbmc+KCdkb3dubG9hZCcpO1xuICBwcm90ZWN0ZWQgaGVhZGVyS2V5cyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIHByb3RlY3RlZCBleHRlbnNpb24gPSBpbnB1dChTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdik7XG4gIHByb3RlY3RlZCBpc1VwbG9hZCA9IGlucHV0KHRydWUpO1xuXG4gIHByb3RlY3RlZCBjbG9zZWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICBwcm90ZWN0ZWQgc2hvd0luY2x1ZGVOb2RlcyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpbmNsdWRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5ub2RlcygpID8/IFtdKS5tYXAobm9kZSA9PiAoeyBub2RlLCBpbmNsdWRlZDogdHJ1ZSB9KSBhcyBJTm9kZUluY2x1ZGVkKVxuICApO1xuICBwcml2YXRlIGluY2x1ZGVkID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmluY2x1ZGVkTm9kZXMoKVxuICAgICAgLmZpbHRlcigoeyBpbmNsdWRlZCB9KSA9PiBpbmNsdWRlZClcbiAgICAgIC5tYXAoKHsgbm9kZSB9KSA9PiBub2RlKVxuICApO1xuXG4gIHByb3RlY3RlZCBjc3ZEYXRhID0gY29tcHV0ZWQoKCkgPT4gdG9Dc3YodGhpcy5ub2RlcygpIHx8IFtdLCB7IGluY2x1ZGVFeGlzaW5nOiAhdGhpcy5pc1VwbG9hZCgpIH0pKTtcbiAgcHJvdGVjdGVkIGNzdkNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaGVhZGVycygpLmxlbmd0aFxuICAgICAgPyB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAgICAgYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICB0b0Nzdih0aGlzLmluY2x1ZGVkKCksIHsgaW5jbHVkZUV4aXNpbmc6ICF0aGlzLmlzVXBsb2FkKCksIHNlbGVjdGVkSGVhZGVyczogdGhpcy5oZWFkZXJzKCkgfSlcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgZG93bmxvYWRGaWxlbmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVUb0V4dCh0aGlzLmZpbGVuYW1lKCksIHRoaXMuZXh0ZW5zaW9uKCkpKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbCBpcy1hY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNhcmRcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwibW9kYWwtY2FyZC1oZWFkXCI+XG4gICAgICA8cCBjbGFzcz1cIm1vZGFsLWNhcmQtdGl0bGVcIj5FeHBvcnQgYXMgQ1NWPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiIGFyaWEtbGFiZWw9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZWQuZW1pdCh0cnVlKVwiPjwvYnV0dG9uPlxuICAgIDwvaGVhZGVyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtY2FyZC1ib2R5XCI+XG4gICAgICBAaWYgKGlzVXBsb2FkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbiBpcy1pbmZvXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgPHNwYW4+QWZ0ZXIgRG93bmxvYWQsIHlvdSBjYW4gZWRpdCBhbmQ8L3NwYW4+XG4gICAgICAgICAgPGEgY2xhc3M9XCJweC0xXCIgcm91dGVyTGluaz1cIi4uL1wiPnVwbG9hZCB0aGUgQ1NWIGZpbGU8L2E+XG4gICAgICAgICAgPHNwYW4+dG8gc3VibWl0IHlvdXIgY29udGVudCBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCBhbmQgeW91ciBkcmFmdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuPC9zcGFuPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW1wb3J0IHRoZSBDU1YgZmlsZSByaWdodCBiYWNrIGJ5IGNsaWNraW5nIG9uIHRoZSBcIkltcG9ydCBmcm9tIENTVlwiIGJ1dHRvbiBhbmRcbiAgICAgICAgICAgICAgc2VsZWN0aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoIWlzVXBsb2FkKCkgJiYgaW5jbHVkZWROb2RlcygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGI+e3sgaW5jbHVkZWROb2RlcygpLmxlbmd0aCB9fTwvYj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInB4LTFcIj5Ob2RlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHlvdXIgZG93bmxvYWQuPC9zcGFuPlxuICAgICAgICAgIDxhIChjbGljayk9XCJzaG93SW5jbHVkZU5vZGVzLnNldCghc2hvd0luY2x1ZGVOb2RlcygpKVwiPlxuICAgICAgICAgICAgQGlmIChzaG93SW5jbHVkZU5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgSGlkZSBsaXN0XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgU2hvdyBsaXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3A+XG4gICAgICAgIEBpZiAoc2hvd0luY2x1ZGVOb2RlcygpKSB7XG4gICAgICAgICAgPGhlLWRhdGEtdGFibGUgbWF4SGVpZ2h0PVwiNDAwXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtc3RyaXBlZCBpcy1tYi0wXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+VHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPk5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGluY2x1ZGVkTm9kZXMoKTsgdHJhY2sgbm9kZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLm5vZGVbJ0B0eXBlJ10gfX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibm9kZS5ub2RlXCIgW3Nob3dFeHRlcm5hbExpbmtdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbm9kZS5ub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9oZS1kYXRhLXRhYmxlPlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIDxoZS1ub2RlLWNzdi1zZWxlY3QtaGVhZGVyc1xuICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cImlzVXBsb2FkKClcIlxuICAgICAgICBbY3N2XT1cImNzdkRhdGEoKVwiXG4gICAgICAgIFtrZXlzXT1cImhlYWRlcktleXMoKVwiXG4gICAgICAgIFtpbmNsdWRlRGVmYXVsdENTVl09XCJpc1VwbG9hZCgpXCJcbiAgICAgICAgKGhlYWRlcnNDaGFuZ2VkKT1cImhlYWRlcnMuc2V0KCRldmVudClcIj48L2hlLW5vZGUtY3N2LXNlbGVjdC1oZWFkZXJzPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8Zm9vdGVyIGNsYXNzPVwibW9kYWwtY2FyZC1mb290XCI+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1wcmltYXJ5XCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiY3N2Q29udGVudCgpID8gbnVsbCA6IHRydWVcIlxuICAgICAgICBbaHJlZl09XCJjc3ZDb250ZW50KClcIlxuICAgICAgICBbYXR0ci5kb3dubG9hZF09XCJjc3ZDb250ZW50KCkgPyBkb3dubG9hZEZpbGVuYW1lKCkgOiBudWxsXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlZC5lbWl0KHRydWUpXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibXItMlwiIFtpY29uXT1cImZhRG93bmxvYWRcIj48L2ZhLWljb24+XG4gICAgICAgIDxzcGFuPkRvd25sb2FkIENTVjwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZ2hvc3RcIiAoY2xpY2spPVwiY2xvc2VkLmVtaXQodHJ1ZSlcIj5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb290ZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQWVsRixNQUFNLE9BQU8sNkJBQTZCO0lBUjFDO1FBU21CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFFakMsWUFBTyxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUUvQixVQUFLLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFTLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZCLFdBQU0sR0FBRyxNQUFNLEVBQVcsQ0FBQztRQUUzQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3RDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFrQixDQUFDLENBQzlFLENBQUM7UUFDTSxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNsQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDM0IsQ0FBQztRQUVRLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU07WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQzlDLGdDQUFnQyxrQkFBa0IsQ0FDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FDOUYsRUFBRSxDQUNKO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBRVEscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMzRjs4R0FyQ1ksNkJBQTZCO2tHQUE3Qiw2QkFBNkIsc3dCQzFCMUMsa3VHQXlGQSwwRERqRVksVUFBVSxvT0FBRSxrQkFBa0IsdUdBQUUsaUJBQWlCLDRHQUFFLDZCQUE2QixrSkFBRSxlQUFlOzsyRkFFaEcsNkJBQTZCO2tCQVJ6QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxEIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9Dc3YgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYS1jb252ZXJ0JztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhRG93bmxvYWQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCB9IGZyb20gJy4uL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uL25vZGUtbGluay9ub2RlLWxpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIElOb2RlSW5jbHVkZWQge1xuICBub2RlOiBKU09OTEQ8YW55PjtcbiAgaW5jbHVkZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSb3V0ZXJMaW5rLCBEYXRhVGFibGVDb21wb25lbnQsIE5vZGVMaW5rQ29tcG9uZW50LCBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCwgRmFJY29uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRG93bmxvYWQgPSBmYURvd25sb2FkO1xuXG4gIHByb3RlY3RlZCBoZWFkZXJzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVzID0gaW5wdXQ8SlNPTkxEPGFueT5bXT4oW10pO1xuICBwcm90ZWN0ZWQgZmlsZW5hbWUgPSBpbnB1dDxzdHJpbmc+KCdkb3dubG9hZCcpO1xuICBwcm90ZWN0ZWQgaGVhZGVyS2V5cyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIHByb3RlY3RlZCBleHRlbnNpb24gPSBpbnB1dChTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdik7XG4gIHByb3RlY3RlZCBpc1VwbG9hZCA9IGlucHV0KHRydWUpO1xuXG4gIHByb3RlY3RlZCBjbG9zZWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICBwcm90ZWN0ZWQgc2hvd0luY2x1ZGVOb2RlcyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpbmNsdWRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5ub2RlcygpID8/IFtdKS5tYXAobm9kZSA9PiAoeyBub2RlLCBpbmNsdWRlZDogdHJ1ZSB9KSBhcyBJTm9kZUluY2x1ZGVkKVxuICApO1xuICBwcml2YXRlIGluY2x1ZGVkID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmluY2x1ZGVkTm9kZXMoKVxuICAgICAgLmZpbHRlcigoeyBpbmNsdWRlZCB9KSA9PiBpbmNsdWRlZClcbiAgICAgIC5tYXAoKHsgbm9kZSB9KSA9PiBub2RlKVxuICApO1xuXG4gIHByb3RlY3RlZCBjc3ZEYXRhID0gY29tcHV0ZWQoKCkgPT4gdG9Dc3YodGhpcy5ub2RlcygpIHx8IFtdLCB7IGluY2x1ZGVFeGlzaW5nOiAhdGhpcy5pc1VwbG9hZCgpIH0pKTtcbiAgcHJvdGVjdGVkIGNzdkNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaGVhZGVycygpLmxlbmd0aFxuICAgICAgPyB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAgICAgYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICB0b0Nzdih0aGlzLmluY2x1ZGVkKCksIHsgaW5jbHVkZUV4aXNpbmc6ICF0aGlzLmlzVXBsb2FkKCksIHNlbGVjdGVkSGVhZGVyczogdGhpcy5oZWFkZXJzKCkgfSlcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgZG93bmxvYWRGaWxlbmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVUb0V4dCh0aGlzLmZpbGVuYW1lKCksIHRoaXMuZXh0ZW5zaW9uKCkpKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbCBpcy1hY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNhcmRcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwibW9kYWwtY2FyZC1oZWFkXCI+XG4gICAgICA8cCBjbGFzcz1cIm1vZGFsLWNhcmQtdGl0bGVcIj5FeHBvcnQgYXMgQ1NWPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiIGFyaWEtbGFiZWw9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZWQuZW1pdCh0cnVlKVwiPjwvYnV0dG9uPlxuICAgIDwvaGVhZGVyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtY2FyZC1ib2R5XCI+XG4gICAgICBAaWYgKGlzVXBsb2FkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbiBpcy1pbmZvXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgPHNwYW4+QWZ0ZXIgRG93bmxvYWQsIHlvdSBjYW4gZWRpdCBhbmQ8L3NwYW4+XG4gICAgICAgICAgPGEgY2xhc3M9XCJweC0xXCIgcm91dGVyTGluaz1cIi4uL1wiPnVwbG9hZCB0aGUgQ1NWIGZpbGU8L2E+XG4gICAgICAgICAgPHNwYW4+dG8gc3VibWl0IHlvdXIgY29udGVudCBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCBhbmQgeW91ciBkcmFmdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuPC9zcGFuPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW1wb3J0IHRoZSBDU1YgZmlsZSByaWdodCBiYWNrIGJ5IGNsaWNraW5nIG9uIHRoZSBcIkltcG9ydCBmcm9tIENTVlwiIGJ1dHRvbiBhbmRcbiAgICAgICAgICAgICAgc2VsZWN0aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIH0gQGVsc2UgaWYgKGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgIDxiPnt7IGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggfX08L2I+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJweC0xXCI+Tm9kZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB5b3VyIGRvd25sb2FkLjwvc3Bhbj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwic2hvd0luY2x1ZGVOb2Rlcy5zZXQoIXNob3dJbmNsdWRlTm9kZXMoKSlcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0luY2x1ZGVOb2RlcygpKSB7XG4gICAgICAgICAgICAgIEhpZGUgbGlzdFxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFNob3cgbGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgICBAaWYgKHNob3dJbmNsdWRlTm9kZXMoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIG1heEhlaWdodD1cIjQwMFwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLXN0cmlwZWQgaXMtbWItMFwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5OYW1lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAobm9kZSBvZiBpbmNsdWRlZE5vZGVzKCk7IHRyYWNrIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5ub2RlWydAdHlwZSddIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cIm5vZGUubm9kZVwiIFtzaG93RXh0ZXJuYWxMaW5rXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvaGUtZGF0YS10YWJsZT5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8aGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnNcbiAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCJpc1VwbG9hZCgpXCJcbiAgICAgICAgW2Nzdl09XCJjc3ZEYXRhKClcIlxuICAgICAgICBba2V5c109XCJoZWFkZXJLZXlzKClcIlxuICAgICAgICBbaW5jbHVkZURlZmF1bHRDU1ZdPVwiaXNVcGxvYWQoKVwiXG4gICAgICAgIChoZWFkZXJzQ2hhbmdlZCk9XCJoZWFkZXJzLnNldCgkZXZlbnQpXCI+PC9oZS1ub2RlLWNzdi1zZWxlY3QtaGVhZGVycz5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGZvb3RlciBjbGFzcz1cIm1vZGFsLWNhcmQtZm9vdFwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtcHJpbWFyeVwiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImNzdkNvbnRlbnQoKSA/IG51bGwgOiB0cnVlXCJcbiAgICAgICAgW2hyZWZdPVwiY3N2Q29udGVudCgpXCJcbiAgICAgICAgW2F0dHIuZG93bmxvYWRdPVwiY3N2Q29udGVudCgpID8gZG93bmxvYWRGaWxlbmFtZSgpIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZWQuZW1pdCh0cnVlKVwiPlxuICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cIm1yLTJcIiBbaWNvbl09XCJmYURvd25sb2FkXCI+PC9mYS1pY29uPlxuICAgICAgICA8c3Bhbj5Eb3dubG9hZCBDU1Y8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWdob3N0XCIgKGNsaWNrKT1cImNsb3NlZC5lbWl0KHRydWUpXCI+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZm9vdGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -40,7 +40,7 @@ export class NodeCsvSelectHeadersComponent {
|
|
|
40
40
|
this.faAngleLeft = faAngleLeft;
|
|
41
41
|
this.csv = input.required();
|
|
42
42
|
this.csv$ = toObservable(this.csv);
|
|
43
|
-
this.keys = input
|
|
43
|
+
this.keys = input([]);
|
|
44
44
|
this.keys$ = toObservable(this.keys);
|
|
45
45
|
this.includeDefaultCSV = input(false);
|
|
46
46
|
this.headersChanged = output();
|
|
@@ -58,7 +58,7 @@ export class NodeCsvSelectHeadersComponent {
|
|
|
58
58
|
this.headers = signal({});
|
|
59
59
|
this.groups = computed(() => Object.values(this.headers()));
|
|
60
60
|
combineLatest([this.csv$, this.keys$, this.schemas$])
|
|
61
|
-
.pipe(filter(([csv,
|
|
61
|
+
.pipe(filter(([csv, _keys, schemas]) => [!isUndefined(csv), !isUndefined(schemas)].every(Boolean)), tap(() => this.loading.set(true)), mergeMap(([csv, keys, schemas]) => forkJoin({
|
|
62
62
|
headers: this.schemaService.parseHeaders$(csv),
|
|
63
63
|
keys: of(keys),
|
|
64
64
|
schemas: of(schemas)
|
|
@@ -149,7 +149,7 @@ export class NodeCsvSelectHeadersComponent {
|
|
|
149
149
|
this.headers.set(headers);
|
|
150
150
|
}
|
|
151
151
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NodeCsvSelectHeadersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: NodeCsvSelectHeadersComponent, isStandalone: true, selector: "he-node-csv-select-headers", inputs: { csv: { classPropertyName: "csv", publicName: "csv", isSignal: true, isRequired: true, transformFunction: null }, keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired:
|
|
152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: NodeCsvSelectHeadersComponent, isStandalone: true, selector: "he-node-csv-select-headers", inputs: { csv: { classPropertyName: "csv", publicName: "csv", isSignal: true, isRequired: true, transformFunction: null }, keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null }, includeDefaultCSV: { classPropertyName: "includeDefaultCSV", publicName: "includeDefaultCSV", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\">\n <i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i>\n</p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [ngModel]=\"allSelected()\" (change)=\"selectAll($event.target.checked)\" />\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow has-text-right\">\n <div ngbDropdown container=\"body\" placement=\"bottom-end\">\n <button ngbDropdownToggle class=\"button is-small\" type=\"button\" id=\"select-menu\">\n <span>Advanced Filters</span>\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"faFilter\" aria-hidden=\"true\"></fa-icon>\n </span>\n </button>\n <div ngbDropdownMenu aria-labelledby=\"select-menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"showNonIncluded()\"\n (change)=\"showNonIncluded.set($event.target.checked)\" />\n <span class=\"ml-2\">\n Include\n <code>internal</code>\n fields\n </span>\n </label>\n </a>\n <div class=\"dropdown-item\">\n <p>Toggle Term Fields</p>\n </div>\n @for (field of termFields; track field) {\n <div ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [checked]=\"isTermFieldSelect(field)\"\n (change)=\"toggleTermField($event.target.checked, field)\" />\n <span class=\"ml-2\">{{ field }}</span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (loading()) {\n <div class=\"has-text-center py-3\">\n <fa-icon [icon]=\"faSpinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n} @else {\n <div class=\"drag-container\">\n @for (group of groups(); track group.key) {\n <div class=\"card\">\n <header class=\"card-header\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [indeterminate]=\"group.partialSelected\"\n [ngModel]=\"group.selected\"\n (change)=\"updateGroup($event.target.checked, group)\" />\n <span class=\"ml-2\">{{ group.key }}</span>\n </label>\n </div>\n <span\n class=\"card-header-icon has-text-secondary\"\n aria-label=\"open / close\"\n (click)=\"group.open = !group.open\"\n pointer>\n <span class=\"icon\">\n <fa-icon [icon]=\"faAngleDown\" [class.is-hidden]=\"!group.open\"></fa-icon>\n <fa-icon [icon]=\"faAngleLeft\" [class.is-hidden]=\"group.open\"></fa-icon>\n </span>\n </span>\n </header>\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group)\">\n @for (header of group.headers; track header.key) {\n @if (header.included || showNonIncluded()) {\n <li cdkDrag>\n <label class=\"checkbox ml-2\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"header.selected\"\n (change)=\"updateHeader($event.target.checked, group, header)\" />\n <span class=\"ml-2\">{{ header.key }}</span>\n </label>\n </li>\n }\n }\n </ul>\n </div>\n </div>\n }\n </div>\n}\n", styles: [".toggle-all{border-bottom:1px solid #4a4a4a}.drag-container,.table-container{max-height:45vh;overflow-y:auto}.cdk-drag-preview{border-radius:3px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
153
153
|
}
|
|
154
154
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NodeCsvSelectHeadersComponent, decorators: [{
|
|
155
155
|
type: Component,
|
|
@@ -164,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
164
164
|
CdkDrag
|
|
165
165
|
], template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\">\n <i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i>\n</p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\" [ngModel]=\"allSelected()\" (change)=\"selectAll($event.target.checked)\" />\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow has-text-right\">\n <div ngbDropdown container=\"body\" placement=\"bottom-end\">\n <button ngbDropdownToggle class=\"button is-small\" type=\"button\" id=\"select-menu\">\n <span>Advanced Filters</span>\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"faFilter\" aria-hidden=\"true\"></fa-icon>\n </span>\n </button>\n <div ngbDropdownMenu aria-labelledby=\"select-menu\">\n <div class=\"dropdown-content\">\n <a ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"showNonIncluded()\"\n (change)=\"showNonIncluded.set($event.target.checked)\" />\n <span class=\"ml-2\">\n Include\n <code>internal</code>\n fields\n </span>\n </label>\n </a>\n <div class=\"dropdown-item\">\n <p>Toggle Term Fields</p>\n </div>\n @for (field of termFields; track field) {\n <div ngbDropdownItem>\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [checked]=\"isTermFieldSelect(field)\"\n (change)=\"toggleTermField($event.target.checked, field)\" />\n <span class=\"ml-2\">{{ field }}</span>\n </label>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n\n@if (loading()) {\n <div class=\"has-text-center py-3\">\n <fa-icon [icon]=\"faSpinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n} @else {\n <div class=\"drag-container\">\n @for (group of groups(); track group.key) {\n <div class=\"card\">\n <header class=\"card-header\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [indeterminate]=\"group.partialSelected\"\n [ngModel]=\"group.selected\"\n (change)=\"updateGroup($event.target.checked, group)\" />\n <span class=\"ml-2\">{{ group.key }}</span>\n </label>\n </div>\n <span\n class=\"card-header-icon has-text-secondary\"\n aria-label=\"open / close\"\n (click)=\"group.open = !group.open\"\n pointer>\n <span class=\"icon\">\n <fa-icon [icon]=\"faAngleDown\" [class.is-hidden]=\"!group.open\"></fa-icon>\n <fa-icon [icon]=\"faAngleLeft\" [class.is-hidden]=\"group.open\"></fa-icon>\n </span>\n </span>\n </header>\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group)\">\n @for (header of group.headers; track header.key) {\n @if (header.included || showNonIncluded()) {\n <li cdkDrag>\n <label class=\"checkbox ml-2\">\n <input\n type=\"checkbox\"\n class=\"selector\"\n [ngModel]=\"header.selected\"\n (change)=\"updateHeader($event.target.checked, group, header)\" />\n <span class=\"ml-2\">{{ header.key }}</span>\n </label>\n </li>\n }\n }\n </ul>\n </div>\n </div>\n }\n </div>\n}\n", styles: [".toggle-all{border-bottom:1px solid #4a4a4a}.drag-container,.table-container{max-height:45vh;overflow-y:auto}.cdk-drag-preview{border-radius:3px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
166
166
|
}], ctorParameters: () => [] });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFlLGVBQWUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxD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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIENka0Ryb3BMaXN0LCBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBpc0RlZmF1bHRDU1ZTZWxlY3RlZCwgaXNDU1ZJbmNsdWRlZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEvc2NoZW1hLXV0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IE5nYkRyb3Bkb3duLCBOZ2JEcm9wZG93blRvZ2dsZSwgTmdiRHJvcGRvd25NZW51LCBOZ2JEcm9wZG93bkl0ZW0gfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEhlU2NoZW1hU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVtYS9zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBmYUFuZ2xlRG93biwgZmFBbmdsZUxlZnQsIGZhRmlsdGVyLCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbnRlcmZhY2UgSUhlYWRlciB7XG4gIGtleTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGBmYWxzZWAgaWYgaXQgaXMgYW4gYGludGVybmFsYCBmaWVsZC5cbiAgICovXG4gIGluY2x1ZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSUdyb3VwIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBwYXJ0aWFsU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9wZW46IGJvb2xlYW47XG4gIGhlYWRlcnM6IElIZWFkZXJbXTtcbn1cblxuaW50ZXJmYWNlIElHcm91cGVkSGVhZGVycyB7XG4gIFtncm91cDogc3RyaW5nXTogSUdyb3VwO1xufVxuXG5jb25zdCBoZWFkZXJHcm91cCA9IChoZWFkZXI6IHN0cmluZykgPT4ge1xuICBjb25zdCBwYXJ0cyA9IGhlYWRlci5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyID8gJycgOiBbcGFydHNbMF0sIHBhcnRzWzFdXS5qb2luKCcuJyk7XG59O1xuXG5jb25zdCB0ZXJtRmllbGRzID0gWydAaWQnLCAnbmFtZScsICd1bml0cycsICd0ZXJtVHlwZSddO1xuXG5jb25zdCBpc1Rlcm1GaWVsZCA9IChmaWVsZDogc3RyaW5nLCB7IGtleSB9OiBJSGVhZGVyKSA9PlxuICBbJ3Rlcm0nLCAnbWV0aG9kTW9kZWwnLCAnY291bnRyeScsICdwcm9kdWN0JywgJ29wZXJhdGlvbicsICdrZXknXS5zb21lKHBhcmVudCA9PlxuICAgIGtleS5lbmRzV2l0aChbcGFyZW50LCBmaWVsZF0uam9pbignLicpKVxuICApO1xuXG5jb25zdCB1cGRhdGVHcm91cEhlYWRlcnNTZWxlY3RlZCA9ICh7IGhlYWRlcnMsIC4uLmdyb3VwIH06IElHcm91cCkgPT4gKHtcbiAgLi4uZ3JvdXAsXG4gIGhlYWRlcnM6IGhlYWRlcnMubWFwKGhlYWRlciA9PiAoeyAuLi5oZWFkZXIsIHNlbGVjdGVkOiBncm91cC5zZWxlY3RlZCB9KSlcbn0pO1xuXG5jb25zdCB1cGRhdGVHcm91cFNlbGVjdGVkID0gKGdyb3VwOiBJR3JvdXApID0+IHtcbiAgY29uc3QgYWxsU2VsZWN0ZWQgPSBncm91cC5oZWFkZXJzLmV2ZXJ5KCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5ncm91cCxcbiAgICBzZWxlY3RlZDogYWxsU2VsZWN0ZWQsXG4gICAgcGFydGlhbFNlbGVjdGVkOiAhYWxsU2VsZWN0ZWQgJiYgZ3JvdXAuaGVhZGVycy5zb21lKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKVxuICB9O1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYkRyb3Bkb3duLFxuICAgIE5nYkRyb3Bkb3duVG9nZ2xlLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBOZ2JEcm9wZG93bk1lbnUsXG4gICAgTmdiRHJvcGRvd25JdGVtLFxuICAgIENka0Ryb3BMaXN0LFxuICAgIENka0RyYWdcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBzY2hlbWFTZXJ2aWNlID0gaW5qZWN0KEhlU2NoZW1hU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhU3Bpbm5lciA9IGZhU3Bpbm5lcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRmlsdGVyID0gZmFGaWx0ZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUFuZ2xlRG93biA9IGZhQW5nbGVEb3duO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFBbmdsZUxlZnQgPSBmYUFuZ2xlTGVmdDtcblxuICBwcm90ZWN0ZWQgY3N2ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGNzdiQgPSB0b09ic2VydmFibGUodGhpcy5jc3YpO1xuICBwcm90ZWN0ZWQga2V5cyA9IGlucHV0LnJlcXVpcmVkPHN0cmluZ1tdPigpO1xuICBwcml2YXRlIGtleXMkID0gdG9PYnNlcnZhYmxlKHRoaXMua2V5cyk7XG4gIHByb3RlY3RlZCBpbmNsdWRlRGVmYXVsdENTViA9IGlucHV0KGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgaGVhZGVyc0NoYW5nZWQgPSBvdXRwdXQ8c3RyaW5nW10+KCk7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCB0ZXJtRmllbGRzID0gdGVybUZpZWxkcztcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVGVybUZpZWxkcyA9IHNpZ25hbChbJ0BpZCddKTtcbiAgcHJvdGVjdGVkIHNob3dOb25JbmNsdWRlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIGFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKCkpLmV2ZXJ5KGtleSA9PiB0aGlzLmhlYWRlcnMoKVtrZXldLnNlbGVjdGVkKSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRIZWFkZXJzID0gY29tcHV0ZWQoKCkgPT5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuaGVhZGVycygpKVxuICAgICAgLmZsYXRNYXAoKHsgaGVhZGVycyB9KSA9PiBoZWFkZXJzKVxuICAgICAgLmZpbHRlcigoeyBzZWxlY3RlZCwgaW5jbHVkZWQgfSkgPT4gc2VsZWN0ZWQgJiYgKGluY2x1ZGVkIHx8IHRoaXMuc2hvd05vbkluY2x1ZGVkKCkpKVxuICAgICAgLm1hcCgoeyBrZXkgfSkgPT4ga2V5KVxuICApO1xuXG4gIHByaXZhdGUgc2NoZW1hcyQgPSB0aGlzLnNjaGVtYVNlcnZpY2Uuc2NoZW1hcyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSk7XG5cbiAgcHJpdmF0ZSBjc3ZIZWFkZXJzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIHByb3RlY3RlZCBoZWFkZXJzID0gc2lnbmFsPElHcm91cGVkSGVhZGVycz4oe30pO1xuICBwcm90ZWN0ZWQgZ3JvdXBzID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LnZhbHVlcyh0aGlzLmhlYWRlcnMoKSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY3N2JCwgdGhpcy5rZXlzJCwgdGhpcy5zY2hlbWFzJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChbY3N2LCBrZXlzLCBzY2hlbWFzXSkgPT4gWyFpc1VuZGVmaW5lZChjc3YpLCBrZXlzPy5sZW5ndGggPiAwLCAhaXNVbmRlZmluZWQoc2NoZW1hcyldLmV2ZXJ5KEJvb2xlYW4pKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZy5zZXQodHJ1ZSkpLFxuICAgICAgICBtZXJnZU1hcCgoW2Nzdiwga2V5cywgc2NoZW1hc10pID0+XG4gICAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5zY2hlbWFTZXJ2aWNlLnBhcnNlSGVhZGVycyQoY3N2KSxcbiAgICAgICAgICAgIGtleXM6IG9mKGtleXMpLFxuICAgICAgICAgICAgc2NoZW1hczogb2Yoc2NoZW1hcylcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IGhlYWRlcnMsIGtleXMsIHNjaGVtYXMgfSkgPT4ge1xuICAgICAgICB0aGlzLmNzdkhlYWRlcnMuc2V0KGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSBpc0NTVkluY2x1ZGVkKHNjaGVtYXMpO1xuICAgICAgICBjb25zdCBpc0RlZmF1bHRTZWxlY3RlZCA9IHRoaXMuaW5jbHVkZURlZmF1bHRDU1YoKSA/ICgpID0+IHRydWUgOiBpc0RlZmF1bHRDU1ZTZWxlY3RlZChzY2hlbWFzKTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgICAoIWtleXMubGVuZ3RoIHx8IGtleXMuc29tZSh2ID0+IGtleS5zdGFydHNXaXRoKHYpKSkgJiYgaXNEZWZhdWx0U2VsZWN0ZWQoa2V5KTtcblxuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KFxuICAgICAgICAgIGhlYWRlcnMucmVkdWNlKChwcmV2LCBoZWFkZXJLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gaGVhZGVyR3JvdXAoaGVhZGVyS2V5KTtcbiAgICAgICAgICAgIHByZXZbZ3JvdXBLZXldID0gcHJldltncm91cEtleV0gfHwge1xuICAgICAgICAgICAgICBrZXk6IGdyb3VwS2V5LFxuICAgICAgICAgICAgICBoZWFkZXJzOiBbXSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJ0aWFsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBvcGVuOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBwcmV2W2dyb3VwS2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSGVhZGVyID0ge1xuICAgICAgICAgICAgICBrZXk6IGhlYWRlcktleSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQoaGVhZGVyS2V5KSxcbiAgICAgICAgICAgICAgaW5jbHVkZWQ6IGlzSW5jbHVkZWQoaGVhZGVyS2V5KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyb3VwLmhlYWRlcnMucHVzaChncm91cEhlYWRlcik7XG4gICAgICAgICAgICBwcmV2W2dyb3VwS2V5XSA9IHVwZGF0ZUdyb3VwU2VsZWN0ZWQoZ3JvdXApO1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfSwge30gYXMgSUdyb3VwZWRIZWFkZXJzKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkZXJzKCk/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmhlYWRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZEhlYWRlcnMoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhlYWRlcnNHcm91cChncm91cDogSUdyb3VwKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpcy5oZWFkZXJzKCksIFtncm91cC5rZXldOiBncm91cCB9O1xuICAgIHRoaXMuaGVhZGVycy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcEhlYWRlcihldmVudDogQ2RrRHJhZ0Ryb3A8SUhlYWRlcltdPiwgZ3JvdXA6IElHcm91cCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBncm91cC5oZWFkZXJzLnNsaWNlKCk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KGhlYWRlcnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0geyAuLi5ncm91cCwgaGVhZGVycyB9O1xuICAgIHRoaXMudXBkYXRlSGVhZGVyc0dyb3VwKHVwZGF0ZWRHcm91cCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QWxsKGFsbFNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgLy8gc2VsZWN0IGFsbCB0ZXJtIGZpZWxkc1xuICAgIHRoaXMuc2VsZWN0ZWRUZXJtRmllbGRzLnNldCh0ZXJtRmllbGRzKTtcblxuICAgIC8vIHNlbGVjdCBhbGwga2V5c1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmhlYWRlcnMoKSkubWFwKChba2V5LCBncm91cF0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICB1cGRhdGVHcm91cEhlYWRlcnNTZWxlY3RlZCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGFsbFNlbGVjdGVkXG4gICAgICAgIH0gYXMgSUdyb3VwKVxuICAgICAgXSlcbiAgICApIGFzIElHcm91cGVkSGVhZGVycztcbiAgICB0aGlzLmhlYWRlcnMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUdyb3VwKHNlbGVjdGVkOiBib29sZWFuLCBncm91cDogSUdyb3VwKSB7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gdXBkYXRlR3JvdXBIZWFkZXJzU2VsZWN0ZWQoeyAuLi5ncm91cCwgc2VsZWN0ZWQgfSk7XG4gICAgdGhpcy51cGRhdGVIZWFkZXJzR3JvdXAodXBkYXRlZEdyb3VwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVIZWFkZXIoc2VsZWN0ZWQ6IGJvb2xlYW4sIGdyb3VwOiBJR3JvdXAsIGhlYWRlcjogSUhlYWRlcikge1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHVwZGF0ZUdyb3VwU2VsZWN0ZWQoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBoZWFkZXJzOiBncm91cC5oZWFkZXJzLm1hcCh2ID0+ICh7IC4uLnYsIHNlbGVjdGVkOiB2LmtleSA9PT0gaGVhZGVyLmtleSA/IHNlbGVjdGVkIDogdi5zZWxlY3RlZCB9KSlcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUhlYWRlcnNHcm91cCh1cGRhdGVkR3JvdXApO1xuICB9XG5cbiAgLy8gVGVybSBmaWVsZHNcblxuICBwcm90ZWN0ZWQgaXNUZXJtRmllbGRTZWxlY3QoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGVybUZpZWxkcygpLmluY2x1ZGVzKGZpZWxkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVUZXJtRmllbGQoc2VsZWN0ZWQ6IGJvb2xlYW4sIGZpZWxkOiBzdHJpbmcpIHtcbiAgICAvLyB1cGRhdGUgdGVybSBmaWVsZFxuICAgIGNvbnN0IHNlbGVjdGVkVGVybUZpZWxkcyA9IHRoaXMuc2VsZWN0ZWRUZXJtRmllbGRzKCk7XG4gICAgdGhpcy5zZWxlY3RlZFRlcm1GaWVsZHMuc2V0KHNlbGVjdGVkVGVybUZpZWxkcy5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IGZpZWxkIHx8IHNlbGVjdGVkKSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5oZWFkZXJzKCkpLm1hcCgoW2tleSwgZ3JvdXBdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdXBkYXRlR3JvdXBTZWxlY3RlZCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgaGVhZGVyczogZ3JvdXAuaGVhZGVycy5tYXAoaGVhZGVyID0+ICh7XG4gICAgICAgICAgICAuLi5oZWFkZXIsXG4gICAgICAgICAgICBzZWxlY3RlZDogaXNUZXJtRmllbGQoZmllbGQsIGhlYWRlcikgPyBzZWxlY3RlZCA6IGhlYWRlci5zZWxlY3RlZFxuICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIElHcm91cClcbiAgICAgIF0pXG4gICAgKSBhcyBJR3JvdXBlZEhlYWRlcnM7XG4gICAgdGhpcy5oZWFkZXJzLnNldChoZWFkZXJzKTtcbiAgfVxufVxuIiwiPHAgY2xhc3M9XCJtYi0yXCI+UGxlYXNlIHNlbGVjdCB3aGljaCBjb2x1bW5zIHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGU6PC9wPlxuXG48cCBjbGFzcz1cIm15LTIgaXMtc2l6ZS03XCI+XG4gIDxpPllvdSBjYW4gZHJhZyBhbmQgZHJvcCB0aGUgaGVhZGVycyB0byBzb3J0IHRoZW0gYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gdGhlIENTViBmaWxlLjwvaT5cbjwvcD5cblxuPGRpdiBjbGFzcz1cImNvbHVtbnMgdG9nZ2xlLWFsbCBteC00IHBiLTEgbWItMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIiBbbmdNb2RlbF09XCJhbGxTZWxlY3RlZCgpXCIgKGNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5Ub2dnbGUgQWxsPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93IGhhcy10ZXh0LXJpZ2h0XCI+XG4gICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiPlxuICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93blRvZ2dsZSBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIHR5cGU9XCJidXR0b25cIiBpZD1cInNlbGVjdC1tZW51XCI+XG4gICAgICAgIDxzcGFuPkFkdmFuY2VkIEZpbHRlcnM8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhRmlsdGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cInNlbGVjdC1tZW51XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCI+XG4gICAgICAgICAgPGEgbmdiRHJvcGRvd25JdGVtPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNob3dOb25JbmNsdWRlZCgpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNob3dOb25JbmNsdWRlZC5zZXQoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPlxuICAgICAgICAgICAgICAgIEluY2x1ZGVcbiAgICAgICAgICAgICAgICA8Y29kZT5pbnRlcm5hbDwvY29kZT5cbiAgICAgICAgICAgICAgICBmaWVsZHNcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgICAgICAgIDxwPlRvZ2dsZSBUZXJtIEZpZWxkczwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAZm9yIChmaWVsZCBvZiB0ZXJtRmllbGRzOyB0cmFjayBmaWVsZCkge1xuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bkl0ZW0+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzVGVybUZpZWxkU2VsZWN0KGZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRlcm1GaWVsZCgkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgZmllbGQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbkBpZiAobG9hZGluZygpKSB7XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXIgcHktM1wiPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhU3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiZHJhZy1jb250YWluZXJcIj5cbiAgICBAZm9yIChncm91cCBvZiBncm91cHMoKTsgdHJhY2sgZ3JvdXAua2V5KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJncm91cC5wYXJ0aWFsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUdyb3VwKCRldmVudC50YXJnZXQuY2hlY2tlZCwgZ3JvdXApXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgZ3JvdXAua2V5IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlci1pY29uIGhhcy10ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwib3BlbiAvIGNsb3NlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJncm91cC5vcGVuID0gIWdyb3VwLm9wZW5cIlxuICAgICAgICAgICAgcG9pbnRlcj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWdyb3VwLm9wZW5cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVMZWZ0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJncm91cC5vcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgcC0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZ3JvdXAub3BlblwiPlxuICAgICAgICAgIDx1bCBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BIZWFkZXIoJGV2ZW50LCBncm91cClcIj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBncm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIua2V5KSB7XG4gICAgICAgICAgICAgIEBpZiAoaGVhZGVyLmluY2x1ZGVkIHx8IHNob3dOb25JbmNsdWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgPGxpIGNka0RyYWc+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaGVhZGVyLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUhlYWRlcigkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGdyb3VwLCBoZWFkZXIpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaGVhZGVyLmtleSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFlLGVBQWUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxD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IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIENka0Ryb3BMaXN0LCBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBpc0RlZmF1bHRDU1ZTZWxlY3RlZCwgaXNDU1ZJbmNsdWRlZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEvc2NoZW1hLXV0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IE5nYkRyb3Bkb3duLCBOZ2JEcm9wZG93blRvZ2dsZSwgTmdiRHJvcGRvd25NZW51LCBOZ2JEcm9wZG93bkl0ZW0gfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEhlU2NoZW1hU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVtYS9zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBmYUFuZ2xlRG93biwgZmFBbmdsZUxlZnQsIGZhRmlsdGVyLCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbnRlcmZhY2UgSUhlYWRlciB7XG4gIGtleTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGBmYWxzZWAgaWYgaXQgaXMgYW4gYGludGVybmFsYCBmaWVsZC5cbiAgICovXG4gIGluY2x1ZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSUdyb3VwIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBwYXJ0aWFsU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9wZW46IGJvb2xlYW47XG4gIGhlYWRlcnM6IElIZWFkZXJbXTtcbn1cblxuaW50ZXJmYWNlIElHcm91cGVkSGVhZGVycyB7XG4gIFtncm91cDogc3RyaW5nXTogSUdyb3VwO1xufVxuXG5jb25zdCBoZWFkZXJHcm91cCA9IChoZWFkZXI6IHN0cmluZykgPT4ge1xuICBjb25zdCBwYXJ0cyA9IGhlYWRlci5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyID8gJycgOiBbcGFydHNbMF0sIHBhcnRzWzFdXS5qb2luKCcuJyk7XG59O1xuXG5jb25zdCB0ZXJtRmllbGRzID0gWydAaWQnLCAnbmFtZScsICd1bml0cycsICd0ZXJtVHlwZSddO1xuXG5jb25zdCBpc1Rlcm1GaWVsZCA9IChmaWVsZDogc3RyaW5nLCB7IGtleSB9OiBJSGVhZGVyKSA9PlxuICBbJ3Rlcm0nLCAnbWV0aG9kTW9kZWwnLCAnY291bnRyeScsICdwcm9kdWN0JywgJ29wZXJhdGlvbicsICdrZXknXS5zb21lKHBhcmVudCA9PlxuICAgIGtleS5lbmRzV2l0aChbcGFyZW50LCBmaWVsZF0uam9pbignLicpKVxuICApO1xuXG5jb25zdCB1cGRhdGVHcm91cEhlYWRlcnNTZWxlY3RlZCA9ICh7IGhlYWRlcnMsIC4uLmdyb3VwIH06IElHcm91cCkgPT4gKHtcbiAgLi4uZ3JvdXAsXG4gIGhlYWRlcnM6IGhlYWRlcnMubWFwKGhlYWRlciA9PiAoeyAuLi5oZWFkZXIsIHNlbGVjdGVkOiBncm91cC5zZWxlY3RlZCB9KSlcbn0pO1xuXG5jb25zdCB1cGRhdGVHcm91cFNlbGVjdGVkID0gKGdyb3VwOiBJR3JvdXApID0+IHtcbiAgY29uc3QgYWxsU2VsZWN0ZWQgPSBncm91cC5oZWFkZXJzLmV2ZXJ5KCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5ncm91cCxcbiAgICBzZWxlY3RlZDogYWxsU2VsZWN0ZWQsXG4gICAgcGFydGlhbFNlbGVjdGVkOiAhYWxsU2VsZWN0ZWQgJiYgZ3JvdXAuaGVhZGVycy5zb21lKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKVxuICB9O1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYkRyb3Bkb3duLFxuICAgIE5nYkRyb3Bkb3duVG9nZ2xlLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBOZ2JEcm9wZG93bk1lbnUsXG4gICAgTmdiRHJvcGRvd25JdGVtLFxuICAgIENka0Ryb3BMaXN0LFxuICAgIENka0RyYWdcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBzY2hlbWFTZXJ2aWNlID0gaW5qZWN0KEhlU2NoZW1hU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhU3Bpbm5lciA9IGZhU3Bpbm5lcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRmlsdGVyID0gZmFGaWx0ZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUFuZ2xlRG93biA9IGZhQW5nbGVEb3duO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFBbmdsZUxlZnQgPSBmYUFuZ2xlTGVmdDtcblxuICBwcm90ZWN0ZWQgY3N2ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGNzdiQgPSB0b09ic2VydmFibGUodGhpcy5jc3YpO1xuICBwcm90ZWN0ZWQga2V5cyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUga2V5cyQgPSB0b09ic2VydmFibGUodGhpcy5rZXlzKTtcbiAgcHJvdGVjdGVkIGluY2x1ZGVEZWZhdWx0Q1NWID0gaW5wdXQoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBoZWFkZXJzQ2hhbmdlZCA9IG91dHB1dDxzdHJpbmdbXT4oKTtcblxuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgcHJvdGVjdGVkIHRlcm1GaWVsZHMgPSB0ZXJtRmllbGRzO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRUZXJtRmllbGRzID0gc2lnbmFsKFsnQGlkJ10pO1xuICBwcm90ZWN0ZWQgc2hvd05vbkluY2x1ZGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgYWxsU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMoKSkuZXZlcnkoa2V5ID0+IHRoaXMuaGVhZGVycygpW2tleV0uc2VsZWN0ZWQpKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZEhlYWRlcnMgPSBjb21wdXRlZCgoKSA9PlxuICAgIE9iamVjdC52YWx1ZXModGhpcy5oZWFkZXJzKCkpXG4gICAgICAuZmxhdE1hcCgoeyBoZWFkZXJzIH0pID0+IGhlYWRlcnMpXG4gICAgICAuZmlsdGVyKCh7IHNlbGVjdGVkLCBpbmNsdWRlZCB9KSA9PiBzZWxlY3RlZCAmJiAoaW5jbHVkZWQgfHwgdGhpcy5zaG93Tm9uSW5jbHVkZWQoKSkpXG4gICAgICAubWFwKCh7IGtleSB9KSA9PiBrZXkpXG4gICk7XG5cbiAgcHJpdmF0ZSBzY2hlbWFzJCA9IHRoaXMuc2NoZW1hU2VydmljZS5zY2hlbWFzJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKTtcblxuICBwcml2YXRlIGNzdkhlYWRlcnMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcHJvdGVjdGVkIGhlYWRlcnMgPSBzaWduYWw8SUdyb3VwZWRIZWFkZXJzPih7fSk7XG4gIHByb3RlY3RlZCBncm91cHMgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuaGVhZGVycygpKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5jc3YkLCB0aGlzLmtleXMkLCB0aGlzLnNjaGVtYXMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtjc3YsIF9rZXlzLCBzY2hlbWFzXSkgPT4gWyFpc1VuZGVmaW5lZChjc3YpLCAhaXNVbmRlZmluZWQoc2NoZW1hcyldLmV2ZXJ5KEJvb2xlYW4pKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZy5zZXQodHJ1ZSkpLFxuICAgICAgICBtZXJnZU1hcCgoW2Nzdiwga2V5cywgc2NoZW1hc10pID0+XG4gICAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5zY2hlbWFTZXJ2aWNlLnBhcnNlSGVhZGVycyQoY3N2KSxcbiAgICAgICAgICAgIGtleXM6IG9mKGtleXMpLFxuICAgICAgICAgICAgc2NoZW1hczogb2Yoc2NoZW1hcylcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IGhlYWRlcnMsIGtleXMsIHNjaGVtYXMgfSkgPT4ge1xuICAgICAgICB0aGlzLmNzdkhlYWRlcnMuc2V0KGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSBpc0NTVkluY2x1ZGVkKHNjaGVtYXMpO1xuICAgICAgICBjb25zdCBpc0RlZmF1bHRTZWxlY3RlZCA9IHRoaXMuaW5jbHVkZURlZmF1bHRDU1YoKSA/ICgpID0+IHRydWUgOiBpc0RlZmF1bHRDU1ZTZWxlY3RlZChzY2hlbWFzKTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgICAoIWtleXMubGVuZ3RoIHx8IGtleXMuc29tZSh2ID0+IGtleS5zdGFydHNXaXRoKHYpKSkgJiYgaXNEZWZhdWx0U2VsZWN0ZWQoa2V5KTtcblxuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KFxuICAgICAgICAgIGhlYWRlcnMucmVkdWNlKChwcmV2LCBoZWFkZXJLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gaGVhZGVyR3JvdXAoaGVhZGVyS2V5KTtcbiAgICAgICAgICAgIHByZXZbZ3JvdXBLZXldID0gcHJldltncm91cEtleV0gfHwge1xuICAgICAgICAgICAgICBrZXk6IGdyb3VwS2V5LFxuICAgICAgICAgICAgICBoZWFkZXJzOiBbXSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJ0aWFsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBvcGVuOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBwcmV2W2dyb3VwS2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSGVhZGVyID0ge1xuICAgICAgICAgICAgICBrZXk6IGhlYWRlcktleSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQoaGVhZGVyS2V5KSxcbiAgICAgICAgICAgICAgaW5jbHVkZWQ6IGlzSW5jbHVkZWQoaGVhZGVyS2V5KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyb3VwLmhlYWRlcnMucHVzaChncm91cEhlYWRlcik7XG4gICAgICAgICAgICBwcmV2W2dyb3VwS2V5XSA9IHVwZGF0ZUdyb3VwU2VsZWN0ZWQoZ3JvdXApO1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfSwge30gYXMgSUdyb3VwZWRIZWFkZXJzKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkZXJzKCk/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmhlYWRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZEhlYWRlcnMoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhlYWRlcnNHcm91cChncm91cDogSUdyb3VwKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpcy5oZWFkZXJzKCksIFtncm91cC5rZXldOiBncm91cCB9O1xuICAgIHRoaXMuaGVhZGVycy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcEhlYWRlcihldmVudDogQ2RrRHJhZ0Ryb3A8SUhlYWRlcltdPiwgZ3JvdXA6IElHcm91cCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBncm91cC5oZWFkZXJzLnNsaWNlKCk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KGhlYWRlcnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0geyAuLi5ncm91cCwgaGVhZGVycyB9O1xuICAgIHRoaXMudXBkYXRlSGVhZGVyc0dyb3VwKHVwZGF0ZWRHcm91cCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QWxsKGFsbFNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgLy8gc2VsZWN0IGFsbCB0ZXJtIGZpZWxkc1xuICAgIHRoaXMuc2VsZWN0ZWRUZXJtRmllbGRzLnNldCh0ZXJtRmllbGRzKTtcblxuICAgIC8vIHNlbGVjdCBhbGwga2V5c1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmhlYWRlcnMoKSkubWFwKChba2V5LCBncm91cF0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICB1cGRhdGVHcm91cEhlYWRlcnNTZWxlY3RlZCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGFsbFNlbGVjdGVkXG4gICAgICAgIH0gYXMgSUdyb3VwKVxuICAgICAgXSlcbiAgICApIGFzIElHcm91cGVkSGVhZGVycztcbiAgICB0aGlzLmhlYWRlcnMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUdyb3VwKHNlbGVjdGVkOiBib29sZWFuLCBncm91cDogSUdyb3VwKSB7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gdXBkYXRlR3JvdXBIZWFkZXJzU2VsZWN0ZWQoeyAuLi5ncm91cCwgc2VsZWN0ZWQgfSk7XG4gICAgdGhpcy51cGRhdGVIZWFkZXJzR3JvdXAodXBkYXRlZEdyb3VwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVIZWFkZXIoc2VsZWN0ZWQ6IGJvb2xlYW4sIGdyb3VwOiBJR3JvdXAsIGhlYWRlcjogSUhlYWRlcikge1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHVwZGF0ZUdyb3VwU2VsZWN0ZWQoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBoZWFkZXJzOiBncm91cC5oZWFkZXJzLm1hcCh2ID0+ICh7IC4uLnYsIHNlbGVjdGVkOiB2LmtleSA9PT0gaGVhZGVyLmtleSA/IHNlbGVjdGVkIDogdi5zZWxlY3RlZCB9KSlcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUhlYWRlcnNHcm91cCh1cGRhdGVkR3JvdXApO1xuICB9XG5cbiAgLy8gVGVybSBmaWVsZHNcblxuICBwcm90ZWN0ZWQgaXNUZXJtRmllbGRTZWxlY3QoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGVybUZpZWxkcygpLmluY2x1ZGVzKGZpZWxkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVUZXJtRmllbGQoc2VsZWN0ZWQ6IGJvb2xlYW4sIGZpZWxkOiBzdHJpbmcpIHtcbiAgICAvLyB1cGRhdGUgdGVybSBmaWVsZFxuICAgIGNvbnN0IHNlbGVjdGVkVGVybUZpZWxkcyA9IHRoaXMuc2VsZWN0ZWRUZXJtRmllbGRzKCk7XG4gICAgdGhpcy5zZWxlY3RlZFRlcm1GaWVsZHMuc2V0KHNlbGVjdGVkVGVybUZpZWxkcy5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IGZpZWxkIHx8IHNlbGVjdGVkKSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5oZWFkZXJzKCkpLm1hcCgoW2tleSwgZ3JvdXBdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdXBkYXRlR3JvdXBTZWxlY3RlZCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgaGVhZGVyczogZ3JvdXAuaGVhZGVycy5tYXAoaGVhZGVyID0+ICh7XG4gICAgICAgICAgICAuLi5oZWFkZXIsXG4gICAgICAgICAgICBzZWxlY3RlZDogaXNUZXJtRmllbGQoZmllbGQsIGhlYWRlcikgPyBzZWxlY3RlZCA6IGhlYWRlci5zZWxlY3RlZFxuICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIElHcm91cClcbiAgICAgIF0pXG4gICAgKSBhcyBJR3JvdXBlZEhlYWRlcnM7XG4gICAgdGhpcy5oZWFkZXJzLnNldChoZWFkZXJzKTtcbiAgfVxufVxuIiwiPHAgY2xhc3M9XCJtYi0yXCI+UGxlYXNlIHNlbGVjdCB3aGljaCBjb2x1bW5zIHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGU6PC9wPlxuXG48cCBjbGFzcz1cIm15LTIgaXMtc2l6ZS03XCI+XG4gIDxpPllvdSBjYW4gZHJhZyBhbmQgZHJvcCB0aGUgaGVhZGVycyB0byBzb3J0IHRoZW0gYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gdGhlIENTViBmaWxlLjwvaT5cbjwvcD5cblxuPGRpdiBjbGFzcz1cImNvbHVtbnMgdG9nZ2xlLWFsbCBteC00IHBiLTEgbWItMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIiBbbmdNb2RlbF09XCJhbGxTZWxlY3RlZCgpXCIgKGNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5Ub2dnbGUgQWxsPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93IGhhcy10ZXh0LXJpZ2h0XCI+XG4gICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiPlxuICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93blRvZ2dsZSBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIHR5cGU9XCJidXR0b25cIiBpZD1cInNlbGVjdC1tZW51XCI+XG4gICAgICAgIDxzcGFuPkFkdmFuY2VkIEZpbHRlcnM8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhRmlsdGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cInNlbGVjdC1tZW51XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCI+XG4gICAgICAgICAgPGEgbmdiRHJvcGRvd25JdGVtPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNob3dOb25JbmNsdWRlZCgpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNob3dOb25JbmNsdWRlZC5zZXQoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPlxuICAgICAgICAgICAgICAgIEluY2x1ZGVcbiAgICAgICAgICAgICAgICA8Y29kZT5pbnRlcm5hbDwvY29kZT5cbiAgICAgICAgICAgICAgICBmaWVsZHNcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgICAgICAgIDxwPlRvZ2dsZSBUZXJtIEZpZWxkczwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAZm9yIChmaWVsZCBvZiB0ZXJtRmllbGRzOyB0cmFjayBmaWVsZCkge1xuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bkl0ZW0+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzVGVybUZpZWxkU2VsZWN0KGZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRlcm1GaWVsZCgkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgZmllbGQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbkBpZiAobG9hZGluZygpKSB7XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXIgcHktM1wiPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhU3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiZHJhZy1jb250YWluZXJcIj5cbiAgICBAZm9yIChncm91cCBvZiBncm91cHMoKTsgdHJhY2sgZ3JvdXAua2V5KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJncm91cC5wYXJ0aWFsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUdyb3VwKCRldmVudC50YXJnZXQuY2hlY2tlZCwgZ3JvdXApXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgZ3JvdXAua2V5IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlci1pY29uIGhhcy10ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwib3BlbiAvIGNsb3NlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJncm91cC5vcGVuID0gIWdyb3VwLm9wZW5cIlxuICAgICAgICAgICAgcG9pbnRlcj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWdyb3VwLm9wZW5cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVMZWZ0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJncm91cC5vcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgcC0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZ3JvdXAub3BlblwiPlxuICAgICAgICAgIDx1bCBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BIZWFkZXIoJGV2ZW50LCBncm91cClcIj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBncm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIua2V5KSB7XG4gICAgICAgICAgICAgIEBpZiAoaGVhZGVyLmluY2x1ZGVkIHx8IHNob3dOb25JbmNsdWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgPGxpIGNka0RyYWc+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaGVhZGVyLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUhlYWRlcigkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGdyb3VwLCBoZWFkZXIpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaGVhZGVyLmtleSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|