@firestitch/report 18.17.4 → 18.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/api-error-message.d.ts +1 -0
- package/app/reports/data/report.data.d.ts +8 -0
- package/app/reports/dialogs/report-package-import/report-package-import.component.d.ts +37 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +2 -0
- package/app/reports/interfaces/report-package-check.interface.d.ts +21 -0
- package/app/reports/interfaces/report-package-finding-severity.type.d.ts +1 -0
- package/app/reports/interfaces/report-package-finding.interface.d.ts +7 -0
- package/app/reports/interfaces/report-package-import-response.interface.d.ts +6 -0
- package/app/reports/interfaces/report-package-imported-report.interface.d.ts +4 -0
- package/app/reports/views/reports/fs-ai-reports.component.d.ts +4 -0
- package/esm2022/app/reports/api-error-message.mjs +8 -0
- package/esm2022/app/reports/data/report.data.mjs +37 -1
- package/esm2022/app/reports/dialogs/report-package-import/report-package-import.component.mjs +144 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +13 -11
- package/esm2022/app/reports/interfaces/report-package-check.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-finding-severity.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-finding.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-import-response.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-imported-report.interface.mjs +2 -0
- package/esm2022/app/reports/tile-loads.mjs +6 -9
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
- package/esm2022/app/reports/views/reports/fs-ai-reports.component.mjs +56 -9
- package/esm2022/public_api.mjs +6 -1
- package/fesm2022/{firestitch-report-echarts-BxAcubsP.mjs → firestitch-report-echarts-qh_mqik9.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-BxAcubsP.mjs.map → firestitch-report-echarts-qh_mqik9.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-BtC-wiNZ.mjs → firestitch-report-firestitch-report-D-WG_G5d.mjs} +264 -59
- package/fesm2022/firestitch-report-firestitch-report-D-WG_G5d.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +5 -0
- package/fesm2022/firestitch-report-firestitch-report-BtC-wiNZ.mjs.map +0 -1
|
@@ -4,14 +4,16 @@ import { ActivatedRoute, Router, RouterLink } from '@angular/router';
|
|
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
5
5
|
import { MatIconModule } from '@angular/material/icon';
|
|
6
6
|
import { FsChipModule } from '@firestitch/chip';
|
|
7
|
-
import { FsFilterModule, ItemType } from '@firestitch/filter';
|
|
7
|
+
import { ActionMode, FsFilterModule, ItemType } from '@firestitch/filter';
|
|
8
8
|
import { FsMessage } from '@firestitch/message';
|
|
9
|
+
import { FsProcess } from '@firestitch/process';
|
|
9
10
|
import { FsPrompt } from '@firestitch/prompt';
|
|
10
11
|
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
11
12
|
import { FsTreeComponent, FsTreeModule, TreeActionType, TreeDragMode, } from '@firestitch/tree';
|
|
12
|
-
import { switchMap } from 'rxjs';
|
|
13
|
+
import { filter, switchMap, tap } from 'rxjs';
|
|
13
14
|
import { ReportData } from '../../data/report.data';
|
|
14
15
|
import { GlobalSettingsComponent } from '../../dialogs/global-settings/global-settings.component';
|
|
16
|
+
import { ReportPackageImportComponent, } from '../../dialogs/report-package-import/report-package-import.component';
|
|
15
17
|
import { ReportNodeType, ReportState, } from '../../interfaces/report.interface';
|
|
16
18
|
import * as i0 from "@angular/core";
|
|
17
19
|
import * as i1 from "@firestitch/chip";
|
|
@@ -22,8 +24,10 @@ import * as i5 from "@angular/material/icon";
|
|
|
22
24
|
// The reports listing — an fs-tree of folders and the reports filed into them.
|
|
23
25
|
// Rows link out through a URL pattern (a ':id' token → the report id; a leading
|
|
24
26
|
// '/' makes it absolute, otherwise it's relative to this component's route).
|
|
25
|
-
// Create prompts for a title, creates the report, then routes to it.
|
|
26
|
-
//
|
|
27
|
+
// Create prompts for a title, creates the report, then routes to it. Import
|
|
28
|
+
// picks a report package (.zip), checks it in ReportPackageImportComponent and
|
|
29
|
+
// routes to the new report the same way; a report row's Export downloads one.
|
|
30
|
+
// The gear opens the global Report Settings dialog (AI knowledge document +
|
|
27
31
|
// semantic-database build), which lives in this package. No routing is
|
|
28
32
|
// hard-coded here.
|
|
29
33
|
//
|
|
@@ -62,6 +66,7 @@ export class FsAiReportsComponent {
|
|
|
62
66
|
_route = inject(ActivatedRoute);
|
|
63
67
|
_prompt = inject(FsPrompt);
|
|
64
68
|
_message = inject(FsMessage);
|
|
69
|
+
_process = inject(FsProcess);
|
|
65
70
|
_dialog = inject(MatDialog);
|
|
66
71
|
_destroyRef = inject(DestroyRef);
|
|
67
72
|
// The filter bar's current query — carries `state` when Show Deleted is on.
|
|
@@ -97,10 +102,7 @@ export class FsAiReportsComponent {
|
|
|
97
102
|
required: true,
|
|
98
103
|
})
|
|
99
104
|
.pipe(switchMap((name) => this._reportData.create(name, reportFolderId)), takeUntilDestroyed(this._destroyRef))
|
|
100
|
-
.subscribe((report) =>
|
|
101
|
-
const pattern = this.createPattern();
|
|
102
|
-
this._router.navigate(this._patternCommands(pattern, report.id), pattern.startsWith('/') ? {} : { relativeTo: this._route });
|
|
103
|
-
});
|
|
105
|
+
.subscribe((report) => this._openNewReport(report.id));
|
|
104
106
|
}
|
|
105
107
|
// The global Report Settings dialog: the AI knowledge document and the
|
|
106
108
|
// semantic-database build. A running build streams into the FsProcess dock,
|
|
@@ -157,6 +159,15 @@ export class FsAiReportsComponent {
|
|
|
157
159
|
primary: false,
|
|
158
160
|
click: () => this._createFolder(null),
|
|
159
161
|
},
|
|
162
|
+
// Pick a report package (.zip) and check it before importing it as a
|
|
163
|
+
// new report. Not `multiple`, so fs-file hands back one FsFile.
|
|
164
|
+
{
|
|
165
|
+
mode: ActionMode.File,
|
|
166
|
+
label: 'Import',
|
|
167
|
+
primary: false,
|
|
168
|
+
accept: '.zip',
|
|
169
|
+
select: (file) => this._importPackage(file),
|
|
170
|
+
},
|
|
160
171
|
{
|
|
161
172
|
label: 'Create',
|
|
162
173
|
primary: true,
|
|
@@ -234,6 +245,12 @@ export class FsAiReportsComponent {
|
|
|
234
245
|
show: (node) => this._isFolderNode(node) && !this._isDeletedNode(node),
|
|
235
246
|
click: (node) => this._createFolder(node.data?.id),
|
|
236
247
|
},
|
|
248
|
+
// Reports only: a package carries one report, never a folder.
|
|
249
|
+
{
|
|
250
|
+
label: 'Export',
|
|
251
|
+
show: (node) => !this._isFolderNode(node) && !this._isDeletedNode(node),
|
|
252
|
+
click: (node) => this._exportPackage(node.data?.id),
|
|
253
|
+
},
|
|
237
254
|
{
|
|
238
255
|
label: 'Delete',
|
|
239
256
|
show: (node) => !this._isDeletedNode(node),
|
|
@@ -498,6 +515,36 @@ export class FsAiReportsComponent {
|
|
|
498
515
|
this._load();
|
|
499
516
|
});
|
|
500
517
|
}
|
|
518
|
+
// The report as a package (.report.zip) that another server imports as a
|
|
519
|
+
// new report. The file is written server-side; FsProcess follows the link
|
|
520
|
+
// the server answers with.
|
|
521
|
+
_exportPackage(reportId) {
|
|
522
|
+
this._process.download('Exporting report package', this._reportData.exportPackage(reportId));
|
|
523
|
+
}
|
|
524
|
+
// The picked package goes to the check dialog, which runs the check and does
|
|
525
|
+
// the import. An imported report is a new report, so the listing reloads and
|
|
526
|
+
// routes to it as it does after Create.
|
|
527
|
+
_importPackage(file) {
|
|
528
|
+
this._dialog.open(ReportPackageImportComponent, {
|
|
529
|
+
data: { file: file.file },
|
|
530
|
+
width: '640px',
|
|
531
|
+
maxWidth: '95vw',
|
|
532
|
+
autoFocus: false,
|
|
533
|
+
})
|
|
534
|
+
.afterClosed()
|
|
535
|
+
.pipe(filter((report) => !!report), tap((report) => {
|
|
536
|
+
this._message.success('Imported report');
|
|
537
|
+
this._load();
|
|
538
|
+
this._openNewReport(report.reportId);
|
|
539
|
+
}), takeUntilDestroyed(this._destroyRef))
|
|
540
|
+
.subscribe();
|
|
541
|
+
}
|
|
542
|
+
// Route to a report the listing has just made, by Create or Import
|
|
543
|
+
// (createPattern).
|
|
544
|
+
_openNewReport(reportId) {
|
|
545
|
+
const pattern = this.createPattern();
|
|
546
|
+
this._router.navigate(this._patternCommands(pattern, reportId), pattern.startsWith('/') ? {} : { relativeTo: this._route });
|
|
547
|
+
}
|
|
501
548
|
// Turn a ':id' pattern into router commands. Relative unless it starts
|
|
502
549
|
// with '/', in which case the first segment carries the leading slash.
|
|
503
550
|
_patternCommands(pattern, id) {
|
|
@@ -527,4 +574,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
527
574
|
RouterLink,
|
|
528
575
|
], template: "<fs-filter [config]=\"filterConfig\"></fs-filter>\n\n<ng-container *fsSkeleton=\"nodes()\">\n <fs-tree [config]=\"treeConfig\">\n <ng-template\n fsTreeNode\n let-data=\"data\">\n <div\n class=\"fs-row.gap-sm.align-center node-row\"\n [class.deleted]=\"data.deleted\">\n <mat-icon class=\"node-icon\">\n {{ data.type === nodeType.Folder ? 'folder' : 'insert_chart_outlined' }}\n </mat-icon>\n\n @if (data.type === nodeType.Folder || data.deleted) {\n <!-- A deleted report can't be opened (the backend only assembles\n live ones, and one under a deleted folder is not on the live\n listing), so in Show Deleted mode the name is plain text \u2014\n restore it from the row menu first. -->\n <span class=\"node-name\">{{ data.name }}</span>\n } @else {\n <a\n class=\"node-name\"\n [routerLink]=\"openLink(data.report)\">\n {{ data.name }}\n </a>\n }\n\n <!-- Only on the row somebody deleted. Everything under a deleted\n folder is muted with it, but was not deleted itself. -->\n @if (data.stateDeleted) {\n <fs-chip size=\"tiny\">Deleted</fs-chip>\n }\n </div>\n </ng-template>\n </fs-tree>\n\n @if (!nodes().length) {\n <p class=\"small tree-empty\">\n No reports yet. Create one, or add a folder to group them.\n </p>\n }\n</ng-container>\n", styles: ["a{cursor:pointer}fs-tree .node>.container{flex:1;min-width:0}fs-tree .node>.container>.content{min-width:0}fs-tree .node>.container>button{margin-top:-5px}.node-row{min-width:0}.node-row.deleted{opacity:.55}.node-icon{font-size:18px;width:18px;height:18px;flex:none}.node-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-empty{margin-top:10px}\n"] }]
|
|
529
576
|
}], ctorParameters: () => [] });
|
|
530
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0cy9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnRzL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFnQixjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBRUwsZUFBZSxFQUNmLFlBQVksRUFHWixjQUFjLEVBQ2QsWUFBWSxHQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0s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Q0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO3dHQS9pQlUsb0JBQW9COzRGQUFwQixvQkFBb0IsdWhCQXFCSSxlQUFlLGdFQ3pHcEQsbytDQTJDQSxrYkRpQ0ksWUFBWSxxWEFDWixjQUFjLGtLQUNkLGdCQUFnQixpS0FDaEIsWUFBWSwwTkFDWixhQUFhLG9MQUNiLFVBQVU7OzRGQUdELG9CQUFvQjtrQkFmaEMsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixVQUFVO3FCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgT25Jbml0LFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5pbXBvcnQgeyBGc0NoaXBNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jaGlwJztcbmltcG9ydCB7IEZpbHRlckNvbmZpZywgRnNGaWx0ZXJNb2R1bGUsIEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcbmltcG9ydCB7XG4gIEZsYXRJdGVtTm9kZSxcbiAgRnNUcmVlQ29tcG9uZW50LFxuICBGc1RyZWVNb2R1bGUsXG4gIElUcmVlQ2hhbmdlUmVvcmRlcixcbiAgSVRyZWVDb25maWcsXG4gIFRyZWVBY3Rpb25UeXBlLFxuICBUcmVlRHJhZ01vZGUsXG59IGZyb20gJ0BmaXJlc3RpdGNoL3RyZWUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFJlcG9ydEZvbGRlcixcbiAgUmVwb3J0TGlzdEl0ZW0sXG4gIFJlcG9ydE5vZGUsXG4gIFJlcG9ydE5vZGVUeXBlLFxuICBSZXBvcnRTdGF0ZSxcbiAgUmVwb3J0VHJlZSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBUaGUgcmVwb3J0cyBsaXN0aW5nIOKAlCBhbiBmcy10cmVlIG9mIGZvbGRlcnMgYW5kIHRoZSByZXBvcnRzIGZpbGVkIGludG8gdGhlbS5cbi8vIFJvd3MgbGluayBvdXQgdGhyb3VnaCBhIFVSTCBwYXR0ZXJuIChhICc6aWQnIHRva2VuIOKGkiB0aGUgcmVwb3J0IGlkOyBhIGxlYWRpbmdcbi8vICcvJyBtYWtlcyBpdCBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGl0J3MgcmVsYXRpdmUgdG8gdGhpcyBjb21wb25lbnQncyByb3V0ZSkuXG4vLyBDcmVhdGUgcHJvbXB0cyBmb3IgYSB0aXRsZSwgY3JlYXRlcyB0aGUgcmVwb3J0LCB0aGVuIHJvdXRlcyB0byBpdC4gVGhlIGdlYXJcbi8vIG9wZW5zIHRoZSBnbG9iYWwgUmVwb3J0IFNldHRpbmdzIGRpYWxvZyAoQUkga25vd2xlZGdlIGRvY3VtZW50ICtcbi8vIHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkKSwgd2hpY2ggbGl2ZXMgaW4gdGhpcyBwYWNrYWdlLiBObyByb3V0aW5nIGlzXG4vLyBoYXJkLWNvZGVkIGhlcmUuXG4vL1xuLy8gRm9sZGVycyBuZXN0OyByZXBvcnRzIGFyZSBhbHdheXMgbGVhdmVzIOKAlCBjYW5Ecm9wIGVuZm9yY2VzIGl0IGhlcmUsIGFuZCB0aGVcbi8vIGJhY2tlbmQgZW5mb3JjZXMgaXQgc3RydWN0dXJhbGx5IGJ5IGtlZXBpbmcgdGhlIHRyZWUgaW4gaXRzIG93biB0YWJsZS4gQVxuLy8gcmVwb3J0IGluIG5vIGZvbGRlciBpcyBhIHJvb3Qgbm9kZSwgd2hpY2ggaXMgd2hlcmUgZXZlcnkgcmVwb3J0IHNhdCBiZWZvcmVcbi8vIGZvbGRlcnMgZXhpc3RlZCwgc28gbm90aGluZyBoYWQgdG8gYmUgbWlncmF0ZWQgb3IgYnVja2V0ZWQgYXMgXCJ1bmNhdGVnb3JpemVkXCIuXG4vL1xuLy8gRm9sZGVycyBhbmQgcmVwb3J0cyBhcmUgYm90aCBzb2Z0LWRlbGV0YWJsZSwgYW5kIGEgZm9sZGVyIGRlbGV0ZXMgd2hhdGV2ZXIgaXRcbi8vIGhvbGRzLiBPbmx5IHRoZSBmb2xkZXIncyBvd24gcm93IGlzIHdyaXR0ZW46IGV2ZXJ5dGhpbmcgdW5kZXIgaXQgZHJvcHMgb3V0IG9mXG4vLyB0aGUgbGlzdGluZyBiZWNhdXNlIGl0IHNpdHMgdW5kZXIgYSBkZWxldGVkIGZvbGRlciwgYW5kIGNvbWVzIGJhY2sgd2l0aCBpdC5cbi8vIFwiU2hvdyBEZWxldGVkXCIgc2hvd3MgdGhlIFdIT0xFIHRyZWUg4oCUIGxpdmUgYW5kIGRlbGV0ZWQgdG9nZXRoZXIsIGVhY2ggZGVsZXRlZFxuLy8gcm93IHdoZXJlIGl0IHdhcyBmaWxlZCDigJQgYW5kIG9uIGFueXRoaW5nIGRlbGV0ZWQgdGhlIGtlYmFiIG9mZmVycyBSZXN0b3JlXG4vLyBpbnN0ZWFkLiBSZXN0b3JpbmcgYWxzbyByZXN0b3JlcyBhbnkgZGVsZXRlZCBmb2xkZXIgYWJvdmUgdGhlIHJvdywgc28gaXQgbGFuZHNcbi8vIGJhY2sgd2hlcmUgaXQgd2FzIHJhdGhlciB0aGFuIGF0IHRoZSByb290LlxuLy9cbi8vIEV2ZXJ5IGZvbGRlciBzdGFydHMgY29sbGFwc2VkOyB0aGUgdHJlZSByZW1lbWJlcnMgd2hhdCB3YXMgb3BlbmVkIGFjcm9zcyBpdHNcbi8vIG93biByZWxvYWRzIChhIHJlbmFtZSwgYSBtb3ZlLCB0aGUgU2hvdyBEZWxldGVkIHRvZ2dsZSkgYW5kIGFjcm9zcyBhIHNlYXJjaC5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWFpLXJlcG9ydHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnMtYWktcmVwb3J0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGc0NoaXBNb2R1bGUsXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICBGc1RyZWVNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzIGVuZHBvaW50czsgb3ZlcnJpZGUgdG8gbW91bnQgZWxzZXdoZXJlLlxuICBwdWJsaWMgcmVhZG9ubHkgYmFzZVBhdGggPSBpbnB1dDxzdHJpbmc+KCdyZXBvcnRzJyk7XG5cbiAgLy8gV2hlcmUgYSByb3cgbGlua3MgdG87ICc6aWQnIGlzIHJlcGxhY2VkIHdpdGggdGhlIHJlcG9ydCBpZC4gRGVmYXVsdCB0YWtlc1xuICAvLyB5b3UgdG8gPGN1cnJlbnQgcm91dGU+LzppZC4gQWJzb2x1dGUgd2hlbiBpdCBzdGFydHMgd2l0aCAnLycuXG4gIHB1YmxpYyByZWFkb25seSBvcGVuUGF0dGVybiA9IGlucHV0PHN0cmluZz4oJzppZCcpO1xuXG4gIC8vIFdoZXJlIGEgZnJlc2hseS1jcmVhdGVkIHJlcG9ydCByb3V0ZXMgdG87IHNhbWUgJzppZCcgcGF0dGVybiBydWxlcy5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVBhdHRlcm4gPSBpbnB1dDxzdHJpbmc+KCc6aWQnKTtcblxuICAvLyBOdWxsIHVudGlsIHRoZSBmaXJzdCBsb2FkIHJlc29sdmVzIOKAlCB0aGF0IGlzIHdoYXQgZ2F0ZXMgKmZzU2tlbGV0b24uXG4gIHB1YmxpYyByZWFkb25seSBub2RlcyA9IHNpZ25hbDxSZXBvcnROb2RlW10+KG51bGwpO1xuXG4gIHB1YmxpYyB0cmVlQ29uZmlnOiBJVHJlZUNvbmZpZzxSZXBvcnROb2RlW10+O1xuICBwdWJsaWMgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWc7XG5cbiAgLy8gVGVtcGxhdGUtc2lkZSBoYW5kbGUgb24gdGhlIGVudW0sIHNvIGEgcm93IGNhbiB0ZWxsIGEgZm9sZGVyIGZyb20gYSByZXBvcnQuXG4gIHB1YmxpYyByZWFkb25seSBub2RlVHlwZSA9IFJlcG9ydE5vZGVUeXBlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWUgPSB2aWV3Q2hpbGQoRnNUcmVlQ29tcG9uZW50KTtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vIFRoZSBmaWx0ZXIgYmFyJ3MgY3VycmVudCBxdWVyeSDigJQgY2FycmllcyBgc3RhdGVgIHdoZW4gU2hvdyBEZWxldGVkIGlzIG9uLlxuICBwcml2YXRlIF9xdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAvLyBUaGUgZm9sZGVycyB0aGF0IHdlcmUgb3BlbiB3aGVuIGEgc2VhcmNoIHN0YXJ0ZWQ7IG51bGwgd2hpbGUgbm8gc2VhcmNoIGlzXG4gIC8vIHJ1bm5pbmcuIFRoZSBzZWFyY2ggb3BlbnMgZXZlcnkgbWF0Y2gncyBwYXRoIG92ZXIgdGhlIHRvcCBvZiB0aGVtLCBhbmRcbiAgLy8gY2xlYXJpbmcgaXQgcHV0cyB0aGVzZSBiYWNrLlxuICBwcml2YXRlIF9leHBhbmRlZEJlZm9yZVNlYXJjaDogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgYmVmb3JlIHRoZSBmaXJzdCBmZXRjaCByYXRoZXIgdGhhbiB3YWl0aW5nIG9uIHRoZSBlZmZlY3QgYWJvdmUsIHdoaWNoXG4gICAgLy8gZG9lcyBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBpbml0aWFsIGNoYW5nZSBkZXRlY3Rpb24gcGFzcy5cbiAgICB0aGlzLl9yZXBvcnREYXRhLmJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aCgpO1xuXG4gICAgdGhpcy5faW5pdEZpbHRlckNvbmZpZygpO1xuICAgIHRoaXMuX2luaXRUcmVlQ29uZmlnKCk7XG4gICAgdGhpcy5fbG9hZCgpO1xuICB9XG5cbiAgLy8gcm91dGVyTGluayBjb21tYW5kcyBmb3IgYSByZXBvcnQgcm93IChidWlsdCBmcm9tIG9wZW5QYXR0ZXJuKS5cbiAgcHVibGljIG9wZW5MaW5rKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuQ29tbWFuZHModGhpcy5vcGVuUGF0dGVybigpLCByZXBvcnQuaWQpO1xuICB9XG5cbiAgLy8gUHJvbXB0IGZvciBhIHRpdGxlLCBjcmVhdGUgdGhlIHJlcG9ydCDigJQgZmlsZWQgdW5kZXIgcmVwb3J0Rm9sZGVySWQgd2hlbiBhXG4gIC8vIGZvbGRlcidzIGtlYmFiIGFza2VkLCBhdCB0aGUgcm9vdCBvdGhlcndpc2Ug4oCUIHRoZW4gcm91dGUgdG8gaXQgKGNyZWF0ZVBhdHRlcm4pLlxuICBwdWJsaWMgY3JlYXRlUmVwb3J0KHJlcG9ydEZvbGRlcklkOiBudW1iZXIgPSBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIHRpdGxlOiAnQ3JlYXRlIFJlcG9ydCcsXG4gICAgICBsYWJlbDogJ1RpdGxlJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnQ3JlYXRlJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+IHRoaXMuX3JlcG9ydERhdGEuY3JlYXRlKG5hbWUsIHJlcG9ydEZvbGRlcklkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuY3JlYXRlUGF0dGVybigpO1xuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgdGhpcy5fcGF0dGVybkNvbW1hbmRzKHBhdHRlcm4sIHJlcG9ydC5pZCksXG4gICAgICAgICAgcGF0dGVybi5zdGFydHNXaXRoKCcvJykgPyB7fSA6IHsgcmVsYXRpdmVUbzogdGhpcy5fcm91dGUgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGdsb2JhbCBSZXBvcnQgU2V0dGluZ3MgZGlhbG9nOiB0aGUgQUkga25vd2xlZGdlIGRvY3VtZW50IGFuZCB0aGVcbiAgLy8gc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQuIEEgcnVubmluZyBidWlsZCBzdHJlYW1zIGludG8gdGhlIEZzUHJvY2VzcyBkb2NrLFxuICAvLyB3aGljaCBzdXJ2aXZlcyB0aGUgZGlhbG9nIGNsb3NpbmcuXG4gIHB1YmxpYyBvcGVuU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oR2xvYmFsU2V0dGluZ3NDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRGaWx0ZXJDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJDb25maWcgPSB7XG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWw6ICdTZWFyY2gnLFxuICAgICAgICB9LFxuICAgICAgICAvLyBBIGNoZWNrYm94IHJhdGhlciB0aGFuIHRoZSB1c3VhbCBTdGF0dXMgc2VsZWN0IHdpdGggYSBcIlNob3cgRGVsZXRlZFwiXG4gICAgICAgIC8vIGlzb2xhdGUuIElzb2xhdGluZyB0aGUgZGVsZXRlZCByb3dzIHdvdWxkIHN0cmFuZCB0aGVtOiBhIGRlbGV0ZWRcbiAgICAgICAgLy8gcmVwb3J0IGluIGEgbGl2ZSBmb2xkZXIgYXJyaXZlcyB3aXRob3V0IHRoZSBmb2xkZXIgaXQgc2l0cyBpbiwgYW5kIGFcbiAgICAgICAgLy8gdHJlZSBjYW5ub3QgcGxhY2UgYSBub2RlIHdob3NlIHBhcmVudCBpdCBuZXZlciByZWNlaXZlZC4gU28gdGhlXG4gICAgICAgIC8vIHRvZ2dsZSBhc2tzIGZvciBldmVyeXRoaW5nLCBhbmQgdGhlIHJvd3MgbWFyayB3aGF0IGlzIGRlbGV0ZWQuXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkNoZWNrYm94LFxuICAgICAgICAgIGxhYmVsOiAnU2hvdyBEZWxldGVkJyxcbiAgICAgICAgICBjaGVja2VkOiBbUmVwb3J0U3RhdGUuQWN0aXZlLCBSZXBvcnRTdGF0ZS5EZWxldGVkXS5qb2luKCcsJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3VuZm9sZF9tb3JlJyxcbiAgICAgICAgICB0b29sdGlwOiAnRXhwYW5kIGFsbCcsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX3RyZWUoKT8uZXhwYW5kQWxsKCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpY29uOiAndW5mb2xkX2xlc3MnLFxuICAgICAgICAgIHRvb2x0aXA6ICdDb2xsYXBzZSBhbGwnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl90cmVlKCk/LmNvbGxhcHNlQWxsKCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpY29uOiAnc2V0dGluZ3MnLFxuICAgICAgICAgIHRvb2x0aXA6ICdSZXBvcnQgc2V0dGluZ3MnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLm9wZW5TZXR0aW5ncygpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdOZXcgRm9sZGVyJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fY3JlYXRlRm9sZGVyKG51bGwpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDcmVhdGUnLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY3JlYXRlUmVwb3J0KCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgLy8gVGhlIHR3byBpdGVtcyBhcmUgYW5zd2VyZWQgaW4gZGlmZmVyZW50IHBsYWNlcywgYW5kIGVhY2ggb25seSB3aGVuIGl0XG4gICAgICAvLyBjaGFuZ2VkLiBUaGUga2V5d29yZCBkcml2ZXMgdGhlIHRyZWUncyBvd24gc2VhcmNoLCB3aGljaCBpcyB0aGUgd2hvbGVcbiAgICAgIC8vIHBvaW50IG9mIHNlYXJjaGluZyBhIHRyZWUg4oCUIGl0IHJldmVhbHMgYSBtYXRjaCBuZXN0ZWQgaW5zaWRlIGNvbGxhcHNlZFxuICAgICAgLy8gZm9sZGVycyByYXRoZXIgdGhhbiBvbmx5IGZpbHRlcmluZyB3aGF0IGlzIGFscmVhZHkgb24gc2NyZWVuLiBgc3RhdGVgIGlzXG4gICAgICAvLyB0aGUgU2hvdyBEZWxldGVkIHRvZ2dsZSwgYW5kIG9ubHkgdGhlIHNlcnZlciBjYW4gYW5zd2VyIHRoYXQuIFJ1bm5pbmcgdGhlXG4gICAgICAvLyBzZWFyY2ggb24gYSB0b2dnbGUgd291bGQgY2xlYXIgaXQsIGFuZCBjbGVhcmluZyBjb2xsYXBzZXMgdGhlIHRyZWUuXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBrZXl3b3JkQ2hhbmdlZCA9IFN0cmluZyhxdWVyeT8ua2V5d29yZCA/PyAnJykgIT09IFN0cmluZyh0aGlzLl9xdWVyeS5rZXl3b3JkID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc3RhdGVDaGFuZ2VkID0gU3RyaW5nKHF1ZXJ5Py5zdGF0ZSA/PyAnJykgIT09IFN0cmluZyh0aGlzLl9xdWVyeS5zdGF0ZSA/PyAnJyk7XG4gICAgICAgIHRoaXMuX3F1ZXJ5ID0geyAuLi5xdWVyeSB9O1xuXG4gICAgICAgIGlmIChrZXl3b3JkQ2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuX3NlYXJjaChxdWVyeT8ua2V5d29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9pbml0VHJlZUNvbmZpZygpOiB2b2lkIHtcbiAgICAvLyBObyBleHBhbmRMZXZlbDogZXZlcnkgZm9sZGVyIHN0YXJ0cyBjb2xsYXBzZWQuXG4gICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgZGF0YTogW10sXG4gICAgICBjaGlsZHJlbk5hbWU6ICdjaGlsZHJlbicsXG4gICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAvLyBUaGUgd2hvbGUgcm93IGlzIHRoZSBncmlwIGFuZCB0aGUgaGFuZGxlIHN0YXlzIGhpZGRlbjsgYSBwcmVzcyBvbmx5XG4gICAgICAvLyBiZWNvbWVzIGEgZHJhZyBvbmNlIHRoZSBwb2ludGVyIG1vdmVzLCBzbyB0aGUga2ViYWIsIHRoZSBjaGV2cm9uIGFuZCB0aGVcbiAgICAgIC8vIHJlcG9ydCBsaW5rIGFsbCBzdGF5IGNsaWNrYWJsZS5cbiAgICAgIGRyYWdNb2RlOiBUcmVlRHJhZ01vZGUuTm9kZSxcbiAgICAgIC8vIEFueXRoaW5nIGRlbGV0ZWQgaXMgcmVzdG9yZWQgYmVmb3JlIGl0IGlzIG1vdmVkIOKAlCB0aGUgYmFja2VuZCByZWZ1c2VzXG4gICAgICAvLyB0byBlZGl0IGEgZGVsZXRlZCByb3csIGFuZCBhIGRyYWcgd291bGQgb25seSBzbmFwIGJhY2suXG4gICAgICBjYW5EcmFnOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNEZWxldGVkTm9kZShub2RlKSxcbiAgICAgIC8vIGNhbkRyb3AgaXMgYXNrZWQgYWJvdXQgdGhlIG5vZGUgYmVpbmcgRFJBR0dFRCwgc28gb25seSBgdG9QYXJlbnRgXG4gICAgICAvLyBkZXNjcmliZXMgdGhlIGRlc3RpbmF0aW9uIOKAlCByZWFkaW5nIG5vZGUubGV2ZWwvbm9kZS5wYXJlbnQgaGVyZSB3b3VsZFxuICAgICAgLy8gZGVzY3JpYmUgd2hlcmUgaXQgY2FtZSBmcm9tLiBBIHJlcG9ydCBjYW4gbmV2ZXIgYmUgYSBwYXJlbnQgYmVjYXVzZSBpdHNcbiAgICAgIC8vIHR5cGUgc2F5cyBzbywgYW5kIHRoYXQgc2luZ2xlIHRlc3QgaXMgdGhlIHdob2xlIFwiZm9sZGVycyBuZXN0LCByZXBvcnRzXG4gICAgICAvLyBhcmUgbGVhdmVzXCIgcnVsZSBvbiB0aGlzIHNpZGUuIEEgZGVsZXRlZCBmb2xkZXIgaXMgbm8gZGVzdGluYXRpb25cbiAgICAgIC8vIGVpdGhlcjogd2hhdGV2ZXIgbGFuZGVkIGluIGl0IHdvdWxkIHZhbmlzaCBmcm9tIHRoZSBsaXZlIGxpc3RpbmcuXG4gICAgICBjYW5Ecm9wOiAobm9kZTogRmxhdEl0ZW1Ob2RlLCBmcm9tUGFyZW50OiBGbGF0SXRlbU5vZGUsIHRvUGFyZW50OiBGbGF0SXRlbU5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuICF0b1BhcmVudCB8fCAodGhpcy5faXNGb2xkZXJOb2RlKHRvUGFyZW50KSAmJiAhdGhpcy5faXNEZWxldGVkTm9kZSh0b1BhcmVudCkpO1xuICAgICAgfSxcbiAgICAgIGNoYW5nZVJlb3JkZXI6IChldmVudDogSVRyZWVDaGFuZ2VSZW9yZGVyKSA9PiB0aGlzLl9tb3ZlKGV2ZW50KSxcbiAgICAgIG5vZGVDbGFzczogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gbm9kZS5kYXRhPy50eXBlLFxuICAgICAgLy8gTWF0Y2ggb24gdGhlIG5hbWUgb25seS4gVGhlIGxpYnJhcnkncyBkZWZhdWx0IG1hdGNoZXIgc3RyaW5naWZpZXMgdGhlXG4gICAgICAvLyB3aG9sZSBub2RlLCBzbyBpdCB3b3VsZCBoaXQgaWRzLCB0aGUgbGl0ZXJhbCB0eXBlIHdvcmQsIGFuZCBldmVyeXRoaW5nXG4gICAgICAvLyBlbHNlIHJpZGluZyBvbiB0aGUgcm93LlxuICAgICAgZmlsdGVySXRlbTogKG5vZGUsIHF1ZXJ5KSA9PiB7XG4gICAgICAgIHJldHVybiBTdHJpbmcobm9kZS5kYXRhPy5uYW1lID8/ICcnKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKFN0cmluZyhxdWVyeSA/PyAnJykudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9LFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogVHJlZUFjdGlvblR5cGUuTWVudSxcbiAgICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcbiAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1JlbmFtZScsXG4gICAgICAgICAgICAgIHNob3c6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+ICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fcmVuYW1lKG5vZGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdOZXcgcmVwb3J0JyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5faXNGb2xkZXJOb2RlKG5vZGUpICYmICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5jcmVhdGVSZXBvcnQobm9kZS5kYXRhPy5pZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ05ldyBmb2xkZXInLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9pc0ZvbGRlck5vZGUobm9kZSkgJiYgIXRoaXMuX2lzRGVsZXRlZE5vZGUobm9kZSksXG4gICAgICAgICAgICAgIGNsaWNrOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9jcmVhdGVGb2xkZXIobm9kZS5kYXRhPy5pZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ0RlbGV0ZScsXG4gICAgICAgICAgICAgIHNob3c6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+ICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fZGVsZXRlKG5vZGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIE9uIGV2ZXJ5IGRlbGV0ZWQgcm93LCBpbmNsdWRpbmcgYSBsaXZlIG9uZSB0aGF0IGlzIG9ubHkgaGlkZGVuIGJ5XG4gICAgICAgICAgICAvLyBhIGRlbGV0ZWQgZm9sZGVyIGFib3ZlIGl0IOKAlCByZXN0b3JpbmcgdGhhdCBicmluZ3MgdGhlIGZvbGRlciBiYWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1Jlc3RvcmUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fcmVzdG9yZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRm9sZGVyTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbm9kZT8uZGF0YT8udHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWxldGVkTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFub2RlPy5kYXRhPy5kZWxldGVkO1xuICB9XG5cbiAgLy8gRHJpdmUgdGhlIHRyZWUncyBidWlsdC1pbiBzZWFyY2g6IGl0IGNvbGxhcHNlcyBldmVyeXRoaW5nLCBoaWRlcyBldmVyeSBub2RlLFxuICAvLyB0aGVuIHVuaGlkZXMgZWFjaCBtYXRjaCBhbmQgd2Fsa3MgaXRzIGFuY2VzdG9ycyBvcGVuLCBzbyBhIHJlcG9ydCBzZXZlcmFsXG4gIC8vIGZvbGRlcnMgZGVlcCBzdXJmYWNlcyB3aXRoIGl0cyBwYXRoIGV4cGFuZGVkLiBDbGVhcmluZyBjb2xsYXBzZXMgZXZlcnl0aGluZ1xuICAvLyBhZ2Fpbiwgc28gdGhlIGZvbGRlcnMgdGhhdCB3ZXJlIG9wZW4gYmVmb3JlIHRoZSBzZWFyY2ggYXJlIHB1dCBiYWNrLlxuICBwcml2YXRlIF9zZWFyY2goa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMuX3RyZWUoKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5d29yZCkge1xuICAgICAgdGhpcy5fZXhwYW5kZWRCZWZvcmVTZWFyY2ggPz89IHRoaXMuX2V4cGFuZGVkS2V5cygpO1xuICAgICAgdHJlZS5zZWFyY2goa2V5d29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJlZS5jbGVhclNlYXJjaCgpO1xuICAgIHRoaXMuX2V4cGFuZEtleXModGhpcy5fZXhwYW5kZWRCZWZvcmVTZWFyY2ggPz8gW10pO1xuICAgIHRoaXMuX2V4cGFuZGVkQmVmb3JlU2VhcmNoID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWQoKTogdm9pZCB7XG4gICAgLy8gT25seSB0aGUgU2hvdyBEZWxldGVkIHRvZ2dsZSBpcyB0aGUgc2VydmVyJ3MgdG8gYW5zd2VyIOKAlCB0aGUga2V5d29yZCBpc1xuICAgIC8vIHRoZSB0cmVlJ3Mgb3duIHNlYXJjaCDigJQgYW5kIGFuIHVuY2hlY2tlZCB0b2dnbGUgc2VuZHMgbm90aGluZywgbGVhdmluZyB0aGVcbiAgICAvLyBiYWNrZW5kJ3MgYWN0aXZlLW9ubHkgZGVmYXVsdCBpbiBjaGFyZ2UuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9xdWVyeS5zdGF0ZSA/IHsgc3RhdGU6IHRoaXMuX3F1ZXJ5LnN0YXRlIH0gOiB7fTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEudHJlZShxdWVyeSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnRUcmVlOiBSZXBvcnRUcmVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fYnVpbGROb2RlcyhyZXBvcnRUcmVlKTtcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQobm9kZXMpO1xuXG4gICAgICAgIC8vIFRoZSB0cmVlIHJlYWRzIGBjb25maWdgIG9uY2UsIGluIGl0cyBvd24gbmdPbkluaXQuIFRoZSBmaXJzdCBsb2FkXG4gICAgICAgIC8vIGxhbmRzIGJlZm9yZSBpdCBleGlzdHMsIHNvIHRoZSBkYXRhIGhhcyB0byBhcnJpdmUgdGhyb3VnaCB0aGUgY29uZmlnO1xuICAgICAgICAvLyBldmVyeSBsYXRlciBvbmUgaGFzIHRvIGdvIHRocm91Z2ggdGhlIGluc3RhbmNlIG9yIG5vdGhpbmcgY2hhbmdlcy5cbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0geyAuLi50aGlzLnRyZWVDb25maWcsIGRhdGE6IG5vZGVzIH07XG5cbiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMuX3RyZWUoKTtcbiAgICAgICAgaWYgKCF0cmVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0RGF0YSgpIHJlYnVpbGRzIGV2ZXJ5IG5vZGUgY29sbGFwc2VkLCBzbyBhIHJlbmFtZSBvciBhIG1vdmUgd291bGRcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHNsYW0gc2h1dCBldmVyeSBmb2xkZXIgc29tZWJvZHkgaGFkIG9wZW5lZC4gS2V5cyBhcmUgc3RhYmxlXG4gICAgICAgIC8vIGFjcm9zcyBsb2FkcyAoJ2Y6MTInKSwgc28gd2hhdCB3YXMgb3BlbiBpcyByZW9wZW5lZCBieSBrZXkg4oCUIGFuZCBhXG4gICAgICAgIC8vIGZvbGRlciB0aGF0IG5vIGxvbmdlciBjb21lcyBiYWNrIHNpbXBseSBpcyBub3QuXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkS2V5cyA9IHRoaXMuX2V4cGFuZGVkS2V5cygpO1xuICAgICAgICB0cmVlLnNldERhdGEobm9kZXMpO1xuICAgICAgICB0aGlzLl9leHBhbmRLZXlzKGV4cGFuZGVkS2V5cyk7XG5cbiAgICAgICAgY29uc3Qga2V5d29yZCA9IFN0cmluZyh0aGlzLl9xdWVyeS5rZXl3b3JkID8/ICcnKTtcbiAgICAgICAgaWYgKGtleXdvcmQpIHtcbiAgICAgICAgICB0cmVlLnNlYXJjaChrZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUga2V5cyBvZiBldmVyeSBvcGVuIGZvbGRlciwgd2Fsa2VkIHRocm91Z2ggdGhlIHRyZWUncyBwdWJsaWMgbm9kZSBBUEkuXG4gIHByaXZhdGUgX2V4cGFuZGVkS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMuX3RyZWUoKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB3YWxrID0gKHBhcmVudDogRmxhdEl0ZW1Ob2RlKTogc3RyaW5nW10gPT4gdHJlZS5nZXROb2RlcyhwYXJlbnQpXG4gICAgICAuZmlsdGVyKChub2RlOiBGbGF0SXRlbU5vZGUpID0+IG5vZGUuaXNFeHBhbmRlZCgpKVxuICAgICAgLmZsYXRNYXAoKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gW25vZGUuZGF0YT8ua2V5LCAuLi53YWxrKG5vZGUpXSk7XG5cbiAgICByZXR1cm4gd2FsayhudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4cGFuZEtleXMoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlID0gdGhpcy5fdHJlZSgpO1xuICAgIGlmICghdHJlZSB8fCAha2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVuID0gbmV3IFNldChrZXlzKTtcbiAgICBjb25zdCB3YWxrID0gKHBhcmVudDogRmxhdEl0ZW1Ob2RlKTogdm9pZCA9PiB7XG4gICAgICB0cmVlLmdldE5vZGVzKHBhcmVudClcbiAgICAgICAgLmZpbHRlcigobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiBvcGVuLmhhcyhub2RlLmRhdGE/LmtleSkpXG4gICAgICAgIC5mb3JFYWNoKChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHtcbiAgICAgICAgICBub2RlLmV4cGFuZCgpO1xuICAgICAgICAgIHdhbGsobm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB3YWxrKG51bGwpO1xuICB9XG5cbiAgLy8gRmxhdCBBUEkgcm93cyDihpIgdGhlIG5lc3RlZCBzaGFwZSBmcy10cmVlIHJlbmRlcnMuIEZvbGRlcnMgY29tZSBiZWZvcmVcbiAgLy8gcmVwb3J0cyBhdCBldmVyeSBsZXZlbCwgZWFjaCBhbHJlYWR5IG5hbWUtb3JkZXJlZCBieSB0aGUgYmFja2VuZC5cbiAgLy9cbiAgLy8gYGRlbGV0ZWRgIGlzIGluaGVyaXRlZCBkb3dud2FyZDogYSBkZWxldGVkIGZvbGRlciBoaWRlcyBldmVyeXRoaW5nIGJlbG93IGl0XG4gIC8vIHdpdGhvdXQgdGhlIHJvd3MgYmVsb3cgYmVpbmcgZGVsZXRlZCB0aGVtc2VsdmVzLCBhbmQgdGhhdCBpcyBvbmx5IHZpc2libGVcbiAgLy8gZnJvbSBoZXJlLCB3aGVyZSB0aGUgcGFyZW50IGlzIGluIGhhbmQuIFRoZSBiYWNrZW5kIGFwcGxpZXMgdGhlIHNhbWUgcnVsZVxuICAvLyB3aGVuIGl0IGZpbHRlcnMgKFJlcG9ydEZvbGRlck1vZGVsOjpnZXREZWxldGVkRm9sZGVySWRzKCkpLlxuICBwcml2YXRlIF9idWlsZE5vZGVzKHJlcG9ydFRyZWU6IFJlcG9ydFRyZWUpOiBSZXBvcnROb2RlW10ge1xuICAgIGNvbnN0IGZvbGRlcnMgPSByZXBvcnRUcmVlPy5mb2xkZXJzID8/IFtdO1xuICAgIGNvbnN0IHJlcG9ydHMgPSByZXBvcnRUcmVlPy5yZXBvcnRzID8/IFtdO1xuXG4gICAgY29uc3QgYnVpbGQgPSAocGFyZW50SWQ6IG51bWJlciB8IG51bGwsIHBhcmVudERlbGV0ZWQ6IGJvb2xlYW4pOiBSZXBvcnROb2RlW10gPT4ge1xuICAgICAgY29uc3QgZm9sZGVyTm9kZXM6IFJlcG9ydE5vZGVbXSA9IGZvbGRlcnNcbiAgICAgICAgLmZpbHRlcigoZm9sZGVyOiBSZXBvcnRGb2xkZXIpID0+IChmb2xkZXIucGFyZW50UmVwb3J0Rm9sZGVySWQgPz8gbnVsbCkgPT09IHBhcmVudElkKVxuICAgICAgICAubWFwKChmb2xkZXI6IFJlcG9ydEZvbGRlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlRGVsZXRlZCA9IGZvbGRlci5zdGF0ZSA9PT0gUmVwb3J0U3RhdGUuRGVsZXRlZDtcbiAgICAgICAgICBjb25zdCBkZWxldGVkID0gcGFyZW50RGVsZXRlZCB8fCBzdGF0ZURlbGV0ZWQ7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBgZjoke2ZvbGRlci5pZH1gLFxuICAgICAgICAgICAgaWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIG5hbWU6IGZvbGRlci5uYW1lLFxuICAgICAgICAgICAgdHlwZTogUmVwb3J0Tm9kZVR5cGUuRm9sZGVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IGJ1aWxkKGZvbGRlci5pZCwgZGVsZXRlZCksXG4gICAgICAgICAgICBzdGF0ZURlbGV0ZWQsXG4gICAgICAgICAgICBkZWxldGVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXBvcnROb2RlczogUmVwb3J0Tm9kZVtdID0gcmVwb3J0c1xuICAgICAgICAuZmlsdGVyKChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKSA9PiAocmVwb3J0LnJlcG9ydEZvbGRlcklkID8/IG51bGwpID09PSBwYXJlbnRJZClcbiAgICAgICAgLm1hcCgocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlRGVsZXRlZCA9IHJlcG9ydC5zdGF0ZSA9PT0gUmVwb3J0U3RhdGUuRGVsZXRlZDtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGByOiR7cmVwb3J0LmlkfWAsXG4gICAgICAgICAgICBpZDogcmVwb3J0LmlkLFxuICAgICAgICAgICAgbmFtZTogcmVwb3J0Lm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBSZXBvcnROb2RlVHlwZS5SZXBvcnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICByZXBvcnQsXG4gICAgICAgICAgICBzdGF0ZURlbGV0ZWQsXG4gICAgICAgICAgICBkZWxldGVkOiBwYXJlbnREZWxldGVkIHx8IHN0YXRlRGVsZXRlZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIFsuLi5mb2xkZXJOb2RlcywgLi4ucmVwb3J0Tm9kZXNdO1xuICAgIH07XG5cbiAgICByZXR1cm4gYnVpbGQobnVsbCwgZmFsc2UpO1xuICB9XG5cbiAgLy8gQSBkcm9wIG1vdmVkIGEgbm9kZSB1bmRlciBhIG5ldyBwYXJlbnQsIG9yIG91dCB0byB0aGUgcm9vdC4gVGhlIHRyZWUgaGFzXG4gIC8vIGFscmVhZHkgbW92ZWQgaXQgb24gc2NyZWVuLCBzbyBib3RoIG91dGNvbWVzIHJlbG9hZDogYSBzdWNjZXNzIHRvIHBpY2sgdXBcbiAgLy8gdGhlIHNlcnZlcidzIG9yZGVyaW5nLCBhIGZhaWx1cmUgdG8gcHV0IHRoZSByb3cgYmFjayB3aGVyZSBpdCByZWFsbHkgaXMuXG4gIHByaXZhdGUgX21vdmUoZXZlbnQ6IElUcmVlQ2hhbmdlUmVvcmRlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vZGU6IFJlcG9ydE5vZGUgPSBldmVudC5ub2RlPy5kYXRhO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIgPSBldmVudC50b1BhcmVudD8uZGF0YT8uaWQgPz8gbnVsbDtcblxuICAgIGlmIChldmVudC50b1BhcmVudCAmJiAhZXZlbnQudG9QYXJlbnQuaXNFeHBhbmRlZCgpKSB7XG4gICAgICBldmVudC50b1BhcmVudC5leHBhbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IG5vZGUudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyXG4gICAgICA/IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlRm9sZGVyKG5vZGUuaWQsIHsgcGFyZW50UmVwb3J0Rm9sZGVySWQgfSlcbiAgICAgIDogdGhpcy5fcmVwb3J0RGF0YS5tb3ZlUmVwb3J0KG5vZGUuaWQsIHBhcmVudFJlcG9ydEZvbGRlcklkKTtcblxuICAgIHNhdmUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIGNoYW5nZXMnKTtcbiAgICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9sb2FkKCksXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUZvbGRlcihwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIHRpdGxlOiAnTmV3IEZvbGRlcicsXG4gICAgICBsYWJlbDogJ05hbWUnLFxuICAgICAgY29tbWl0TGFiZWw6ICdDcmVhdGUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5fcmVwb3J0RGF0YS5jcmVhdGVGb2xkZXIobmFtZSwgcGFyZW50UmVwb3J0Rm9sZGVySWQpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnQ3JlYXRlZCBmb2xkZXInKTtcbiAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5hbWUobm9kZTogRmxhdEl0ZW1Ob2RlKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogUmVwb3J0Tm9kZSA9IG5vZGU/LmRhdGE7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVyID0gZGF0YS50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXI7XG5cbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6IGZvbGRlciA/ICdSZW5hbWUgRm9sZGVyJyA6ICdSZW5hbWUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnTmFtZScsXG4gICAgICBkZWZhdWx0OiBkYXRhLm5hbWUsXG4gICAgICBjb21taXRMYWJlbDogJ1NhdmUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gKGZvbGRlclxuICAgICAgICAgID8gdGhpcy5fcmVwb3J0RGF0YS51cGRhdGVGb2xkZXIoZGF0YS5pZCwgeyBuYW1lIH0pXG4gICAgICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLnJlbmFtZShkYXRhLmlkLCBuYW1lKSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBjaGFuZ2VzJyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQSBmb2xkZXIgZGVsZXRlcyB3aXRoIGV2ZXJ5dGhpbmcgaW4gaXQsIHNvIHRoZSBjb25maXJtIHNheXMgd2hhdCB0aGF0IGlzIOKAlFxuICAvLyBhbmQgdGhhdCBpdCBhbGwgY29tZXMgYmFjayBmcm9tIFNob3cgRGVsZXRlZCwgd2hpY2ggaXMgd2hhdCBtYWtlcyBpdCBzYWZlIHRvXG4gIC8vIG9mZmVyLlxuICBwcml2YXRlIF9kZWxldGUobm9kZTogRmxhdEl0ZW1Ob2RlKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogUmVwb3J0Tm9kZSA9IG5vZGU/LmRhdGE7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVyID0gZGF0YS50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXI7XG5cbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6IGZvbGRlclxuICAgICAgICA/IHRoaXMuX2RlbGV0ZUZvbGRlck1lc3NhZ2UoZGF0YSlcbiAgICAgICAgOiAnQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZSB0aGlzIHJlcG9ydD8nLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IChmb2xkZXJcbiAgICAgICAgICA/IHRoaXMuX3JlcG9ydERhdGEuZGVsZXRlRm9sZGVyKGRhdGEuaWQpXG4gICAgICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLmRlbGV0ZShkYXRhLmlkKSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKGZvbGRlciA/ICdEZWxldGVkIGZvbGRlcicgOiAnRGVsZXRlZCByZXBvcnQnKTtcbiAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBDb3VudGVkIGZyb20gdGhlIG5vZGUgYWxyZWFkeSBvbiBzY3JlZW4sIGxpdmUgcm93cyBvbmx5OiBpbiBTaG93IERlbGV0ZWRcbiAgLy8gbW9kZSB0aGUgZm9sZGVyIGNhbiBhbHNvIGhvbGQgcm93cyB0aGF0IGFyZSBnb25lIGFscmVhZHksIGFuZCB0aG9zZSBhcmUgbm90XG4gIC8vIGxlYXZpbmcgd2l0aCBpdC5cbiAgcHJpdmF0ZSBfZGVsZXRlRm9sZGVyTWVzc2FnZShmb2xkZXI6IFJlcG9ydE5vZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdW50ID0gKG5vZGU6IFJlcG9ydE5vZGUpOiB7IGZvbGRlcnM6IG51bWJlcjsgcmVwb3J0czogbnVtYmVyIH0gPT4gbm9kZS5jaGlsZHJlblxuICAgICAgLmZpbHRlcigoY2hpbGQpID0+ICFjaGlsZC5kZWxldGVkKVxuICAgICAgLnJlZHVjZSgodG90YWwsIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGJlbG93ID0gY291bnQoY2hpbGQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZm9sZGVyczogdG90YWwuZm9sZGVycyArIGJlbG93LmZvbGRlcnMgKyAoY2hpbGQudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyID8gMSA6IDApLFxuICAgICAgICAgIHJlcG9ydHM6IHRvdGFsLnJlcG9ydHMgKyBiZWxvdy5yZXBvcnRzICsgKGNoaWxkLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLlJlcG9ydCA/IDEgOiAwKSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHsgZm9sZGVyczogMCwgcmVwb3J0czogMCB9KTtcblxuICAgIGNvbnN0IHsgZm9sZGVycywgcmVwb3J0cyB9ID0gY291bnQoZm9sZGVyKTtcbiAgICBjb25zdCBjb250ZW50cyA9IFtcbiAgICAgIGZvbGRlcnMgPyBgJHtmb2xkZXJzfSAke2ZvbGRlcnMgPT09IDEgPyAnZm9sZGVyJyA6ICdmb2xkZXJzJ31gIDogJycsXG4gICAgICByZXBvcnRzID8gYCR7cmVwb3J0c30gJHtyZXBvcnRzID09PSAxID8gJ3JlcG9ydCcgOiAncmVwb3J0cyd9YCA6ICcnLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgY29uc3QgaW5zaWRlID0gY29udGVudHMubGVuZ3RoID8gYCBhbmQgdGhlICR7Y29udGVudHMuam9pbignIGFuZCAnKX0gaW5zaWRlIGl0YCA6ICcnO1xuXG4gICAgcmV0dXJuIGBBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gZGVsZXRlIHRoZSBmb2xkZXIgXCIke2ZvbGRlci5uYW1lfVwiJHtpbnNpZGV9PyBJdCBjYW4gYmUgcmVzdG9yZWQgZnJvbSBTaG93IERlbGV0ZWQuYDtcbiAgfVxuXG4gIC8vIEJvdGggZW5kcG9pbnRzIGFsc28gcmVzdG9yZSBhbnkgZGVsZXRlZCBmb2xkZXIgYWJvdmUgdGhlIHJvdywgc28gYSByb3cgdGhhdFxuICAvLyBpcyBsaXZlIGl0c2VsZiBidXQgaGlkZGVuIGJ5IGEgZGVsZXRlZCBmb2xkZXIgaXMgcmVzdG9yZWQgYnkgdGhlIHNhbWUgY2FsbC5cbiAgcHJpdmF0ZSBfcmVzdG9yZShub2RlOiBGbGF0SXRlbU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBSZXBvcnROb2RlID0gbm9kZT8uZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkYXRhLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlcjtcblxuICAgIChmb2xkZXJcbiAgICAgID8gdGhpcy5fcmVwb3J0RGF0YS51bmRlbGV0ZUZvbGRlcihkYXRhLmlkKVxuICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLnVuZGVsZXRlKGRhdGEuaWQpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoZm9sZGVyID8gJ1Jlc3RvcmVkIGZvbGRlcicgOiAnUmVzdG9yZWQgcmVwb3J0Jyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVHVybiBhICc6aWQnIHBhdHRlcm4gaW50byByb3V0ZXIgY29tbWFuZHMuIFJlbGF0aXZlIHVubGVzcyBpdCBzdGFydHNcbiAgLy8gd2l0aCAnLycsIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IHNlZ21lbnQgY2FycmllcyB0aGUgbGVhZGluZyBzbGFzaC5cbiAgcHJpdmF0ZSBfcGF0dGVybkNvbW1hbmRzKHBhdHRlcm46IHN0cmluZywgaWQ6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICBjb25zdCBzZWdtZW50czogdW5rbm93bltdID0gcGF0dGVybi5zcGxpdCgnLycpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG4gICAgICAubWFwKChzZWdtZW50KSA9PiAoc2VnbWVudCA9PT0gJzppZCcgPyBpZCA6IHNlZ21lbnQpKTtcblxuICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW2lkXTtcbiAgICB9XG5cbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHNlZ21lbnRzWzBdID0gYC8ke3NlZ21lbnRzWzBdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG59XG4iLCI8ZnMtZmlsdGVyIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCI+PC9mcy1maWx0ZXI+XG5cbjxuZy1jb250YWluZXIgKmZzU2tlbGV0b249XCJub2RlcygpXCI+XG4gIDxmcy10cmVlIFtjb25maWddPVwidHJlZUNvbmZpZ1wiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmc1RyZWVOb2RlXG4gICAgICAgIGxldC1kYXRhPVwiZGF0YVwiPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZnMtcm93LmdhcC1zbS5hbGlnbi1jZW50ZXIgbm9kZS1yb3dcIlxuICAgICAgICAgIFtjbGFzcy5kZWxldGVkXT1cImRhdGEuZGVsZXRlZFwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2RlLWljb25cIj5cbiAgICAgICAgICB7eyBkYXRhLnR5cGUgPT09IG5vZGVUeXBlLkZvbGRlciA/ICdmb2xkZXInIDogJ2luc2VydF9jaGFydF9vdXRsaW5lZCcgfX1cbiAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICBAaWYgKGRhdGEudHlwZSA9PT0gbm9kZVR5cGUuRm9sZGVyIHx8IGRhdGEuZGVsZXRlZCkge1xuICAgICAgICAgIDwhLS0gQSBkZWxldGVkIHJlcG9ydCBjYW4ndCBiZSBvcGVuZWQgKHRoZSBiYWNrZW5kIG9ubHkgYXNzZW1ibGVzXG4gICAgICAgICAgICAgICBsaXZlIG9uZXMsIGFuZCBvbmUgdW5kZXIgYSBkZWxldGVkIGZvbGRlciBpcyBub3Qgb24gdGhlIGxpdmVcbiAgICAgICAgICAgICAgIGxpc3RpbmcpLCBzbyBpbiBTaG93IERlbGV0ZWQgbW9kZSB0aGUgbmFtZSBpcyBwbGFpbiB0ZXh0IOKAlFxuICAgICAgICAgICAgICAgcmVzdG9yZSBpdCBmcm9tIHRoZSByb3cgbWVudSBmaXJzdC4gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJub2RlLW5hbWVcIj57eyBkYXRhLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwibm9kZS1uYW1lXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwib3BlbkxpbmsoZGF0YS5yZXBvcnQpXCI+XG4gICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIE9ubHkgb24gdGhlIHJvdyBzb21lYm9keSBkZWxldGVkLiBFdmVyeXRoaW5nIHVuZGVyIGEgZGVsZXRlZFxuICAgICAgICAgICAgIGZvbGRlciBpcyBtdXRlZCB3aXRoIGl0LCBidXQgd2FzIG5vdCBkZWxldGVkIGl0c2VsZi4gLS0+XG4gICAgICAgIEBpZiAoZGF0YS5zdGF0ZURlbGV0ZWQpIHtcbiAgICAgICAgICA8ZnMtY2hpcCBzaXplPVwidGlueVwiPkRlbGV0ZWQ8L2ZzLWNoaXA+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtdHJlZT5cblxuICBAaWYgKCFub2RlcygpLmxlbmd0aCkge1xuICAgIDxwIGNsYXNzPVwic21hbGwgdHJlZS1lbXB0eVwiPlxuICAgICAgTm8gcmVwb3J0cyB5ZXQuIENyZWF0ZSBvbmUsIG9yIGFkZCBhIGZvbGRlciB0byBncm91cCB0aGVtLlxuICAgIDwvcD5cbiAgfVxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
577
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0cy9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnRzL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxlQUFlLEVBQ2YsWUFBWSxFQUdaLGNBQWMsRUFDZCxZQUFZLEdBQ2Is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QVU7OzRGQUdELG9CQUFvQjtrQkFmaEMsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixVQUFVO3FCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgT25Jbml0LFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5pbXBvcnQgeyBGc0NoaXBNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jaGlwJztcbmltcG9ydCB7IEZzRmlsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbGUnO1xuaW1wb3J0IHsgQWN0aW9uTW9kZSwgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSwgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQge1xuICBGbGF0SXRlbU5vZGUsXG4gIEZzVHJlZUNvbXBvbmVudCxcbiAgRnNUcmVlTW9kdWxlLFxuICBJVHJlZUNoYW5nZVJlb3JkZXIsXG4gIElUcmVlQ29uZmlnLFxuICBUcmVlQWN0aW9uVHlwZSxcbiAgVHJlZURyYWdNb2RlLFxufSBmcm9tICdAZmlyZXN0aXRjaC90cmVlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBHbG9iYWxTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUmVwb3J0UGFja2FnZUltcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0UGFja2FnZUltcG9ydERpYWxvZ0RhdGEsXG59IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXBhY2thZ2UtaW1wb3J0L3JlcG9ydC1wYWNrYWdlLWltcG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0UGFja2FnZUltcG9ydGVkUmVwb3J0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtcGFja2FnZS1pbXBvcnRlZC1yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIFJlcG9ydEZvbGRlcixcbiAgUmVwb3J0TGlzdEl0ZW0sXG4gIFJlcG9ydE5vZGUsXG4gIFJlcG9ydE5vZGVUeXBlLFxuICBSZXBvcnRTdGF0ZSxcbiAgUmVwb3J0VHJlZSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBUaGUgcmVwb3J0cyBsaXN0aW5nIOKAlCBhbiBmcy10cmVlIG9mIGZvbGRlcnMgYW5kIHRoZSByZXBvcnRzIGZpbGVkIGludG8gdGhlbS5cbi8vIFJvd3MgbGluayBvdXQgdGhyb3VnaCBhIFVSTCBwYXR0ZXJuIChhICc6aWQnIHRva2VuIOKGkiB0aGUgcmVwb3J0IGlkOyBhIGxlYWRpbmdcbi8vICcvJyBtYWtlcyBpdCBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGl0J3MgcmVsYXRpdmUgdG8gdGhpcyBjb21wb25lbnQncyByb3V0ZSkuXG4vLyBDcmVhdGUgcHJvbXB0cyBmb3IgYSB0aXRsZSwgY3JlYXRlcyB0aGUgcmVwb3J0LCB0aGVuIHJvdXRlcyB0byBpdC4gSW1wb3J0XG4vLyBwaWNrcyBhIHJlcG9ydCBwYWNrYWdlICguemlwKSwgY2hlY2tzIGl0IGluIFJlcG9ydFBhY2thZ2VJbXBvcnRDb21wb25lbnQgYW5kXG4vLyByb3V0ZXMgdG8gdGhlIG5ldyByZXBvcnQgdGhlIHNhbWUgd2F5OyBhIHJlcG9ydCByb3cncyBFeHBvcnQgZG93bmxvYWRzIG9uZS5cbi8vIFRoZSBnZWFyIG9wZW5zIHRoZSBnbG9iYWwgUmVwb3J0IFNldHRpbmdzIGRpYWxvZyAoQUkga25vd2xlZGdlIGRvY3VtZW50ICtcbi8vIHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkKSwgd2hpY2ggbGl2ZXMgaW4gdGhpcyBwYWNrYWdlLiBObyByb3V0aW5nIGlzXG4vLyBoYXJkLWNvZGVkIGhlcmUuXG4vL1xuLy8gRm9sZGVycyBuZXN0OyByZXBvcnRzIGFyZSBhbHdheXMgbGVhdmVzIOKAlCBjYW5Ecm9wIGVuZm9yY2VzIGl0IGhlcmUsIGFuZCB0aGVcbi8vIGJhY2tlbmQgZW5mb3JjZXMgaXQgc3RydWN0dXJhbGx5IGJ5IGtlZXBpbmcgdGhlIHRyZWUgaW4gaXRzIG93biB0YWJsZS4gQVxuLy8gcmVwb3J0IGluIG5vIGZvbGRlciBpcyBhIHJvb3Qgbm9kZSwgd2hpY2ggaXMgd2hlcmUgZXZlcnkgcmVwb3J0IHNhdCBiZWZvcmVcbi8vIGZvbGRlcnMgZXhpc3RlZCwgc28gbm90aGluZyBoYWQgdG8gYmUgbWlncmF0ZWQgb3IgYnVja2V0ZWQgYXMgXCJ1bmNhdGVnb3JpemVkXCIuXG4vL1xuLy8gRm9sZGVycyBhbmQgcmVwb3J0cyBhcmUgYm90aCBzb2Z0LWRlbGV0YWJsZSwgYW5kIGEgZm9sZGVyIGRlbGV0ZXMgd2hhdGV2ZXIgaXRcbi8vIGhvbGRzLiBPbmx5IHRoZSBmb2xkZXIncyBvd24gcm93IGlzIHdyaXR0ZW46IGV2ZXJ5dGhpbmcgdW5kZXIgaXQgZHJvcHMgb3V0IG9mXG4vLyB0aGUgbGlzdGluZyBiZWNhdXNlIGl0IHNpdHMgdW5kZXIgYSBkZWxldGVkIGZvbGRlciwgYW5kIGNvbWVzIGJhY2sgd2l0aCBpdC5cbi8vIFwiU2hvdyBEZWxldGVkXCIgc2hvd3MgdGhlIFdIT0xFIHRyZWUg4oCUIGxpdmUgYW5kIGRlbGV0ZWQgdG9nZXRoZXIsIGVhY2ggZGVsZXRlZFxuLy8gcm93IHdoZXJlIGl0IHdhcyBmaWxlZCDigJQgYW5kIG9uIGFueXRoaW5nIGRlbGV0ZWQgdGhlIGtlYmFiIG9mZmVycyBSZXN0b3JlXG4vLyBpbnN0ZWFkLiBSZXN0b3JpbmcgYWxzbyByZXN0b3JlcyBhbnkgZGVsZXRlZCBmb2xkZXIgYWJvdmUgdGhlIHJvdywgc28gaXQgbGFuZHNcbi8vIGJhY2sgd2hlcmUgaXQgd2FzIHJhdGhlciB0aGFuIGF0IHRoZSByb290LlxuLy9cbi8vIEV2ZXJ5IGZvbGRlciBzdGFydHMgY29sbGFwc2VkOyB0aGUgdHJlZSByZW1lbWJlcnMgd2hhdCB3YXMgb3BlbmVkIGFjcm9zcyBpdHNcbi8vIG93biByZWxvYWRzIChhIHJlbmFtZSwgYSBtb3ZlLCB0aGUgU2hvdyBEZWxldGVkIHRvZ2dsZSkgYW5kIGFjcm9zcyBhIHNlYXJjaC5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWFpLXJlcG9ydHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnMtYWktcmVwb3J0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGc0NoaXBNb2R1bGUsXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICBGc1RyZWVNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzIGVuZHBvaW50czsgb3ZlcnJpZGUgdG8gbW91bnQgZWxzZXdoZXJlLlxuICBwdWJsaWMgcmVhZG9ubHkgYmFzZVBhdGggPSBpbnB1dDxzdHJpbmc+KCdyZXBvcnRzJyk7XG5cbiAgLy8gV2hlcmUgYSByb3cgbGlua3MgdG87ICc6aWQnIGlzIHJlcGxhY2VkIHdpdGggdGhlIHJlcG9ydCBpZC4gRGVmYXVsdCB0YWtlc1xuICAvLyB5b3UgdG8gPGN1cnJlbnQgcm91dGU+LzppZC4gQWJzb2x1dGUgd2hlbiBpdCBzdGFydHMgd2l0aCAnLycuXG4gIHB1YmxpYyByZWFkb25seSBvcGVuUGF0dGVybiA9IGlucHV0PHN0cmluZz4oJzppZCcpO1xuXG4gIC8vIFdoZXJlIGEgZnJlc2hseS1jcmVhdGVkIHJlcG9ydCByb3V0ZXMgdG87IHNhbWUgJzppZCcgcGF0dGVybiBydWxlcy5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVBhdHRlcm4gPSBpbnB1dDxzdHJpbmc+KCc6aWQnKTtcblxuICAvLyBOdWxsIHVudGlsIHRoZSBmaXJzdCBsb2FkIHJlc29sdmVzIOKAlCB0aGF0IGlzIHdoYXQgZ2F0ZXMgKmZzU2tlbGV0b24uXG4gIHB1YmxpYyByZWFkb25seSBub2RlcyA9IHNpZ25hbDxSZXBvcnROb2RlW10+KG51bGwpO1xuXG4gIHB1YmxpYyB0cmVlQ29uZmlnOiBJVHJlZUNvbmZpZzxSZXBvcnROb2RlW10+O1xuICBwdWJsaWMgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWc7XG5cbiAgLy8gVGVtcGxhdGUtc2lkZSBoYW5kbGUgb24gdGhlIGVudW0sIHNvIGEgcm93IGNhbiB0ZWxsIGEgZm9sZGVyIGZyb20gYSByZXBvcnQuXG4gIHB1YmxpYyByZWFkb25seSBub2RlVHlwZSA9IFJlcG9ydE5vZGVUeXBlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWUgPSB2aWV3Q2hpbGQoRnNUcmVlQ29tcG9uZW50KTtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX3Byb2Nlc3MgPSBpbmplY3QoRnNQcm9jZXNzKTtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLy8gVGhlIGZpbHRlciBiYXIncyBjdXJyZW50IHF1ZXJ5IOKAlCBjYXJyaWVzIGBzdGF0ZWAgd2hlbiBTaG93IERlbGV0ZWQgaXMgb24uXG4gIHByaXZhdGUgX3F1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8vIFRoZSBmb2xkZXJzIHRoYXQgd2VyZSBvcGVuIHdoZW4gYSBzZWFyY2ggc3RhcnRlZDsgbnVsbCB3aGlsZSBubyBzZWFyY2ggaXNcbiAgLy8gcnVubmluZy4gVGhlIHNlYXJjaCBvcGVucyBldmVyeSBtYXRjaCdzIHBhdGggb3ZlciB0aGUgdG9wIG9mIHRoZW0sIGFuZFxuICAvLyBjbGVhcmluZyBpdCBwdXRzIHRoZXNlIGJhY2suXG4gIHByaXZhdGUgX2V4cGFuZGVkQmVmb3JlU2VhcmNoOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZXBvcnREYXRhLmJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCBiZWZvcmUgdGhlIGZpcnN0IGZldGNoIHJhdGhlciB0aGFuIHdhaXRpbmcgb24gdGhlIGVmZmVjdCBhYm92ZSwgd2hpY2hcbiAgICAvLyBkb2VzIG5vdCBydW4gdW50aWwgYWZ0ZXIgdGhlIGluaXRpYWwgY2hhbmdlIGRldGVjdGlvbiBwYXNzLlxuICAgIHRoaXMuX3JlcG9ydERhdGEuYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoKCk7XG5cbiAgICB0aGlzLl9pbml0RmlsdGVyQ29uZmlnKCk7XG4gICAgdGhpcy5faW5pdFRyZWVDb25maWcoKTtcbiAgICB0aGlzLl9sb2FkKCk7XG4gIH1cblxuICAvLyByb3V0ZXJMaW5rIGNvbW1hbmRzIGZvciBhIHJlcG9ydCByb3cgKGJ1aWx0IGZyb20gb3BlblBhdHRlcm4pLlxuICBwdWJsaWMgb3BlbkxpbmsocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdHRlcm5Db21tYW5kcyh0aGlzLm9wZW5QYXR0ZXJuKCksIHJlcG9ydC5pZCk7XG4gIH1cblxuICAvLyBQcm9tcHQgZm9yIGEgdGl0bGUsIGNyZWF0ZSB0aGUgcmVwb3J0IOKAlCBmaWxlZCB1bmRlciByZXBvcnRGb2xkZXJJZCB3aGVuIGFcbiAgLy8gZm9sZGVyJ3Mga2ViYWIgYXNrZWQsIGF0IHRoZSByb290IG90aGVyd2lzZSDigJQgdGhlbiByb3V0ZSB0byBpdCAoY3JlYXRlUGF0dGVybikuXG4gIHB1YmxpYyBjcmVhdGVSZXBvcnQocmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdDcmVhdGUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnVGl0bGUnLFxuICAgICAgY29tbWl0TGFiZWw6ICdDcmVhdGUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5fcmVwb3J0RGF0YS5jcmVhdGUobmFtZSwgcmVwb3J0Rm9sZGVySWQpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSkgPT4gdGhpcy5fb3Blbk5ld1JlcG9ydChyZXBvcnQuaWQpKTtcbiAgfVxuXG4gIC8vIFRoZSBnbG9iYWwgUmVwb3J0IFNldHRpbmdzIGRpYWxvZzogdGhlIEFJIGtub3dsZWRnZSBkb2N1bWVudCBhbmQgdGhlXG4gIC8vIHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkLiBBIHJ1bm5pbmcgYnVpbGQgc3RyZWFtcyBpbnRvIHRoZSBGc1Byb2Nlc3MgZG9jayxcbiAgLy8gd2hpY2ggc3Vydml2ZXMgdGhlIGRpYWxvZyBjbG9zaW5nLlxuICBwdWJsaWMgb3BlblNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEdsb2JhbFNldHRpbmdzQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzkwMHB4JyxcbiAgICAgIG1heFdpZHRoOiAnOTV2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0RmlsdGVyQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyQ29uZmlnID0ge1xuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQSBjaGVja2JveCByYXRoZXIgdGhhbiB0aGUgdXN1YWwgU3RhdHVzIHNlbGVjdCB3aXRoIGEgXCJTaG93IERlbGV0ZWRcIlxuICAgICAgICAvLyBpc29sYXRlLiBJc29sYXRpbmcgdGhlIGRlbGV0ZWQgcm93cyB3b3VsZCBzdHJhbmQgdGhlbTogYSBkZWxldGVkXG4gICAgICAgIC8vIHJlcG9ydCBpbiBhIGxpdmUgZm9sZGVyIGFycml2ZXMgd2l0aG91dCB0aGUgZm9sZGVyIGl0IHNpdHMgaW4sIGFuZCBhXG4gICAgICAgIC8vIHRyZWUgY2Fubm90IHBsYWNlIGEgbm9kZSB3aG9zZSBwYXJlbnQgaXQgbmV2ZXIgcmVjZWl2ZWQuIFNvIHRoZVxuICAgICAgICAvLyB0b2dnbGUgYXNrcyBmb3IgZXZlcnl0aGluZywgYW5kIHRoZSByb3dzIG1hcmsgd2hhdCBpcyBkZWxldGVkLlxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N0YXRlJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5DaGVja2JveCxcbiAgICAgICAgICBsYWJlbDogJ1Nob3cgRGVsZXRlZCcsXG4gICAgICAgICAgY2hlY2tlZDogW1JlcG9ydFN0YXRlLkFjdGl2ZSwgUmVwb3J0U3RhdGUuRGVsZXRlZF0uam9pbignLCcpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGljb246ICd1bmZvbGRfbW9yZScsXG4gICAgICAgICAgdG9vbHRpcDogJ0V4cGFuZCBhbGwnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl90cmVlKCk/LmV4cGFuZEFsbCgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3VuZm9sZF9sZXNzJyxcbiAgICAgICAgICB0b29sdGlwOiAnQ29sbGFwc2UgYWxsJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fdHJlZSgpPy5jb2xsYXBzZUFsbCgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3NldHRpbmdzJyxcbiAgICAgICAgICB0b29sdGlwOiAnUmVwb3J0IHNldHRpbmdzJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5vcGVuU2V0dGluZ3MoKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTmV3IEZvbGRlcicsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX2NyZWF0ZUZvbGRlcihudWxsKSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGljayBhIHJlcG9ydCBwYWNrYWdlICguemlwKSBhbmQgY2hlY2sgaXQgYmVmb3JlIGltcG9ydGluZyBpdCBhcyBhXG4gICAgICAgIC8vIG5ldyByZXBvcnQuIE5vdCBgbXVsdGlwbGVgLCBzbyBmcy1maWxlIGhhbmRzIGJhY2sgb25lIEZzRmlsZS5cbiAgICAgICAge1xuICAgICAgICAgIG1vZGU6IEFjdGlvbk1vZGUuRmlsZSxcbiAgICAgICAgICBsYWJlbDogJ0ltcG9ydCcsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgYWNjZXB0OiAnLnppcCcsXG4gICAgICAgICAgc2VsZWN0OiAoZmlsZTogRnNGaWxlKSA9PiB0aGlzLl9pbXBvcnRQYWNrYWdlKGZpbGUpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDcmVhdGUnLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY3JlYXRlUmVwb3J0KCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgLy8gVGhlIHR3byBpdGVtcyBhcmUgYW5zd2VyZWQgaW4gZGlmZmVyZW50IHBsYWNlcywgYW5kIGVhY2ggb25seSB3aGVuIGl0XG4gICAgICAvLyBjaGFuZ2VkLiBUaGUga2V5d29yZCBkcml2ZXMgdGhlIHRyZWUncyBvd24gc2VhcmNoLCB3aGljaCBpcyB0aGUgd2hvbGVcbiAgICAgIC8vIHBvaW50IG9mIHNlYXJjaGluZyBhIHRyZWUg4oCUIGl0IHJldmVhbHMgYSBtYXRjaCBuZXN0ZWQgaW5zaWRlIGNvbGxhcHNlZFxuICAgICAgLy8gZm9sZGVycyByYXRoZXIgdGhhbiBvbmx5IGZpbHRlcmluZyB3aGF0IGlzIGFscmVhZHkgb24gc2NyZWVuLiBgc3RhdGVgIGlzXG4gICAgICAvLyB0aGUgU2hvdyBEZWxldGVkIHRvZ2dsZSwgYW5kIG9ubHkgdGhlIHNlcnZlciBjYW4gYW5zd2VyIHRoYXQuIFJ1bm5pbmcgdGhlXG4gICAgICAvLyBzZWFyY2ggb24gYSB0b2dnbGUgd291bGQgY2xlYXIgaXQsIGFuZCBjbGVhcmluZyBjb2xsYXBzZXMgdGhlIHRyZWUuXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBrZXl3b3JkQ2hhbmdlZCA9IFN0cmluZyhxdWVyeT8ua2V5d29yZCA/PyAnJykgIT09IFN0cmluZyh0aGlzLl9xdWVyeS5rZXl3b3JkID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc3RhdGVDaGFuZ2VkID0gU3RyaW5nKHF1ZXJ5Py5zdGF0ZSA/PyAnJykgIT09IFN0cmluZyh0aGlzLl9xdWVyeS5zdGF0ZSA/PyAnJyk7XG4gICAgICAgIHRoaXMuX3F1ZXJ5ID0geyAuLi5xdWVyeSB9O1xuXG4gICAgICAgIGlmIChrZXl3b3JkQ2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuX3NlYXJjaChxdWVyeT8ua2V5d29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9pbml0VHJlZUNvbmZpZygpOiB2b2lkIHtcbiAgICAvLyBObyBleHBhbmRMZXZlbDogZXZlcnkgZm9sZGVyIHN0YXJ0cyBjb2xsYXBzZWQuXG4gICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgZGF0YTogW10sXG4gICAgICBjaGlsZHJlbk5hbWU6ICdjaGlsZHJlbicsXG4gICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAvLyBUaGUgd2hvbGUgcm93IGlzIHRoZSBncmlwIGFuZCB0aGUgaGFuZGxlIHN0YXlzIGhpZGRlbjsgYSBwcmVzcyBvbmx5XG4gICAgICAvLyBiZWNvbWVzIGEgZHJhZyBvbmNlIHRoZSBwb2ludGVyIG1vdmVzLCBzbyB0aGUga2ViYWIsIHRoZSBjaGV2cm9uIGFuZCB0aGVcbiAgICAgIC8vIHJlcG9ydCBsaW5rIGFsbCBzdGF5IGNsaWNrYWJsZS5cbiAgICAgIGRyYWdNb2RlOiBUcmVlRHJhZ01vZGUuTm9kZSxcbiAgICAgIC8vIEFueXRoaW5nIGRlbGV0ZWQgaXMgcmVzdG9yZWQgYmVmb3JlIGl0IGlzIG1vdmVkIOKAlCB0aGUgYmFja2VuZCByZWZ1c2VzXG4gICAgICAvLyB0byBlZGl0IGEgZGVsZXRlZCByb3csIGFuZCBhIGRyYWcgd291bGQgb25seSBzbmFwIGJhY2suXG4gICAgICBjYW5EcmFnOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNEZWxldGVkTm9kZShub2RlKSxcbiAgICAgIC8vIGNhbkRyb3AgaXMgYXNrZWQgYWJvdXQgdGhlIG5vZGUgYmVpbmcgRFJBR0dFRCwgc28gb25seSBgdG9QYXJlbnRgXG4gICAgICAvLyBkZXNjcmliZXMgdGhlIGRlc3RpbmF0aW9uIOKAlCByZWFkaW5nIG5vZGUubGV2ZWwvbm9kZS5wYXJlbnQgaGVyZSB3b3VsZFxuICAgICAgLy8gZGVzY3JpYmUgd2hlcmUgaXQgY2FtZSBmcm9tLiBBIHJlcG9ydCBjYW4gbmV2ZXIgYmUgYSBwYXJlbnQgYmVjYXVzZSBpdHNcbiAgICAgIC8vIHR5cGUgc2F5cyBzbywgYW5kIHRoYXQgc2luZ2xlIHRlc3QgaXMgdGhlIHdob2xlIFwiZm9sZGVycyBuZXN0LCByZXBvcnRzXG4gICAgICAvLyBhcmUgbGVhdmVzXCIgcnVsZSBvbiB0aGlzIHNpZGUuIEEgZGVsZXRlZCBmb2xkZXIgaXMgbm8gZGVzdGluYXRpb25cbiAgICAgIC8vIGVpdGhlcjogd2hhdGV2ZXIgbGFuZGVkIGluIGl0IHdvdWxkIHZhbmlzaCBmcm9tIHRoZSBsaXZlIGxpc3RpbmcuXG4gICAgICBjYW5Ecm9wOiAobm9kZTogRmxhdEl0ZW1Ob2RlLCBmcm9tUGFyZW50OiBGbGF0SXRlbU5vZGUsIHRvUGFyZW50OiBGbGF0SXRlbU5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuICF0b1BhcmVudCB8fCAodGhpcy5faXNGb2xkZXJOb2RlKHRvUGFyZW50KSAmJiAhdGhpcy5faXNEZWxldGVkTm9kZSh0b1BhcmVudCkpO1xuICAgICAgfSxcbiAgICAgIGNoYW5nZVJlb3JkZXI6IChldmVudDogSVRyZWVDaGFuZ2VSZW9yZGVyKSA9PiB0aGlzLl9tb3ZlKGV2ZW50KSxcbiAgICAgIG5vZGVDbGFzczogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gbm9kZS5kYXRhPy50eXBlLFxuICAgICAgLy8gTWF0Y2ggb24gdGhlIG5hbWUgb25seS4gVGhlIGxpYnJhcnkncyBkZWZhdWx0IG1hdGNoZXIgc3RyaW5naWZpZXMgdGhlXG4gICAgICAvLyB3aG9sZSBub2RlLCBzbyBpdCB3b3VsZCBoaXQgaWRzLCB0aGUgbGl0ZXJhbCB0eXBlIHdvcmQsIGFuZCBldmVyeXRoaW5nXG4gICAgICAvLyBlbHNlIHJpZGluZyBvbiB0aGUgcm93LlxuICAgICAgZmlsdGVySXRlbTogKG5vZGUsIHF1ZXJ5KSA9PiB7XG4gICAgICAgIHJldHVybiBTdHJpbmcobm9kZS5kYXRhPy5uYW1lID8/ICcnKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKFN0cmluZyhxdWVyeSA/PyAnJykudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9LFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogVHJlZUFjdGlvblR5cGUuTWVudSxcbiAgICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcbiAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1JlbmFtZScsXG4gICAgICAgICAgICAgIHNob3c6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+ICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fcmVuYW1lKG5vZGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdOZXcgcmVwb3J0JyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5faXNGb2xkZXJOb2RlKG5vZGUpICYmICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5jcmVhdGVSZXBvcnQobm9kZS5kYXRhPy5pZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ05ldyBmb2xkZXInLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9pc0ZvbGRlck5vZGUobm9kZSkgJiYgIXRoaXMuX2lzRGVsZXRlZE5vZGUobm9kZSksXG4gICAgICAgICAgICAgIGNsaWNrOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9jcmVhdGVGb2xkZXIobm9kZS5kYXRhPy5pZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gUmVwb3J0cyBvbmx5OiBhIHBhY2thZ2UgY2FycmllcyBvbmUgcmVwb3J0LCBuZXZlciBhIGZvbGRlci5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdFeHBvcnQnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNGb2xkZXJOb2RlKG5vZGUpICYmICF0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fZXhwb3J0UGFja2FnZShub2RlLmRhdGE/LmlkKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnRGVsZXRlJyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gIXRoaXMuX2lzRGVsZXRlZE5vZGUobm9kZSksXG4gICAgICAgICAgICAgIGNsaWNrOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9kZWxldGUobm9kZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gT24gZXZlcnkgZGVsZXRlZCByb3csIGluY2x1ZGluZyBhIGxpdmUgb25lIHRoYXQgaXMgb25seSBoaWRkZW4gYnlcbiAgICAgICAgICAgIC8vIGEgZGVsZXRlZCBmb2xkZXIgYWJvdmUgaXQg4oCUIHJlc3RvcmluZyB0aGF0IGJyaW5ncyB0aGUgZm9sZGVyIGJhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnUmVzdG9yZScsXG4gICAgICAgICAgICAgIHNob3c6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuX2lzRGVsZXRlZE5vZGUobm9kZSksXG4gICAgICAgICAgICAgIGNsaWNrOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9yZXN0b3JlKG5vZGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNGb2xkZXJOb2RlKG5vZGU6IEZsYXRJdGVtTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBub2RlPy5kYXRhPy50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXI7XG4gIH1cblxuICBwcml2YXRlIF9pc0RlbGV0ZWROb2RlKG5vZGU6IEZsYXRJdGVtTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW5vZGU/LmRhdGE/LmRlbGV0ZWQ7XG4gIH1cblxuICAvLyBEcml2ZSB0aGUgdHJlZSdzIGJ1aWx0LWluIHNlYXJjaDogaXQgY29sbGFwc2VzIGV2ZXJ5dGhpbmcsIGhpZGVzIGV2ZXJ5IG5vZGUsXG4gIC8vIHRoZW4gdW5oaWRlcyBlYWNoIG1hdGNoIGFuZCB3YWxrcyBpdHMgYW5jZXN0b3JzIG9wZW4sIHNvIGEgcmVwb3J0IHNldmVyYWxcbiAgLy8gZm9sZGVycyBkZWVwIHN1cmZhY2VzIHdpdGggaXRzIHBhdGggZXhwYW5kZWQuIENsZWFyaW5nIGNvbGxhcHNlcyBldmVyeXRoaW5nXG4gIC8vIGFnYWluLCBzbyB0aGUgZm9sZGVycyB0aGF0IHdlcmUgb3BlbiBiZWZvcmUgdGhlIHNlYXJjaCBhcmUgcHV0IGJhY2suXG4gIHByaXZhdGUgX3NlYXJjaChrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlID0gdGhpcy5fdHJlZSgpO1xuICAgIGlmICghdHJlZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXl3b3JkKSB7XG4gICAgICB0aGlzLl9leHBhbmRlZEJlZm9yZVNlYXJjaCA/Pz0gdGhpcy5fZXhwYW5kZWRLZXlzKCk7XG4gICAgICB0cmVlLnNlYXJjaChrZXl3b3JkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmVlLmNsZWFyU2VhcmNoKCk7XG4gICAgdGhpcy5fZXhwYW5kS2V5cyh0aGlzLl9leHBhbmRlZEJlZm9yZVNlYXJjaCA/PyBbXSk7XG4gICAgdGhpcy5fZXhwYW5kZWRCZWZvcmVTZWFyY2ggPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZCgpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHRoZSBTaG93IERlbGV0ZWQgdG9nZ2xlIGlzIHRoZSBzZXJ2ZXIncyB0byBhbnN3ZXIg4oCUIHRoZSBrZXl3b3JkIGlzXG4gICAgLy8gdGhlIHRyZWUncyBvd24gc2VhcmNoIOKAlCBhbmQgYW4gdW5jaGVja2VkIHRvZ2dsZSBzZW5kcyBub3RoaW5nLCBsZWF2aW5nIHRoZVxuICAgIC8vIGJhY2tlbmQncyBhY3RpdmUtb25seSBkZWZhdWx0IGluIGNoYXJnZS5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX3F1ZXJ5LnN0YXRlID8geyBzdGF0ZTogdGhpcy5fcXVlcnkuc3RhdGUgfSA6IHt9O1xuXG4gICAgdGhpcy5fcmVwb3J0RGF0YS50cmVlKHF1ZXJ5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydFRyZWU6IFJlcG9ydFRyZWUpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9idWlsZE5vZGVzKHJlcG9ydFRyZWUpO1xuICAgICAgICB0aGlzLm5vZGVzLnNldChub2Rlcyk7XG5cbiAgICAgICAgLy8gVGhlIHRyZWUgcmVhZHMgYGNvbmZpZ2Agb25jZSwgaW4gaXRzIG93biBuZ09uSW5pdC4gVGhlIGZpcnN0IGxvYWRcbiAgICAgICAgLy8gbGFuZHMgYmVmb3JlIGl0IGV4aXN0cywgc28gdGhlIGRhdGEgaGFzIHRvIGFycml2ZSB0aHJvdWdoIHRoZSBjb25maWc7XG4gICAgICAgIC8vIGV2ZXJ5IGxhdGVyIG9uZSBoYXMgdG8gZ28gdGhyb3VnaCB0aGUgaW5zdGFuY2Ugb3Igbm90aGluZyBjaGFuZ2VzLlxuICAgICAgICB0aGlzLnRyZWVDb25maWcgPSB7IC4uLnRoaXMudHJlZUNvbmZpZywgZGF0YTogbm9kZXMgfTtcblxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy5fdHJlZSgpO1xuICAgICAgICBpZiAoIXRyZWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXREYXRhKCkgcmVidWlsZHMgZXZlcnkgbm9kZSBjb2xsYXBzZWQsIHNvIGEgcmVuYW1lIG9yIGEgbW92ZSB3b3VsZFxuICAgICAgICAvLyBvdGhlcndpc2Ugc2xhbSBzaHV0IGV2ZXJ5IGZvbGRlciBzb21lYm9keSBoYWQgb3BlbmVkLiBLZXlzIGFyZSBzdGFibGVcbiAgICAgICAgLy8gYWNyb3NzIGxvYWRzICgnZjoxMicpLCBzbyB3aGF0IHdhcyBvcGVuIGlzIHJlb3BlbmVkIGJ5IGtleSDigJQgYW5kIGFcbiAgICAgICAgLy8gZm9sZGVyIHRoYXQgbm8gbG9uZ2VyIGNvbWVzIGJhY2sgc2ltcGx5IGlzIG5vdC5cbiAgICAgICAgY29uc3QgZXhwYW5kZWRLZXlzID0gdGhpcy5fZXhwYW5kZWRLZXlzKCk7XG4gICAgICAgIHRyZWUuc2V0RGF0YShub2Rlcyk7XG4gICAgICAgIHRoaXMuX2V4cGFuZEtleXMoZXhwYW5kZWRLZXlzKTtcblxuICAgICAgICBjb25zdCBrZXl3b3JkID0gU3RyaW5nKHRoaXMuX3F1ZXJ5LmtleXdvcmQgPz8gJycpO1xuICAgICAgICBpZiAoa2V5d29yZCkge1xuICAgICAgICAgIHRyZWUuc2VhcmNoKGtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSBrZXlzIG9mIGV2ZXJ5IG9wZW4gZm9sZGVyLCB3YWxrZWQgdGhyb3VnaCB0aGUgdHJlZSdzIHB1YmxpYyBub2RlIEFQSS5cbiAgcHJpdmF0ZSBfZXhwYW5kZWRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB0cmVlID0gdGhpcy5fdHJlZSgpO1xuICAgIGlmICghdHJlZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHdhbGsgPSAocGFyZW50OiBGbGF0SXRlbU5vZGUpOiBzdHJpbmdbXSA9PiB0cmVlLmdldE5vZGVzKHBhcmVudClcbiAgICAgIC5maWx0ZXIoKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gbm9kZS5pc0V4cGFuZGVkKCkpXG4gICAgICAuZmxhdE1hcCgobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiBbbm9kZS5kYXRhPy5rZXksIC4uLndhbGsobm9kZSldKTtcblxuICAgIHJldHVybiB3YWxrKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXhwYW5kS2V5cyhrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWUgPSB0aGlzLl90cmVlKCk7XG4gICAgaWYgKCF0cmVlIHx8ICFrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW4gPSBuZXcgU2V0KGtleXMpO1xuICAgIGNvbnN0IHdhbGsgPSAocGFyZW50OiBGbGF0SXRlbU5vZGUpOiB2b2lkID0+IHtcbiAgICAgIHRyZWUuZ2V0Tm9kZXMocGFyZW50KVxuICAgICAgICAuZmlsdGVyKChub2RlOiBGbGF0SXRlbU5vZGUpID0+IG9wZW4uaGFzKG5vZGUuZGF0YT8ua2V5KSlcbiAgICAgICAgLmZvckVhY2goKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4ge1xuICAgICAgICAgIG5vZGUuZXhwYW5kKCk7XG4gICAgICAgICAgd2Fsayhub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdhbGsobnVsbCk7XG4gIH1cblxuICAvLyBGbGF0IEFQSSByb3dzIOKGkiB0aGUgbmVzdGVkIHNoYXBlIGZzLXRyZWUgcmVuZGVycy4gRm9sZGVycyBjb21lIGJlZm9yZVxuICAvLyByZXBvcnRzIGF0IGV2ZXJ5IGxldmVsLCBlYWNoIGFscmVhZHkgbmFtZS1vcmRlcmVkIGJ5IHRoZSBiYWNrZW5kLlxuICAvL1xuICAvLyBgZGVsZXRlZGAgaXMgaW5oZXJpdGVkIGRvd253YXJkOiBhIGRlbGV0ZWQgZm9sZGVyIGhpZGVzIGV2ZXJ5dGhpbmcgYmVsb3cgaXRcbiAgLy8gd2l0aG91dCB0aGUgcm93cyBiZWxvdyBiZWluZyBkZWxldGVkIHRoZW1zZWx2ZXMsIGFuZCB0aGF0IGlzIG9ubHkgdmlzaWJsZVxuICAvLyBmcm9tIGhlcmUsIHdoZXJlIHRoZSBwYXJlbnQgaXMgaW4gaGFuZC4gVGhlIGJhY2tlbmQgYXBwbGllcyB0aGUgc2FtZSBydWxlXG4gIC8vIHdoZW4gaXQgZmlsdGVycyAoUmVwb3J0Rm9sZGVyTW9kZWw6OmdldERlbGV0ZWRGb2xkZXJJZHMoKSkuXG4gIHByaXZhdGUgX2J1aWxkTm9kZXMocmVwb3J0VHJlZTogUmVwb3J0VHJlZSk6IFJlcG9ydE5vZGVbXSB7XG4gICAgY29uc3QgZm9sZGVycyA9IHJlcG9ydFRyZWU/LmZvbGRlcnMgPz8gW107XG4gICAgY29uc3QgcmVwb3J0cyA9IHJlcG9ydFRyZWU/LnJlcG9ydHMgPz8gW107XG5cbiAgICBjb25zdCBidWlsZCA9IChwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCwgcGFyZW50RGVsZXRlZDogYm9vbGVhbik6IFJlcG9ydE5vZGVbXSA9PiB7XG4gICAgICBjb25zdCBmb2xkZXJOb2RlczogUmVwb3J0Tm9kZVtdID0gZm9sZGVyc1xuICAgICAgICAuZmlsdGVyKChmb2xkZXI6IFJlcG9ydEZvbGRlcikgPT4gKGZvbGRlci5wYXJlbnRSZXBvcnRGb2xkZXJJZCA/PyBudWxsKSA9PT0gcGFyZW50SWQpXG4gICAgICAgIC5tYXAoKGZvbGRlcjogUmVwb3J0Rm9sZGVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVEZWxldGVkID0gZm9sZGVyLnN0YXRlID09PSBSZXBvcnRTdGF0ZS5EZWxldGVkO1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBwYXJlbnREZWxldGVkIHx8IHN0YXRlRGVsZXRlZDtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGBmOiR7Zm9sZGVyLmlkfWAsXG4gICAgICAgICAgICBpZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgbmFtZTogZm9sZGVyLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBSZXBvcnROb2RlVHlwZS5Gb2xkZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogYnVpbGQoZm9sZGVyLmlkLCBkZWxldGVkKSxcbiAgICAgICAgICAgIHN0YXRlRGVsZXRlZCxcbiAgICAgICAgICAgIGRlbGV0ZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcG9ydE5vZGVzOiBSZXBvcnROb2RlW10gPSByZXBvcnRzXG4gICAgICAgIC5maWx0ZXIoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IChyZXBvcnQucmVwb3J0Rm9sZGVySWQgPz8gbnVsbCkgPT09IHBhcmVudElkKVxuICAgICAgICAubWFwKChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVEZWxldGVkID0gcmVwb3J0LnN0YXRlID09PSBSZXBvcnRTdGF0ZS5EZWxldGVkO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogYHI6JHtyZXBvcnQuaWR9YCxcbiAgICAgICAgICAgIGlkOiByZXBvcnQuaWQsXG4gICAgICAgICAgICBuYW1lOiByZXBvcnQubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFJlcG9ydE5vZGVUeXBlLlJlcG9ydCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgICAgIHN0YXRlRGVsZXRlZCxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHBhcmVudERlbGV0ZWQgfHwgc3RhdGVEZWxldGVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gWy4uLmZvbGRlck5vZGVzLCAuLi5yZXBvcnROb2Rlc107XG4gICAgfTtcblxuICAgIHJldHVybiBidWlsZChudWxsLCBmYWxzZSk7XG4gIH1cblxuICAvLyBBIGRyb3AgbW92ZWQgYSBub2RlIHVuZGVyIGEgbmV3IHBhcmVudCwgb3Igb3V0IHRvIHRoZSByb290LiBUaGUgdHJlZSBoYXNcbiAgLy8gYWxyZWFkeSBtb3ZlZCBpdCBvbiBzY3JlZW4sIHNvIGJvdGggb3V0Y29tZXMgcmVsb2FkOiBhIHN1Y2Nlc3MgdG8gcGljayB1cFxuICAvLyB0aGUgc2VydmVyJ3Mgb3JkZXJpbmcsIGEgZmFpbHVyZSB0byBwdXQgdGhlIHJvdyBiYWNrIHdoZXJlIGl0IHJlYWxseSBpcy5cbiAgcHJpdmF0ZSBfbW92ZShldmVudDogSVRyZWVDaGFuZ2VSZW9yZGVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZTogUmVwb3J0Tm9kZSA9IGV2ZW50Lm5vZGU/LmRhdGE7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IGV2ZW50LnRvUGFyZW50Py5kYXRhPy5pZCA/PyBudWxsO1xuXG4gICAgaWYgKGV2ZW50LnRvUGFyZW50ICYmICFldmVudC50b1BhcmVudC5pc0V4cGFuZGVkKCkpIHtcbiAgICAgIGV2ZW50LnRvUGFyZW50LmV4cGFuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmUkOiBPYnNlcnZhYmxlPHVua25vd24+ID0gbm9kZS50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXJcbiAgICAgID8gdGhpcy5fcmVwb3J0RGF0YS51cGRhdGVGb2xkZXIobm9kZS5pZCwgeyBwYXJlbnRSZXBvcnRGb2xkZXJJZCB9KVxuICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLm1vdmVSZXBvcnQobm9kZS5pZCwgcGFyZW50UmVwb3J0Rm9sZGVySWQpO1xuXG4gICAgc2F2ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgY2hhbmdlcycpO1xuICAgICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuX2xvYWQoKSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRm9sZGVyKHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdOZXcgRm9sZGVyJyxcbiAgICAgIGxhYmVsOiAnTmFtZScsXG4gICAgICBjb21taXRMYWJlbDogJ0NyZWF0ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLl9yZXBvcnREYXRhLmNyZWF0ZUZvbGRlcihuYW1lLCBwYXJlbnRSZXBvcnRGb2xkZXJJZCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDcmVhdGVkIGZvbGRlcicpO1xuICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmFtZShub2RlOiBGbGF0SXRlbU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBSZXBvcnROb2RlID0gbm9kZT8uZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkYXRhLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlcjtcblxuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICB0aXRsZTogZm9sZGVyID8gJ1JlbmFtZSBGb2xkZXInIDogJ1JlbmFtZSBSZXBvcnQnLFxuICAgICAgbGFiZWw6ICdOYW1lJyxcbiAgICAgIGRlZmF1bHQ6IGRhdGEubmFtZSxcbiAgICAgIGNvbW1pdExhYmVsOiAnU2F2ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiAoZm9sZGVyXG4gICAgICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZUZvbGRlcihkYXRhLmlkLCB7IG5hbWUgfSlcbiAgICAgICAgICA6IHRoaXMuX3JlcG9ydERhdGEucmVuYW1lKGRhdGEuaWQsIG5hbWUpKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIGNoYW5nZXMnKTtcbiAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBBIGZvbGRlciBkZWxldGVzIHdpdGggZXZlcnl0aGluZyBpbiBpdCwgc28gdGhlIGNvbmZpcm0gc2F5cyB3aGF0IHRoYXQgaXMg4oCUXG4gIC8vIGFuZCB0aGF0IGl0IGFsbCBjb21lcyBiYWNrIGZyb20gU2hvdyBEZWxldGVkLCB3aGljaCBpcyB3aGF0IG1ha2VzIGl0IHNhZmUgdG9cbiAgLy8gb2ZmZXIuXG4gIHByaXZhdGUgX2RlbGV0ZShub2RlOiBGbGF0SXRlbU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBSZXBvcnROb2RlID0gbm9kZT8uZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBkYXRhLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlcjtcblxuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnQ29uZmlybScsXG4gICAgICB0ZW1wbGF0ZTogZm9sZGVyXG4gICAgICAgID8gdGhpcy5fZGVsZXRlRm9sZGVyTWVzc2FnZShkYXRhKVxuICAgICAgICA6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gZGVsZXRlIHRoaXMgcmVwb3J0PycsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gKGZvbGRlclxuICAgICAgICAgID8gdGhpcy5fcmVwb3J0RGF0YS5kZWxldGVGb2xkZXIoZGF0YS5pZClcbiAgICAgICAgICA6IHRoaXMuX3JlcG9ydERhdGEuZGVsZXRlKGRhdGEuaWQpKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoZm9sZGVyID8gJ0RlbGV0ZWQgZm9sZGVyJyA6ICdEZWxldGVkIHJlcG9ydCcpO1xuICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIENvdW50ZWQgZnJvbSB0aGUgbm9kZSBhbHJlYWR5IG9uIHNjcmVlbiwgbGl2ZSByb3dzIG9ubHk6IGluIFNob3cgRGVsZXRlZFxuICAvLyBtb2RlIHRoZSBmb2xkZXIgY2FuIGFsc28gaG9sZCByb3dzIHRoYXQgYXJlIGdvbmUgYWxyZWFkeSwgYW5kIHRob3NlIGFyZSBub3RcbiAgLy8gbGVhdmluZyB3aXRoIGl0LlxuICBwcml2YXRlIF9kZWxldGVGb2xkZXJNZXNzYWdlKGZvbGRlcjogUmVwb3J0Tm9kZSk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSAobm9kZTogUmVwb3J0Tm9kZSk6IHsgZm9sZGVyczogbnVtYmVyOyByZXBvcnRzOiBudW1iZXIgfSA9PiBub2RlLmNoaWxkcmVuXG4gICAgICAuZmlsdGVyKChjaGlsZCkgPT4gIWNoaWxkLmRlbGV0ZWQpXG4gICAgICAucmVkdWNlKCh0b3RhbCwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgYmVsb3cgPSBjb3VudChjaGlsZCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb2xkZXJzOiB0b3RhbC5mb2xkZXJzICsgYmVsb3cuZm9sZGVycyArIChjaGlsZC50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXIgPyAxIDogMCksXG4gICAgICAgICAgcmVwb3J0czogdG90YWwucmVwb3J0cyArIGJlbG93LnJlcG9ydHMgKyAoY2hpbGQudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuUmVwb3J0ID8gMSA6IDApLFxuICAgICAgICB9O1xuICAgICAgfSwgeyBmb2xkZXJzOiAwLCByZXBvcnRzOiAwIH0pO1xuXG4gICAgY29uc3QgeyBmb2xkZXJzLCByZXBvcnRzIH0gPSBjb3VudChmb2xkZXIpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gW1xuICAgICAgZm9sZGVycyA/IGAke2ZvbGRlcnN9ICR7Zm9sZGVycyA9PT0gMSA/ICdmb2xkZXInIDogJ2ZvbGRlcnMnfWAgOiAnJyxcbiAgICAgIHJlcG9ydHMgPyBgJHtyZXBvcnRzfSAke3JlcG9ydHMgPT09IDEgPyAncmVwb3J0JyA6ICdyZXBvcnRzJ31gIDogJycsXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBjb25zdCBpbnNpZGUgPSBjb250ZW50cy5sZW5ndGggPyBgIGFuZCB0aGUgJHtjb250ZW50cy5qb2luKCcgYW5kICcpfSBpbnNpZGUgaXRgIDogJyc7XG5cbiAgICByZXR1cm4gYEFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBkZWxldGUgdGhlIGZvbGRlciBcIiR7Zm9sZGVyLm5hbWV9XCIke2luc2lkZX0/IEl0IGNhbiBiZSByZXN0b3JlZCBmcm9tIFNob3cgRGVsZXRlZC5gO1xuICB9XG5cbiAgLy8gQm90aCBlbmRwb2ludHMgYWxzbyByZXN0b3JlIGFueSBkZWxldGVkIGZvbGRlciBhYm92ZSB0aGUgcm93LCBzbyBhIHJvdyB0aGF0XG4gIC8vIGlzIGxpdmUgaXRzZWxmIGJ1dCBoaWRkZW4gYnkgYSBkZWxldGVkIGZvbGRlciBpcyByZXN0b3JlZCBieSB0aGUgc2FtZSBjYWxsLlxuICBwcml2YXRlIF9yZXN0b3JlKG5vZGU6IEZsYXRJdGVtTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFJlcG9ydE5vZGUgPSBub2RlPy5kYXRhO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRhdGEudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuXG4gICAgKGZvbGRlclxuICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLnVuZGVsZXRlRm9sZGVyKGRhdGEuaWQpXG4gICAgICA6IHRoaXMuX3JlcG9ydERhdGEudW5kZWxldGUoZGF0YS5pZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2Vzcyhmb2xkZXIgPyAnUmVzdG9yZWQgZm9sZGVyJyA6ICdSZXN0b3JlZCByZXBvcnQnKTtcbiAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0IGFzIGEgcGFja2FnZSAoLnJlcG9ydC56aXApIHRoYXQgYW5vdGhlciBzZXJ2ZXIgaW1wb3J0cyBhcyBhXG4gIC8vIG5ldyByZXBvcnQuIFRoZSBmaWxlIGlzIHdyaXR0ZW4gc2VydmVyLXNpZGU7IEZzUHJvY2VzcyBmb2xsb3dzIHRoZSBsaW5rXG4gIC8vIHRoZSBzZXJ2ZXIgYW5zd2VycyB3aXRoLlxuICBwcml2YXRlIF9leHBvcnRQYWNrYWdlKHJlcG9ydElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9jZXNzLmRvd25sb2FkKFxuICAgICAgJ0V4cG9ydGluZyByZXBvcnQgcGFja2FnZScsXG4gICAgICB0aGlzLl9yZXBvcnREYXRhLmV4cG9ydFBhY2thZ2UocmVwb3J0SWQpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgcGlja2VkIHBhY2thZ2UgZ29lcyB0byB0aGUgY2hlY2sgZGlhbG9nLCB3aGljaCBydW5zIHRoZSBjaGVjayBhbmQgZG9lc1xuICAvLyB0aGUgaW1wb3J0LiBBbiBpbXBvcnRlZCByZXBvcnQgaXMgYSBuZXcgcmVwb3J0LCBzbyB0aGUgbGlzdGluZyByZWxvYWRzIGFuZFxuICAvLyByb3V0ZXMgdG8gaXQgYXMgaXQgZG9lcyBhZnRlciBDcmVhdGUuXG4gIHByaXZhdGUgX2ltcG9ydFBhY2thZ2UoZmlsZTogRnNGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW48UmVwb3J0UGFja2FnZUltcG9ydENvbXBvbmVudCwgUmVwb3J0UGFja2FnZUltcG9ydERpYWxvZ0RhdGEsIFJlcG9ydFBhY2thZ2VJbXBvcnRlZFJlcG9ydD4oXG4gICAgICBSZXBvcnRQYWNrYWdlSW1wb3J0Q29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IGZpbGU6IGZpbGUuZmlsZSB9LFxuICAgICAgICB3aWR0aDogJzY0MHB4JyxcbiAgICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHJlcG9ydDogUmVwb3J0UGFja2FnZUltcG9ydGVkUmVwb3J0IHwgdW5kZWZpbmVkKSA9PiAhIXJlcG9ydCksXG4gICAgICAgIHRhcCgocmVwb3J0OiBSZXBvcnRQYWNrYWdlSW1wb3J0ZWRSZXBvcnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0ltcG9ydGVkIHJlcG9ydCcpO1xuICAgICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgICAgICB0aGlzLl9vcGVuTmV3UmVwb3J0KHJlcG9ydC5yZXBvcnRJZCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyBSb3V0ZSB0byBhIHJlcG9ydCB0aGUgbGlzdGluZyBoYXMganVzdCBtYWRlLCBieSBDcmVhdGUgb3IgSW1wb3J0XG4gIC8vIChjcmVhdGVQYXR0ZXJuKS5cbiAgcHJpdmF0ZSBfb3Blbk5ld1JlcG9ydChyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMuY3JlYXRlUGF0dGVybigpO1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShcbiAgICAgIHRoaXMuX3BhdHRlcm5Db21tYW5kcyhwYXR0ZXJuLCByZXBvcnRJZCksXG4gICAgICBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy8nKSA/IHt9IDogeyByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUdXJuIGEgJzppZCcgcGF0dGVybiBpbnRvIHJvdXRlciBjb21tYW5kcy4gUmVsYXRpdmUgdW5sZXNzIGl0IHN0YXJ0c1xuICAvLyB3aXRoICcvJywgaW4gd2hpY2ggY2FzZSB0aGUgZmlyc3Qgc2VnbWVudCBjYXJyaWVzIHRoZSBsZWFkaW5nIHNsYXNoLlxuICBwcml2YXRlIF9wYXR0ZXJuQ29tbWFuZHMocGF0dGVybjogc3RyaW5nLCBpZDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uc3RhcnRzV2l0aCgnLycpO1xuICAgIGNvbnN0IHNlZ21lbnRzOiB1bmtub3duW10gPSBwYXR0ZXJuLnNwbGl0KCcvJylcbiAgICAgIC5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQubGVuZ3RoID4gMClcbiAgICAgIC5tYXAoKHNlZ21lbnQpID0+IChzZWdtZW50ID09PSAnOmlkJyA/IGlkIDogc2VnbWVudCkpO1xuXG4gICAgaWYgKCFzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbaWRdO1xuICAgIH1cblxuICAgIGlmIChhYnNvbHV0ZSkge1xuICAgICAgc2VnbWVudHNbMF0gPSBgLyR7c2VnbWVudHNbMF19YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cbn1cbiIsIjxmcy1maWx0ZXIgW2NvbmZpZ109XCJmaWx0ZXJDb25maWdcIj48L2ZzLWZpbHRlcj5cblxuPG5nLWNvbnRhaW5lciAqZnNTa2VsZXRvbj1cIm5vZGVzKClcIj5cbiAgPGZzLXRyZWUgW2NvbmZpZ109XCJ0cmVlQ29uZmlnXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzVHJlZU5vZGVcbiAgICAgICAgbGV0LWRhdGE9XCJkYXRhXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtLmFsaWduLWNlbnRlciBub2RlLXJvd1wiXG4gICAgICAgICAgW2NsYXNzLmRlbGV0ZWRdPVwiZGF0YS5kZWxldGVkXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm5vZGUtaWNvblwiPlxuICAgICAgICAgIHt7IGRhdGEudHlwZSA9PT0gbm9kZVR5cGUuRm9sZGVyID8gJ2ZvbGRlcicgOiAnaW5zZXJ0X2NoYXJ0X291dGxpbmVkJyB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIEBpZiAoZGF0YS50eXBlID09PSBub2RlVHlwZS5Gb2xkZXIgfHwgZGF0YS5kZWxldGVkKSB7XG4gICAgICAgICAgPCEtLSBBIGRlbGV0ZWQgcmVwb3J0IGNhbid0IGJlIG9wZW5lZCAodGhlIGJhY2tlbmQgb25seSBhc3NlbWJsZXNcbiAgICAgICAgICAgICAgIGxpdmUgb25lcywgYW5kIG9uZSB1bmRlciBhIGRlbGV0ZWQgZm9sZGVyIGlzIG5vdCBvbiB0aGUgbGl2ZVxuICAgICAgICAgICAgICAgbGlzdGluZyksIHNvIGluIFNob3cgRGVsZXRlZCBtb2RlIHRoZSBuYW1lIGlzIHBsYWluIHRleHQg4oCUXG4gICAgICAgICAgICAgICByZXN0b3JlIGl0IGZyb20gdGhlIHJvdyBtZW51IGZpcnN0LiAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGUtbmFtZVwiPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJub2RlLW5hbWVcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJvcGVuTGluayhkYXRhLnJlcG9ydClcIj5cbiAgICAgICAgICAgIHt7IGRhdGEubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gT25seSBvbiB0aGUgcm93IHNvbWVib2R5IGRlbGV0ZWQuIEV2ZXJ5dGhpbmcgdW5kZXIgYSBkZWxldGVkXG4gICAgICAgICAgICAgZm9sZGVyIGlzIG11dGVkIHdpdGggaXQsIGJ1dCB3YXMgbm90IGRlbGV0ZWQgaXRzZWxmLiAtLT5cbiAgICAgICAgQGlmIChkYXRhLnN0YXRlRGVsZXRlZCkge1xuICAgICAgICAgIDxmcy1jaGlwIHNpemU9XCJ0aW55XCI+RGVsZXRlZDwvZnMtY2hpcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy10cmVlPlxuXG4gIEBpZiAoIW5vZGVzKCkubGVuZ3RoKSB7XG4gICAgPHAgY2xhc3M9XCJzbWFsbCB0cmVlLWVtcHR5XCI+XG4gICAgICBObyByZXBvcnRzIHlldC4gQ3JlYXRlIG9uZSwgb3IgYWRkIGEgZm9sZGVyIHRvIGdyb3VwIHRoZW0uXG4gICAgPC9wPlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -32,6 +32,11 @@ export * from './app/reports/interfaces/report-mark-point.interface';
|
|
|
32
32
|
export * from './app/reports/interfaces/report-mark-click.interface';
|
|
33
33
|
export * from './app/reports/interfaces/report-export-line.interface';
|
|
34
34
|
export * from './app/reports/interfaces/report-export-line-kind.type';
|
|
35
|
+
export * from './app/reports/interfaces/report-package-check.interface';
|
|
36
|
+
export * from './app/reports/interfaces/report-package-finding.interface';
|
|
37
|
+
export * from './app/reports/interfaces/report-package-finding-severity.type';
|
|
38
|
+
export * from './app/reports/interfaces/report-package-import-response.interface';
|
|
39
|
+
export * from './app/reports/interfaces/report-package-imported-report.interface';
|
|
35
40
|
export * from './app/reports/enums/report-value-format.enum';
|
|
36
41
|
export * from './app/reports/enums/report-value-formula.enum';
|
|
37
42
|
export * from './app/reports/enums/report-list-column-format.enum';
|
|
@@ -42,4 +47,4 @@ export * from './app/reports/enums/report-chart-line-style.enum';
|
|
|
42
47
|
export * from './app/reports/enums/report-chart-mark-stat.enum';
|
|
43
48
|
export * from './app/reports/enums/report-chart-date-label.enum';
|
|
44
49
|
export * from './app/reports/enums/report-change-polarity.enum';
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILDZFQUE2RTtBQUM3RSxzRUFBc0U7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsMkRBQTJELENBQUM7QUFDMUUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGdFQUFnRSxDQUFDO0FBQy9FLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLDJEQUEyRCxDQUFDO0FBQzFFLGNBQWMsK0RBQStELENBQUM7QUFDOUUsY0FBYyxtRUFBbUUsQ0FBQztBQUNsRixjQUFjLG1FQUFtRSxDQUFDO0FBQ2xGLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsaURBQWlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBmaXJlc3RpdGNoL3JlcG9ydHNcbiAqXG4gKiBUaGUgQUktYnVpbHQgcmVwb3J0IHZpZXdlci9lZGl0b3IsIGl0cyBkYXRhIGdhdGV3YXksIHNlc3Npb24gZmlsdGVyIHN0YXRlIGFuZFxuICogcmVuZGVyZXIgY29tcG9uZW50cy4gVGhlIEFJIGNoYXQgaXMgcHJvdmlkZWQgYnkgQGZpcmVzdGl0Y2gvYWksIHJlYWNoZWRcbiAqIHRocm91Z2ggdGhlIHJlcG9ydCdzIHBhZ2Ugb24gc2NyZWVuLlxuICovXG4vLyBSb3V0aW5nLWZyZWUgc3VyZmFjZTogYSByZXBvcnRzIGxpc3RpbmcgYW5kIGEgc2luZ2xlLXJlcG9ydCB2aWV3LiBUaGUgaG9zdFxuLy8gcm91dGVzIGJldHdlZW4gdGhlbSBhbmQgcGFzc2VzIFtyZXBvcnRJZF0gaW50byBGc0FpUmVwb3J0Q29tcG9uZW50LlxuZXhwb3J0IHsgRnNBaVJlcG9ydHNDb21wb25lbnQgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3ZpZXdzL3JlcG9ydHMvZnMtYWktcmVwb3J0cy5jb21wb25lbnQnO1xuZXhwb3J0IHsgRnNBaVJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0L2ZzLWFpLXJlcG9ydC5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4vYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YSc7XG5leHBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0cy9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XG5leHBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXN0YXRlLXNuYXBzaG90LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXRpbGUtc3RhdGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZHJpbGwtc3RlcC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1kcmlsbC1jcnVtYi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1kcmlsbC1yZWZ1c2FsLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1maWx0ZXItbWF0Y2gudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LWZpbHRlci1za2lwLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC12aWV3ZXItZmVhdHVyZS50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWZvcm1hdC50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9jb21wb25lbnQtZGF0YS1hcHBsaWVkLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvY29tcG9uZW50LWRhdGEtZHJpbGwuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMtcmVxdWVzdC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1zYXZlZC1maWx0ZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtc2F2ZWQtZmlsdGVyLWNoYW5nZXMuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1wb2ludC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLWNsaWNrLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLWtpbmQudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXBhY2thZ2UtY2hlY2suaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtcGFja2FnZS1maW5kaW5nLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXBhY2thZ2UtZmluZGluZy1zZXZlcml0eS50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtcGFja2FnZS1pbXBvcnQtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtcGFja2FnZS1pbXBvcnRlZC1yZXBvcnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LXZhbHVlLWZvcm1hdC5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LXZhbHVlLWZvcm11bGEuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFuZ2UtcG9sYXJpdHkuZW51bSc7XG4iXX0=
|
package/fesm2022/{firestitch-report-echarts-BxAcubsP.mjs → firestitch-report-echarts-qh_mqik9.mjs}
RENAMED
|
@@ -4,7 +4,7 @@ import * as echarts from 'echarts/core';
|
|
|
4
4
|
export { echarts as default };
|
|
5
5
|
import { LabelLayout } from 'echarts/features';
|
|
6
6
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
7
|
-
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-
|
|
7
|
+
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-D-WG_G5d.mjs';
|
|
8
8
|
|
|
9
9
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
10
10
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -63,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
63
63
|
axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
66
|
+
//# sourceMappingURL=firestitch-report-echarts-qh_mqik9.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-report-echarts-
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-qh_mqik9.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}
|