@firestitch/report 18.3.0 → 18.3.1
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/views/reports/fs-ai-reports.component.d.ts +1 -1
- package/esm2022/app/reports/views/reports/fs-ai-reports.component.mjs +11 -5
- package/fesm2022/{firestitch-report-echarts-dBElcPnl.mjs → firestitch-report-echarts-Dg5PjbjT.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-dBElcPnl.mjs.map → firestitch-report-echarts-Dg5PjbjT.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-DhxGcHlU.mjs → firestitch-report-firestitch-report-JORFp_xa.mjs} +16 -10
- package/fesm2022/{firestitch-report-firestitch-report-DhxGcHlU.mjs.map → firestitch-report-firestitch-report-JORFp_xa.mjs.map} +1 -1
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
|
@@ -25,7 +25,7 @@ export declare class FsAiReportsComponent implements OnInit {
|
|
|
25
25
|
ngOnInit(): void;
|
|
26
26
|
openLink(report: ReportListItem): unknown[];
|
|
27
27
|
isDeleted(report: ReportListItem): boolean;
|
|
28
|
-
createReport(): void;
|
|
28
|
+
createReport(reportFolderId?: number): void;
|
|
29
29
|
openSettings(): void;
|
|
30
30
|
private _initFilterConfig;
|
|
31
31
|
private _initTreeConfig;
|
|
@@ -86,15 +86,16 @@ export class FsAiReportsComponent {
|
|
|
86
86
|
isDeleted(report) {
|
|
87
87
|
return report?.state === ReportState.Deleted;
|
|
88
88
|
}
|
|
89
|
-
// Prompt for a title, create the report
|
|
90
|
-
|
|
89
|
+
// Prompt for a title, create the report — filed under reportFolderId when a
|
|
90
|
+
// folder's kebab asked, at the root otherwise — then route to it (createPattern).
|
|
91
|
+
createReport(reportFolderId = null) {
|
|
91
92
|
this._prompt.input({
|
|
92
93
|
title: 'Create Report',
|
|
93
94
|
label: 'Title',
|
|
94
95
|
commitLabel: 'Create',
|
|
95
96
|
required: true,
|
|
96
97
|
})
|
|
97
|
-
.pipe(switchMap((name) => this._reportData.create(name)), takeUntilDestroyed(this._destroyRef))
|
|
98
|
+
.pipe(switchMap((name) => this._reportData.create(name, reportFolderId)), takeUntilDestroyed(this._destroyRef))
|
|
98
99
|
.subscribe((report) => {
|
|
99
100
|
const pattern = this.createPattern();
|
|
100
101
|
this._router.navigate(this._patternCommands(pattern, report.id), pattern.startsWith('/') ? {} : { relativeTo: this._route });
|
|
@@ -212,7 +213,12 @@ export class FsAiReportsComponent {
|
|
|
212
213
|
click: (node) => this._rename(node),
|
|
213
214
|
},
|
|
214
215
|
{
|
|
215
|
-
label: 'New
|
|
216
|
+
label: 'New report',
|
|
217
|
+
show: (node) => this._isFolderNode(node),
|
|
218
|
+
click: (node) => this.createReport(node.data?.id),
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
label: 'New folder',
|
|
216
222
|
show: (node) => this._isFolderNode(node),
|
|
217
223
|
click: (node) => this._createFolder(node.data?.id),
|
|
218
224
|
},
|
|
@@ -420,4 +426,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
420
426
|
RouterLink,
|
|
421
427
|
], 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 class=\"fs-row.gap-sm.align-center node-row\">\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) {\n <span class=\"node-name\">{{ data.name }}</span>\n } @else if (isDeleted(data.report)) {\n <!-- A deleted report can't be opened (the backend only assembles\n active ones), 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 </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-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"] }]
|
|
422
428
|
}], ctorParameters: () => [] });
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0cy9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnRzL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQWdCLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxlQUFlLEVBQ2YsWUFBWSxFQUdaLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0Is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QWdCO3dCQUNoQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsVUFBVTtxQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSwgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuaW1wb3J0IHtcbiAgRmxhdEl0ZW1Ob2RlLFxuICBGc1RyZWVDb21wb25lbnQsXG4gIEZzVHJlZU1vZHVsZSxcbiAgSVRyZWVDaGFuZ2VSZW9yZGVyLFxuICBJVHJlZUNvbmZpZyxcbiAgVHJlZUFjdGlvblR5cGUsXG4gIFRyZWVEcmFnTW9kZSxcbn0gZnJvbSAnQGZpcmVzdGl0Y2gvdHJlZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBHbG9iYWxTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUmVwb3J0Rm9sZGVyLFxuICBSZXBvcnRMaXN0SXRlbSxcbiAgUmVwb3J0Tm9kZSxcbiAgUmVwb3J0Tm9kZVR5cGUsXG4gIFJlcG9ydFN0YXRlLFxuICBSZXBvcnRTdGF0ZXMsXG4gIFJlcG9ydFRyZWUsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gVGhlIHJlcG9ydHMgbGlzdGluZyDigJQgYW4gZnMtdHJlZSBvZiBmb2xkZXJzIGFuZCB0aGUgcmVwb3J0cyBmaWxlZCBpbnRvIHRoZW0uXG4vLyBSb3dzIGxpbmsgb3V0IHRocm91Z2ggYSBVUkwgcGF0dGVybiAoYSAnOmlkJyB0b2tlbiDihpIgdGhlIHJlcG9ydCBpZDsgYSBsZWFkaW5nXG4vLyAnLycgbWFrZXMgaXQgYWJzb2x1dGUsIG90aGVyd2lzZSBpdCdzIHJlbGF0aXZlIHRvIHRoaXMgY29tcG9uZW50J3Mgcm91dGUpLlxuLy8gQ3JlYXRlIHByb21wdHMgZm9yIGEgdGl0bGUsIGNyZWF0ZXMgdGhlIHJlcG9ydCwgdGhlbiByb3V0ZXMgdG8gaXQuIFRoZSBnZWFyXG4vLyBvcGVucyB0aGUgZ2xvYmFsIFJlcG9ydCBTZXR0aW5ncyBkaWFsb2cgKEFJIGtub3dsZWRnZSBkb2N1bWVudCArXG4vLyBzZW1hbnRpYy1kYXRhYmFzZSBidWlsZCksIHdoaWNoIGxpdmVzIGluIHRoaXMgcGFja2FnZS4gTm8gcm91dGluZyBpc1xuLy8gaGFyZC1jb2RlZCBoZXJlLlxuLy9cbi8vIEZvbGRlcnMgbmVzdDsgcmVwb3J0cyBhcmUgYWx3YXlzIGxlYXZlcyDigJQgY2FuRHJvcCBlbmZvcmNlcyBpdCBoZXJlLCBhbmQgdGhlXG4vLyBiYWNrZW5kIGVuZm9yY2VzIGl0IHN0cnVjdHVyYWxseSBieSBrZWVwaW5nIHRoZSB0cmVlIGluIGl0cyBvd24gdGFibGUuIEFcbi8vIHJlcG9ydCBpbiBubyBmb2xkZXIgaXMgYSByb290IG5vZGUsIHdoaWNoIGlzIHdoZXJlIGV2ZXJ5IHJlcG9ydCBzYXQgYmVmb3JlXG4vLyBmb2xkZXJzIGV4aXN0ZWQsIHNvIG5vdGhpbmcgaGFkIHRvIGJlIG1pZ3JhdGVkIG9yIGJ1Y2tldGVkIGFzIFwidW5jYXRlZ29yaXplZFwiLlxuLy9cbi8vIFJlcG9ydHMgYXJlIHNvZnQtZGVsZXRhYmxlOiB0aGUgcm93IGtlYmFiIGRlbGV0ZXMsIFwiU2hvdyBEZWxldGVkXCIgZmxpcHMgdGhlXG4vLyBsaXN0aW5nIGludG8gZGVsZXRlZCBtb2RlICh0aGUgYmFja2VuZCBoaWRlcyBkZWxldGVkIHJlcG9ydHMgb3RoZXJ3aXNlKSwgYW5kXG4vLyBpbiB0aGF0IG1vZGUgdGhlIGtlYmFiIG9mZmVycyBSZXN0b3JlIGluc3RlYWQuIEZvbGRlcnMgZG8gTk9UIHRha2UgcGFydCBpblxuLy8gdGhhdCDigJQgYSBmb2xkZXIgaXMgb25seSBkZWxldGFibGUgb25jZSBpdCBpcyBlbXB0eSwgc28gaXQgaGFyZCBkZWxldGVzIGFuZCBoYXNcbi8vIG5vdGhpbmcgdG8gcmVzdG9yZS4gVGhlIHVwc2hvdCBpcyB0aGF0IGRlbGV0ZWQgbW9kZSBrZWVwcyB0aGUgZm9sZGVyIHN0cnVjdHVyZVxuLy8gb24gc2NyZWVuIHdpdGggdGhlIGRlbGV0ZWQgcmVwb3J0cyBzaXR0aW5nIHdoZXJlIHRoZXkgYmVsb25nLCBzbyByZXN0b3Jpbmcgb25lXG4vLyBwdXRzIGl0IGJhY2sgcmF0aGVyIHRoYW4gZHJvcHBpbmcgaXQgYXQgdGhlIHJvb3QuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1haS1yZXBvcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICBGc1RyZWVNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gSG93IGRlZXAgdGhlIHRyZWUgb3BlbnMgb24gbG9hZC4gRm9sZGVycyBhcmUgYXVkaWVuY2UgYnVja2V0cywgbm90IGFcbiAgLy8gZmlsZXN5c3RlbSwgc28gdGhlcmUgaXMgbm90aGluZyB3b3J0aCBoaWRpbmcgYmVoaW5kIGEgY2xvc2VkIGNoZXZyb24uXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVhQQU5EX0xFVkVMID0gMTA7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzIGVuZHBvaW50czsgb3ZlcnJpZGUgdG8gbW91bnQgZWxzZXdoZXJlLlxuICBwdWJsaWMgcmVhZG9ubHkgYmFzZVBhdGggPSBpbnB1dDxzdHJpbmc+KCdyZXBvcnRzJyk7XG5cbiAgLy8gV2hlcmUgYSByb3cgbGlua3MgdG87ICc6aWQnIGlzIHJlcGxhY2VkIHdpdGggdGhlIHJlcG9ydCBpZC4gRGVmYXVsdCB0YWtlc1xuICAvLyB5b3UgdG8gPGN1cnJlbnQgcm91dGU+LzppZC4gQWJzb2x1dGUgd2hlbiBpdCBzdGFydHMgd2l0aCAnLycuXG4gIHB1YmxpYyByZWFkb25seSBvcGVuUGF0dGVybiA9IGlucHV0PHN0cmluZz4oJzppZCcpO1xuXG4gIC8vIFdoZXJlIGEgZnJlc2hseS1jcmVhdGVkIHJlcG9ydCByb3V0ZXMgdG87IHNhbWUgJzppZCcgcGF0dGVybiBydWxlcy5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVBhdHRlcm4gPSBpbnB1dDxzdHJpbmc+KCc6aWQnKTtcblxuICAvLyBOdWxsIHVudGlsIHRoZSBmaXJzdCBsb2FkIHJlc29sdmVzIOKAlCB0aGF0IGlzIHdoYXQgZ2F0ZXMgKmZzU2tlbGV0b24uXG4gIHB1YmxpYyByZWFkb25seSBub2RlcyA9IHNpZ25hbDxSZXBvcnROb2RlW10+KG51bGwpO1xuXG4gIHB1YmxpYyB0cmVlQ29uZmlnOiBJVHJlZUNvbmZpZzxSZXBvcnROb2RlW10+O1xuICBwdWJsaWMgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWc7XG5cbiAgLy8gVGVtcGxhdGUtc2lkZSBoYW5kbGUgb24gdGhlIGVudW0sIHNvIGEgcm93IGNhbiB0ZWxsIGEgZm9sZGVyIGZyb20gYSByZXBvcnQuXG4gIHB1YmxpYyByZWFkb25seSBub2RlVHlwZSA9IFJlcG9ydE5vZGVUeXBlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWUgPSB2aWV3Q2hpbGQoRnNUcmVlQ29tcG9uZW50KTtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vIFRoZSBmaWx0ZXIgYmFyJ3MgY3VycmVudCBxdWVyeSDigJQgY2FycmllcyBgc3RhdGVgIHdoZW4gU2hvdyBEZWxldGVkIGlzIG9uLlxuICBwcml2YXRlIF9xdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgYmVmb3JlIHRoZSBmaXJzdCBmZXRjaCByYXRoZXIgdGhhbiB3YWl0aW5nIG9uIHRoZSBlZmZlY3QgYWJvdmUsIHdoaWNoXG4gICAgLy8gZG9lcyBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBpbml0aWFsIGNoYW5nZSBkZXRlY3Rpb24gcGFzcy5cbiAgICB0aGlzLl9yZXBvcnREYXRhLmJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aCgpO1xuXG4gICAgdGhpcy5faW5pdEZpbHRlckNvbmZpZygpO1xuICAgIHRoaXMuX2luaXRUcmVlQ29uZmlnKCk7XG4gICAgdGhpcy5fbG9hZCgpO1xuICB9XG5cbiAgLy8gcm91dGVyTGluayBjb21tYW5kcyBmb3IgYSByZXBvcnQgcm93IChidWlsdCBmcm9tIG9wZW5QYXR0ZXJuKS5cbiAgcHVibGljIG9wZW5MaW5rKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuQ29tbWFuZHModGhpcy5vcGVuUGF0dGVybigpLCByZXBvcnQuaWQpO1xuICB9XG5cbiAgLy8gQSBkZWxldGVkIHJlcG9ydCBjYW4ndCBiZSBvcGVuZWQg4oCUIHRoZSBiYWNrZW5kIG9ubHkgYXNzZW1ibGVzIGFjdGl2ZSBvbmVzIOKAlFxuICAvLyBzbyBpbiBTaG93IERlbGV0ZWQgbW9kZSBpdHMgbmFtZSByZW5kZXJzIGFzIHBsYWluIHRleHQgcmF0aGVyIHRoYW4gYSBsaW5rLlxuICBwdWJsaWMgaXNEZWxldGVkKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVwb3J0Py5zdGF0ZSA9PT0gUmVwb3J0U3RhdGUuRGVsZXRlZDtcbiAgfVxuXG4gIC8vIFByb21wdCBmb3IgYSB0aXRsZSwgY3JlYXRlIHRoZSByZXBvcnQsIHRoZW4gcm91dGUgdG8gaXQgKGNyZWF0ZVBhdHRlcm4pLlxuICBwdWJsaWMgY3JlYXRlUmVwb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICB0aXRsZTogJ0NyZWF0ZSBSZXBvcnQnLFxuICAgICAgbGFiZWw6ICdUaXRsZScsXG4gICAgICBjb21taXRMYWJlbDogJ0NyZWF0ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLl9yZXBvcnREYXRhLmNyZWF0ZShuYW1lKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuY3JlYXRlUGF0dGVybigpO1xuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgdGhpcy5fcGF0dGVybkNvbW1hbmRzKHBhdHRlcm4sIHJlcG9ydC5pZCksXG4gICAgICAgICAgcGF0dGVybi5zdGFydHNXaXRoKCcvJykgPyB7fSA6IHsgcmVsYXRpdmVUbzogdGhpcy5fcm91dGUgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGdsb2JhbCBSZXBvcnQgU2V0dGluZ3MgZGlhbG9nOiB0aGUgQUkga25vd2xlZGdlIGRvY3VtZW50IGFuZCB0aGVcbiAgLy8gc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQuIEEgcnVubmluZyBidWlsZCBzdHJlYW1zIGludG8gdGhlIEZzUHJvY2VzcyBkb2NrLFxuICAvLyB3aGljaCBzdXJ2aXZlcyB0aGUgZGlhbG9nIGNsb3NpbmcuXG4gIHB1YmxpYyBvcGVuU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oR2xvYmFsU2V0dGluZ3NDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRGaWx0ZXJDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJDb25maWcgPSB7XG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWw6ICdTZWFyY2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N0YXRlJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgICAgbGFiZWw6ICdTdGF0dXMnLFxuICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlczogKCkgPT4gUmVwb3J0U3RhdGVzLFxuICAgICAgICAgIGlzb2xhdGU6IHsgbGFiZWw6ICdTaG93IERlbGV0ZWQnLCB2YWx1ZTogUmVwb3J0U3RhdGUuRGVsZXRlZCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGljb246ICd1bmZvbGRfbW9yZScsXG4gICAgICAgICAgdG9vbHRpcDogJ0V4cGFuZCBhbGwnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl90cmVlKCk/LmV4cGFuZEFsbCgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3VuZm9sZF9sZXNzJyxcbiAgICAgICAgICB0b29sdGlwOiAnQ29sbGFwc2UgYWxsJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fdHJlZSgpPy5jb2xsYXBzZUFsbCgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3NldHRpbmdzJyxcbiAgICAgICAgICB0b29sdGlwOiAnUmVwb3J0IHNldHRpbmdzJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5vcGVuU2V0dGluZ3MoKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTmV3IEZvbGRlcicsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX2NyZWF0ZUZvbGRlcihudWxsKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ3JlYXRlJyxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNyZWF0ZVJlcG9ydCgpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIC8vIFRoZSB0d28gaXRlbXMgYXJlIGFuc3dlcmVkIGluIGRpZmZlcmVudCBwbGFjZXMgYW5kIGJvdGggaGF2ZSB0byBydW4uXG4gICAgICAvLyBUaGUga2V5d29yZCBkcml2ZXMgdGhlIHRyZWUncyBvd24gc2VhcmNoLCB3aGljaCBpcyB0aGUgd2hvbGUgcG9pbnQgb2ZcbiAgICAgIC8vIHNlYXJjaGluZyBhIHRyZWUg4oCUIGl0IHJldmVhbHMgYSBtYXRjaCBuZXN0ZWQgaW5zaWRlIGNvbGxhcHNlZCBmb2xkZXJzXG4gICAgICAvLyByYXRoZXIgdGhhbiBvbmx5IGZpbHRlcmluZyB3aGF0IGlzIGFscmVhZHkgb24gc2NyZWVuLiBgc3RhdGVgIGlzIHRoZVxuICAgICAgLy8gU2hvdyBEZWxldGVkIHRvZ2dsZSwgYW5kIG9ubHkgdGhlIHNlcnZlciBjYW4gYW5zd2VyIHRoYXQuXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZUNoYW5nZWQgPSBTdHJpbmcocXVlcnk/LnN0YXRlID8/ICcnKSAhPT0gU3RyaW5nKHRoaXMuX3F1ZXJ5LnN0YXRlID8/ICcnKTtcbiAgICAgICAgdGhpcy5fcXVlcnkgPSB7IC4uLnF1ZXJ5IH07XG5cbiAgICAgICAgdGhpcy5fc2VhcmNoKHF1ZXJ5Py5rZXl3b3JkKTtcblxuICAgICAgICBpZiAoc3RhdGVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9pbml0VHJlZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVDb25maWcgPSB7XG4gICAgICBkYXRhOiBbXSxcbiAgICAgIGNoaWxkcmVuTmFtZTogJ2NoaWxkcmVuJyxcbiAgICAgIGV4cGFuZExldmVsOiBGc0FpUmVwb3J0c0NvbXBvbmVudC5FWFBBTkRfTEVWRUwsXG4gICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAvLyBUaGUgd2hvbGUgcm93IGlzIHRoZSBncmlwIGFuZCB0aGUgaGFuZGxlIHN0YXlzIGhpZGRlbjsgYSBwcmVzcyBvbmx5XG4gICAgICAvLyBiZWNvbWVzIGEgZHJhZyBvbmNlIHRoZSBwb2ludGVyIG1vdmVzLCBzbyB0aGUga2ViYWIsIHRoZSBjaGV2cm9uIGFuZCB0aGVcbiAgICAgIC8vIHJlcG9ydCBsaW5rIGFsbCBzdGF5IGNsaWNrYWJsZS5cbiAgICAgIGRyYWdNb2RlOiBUcmVlRHJhZ01vZGUuTm9kZSxcbiAgICAgIC8vIGNhbkRyb3AgaXMgYXNrZWQgYWJvdXQgdGhlIG5vZGUgYmVpbmcgRFJBR0dFRCwgc28gb25seSBgdG9QYXJlbnRgXG4gICAgICAvLyBkZXNjcmliZXMgdGhlIGRlc3RpbmF0aW9uIOKAlCByZWFkaW5nIG5vZGUubGV2ZWwvbm9kZS5wYXJlbnQgaGVyZSB3b3VsZFxuICAgICAgLy8gZGVzY3JpYmUgd2hlcmUgaXQgY2FtZSBmcm9tLiBBIHJlcG9ydCBjYW4gbmV2ZXIgYmUgYSBwYXJlbnQgYmVjYXVzZSBpdHNcbiAgICAgIC8vIHR5cGUgc2F5cyBzbywgYW5kIHRoYXQgc2luZ2xlIHRlc3QgaXMgdGhlIHdob2xlIFwiZm9sZGVycyBuZXN0LCByZXBvcnRzXG4gICAgICAvLyBhcmUgbGVhdmVzXCIgcnVsZSBvbiB0aGlzIHNpZGUuXG4gICAgICBjYW5Ecm9wOiAobm9kZTogRmxhdEl0ZW1Ob2RlLCBmcm9tUGFyZW50OiBGbGF0SXRlbU5vZGUsIHRvUGFyZW50OiBGbGF0SXRlbU5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuICF0b1BhcmVudCB8fCB0b1BhcmVudC5kYXRhPy50eXBlID09PSBSZXBvcnROb2RlVHlwZS5Gb2xkZXI7XG4gICAgICB9LFxuICAgICAgY2hhbmdlUmVvcmRlcjogKGV2ZW50OiBJVHJlZUNoYW5nZVJlb3JkZXIpID0+IHRoaXMuX21vdmUoZXZlbnQpLFxuICAgICAgbm9kZUNsYXNzOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiBub2RlLmRhdGE/LnR5cGUsXG4gICAgICAvLyBNYXRjaCBvbiB0aGUgbmFtZSBvbmx5LiBUaGUgbGlicmFyeSdzIGRlZmF1bHQgbWF0Y2hlciBzdHJpbmdpZmllcyB0aGVcbiAgICAgIC8vIHdob2xlIG5vZGUsIHNvIGl0IHdvdWxkIGhpdCBpZHMsIHRoZSBsaXRlcmFsIHR5cGUgd29yZCwgYW5kIGV2ZXJ5dGhpbmdcbiAgICAgIC8vIGVsc2UgcmlkaW5nIG9uIHRoZSByb3cuXG4gICAgICBmaWx0ZXJJdGVtOiAobm9kZSwgcXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhub2RlLmRhdGE/Lm5hbWUgPz8gJycpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoU3RyaW5nKHF1ZXJ5ID8/ICcnKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0sXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBUcmVlQWN0aW9uVHlwZS5NZW51LFxuICAgICAgICAgIGljb246ICdtb3JlX3ZlcnQnLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnUmVuYW1lJyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gIXRoaXMuX2lzRGVsZXRlZE5vZGUobm9kZSksXG4gICAgICAgICAgICAgIGNsaWNrOiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9yZW5hbWUobm9kZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ05ldyBGb2xkZXIgSW5zaWRlJyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5faXNGb2xkZXJOb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fY3JlYXRlRm9sZGVyKG5vZGUuZGF0YT8uaWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdEZWxldGUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNEZWxldGVkTm9kZShub2RlKSxcbiAgICAgICAgICAgICAgY2xpY2s6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuX2RlbGV0ZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBGb2xkZXJzIG5ldmVyIHJlYWNoIHRoaXM6IHRoZXkgaGFyZCBkZWxldGUsIHNvIGEgZGVsZXRlZCBmb2xkZXJcbiAgICAgICAgICAgIC8vIGRvZXMgbm90IGV4aXN0IHRvIGJlIHJlc3RvcmVkLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1Jlc3RvcmUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fcmVzdG9yZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRm9sZGVyTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbm9kZT8uZGF0YT8udHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWxldGVkTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGV0ZWQobm9kZT8uZGF0YT8ucmVwb3J0KTtcbiAgfVxuXG4gIC8vIERyaXZlIHRoZSB0cmVlJ3MgYnVpbHQtaW4gc2VhcmNoOiBpdCBjb2xsYXBzZXMgZXZlcnl0aGluZywgaGlkZXMgZXZlcnkgbm9kZSxcbiAgLy8gdGhlbiB1bmhpZGVzIGVhY2ggbWF0Y2ggYW5kIHdhbGtzIGl0cyBhbmNlc3RvcnMgb3Blbiwgc28gYSByZXBvcnQgc2V2ZXJhbFxuICAvLyBmb2xkZXJzIGRlZXAgc3VyZmFjZXMgd2l0aCBpdHMgcGF0aCBleHBhbmRlZC4gQ2xlYXJpbmcgZG9lcyBOT1QgdW5kbyB0aGF0XG4gIC8vIGluaXRpYWwgY29sbGFwc2UsIHNvIHRoZSB0cmVlIGlzIHJlLW9wZW5lZCBoZXJlIOKAlCBvdGhlcndpc2UgdGhlIGxpc3RpbmcgaXNcbiAgLy8gbGVmdCBmdWxseSBjb2xsYXBzZWQgdGhlIG1vbWVudCBzb21lYm9keSBlbXB0aWVzIHRoZSBzZWFyY2ggYm94LlxuICBwcml2YXRlIF9zZWFyY2goa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMuX3RyZWUoKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5d29yZCkge1xuICAgICAgdHJlZS5zZWFyY2goa2V5d29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJlZS5jbGVhclNlYXJjaCgpO1xuICAgIHRyZWUuZXhwYW5kQWxsKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydERhdGEudHJlZSh0aGlzLl9xdWVyeSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh0cmVlOiBSZXBvcnRUcmVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fYnVpbGROb2Rlcyh0cmVlKTtcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQobm9kZXMpO1xuXG4gICAgICAgIC8vIFRoZSB0cmVlIHJlYWRzIGBjb25maWdgIG9uY2UsIGluIGl0cyBvd24gbmdPbkluaXQuIFRoZSBmaXJzdCBsb2FkXG4gICAgICAgIC8vIGxhbmRzIGJlZm9yZSBpdCBleGlzdHMsIHNvIHRoZSBkYXRhIGhhcyB0byBhcnJpdmUgdGhyb3VnaCB0aGUgY29uZmlnO1xuICAgICAgICAvLyBldmVyeSBsYXRlciBvbmUgaGFzIHRvIGdvIHRocm91Z2ggdGhlIGluc3RhbmNlIG9yIG5vdGhpbmcgY2hhbmdlcy5cbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0geyAuLi50aGlzLnRyZWVDb25maWcsIGRhdGE6IG5vZGVzIH07XG4gICAgICAgIHRoaXMuX3RyZWUoKT8uc2V0RGF0YShub2Rlcyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIEZsYXQgQVBJIHJvd3Mg4oaSIHRoZSBuZXN0ZWQgc2hhcGUgZnMtdHJlZSByZW5kZXJzLiBGb2xkZXJzIGNvbWUgYmVmb3JlXG4gIC8vIHJlcG9ydHMgYXQgZXZlcnkgbGV2ZWwsIGVhY2ggYWxyZWFkeSBuYW1lLW9yZGVyZWQgYnkgdGhlIGJhY2tlbmQuXG4gIHByaXZhdGUgX2J1aWxkTm9kZXModHJlZTogUmVwb3J0VHJlZSk6IFJlcG9ydE5vZGVbXSB7XG4gICAgY29uc3QgZm9sZGVycyA9IHRyZWU/LmZvbGRlcnMgPz8gW107XG4gICAgY29uc3QgcmVwb3J0cyA9IHRyZWU/LnJlcG9ydHMgPz8gW107XG5cbiAgICBjb25zdCBidWlsZCA9IChwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCk6IFJlcG9ydE5vZGVbXSA9PiB7XG4gICAgICBjb25zdCBmb2xkZXJOb2RlczogUmVwb3J0Tm9kZVtdID0gZm9sZGVyc1xuICAgICAgICAuZmlsdGVyKChmb2xkZXI6IFJlcG9ydEZvbGRlcikgPT4gKGZvbGRlci5wYXJlbnRSZXBvcnRGb2xkZXJJZCA/PyBudWxsKSA9PT0gcGFyZW50SWQpXG4gICAgICAgIC5tYXAoKGZvbGRlcjogUmVwb3J0Rm9sZGVyKSA9PiAoe1xuICAgICAgICAgIGtleTogYGY6JHtmb2xkZXIuaWR9YCxcbiAgICAgICAgICBpZDogZm9sZGVyLmlkLFxuICAgICAgICAgIG5hbWU6IGZvbGRlci5uYW1lLFxuICAgICAgICAgIHR5cGU6IFJlcG9ydE5vZGVUeXBlLkZvbGRlcixcbiAgICAgICAgICBjaGlsZHJlbjogYnVpbGQoZm9sZGVyLmlkKSxcbiAgICAgICAgfSkpO1xuXG4gICAgICBjb25zdCByZXBvcnROb2RlczogUmVwb3J0Tm9kZVtdID0gcmVwb3J0c1xuICAgICAgICAuZmlsdGVyKChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKSA9PiAocmVwb3J0LnJlcG9ydEZvbGRlcklkID8/IG51bGwpID09PSBwYXJlbnRJZClcbiAgICAgICAgLm1hcCgocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSkgPT4gKHtcbiAgICAgICAgICBrZXk6IGByOiR7cmVwb3J0LmlkfWAsXG4gICAgICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgICAgICBuYW1lOiByZXBvcnQubmFtZSxcbiAgICAgICAgICB0eXBlOiBSZXBvcnROb2RlVHlwZS5SZXBvcnQsXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gWy4uLmZvbGRlck5vZGVzLCAuLi5yZXBvcnROb2Rlc107XG4gICAgfTtcblxuICAgIHJldHVybiBidWlsZChudWxsKTtcbiAgfVxuXG4gIC8vIEEgZHJvcCBtb3ZlZCBhIG5vZGUgdW5kZXIgYSBuZXcgcGFyZW50LCBvciBvdXQgdG8gdGhlIHJvb3QuIFRoZSB0cmVlIGhhc1xuICAvLyBhbHJlYWR5IG1vdmVkIGl0IG9uIHNjcmVlbiwgc28gYm90aCBvdXRjb21lcyByZWxvYWQ6IGEgc3VjY2VzcyB0byBwaWNrIHVwXG4gIC8vIHRoZSBzZXJ2ZXIncyBvcmRlcmluZywgYSBmYWlsdXJlIHRvIHB1dCB0aGUgcm93IGJhY2sgd2hlcmUgaXQgcmVhbGx5IGlzLlxuICBwcml2YXRlIF9tb3ZlKGV2ZW50OiBJVHJlZUNoYW5nZVJlb3JkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlOiBSZXBvcnROb2RlID0gZXZlbnQubm9kZT8uZGF0YTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyID0gZXZlbnQudG9QYXJlbnQ/LmRhdGE/LmlkID8/IG51bGw7XG5cbiAgICBpZiAoZXZlbnQudG9QYXJlbnQgJiYgIWV2ZW50LnRvUGFyZW50LmlzRXhwYW5kZWQoKSkge1xuICAgICAgZXZlbnQudG9QYXJlbnQuZXhwYW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZSQ6IE9ic2VydmFibGU8dW5rbm93bj4gPSBub2RlLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlclxuICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZUZvbGRlcihub2RlLmlkLCB7IHBhcmVudFJlcG9ydEZvbGRlcklkIH0pXG4gICAgICA6IHRoaXMuX3JlcG9ydERhdGEubW92ZVJlcG9ydChub2RlLmlkLCBwYXJlbnRSZXBvcnRGb2xkZXJJZCk7XG5cbiAgICBzYXZlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBjaGFuZ2VzJyk7XG4gICAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5fbG9hZCgpLFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGb2xkZXIocGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICB0aXRsZTogJ05ldyBGb2xkZXInLFxuICAgICAgbGFiZWw6ICdOYW1lJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnQ3JlYXRlJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+IHRoaXMuX3JlcG9ydERhdGEuY3JlYXRlRm9sZGVyKG5hbWUsIHBhcmVudFJlcG9ydEZvbGRlcklkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NyZWF0ZWQgZm9sZGVyJyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuYW1lKG5vZGU6IEZsYXRJdGVtTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFJlcG9ydE5vZGUgPSBub2RlPy5kYXRhO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRhdGEudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuXG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIHRpdGxlOiBmb2xkZXIgPyAnUmVuYW1lIEZvbGRlcicgOiAnUmVuYW1lIFJlcG9ydCcsXG4gICAgICBsYWJlbDogJ05hbWUnLFxuICAgICAgZGVmYXVsdDogZGF0YS5uYW1lLFxuICAgICAgY29tbWl0TGFiZWw6ICdTYXZlJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+IChmb2xkZXJcbiAgICAgICAgICA/IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlRm9sZGVyKGRhdGEuaWQsIHsgbmFtZSB9KVxuICAgICAgICAgIDogdGhpcy5fcmVwb3J0RGF0YS5yZW5hbWUoZGF0YS5pZCwgbmFtZSkpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgY2hhbmdlcycpO1xuICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIERlbGV0aW5nIGEgZm9sZGVyIGlzIHJlZnVzZWQgc2VydmVyLXNpZGUgd2hpbGUgaXQgc3RpbGwgaG9sZHMgYSBzdWItZm9sZGVyXG4gIC8vIG9yIGFuIGFjdGl2ZSByZXBvcnQsIGFuZCB0aGUgbWVzc2FnZSBzYXlzIHdoaWNoIOKAlCBzbyB0aGUgY29uZmlybSBoZXJlIHdhcm5zXG4gIC8vIHRoYXQgYSBmb2xkZXIgZGVsZXRlIGlzIHBlcm1hbmVudCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gcmVzdGF0ZSB0aGUgcnVsZS5cbiAgcHJpdmF0ZSBfZGVsZXRlKG5vZGU6IEZsYXRJdGVtTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFJlcG9ydE5vZGUgPSBub2RlPy5kYXRhO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRhdGEudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuXG4gICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdDb25maXJtJyxcbiAgICAgIHRlbXBsYXRlOiBmb2xkZXJcbiAgICAgICAgPyBgQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZSB0aGUgZm9sZGVyIFwiJHtkYXRhLm5hbWV9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gXG4gICAgICAgIDogJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBkZWxldGUgdGhpcyByZXBvcnQ/JyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiAoZm9sZGVyXG4gICAgICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLmRlbGV0ZUZvbGRlcihkYXRhLmlkKVxuICAgICAgICAgIDogdGhpcy5fcmVwb3J0RGF0YS5kZWxldGUoZGF0YS5pZCkpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2Vzcyhmb2xkZXIgPyAnRGVsZXRlZCBmb2xkZXInIDogJ0RlbGV0ZWQgcmVwb3J0Jyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZShub2RlOiBGbGF0SXRlbU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBSZXBvcnROb2RlID0gbm9kZT8uZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXBvcnREYXRhLnVuZGVsZXRlKGRhdGEuaWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmVzdG9yZWQgcmVwb3J0Jyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVHVybiBhICc6aWQnIHBhdHRlcm4gaW50byByb3V0ZXIgY29tbWFuZHMuIFJlbGF0aXZlIHVubGVzcyBpdCBzdGFydHNcbiAgLy8gd2l0aCAnLycsIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IHNlZ21lbnQgY2FycmllcyB0aGUgbGVhZGluZyBzbGFzaC5cbiAgcHJpdmF0ZSBfcGF0dGVybkNvbW1hbmRzKHBhdHRlcm46IHN0cmluZywgaWQ6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICBjb25zdCBzZWdtZW50czogdW5rbm93bltdID0gcGF0dGVybi5zcGxpdCgnLycpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG4gICAgICAubWFwKChzZWdtZW50KSA9PiAoc2VnbWVudCA9PT0gJzppZCcgPyBpZCA6IHNlZ21lbnQpKTtcblxuICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW2lkXTtcbiAgICB9XG5cbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHNlZ21lbnRzWzBdID0gYC8ke3NlZ21lbnRzWzBdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG59XG4iLCI8ZnMtZmlsdGVyIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCI+PC9mcy1maWx0ZXI+XG5cbjxuZy1jb250YWluZXIgKmZzU2tlbGV0b249XCJub2RlcygpXCI+XG4gIDxmcy10cmVlIFtjb25maWddPVwidHJlZUNvbmZpZ1wiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmc1RyZWVOb2RlXG4gICAgICAgIGxldC1kYXRhPVwiZGF0YVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtc20uYWxpZ24tY2VudGVyIG5vZGUtcm93XCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm5vZGUtaWNvblwiPlxuICAgICAgICAgIHt7IGRhdGEudHlwZSA9PT0gbm9kZVR5cGUuRm9sZGVyID8gJ2ZvbGRlcicgOiAnaW5zZXJ0X2NoYXJ0X291dGxpbmVkJyB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIEBpZiAoZGF0YS50eXBlID09PSBub2RlVHlwZS5Gb2xkZXIpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGUtbmFtZVwiPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSBpZiAoaXNEZWxldGVkKGRhdGEucmVwb3J0KSkge1xuICAgICAgICAgIDwhLS0gQSBkZWxldGVkIHJlcG9ydCBjYW4ndCBiZSBvcGVuZWQgKHRoZSBiYWNrZW5kIG9ubHkgYXNzZW1ibGVzXG4gICAgICAgICAgICAgICBhY3RpdmUgb25lcyksIHNvIGluIFNob3cgRGVsZXRlZCBtb2RlIHRoZSBuYW1lIGlzIHBsYWluIHRleHQg4oCUXG4gICAgICAgICAgICAgICByZXN0b3JlIGl0IGZyb20gdGhlIHJvdyBtZW51IGZpcnN0LiAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGUtbmFtZVwiPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJub2RlLW5hbWVcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJvcGVuTGluayhkYXRhLnJlcG9ydClcIj5cbiAgICAgICAgICAgIHt7IGRhdGEubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy10cmVlPlxuXG4gIEBpZiAoIW5vZGVzKCkubGVuZ3RoKSB7XG4gICAgPHAgY2xhc3M9XCJzbWFsbCB0cmVlLWVtcHR5XCI+XG4gICAgICBObyByZXBvcnRzIHlldC4gQ3JlYXRlIG9uZSwgb3IgYWRkIGEgZm9sZGVyIHRvIGdyb3VwIHRoZW0uXG4gICAgPC9wPlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0cy9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnRzL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQWdCLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxlQUFlLEVBQ2YsWUFBWSxFQUdaLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsRyxPQUFPLEVBSUwsY0FBYyxFQUNkLFdBQVcsRUFDWCxZQUFZLEdBRWIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7O0FBRzNDLCtFQUErRTtBQUMvRSxnRkFBZ0Y7QUFDaEYsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLG1CQUFtQjtBQUNuQixFQUFFO0FBQ0YsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsaUZBQWlGO0FBQ2pGLEVBQUU7QUFDRiw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDZFQUE2RTtBQUM3RSxpRkFBaUY7QUFDakYsaUZBQWlGO0FBQ2pGLGlGQUFpRjtBQUNqRixvREFBb0Q7QUFlcEQsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQix1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ2pFLE1BQU0sQ0FBVSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXpDLG1FQUFtRTtJQUNuRCxRQUFRLEdBQUcsS0FBSyxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBRXBELDRFQUE0RTtJQUM1RSxnRUFBZ0U7SUFDaEQsV0FBVyxHQUFHLEtBQUssQ0FBUyxLQUFLLENBQUMsQ0FBQztJQUVuRCxzRUFBc0U7SUFDdEQsYUFBYSxHQUFHLEtBQUssQ0FBUyxLQUFLLENBQUMsQ0FBQztJQUVyRCx1RUFBdUU7SUFDdkQsS0FBSyxHQUFHLE1BQU0sQ0FBZSxJQUFJLENBQUMsQ0FBQztJQUU1QyxVQUFVLENBQTRCO0lBQ3RDLFlBQVksQ0FBZTtJQUVsQyw4RUFBOEU7SUFDOUQsUUFBUSxHQUFHLGNBQWMsQ0FBQztJQUV6QixLQUFLLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTVDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsNEVBQTRFO0lBQ3BFLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBRTdDO1FBQ0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsNEVBQTRFO1FBQzVFLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxpRUFBaUU7SUFDMUQsUUFBUSxDQUFDLE1BQXNCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDdEUsU0FBUyxDQUFDLE1BQXNCO1FBQ3JDLE9BQU8sTUFBTSxFQUFFLEtBQUssS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsa0ZBQWtGO0lBQzNFLFlBQVksQ0FBQyxpQkFBeUIsSUFBSTtRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQixLQUFLLEVBQUUsZUFBZTtZQUN0QixLQUFLLEVBQUUsT0FBTztZQUNkLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQzthQUNDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUMxRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLENBQUMsTUFBc0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUMzRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLDRFQUE0RTtJQUM1RSxxQ0FBcUM7SUFDOUIsWUFBWTtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUN6QyxLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO29CQUN0QixLQUFLLEVBQUUsUUFBUTtpQkFDaEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO29CQUNyQixLQUFLLEVBQUUsUUFBUTtvQkFDZixRQUFRLEVBQUUsSUFBSTtvQkFDZCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWTtvQkFDMUIsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtpQkFDL0Q7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sRUFBRSxLQUFLO29CQUNkLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFO2lCQUN2QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLE9BQU8sRUFBRSxLQUFLO29CQUNkLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFO2lCQUN6QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7aUJBQ2pDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxZQUFZO29CQUNuQixPQUFPLEVBQUUsS0FBSztvQkFDZCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7aUJBQ3RDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxRQUFRO29CQUNmLE9BQU8sRUFBRSxJQUFJO29CQUNiLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2lCQUNqQzthQUNGO1lBQ0QsdUVBQXVFO1lBQ3ZFLHdFQUF3RTtZQUN4RSx3RUFBd0U7WUFDeEUsdUVBQXVFO1lBQ3ZFLDREQUE0RDtZQUM1RCxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFFM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRTdCLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLElBQUksRUFBRSxFQUFFO1lBQ1IsWUFBWSxFQUFFLFVBQVU7WUFDeEIsV0FBVyxFQUFFLG9CQUFvQixDQUFDLFlBQVk7WUFDOUMsU0FBUyxFQUFFLElBQUk7WUFDZixzRUFBc0U7WUFDdEUsMkVBQTJFO1lBQzNFLGtDQUFrQztZQUNsQyxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDM0Isb0VBQW9FO1lBQ3BFLHdFQUF3RTtZQUN4RSwwRUFBMEU7WUFDMUUseUVBQXlFO1lBQ3pFLGlDQUFpQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFrQixFQUFFLFVBQXdCLEVBQUUsUUFBc0IsRUFBRSxFQUFFO2dCQUNoRixPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDcEUsQ0FBQztZQUNELGFBQWEsRUFBRSxDQUFDLEtBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9ELFNBQVMsRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSTtZQUNsRCx3RUFBd0U7WUFDeEUseUVBQXlFO1lBQ3pFLDBCQUEwQjtZQUMxQixVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztxQkFDakMsV0FBVyxFQUFFO3FCQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUNELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7b0JBQ3pCLElBQUksRUFBRSxXQUFXO29CQUNqQixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsS0FBSyxFQUFFLFFBQVE7NEJBQ2YsSUFBSSxFQUFFLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQzs0QkFDeEQsS0FBSyxFQUFFLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7eUJBQ2xEO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxZQUFZOzRCQUNuQixJQUFJLEVBQUUsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQzt5QkFDaEU7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLFlBQVk7NEJBQ25CLElBQUksRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDOzRCQUN0RCxLQUFLLEVBQUUsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO3lCQUNqRTt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsUUFBUTs0QkFDZixJQUFJLEVBQUUsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUN4RCxLQUFLLEVBQUUsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt5QkFDbEQ7d0JBQ0Qsa0VBQWtFO3dCQUNsRSxpQ0FBaUM7d0JBQ2pDOzRCQUNFLEtBQUssRUFBRSxTQUFTOzRCQUNoQixJQUFJLEVBQUUsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7eUJBQ25EO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFrQjtRQUN0QyxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFrQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLG1FQUFtRTtJQUMzRCxPQUFPLENBQUMsT0FBZTtRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLEtBQUs7UUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQy9CLElBQUksQ0FDSCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBZ0IsRUFBRSxFQUFFO1lBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdEIsb0VBQW9FO1lBQ3BFLHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQzVELFdBQVcsQ0FBQyxJQUFnQjtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FBRyxDQUFDLFFBQXVCLEVBQWdCLEVBQUU7WUFDdEQsTUFBTSxXQUFXLEdBQWlCLE9BQU87aUJBQ3RDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQztpQkFDcEYsR0FBRyxDQUFDLENBQUMsTUFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNiLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUMzQixRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7YUFDM0IsQ0FBQyxDQUFDLENBQUM7WUFFTixNQUFNLFdBQVcsR0FBaUIsT0FBTztpQkFDdEMsTUFBTSxDQUFDLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQztpQkFDaEYsR0FBRyxDQUFDLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEMsR0FBRyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNiLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUMzQixRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNO2FBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFTixPQUFPLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDbkUsS0FBSyxDQUFDLEtBQXlCO1FBQ3JDLE1BQU0sSUFBSSxHQUFlLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxvQkFBb0IsR0FBVyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBRXRFLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBd0IsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTTtZQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUUvRCxLQUFLO2FBQ0YsSUFBSSxDQUNILGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxvQkFBNEI7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDakIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsUUFBUTtZQUNyQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7YUFDQyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxFQUN0RixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sT0FBTyxDQUFDLElBQWtCO1FBQ2hDLE1BQU0sSUFBSSxHQUFlLElBQUksRUFBRSxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2pELEtBQUssRUFBRSxNQUFNO1lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQzthQUNDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDNUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUNwRSxPQUFPLENBQUMsSUFBa0I7UUFDaEMsTUFBTSxJQUFJLEdBQWUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUVuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNuQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQUUsTUFBTTtnQkFDZCxDQUFDLENBQUMscURBQXFELElBQUksQ0FBQyxJQUFJLDJCQUEyQjtnQkFDM0YsQ0FBQyxDQUFDLG9EQUFvRDtTQUN6RCxDQUFDO2FBQ0MsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ3RDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBa0I7UUFDakMsTUFBTSxJQUFJLEdBQWUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDL0IsSUFBSSxDQUNILGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsdUVBQXVFO0lBQy9ELGdCQUFnQixDQUFDLE9BQWUsRUFBRSxFQUFVO1FBQ2xELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQWMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDM0MsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUN2QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzt3R0EvYlUsb0JBQW9COzRGQUFwQixvQkFBb0IsdWhCQXlCSSxlQUFlLGdFQ3pHcEQseXNDQW9DQSxvWkRxQ0ksY0FBYyxrS0FDZCxnQkFBZ0IsaUtBQ2hCLFlBQVksME5BQ1osYUFBYSxvTEFDYixVQUFVOzs0RkFHRCxvQkFBb0I7a0JBZGhDLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFVBQVU7cUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBPbkluaXQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbmltcG9ydCB7IEZpbHRlckNvbmZpZywgRnNGaWx0ZXJNb2R1bGUsIEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcbmltcG9ydCB7XG4gIEZsYXRJdGVtTm9kZSxcbiAgRnNUcmVlQ29tcG9uZW50LFxuICBGc1RyZWVNb2R1bGUsXG4gIElUcmVlQ2hhbmdlUmVvcmRlcixcbiAgSVRyZWVDb25maWcsXG4gIFRyZWVBY3Rpb25UeXBlLFxuICBUcmVlRHJhZ01vZGUsXG59IGZyb20gJ0BmaXJlc3RpdGNoL3RyZWUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFJlcG9ydEZvbGRlcixcbiAgUmVwb3J0TGlzdEl0ZW0sXG4gIFJlcG9ydE5vZGUsXG4gIFJlcG9ydE5vZGVUeXBlLFxuICBSZXBvcnRTdGF0ZSxcbiAgUmVwb3J0U3RhdGVzLFxuICBSZXBvcnRUcmVlLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbi8vIFRoZSByZXBvcnRzIGxpc3Rpbmcg4oCUIGFuIGZzLXRyZWUgb2YgZm9sZGVycyBhbmQgdGhlIHJlcG9ydHMgZmlsZWQgaW50byB0aGVtLlxuLy8gUm93cyBsaW5rIG91dCB0aHJvdWdoIGEgVVJMIHBhdHRlcm4gKGEgJzppZCcgdG9rZW4g4oaSIHRoZSByZXBvcnQgaWQ7IGEgbGVhZGluZ1xuLy8gJy8nIG1ha2VzIGl0IGFic29sdXRlLCBvdGhlcndpc2UgaXQncyByZWxhdGl2ZSB0byB0aGlzIGNvbXBvbmVudCdzIHJvdXRlKS5cbi8vIENyZWF0ZSBwcm9tcHRzIGZvciBhIHRpdGxlLCBjcmVhdGVzIHRoZSByZXBvcnQsIHRoZW4gcm91dGVzIHRvIGl0LiBUaGUgZ2VhclxuLy8gb3BlbnMgdGhlIGdsb2JhbCBSZXBvcnQgU2V0dGluZ3MgZGlhbG9nIChBSSBrbm93bGVkZ2UgZG9jdW1lbnQgK1xuLy8gc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQpLCB3aGljaCBsaXZlcyBpbiB0aGlzIHBhY2thZ2UuIE5vIHJvdXRpbmcgaXNcbi8vIGhhcmQtY29kZWQgaGVyZS5cbi8vXG4vLyBGb2xkZXJzIG5lc3Q7IHJlcG9ydHMgYXJlIGFsd2F5cyBsZWF2ZXMg4oCUIGNhbkRyb3AgZW5mb3JjZXMgaXQgaGVyZSwgYW5kIHRoZVxuLy8gYmFja2VuZCBlbmZvcmNlcyBpdCBzdHJ1Y3R1cmFsbHkgYnkga2VlcGluZyB0aGUgdHJlZSBpbiBpdHMgb3duIHRhYmxlLiBBXG4vLyByZXBvcnQgaW4gbm8gZm9sZGVyIGlzIGEgcm9vdCBub2RlLCB3aGljaCBpcyB3aGVyZSBldmVyeSByZXBvcnQgc2F0IGJlZm9yZVxuLy8gZm9sZGVycyBleGlzdGVkLCBzbyBub3RoaW5nIGhhZCB0byBiZSBtaWdyYXRlZCBvciBidWNrZXRlZCBhcyBcInVuY2F0ZWdvcml6ZWRcIi5cbi8vXG4vLyBSZXBvcnRzIGFyZSBzb2Z0LWRlbGV0YWJsZTogdGhlIHJvdyBrZWJhYiBkZWxldGVzLCBcIlNob3cgRGVsZXRlZFwiIGZsaXBzIHRoZVxuLy8gbGlzdGluZyBpbnRvIGRlbGV0ZWQgbW9kZSAodGhlIGJhY2tlbmQgaGlkZXMgZGVsZXRlZCByZXBvcnRzIG90aGVyd2lzZSksIGFuZFxuLy8gaW4gdGhhdCBtb2RlIHRoZSBrZWJhYiBvZmZlcnMgUmVzdG9yZSBpbnN0ZWFkLiBGb2xkZXJzIGRvIE5PVCB0YWtlIHBhcnQgaW5cbi8vIHRoYXQg4oCUIGEgZm9sZGVyIGlzIG9ubHkgZGVsZXRhYmxlIG9uY2UgaXQgaXMgZW1wdHksIHNvIGl0IGhhcmQgZGVsZXRlcyBhbmQgaGFzXG4vLyBub3RoaW5nIHRvIHJlc3RvcmUuIFRoZSB1cHNob3QgaXMgdGhhdCBkZWxldGVkIG1vZGUga2VlcHMgdGhlIGZvbGRlciBzdHJ1Y3R1cmVcbi8vIG9uIHNjcmVlbiB3aXRoIHRoZSBkZWxldGVkIHJlcG9ydHMgc2l0dGluZyB3aGVyZSB0aGV5IGJlbG9uZywgc28gcmVzdG9yaW5nIG9uZVxuLy8gcHV0cyBpdCBiYWNrIHJhdGhlciB0aGFuIGRyb3BwaW5nIGl0IGF0IHRoZSByb290LlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWktcmVwb3J0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mcy1haS1yZXBvcnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnMtYWktcmVwb3J0cy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZzRmlsdGVyTW9kdWxlLFxuICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgRnNUcmVlTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgUm91dGVyTGluayxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBaVJlcG9ydHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8vIEhvdyBkZWVwIHRoZSB0cmVlIG9wZW5zIG9uIGxvYWQuIEZvbGRlcnMgYXJlIGF1ZGllbmNlIGJ1Y2tldHMsIG5vdCBhXG4gIC8vIGZpbGVzeXN0ZW0sIHNvIHRoZXJlIGlzIG5vdGhpbmcgd29ydGggaGlkaW5nIGJlaGluZCBhIGNsb3NlZCBjaGV2cm9uLlxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYUEFORF9MRVZFTCA9IDEwO1xuXG4gIC8vIEFQSSBiYXNlIGZvciB0aGUgcmVwb3J0cyBlbmRwb2ludHM7IG92ZXJyaWRlIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIHJlYWRvbmx5IGJhc2VQYXRoID0gaW5wdXQ8c3RyaW5nPigncmVwb3J0cycpO1xuXG4gIC8vIFdoZXJlIGEgcm93IGxpbmtzIHRvOyAnOmlkJyBpcyByZXBsYWNlZCB3aXRoIHRoZSByZXBvcnQgaWQuIERlZmF1bHQgdGFrZXNcbiAgLy8geW91IHRvIDxjdXJyZW50IHJvdXRlPi86aWQuIEFic29sdXRlIHdoZW4gaXQgc3RhcnRzIHdpdGggJy8nLlxuICBwdWJsaWMgcmVhZG9ubHkgb3BlblBhdHRlcm4gPSBpbnB1dDxzdHJpbmc+KCc6aWQnKTtcblxuICAvLyBXaGVyZSBhIGZyZXNobHktY3JlYXRlZCByZXBvcnQgcm91dGVzIHRvOyBzYW1lICc6aWQnIHBhdHRlcm4gcnVsZXMuXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVQYXR0ZXJuID0gaW5wdXQ8c3RyaW5nPignOmlkJyk7XG5cbiAgLy8gTnVsbCB1bnRpbCB0aGUgZmlyc3QgbG9hZCByZXNvbHZlcyDigJQgdGhhdCBpcyB3aGF0IGdhdGVzICpmc1NrZWxldG9uLlxuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXMgPSBzaWduYWw8UmVwb3J0Tm9kZVtdPihudWxsKTtcblxuICBwdWJsaWMgdHJlZUNvbmZpZzogSVRyZWVDb25maWc8UmVwb3J0Tm9kZVtdPjtcbiAgcHVibGljIGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnO1xuXG4gIC8vIFRlbXBsYXRlLXNpZGUgaGFuZGxlIG9uIHRoZSBlbnVtLCBzbyBhIHJvdyBjYW4gdGVsbCBhIGZvbGRlciBmcm9tIGEgcmVwb3J0LlxuICBwdWJsaWMgcmVhZG9ubHkgbm9kZVR5cGUgPSBSZXBvcnROb2RlVHlwZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90cmVlID0gdmlld0NoaWxkKEZzVHJlZUNvbXBvbmVudCk7XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgX3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvLyBUaGUgZmlsdGVyIGJhcidzIGN1cnJlbnQgcXVlcnkg4oCUIGNhcnJpZXMgYHN0YXRlYCB3aGVuIFNob3cgRGVsZXRlZCBpcyBvbi5cbiAgcHJpdmF0ZSBfcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuX3JlcG9ydERhdGEuYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0IGJlZm9yZSB0aGUgZmlyc3QgZmV0Y2ggcmF0aGVyIHRoYW4gd2FpdGluZyBvbiB0aGUgZWZmZWN0IGFib3ZlLCB3aGljaFxuICAgIC8vIGRvZXMgbm90IHJ1biB1bnRpbCBhZnRlciB0aGUgaW5pdGlhbCBjaGFuZ2UgZGV0ZWN0aW9uIHBhc3MuXG4gICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcblxuICAgIHRoaXMuX2luaXRGaWx0ZXJDb25maWcoKTtcbiAgICB0aGlzLl9pbml0VHJlZUNvbmZpZygpO1xuICAgIHRoaXMuX2xvYWQoKTtcbiAgfVxuXG4gIC8vIHJvdXRlckxpbmsgY29tbWFuZHMgZm9yIGEgcmVwb3J0IHJvdyAoYnVpbHQgZnJvbSBvcGVuUGF0dGVybikuXG4gIHB1YmxpYyBvcGVuTGluayhyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGF0dGVybkNvbW1hbmRzKHRoaXMub3BlblBhdHRlcm4oKSwgcmVwb3J0LmlkKTtcbiAgfVxuXG4gIC8vIEEgZGVsZXRlZCByZXBvcnQgY2FuJ3QgYmUgb3BlbmVkIOKAlCB0aGUgYmFja2VuZCBvbmx5IGFzc2VtYmxlcyBhY3RpdmUgb25lcyDigJRcbiAgLy8gc28gaW4gU2hvdyBEZWxldGVkIG1vZGUgaXRzIG5hbWUgcmVuZGVycyBhcyBwbGFpbiB0ZXh0IHJhdGhlciB0aGFuIGEgbGluay5cbiAgcHVibGljIGlzRGVsZXRlZChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlcG9ydD8uc3RhdGUgPT09IFJlcG9ydFN0YXRlLkRlbGV0ZWQ7XG4gIH1cblxuICAvLyBQcm9tcHQgZm9yIGEgdGl0bGUsIGNyZWF0ZSB0aGUgcmVwb3J0IOKAlCBmaWxlZCB1bmRlciByZXBvcnRGb2xkZXJJZCB3aGVuIGFcbiAgLy8gZm9sZGVyJ3Mga2ViYWIgYXNrZWQsIGF0IHRoZSByb290IG90aGVyd2lzZSDigJQgdGhlbiByb3V0ZSB0byBpdCAoY3JlYXRlUGF0dGVybikuXG4gIHB1YmxpYyBjcmVhdGVSZXBvcnQocmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdDcmVhdGUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnVGl0bGUnLFxuICAgICAgY29tbWl0TGFiZWw6ICdDcmVhdGUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5fcmVwb3J0RGF0YS5jcmVhdGUobmFtZSwgcmVwb3J0Rm9sZGVySWQpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5jcmVhdGVQYXR0ZXJuKCk7XG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShcbiAgICAgICAgICB0aGlzLl9wYXR0ZXJuQ29tbWFuZHMocGF0dGVybiwgcmVwb3J0LmlkKSxcbiAgICAgICAgICBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy8nKSA/IHt9IDogeyByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgZ2xvYmFsIFJlcG9ydCBTZXR0aW5ncyBkaWFsb2c6IHRoZSBBSSBrbm93bGVkZ2UgZG9jdW1lbnQgYW5kIHRoZVxuICAvLyBzZW1hbnRpYy1kYXRhYmFzZSBidWlsZC4gQSBydW5uaW5nIGJ1aWxkIHN0cmVhbXMgaW50byB0aGUgRnNQcm9jZXNzIGRvY2ssXG4gIC8vIHdoaWNoIHN1cnZpdmVzIHRoZSBkaWFsb2cgY2xvc2luZy5cbiAgcHVibGljIG9wZW5TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihHbG9iYWxTZXR0aW5nc0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc5MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzk1dncnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEZpbHRlckNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckNvbmZpZyA9IHtcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICBsYWJlbDogJ1N0YXR1cycsXG4gICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgdmFsdWVzOiAoKSA9PiBSZXBvcnRTdGF0ZXMsXG4gICAgICAgICAgaXNvbGF0ZTogeyBsYWJlbDogJ1Nob3cgRGVsZXRlZCcsIHZhbHVlOiBSZXBvcnRTdGF0ZS5EZWxldGVkIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWNvbjogJ3VuZm9sZF9tb3JlJyxcbiAgICAgICAgICB0b29sdGlwOiAnRXhwYW5kIGFsbCcsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX3RyZWUoKT8uZXhwYW5kQWxsKCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpY29uOiAndW5mb2xkX2xlc3MnLFxuICAgICAgICAgIHRvb2x0aXA6ICdDb2xsYXBzZSBhbGwnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl90cmVlKCk/LmNvbGxhcHNlQWxsKCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpY29uOiAnc2V0dGluZ3MnLFxuICAgICAgICAgIHRvb2x0aXA6ICdSZXBvcnQgc2V0dGluZ3MnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLm9wZW5TZXR0aW5ncygpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdOZXcgRm9sZGVyJyxcbiAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fY3JlYXRlRm9sZGVyKG51bGwpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDcmVhdGUnLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY3JlYXRlUmVwb3J0KCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgLy8gVGhlIHR3byBpdGVtcyBhcmUgYW5zd2VyZWQgaW4gZGlmZmVyZW50IHBsYWNlcyBhbmQgYm90aCBoYXZlIHRvIHJ1bi5cbiAgICAgIC8vIFRoZSBrZXl3b3JkIGRyaXZlcyB0aGUgdHJlZSdzIG93biBzZWFyY2gsIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludCBvZlxuICAgICAgLy8gc2VhcmNoaW5nIGEgdHJlZSDigJQgaXQgcmV2ZWFscyBhIG1hdGNoIG5lc3RlZCBpbnNpZGUgY29sbGFwc2VkIGZvbGRlcnNcbiAgICAgIC8vIHJhdGhlciB0aGFuIG9ubHkgZmlsdGVyaW5nIHdoYXQgaXMgYWxyZWFkeSBvbiBzY3JlZW4uIGBzdGF0ZWAgaXMgdGhlXG4gICAgICAvLyBTaG93IERlbGV0ZWQgdG9nZ2xlLCBhbmQgb25seSB0aGUgc2VydmVyIGNhbiBhbnN3ZXIgdGhhdC5cbiAgICAgIGNoYW5nZTogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlQ2hhbmdlZCA9IFN0cmluZyhxdWVyeT8uc3RhdGUgPz8gJycpICE9PSBTdHJpbmcodGhpcy5fcXVlcnkuc3RhdGUgPz8gJycpO1xuICAgICAgICB0aGlzLl9xdWVyeSA9IHsgLi4ucXVlcnkgfTtcblxuICAgICAgICB0aGlzLl9zZWFyY2gocXVlcnk/LmtleXdvcmQpO1xuXG4gICAgICAgIGlmIChzdGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRUcmVlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMudHJlZUNvbmZpZyA9IHtcbiAgICAgIGRhdGE6IFtdLFxuICAgICAgY2hpbGRyZW5OYW1lOiAnY2hpbGRyZW4nLFxuICAgICAgZXhwYW5kTGV2ZWw6IEZzQWlSZXBvcnRzQ29tcG9uZW50LkVYUEFORF9MRVZFTCxcbiAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgIC8vIFRoZSB3aG9sZSByb3cgaXMgdGhlIGdyaXAgYW5kIHRoZSBoYW5kbGUgc3RheXMgaGlkZGVuOyBhIHByZXNzIG9ubHlcbiAgICAgIC8vIGJlY29tZXMgYSBkcmFnIG9uY2UgdGhlIHBvaW50ZXIgbW92ZXMsIHNvIHRoZSBrZWJhYiwgdGhlIGNoZXZyb24gYW5kIHRoZVxuICAgICAgLy8gcmVwb3J0IGxpbmsgYWxsIHN0YXkgY2xpY2thYmxlLlxuICAgICAgZHJhZ01vZGU6IFRyZWVEcmFnTW9kZS5Ob2RlLFxuICAgICAgLy8gY2FuRHJvcCBpcyBhc2tlZCBhYm91dCB0aGUgbm9kZSBiZWluZyBEUkFHR0VELCBzbyBvbmx5IGB0b1BhcmVudGBcbiAgICAgIC8vIGRlc2NyaWJlcyB0aGUgZGVzdGluYXRpb24g4oCUIHJlYWRpbmcgbm9kZS5sZXZlbC9ub2RlLnBhcmVudCBoZXJlIHdvdWxkXG4gICAgICAvLyBkZXNjcmliZSB3aGVyZSBpdCBjYW1lIGZyb20uIEEgcmVwb3J0IGNhbiBuZXZlciBiZSBhIHBhcmVudCBiZWNhdXNlIGl0c1xuICAgICAgLy8gdHlwZSBzYXlzIHNvLCBhbmQgdGhhdCBzaW5nbGUgdGVzdCBpcyB0aGUgd2hvbGUgXCJmb2xkZXJzIG5lc3QsIHJlcG9ydHNcbiAgICAgIC8vIGFyZSBsZWF2ZXNcIiBydWxlIG9uIHRoaXMgc2lkZS5cbiAgICAgIGNhbkRyb3A6IChub2RlOiBGbGF0SXRlbU5vZGUsIGZyb21QYXJlbnQ6IEZsYXRJdGVtTm9kZSwgdG9QYXJlbnQ6IEZsYXRJdGVtTm9kZSkgPT4ge1xuICAgICAgICByZXR1cm4gIXRvUGFyZW50IHx8IHRvUGFyZW50LmRhdGE/LnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlcjtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2VSZW9yZGVyOiAoZXZlbnQ6IElUcmVlQ2hhbmdlUmVvcmRlcikgPT4gdGhpcy5fbW92ZShldmVudCksXG4gICAgICBub2RlQ2xhc3M6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IG5vZGUuZGF0YT8udHlwZSxcbiAgICAgIC8vIE1hdGNoIG9uIHRoZSBuYW1lIG9ubHkuIFRoZSBsaWJyYXJ5J3MgZGVmYXVsdCBtYXRjaGVyIHN0cmluZ2lmaWVzIHRoZVxuICAgICAgLy8gd2hvbGUgbm9kZSwgc28gaXQgd291bGQgaGl0IGlkcywgdGhlIGxpdGVyYWwgdHlwZSB3b3JkLCBhbmQgZXZlcnl0aGluZ1xuICAgICAgLy8gZWxzZSByaWRpbmcgb24gdGhlIHJvdy5cbiAgICAgIGZpbHRlckl0ZW06IChub2RlLCBxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG5vZGUuZGF0YT8ubmFtZSA/PyAnJylcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5pbmNsdWRlcyhTdHJpbmcocXVlcnkgPz8gJycpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFRyZWVBY3Rpb25UeXBlLk1lbnUsXG4gICAgICAgICAgaWNvbjogJ21vcmVfdmVydCcsXG4gICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdSZW5hbWUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNEZWxldGVkTm9kZShub2RlKSxcbiAgICAgICAgICAgICAgY2xpY2s6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuX3JlbmFtZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnTmV3IHJlcG9ydCcsXG4gICAgICAgICAgICAgIHNob3c6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuX2lzRm9sZGVyTm9kZShub2RlKSxcbiAgICAgICAgICAgICAgY2xpY2s6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuY3JlYXRlUmVwb3J0KG5vZGUuZGF0YT8uaWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdOZXcgZm9sZGVyJyxcbiAgICAgICAgICAgICAgc2hvdzogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5faXNGb2xkZXJOb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fY3JlYXRlRm9sZGVyKG5vZGUuZGF0YT8uaWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdEZWxldGUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiAhdGhpcy5faXNEZWxldGVkTm9kZShub2RlKSxcbiAgICAgICAgICAgICAgY2xpY2s6IChub2RlOiBGbGF0SXRlbU5vZGUpID0+IHRoaXMuX2RlbGV0ZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBGb2xkZXJzIG5ldmVyIHJlYWNoIHRoaXM6IHRoZXkgaGFyZCBkZWxldGUsIHNvIGEgZGVsZXRlZCBmb2xkZXJcbiAgICAgICAgICAgIC8vIGRvZXMgbm90IGV4aXN0IHRvIGJlIHJlc3RvcmVkLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ1Jlc3RvcmUnLFxuICAgICAgICAgICAgICBzaG93OiAobm9kZTogRmxhdEl0ZW1Ob2RlKSA9PiB0aGlzLl9pc0RlbGV0ZWROb2RlKG5vZGUpLFxuICAgICAgICAgICAgICBjbGljazogKG5vZGU6IEZsYXRJdGVtTm9kZSkgPT4gdGhpcy5fcmVzdG9yZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRm9sZGVyTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbm9kZT8uZGF0YT8udHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWxldGVkTm9kZShub2RlOiBGbGF0SXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGV0ZWQobm9kZT8uZGF0YT8ucmVwb3J0KTtcbiAgfVxuXG4gIC8vIERyaXZlIHRoZSB0cmVlJ3MgYnVpbHQtaW4gc2VhcmNoOiBpdCBjb2xsYXBzZXMgZXZlcnl0aGluZywgaGlkZXMgZXZlcnkgbm9kZSxcbiAgLy8gdGhlbiB1bmhpZGVzIGVhY2ggbWF0Y2ggYW5kIHdhbGtzIGl0cyBhbmNlc3RvcnMgb3Blbiwgc28gYSByZXBvcnQgc2V2ZXJhbFxuICAvLyBmb2xkZXJzIGRlZXAgc3VyZmFjZXMgd2l0aCBpdHMgcGF0aCBleHBhbmRlZC4gQ2xlYXJpbmcgZG9lcyBOT1QgdW5kbyB0aGF0XG4gIC8vIGluaXRpYWwgY29sbGFwc2UsIHNvIHRoZSB0cmVlIGlzIHJlLW9wZW5lZCBoZXJlIOKAlCBvdGhlcndpc2UgdGhlIGxpc3RpbmcgaXNcbiAgLy8gbGVmdCBmdWxseSBjb2xsYXBzZWQgdGhlIG1vbWVudCBzb21lYm9keSBlbXB0aWVzIHRoZSBzZWFyY2ggYm94LlxuICBwcml2YXRlIF9zZWFyY2goa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMuX3RyZWUoKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5d29yZCkge1xuICAgICAgdHJlZS5zZWFyY2goa2V5d29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJlZS5jbGVhclNlYXJjaCgpO1xuICAgIHRyZWUuZXhwYW5kQWxsKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydERhdGEudHJlZSh0aGlzLl9xdWVyeSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh0cmVlOiBSZXBvcnRUcmVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fYnVpbGROb2Rlcyh0cmVlKTtcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQobm9kZXMpO1xuXG4gICAgICAgIC8vIFRoZSB0cmVlIHJlYWRzIGBjb25maWdgIG9uY2UsIGluIGl0cyBvd24gbmdPbkluaXQuIFRoZSBmaXJzdCBsb2FkXG4gICAgICAgIC8vIGxhbmRzIGJlZm9yZSBpdCBleGlzdHMsIHNvIHRoZSBkYXRhIGhhcyB0byBhcnJpdmUgdGhyb3VnaCB0aGUgY29uZmlnO1xuICAgICAgICAvLyBldmVyeSBsYXRlciBvbmUgaGFzIHRvIGdvIHRocm91Z2ggdGhlIGluc3RhbmNlIG9yIG5vdGhpbmcgY2hhbmdlcy5cbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0geyAuLi50aGlzLnRyZWVDb25maWcsIGRhdGE6IG5vZGVzIH07XG4gICAgICAgIHRoaXMuX3RyZWUoKT8uc2V0RGF0YShub2Rlcyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIEZsYXQgQVBJIHJvd3Mg4oaSIHRoZSBuZXN0ZWQgc2hhcGUgZnMtdHJlZSByZW5kZXJzLiBGb2xkZXJzIGNvbWUgYmVmb3JlXG4gIC8vIHJlcG9ydHMgYXQgZXZlcnkgbGV2ZWwsIGVhY2ggYWxyZWFkeSBuYW1lLW9yZGVyZWQgYnkgdGhlIGJhY2tlbmQuXG4gIHByaXZhdGUgX2J1aWxkTm9kZXModHJlZTogUmVwb3J0VHJlZSk6IFJlcG9ydE5vZGVbXSB7XG4gICAgY29uc3QgZm9sZGVycyA9IHRyZWU/LmZvbGRlcnMgPz8gW107XG4gICAgY29uc3QgcmVwb3J0cyA9IHRyZWU/LnJlcG9ydHMgPz8gW107XG5cbiAgICBjb25zdCBidWlsZCA9IChwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCk6IFJlcG9ydE5vZGVbXSA9PiB7XG4gICAgICBjb25zdCBmb2xkZXJOb2RlczogUmVwb3J0Tm9kZVtdID0gZm9sZGVyc1xuICAgICAgICAuZmlsdGVyKChmb2xkZXI6IFJlcG9ydEZvbGRlcikgPT4gKGZvbGRlci5wYXJlbnRSZXBvcnRGb2xkZXJJZCA/PyBudWxsKSA9PT0gcGFyZW50SWQpXG4gICAgICAgIC5tYXAoKGZvbGRlcjogUmVwb3J0Rm9sZGVyKSA9PiAoe1xuICAgICAgICAgIGtleTogYGY6JHtmb2xkZXIuaWR9YCxcbiAgICAgICAgICBpZDogZm9sZGVyLmlkLFxuICAgICAgICAgIG5hbWU6IGZvbGRlci5uYW1lLFxuICAgICAgICAgIHR5cGU6IFJlcG9ydE5vZGVUeXBlLkZvbGRlcixcbiAgICAgICAgICBjaGlsZHJlbjogYnVpbGQoZm9sZGVyLmlkKSxcbiAgICAgICAgfSkpO1xuXG4gICAgICBjb25zdCByZXBvcnROb2RlczogUmVwb3J0Tm9kZVtdID0gcmVwb3J0c1xuICAgICAgICAuZmlsdGVyKChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKSA9PiAocmVwb3J0LnJlcG9ydEZvbGRlcklkID8/IG51bGwpID09PSBwYXJlbnRJZClcbiAgICAgICAgLm1hcCgocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSkgPT4gKHtcbiAgICAgICAgICBrZXk6IGByOiR7cmVwb3J0LmlkfWAsXG4gICAgICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgICAgICBuYW1lOiByZXBvcnQubmFtZSxcbiAgICAgICAgICB0eXBlOiBSZXBvcnROb2RlVHlwZS5SZXBvcnQsXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gWy4uLmZvbGRlck5vZGVzLCAuLi5yZXBvcnROb2Rlc107XG4gICAgfTtcblxuICAgIHJldHVybiBidWlsZChudWxsKTtcbiAgfVxuXG4gIC8vIEEgZHJvcCBtb3ZlZCBhIG5vZGUgdW5kZXIgYSBuZXcgcGFyZW50LCBvciBvdXQgdG8gdGhlIHJvb3QuIFRoZSB0cmVlIGhhc1xuICAvLyBhbHJlYWR5IG1vdmVkIGl0IG9uIHNjcmVlbiwgc28gYm90aCBvdXRjb21lcyByZWxvYWQ6IGEgc3VjY2VzcyB0byBwaWNrIHVwXG4gIC8vIHRoZSBzZXJ2ZXIncyBvcmRlcmluZywgYSBmYWlsdXJlIHRvIHB1dCB0aGUgcm93IGJhY2sgd2hlcmUgaXQgcmVhbGx5IGlzLlxuICBwcml2YXRlIF9tb3ZlKGV2ZW50OiBJVHJlZUNoYW5nZVJlb3JkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlOiBSZXBvcnROb2RlID0gZXZlbnQubm9kZT8uZGF0YTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyID0gZXZlbnQudG9QYXJlbnQ/LmRhdGE/LmlkID8/IG51bGw7XG5cbiAgICBpZiAoZXZlbnQudG9QYXJlbnQgJiYgIWV2ZW50LnRvUGFyZW50LmlzRXhwYW5kZWQoKSkge1xuICAgICAgZXZlbnQudG9QYXJlbnQuZXhwYW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZSQ6IE9ic2VydmFibGU8dW5rbm93bj4gPSBub2RlLnR5cGUgPT09IFJlcG9ydE5vZGVUeXBlLkZvbGRlclxuICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZUZvbGRlcihub2RlLmlkLCB7IHBhcmVudFJlcG9ydEZvbGRlcklkIH0pXG4gICAgICA6IHRoaXMuX3JlcG9ydERhdGEubW92ZVJlcG9ydChub2RlLmlkLCBwYXJlbnRSZXBvcnRGb2xkZXJJZCk7XG5cbiAgICBzYXZlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBjaGFuZ2VzJyk7XG4gICAgICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5fbG9hZCgpLFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGb2xkZXIocGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICB0aXRsZTogJ05ldyBGb2xkZXInLFxuICAgICAgbGFiZWw6ICdOYW1lJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnQ3JlYXRlJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+IHRoaXMuX3JlcG9ydERhdGEuY3JlYXRlRm9sZGVyKG5hbWUsIHBhcmVudFJlcG9ydEZvbGRlcklkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NyZWF0ZWQgZm9sZGVyJyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuYW1lKG5vZGU6IEZsYXRJdGVtTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFJlcG9ydE5vZGUgPSBub2RlPy5kYXRhO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRhdGEudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuXG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIHRpdGxlOiBmb2xkZXIgPyAnUmVuYW1lIEZvbGRlcicgOiAnUmVuYW1lIFJlcG9ydCcsXG4gICAgICBsYWJlbDogJ05hbWUnLFxuICAgICAgZGVmYXVsdDogZGF0YS5uYW1lLFxuICAgICAgY29tbWl0TGFiZWw6ICdTYXZlJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChuYW1lOiBzdHJpbmcpID0+IChmb2xkZXJcbiAgICAgICAgICA/IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlRm9sZGVyKGRhdGEuaWQsIHsgbmFtZSB9KVxuICAgICAgICAgIDogdGhpcy5fcmVwb3J0RGF0YS5yZW5hbWUoZGF0YS5pZCwgbmFtZSkpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgY2hhbmdlcycpO1xuICAgICAgICB0aGlzLl9sb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIERlbGV0aW5nIGEgZm9sZGVyIGlzIHJlZnVzZWQgc2VydmVyLXNpZGUgd2hpbGUgaXQgc3RpbGwgaG9sZHMgYSBzdWItZm9sZGVyXG4gIC8vIG9yIGFuIGFjdGl2ZSByZXBvcnQsIGFuZCB0aGUgbWVzc2FnZSBzYXlzIHdoaWNoIOKAlCBzbyB0aGUgY29uZmlybSBoZXJlIHdhcm5zXG4gIC8vIHRoYXQgYSBmb2xkZXIgZGVsZXRlIGlzIHBlcm1hbmVudCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gcmVzdGF0ZSB0aGUgcnVsZS5cbiAgcHJpdmF0ZSBfZGVsZXRlKG5vZGU6IEZsYXRJdGVtTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFJlcG9ydE5vZGUgPSBub2RlPy5kYXRhO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRhdGEudHlwZSA9PT0gUmVwb3J0Tm9kZVR5cGUuRm9sZGVyO1xuXG4gICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdDb25maXJtJyxcbiAgICAgIHRlbXBsYXRlOiBmb2xkZXJcbiAgICAgICAgPyBgQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZSB0aGUgZm9sZGVyIFwiJHtkYXRhLm5hbWV9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gXG4gICAgICAgIDogJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBkZWxldGUgdGhpcyByZXBvcnQ/JyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiAoZm9sZGVyXG4gICAgICAgICAgPyB0aGlzLl9yZXBvcnREYXRhLmRlbGV0ZUZvbGRlcihkYXRhLmlkKVxuICAgICAgICAgIDogdGhpcy5fcmVwb3J0RGF0YS5kZWxldGUoZGF0YS5pZCkpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2Vzcyhmb2xkZXIgPyAnRGVsZXRlZCBmb2xkZXInIDogJ0RlbGV0ZWQgcmVwb3J0Jyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZShub2RlOiBGbGF0SXRlbU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBSZXBvcnROb2RlID0gbm9kZT8uZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXBvcnREYXRhLnVuZGVsZXRlKGRhdGEuaWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmVzdG9yZWQgcmVwb3J0Jyk7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVHVybiBhICc6aWQnIHBhdHRlcm4gaW50byByb3V0ZXIgY29tbWFuZHMuIFJlbGF0aXZlIHVubGVzcyBpdCBzdGFydHNcbiAgLy8gd2l0aCAnLycsIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IHNlZ21lbnQgY2FycmllcyB0aGUgbGVhZGluZyBzbGFzaC5cbiAgcHJpdmF0ZSBfcGF0dGVybkNvbW1hbmRzKHBhdHRlcm46IHN0cmluZywgaWQ6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICBjb25zdCBzZWdtZW50czogdW5rbm93bltdID0gcGF0dGVybi5zcGxpdCgnLycpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG4gICAgICAubWFwKChzZWdtZW50KSA9PiAoc2VnbWVudCA9PT0gJzppZCcgPyBpZCA6IHNlZ21lbnQpKTtcblxuICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW2lkXTtcbiAgICB9XG5cbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHNlZ21lbnRzWzBdID0gYC8ke3NlZ21lbnRzWzBdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG59XG4iLCI8ZnMtZmlsdGVyIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCI+PC9mcy1maWx0ZXI+XG5cbjxuZy1jb250YWluZXIgKmZzU2tlbGV0b249XCJub2RlcygpXCI+XG4gIDxmcy10cmVlIFtjb25maWddPVwidHJlZUNvbmZpZ1wiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmc1RyZWVOb2RlXG4gICAgICAgIGxldC1kYXRhPVwiZGF0YVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtc20uYWxpZ24tY2VudGVyIG5vZGUtcm93XCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm5vZGUtaWNvblwiPlxuICAgICAgICAgIHt7IGRhdGEudHlwZSA9PT0gbm9kZVR5cGUuRm9sZGVyID8gJ2ZvbGRlcicgOiAnaW5zZXJ0X2NoYXJ0X291dGxpbmVkJyB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIEBpZiAoZGF0YS50eXBlID09PSBub2RlVHlwZS5Gb2xkZXIpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGUtbmFtZVwiPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSBpZiAoaXNEZWxldGVkKGRhdGEucmVwb3J0KSkge1xuICAgICAgICAgIDwhLS0gQSBkZWxldGVkIHJlcG9ydCBjYW4ndCBiZSBvcGVuZWQgKHRoZSBiYWNrZW5kIG9ubHkgYXNzZW1ibGVzXG4gICAgICAgICAgICAgICBhY3RpdmUgb25lcyksIHNvIGluIFNob3cgRGVsZXRlZCBtb2RlIHRoZSBuYW1lIGlzIHBsYWluIHRleHQg4oCUXG4gICAgICAgICAgICAgICByZXN0b3JlIGl0IGZyb20gdGhlIHJvdyBtZW51IGZpcnN0LiAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGUtbmFtZVwiPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJub2RlLW5hbWVcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJvcGVuTGluayhkYXRhLnJlcG9ydClcIj5cbiAgICAgICAgICAgIHt7IGRhdGEubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy10cmVlPlxuXG4gIEBpZiAoIW5vZGVzKCkubGVuZ3RoKSB7XG4gICAgPHAgY2xhc3M9XCJzbWFsbCB0cmVlLWVtcHR5XCI+XG4gICAgICBObyByZXBvcnRzIHlldC4gQ3JlYXRlIG9uZSwgb3IgYWRkIGEgZm9sZGVyIHRvIGdyb3VwIHRoZW0uXG4gICAgPC9wPlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
package/fesm2022/{firestitch-report-echarts-dBElcPnl.mjs → firestitch-report-echarts-Dg5PjbjT.mjs}
RENAMED
|
@@ -3,7 +3,7 @@ import { GridComponent, TooltipComponent, LegendComponent, DatasetComponent } fr
|
|
|
3
3
|
import * as echarts from 'echarts/core';
|
|
4
4
|
export { echarts as default };
|
|
5
5
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
|
-
import { R as REPORT_CHART_COLORS_CSS } from './firestitch-report-firestitch-report-
|
|
6
|
+
import { R as REPORT_CHART_COLORS_CSS } from './firestitch-report-firestitch-report-JORFp_xa.mjs';
|
|
7
7
|
|
|
8
8
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
9
9
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -57,4 +57,4 @@ echarts.registerTheme('report', {
|
|
|
57
57
|
axisLabel: { color: '#52606d', fontSize: 11 },
|
|
58
58
|
},
|
|
59
59
|
});
|
|
60
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
60
|
+
//# sourceMappingURL=firestitch-report-echarts-Dg5PjbjT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-report-echarts-
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-Dg5PjbjT.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 TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\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: 'Roboto, \"Helvetica Neue\", sans-serif',\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: 11 },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: 11 },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: 11 },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAcA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,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,sCAAsC;AACnD,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,EAAE,EAAE;AAC7C,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,EAAE,EAAE;QAC7C,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,EAAE,EAAE;AAC9C,KAAA;AACF,CAAA,CAAC"}
|
|
@@ -3882,7 +3882,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
3882
3882
|
// complete synchronously after setOption.
|
|
3883
3883
|
async function renderChartImage(component, data, width, height, pixelRatio = 3) {
|
|
3884
3884
|
// The same tree-shaken echarts build + 'report' theme the live canvas uses.
|
|
3885
|
-
const echarts = (await import('./firestitch-report-echarts-
|
|
3885
|
+
const echarts = (await import('./firestitch-report-echarts-Dg5PjbjT.mjs')).default;
|
|
3886
3886
|
const host = document.createElement('div');
|
|
3887
3887
|
host.style.width = `${width}px`;
|
|
3888
3888
|
host.style.height = `${height}px`;
|
|
@@ -4970,7 +4970,7 @@ class ReportComponent {
|
|
|
4970
4970
|
ReportExportService,
|
|
4971
4971
|
// Tree-shaken ECharts core + the 'report' house theme, loaded lazily with
|
|
4972
4972
|
// this route's chunk.
|
|
4973
|
-
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-
|
|
4973
|
+
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-Dg5PjbjT.mjs').then((module) => module.default) }),
|
|
4974
4974
|
], viewQueries: [{ propertyName: "_split", first: true, predicate: ["split"], descendants: true, static: true }, { propertyName: "_chatPanel", first: true, predicate: ["chatPanel"], descendants: true, read: ElementRef, static: true }, { propertyName: "_canvas", first: true, predicate: ReportCanvasComponent, descendants: true }], ngImport: i0, template: "<div\n #split\n class=\"report fs-row.align-start\">\n <fs-ai-chat\n #chatPanel\n class=\"chat\"\n style=\"min-height: 500px;\"\n basePath=\"reports\"\n [requestData]=\"{ reportId: selected?.id ?? null }\"\n [introMessage]=\"introMessage\"\n (response)=\"onChatResponse($event)\">\n </fs-ai-chat>\n <div\n class=\"resizer\"\n (pointerdown)=\"onResizeStart($event)\">\n </div>\n <div class=\"viewer fs-flex fs-column\">\n <div class=\"fs-row.align-center.gap-sm\">\n <fs-autocomplete-chips\n class=\"fs-flex\"\n [fetch]=\"fetchReports\"\n [(ngModel)]=\"selected\"\n [disabled]=\"loadingReports\"\n [padless]=\"true\"\n [multiple]=\"false\"\n [fetchOnFocus]=\"true\"\n (ngModelChange)=\"reportChange($event)\"\n placeholder=\"Report\"\n name=\"report\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n <ng-template\n fsAutocompleteChipsStatic\n (click)=\"createReport()\">\n Create Report\n </ng-template>\n </fs-autocomplete-chips>\n @if (report && editMode) {\n <!-- What layout editing can add or switch to, and the way out of it \u2014\n the same outlined buttons as the fs-ai-report toolbar. -->\n <button\n mat-stroked-button\n type=\"button\"\n matTooltip=\"Add a block of text\"\n (click)=\"addText()\">\n <mat-icon>title</mat-icon>\n Add text\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n class=\"master-toggle\"\n [class.active]=\"isMasterMode\"\n [matTooltip]=\"isMasterMode ? 'Back to editing this page' : 'Edit the header and footer shown on every page'\"\n (click)=\"toggleMasterMode()\">\n <mat-icon>web_asset</mat-icon>\n Header & footer\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleEditMode()\">\n <mat-icon>check</mat-icon>\n Done editing\n </button>\n }\n @if (report) {\n <fs-menu>\n <ng-template\n fs-menu-item\n (click)=\"reportSettings()\">\n <mat-icon>\n tune\n </mat-icon>\n Report settings\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"toggleEditMode()\"\n [disabled]=\"editMode\">\n <mat-icon>\n dashboard_customize\n </mat-icon>\n {{ editMode ? 'Done editing layout' : 'Edit layout' }}\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"exportPowerpoint()\">\n <mat-icon>\n slideshow\n </mat-icon>\n Export PowerPoint\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"exportPdf()\">\n <mat-icon>\n picture_as_pdf\n </mat-icon>\n Export PDF\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"exportData()\">\n <mat-icon>\n table_view\n </mat-icon>\n Export Raw Data\n </ng-template>\n @if ((report?.pages?.length ?? 0) > 1) {\n <ng-template\n fs-menu-item\n (click)=\"exportData(true)\">\n <mat-icon>\n table_view\n </mat-icon>\n Export Raw Data (This Page)\n </ng-template>\n }\n </fs-menu>\n }\n </div>\n @if (report) {\n <!-- Report-level filters only (the report's actions live in the menu\n above). fs-filter reads its config once at init, so it's keyed on the\n filter signature: when the report-level filter set changes the block\n is recreated and re-reads the rebuilt config. -->\n @if (reportHasFilters) {\n @for (key of [reportFilterKey]; track key) {\n <fs-filter [config]=\"reportFilterConfig\"></fs-filter>\n }\n }\n <app-report-canvas\n [report]=\"report\"\n [editMode]=\"editMode\"\n (componentSettings)=\"componentSettings($event)\"\n (reportChanged)=\"onCanvasReportChanged()\">\n </app-report-canvas>\n }\n </div>\n</div>", styles: [".report{height:100%;min-height:500px}.report .chat{display:block;flex:0 0 25%;width:100%;height:100%;min-height:500px;min-width:0;border:none}.report .viewer{display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden}.report .viewer fs-filter{flex:0 0 auto;margin-top:10px;margin-bottom:0}.report .viewer ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.report .resizer{flex:0 0 11px;align-self:stretch;display:flex;justify-content:center;cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}.report .resizer:before{content:\"\";width:0px;background:#0000001f;transition:width .12s ease,background-color .12s ease}.report .resizer:hover:before{width:3px;background:var(--brand-primary-color)}.report.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.report.resizing .resizer:before{width:3px;background:var(--brand-primary-color)}.report.resizing .chat,.report.resizing .viewer{pointer-events:none}::ng-deep body.body-report-reports .mat-mdc-card-content{display:flex;flex-direction:column;box-sizing:border-box}::ng-deep body.body-report-reports .mat-mdc-card-content mat-tab-nav-panel{flex:1;min-height:0}::ng-deep body.body-report-reports .mat-mdc-card-content mat-tab-nav-panel router-outlet+ng-component{height:100%}.master-toggle.active{background:#eceff3}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsAutocompleteChipsModule }, { kind: "component", type: i2$3.FsAutocompleteChipsComponent, selector: "fs-autocomplete-chips", inputs: ["fetch", "appearance", "floatLabel", "readonly", "size", "label", "placeholder", "chipImage", "chipBackground", "chipColor", "chipIcon", "chipIconColor", "chipClass", "chipPadding", "shape", "hint", "allowText", "allowObject", "delay", "minPanelWidth", "maxPanelHeight", "validateText", "removable", "allowClear", "color", "background", "orderable", "padless", "initOnClick", "fetchOnFocus", "multiple", "multipleAdd", "confirm", "disabled", "groupBy", "panelWidth", "panelClass", "compareWith"], outputs: ["selected", "removed", "reordered", "clear", "panelOpened", "panelClosed"] }, { kind: "directive", type: i2$3.FsAutocompleteObjectDirective, selector: "[fsAutocompleteObject],[fsAutocompleteChipsTemplate]" }, { kind: "directive", type: i2$3.FsAutocompleteChipsStaticDirective, selector: "[fsAutocompleteChipsStatic]", inputs: ["show", "disable"], outputs: ["click", "selected"] }, { kind: "ngmodule", type: FsFilterModule }, { kind: "component", type: i2.FilterComponent, selector: "fs-filter", inputs: ["config"], outputs: ["closed", "opened", "ready"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i2$1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i2$1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "component", type: FsAiChatComponent, selector: "fs-ai-chat", inputs: ["basePath", "requestData", "ready", "introMessage", "showThinking"], outputs: ["response", "showThinkingChange"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ReportCanvasComponent, selector: "app-report-canvas", inputs: ["report", "editMode", "pageId"], outputs: ["componentSettings", "reportChanged", "pageChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4975
4975
|
}
|
|
4976
4976
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportComponent, decorators: [{
|
|
@@ -4985,7 +4985,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4985
4985
|
ReportExportService,
|
|
4986
4986
|
// Tree-shaken ECharts core + the 'report' house theme, loaded lazily with
|
|
4987
4987
|
// this route's chunk.
|
|
4988
|
-
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-
|
|
4988
|
+
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-Dg5PjbjT.mjs').then((module) => module.default) }),
|
|
4989
4989
|
], imports: [
|
|
4990
4990
|
FormsModule,
|
|
4991
4991
|
FsAutocompleteChipsModule,
|
|
@@ -5718,15 +5718,16 @@ class FsAiReportsComponent {
|
|
|
5718
5718
|
isDeleted(report) {
|
|
5719
5719
|
return report?.state === ReportState.Deleted;
|
|
5720
5720
|
}
|
|
5721
|
-
// Prompt for a title, create the report
|
|
5722
|
-
|
|
5721
|
+
// Prompt for a title, create the report — filed under reportFolderId when a
|
|
5722
|
+
// folder's kebab asked, at the root otherwise — then route to it (createPattern).
|
|
5723
|
+
createReport(reportFolderId = null) {
|
|
5723
5724
|
this._prompt.input({
|
|
5724
5725
|
title: 'Create Report',
|
|
5725
5726
|
label: 'Title',
|
|
5726
5727
|
commitLabel: 'Create',
|
|
5727
5728
|
required: true,
|
|
5728
5729
|
})
|
|
5729
|
-
.pipe(switchMap((name) => this._reportData.create(name)), takeUntilDestroyed(this._destroyRef))
|
|
5730
|
+
.pipe(switchMap((name) => this._reportData.create(name, reportFolderId)), takeUntilDestroyed(this._destroyRef))
|
|
5730
5731
|
.subscribe((report) => {
|
|
5731
5732
|
const pattern = this.createPattern();
|
|
5732
5733
|
this._router.navigate(this._patternCommands(pattern, report.id), pattern.startsWith('/') ? {} : { relativeTo: this._route });
|
|
@@ -5844,7 +5845,12 @@ class FsAiReportsComponent {
|
|
|
5844
5845
|
click: (node) => this._rename(node),
|
|
5845
5846
|
},
|
|
5846
5847
|
{
|
|
5847
|
-
label: 'New
|
|
5848
|
+
label: 'New report',
|
|
5849
|
+
show: (node) => this._isFolderNode(node),
|
|
5850
|
+
click: (node) => this.createReport(node.data?.id),
|
|
5851
|
+
},
|
|
5852
|
+
{
|
|
5853
|
+
label: 'New folder',
|
|
5848
5854
|
show: (node) => this._isFolderNode(node),
|
|
5849
5855
|
click: (node) => this._createFolder(node.data?.id),
|
|
5850
5856
|
},
|
|
@@ -6432,7 +6438,7 @@ class FsAiReportComponent {
|
|
|
6432
6438
|
ReportPdfService,
|
|
6433
6439
|
ReportExportService,
|
|
6434
6440
|
// Tree-shaken ECharts core + the 'report' house theme, loaded lazily.
|
|
6435
|
-
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-
|
|
6441
|
+
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-Dg5PjbjT.mjs').then((module) => module.default) }),
|
|
6436
6442
|
], viewQueries: [{ propertyName: "_split", first: true, predicate: ["split"], descendants: true, static: true }, { propertyName: "_chatPanel", first: true, predicate: ["chatPanel"], descendants: true, read: ElementRef, static: true }, { propertyName: "_canvas", first: true, predicate: ReportCanvasComponent, descendants: true }], ngImport: i0, template: "<div class=\"fs-ai-report fs-column\">\n\n <div class=\"fs-ai-report__header fs-row.align-center\">\n <h2 class=\"fs-ai-report__title fs-flex\">{{ report?.name }}</h2>\n\n @if (report) {\n <!-- Report-level filters, inline with the toolbar actions. fs-filter\n reads its config once at init, so it's keyed on the filter\n signature: when the report-level filter set changes the block is\n recreated and re-reads the rebuilt config. -->\n @if (reportHasFilters) {\n @for (key of [reportFilterKey]; track key) {\n <fs-filter\n class=\"fs-ai-report__filters\"\n [config]=\"reportFilterConfig\">\n </fs-filter>\n }\n }\n\n <!-- What layout editing can add or switch to, and the way out of it.\n One style for all three \u2014 outlined, icon and text. \"Header & footer\"\n is a toggle: it keeps its label and turns gray while it is on. -->\n @if (editMode) {\n <div class=\"fs-ai-report__edit-tools fs-row.align-center.gap-xs\">\n <button\n mat-stroked-button\n type=\"button\"\n matTooltip=\"Add a block of text\"\n (click)=\"addText()\">\n <mat-icon>title</mat-icon>\n Add text\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n class=\"fs-ai-report__master\"\n [class.active]=\"isMasterMode\"\n [matTooltip]=\"isMasterMode ? 'Back to editing this page' : 'Edit the header and footer shown on every page'\"\n (click)=\"toggleMasterMode()\">\n <mat-icon>web_asset</mat-icon>\n Header & footer\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleEditMode()\">\n <mat-icon>check</mat-icon>\n Done editing\n </button>\n </div>\n }\n\n <!-- One icon for both states: it reads as pressed while editing rather\n than swapping to something else. -->\n <button\n mat-icon-button\n type=\"button\"\n class=\"fs-ai-report__toggle\"\n [class.active]=\"editMode\"\n [matTooltip]=\"editMode ? 'Done editing' : 'Edit layout'\"\n (click)=\"toggleEditMode()\">\n <mat-icon>dashboard_customize</mat-icon>\n </button>\n\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Export\"\n [fsMenuTriggerFor]=\"exportMenu\">\n <mat-icon>download</mat-icon>\n </button>\n <fs-menu #exportMenu>\n <ng-template\n fs-menu-item\n (click)=\"exportPowerpoint()\">\n Export PowerPoint\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"exportPdf()\">\n Export PDF\n </ng-template>\n <ng-template\n fs-menu-item\n (click)=\"exportData()\">\n Export Raw Data\n </ng-template>\n @if ((report?.pages?.length ?? 0) > 1) {\n <ng-template\n fs-menu-item\n (click)=\"exportData(true)\">\n Export Raw Data (This Page)\n </ng-template>\n }\n </fs-menu>\n\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Report settings\"\n (click)=\"reportSettings()\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n\n <div\n #split\n class=\"fs-ai-report__split fs-row.align-start\">\n <fs-ai-chat\n #chatPanel\n class=\"chat\"\n [basePath]=\"basePath()\"\n [requestData]=\"chatRequestData()\"\n [ready]=\"chatPageId() !== null\"\n (response)=\"onChatResponse($event)\">\n </fs-ai-chat>\n\n <div\n class=\"resizer\"\n (pointerdown)=\"onResizeStart($event)\">\n </div>\n\n <div class=\"viewer fs-flex fs-column\">\n @if (report) {\n <app-report-canvas\n [report]=\"report\"\n [editMode]=\"editMode\"\n [pageId]=\"pageId\"\n (componentSettings)=\"componentSettings($event)\"\n (reportChanged)=\"onCanvasReportChanged()\"\n (pageChanged)=\"onCanvasPageChanged($event)\">\n </app-report-canvas>\n }\n </div>\n </div>\n</div>\n", styles: [".fs-ai-report{height:100%;min-height:500px;display:flex;flex-direction:column}.fs-ai-report__header{flex:0 0 auto;margin-bottom:10px}.fs-ai-report__title{margin:0;min-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fs-ai-report__filters{flex:0 1 auto;min-width:0;display:block;margin:0 5px 0 0}.fs-ai-report__filters ::ng-deep .filter-bar-container{align-items:center!important}.fs-ai-report__filters ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.fs-ai-report__toggle.active{background:#e3ecf7;color:var(--brand-primary-color, #2196f3)}.fs-ai-report__master.active{background:#eceff3}.fs-ai-report__edit-tools{margin:0 5px}.fs-ai-report__split{flex:1 1 auto;min-height:0}.fs-ai-report .chat{display:block;flex:0 0 25%;width:100%;height:100%;min-height:400px;min-width:0;border:none}.fs-ai-report .viewer{display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden}.fs-ai-report .resizer{flex:0 0 11px;align-self:stretch;display:flex;justify-content:center;cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}.fs-ai-report .resizer:before{content:\"\";width:3px;border-radius:3px;background:transparent;transition:background-color .12s ease}.fs-ai-report .resizer:hover:before{background:var(--brand-primary-color)}.fs-ai-report__split.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.fs-ai-report__split.resizing .resizer:before{background:var(--brand-primary-color)}.fs-ai-report__split.resizing .chat,.fs-ai-report__split.resizing .viewer{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: FsFilterModule }, { kind: "component", type: i2.FilterComponent, selector: "fs-filter", inputs: ["config"], outputs: ["closed", "opened", "ready"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i2$1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i2$1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "directive", type: i2$1.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { kind: "component", type: FsAiChatComponent, selector: "fs-ai-chat", inputs: ["basePath", "requestData", "ready", "introMessage", "showThinking"], outputs: ["response", "showThinkingChange"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ReportCanvasComponent, selector: "app-report-canvas", inputs: ["report", "editMode", "pageId"], outputs: ["componentSettings", "reportChanged", "pageChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6437
6443
|
}
|
|
6438
6444
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FsAiReportComponent, decorators: [{
|
|
@@ -6446,7 +6452,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
6446
6452
|
ReportPdfService,
|
|
6447
6453
|
ReportExportService,
|
|
6448
6454
|
// Tree-shaken ECharts core + the 'report' house theme, loaded lazily.
|
|
6449
|
-
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-
|
|
6455
|
+
provideEchartsCore({ echarts: () => import('./firestitch-report-echarts-Dg5PjbjT.mjs').then((module) => module.default) }),
|
|
6450
6456
|
], imports: [
|
|
6451
6457
|
FsFilterModule,
|
|
6452
6458
|
FsMenuModule,
|
|
@@ -6480,4 +6486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
6480
6486
|
*/
|
|
6481
6487
|
|
|
6482
6488
|
export { FsAiReportsComponent as F, GRANULARITY_OPTIONS as G, REPORT_CHART_COLORS_CSS as R, ReportComponent as a, FsAiReportComponent as b, ReportData as c, ReportService as d, ReportFilterStateService as e, ReportNodeType as f, ReportState as g, ReportStates as h };
|
|
6483
|
-
//# sourceMappingURL=firestitch-report-firestitch-report-
|
|
6489
|
+
//# sourceMappingURL=firestitch-report-firestitch-report-JORFp_xa.mjs.map
|