@firestitch/report 18.0.23 → 18.0.25
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/interfaces/report.interface.d.ts +7 -1
- package/app/reports/report-filter-items.d.ts +6 -1
- package/app/reports/views/report/fs-ai-report.component.d.ts +1 -1
- package/app/reports/views/report/report.component.d.ts +1 -1
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +7 -7
- package/esm2022/app/reports/export/report-export-collector.service.mjs +11 -7
- package/esm2022/app/reports/interfaces/report.interface.mjs +5 -5
- package/esm2022/app/reports/option-builder.mjs +5 -3
- package/esm2022/app/reports/report-filter-items.mjs +67 -1
- package/esm2022/app/reports/services/report-filter-state.service.mjs +8 -7
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +30 -28
- package/esm2022/app/reports/views/report/report.component.mjs +32 -31
- package/fesm2022/{firestitch-report-echarts-CWXfRyqK.mjs → firestitch-report-echarts-6sMh877A.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-CWXfRyqK.mjs.map → firestitch-report-echarts-6sMh877A.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-BCb2lTJC.mjs → firestitch-report-firestitch-report-B8LjVTvx.mjs} +187 -111
- package/fesm2022/firestitch-report-firestitch-report-B8LjVTvx.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/firestitch-report-firestitch-report-BCb2lTJC.mjs.map +0 -1
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// report_components + report_filters, plus report_filter_groups). All keys are
|
|
4
4
|
// camelCase; component `config` is the standard format the renderer maps to
|
|
5
5
|
// ECharts options / FsList config.
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
export const
|
|
6
|
+
// How each granularity reads in the group-by control and on an export cover
|
|
7
|
+
// sheet. WHICH of them a given report offers comes from its ReportGroupBy;
|
|
8
|
+
// this is only the naming. 'year' reads as "Annually".
|
|
9
|
+
export const GRANULARITY_OPTIONS = [
|
|
10
10
|
{ value: 'day', name: 'Day' },
|
|
11
11
|
{ value: 'week', name: 'Week' },
|
|
12
12
|
{ value: 'month', name: 'Month' },
|
|
@@ -31,4 +31,4 @@ export const ReportStates = [
|
|
|
31
31
|
{ name: 'Active', value: ReportState.Active },
|
|
32
32
|
{ name: 'Deleted', value: ReportState.Deleted },
|
|
33
33
|
];
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQXVGbkMsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw2QkFBNkI7QUFDN0IsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWdEO0lBQzVFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFvTUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFnQkQsZ0ZBQWdGO0FBQ2hGLDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG4vLyBMYXlvdXQgbW9kZXM6IEZyZWVmb3JtID0gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbXBvbmVudHMgKGRyYWcgYW55d2hlcmUpO1xuLy8gRmxvdyA9IGNvbXBvbmVudHMgZmxvdyBsaWtlIHJvd3MsIGVhY2ggdGFraW5nIGZsb3dXaWR0aCAlIG9mIHRoZSBwYWdlIHdpZHRoLlxuZXhwb3J0IHR5cGUgUmVwb3J0TGF5b3V0ID0gJ2ZyZWVmb3JtJyB8ICdmbG93JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxheW91dDogUmVwb3J0TGF5b3V0O1xuICAvLyBJQU5BIHRpbWV6b25lIChlLmcuIEFtZXJpY2EvTmV3X1lvcmspIGFuY2hvcmluZyBkYXRlIGZpbHRlcmluZyArIGNoYXJ0IGRhdGVcbiAgLy8gYnVja2V0aW5nLiBudWxsIGZhbGxzIGJhY2sgdG8gdGhlIGFjY291bnQgem9uZSB0aGVuIFVUQyAocmVzb2x2ZWQgc2VydmVyLXNpZGUpLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gUmVwb3J0LWxldmVsIGNvbmZpZzogdHlwb2dyYXBoaWMgc3R5bGVzLCBldGMuIChjYW1lbENhc2UgSlNPTiBjb2x1bW4pLlxuICBjb25maWc6IFJlcG9ydENvbmZpZztcbiAgLy8gVGhlIHBhZ2UgaW4gSU5DSEVTICh0aGUgcmVwb3J0J3MgbmF0aXZlIHVuaXQg4oCUIFBERnMgYW5kIFBvd2VyUG9pbnQgYXJlXG4gIC8vIGluY2gtYmFzZWQsIHNvIGV4cG9ydHMgYXJlIGRpbWVuc2lvbmFsbHkgZXhhY3QpLiBPcmllbnRhdGlvbiBpcyBub3QgYSBmaWVsZFxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cbiAgcGFnZVdpZHRoOiBudW1iZXI7XG4gIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcbiAgZmlsdGVyR3JvdXBzOiBSZXBvcnRGaWx0ZXJHcm91cFtdO1xufVxuXG4vLyBSZXBvcnQtbGV2ZWwgc3R5bGluZy4gU2l6ZXMgYXJlIGluIFBPSU5UUyAoMS83MlwiKSDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaHlcbi8vIG1hcHMgMToxIHRvIFBERiAoNzJwdC9pbikgYW5kIFBvd2VyUG9pbnQgKHBvaW50IGZvbnQgc2l6ZXMpLCBzbyBhIHBvaW50XG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWcge1xuICBzdHlsZXM/OiBSZXBvcnRTdHlsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3R5bGVzIHtcbiAgaGVhZGluZz86IHsgc2l6ZT86IG51bWJlciB9O1xufVxuXG4vLyBDb250ZW50IHBhZGRpbmcgYXJvdW5kIGEgY29tcG9uZW50J3MgYm9keSwgaW4gSU5DSEVTICh0aGUgZ2VvbWV0cnkgdW5pdCkuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFBhZGRpbmcge1xuICB0b3A/OiBudW1iZXI7XG4gIHJpZ2h0PzogbnVtYmVyO1xuICBib3R0b20/OiBudW1iZXI7XG4gIGxlZnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xufVxuXG5leHBvcnQgdHlwZSBSZXBvcnRDb21wb25lbnRUeXBlID0gJ2NoYXJ0JyB8ICdsaXN0JyB8ICdrcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XG4gIGlkOiBudW1iZXI7XG4gIHR5cGU6IFJlcG9ydENvbXBvbmVudFR5cGU7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAvLyBHZW9tZXRyeSBpbiBJTkNIRVMuIEZyZWVmb3JtOiBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBjYW52YXMuXG4gIC8vIEZsb3c6IG9ubHkgZmxvd1dpZHRoL29yZGVyIGFwcGx5OyB4L3kgYXJlIHJlbWVtYmVyZWQgZm9yIGEgc3dpdGNoIGJhY2sgdG9cbiAgLy8gZnJlZWZvcm0uXG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3OiBudW1iZXI7XG4gIGg6IG51bWJlcjtcbiAgLy8gSGVpZ2h0IG1vZGUsIERFUklWRUQgZnJvbSB0eXBlIHNlcnZlci1zaWRlIChub3Qgc3RvcmVkLCByZWFkLW9ubHkpOiBsaXN0c1xuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xuICAvLyBhcmUgYWx3YXlzIGZpeGVkICh1c2UgYGhgKSBzbyB0aGV5IGZpdCB0aGUgYm94IGFuZCBuZXZlciBvdmVyZmxvdy5cbiAgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgLy8gRmxvdyBsYXlvdXQ6ICUgb2YgdGhlIHBhZ2UgY29udGVudCB3aWR0aCB0aGlzIGNvbXBvbmVudCB0YWtlcy5cbiAgZmxvd1dpZHRoOiBudW1iZXI7XG4gIC8vIEZsb3cgbGF5b3V0IG9yZGVyaW5nLlxuICBvcmRlcjogbnVtYmVyO1xuICBzcWw6IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZzogQ2hhcnRDb25maWcgJiBMaXN0Q29uZmlnICYgS3BpQ29uZmlnICYgQ29tcG9uZW50TGF5b3V0Q29uZmlnICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBDcm9zcy10eXBlIGxheW91dC9zdHlsZSBrZXlzIGNhcnJpZWQgaW4gYSBjb21wb25lbnQncyBjb25maWcgKGFsb25nc2lkZSB0aGVcbi8vIHR5cGUtc3BlY2lmaWMgY2hhcnQvbGlzdC9rcGkga2V5cykuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudExheW91dENvbmZpZyB7XG4gIHBhZGRpbmc/OiBDb21wb25lbnRQYWRkaW5nO1xufVxuXG4vLyBXaGVyZSBhIGNoYXJ0J3MgbGVnZW5kIHNpdHMgcmVsYXRpdmUgdG8gdGhlIHBsb3QsIG9yICdoaWRkZW4nIHRvIGRyb3AgaXQuXG5leHBvcnQgdHlwZSBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2hpZGRlbic7XG5cbmV4cG9ydCB0eXBlIENoYXJ0R3JhbnVsYXJpdHkgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAneWVhcic7XG5cbi8vIFRoZSBydW50aW1lIEZyZXF1ZW5jeSBjb250cm9sJ3MgY2hvaWNlcyDigJQgcmUtYnVja2V0cyBldmVyeSB0aW1lLXNlcmllcyBjaGFydFxuLy8gYXQgdmlldyB0aW1lLCBvdmVycmlkaW5nIGVhY2ggY2hhcnQncyBhdXRob3JlZCBncmFudWxhcml0eS4gJ3llYXInIHJlYWRzIGFzXG4vLyBcIkFubnVhbGx5XCIgaW4gdGhlIGNvbnRyb2wuXG5leHBvcnQgY29uc3QgRlJFUVVFTkNZX09QVElPTlM6IHsgdmFsdWU6IENoYXJ0R3JhbnVsYXJpdHk7IG5hbWU6IHN0cmluZyB9W10gPSBbXG4gIHsgdmFsdWU6ICdkYXknLCBuYW1lOiAnRGF5JyB9LFxuICB7IHZhbHVlOiAnd2VlaycsIG5hbWU6ICdXZWVrJyB9LFxuICB7IHZhbHVlOiAnbW9udGgnLCBuYW1lOiAnTW9udGgnIH0sXG4gIHsgdmFsdWU6ICdxdWFydGVyJywgbmFtZTogJ1F1YXJ0ZXInIH0sXG4gIHsgdmFsdWU6ICd5ZWFyJywgbmFtZTogJ0FubnVhbGx5JyB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XG4gIGNoYXJ0VHlwZT86ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnIHwgJ3BpZScgfCAnZG9udXQnO1xuICAvLyBGb3Iga2luZCAndGltZScsIHRoZSBzZXJ2ZXIgYnVja2V0cyB0aGUgcmF3IGRhdGV0aW1lIGNvbHVtbiB0byBgZ3JhbnVsYXJpdHlgXG4gIC8vIGluIHRoZSByZXBvcnQncyB0aW1lem9uZSAodGhlIFNRTCBleHBvc2VzIHRoZSByYXcgY29sdW1uLCB1bmJ1Y2tldGVkKS5cbiAgeEF4aXM/OiB7IGNvbHVtbjogc3RyaW5nOyBraW5kPzogJ2NhdGVnb3J5JyB8ICd0aW1lJzsgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5OyBsYWJlbD86IHN0cmluZyB9O1xuICBtZWFzdXJlcz86IENoYXJ0TWVhc3VyZVtdO1xuICBzcGxpdEJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgbGVnZW5kPzogTGVnZW5kUG9zaXRpb247XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUge1xuICBjb2x1bW46IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBBcHBsaWVkIHRvIGEgS1BJJ3Mgc2luZ2xlIHZhbHVlIG9ubHkg4oCUIGl0IGlzIGFnZ3JlZ2F0ZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgLy8gdGhlIFNRTCBydW5zLCBzbyB0aGUgU1FMIGNhbm5vdCBmb3JtYXQgaXQuIENoYXJ0IG1lYXN1cmVzIHN0YXkgbnVtZXJpYy5cbiAgZm9ybWF0PzogJ251bWJlcicgfCAncGVyY2VudCcgfCAnY3VycmVuY3knO1xuICAvLyBIb3cgbWFueSBkZWNpbWFsIHBsYWNlcyB0aGUgdmFsdWUgaXMgc2hvd24gdG8uIEZpeGVkIHJhdGhlciB0aGFuIG1heGltdW06XG4gIC8vIGEgY29sdW1uIG9mIHJhdGVzIGlzIHVucmVhZGFibGUgd2hlbiBlYWNoIG9uZSBzaG93cyBhIGRpZmZlcmVudCBudW1iZXIgb2ZcbiAgLy8gZGVjaW1hbHMuIE9taXR0ZWQgbGVhdmVzIHRoZSBsb2NhbGUncyBvd24gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCBldmVyeVxuICAvLyByZXBvcnQgYXV0aG9yZWQgYmVmb3JlIHRoaXMgZGlkLlxuICAvL1xuICAvLyBJdCBjYW5ub3QgYmUgYXBwbGllZCBpbiB0aGUgU1FMOiB0aGUgdmFsdWUgaXMgYWdncmVnYXRlZCBhZnRlciB0aGUgcmVwb3J0J3NcbiAgLy8gZmlsdGVycyBydW4sIHNvIHByZS1yb3VuZGluZyB3b3VsZCBicmVhayBsaXZlIHJlLWZpbHRlcmluZyBieSBkYXRlIHJhbmdlIG9yXG4gIC8vIHBhcnRuZXIuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29uZmlnIHtcbiAgLy8gQSBsaXN0IGNlbGwgcmVuZGVycyB0aGUgdmFsdWUgdmVyYmF0aW06IHBlcmNlbnQgc2lnbnMsIGN1cnJlbmN5IHN5bWJvbHMsXG4gIC8vIHRob3VzYW5kcyBzZXBhcmF0b3JzIGFuZCBkZWNpbWFsIHBsYWNlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIGNvbXBvbmVudCdzXG4gIC8vIFNRTCAodGhlIGJhY2tlbmQgcmVqZWN0cyBhbnkgb3RoZXIgYGZvcm1hdGAgaGVyZSkuIGBkYXRlYCBpcyB0aGUgZXhjZXB0aW9uXG4gIC8vIOKAlCBhIGRhdGUgY29sdW1uIHN0YXlzIGEgUkFXIHRpbWVzdGFtcCBzbyB0aGUgcmVwb3J0IHRpbWV6b25lIGFuZCBpdHNcbiAgLy8gZGF0ZVJhbmdlIGZpbHRlcnMga2VlcCB3b3JraW5nLCBhbmQgdGhlIHZpZXdlciBsb2NhbGlzZXMgaXQgYXQgcmVuZGVyLlxuICAvLyBBIFNRTC1mb3JtYXR0ZWQgY29sdW1uIGlzIHRleHQsIHNvIGl0IG5hbWVzIGBzb3J0Q29sdW1uYDogdGhlIHJhdyBudW1lcmljXG4gIC8vIGFsaWFzIHRoZSBxdWVyeSBhbHNvIG91dHB1dHMsIHdoaWNoIHRoZSBzZXJ2ZXIgb3JkZXJzIGJ5IGluc3RlYWQuXG4gIGNvbHVtbnM/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgZm9ybWF0PzogJ2RhdGUnOyBzb3J0Q29sdW1uPzogc3RyaW5nIH1bXTtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtwaUNvbmZpZyB7XG4gIG1lYXN1cmU/OiBDaGFydE1lYXN1cmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U29ydCB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyVHlwZSA9ICdkYXRlUmFuZ2UnIHwgJ3NlbGVjdCcgfCAna2V5d29yZCc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyTGV2ZWwgPSAnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnO1xuXG4vLyBPbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIG9mIGEgY29tcG9uZW50J3MgU1FMLCB3aXRoIHRoZSBmaWx0ZXIgaW50ZXJmYWNlXG4vLyBJTkZFUlJFRCBmcm9tIGl0cyBkYXRhICh0aGUgaHVtYW4gbmV2ZXIgcGlja3MgdGhlIGludGVyZmFjZSDigJQgaXQgZm9sbG93cyB0aGVcbi8vIGNvbHVtbidzIHR5cGUpLiBEcml2ZXMgdGhlIEZpbHRlcnMgdGFiIGxpc3RpbmcuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbn1cblxuLy8gR3JvdW5kIHRydXRoOiBvbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIE9OIG9uZSBjb21wb25lbnQncyBTUUwuIEFsd2F5cyBhXG4vLyBtZW1iZXIgb2YgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSB1bml0IHRoYXQgbGlua3MgZXF1aXZhbGVudCBmaWx0ZXJzIGFjcm9zc1xuLy8gY29tcG9uZW50cyBhbmQgZGVjaWRlcyB3aGVyZSB0aGUgY29udHJvbCByZW5kZXJzIChjb21wb25lbnQgdnMgcmVwb3J0IGJhcikuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudElkOiBudW1iZXI7XG4gIGZpbHRlckdyb3VwSWQ6IG51bWJlcjtcbiAgZmlsdGVyQ29sdW1uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBoYXNPcHRpb25zOiBib29sZWFuO1xuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBPbmUgY2hvaWNlIGluIGEgc2VsZWN0IGZpbHRlcidzIG9wdGlvbiBsaXN0LiBUaGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyXG4vLyBtYXRjaGVzIG9uIGFuZCBnZXRzIHN0b3JlZCBpbiBhIHNhdmVkIGRlZmF1bHQg4oCUIGZvciBhbiBlbnRpdHkgdGhhdCBpcyBpdHNcbi8vIHN0YWJsZSBpZCwgbmV2ZXIgaXRzIG5hbWUsIHNvIHJlbmFtaW5nIHRoZSBlbnRpdHkgbW92ZXMgdGhlIGxhYmVsIHdpdGhvdXRcbi8vIGJyZWFraW5nIHRoZSBkZWZhdWx0LiBUaGUgbGFiZWwgaXMgb25seSBldmVyIHdoYXQgdGhlIHZpZXdlciByZWFkcy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyT3B0aW9uIHtcbiAgdmFsdWU6IHVua25vd247XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyR3JvdXAge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbiAgbGV2ZWw6IFJlcG9ydEZpbHRlckxldmVsO1xuICBvcmRlcjogbnVtYmVyO1xuICBjb25maWc6IHsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBBIGZpbHRlciBncm91cCdzIGF1dGhvcmVkIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uXG4vLyBldmVyeSBvcGVuLiBTaGFwZSBmb2xsb3dzIHRoZSBncm91cCdzIHR5cGU6IGRhdGVSYW5nZSB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZFxuLy8gY2FsZW5kYXItZGF5IHJhbmdlKSBvciBhIHJlbGF0aXZlIHByZXNldDsgc2VsZWN0IHVzZXMgdmFsdWVzOyBrZXl3b3JkIHVzZXNcbi8vIHZhbHVlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cERlZmF1bHQge1xuICAvLyBkYXRlUmFuZ2UgcmVsYXRpdmUgcHJlc2V0LCByZXNvbHZlZCBhZ2FpbnN0IFwibm93XCIgb24gZXZlcnkgb3Blbi4gT25lIG9mOlxuICAvLyB0aGlzV2VlaywgbGFzdFdlZWssIGxhc3Q3RGF5cywgbGFzdDMwRGF5cywgbGFzdDNNb250aHMsIGxhc3Q2TW9udGhzLFxuICAvLyBsYXN0MTJNb250aHMsIHRoaXNNb250aCwgdGhpc1F1YXJ0ZXIsIHRoaXNZZWFyL3llYXJUb0RhdGUuIFRoZSB3ZWVrIG9uZXNcbiAgLy8gYXJlIHdob2xlIGNhbGVuZGFyIGRheXMsIFN1bmRheSB0byBTYXR1cmRheSwgaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwIChuZXZlciBwZXJzaXN0ZWQpOiBzaGFwZSBkZXBlbmRzIG9uIHRoZVxuLy8gZ3JvdXAncyB0eXBlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cFZhbHVlIHtcbiAgc3RhcnQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIGVuZD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3RcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmRcbn1cblxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xuICBmaWx0ZXJJZDogbnVtYmVyO1xuICBzdGFydD86IHN0cmluZztcbiAgZW5kPzogc3RyaW5nO1xuICB2YWx1ZXM/OiB1bmtub3duW107XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXG4vLyBzb3J0L3BhZ2luZzsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlIHZpZXdlcidzIGNob3NlbiBGcmVxdWVuY3ksIHdoaWNoXG4vLyBvdmVycmlkZXMgdGhlIGF1dGhvcmVkIGdyYW51bGFyaXR5IGZvciB0aGF0IHJlcXVlc3Qgb25seS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBmcmVxdWVuY3k/OiBDaGFydEdyYW51bGFyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGEge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgcGFnaW5nPzogeyB0b3RhbDogbnVtYmVyOyBwYWdlOiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfTtcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xuICAvLyBUaGUgZWZmZWN0aXZlIHRpbWUgYnVja2V0IHRoZSByb3dzIHdlcmUgZ3JvdXBlZCBpbnRvIChhZnRlciBhbnkgRnJlcXVlbmN5XG4gIC8vIG92ZXJyaWRlKSwgb3IgbnVsbCBmb3IgYSBub24tdGltZSBheGlzLiBEcml2ZXMgdGhlIGNvbXBhY3QgeC1heGlzIGxhYmVscy5cbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xuICAvLyBUaGUgZm9sZGVyIHRoZSByZXBvcnQgaXMgZmlsZWQgdW5kZXIuIG51bGwgaXMgYSByZWFsLCBjb21tb24gdmFsdWUg4oCUIHRoZVxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cbiAgLy9cbiAgLy8gT3B0aW9uYWwgbGlrZSBgc3RhdGVgIGJlc2lkZSBpdDogdGhlIGJhY2tlbmQgYWx3YXlzIHNlbmRzIGl0LCBidXQgbWFraW5nIGl0XG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXG4gIC8vIHJlYWRzIGl0IGFzIGA/PyBudWxsYCBlaXRoZXIgd2F5LlxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xuLy8gcmVwb3J0cyBuZXZlciBkbywgc28gdGhlIHRyZWUncyBvbmx5IGJyYW5jaCBub2RlcyBhcmUgZm9sZGVycy5cbi8vXG4vLyBObyBzdGF0ZTogYSBmb2xkZXIgaXMgb25seSBkZWxldGFibGUgb25jZSBpdCBpcyBlbXB0eSwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc29mdC1kZWxldGUgYW5kIFwiU2hvdyBEZWxldGVkXCIgaXMgYSByZXBvcnRzLW9ubHkgY29uY2VwdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcbiAgcmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXTtcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XG59XG5cbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXG4gIFJlcG9ydCA9ICdyZXBvcnQnLFxufVxuXG4vLyBPbmUgbm9kZSBhcyBmcy10cmVlIHNlZXMgaXQuIEZvbGRlcnMgYW5kIHJlcG9ydHMgc2hhcmUgb25lIGlkIHNwYWNlIGluIHRoZVxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Tm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxuICBjaGlsZHJlbjogUmVwb3J0Tm9kZVtdO1xuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcbn1cblxuLy8gUmVwb3J0cyBhcmUgc29mdC1kZWxldGFibGU6IGEgZGVsZXRlZCByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHNcbi8vIHBhZ2VzIGFuZCBjb21wb25lbnRzLCBhbmQgdGhlIGxpc3RpbmcncyBcIlNob3cgRGVsZXRlZFwiIG1vZGUgcmVzdG9yZXMgaXQuXG4vLyBGb2xkZXJzIGhhdmUgbm8gZXF1aXZhbGVudCDigJQgdGhleSBhcmUgb25seSBkZWxldGFibGUgb25jZSBlbXB0eSwgc28gdGhleSBoYXJkXG4vLyBkZWxldGUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS5cbmV4cG9ydCBlbnVtIFJlcG9ydFN0YXRlIHtcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXG59XG5cbmV4cG9ydCBjb25zdCBSZXBvcnRTdGF0ZXMgPSBbXG4gIHsgbmFtZTogJ0FjdGl2ZScsIHZhbHVlOiBSZXBvcnRTdGF0ZS5BY3RpdmUgfSxcbiAgeyBuYW1lOiAnRGVsZXRlZCcsIHZhbHVlOiBSZXBvcnRTdGF0ZS5EZWxldGVkIH0sXG5dO1xuXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcbiAgcmVwb3J0Q2hhbmdlZD86IGJvb2xlYW47XG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xufVxuXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcbiAgYWNjb3VudElkOiBudW1iZXIgfCBudWxsO1xuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb25zIHtcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcbi8vIHNldHRpbmdzIGRpYWxvZyB0byBzYXkgd2hhdCBzdGF0ZSB0aGUgYnVpbGQgaXMgaW4gYW5kIHdoZW4gaXQgbGFzdCByYW4uXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xuICBpZDogbnVtYmVyO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlOiBEYXRlO1xuICBlbmREYXRlOiBEYXRlO1xufVxuXG4vLyBBIGJ1aWxkIHN0YWdlJ3Mgc3RhdGUgb24gdGhlIGVudGl0eSBzY29yZWJvYXJkOiAnZG9uZScgPSBidWlsdCwgJ21pc3NpbmcnID1cbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XG5cbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcbi8vIG1hbnkgY29kZSBmdW5jdGlvbnMgd2VyZSBjYWNoZWQgKHNwbGl0IG1vZGVsIHZzIGhhbmRsZXIpLCBhbmQgdGhlIHBlci1zdGFnZVxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cbi8vXG4vLyBgbW9kZWxgL2BoYW5kbGVyYCBhcmUgdGhlIGNsYXNzZXMgdGhlIGZ1bmN0aW9ucyB3ZXJlIHJlYWQgZnJvbSDigJQgd2hhdCBhXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW50aXR5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICBjb2x1bW5zOiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcHM6IG51bWJlcjtcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgc3RhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY0J1aWxkU3RhZ2U+O1xufVxuXG4vLyBPbmUgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIHRoZSBidWlsZCByZWFkOiBkb21haW4gbG9naWMgd2l0aCBubyB0YWJsZSBvZiBpdHNcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc2VsZWN0IGZyb20g4oCUIHNvIGl0IGNhcnJpZXMgbm8gdGFibGUsIGNvbHVtbnMgb3IgcmVsYXRpb25zaGlwcy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcbiAga2V5OiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxuLy8gbWFueS10by1tYW55IGl0IGJyaWRnZXMuIEV4Y2x1ZGVkIGlzIG5vdCByZWFjaGFibGUgYXQgYWxsLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcblxuLy8gT25lIHBoeXNpY2FsIHRhYmxlIGFzIHRoZSBidWlsZCBjbGFzc2lmaWVkIGl0LiBgcmVhc29uYCBhbnN3ZXJzIGEgc2luZ2xlXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXG4vLyBleGNsdWRlZCB0YWJsZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcbiAgdGFibGU6IHN0cmluZztcbiAgY2xhc3NpZmljYXRpb246IFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbjtcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxuLy8gdGhlIGZ1bGwgYnJlYWtkb3duIHRoZSBzZXR0aW5ncyBkaWFsb2cgZHJpbGxzIGludG8g4oCUIEJPVEgga2luZHMgb2YgdW5pdCB0aGVcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxuLy8gY2FuJ3Qgc2VlLCBub3QganVzdCB3aGF0IGl0IGNhbi5cbi8vXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxuLy8gYnVpbGQgaXRzZWxmIHJlcG9ydHMgd2hlbiBpdCBmaW5pc2hlcy5cbi8vXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxuLy8gYXMgXCJubyBjYXRhbG9nXCIsIG5ldmVyIGFzIFwibm90aGluZyB3YXMgZXhjbHVkZWRcIi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZW50aXR5Q291bnQ6IG51bWJlcjtcbiAgY2xhc3NDb3VudDogbnVtYmVyO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGVudGl0aWVzOiBTZW1hbnRpY0J1aWxkRW50aXR5W107XG4gIGNsYXNzZXM6IFNlbWFudGljQnVpbGRDbGFzc1tdO1xuICB0YWJsZUNvdW50OiBudW1iZXI7XG4gIGp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgdW5saW5rZWRKdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGV4Y2x1ZGVkQ291bnQ6IG51bWJlcjtcbiAgdGFibGVzOiBTZW1hbnRpY0J1aWxkVGFibGVbXTtcbn1cblxuLy8gV2hpY2ggY2xhc3MgYSBjYWNoZWQgZnVuY3Rpb24gd2FzIHJlYWQgZnJvbS4gQW4gZW50aXR5J3MgY2FjaGUgc3BsaXRzIGludG9cbi8vICdtb2RlbCcgYW5kICdoYW5kbGVyJzsgYSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgaGFzIG9uZSBncm91cCwgJ2NsYXNzJy5cbmV4cG9ydCB0eXBlIFNlbWFudGljRnVuY3Rpb25Tb3VyY2UgPSAnbW9kZWwnIHwgJ2hhbmRsZXInIHwgJ2NsYXNzJztcblxuLy8gT25lIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbiBmcm9tIGEgbW9kZWwsIGhhbmRsZXIgb3Igc3RhbmRhbG9uZSBjbGFzczpcbi8vIHdoYXQga2luZCBvZiBsb2dpYyBpdCBpcywgd2hhdCBpdCBkb2VzLCBhbmQgd2hhdCBpdCBwcm9kdWNlcyDigJQgdGhlIGJ1aWxkJ3Ncbi8vIGNhY2hlZCBcIndoYXQgdGhlIGNvZGUgZG9lc1wiIGtub3dsZWRnZSBzaG93biBpbiB0aGUgZnVuY3Rpb25zIGRpYWxvZy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbiB7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHByb2R1Y2VzOiBzdHJpbmc7XG4gIHNvdXJjZTogU2VtYW50aWNGdW5jdGlvblNvdXJjZTtcbn1cblxuLy8gT25lIGVudGl0eSdzIGNhY2hlZCBjb2RlLWZ1bmN0aW9uIGtub3dsZWRnZSwgZmV0Y2hlZCB3aGVuIGEgZnVuY3Rpb25zIGRpYWxvZ1xuLy8gb3BlbnMgKHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIHRvbyBiaWcgdG8gc2hpcCB3aXRoIHRoZVxuLy8gc2NvcmVib2FyZCkuIE9uZSBwYXlsb2FkIHNlcnZlcyBib3RoIGRpYWxvZ3Mg4oCUIGNvbnN1bWVycyBmaWx0ZXIgYnkgc291cmNlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9ucyB7XG4gIGVudGl0eTogc3RyaW5nO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIG1vZGVsQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXJDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25zOiBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFN0YXR1cyB7XG4gIGJ1aWxkOiBTZW1hbnRpY0J1aWxkIHwgbnVsbDtcbiAgZGV0YWlsOiBTZW1hbnRpY0J1aWxkRGV0YWlsO1xufVxuXG4vLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKGEgc21hbGwgZ2xvYmFsIGtleS92YWx1ZSBzdG9yZSwgdGhlXG4vLyByZXBvcnRpbmcgY291bnRlcnBhcnQgb2YgdGhlIGFwcC13aWRlIHNldHRpbmdzKS4gRWFjaCB2YWx1ZSBzaGlwcyB3aXRoIHRoZVxuLy8gc2FmZSBiYW5kIGl0cyBlZGl0b3IgZmllbGQgaXMgYm91bmRlZCB0by5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xuICAvLyBIb3cgbWFueSBzdW1tYXJ5IGNhbGxzIHRoZSBzZW1hbnRpYyBidWlsZCBydW5zIGF0IG9uY2UuXG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW46IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4OiBudW1iZXI7XG59XG4iXX0=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQTJHbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFxTUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFnQkQsZ0ZBQWdGO0FBQ2hGLDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG4vLyBMYXlvdXQgbW9kZXM6IEZyZWVmb3JtID0gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbXBvbmVudHMgKGRyYWcgYW55d2hlcmUpO1xuLy8gRmxvdyA9IGNvbXBvbmVudHMgZmxvdyBsaWtlIHJvd3MsIGVhY2ggdGFraW5nIGZsb3dXaWR0aCAlIG9mIHRoZSBwYWdlIHdpZHRoLlxuZXhwb3J0IHR5cGUgUmVwb3J0TGF5b3V0ID0gJ2ZyZWVmb3JtJyB8ICdmbG93JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxheW91dDogUmVwb3J0TGF5b3V0O1xuICAvLyBJQU5BIHRpbWV6b25lIChlLmcuIEFtZXJpY2EvTmV3X1lvcmspIGFuY2hvcmluZyBkYXRlIGZpbHRlcmluZyArIGNoYXJ0IGRhdGVcbiAgLy8gYnVja2V0aW5nLiBudWxsIGZhbGxzIGJhY2sgdG8gdGhlIGFjY291bnQgem9uZSB0aGVuIFVUQyAocmVzb2x2ZWQgc2VydmVyLXNpZGUpLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gUmVwb3J0LWxldmVsIGNvbmZpZzogdHlwb2dyYXBoaWMgc3R5bGVzLCBldGMuIChjYW1lbENhc2UgSlNPTiBjb2x1bW4pLlxuICBjb25maWc6IFJlcG9ydENvbmZpZztcbiAgLy8gVGhlIHBhZ2UgaW4gSU5DSEVTICh0aGUgcmVwb3J0J3MgbmF0aXZlIHVuaXQg4oCUIFBERnMgYW5kIFBvd2VyUG9pbnQgYXJlXG4gIC8vIGluY2gtYmFzZWQsIHNvIGV4cG9ydHMgYXJlIGRpbWVuc2lvbmFsbHkgZXhhY3QpLiBPcmllbnRhdGlvbiBpcyBub3QgYSBmaWVsZFxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cbiAgcGFnZVdpZHRoOiBudW1iZXI7XG4gIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcbiAgZmlsdGVyR3JvdXBzOiBSZXBvcnRGaWx0ZXJHcm91cFtdO1xufVxuXG4vLyBSZXBvcnQtbGV2ZWwgc3R5bGluZy4gU2l6ZXMgYXJlIGluIFBPSU5UUyAoMS83MlwiKSDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaHlcbi8vIG1hcHMgMToxIHRvIFBERiAoNzJwdC9pbikgYW5kIFBvd2VyUG9pbnQgKHBvaW50IGZvbnQgc2l6ZXMpLCBzbyBhIHBvaW50XG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWcge1xuICBzdHlsZXM/OiBSZXBvcnRTdHlsZXM7XG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXG4gIC8vIGxpdGVyYWwgbmVlZCBub3QgY2FycnkgaXQ7IHRoZSBBUEkgYWx3YXlzIHNlbmRzIGl0LCByZXNvbHZlZC5cbiAgZ3JvdXBCeT86IFJlcG9ydEdyb3VwQnk7XG59XG5cbi8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIOKAlCB0aGUgb25lIHN3aXRjaCB0aGF0IHJlLWJ1Y2tldHMgZXZlcnlcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxuLy9cbi8vIEl0IGlzIE5PVCBhIGZpbHRlcjogYSBmaWx0ZXIgbmFycm93cyB3aGljaCByb3dzIGFyZSBjb3VudGVkLCB0aGlzIGNoYW5nZXMgaG93XG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxuLy8gdGhhdCBpcyB0aGUgb25lIHJvdyBvZiBjb250cm9scyBhIHZpZXdlciByZWFkcyBhIHJlcG9ydCB0aHJvdWdoIOKAlCB0aGVcbi8vIHNlcGFyYXRpb24gdGhhdCBtYXR0ZXJzIGlzIGluIHRoZSBtb2RlbCwgbm90IGluIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhaW50ZWQuXG4vL1xuLy8gQWx3YXlzIGFycml2ZXMgUkVTT0xWRUQgKHRoZSBiYWNrZW5kIGZpbGxzIGFuIGFic2VudCBvciBwYXJ0aWFsIHN0b3JlZCBibG9ja1xuLy8gaW4gZnJvbSBpdHMgb3duIGRlZmF1bHRzKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkZWZhdWx0IGhlcmUg4oCUIHJlbmRlciB3aGF0XG4vLyB5b3UgYXJlIGdpdmVuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRHcm91cEJ5IHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgZ3JhbnVsYXJpdGllczogQ2hhcnRHcmFudWxhcml0eVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFN0eWxlcyB7XG4gIGhlYWRpbmc/OiB7IHNpemU/OiBudW1iZXIgfTtcbn1cblxuLy8gQ29udGVudCBwYWRkaW5nIGFyb3VuZCBhIGNvbXBvbmVudCdzIGJvZHksIGluIElOQ0hFUyAodGhlIGdlb21ldHJ5IHVuaXQpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcbiAgdG9wPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhZ2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBvcmRlcjogbnVtYmVyO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuZXhwb3J0IHR5cGUgUmVwb3J0Q29tcG9uZW50VHlwZSA9ICdjaGFydCcgfCAnbGlzdCcgfCAna3BpJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb21wb25lbnQge1xuICBpZDogbnVtYmVyO1xuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gR2VvbWV0cnkgaW4gSU5DSEVTLiBGcmVlZm9ybTogYWJzb2x1dGUgcG9zaXRpb24gb24gdGhlIHBhZ2UgY2FudmFzLlxuICAvLyBGbG93OiBvbmx5IGZsb3dXaWR0aC9vcmRlciBhcHBseTsgeC95IGFyZSByZW1lbWJlcmVkIGZvciBhIHN3aXRjaCBiYWNrIHRvXG4gIC8vIGZyZWVmb3JtLlxuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgdzogbnVtYmVyO1xuICBoOiBudW1iZXI7XG4gIC8vIEhlaWdodCBtb2RlLCBERVJJVkVEIGZyb20gdHlwZSBzZXJ2ZXItc2lkZSAobm90IHN0b3JlZCwgcmVhZC1vbmx5KTogbGlzdHNcbiAgLy8gYW5kIEtQSSB0aWxlcyBhcmUgYXV0byAodGhlIGJveCBzaXplcyB0byBpdHMgY29udGVudCwgYGhgIGlnbm9yZWQpOyBjaGFydHNcbiAgLy8gYXJlIGFsd2F5cyBmaXhlZCAodXNlIGBoYCkgc28gdGhleSBmaXQgdGhlIGJveCBhbmQgbmV2ZXIgb3ZlcmZsb3cuXG4gIGF1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIC8vIEZsb3cgbGF5b3V0OiAlIG9mIHRoZSBwYWdlIGNvbnRlbnQgd2lkdGggdGhpcyBjb21wb25lbnQgdGFrZXMuXG4gIGZsb3dXaWR0aDogbnVtYmVyO1xuICAvLyBGbG93IGxheW91dCBvcmRlcmluZy5cbiAgb3JkZXI6IG51bWJlcjtcbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWc6IENoYXJ0Q29uZmlnICYgTGlzdENvbmZpZyAmIEtwaUNvbmZpZyAmIENvbXBvbmVudExheW91dENvbmZpZyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbn1cblxuLy8gQ3Jvc3MtdHlwZSBsYXlvdXQvc3R5bGUga2V5cyBjYXJyaWVkIGluIGEgY29tcG9uZW50J3MgY29uZmlnIChhbG9uZ3NpZGUgdGhlXG4vLyB0eXBlLXNwZWNpZmljIGNoYXJ0L2xpc3Qva3BpIGtleXMpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRDb25maWcge1xuICBwYWRkaW5nPzogQ29tcG9uZW50UGFkZGluZztcbn1cblxuLy8gV2hlcmUgYSBjaGFydCdzIGxlZ2VuZCBzaXRzIHJlbGF0aXZlIHRvIHRoZSBwbG90LCBvciAnaGlkZGVuJyB0byBkcm9wIGl0LlxuZXhwb3J0IHR5cGUgTGVnZW5kUG9zaXRpb24gPSAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdoaWRkZW4nO1xuXG5leHBvcnQgdHlwZSBDaGFydEdyYW51bGFyaXR5ID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3F1YXJ0ZXInIHwgJ3llYXInO1xuXG4vLyBIb3cgZWFjaCBncmFudWxhcml0eSByZWFkcyBpbiB0aGUgZ3JvdXAtYnkgY29udHJvbCBhbmQgb24gYW4gZXhwb3J0IGNvdmVyXG4vLyBzaGVldC4gV0hJQ0ggb2YgdGhlbSBhIGdpdmVuIHJlcG9ydCBvZmZlcnMgY29tZXMgZnJvbSBpdHMgUmVwb3J0R3JvdXBCeTtcbi8vIHRoaXMgaXMgb25seSB0aGUgbmFtaW5nLiAneWVhcicgcmVhZHMgYXMgXCJBbm51YWxseVwiLlxuZXhwb3J0IGNvbnN0IEdSQU5VTEFSSVRZX09QVElPTlM6IHsgdmFsdWU6IENoYXJ0R3JhbnVsYXJpdHk7IG5hbWU6IHN0cmluZyB9W10gPSBbXG4gIHsgdmFsdWU6ICdkYXknLCBuYW1lOiAnRGF5JyB9LFxuICB7IHZhbHVlOiAnd2VlaycsIG5hbWU6ICdXZWVrJyB9LFxuICB7IHZhbHVlOiAnbW9udGgnLCBuYW1lOiAnTW9udGgnIH0sXG4gIHsgdmFsdWU6ICdxdWFydGVyJywgbmFtZTogJ1F1YXJ0ZXInIH0sXG4gIHsgdmFsdWU6ICd5ZWFyJywgbmFtZTogJ0FubnVhbGx5JyB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XG4gIGNoYXJ0VHlwZT86ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnIHwgJ3BpZScgfCAnZG9udXQnO1xuICAvLyBGb3Iga2luZCAndGltZScsIHRoZSBzZXJ2ZXIgYnVja2V0cyB0aGUgcmF3IGRhdGV0aW1lIGNvbHVtbiB0byBgZ3JhbnVsYXJpdHlgXG4gIC8vIGluIHRoZSByZXBvcnQncyB0aW1lem9uZSAodGhlIFNRTCBleHBvc2VzIHRoZSByYXcgY29sdW1uLCB1bmJ1Y2tldGVkKS5cbiAgeEF4aXM/OiB7IGNvbHVtbjogc3RyaW5nOyBraW5kPzogJ2NhdGVnb3J5JyB8ICd0aW1lJzsgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5OyBsYWJlbD86IHN0cmluZyB9O1xuICBtZWFzdXJlcz86IENoYXJ0TWVhc3VyZVtdO1xuICBzcGxpdEJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgbGVnZW5kPzogTGVnZW5kUG9zaXRpb247XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUge1xuICBjb2x1bW46IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBBcHBsaWVkIHRvIGEgS1BJJ3Mgc2luZ2xlIHZhbHVlIG9ubHkg4oCUIGl0IGlzIGFnZ3JlZ2F0ZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgLy8gdGhlIFNRTCBydW5zLCBzbyB0aGUgU1FMIGNhbm5vdCBmb3JtYXQgaXQuIENoYXJ0IG1lYXN1cmVzIHN0YXkgbnVtZXJpYy5cbiAgZm9ybWF0PzogJ251bWJlcicgfCAncGVyY2VudCcgfCAnY3VycmVuY3knO1xuICAvLyBIb3cgbWFueSBkZWNpbWFsIHBsYWNlcyB0aGUgdmFsdWUgaXMgc2hvd24gdG8uIEZpeGVkIHJhdGhlciB0aGFuIG1heGltdW06XG4gIC8vIGEgY29sdW1uIG9mIHJhdGVzIGlzIHVucmVhZGFibGUgd2hlbiBlYWNoIG9uZSBzaG93cyBhIGRpZmZlcmVudCBudW1iZXIgb2ZcbiAgLy8gZGVjaW1hbHMuIE9taXR0ZWQgbGVhdmVzIHRoZSBsb2NhbGUncyBvd24gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCBldmVyeVxuICAvLyByZXBvcnQgYXV0aG9yZWQgYmVmb3JlIHRoaXMgZGlkLlxuICAvL1xuICAvLyBJdCBjYW5ub3QgYmUgYXBwbGllZCBpbiB0aGUgU1FMOiB0aGUgdmFsdWUgaXMgYWdncmVnYXRlZCBhZnRlciB0aGUgcmVwb3J0J3NcbiAgLy8gZmlsdGVycyBydW4sIHNvIHByZS1yb3VuZGluZyB3b3VsZCBicmVhayBsaXZlIHJlLWZpbHRlcmluZyBieSBkYXRlIHJhbmdlIG9yXG4gIC8vIHBhcnRuZXIuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29uZmlnIHtcbiAgLy8gQSBsaXN0IGNlbGwgcmVuZGVycyB0aGUgdmFsdWUgdmVyYmF0aW06IHBlcmNlbnQgc2lnbnMsIGN1cnJlbmN5IHN5bWJvbHMsXG4gIC8vIHRob3VzYW5kcyBzZXBhcmF0b3JzIGFuZCBkZWNpbWFsIHBsYWNlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIGNvbXBvbmVudCdzXG4gIC8vIFNRTCAodGhlIGJhY2tlbmQgcmVqZWN0cyBhbnkgb3RoZXIgYGZvcm1hdGAgaGVyZSkuIGBkYXRlYCBpcyB0aGUgZXhjZXB0aW9uXG4gIC8vIOKAlCBhIGRhdGUgY29sdW1uIHN0YXlzIGEgUkFXIHRpbWVzdGFtcCBzbyB0aGUgcmVwb3J0IHRpbWV6b25lIGFuZCBpdHNcbiAgLy8gZGF0ZVJhbmdlIGZpbHRlcnMga2VlcCB3b3JraW5nLCBhbmQgdGhlIHZpZXdlciBsb2NhbGlzZXMgaXQgYXQgcmVuZGVyLlxuICAvLyBBIFNRTC1mb3JtYXR0ZWQgY29sdW1uIGlzIHRleHQsIHNvIGl0IG5hbWVzIGBzb3J0Q29sdW1uYDogdGhlIHJhdyBudW1lcmljXG4gIC8vIGFsaWFzIHRoZSBxdWVyeSBhbHNvIG91dHB1dHMsIHdoaWNoIHRoZSBzZXJ2ZXIgb3JkZXJzIGJ5IGluc3RlYWQuXG4gIGNvbHVtbnM/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgZm9ybWF0PzogJ2RhdGUnOyBzb3J0Q29sdW1uPzogc3RyaW5nIH1bXTtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtwaUNvbmZpZyB7XG4gIG1lYXN1cmU/OiBDaGFydE1lYXN1cmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U29ydCB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyVHlwZSA9ICdkYXRlUmFuZ2UnIHwgJ3NlbGVjdCcgfCAna2V5d29yZCc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyTGV2ZWwgPSAnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnO1xuXG4vLyBPbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIG9mIGEgY29tcG9uZW50J3MgU1FMLCB3aXRoIHRoZSBmaWx0ZXIgaW50ZXJmYWNlXG4vLyBJTkZFUlJFRCBmcm9tIGl0cyBkYXRhICh0aGUgaHVtYW4gbmV2ZXIgcGlja3MgdGhlIGludGVyZmFjZSDigJQgaXQgZm9sbG93cyB0aGVcbi8vIGNvbHVtbidzIHR5cGUpLiBEcml2ZXMgdGhlIEZpbHRlcnMgdGFiIGxpc3RpbmcuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbn1cblxuLy8gR3JvdW5kIHRydXRoOiBvbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIE9OIG9uZSBjb21wb25lbnQncyBTUUwuIEFsd2F5cyBhXG4vLyBtZW1iZXIgb2YgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSB1bml0IHRoYXQgbGlua3MgZXF1aXZhbGVudCBmaWx0ZXJzIGFjcm9zc1xuLy8gY29tcG9uZW50cyBhbmQgZGVjaWRlcyB3aGVyZSB0aGUgY29udHJvbCByZW5kZXJzIChjb21wb25lbnQgdnMgcmVwb3J0IGJhcikuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudElkOiBudW1iZXI7XG4gIGZpbHRlckdyb3VwSWQ6IG51bWJlcjtcbiAgZmlsdGVyQ29sdW1uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBoYXNPcHRpb25zOiBib29sZWFuO1xuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBPbmUgY2hvaWNlIGluIGEgc2VsZWN0IGZpbHRlcidzIG9wdGlvbiBsaXN0LiBUaGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyXG4vLyBtYXRjaGVzIG9uIGFuZCBnZXRzIHN0b3JlZCBpbiBhIHNhdmVkIGRlZmF1bHQg4oCUIGZvciBhbiBlbnRpdHkgdGhhdCBpcyBpdHNcbi8vIHN0YWJsZSBpZCwgbmV2ZXIgaXRzIG5hbWUsIHNvIHJlbmFtaW5nIHRoZSBlbnRpdHkgbW92ZXMgdGhlIGxhYmVsIHdpdGhvdXRcbi8vIGJyZWFraW5nIHRoZSBkZWZhdWx0LiBUaGUgbGFiZWwgaXMgb25seSBldmVyIHdoYXQgdGhlIHZpZXdlciByZWFkcy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyT3B0aW9uIHtcbiAgdmFsdWU6IHVua25vd247XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyR3JvdXAge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbiAgbGV2ZWw6IFJlcG9ydEZpbHRlckxldmVsO1xuICBvcmRlcjogbnVtYmVyO1xuICBjb25maWc6IHsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBBIGZpbHRlciBncm91cCdzIGF1dGhvcmVkIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uXG4vLyBldmVyeSBvcGVuLiBTaGFwZSBmb2xsb3dzIHRoZSBncm91cCdzIHR5cGU6IGRhdGVSYW5nZSB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZFxuLy8gY2FsZW5kYXItZGF5IHJhbmdlKSBvciBhIHJlbGF0aXZlIHByZXNldDsgc2VsZWN0IHVzZXMgdmFsdWVzOyBrZXl3b3JkIHVzZXNcbi8vIHZhbHVlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cERlZmF1bHQge1xuICAvLyBkYXRlUmFuZ2UgcmVsYXRpdmUgcHJlc2V0LCByZXNvbHZlZCBhZ2FpbnN0IFwibm93XCIgb24gZXZlcnkgb3Blbi4gT25lIG9mOlxuICAvLyB0aGlzV2VlaywgbGFzdFdlZWssIGxhc3Q3RGF5cywgbGFzdDMwRGF5cywgbGFzdDNNb250aHMsIGxhc3Q2TW9udGhzLFxuICAvLyBsYXN0MTJNb250aHMsIHRoaXNNb250aCwgdGhpc1F1YXJ0ZXIsIHRoaXNZZWFyL3llYXJUb0RhdGUuIFRoZSB3ZWVrIG9uZXNcbiAgLy8gYXJlIHdob2xlIGNhbGVuZGFyIGRheXMsIFN1bmRheSB0byBTYXR1cmRheSwgaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwIChuZXZlciBwZXJzaXN0ZWQpOiBzaGFwZSBkZXBlbmRzIG9uIHRoZVxuLy8gZ3JvdXAncyB0eXBlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cFZhbHVlIHtcbiAgc3RhcnQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIGVuZD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3RcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmRcbn1cblxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xuICBmaWx0ZXJJZDogbnVtYmVyO1xuICBzdGFydD86IHN0cmluZztcbiAgZW5kPzogc3RyaW5nO1xuICB2YWx1ZXM/OiB1bmtub3duW107XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXG4vLyBzb3J0L3BhZ2luZzsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnlcbi8vIGNvbnRyb2wsIHdoaWNoIG92ZXJyaWRlcyB0aGUgYXV0aG9yZWQgZ3JhbnVsYXJpdHkgZm9yIHRoYXQgcmVxdWVzdCBvbmx5LiBUaGVcbi8vIHdpcmUga2V5IHN0YXlzIGBmcmVxdWVuY3lgIOKAlCBpdCBpcyB0aGUgYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgZnJlcXVlbmN5PzogQ2hhcnRHcmFudWxhcml0eTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhIHtcbiAgY29sdW1uczogc3RyaW5nW107XG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gIHBhZ2luZz86IHsgdG90YWw6IG51bWJlcjsgcGFnZTogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH07XG4gIHRydW5jYXRlZDogYm9vbGVhbjtcbiAgLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoYWZ0ZXIgYW55IGdyb3VwLWJ5XG4gIC8vIG92ZXJyaWRlKSwgb3IgbnVsbCBmb3IgYSBub24tdGltZSBheGlzLiBEcml2ZXMgdGhlIGNvbXBhY3QgeC1heGlzIGxhYmVscy5cbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xuICAvLyBUaGUgZm9sZGVyIHRoZSByZXBvcnQgaXMgZmlsZWQgdW5kZXIuIG51bGwgaXMgYSByZWFsLCBjb21tb24gdmFsdWUg4oCUIHRoZVxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cbiAgLy9cbiAgLy8gT3B0aW9uYWwgbGlrZSBgc3RhdGVgIGJlc2lkZSBpdDogdGhlIGJhY2tlbmQgYWx3YXlzIHNlbmRzIGl0LCBidXQgbWFraW5nIGl0XG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXG4gIC8vIHJlYWRzIGl0IGFzIGA/PyBudWxsYCBlaXRoZXIgd2F5LlxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xuLy8gcmVwb3J0cyBuZXZlciBkbywgc28gdGhlIHRyZWUncyBvbmx5IGJyYW5jaCBub2RlcyBhcmUgZm9sZGVycy5cbi8vXG4vLyBObyBzdGF0ZTogYSBmb2xkZXIgaXMgb25seSBkZWxldGFibGUgb25jZSBpdCBpcyBlbXB0eSwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc29mdC1kZWxldGUgYW5kIFwiU2hvdyBEZWxldGVkXCIgaXMgYSByZXBvcnRzLW9ubHkgY29uY2VwdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcbiAgcmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXTtcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XG59XG5cbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXG4gIFJlcG9ydCA9ICdyZXBvcnQnLFxufVxuXG4vLyBPbmUgbm9kZSBhcyBmcy10cmVlIHNlZXMgaXQuIEZvbGRlcnMgYW5kIHJlcG9ydHMgc2hhcmUgb25lIGlkIHNwYWNlIGluIHRoZVxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Tm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxuICBjaGlsZHJlbjogUmVwb3J0Tm9kZVtdO1xuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcbn1cblxuLy8gUmVwb3J0cyBhcmUgc29mdC1kZWxldGFibGU6IGEgZGVsZXRlZCByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHNcbi8vIHBhZ2VzIGFuZCBjb21wb25lbnRzLCBhbmQgdGhlIGxpc3RpbmcncyBcIlNob3cgRGVsZXRlZFwiIG1vZGUgcmVzdG9yZXMgaXQuXG4vLyBGb2xkZXJzIGhhdmUgbm8gZXF1aXZhbGVudCDigJQgdGhleSBhcmUgb25seSBkZWxldGFibGUgb25jZSBlbXB0eSwgc28gdGhleSBoYXJkXG4vLyBkZWxldGUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS5cbmV4cG9ydCBlbnVtIFJlcG9ydFN0YXRlIHtcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXG59XG5cbmV4cG9ydCBjb25zdCBSZXBvcnRTdGF0ZXMgPSBbXG4gIHsgbmFtZTogJ0FjdGl2ZScsIHZhbHVlOiBSZXBvcnRTdGF0ZS5BY3RpdmUgfSxcbiAgeyBuYW1lOiAnRGVsZXRlZCcsIHZhbHVlOiBSZXBvcnRTdGF0ZS5EZWxldGVkIH0sXG5dO1xuXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcbiAgcmVwb3J0Q2hhbmdlZD86IGJvb2xlYW47XG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xufVxuXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcbiAgYWNjb3VudElkOiBudW1iZXIgfCBudWxsO1xuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb25zIHtcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcbi8vIHNldHRpbmdzIGRpYWxvZyB0byBzYXkgd2hhdCBzdGF0ZSB0aGUgYnVpbGQgaXMgaW4gYW5kIHdoZW4gaXQgbGFzdCByYW4uXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xuICBpZDogbnVtYmVyO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlOiBEYXRlO1xuICBlbmREYXRlOiBEYXRlO1xufVxuXG4vLyBBIGJ1aWxkIHN0YWdlJ3Mgc3RhdGUgb24gdGhlIGVudGl0eSBzY29yZWJvYXJkOiAnZG9uZScgPSBidWlsdCwgJ21pc3NpbmcnID1cbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XG5cbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcbi8vIG1hbnkgY29kZSBmdW5jdGlvbnMgd2VyZSBjYWNoZWQgKHNwbGl0IG1vZGVsIHZzIGhhbmRsZXIpLCBhbmQgdGhlIHBlci1zdGFnZVxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cbi8vXG4vLyBgbW9kZWxgL2BoYW5kbGVyYCBhcmUgdGhlIGNsYXNzZXMgdGhlIGZ1bmN0aW9ucyB3ZXJlIHJlYWQgZnJvbSDigJQgd2hhdCBhXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW50aXR5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICBjb2x1bW5zOiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcHM6IG51bWJlcjtcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgc3RhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY0J1aWxkU3RhZ2U+O1xufVxuXG4vLyBPbmUgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIHRoZSBidWlsZCByZWFkOiBkb21haW4gbG9naWMgd2l0aCBubyB0YWJsZSBvZiBpdHNcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc2VsZWN0IGZyb20g4oCUIHNvIGl0IGNhcnJpZXMgbm8gdGFibGUsIGNvbHVtbnMgb3IgcmVsYXRpb25zaGlwcy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcbiAga2V5OiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxuLy8gbWFueS10by1tYW55IGl0IGJyaWRnZXMuIEV4Y2x1ZGVkIGlzIG5vdCByZWFjaGFibGUgYXQgYWxsLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcblxuLy8gT25lIHBoeXNpY2FsIHRhYmxlIGFzIHRoZSBidWlsZCBjbGFzc2lmaWVkIGl0LiBgcmVhc29uYCBhbnN3ZXJzIGEgc2luZ2xlXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXG4vLyBleGNsdWRlZCB0YWJsZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcbiAgdGFibGU6IHN0cmluZztcbiAgY2xhc3NpZmljYXRpb246IFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbjtcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxuLy8gdGhlIGZ1bGwgYnJlYWtkb3duIHRoZSBzZXR0aW5ncyBkaWFsb2cgZHJpbGxzIGludG8g4oCUIEJPVEgga2luZHMgb2YgdW5pdCB0aGVcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxuLy8gY2FuJ3Qgc2VlLCBub3QganVzdCB3aGF0IGl0IGNhbi5cbi8vXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxuLy8gYnVpbGQgaXRzZWxmIHJlcG9ydHMgd2hlbiBpdCBmaW5pc2hlcy5cbi8vXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxuLy8gYXMgXCJubyBjYXRhbG9nXCIsIG5ldmVyIGFzIFwibm90aGluZyB3YXMgZXhjbHVkZWRcIi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZW50aXR5Q291bnQ6IG51bWJlcjtcbiAgY2xhc3NDb3VudDogbnVtYmVyO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGVudGl0aWVzOiBTZW1hbnRpY0J1aWxkRW50aXR5W107XG4gIGNsYXNzZXM6IFNlbWFudGljQnVpbGRDbGFzc1tdO1xuICB0YWJsZUNvdW50OiBudW1iZXI7XG4gIGp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgdW5saW5rZWRKdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGV4Y2x1ZGVkQ291bnQ6IG51bWJlcjtcbiAgdGFibGVzOiBTZW1hbnRpY0J1aWxkVGFibGVbXTtcbn1cblxuLy8gV2hpY2ggY2xhc3MgYSBjYWNoZWQgZnVuY3Rpb24gd2FzIHJlYWQgZnJvbS4gQW4gZW50aXR5J3MgY2FjaGUgc3BsaXRzIGludG9cbi8vICdtb2RlbCcgYW5kICdoYW5kbGVyJzsgYSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgaGFzIG9uZSBncm91cCwgJ2NsYXNzJy5cbmV4cG9ydCB0eXBlIFNlbWFudGljRnVuY3Rpb25Tb3VyY2UgPSAnbW9kZWwnIHwgJ2hhbmRsZXInIHwgJ2NsYXNzJztcblxuLy8gT25lIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbiBmcm9tIGEgbW9kZWwsIGhhbmRsZXIgb3Igc3RhbmRhbG9uZSBjbGFzczpcbi8vIHdoYXQga2luZCBvZiBsb2dpYyBpdCBpcywgd2hhdCBpdCBkb2VzLCBhbmQgd2hhdCBpdCBwcm9kdWNlcyDigJQgdGhlIGJ1aWxkJ3Ncbi8vIGNhY2hlZCBcIndoYXQgdGhlIGNvZGUgZG9lc1wiIGtub3dsZWRnZSBzaG93biBpbiB0aGUgZnVuY3Rpb25zIGRpYWxvZy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbiB7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHByb2R1Y2VzOiBzdHJpbmc7XG4gIHNvdXJjZTogU2VtYW50aWNGdW5jdGlvblNvdXJjZTtcbn1cblxuLy8gT25lIGVudGl0eSdzIGNhY2hlZCBjb2RlLWZ1bmN0aW9uIGtub3dsZWRnZSwgZmV0Y2hlZCB3aGVuIGEgZnVuY3Rpb25zIGRpYWxvZ1xuLy8gb3BlbnMgKHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIHRvbyBiaWcgdG8gc2hpcCB3aXRoIHRoZVxuLy8gc2NvcmVib2FyZCkuIE9uZSBwYXlsb2FkIHNlcnZlcyBib3RoIGRpYWxvZ3Mg4oCUIGNvbnN1bWVycyBmaWx0ZXIgYnkgc291cmNlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9ucyB7XG4gIGVudGl0eTogc3RyaW5nO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIG1vZGVsQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXJDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25zOiBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFN0YXR1cyB7XG4gIGJ1aWxkOiBTZW1hbnRpY0J1aWxkIHwgbnVsbDtcbiAgZGV0YWlsOiBTZW1hbnRpY0J1aWxkRGV0YWlsO1xufVxuXG4vLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKGEgc21hbGwgZ2xvYmFsIGtleS92YWx1ZSBzdG9yZSwgdGhlXG4vLyByZXBvcnRpbmcgY291bnRlcnBhcnQgb2YgdGhlIGFwcC13aWRlIHNldHRpbmdzKS4gRWFjaCB2YWx1ZSBzaGlwcyB3aXRoIHRoZVxuLy8gc2FmZSBiYW5kIGl0cyBlZGl0b3IgZmllbGQgaXMgYm91bmRlZCB0by5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xuICAvLyBIb3cgbWFueSBzdW1tYXJ5IGNhbGxzIHRoZSBzZW1hbnRpYyBidWlsZCBydW5zIGF0IG9uY2UuXG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW46IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { format, isValid, parseISO } from 'date-fns';
|
|
2
|
-
|
|
2
|
+
import { GRANULARITY_OPTIONS } from './interfaces/report.interface';
|
|
3
3
|
// colorBy applies only to single-dimension bar charts, and only when splitBy
|
|
4
4
|
// isn't already driving multiple series: it colors each bar by its category and
|
|
5
5
|
// shows a legend (one series per category, overlapped to full width).
|
|
@@ -223,7 +223,9 @@ function numeric(value) {
|
|
|
223
223
|
// The effective time bucket the rows were grouped into (from the data endpoint),
|
|
224
224
|
// or null when the x-axis isn't a time axis — gates the compact period labels.
|
|
225
225
|
function bucketGranularity(data) {
|
|
226
|
-
return data.granularity &&
|
|
226
|
+
return data.granularity && GRANULARITY_OPTIONS.some((option) => option.value === data.granularity)
|
|
227
|
+
? data.granularity
|
|
228
|
+
: null;
|
|
227
229
|
}
|
|
228
230
|
// Whether the period-start categories cross a year boundary. When they don't,
|
|
229
231
|
// the year is pure noise on every label, so it's dropped entirely.
|
|
@@ -290,4 +292,4 @@ function periodAxisLabel(granularity, categories) {
|
|
|
290
292
|
},
|
|
291
293
|
};
|
|
292
294
|
}
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBS3JELE1BQU0sb0JBQW9CLEdBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRzdGLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBbUI7SUFDM0MsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3RHLENBQUM7QUFZRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBMEIsRUFBRSxJQUFtQjtJQUNoRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBcUIsQ0FBQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQzNDLHlFQUF5RTtJQUN6RSxzRUFBc0U7SUFDdEUsK0VBQStFO0lBQy9FLE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0s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Q0FBQztRQUNqQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxPQUFPO1FBQ0wsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxTQUFTLElBQUksV0FBVyxLQUFLLE1BQU07b0JBQ3hDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRztvQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRUNoYXJ0c09wdGlvbiwgTGVnZW5kQ29tcG9uZW50T3B0aW9uLCBTZXJpZXNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcblxuaW1wb3J0IHsgZm9ybWF0LCBpc1ZhbGlkLCBwYXJzZUlTTyB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgQ2hhcnRDb25maWcsIENoYXJ0R3JhbnVsYXJpdHksIENvbXBvbmVudERhdGEsIExlZ2VuZFBvc2l0aW9uLCBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuY29uc3QgQlVDS0VUX0dSQU5VTEFSSVRJRVM6IENoYXJ0R3JhbnVsYXJpdHlbXSA9IFsnZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAncXVhcnRlcicsICd5ZWFyJ107XG5cblxuLy8gY29sb3JCeSBhcHBsaWVzIG9ubHkgdG8gc2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzLCBhbmQgb25seSB3aGVuIHNwbGl0Qnlcbi8vIGlzbid0IGFscmVhZHkgZHJpdmluZyBtdWx0aXBsZSBzZXJpZXM6IGl0IGNvbG9ycyBlYWNoIGJhciBieSBpdHMgY2F0ZWdvcnkgYW5kXG4vLyBzaG93cyBhIGxlZ2VuZCAob25lIHNlcmllcyBwZXIgY2F0ZWdvcnksIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCkuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckJ5KGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhY29uZmlnLmNvbG9yQnk/LmNvbHVtbiAmJiAhY29uZmlnLnNwbGl0Qnk/LmNvbHVtbiAmJiAoY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJykgPT09ICdiYXInO1xufVxuXG5cbi8vIENhdGVnb3JpZXMgKyBuYW1lZCBzZXJpZXMgZXh0cmFjdGVkIGZyb20gYSBjaGFydCBjb21wb25lbnQncyBjb25maWcgKyByb3dzIOKAlFxuLy8gdGhlIG9uZSBwaXZvdCAoc3BsaXRCeSDihpIgc2VyaWVzLCBtZWFzdXJlcyDihpIgc2VyaWVzKSBzaGFyZWQgYnkgdGhlIG9uLXNjcmVlblxuLy8gRUNoYXJ0cyBvcHRpb24gYmVsb3cgQU5EIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBkYXRhLCBzbyBib3RoXG4vLyBtZWRpYSBwbG90IGlkZW50aWNhbCBudW1iZXJzLlxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICBzZXJpZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeENvbHVtbiA9IGNvbmZpZy54QXhpcz8uY29sdW1uID8/IGRhdGEuY29sdW1uc1swXTtcbiAgY29uc3Qgc3BsaXRDb2x1bW4gPSBjb25maWcuc3BsaXRCeT8uY29sdW1uO1xuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IHRvbyAoc28gZWFjaCBiYXIgY2FycmllcyBpdHMgb3duXG4gIC8vIGNvbG9yICsgbGVnZW5kIGVudHJ5KSwgYnV0IHRoZSBiYXJzIGFyZSBvdmVybGFwcGVkIHRvIGZ1bGwgd2lkdGggaW5cbiAgLy8gYnVpbGRBeGlzT3B0aW9uIHJhdGhlciB0aGFuIGxhaWQgc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuICBjb25zdCBncm91cENvbHVtbiA9IHNwbGl0Q29sdW1uIHx8IChpc0NvbG9yQnkoY29uZmlnKSA/IGNvbmZpZy5jb2xvckJ5Py5jb2x1bW4gOiB1bmRlZmluZWQpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNvbmZpZy5tZWFzdXJlcz8ubGVuZ3RoXG4gICAgPyBjb25maWcubWVhc3VyZXNcbiAgICA6IFt7IGNvbHVtbjogZGF0YS5jb2x1bW5zW2RhdGEuY29sdW1ucy5sZW5ndGggLSAxXSB9XTtcblxuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IFN0cmluZyhjYXRlZ29yeSA/PyAn4oCUJykpO1xuICBjb25zdCBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzWydzZXJpZXMnXSA9IFtdO1xuXG4gIGlmIChncm91cENvbHVtbikge1xuICAgIC8vIE9uZSBzZXJpZXMgcGVyIGdyb3VwIHZhbHVlIChzcGxpdEJ5L2NvbG9yQnkpLCBwaXZvdGVkIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmUuXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVzWzBdO1xuICAgIGZvciAoY29uc3QgZ3JvdXBWYWx1ZSBvZiB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCBncm91cENvbHVtbikpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgaWYgKHJvd1tncm91cENvbHVtbl0gPT09IGdyb3VwVmFsdWUpIHtcbiAgICAgICAgICBieUNhdGVnb3J5LnNldChyb3dbeENvbHVtbl0sIHJvd1ttZWFzdXJlLmNvbHVtbl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlcmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogU3RyaW5nKGdyb3VwVmFsdWUgPz8gJ+KAlCcpLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG1lYXN1cmUgb2YgbWVhc3VyZXMpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgIH1cblxuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZWFzdXJlLmxhYmVsID8/IG1lYXN1cmUuY29sdW1uLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNhdGVnb3JpZXMsIHNlcmllcyB9O1xufVxuXG4vLyBUaGUgb25lIHB1cmUgbWFwcGluZyBmcm9tIG91ciBzdGFuZGFyZCBjYW1lbENhc2UgY2hhcnQgY29uZmlnICsgdGhlIGRhdGFcbi8vIGVuZHBvaW50J3Mgcm93cyB0byBhbiBFQ2hhcnRzIG9wdGlvbi4gRXZlcnl0aGluZyB2aXN1YWwgdGhhdCBpc24ndCBpbiB0aGVcbi8vIHJlZ2lzdGVyZWQgJ3JlcG9ydCcgdGhlbWUgaXMgZGVjaWRlZCBoZXJlLCBzbyByZXBvcnQgc3RhbmRhcmRzIGhhdmUgZXhhY3RseVxuLy8gdHdvIGhvbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hhcnRPcHRpb24oY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQXhpc09wdGlvbihjb21wb25lbnQsIGRhdGEsIGNoYXJ0VHlwZSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXhpc09wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNoYXJ0VHlwZTogJ2JhcicgfCAnbGluZScgfCAnYXJlYScsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuXG4gIC8vIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXIgY2F0ZWdvcnk7IG92ZXJsYXBwaW5nIHRoZW0gKGJhckdhcCAtMTAwJSkgbWFrZXNcbiAgLy8gZWFjaCByZW5kZXIgYXQgdGhlIGZ1bGwgY2F0ZWdvcnktYmFuZCB3aWR0aCDigJQgb25lIGZ1bGwtd2lkdGgsIGRpc3RpbmN0bHlcbiAgLy8gY29sb3JlZCBiYXIgcGVyIGNhdGVnb3J5IOKAlCBpbnN0ZWFkIG9mIHNpZGUtYnktc2lkZSBzbGl2ZXJzLiBUaGUgbGF5b3V0IHByb3BzXG4gIC8vIGFyZSByZWFkIGZyb20gdGhlIGZpcnN0IHNlcmllcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT5cbiAgICBidWlsZFNlcmllcyhleHRyYWN0ZWRTZXJpZXMubmFtZSwgZXh0cmFjdGVkU2VyaWVzLnZhbHVlcywgY2hhcnRUeXBlLCBjb25maWcuc3RhY2tlZCwgY29sb3JCeSAmJiBpbmRleCA9PT0gMCkpO1xuXG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG4gIGNvbnN0IGNhdGVnb3J5QXhpcyA9IHtcbiAgICB0eXBlOiAnY2F0ZWdvcnknIGFzIGNvbnN0LFxuICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLFxuICAgIG5hbWU6IGNvbmZpZy54QXhpcz8ubGFiZWwsXG4gICAgbmFtZUxvY2F0aW9uOiAnbWlkZGxlJyBhcyBjb25zdCxcbiAgICBuYW1lR2FwOiBncmFudWxhcml0eSAmJiBzcGFuc011bHRpcGxlWWVhcnMoZXh0cmFjdGVkLmNhdGVnb3JpZXMpID8gNDAgOiAyOCxcbiAgICAuLi5wZXJpb2RBeGlzTGFiZWwoZ3JhbnVsYXJpdHksIGV4dHJhY3RlZC5jYXRlZ29yaWVzKSxcbiAgfTtcbiAgY29uc3QgdmFsdWVBeGlzID0geyB0eXBlOiAndmFsdWUnIGFzIGNvbnN0IH07XG5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXMubGVuZ3RoLCBjb2xvckJ5KTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBsZWdlbmQ6IGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksXG4gICAgLy8gY29sb3JCeSBjaGFydHMgb3ZlcmxhcCBOIG1vc3RseS1udWxsIHNlcmllcywgc28gYW4gYXhpcyB0b29sdGlwIHdvdWxkIGxpc3RcbiAgICAvLyBldmVyeSBjYXRlZ29yeTsgYW4gaXRlbSB0b29sdGlwIHNob3dzIGp1c3QgdGhlIGhvdmVyZWQgYmFyLlxuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogY29sb3JCeSA/ICdpdGVtJyA6ICdheGlzJyB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllcyxcbiAgfTtcbn1cblxuLy8gRGVmYXVsdCBsZWdlbmQgcGxhY2VtZW50IHdoZW4gdGhlIGNvbmZpZyBkb2Vzbid0IHBpbiBvbmU6IHBpZSBjaGFydHMgcmVhZFxuLy8gYmVzdCB3aXRoIHRoZSBzbGljZSBrZXkgYmVzaWRlIHRoZW0gKHJpZ2h0KTsgYXhpcyBjaGFydHMgb25seSBuZWVkIGEgbGVnZW5kXG4vLyB0byB0ZWxsIG11bHRpcGxlIHNlcmllcyBhcGFydCwgc28gYSBzaW5nbGUtc2VyaWVzIGNoYXJ0IGhpZGVzIGl0LiBBbiBleHBsaWNpdFxuLy8gY29uZmlnLmxlZ2VuZCAoaW5jbHVkaW5nICdoaWRkZW4nKSBhbHdheXMgd2lucy4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnRcbi8vIGV4cG9ydCBzbyBib3RoIG1lZGlhIHBsYWNlIHRoZSBsZWdlbmQgaWRlbnRpY2FsbHkuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZzogQ2hhcnRDb25maWcsIHNlcmllc0NvdW50OiBudW1iZXIsIGNvbG9yQnkgPSBmYWxzZSk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgaWYgKGNvbmZpZy5sZWdlbmQpIHtcbiAgICByZXR1cm4gY29uZmlnLmxlZ2VuZDtcbiAgfVxuXG4gIGNvbnN0IHBpZSA9IGNvbmZpZy5jaGFydFR5cGUgPT09ICdwaWUnIHx8IGNvbmZpZy5jaGFydFR5cGUgPT09ICdkb251dCc7XG5cbiAgLy8gY29sb3JCeSBtYXBzIGVhY2ggYmFyJ3MgY29sb3IgdG8gaXRzIGNhdGVnb3J5LCBzbyBpdCBuZWVkcyBhIGxlZ2VuZCBldmVuXG4gIC8vIHRob3VnaCBpdCdzIGEgc2luZ2xlIG1lYXN1cmUuXG4gIHJldHVybiBwaWUgfHwgY29sb3JCeSB8fCBzZXJpZXNDb3VudCA+IDEgPyAocGllID8gJ3JpZ2h0JyA6ICd0b3AnKSA6ICdoaWRkZW4nO1xufVxuXG5mdW5jdGlvbiBsZWdlbmRPcHRpb24ocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgaWYgKHBvc2l0aW9uID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB7IHNob3c6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBiYXNlOiBMZWdlbmRDb21wb25lbnRPcHRpb24gPSB7IHR5cGU6ICdzY3JvbGwnIH07XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IDAgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgbGVmdDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgcmlnaHQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiAwIH07XG4gIH1cbn1cblxuLy8gUmVzZXJ2ZSBwbG90LWVkZ2Ugcm9vbSBvbiB3aGljaGV2ZXIgc2lkZSB0aGUgbGVnZW5kIG9jY3VwaWVzIHNvIGl0IG5ldmVyXG4vLyBvdmVybGFwcyB0aGUgYmFycy9saW5lczsgY29udGFpbkxhYmVsIGFscmVhZHkgYWNjb3VudHMgZm9yIHRoZSBheGlzIGxhYmVscy5cbmZ1bmN0aW9uIGF4aXNHcmlkKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IEVDaGFydHNPcHRpb25bJ2dyaWQnXSB7XG4gIGNvbnN0IGJhc2UgPSB7IGxlZnQ6IDgsIHJpZ2h0OiAxNiwgdG9wOiA4LCBib3R0b206IDgsIGNvbnRhaW5MYWJlbDogdHJ1ZSB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiAzMiB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgbGVmdDogOTYgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCByaWdodDogOTYgfTtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogMzIgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFNlcmllcyhcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICBjaGFydFR5cGU6ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnLFxuICBzdGFja2VkPzogYm9vbGVhbixcbiAgb3ZlcmxhcD86IGJvb2xlYW4sXG4pOiBTZXJpZXNPcHRpb24ge1xuICBpZiAoY2hhcnRUeXBlID09PSAnYmFyJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICBzdGFjazogc3RhY2tlZCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICAvLyBjb2xvckJ5OiBvdmVybGFwIHRoZSBwZXItY2F0ZWdvcnkgc2VyaWVzIHNvIGVhY2ggYmFyIHJlbmRlcnMgZnVsbC13aWR0aC5cbiAgICAgIC4uLihvdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgICBzdGFjazogc3RhY2tlZCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgc21vb3RoOiB0cnVlLFxuICAgIHN5bWJvbFNpemU6IDYsXG4gICAgYXJlYVN0eWxlOiBjaGFydFR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFBpZU9wdGlvbihjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSwgZG9udXQ6IGJvb2xlYW4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdpdGVtJyB9LFxuICAgIGxlZ2VuZDogbGVnZW5kT3B0aW9uKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBzZXJpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BpZScsXG4gICAgICAgIHJhZGl1czogZG9udXQgPyBbJzQ1JScsICc3MiUnXSA6ICc3MiUnLFxuICAgICAgICBjZW50ZXI6IHBpZUNlbnRlcihsZWdlbmRQb3NpdGlvbiksXG4gICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaW5kZXhdID8/IDAsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLy8gTnVkZ2UgdGhlIHBpZSBvZmYtY2VudGVyIHRvd2FyZCB0aGUgb3Bwb3NpdGUgZWRnZSBmcm9tIGl0cyBsZWdlbmQgc28gdGhlIHR3b1xuLy8gZG9uJ3QgY29sbGlkZTsgY2VudGVyZWQgd2hlbiB0aGUgbGVnZW5kIGlzIGhpZGRlbi5cbmZ1bmN0aW9uIHBpZUNlbnRlcihwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIFsnNjAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBbJzQwJScsICc1MCUnXTtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzU4JSddO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNDYlJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbJzUwJScsICc1MCUnXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmlxdWVWYWx1ZXMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uOiBzdHJpbmcpOiB1bmtub3duW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDx1bmtub3duPigpO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIG51bWVyaWModmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGw7XG59XG5cbi8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGZyb20gdGhlIGRhdGEgZW5kcG9pbnQpLFxuLy8gb3IgbnVsbCB3aGVuIHRoZSB4LWF4aXMgaXNuJ3QgYSB0aW1lIGF4aXMg4oCUIGdhdGVzIHRoZSBjb21wYWN0IHBlcmlvZCBsYWJlbHMuXG5mdW5jdGlvbiBidWNrZXRHcmFudWxhcml0eShkYXRhOiBDb21wb25lbnREYXRhKTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwge1xuICByZXR1cm4gZGF0YS5ncmFudWxhcml0eSAmJiBCVUNLRVRfR1JBTlVMQVJJVElFUy5pbmNsdWRlcyhkYXRhLmdyYW51bGFyaXR5KSA/IGRhdGEuZ3JhbnVsYXJpdHkgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBwZXJpb2Qtc3RhcnQgY2F0ZWdvcmllcyBjcm9zcyBhIHllYXIgYm91bmRhcnkuIFdoZW4gdGhleSBkb24ndCxcbi8vIHRoZSB5ZWFyIGlzIHB1cmUgbm9pc2Ugb24gZXZlcnkgbGFiZWwsIHNvIGl0J3MgZHJvcHBlZCBlbnRpcmVseS5cbmV4cG9ydCBmdW5jdGlvbiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgeWVhcnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgICBpZiAoaXNWYWxpZChkYXRlKSkge1xuICAgICAgeWVhcnMuYWRkKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHllYXJzLnNpemUgPiAxO1xufVxuXG4vLyBBIGJ1Y2tldCdzIHBlcmlvZC1zdGFydCBzcGxpdCBpbnRvIGl0cyBwcmltYXJ5IGxhYmVsIGFuZCBpdHMgeWVhci4gRGF5L3dlZWtcbi8vIHJlYWQgYXMgXCJNYXkgMVwiLCBtb250aCBhcyBcIk1heVwiLCBxdWFydGVyIGFzIFwiUTJcIiwgeWVhciBhcyBcIjIwMjVcIi4gUmV0dXJucyBudWxsXG4vLyBmb3IgYSB2YWx1ZSB0aGF0IGlzbid0IGEgcGFyc2VhYmxlIGRhdGUgKGxlZnQgYXMtaXMgYnkgY2FsbGVycykuXG5mdW5jdGlvbiBwZXJpb2RMYWJlbFBhcnRzKHZhbHVlOiBzdHJpbmcsIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5KTogeyBwcmltYXJ5OiBzdHJpbmc7IHllYXI6IHN0cmluZyB9IHwgbnVsbCB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XG4gIGlmICghaXNWYWxpZChkYXRlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiBgUSR7TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDF9YCwgeWVhciB9O1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NTScpLCB5ZWFyIH07XG4gICAgZGVmYXVsdDogLy8gZGF5LCB3ZWVrIOKAlCB0aGUgYnVja2V0IHN0YXJ0IGFzIGEgY29tcGFjdCBcIk1NTSBkXCJcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NIGQnKSwgeWVhciB9O1xuICB9XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwgKHllYXIgYXBwZW5kZWQgb25seSB3aGVuIHRoZSBkYXRhIHNwYW5zXG4vLyB5ZWFycykg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkIHNlY29uZCBsaW5lLCBlLmcuIFBvd2VyUG9pbnQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwodmFsdWU6IHN0cmluZywgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksIG11bHRpWWVhcjogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZSwgZ3JhbnVsYXJpdHkpO1xuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG11bHRpWWVhciAmJiBncmFudWxhcml0eSAhPT0gJ3llYXInID8gYCR7cGFydHMucHJpbWFyeX0gJHtwYXJ0cy55ZWFyfWAgOiBwYXJ0cy5wcmltYXJ5O1xufVxuXG4vLyBFQ2hhcnRzIGNhdGVnb3J5LWF4aXMgbGFiZWwgY29uZmlnIGZvciBhIHRpbWUgYnVja2V0OiB0aGUgcHJpbWFyeSBsYWJlbCBvblxuLy8gbGluZSBvbmUsIGFuZCDigJQgb25seSB3aGVuIHRoZSBkYXRhIHNwYW5zIG11bHRpcGxlIHllYXJzIOKAlCB0aGUgeWVhciBvbiBhIHNtYWxsXG4vLyBncmF5IHNlY29uZCBsaW5lLCBjZW50ZXJlZCB1bmRlciB0aGUgdGljayAoeWVhciBncmFudWxhcml0eSBuZWVkcyBubyBzZWNvbmRcbi8vIGxpbmUsIGl0IGFscmVhZHkgaXMgdGhlIHllYXIpLiBFbXB0eSBmb3IgYSBub24tdGltZSBheGlzIChsYWJlbHMgYXMtaXMpLlxuZnVuY3Rpb24gcGVyaW9kQXhpc0xhYmVsKGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCwgY2F0ZWdvcmllczogc3RyaW5nW10pOiB7IGF4aXNMYWJlbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICBpZiAoIWdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgbXVsdGlZZWFyID0gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gIHJldHVybiB7XG4gICAgYXhpc0xhYmVsOiB7XG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZSwgZ3JhbnVsYXJpdHkpO1xuICAgICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG11bHRpWWVhciAmJiBncmFudWxhcml0eSAhPT0gJ3llYXInXG4gICAgICAgICAgPyBgJHtwYXJ0cy5wcmltYXJ5fVxcbnt5cnwke3BhcnRzLnllYXJ9fWBcbiAgICAgICAgICA6IHBhcnRzLnByaW1hcnk7XG4gICAgICB9LFxuICAgICAgcmljaDogeyB5cjogeyBmb250U2l6ZTogMTAsIGNvbG9yOiAnIzlhYTBhNicsIGxpbmVIZWlnaHQ6IDE0IH0gfSxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJELE9BQU8sRUFBZ0QsbUJBQW1CLEVBQW1DLE1BQU0sK0JBQStCLENBQUM7QUFHbkosNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRixzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFtQjtJQUMzQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDdEcsQ0FBQztBQVlELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUEwQixFQUFFLElBQW1CO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFxQixDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDM0MseUVBQXlFO0lBQ3pFLHNFQUFzRTtJQUN0RSwrRUFBK0U7SUFDL0UsTUFBTSxXQUFXLEdBQUcsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNO1FB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QUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxPQUFPO1FBQ0wsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxTQUFTLElBQUksV0FBVyxLQUFLLE1BQU07b0JBQ3hDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRztvQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRUNoYXJ0c09wdGlvbiwgTGVnZW5kQ29tcG9uZW50T3B0aW9uLCBTZXJpZXNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcblxuaW1wb3J0IHsgZm9ybWF0LCBpc1ZhbGlkLCBwYXJzZUlTTyB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgQ2hhcnRDb25maWcsIENoYXJ0R3JhbnVsYXJpdHksIENvbXBvbmVudERhdGEsIEdSQU5VTEFSSVRZX09QVElPTlMsIExlZ2VuZFBvc2l0aW9uLCBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gY29sb3JCeSBhcHBsaWVzIG9ubHkgdG8gc2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzLCBhbmQgb25seSB3aGVuIHNwbGl0Qnlcbi8vIGlzbid0IGFscmVhZHkgZHJpdmluZyBtdWx0aXBsZSBzZXJpZXM6IGl0IGNvbG9ycyBlYWNoIGJhciBieSBpdHMgY2F0ZWdvcnkgYW5kXG4vLyBzaG93cyBhIGxlZ2VuZCAob25lIHNlcmllcyBwZXIgY2F0ZWdvcnksIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCkuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckJ5KGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhY29uZmlnLmNvbG9yQnk/LmNvbHVtbiAmJiAhY29uZmlnLnNwbGl0Qnk/LmNvbHVtbiAmJiAoY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJykgPT09ICdiYXInO1xufVxuXG5cbi8vIENhdGVnb3JpZXMgKyBuYW1lZCBzZXJpZXMgZXh0cmFjdGVkIGZyb20gYSBjaGFydCBjb21wb25lbnQncyBjb25maWcgKyByb3dzIOKAlFxuLy8gdGhlIG9uZSBwaXZvdCAoc3BsaXRCeSDihpIgc2VyaWVzLCBtZWFzdXJlcyDihpIgc2VyaWVzKSBzaGFyZWQgYnkgdGhlIG9uLXNjcmVlblxuLy8gRUNoYXJ0cyBvcHRpb24gYmVsb3cgQU5EIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBkYXRhLCBzbyBib3RoXG4vLyBtZWRpYSBwbG90IGlkZW50aWNhbCBudW1iZXJzLlxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICBzZXJpZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeENvbHVtbiA9IGNvbmZpZy54QXhpcz8uY29sdW1uID8/IGRhdGEuY29sdW1uc1swXTtcbiAgY29uc3Qgc3BsaXRDb2x1bW4gPSBjb25maWcuc3BsaXRCeT8uY29sdW1uO1xuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IHRvbyAoc28gZWFjaCBiYXIgY2FycmllcyBpdHMgb3duXG4gIC8vIGNvbG9yICsgbGVnZW5kIGVudHJ5KSwgYnV0IHRoZSBiYXJzIGFyZSBvdmVybGFwcGVkIHRvIGZ1bGwgd2lkdGggaW5cbiAgLy8gYnVpbGRBeGlzT3B0aW9uIHJhdGhlciB0aGFuIGxhaWQgc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuICBjb25zdCBncm91cENvbHVtbiA9IHNwbGl0Q29sdW1uIHx8IChpc0NvbG9yQnkoY29uZmlnKSA/IGNvbmZpZy5jb2xvckJ5Py5jb2x1bW4gOiB1bmRlZmluZWQpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNvbmZpZy5tZWFzdXJlcz8ubGVuZ3RoXG4gICAgPyBjb25maWcubWVhc3VyZXNcbiAgICA6IFt7IGNvbHVtbjogZGF0YS5jb2x1bW5zW2RhdGEuY29sdW1ucy5sZW5ndGggLSAxXSB9XTtcblxuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IFN0cmluZyhjYXRlZ29yeSA/PyAn4oCUJykpO1xuICBjb25zdCBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzWydzZXJpZXMnXSA9IFtdO1xuXG4gIGlmIChncm91cENvbHVtbikge1xuICAgIC8vIE9uZSBzZXJpZXMgcGVyIGdyb3VwIHZhbHVlIChzcGxpdEJ5L2NvbG9yQnkpLCBwaXZvdGVkIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmUuXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVzWzBdO1xuICAgIGZvciAoY29uc3QgZ3JvdXBWYWx1ZSBvZiB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCBncm91cENvbHVtbikpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgaWYgKHJvd1tncm91cENvbHVtbl0gPT09IGdyb3VwVmFsdWUpIHtcbiAgICAgICAgICBieUNhdGVnb3J5LnNldChyb3dbeENvbHVtbl0sIHJvd1ttZWFzdXJlLmNvbHVtbl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlcmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogU3RyaW5nKGdyb3VwVmFsdWUgPz8gJ+KAlCcpLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG1lYXN1cmUgb2YgbWVhc3VyZXMpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgIH1cblxuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZWFzdXJlLmxhYmVsID8/IG1lYXN1cmUuY29sdW1uLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNhdGVnb3JpZXMsIHNlcmllcyB9O1xufVxuXG4vLyBUaGUgb25lIHB1cmUgbWFwcGluZyBmcm9tIG91ciBzdGFuZGFyZCBjYW1lbENhc2UgY2hhcnQgY29uZmlnICsgdGhlIGRhdGFcbi8vIGVuZHBvaW50J3Mgcm93cyB0byBhbiBFQ2hhcnRzIG9wdGlvbi4gRXZlcnl0aGluZyB2aXN1YWwgdGhhdCBpc24ndCBpbiB0aGVcbi8vIHJlZ2lzdGVyZWQgJ3JlcG9ydCcgdGhlbWUgaXMgZGVjaWRlZCBoZXJlLCBzbyByZXBvcnQgc3RhbmRhcmRzIGhhdmUgZXhhY3RseVxuLy8gdHdvIGhvbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hhcnRPcHRpb24oY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQXhpc09wdGlvbihjb21wb25lbnQsIGRhdGEsIGNoYXJ0VHlwZSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXhpc09wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNoYXJ0VHlwZTogJ2JhcicgfCAnbGluZScgfCAnYXJlYScsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuXG4gIC8vIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXIgY2F0ZWdvcnk7IG92ZXJsYXBwaW5nIHRoZW0gKGJhckdhcCAtMTAwJSkgbWFrZXNcbiAgLy8gZWFjaCByZW5kZXIgYXQgdGhlIGZ1bGwgY2F0ZWdvcnktYmFuZCB3aWR0aCDigJQgb25lIGZ1bGwtd2lkdGgsIGRpc3RpbmN0bHlcbiAgLy8gY29sb3JlZCBiYXIgcGVyIGNhdGVnb3J5IOKAlCBpbnN0ZWFkIG9mIHNpZGUtYnktc2lkZSBzbGl2ZXJzLiBUaGUgbGF5b3V0IHByb3BzXG4gIC8vIGFyZSByZWFkIGZyb20gdGhlIGZpcnN0IHNlcmllcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT5cbiAgICBidWlsZFNlcmllcyhleHRyYWN0ZWRTZXJpZXMubmFtZSwgZXh0cmFjdGVkU2VyaWVzLnZhbHVlcywgY2hhcnRUeXBlLCBjb25maWcuc3RhY2tlZCwgY29sb3JCeSAmJiBpbmRleCA9PT0gMCkpO1xuXG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG4gIGNvbnN0IGNhdGVnb3J5QXhpcyA9IHtcbiAgICB0eXBlOiAnY2F0ZWdvcnknIGFzIGNvbnN0LFxuICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLFxuICAgIG5hbWU6IGNvbmZpZy54QXhpcz8ubGFiZWwsXG4gICAgbmFtZUxvY2F0aW9uOiAnbWlkZGxlJyBhcyBjb25zdCxcbiAgICBuYW1lR2FwOiBncmFudWxhcml0eSAmJiBzcGFuc011bHRpcGxlWWVhcnMoZXh0cmFjdGVkLmNhdGVnb3JpZXMpID8gNDAgOiAyOCxcbiAgICAuLi5wZXJpb2RBeGlzTGFiZWwoZ3JhbnVsYXJpdHksIGV4dHJhY3RlZC5jYXRlZ29yaWVzKSxcbiAgfTtcbiAgY29uc3QgdmFsdWVBeGlzID0geyB0eXBlOiAndmFsdWUnIGFzIGNvbnN0IH07XG5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXMubGVuZ3RoLCBjb2xvckJ5KTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBsZWdlbmQ6IGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksXG4gICAgLy8gY29sb3JCeSBjaGFydHMgb3ZlcmxhcCBOIG1vc3RseS1udWxsIHNlcmllcywgc28gYW4gYXhpcyB0b29sdGlwIHdvdWxkIGxpc3RcbiAgICAvLyBldmVyeSBjYXRlZ29yeTsgYW4gaXRlbSB0b29sdGlwIHNob3dzIGp1c3QgdGhlIGhvdmVyZWQgYmFyLlxuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogY29sb3JCeSA/ICdpdGVtJyA6ICdheGlzJyB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllcyxcbiAgfTtcbn1cblxuLy8gRGVmYXVsdCBsZWdlbmQgcGxhY2VtZW50IHdoZW4gdGhlIGNvbmZpZyBkb2Vzbid0IHBpbiBvbmU6IHBpZSBjaGFydHMgcmVhZFxuLy8gYmVzdCB3aXRoIHRoZSBzbGljZSBrZXkgYmVzaWRlIHRoZW0gKHJpZ2h0KTsgYXhpcyBjaGFydHMgb25seSBuZWVkIGEgbGVnZW5kXG4vLyB0byB0ZWxsIG11bHRpcGxlIHNlcmllcyBhcGFydCwgc28gYSBzaW5nbGUtc2VyaWVzIGNoYXJ0IGhpZGVzIGl0LiBBbiBleHBsaWNpdFxuLy8gY29uZmlnLmxlZ2VuZCAoaW5jbHVkaW5nICdoaWRkZW4nKSBhbHdheXMgd2lucy4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnRcbi8vIGV4cG9ydCBzbyBib3RoIG1lZGlhIHBsYWNlIHRoZSBsZWdlbmQgaWRlbnRpY2FsbHkuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZzogQ2hhcnRDb25maWcsIHNlcmllc0NvdW50OiBudW1iZXIsIGNvbG9yQnkgPSBmYWxzZSk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgaWYgKGNvbmZpZy5sZWdlbmQpIHtcbiAgICByZXR1cm4gY29uZmlnLmxlZ2VuZDtcbiAgfVxuXG4gIGNvbnN0IHBpZSA9IGNvbmZpZy5jaGFydFR5cGUgPT09ICdwaWUnIHx8IGNvbmZpZy5jaGFydFR5cGUgPT09ICdkb251dCc7XG5cbiAgLy8gY29sb3JCeSBtYXBzIGVhY2ggYmFyJ3MgY29sb3IgdG8gaXRzIGNhdGVnb3J5LCBzbyBpdCBuZWVkcyBhIGxlZ2VuZCBldmVuXG4gIC8vIHRob3VnaCBpdCdzIGEgc2luZ2xlIG1lYXN1cmUuXG4gIHJldHVybiBwaWUgfHwgY29sb3JCeSB8fCBzZXJpZXNDb3VudCA+IDEgPyAocGllID8gJ3JpZ2h0JyA6ICd0b3AnKSA6ICdoaWRkZW4nO1xufVxuXG5mdW5jdGlvbiBsZWdlbmRPcHRpb24ocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgaWYgKHBvc2l0aW9uID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB7IHNob3c6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBiYXNlOiBMZWdlbmRDb21wb25lbnRPcHRpb24gPSB7IHR5cGU6ICdzY3JvbGwnIH07XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IDAgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgbGVmdDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgcmlnaHQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiAwIH07XG4gIH1cbn1cblxuLy8gUmVzZXJ2ZSBwbG90LWVkZ2Ugcm9vbSBvbiB3aGljaGV2ZXIgc2lkZSB0aGUgbGVnZW5kIG9jY3VwaWVzIHNvIGl0IG5ldmVyXG4vLyBvdmVybGFwcyB0aGUgYmFycy9saW5lczsgY29udGFpbkxhYmVsIGFscmVhZHkgYWNjb3VudHMgZm9yIHRoZSBheGlzIGxhYmVscy5cbmZ1bmN0aW9uIGF4aXNHcmlkKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IEVDaGFydHNPcHRpb25bJ2dyaWQnXSB7XG4gIGNvbnN0IGJhc2UgPSB7IGxlZnQ6IDgsIHJpZ2h0OiAxNiwgdG9wOiA4LCBib3R0b206IDgsIGNvbnRhaW5MYWJlbDogdHJ1ZSB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiAzMiB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgbGVmdDogOTYgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCByaWdodDogOTYgfTtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogMzIgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFNlcmllcyhcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICBjaGFydFR5cGU6ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnLFxuICBzdGFja2VkPzogYm9vbGVhbixcbiAgb3ZlcmxhcD86IGJvb2xlYW4sXG4pOiBTZXJpZXNPcHRpb24ge1xuICBpZiAoY2hhcnRUeXBlID09PSAnYmFyJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICBzdGFjazogc3RhY2tlZCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICAvLyBjb2xvckJ5OiBvdmVybGFwIHRoZSBwZXItY2F0ZWdvcnkgc2VyaWVzIHNvIGVhY2ggYmFyIHJlbmRlcnMgZnVsbC13aWR0aC5cbiAgICAgIC4uLihvdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgICBzdGFjazogc3RhY2tlZCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgc21vb3RoOiB0cnVlLFxuICAgIHN5bWJvbFNpemU6IDYsXG4gICAgYXJlYVN0eWxlOiBjaGFydFR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFBpZU9wdGlvbihjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSwgZG9udXQ6IGJvb2xlYW4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdpdGVtJyB9LFxuICAgIGxlZ2VuZDogbGVnZW5kT3B0aW9uKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBzZXJpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BpZScsXG4gICAgICAgIHJhZGl1czogZG9udXQgPyBbJzQ1JScsICc3MiUnXSA6ICc3MiUnLFxuICAgICAgICBjZW50ZXI6IHBpZUNlbnRlcihsZWdlbmRQb3NpdGlvbiksXG4gICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaW5kZXhdID8/IDAsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLy8gTnVkZ2UgdGhlIHBpZSBvZmYtY2VudGVyIHRvd2FyZCB0aGUgb3Bwb3NpdGUgZWRnZSBmcm9tIGl0cyBsZWdlbmQgc28gdGhlIHR3b1xuLy8gZG9uJ3QgY29sbGlkZTsgY2VudGVyZWQgd2hlbiB0aGUgbGVnZW5kIGlzIGhpZGRlbi5cbmZ1bmN0aW9uIHBpZUNlbnRlcihwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIFsnNjAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBbJzQwJScsICc1MCUnXTtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzU4JSddO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNDYlJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbJzUwJScsICc1MCUnXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmlxdWVWYWx1ZXMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uOiBzdHJpbmcpOiB1bmtub3duW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDx1bmtub3duPigpO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIG51bWVyaWModmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGw7XG59XG5cbi8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGZyb20gdGhlIGRhdGEgZW5kcG9pbnQpLFxuLy8gb3IgbnVsbCB3aGVuIHRoZSB4LWF4aXMgaXNuJ3QgYSB0aW1lIGF4aXMg4oCUIGdhdGVzIHRoZSBjb21wYWN0IHBlcmlvZCBsYWJlbHMuXG5mdW5jdGlvbiBidWNrZXRHcmFudWxhcml0eShkYXRhOiBDb21wb25lbnREYXRhKTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwge1xuICByZXR1cm4gZGF0YS5ncmFudWxhcml0eSAmJiBHUkFOVUxBUklUWV9PUFRJT05TLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBkYXRhLmdyYW51bGFyaXR5KVxuICAgID8gZGF0YS5ncmFudWxhcml0eVxuICAgIDogbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGUgcGVyaW9kLXN0YXJ0IGNhdGVnb3JpZXMgY3Jvc3MgYSB5ZWFyIGJvdW5kYXJ5LiBXaGVuIHRoZXkgZG9uJ3QsXG4vLyB0aGUgeWVhciBpcyBwdXJlIG5vaXNlIG9uIGV2ZXJ5IGxhYmVsLCBzbyBpdCdzIGRyb3BwZWQgZW50aXJlbHkuXG5leHBvcnQgZnVuY3Rpb24gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHllYXJzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyhjYXRlZ29yeSk7XG4gICAgaWYgKGlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgIHllYXJzLmFkZChkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB5ZWFycy5zaXplID4gMTtcbn1cblxuLy8gQSBidWNrZXQncyBwZXJpb2Qtc3RhcnQgc3BsaXQgaW50byBpdHMgcHJpbWFyeSBsYWJlbCBhbmQgaXRzIHllYXIuIERheS93ZWVrXG4vLyByZWFkIGFzIFwiTWF5IDFcIiwgbW9udGggYXMgXCJNYXlcIiwgcXVhcnRlciBhcyBcIlEyXCIsIHllYXIgYXMgXCIyMDI1XCIuIFJldHVybnMgbnVsbFxuLy8gZm9yIGEgdmFsdWUgdGhhdCBpc24ndCBhIHBhcnNlYWJsZSBkYXRlIChsZWZ0IGFzLWlzIGJ5IGNhbGxlcnMpLlxuZnVuY3Rpb24gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZTogc3RyaW5nLCBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSk6IHsgcHJpbWFyeTogc3RyaW5nOyB5ZWFyOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBkYXRlID0gcGFyc2VJU08odmFsdWUpO1xuICBpZiAoIWlzVmFsaWQoZGF0ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgc3dpdGNoIChncmFudWxhcml0eSkge1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIHsgcHJpbWFyeTogeWVhciwgeWVhciB9O1xuICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgcmV0dXJuIHsgcHJpbWFyeTogYFEke01hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxfWAsIHllYXIgfTtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiBmb3JtYXQoZGF0ZSwgJ01NTU0nKSwgeWVhciB9O1xuICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydCBhcyBhIGNvbXBhY3QgXCJNTU0gZFwiXG4gICAgICByZXR1cm4geyBwcmltYXJ5OiBmb3JtYXQoZGF0ZSwgJ01NTSBkJyksIHllYXIgfTtcbiAgfVxufVxuXG4vLyBBIGNvbXBhY3Qgc2luZ2xlLWxpbmUgcGVyaW9kIGxhYmVsICh5ZWFyIGFwcGVuZGVkIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFuc1xuLy8geWVhcnMpIOKAlCBmb3IgbWVkaWEgdGhhdCBjYW4ndCBkbyBhIHN0eWxlZCBzZWNvbmQgbGluZSwgZS5nLiBQb3dlclBvaW50LlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBlcmlvZExhYmVsKHZhbHVlOiBzdHJpbmcsIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LCBtdWx0aVllYXI6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5KTtcbiAgaWYgKCFwYXJ0cykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBtdWx0aVllYXIgJiYgZ3JhbnVsYXJpdHkgIT09ICd5ZWFyJyA/IGAke3BhcnRzLnByaW1hcnl9ICR7cGFydHMueWVhcn1gIDogcGFydHMucHJpbWFyeTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyKS4gRW1wdHkgZm9yIGEgbm9uLXRpbWUgYXhpcyAobGFiZWxzIGFzLWlzKS5cbmZ1bmN0aW9uIHBlcmlvZEF4aXNMYWJlbChncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsIGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgaWYgKCFwYXJ0cykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtdWx0aVllYXIgJiYgZ3JhbnVsYXJpdHkgIT09ICd5ZWFyJ1xuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -2,6 +2,7 @@ import { ItemType } from '@firestitch/filter';
|
|
|
2
2
|
import { format } from 'date-fns';
|
|
3
3
|
import { of } from 'rxjs';
|
|
4
4
|
import { map, shareReplay } from 'rxjs/operators';
|
|
5
|
+
import { GRANULARITY_OPTIONS, } from './interfaces/report.interface';
|
|
5
6
|
// A date-range boundary as the picked LOCAL calendar day (no time, no tz).
|
|
6
7
|
// Date-range filters are calendar-day semantics, so the boundary must carry
|
|
7
8
|
// only Y-M-D — never a timezone-bearing instant the backend would shift.
|
|
@@ -23,6 +24,12 @@ export function dateBoundString(value) {
|
|
|
23
24
|
// the group-keyed path for charts/KPIs and the report bar.)
|
|
24
25
|
// The query key fs-filter uses for a group's item(s).
|
|
25
26
|
const itemName = (group) => `g${group.id}`;
|
|
27
|
+
// The query key for the report's group-by control. Fixed rather than derived
|
|
28
|
+
// from an id because a report has exactly one — and it is NOT a filter group,
|
|
29
|
+
// so it is read straight off the change query instead of through
|
|
30
|
+
// groupValuesFromQuery. Client-side only: the grain travels to the server as
|
|
31
|
+
// the data request's `state.frequency`.
|
|
32
|
+
export const GROUP_BY_ITEM = 'groupBy';
|
|
26
33
|
// A select group's distinct options, as { name, value } pairs. The server sends
|
|
27
34
|
// { value, label }: the value is what the filter matches on (an entity's stable
|
|
28
35
|
// id) and the label is what the viewer reads — so a renamed entity keeps its id
|
|
@@ -104,6 +111,65 @@ export function filterItemForGroup(group, reportData, reportId, initial) {
|
|
|
104
111
|
};
|
|
105
112
|
}
|
|
106
113
|
}
|
|
114
|
+
// Whether the report has a chart the group-by control can re-bucket. A time
|
|
115
|
+
// x-axis is the whole qualification: the control changes the grain of that
|
|
116
|
+
// axis, and a category axis has no grain to change.
|
|
117
|
+
export function hasTimeSeriesChart(report) {
|
|
118
|
+
return (report?.pages ?? []).some((page) => (page.components ?? []).some((component) => component.type === 'chart' && component.config?.xAxis?.kind === 'time'));
|
|
119
|
+
}
|
|
120
|
+
// The grains the report's group-by control offers, named for the viewer. WHICH
|
|
121
|
+
// of them comes from the report; how they read comes from GRANULARITY_OPTIONS.
|
|
122
|
+
// An empty stored list means every grain — the same rule the backend applies.
|
|
123
|
+
function groupByOptions(report) {
|
|
124
|
+
const granularities = report.config?.groupBy?.granularities ?? [];
|
|
125
|
+
return granularities.length
|
|
126
|
+
? GRANULARITY_OPTIONS.filter((option) => granularities.includes(option.value))
|
|
127
|
+
: GRANULARITY_OPTIONS;
|
|
128
|
+
}
|
|
129
|
+
// Whether a grain is one the report's control still offers. A grain it doesn't
|
|
130
|
+
// cannot stay in effect: the agent can narrow the list at any time, and a chart
|
|
131
|
+
// left bucketing at a dropped grain is one the viewer can neither see nor change.
|
|
132
|
+
export function isGranularityOffered(report, granularity) {
|
|
133
|
+
return !granularity || groupByOptions(report).some((option) => option.value === granularity);
|
|
134
|
+
}
|
|
135
|
+
// The fs-filter config item for the report's group-by control, or null when the
|
|
136
|
+
// report has none to show.
|
|
137
|
+
//
|
|
138
|
+
// It leads the same bar the filters render in, but it is NOT one: a filter
|
|
139
|
+
// narrows WHICH rows are counted, this changes how the surviving rows are
|
|
140
|
+
// BUCKETED — and it comes first because the grain is what a viewer settles
|
|
141
|
+
// before deciding which rows they want.
|
|
142
|
+
// Picking a grain sets a session-wide override that rides along in each chart's
|
|
143
|
+
// data request, so the charts themselves are never rewritten.
|
|
144
|
+
export function groupByFilterItem(report, initial) {
|
|
145
|
+
const groupBy = report.config?.groupBy;
|
|
146
|
+
// Only an EXPLICIT false hides the control. An absent block means a report
|
|
147
|
+
// served by a build that predates the control being stored, and every one of
|
|
148
|
+
// those had one — the backend resolves it the same way (ReportGroupBy).
|
|
149
|
+
if (groupBy?.enabled === false || !hasTimeSeriesChart(report)) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const values = groupByOptions(report);
|
|
153
|
+
return {
|
|
154
|
+
name: GROUP_BY_ITEM,
|
|
155
|
+
type: ItemType.Select,
|
|
156
|
+
label: groupBy?.label || 'Group By',
|
|
157
|
+
multiple: false,
|
|
158
|
+
values: () => values,
|
|
159
|
+
default: isGranularityOffered(report, initial ?? null) ? (initial ?? undefined) : undefined,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// The group-by control's contribution to the toolbar's fs-filter key. fs-filter
|
|
163
|
+
// reads its config once at init, and the agent can change the control's label
|
|
164
|
+
// or the grains it offers — without those in the key the bar keeps rendering
|
|
165
|
+
// the control it was created with until a full page reload.
|
|
166
|
+
export function groupBySignature(report) {
|
|
167
|
+
if (!report || !groupByFilterItem(report)) {
|
|
168
|
+
return '';
|
|
169
|
+
}
|
|
170
|
+
const groupBy = report.config?.groupBy;
|
|
171
|
+
return ['groupBy', groupBy?.label ?? '', (groupBy?.granularities ?? []).join(',')].join(':');
|
|
172
|
+
}
|
|
107
173
|
// Read an fs-filter change query into per-group values. Returns one entry per
|
|
108
174
|
// group with the value to store (or null to clear) — callers feed these to
|
|
109
175
|
// ReportFilterStateService.setValue.
|
|
@@ -140,4 +206,4 @@ function selectQueryValues(raw) {
|
|
|
140
206
|
}
|
|
141
207
|
return String(raw).split(',');
|
|
142
208
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1pdGVtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9yZXBvcnQtZmlsdGVyLWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNbEQsMkVBQTJFO0FBQzNFLDRFQUE0RTtBQUM1RSx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUF1QztJQUNyRSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSw4QkFBOEI7SUFDOUIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDeEQsQ0FBQztBQUdELDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSxpRUFBaUU7QUFDakUsRUFBRTtBQUNGLGdGQUFnRjtBQUNoRiw0REFBNEQ7QUFFNUQsc0RBQXNEO0FBQ3RELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBd0IsRUFBVSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFdEUsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLDZFQUE2RTtBQUM3RSwr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T0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsdUZBQXVGO0FBQ3ZGLGlGQUFpRjtBQUNqRixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLFNBQVMsaUJBQWlCLENBQUMsR0FBWTtJQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlsdGVyQ29uZmlnSXRlbSwgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuXG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IEZpbHRlckdyb3VwVmFsdWUsIFJlcG9ydEZpbHRlckdyb3VwLCBSZXBvcnRGaWx0ZXJPcHRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gQSBkYXRlLXJhbmdlIGJvdW5kYXJ5IGFzIHRoZSBwaWNrZWQgTE9DQUwgY2FsZW5kYXIgZGF5IChubyB0aW1lLCBubyB0eikuXG4vLyBEYXRlLXJhbmdlIGZpbHRlcnMgYXJlIGNhbGVuZGFyLWRheSBzZW1hbnRpY3MsIHNvIHRoZSBib3VuZGFyeSBtdXN0IGNhcnJ5XG4vLyBvbmx5IFktTS1EIOKAlCBuZXZlciBhIHRpbWV6b25lLWJlYXJpbmcgaW5zdGFudCB0aGUgYmFja2VuZCB3b3VsZCBzaGlmdC5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlQm91bmRTdHJpbmcodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBmb3JtYXQodmFsdWUsICd5eXl5LU1NLWRkJyk7XG4gIH1cblxuICAvLyBBdXRob3JlZC9yZWxhdGl2ZSBkZWZhdWx0cyBhcnJpdmUgYXMgc3RyaW5ncyBhbHJlYWR5IGluIFktTS1EIGZvcm07XG4gIC8vIGtlZXAganVzdCB0aGUgZGF0ZSBwb3J0aW9uLlxuICByZXR1cm4gdmFsdWUgPyBTdHJpbmcodmFsdWUpLnNsaWNlKDAsIDEwKSA6IHVuZGVmaW5lZDtcbn1cblxuXG4vLyBNYXBzIGEgcmVwb3J0IGZpbHRlciBHUk9VUCB0byBhbiBmcy1maWx0ZXIgY29uZmlnIGl0ZW0sIGFuZCByZWFkcyBmcy1maWx0ZXJcbi8vIHF1ZXJ5IHZhbHVlcyBiYWNrIGludG8gcGVyLWdyb3VwIEZpbHRlckdyb3VwVmFsdWVzLiBTaGFyZWQgYnkgdGhlIHJlcG9ydC1iYXJcbi8vIGZzLWZpbHRlciBhbmQgdGhlIHBlci1jb21wb25lbnQgZnMtZmlsdGVyIHNvIGJvdGggcmVuZGVyIHRocm91Z2ggdGhlIHNhbWVcbi8vIGxpYnJhcnkgYW5kIHdyaXRlIGludG8gUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlIGlkZW50aWNhbGx5LiBJdGVtcyBhcmUgbmFtZWRcbi8vIGBnPGdyb3VwSWQ+YCBzbyB0aGUgcXVlcnkga2V5cyBtYXAgc3RyYWlnaHQgYmFjayB0byB0aGUgZ3JvdXAuXG4vL1xuLy8gKExpc3RzIGtlZXAgdGhlaXIgb3duIGZpbHRlcnMgaW4gRnNMaXN0IGFuZCBuYW1lIGl0ZW1zIGBmPGZpbHRlcklkPmA7IHRoaXMgaXNcbi8vIHRoZSBncm91cC1rZXllZCBwYXRoIGZvciBjaGFydHMvS1BJcyBhbmQgdGhlIHJlcG9ydCBiYXIuKVxuXG4vLyBUaGUgcXVlcnkga2V5IGZzLWZpbHRlciB1c2VzIGZvciBhIGdyb3VwJ3MgaXRlbShzKS5cbmNvbnN0IGl0ZW1OYW1lID0gKGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCk6IHN0cmluZyA9PiBgZyR7Z3JvdXAuaWR9YDtcblxuLy8gQSBzZWxlY3QgZ3JvdXAncyBkaXN0aW5jdCBvcHRpb25zLCBhcyB7IG5hbWUsIHZhbHVlIH0gcGFpcnMuIFRoZSBzZXJ2ZXIgc2VuZHNcbi8vIHsgdmFsdWUsIGxhYmVsIH06IHRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbiAoYW4gZW50aXR5J3Mgc3RhYmxlXG4vLyBpZCkgYW5kIHRoZSBsYWJlbCBpcyB3aGF0IHRoZSB2aWV3ZXIgcmVhZHMg4oCUIHNvIGEgcmVuYW1lZCBlbnRpdHkga2VlcHMgaXRzIGlkXG4vLyBhbmQgc2ltcGx5IHNob3dzIGl0cyBuZXcgbmFtZSBoZXJlLiBPcHRpb25zIGNvbWUgZnJvbSB0aGUgZmlyc3QgbWVtYmVyIGZpbHRlclxuLy8gdGhhdCBkZWNsYXJlcyB0aGVtIOKAlCBtZW1iZXJzIGFyZSB0aGUgc2FtZSBkYXRhIHBvaW50LCBzbyBhbnkgbWVtYmVyJ3MgbGlzdFxuLy8gc2VydmVzIHRoZSBncm91cC4gVGhlIGxpc3QgaXMgZmV0Y2hlZCBvbmNlICh0aGUgc2VydmVyIGNhcHMgaXQpIGFuZCByZXBsYXllZFxuLy8gKHNoYXJlUmVwbGF5KSwgc28gcmVwZWF0ZWQgcmVhZHMgbmV2ZXIgcmVmZXRjaC4gU2hhcmVkIGJ5IHRoZSByZXBvcnQtYmFyXG4vLyBzZWxlY3QgY29udHJvbCBhbmQgdGhlIHJlcG9ydC1zZXR0aW5ncyBkZWZhdWx0IHBpY2tlciBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuLy8gUmV0dXJucyBhbiBlbXB0eSBsaXN0IHdoZW4gbm8gbWVtYmVyIHByb3ZpZGVzIG9wdGlvbnMuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEdyb3VwT3B0aW9ucyhcbiAgZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwLFxuICByZXBvcnREYXRhOiBSZXBvcnREYXRhLFxuICByZXBvcnRJZDogbnVtYmVyLFxuKTogT2JzZXJ2YWJsZTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdPiB7XG4gIGNvbnN0IG9wdGlvbkZpbHRlciA9IChncm91cC5maWx0ZXJzID8/IFtdKS5maW5kKChtZW1iZXIpID0+IG1lbWJlci5oYXNPcHRpb25zKTtcbiAgaWYgKCFvcHRpb25GaWx0ZXIpIHtcbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgcmV0dXJuIHJlcG9ydERhdGEuZmlsdGVyT3B0aW9ucyhyZXBvcnRJZCwgb3B0aW9uRmlsdGVyLmlkKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChvcHRpb25zOiBSZXBvcnRGaWx0ZXJPcHRpb25bXSkgPT4gKG9wdGlvbnMgPz8gW10pXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gKHsgbmFtZTogb3B0aW9uLmxhYmVsLCB2YWx1ZTogb3B0aW9uLnZhbHVlIH0pKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiBmYWxzZSB9KSxcbiAgICApO1xufVxuXG4vLyBTdG9yZWQgZmlsdGVyIHZhbHVlcyAoaWRzKSBwYWlyZWQgYmFjayB3aXRoIHRoZSBsYWJlbHMgdG8gc2hvdyBmb3IgdGhlbS5cbi8vIEEgc2F2ZWQgZGVmYXVsdCBob2xkcyBvbmx5IHZhbHVlcywgc28gdGhlIG5hbWVzIGhhdmUgdG8gYmUgcmVhZCBiYWNrIG9mZiB0aGVcbi8vIG9wdGlvbiBsaXN0IOKAlCB0aGF0IGluZGlyZWN0aW9uIGlzIGV4YWN0bHkgd2hhdCBzdXJ2aXZlcyBhIHJlbmFtZS4gQSB2YWx1ZSB3aXRoXG4vLyBubyBtYXRjaGluZyBvcHRpb24gKGl0cyBlbnRpdHkgd2FzIGRlbGV0ZWQsIHNvIGl0IGlzIG5vIGxvbmdlciBsaXN0ZWQpIGZhbGxzXG4vLyBiYWNrIHRvIHNob3dpbmcgdGhlIHJhdyB2YWx1ZSByYXRoZXIgdGhhbiBkcm9wcGluZyB0aGUgY2hpcCwgd2hpY2ggd291bGRcbi8vIHNpbGVudGx5IHdpZGVuIHRoZSBmaWx0ZXIuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvblZhbHVlcyhcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT4sXG4gIHZhbHVlczogdW5rbm93bltdLFxuKTogT2JzZXJ2YWJsZTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdPiB7XG4gIHJldHVybiBvcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKGNhbmRpZGF0ZSkgPT4gU3RyaW5nKGNhbmRpZGF0ZS52YWx1ZSkgPT09IFN0cmluZyh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHsgbmFtZTogb3B0aW9uPy5uYW1lID8/IFN0cmluZyh2YWx1ZSksIHZhbHVlIH07XG4gIH0pKSk7XG59XG5cbi8vIENhc2UtaW5zZW5zaXRpdmUgbmFtZSBmaWx0ZXIgYXBwbGllZCB0byBhIGxvYWRlZCBvcHRpb24gbGlzdCDigJQgdGhlIHR5cGVkXG4vLyBrZXl3b3JkIGhhcyB0byBiZSBtYXRjaGVkIGhlcmUgYmVjYXVzZSBmcy1hdXRvY29tcGxldGUgcmVuZGVycyB3aGF0IHdlIHJldHVyblxuLy8gdmVyYmF0aW0uXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hPcHRpb25zKFxuICBvcHRpb25zJDogT2JzZXJ2YWJsZTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdPixcbiAga2V5d29yZD86IHN0cmluZyxcbik6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT4ge1xuICBjb25zdCB0ZXJtID0gKGtleXdvcmQgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiBvcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gdGVybVxuICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSlcbiAgICA6IG9wdGlvbnMpKTtcbn1cblxuLy8gQnVpbGQgdGhlIGZzLWZpbHRlciBjb25maWcgaXRlbSBmb3IgYSBncm91cCwgc2VlZGluZyBpdHMgZGVmYXVsdCBmcm9tIHRoZVxuLy8gY3VycmVudCBzZXNzaW9uIHZhbHVlIHNvIGF1dGhvcmVkL3JlbGF0aXZlIGRlZmF1bHRzIHNob3cgc2VsZWN0ZWQgb24gb3Blbi5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJJdGVtRm9yR3JvdXAoXG4gIGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgcmVwb3J0RGF0YTogUmVwb3J0RGF0YSxcbiAgcmVwb3J0SWQ6IG51bWJlcixcbiAgaW5pdGlhbD86IEZpbHRlckdyb3VwVmFsdWUsXG4pOiBJRmlsdGVyQ29uZmlnSXRlbSB7XG4gIGNvbnN0IG5hbWUgPSBpdGVtTmFtZShncm91cCk7XG4gIGNvbnN0IGxhYmVsID0gZ3JvdXAubGFiZWwgfHwgZ3JvdXAuZmlsdGVycz8uWzBdPy5maWx0ZXJDb2x1bW4gfHwgJyc7XG5cbiAgc3dpdGNoIChncm91cC50eXBlKSB7XG4gICAgY2FzZSAnZGF0ZVJhbmdlJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgbGFiZWw6IHsgZnJvbTogYCR7bGFiZWx9IEZyb21gLCB0bzogYCR7bGFiZWx9IFRvYCB9LFxuICAgICAgICBkZWZhdWx0OiAoaW5pdGlhbD8uc3RhcnQgfHwgaW5pdGlhbD8uZW5kKVxuICAgICAgICAgID8geyBmcm9tOiBpbml0aWFsLnN0YXJ0ID8/IHVuZGVmaW5lZCwgdG86IGluaXRpYWwuZW5kID8/IHVuZGVmaW5lZCB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgY2FzZSAnc2VsZWN0Jzoge1xuICAgICAgLy8gT25lIHNoYXJlZCwgcmVwbGF5ZWQgb3B0aW9uIHN0cmVhbSBzbyB0eXBpbmcgbmV2ZXIgcmVmZXRjaGVzLlxuICAgICAgY29uc3Qgb3B0aW9ucyQgPSBsb2FkR3JvdXBPcHRpb25zKGdyb3VwLCByZXBvcnREYXRhLCByZXBvcnRJZCk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBpbml0aWFsPy52YWx1ZXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6IEl0ZW1UeXBlLkF1dG9Db21wbGV0ZUNoaXBzLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgZmV0Y2hPbkZvY3VzOiB0cnVlLFxuICAgICAgICB2YWx1ZXM6IChrZXl3b3JkPzogc3RyaW5nKSA9PiBtYXRjaE9wdGlvbnMob3B0aW9ucyQsIGtleXdvcmQpLFxuICAgICAgICAvLyBTdG9yZWQgdmFsdWVzIGFyZSBpZHMsIHNvIHRoZSBjaGlwcyBjYW4gb25seSBiZSBuYW1lZCBvbmNlIHRoZSBvcHRpb25cbiAgICAgICAgLy8gbGlzdCBoYXMgbG9hZGVkIOKAlCBoZW5jZSB0aGUgb2JzZXJ2YWJsZSBmb3JtIG9mIGBkZWZhdWx0YC5cbiAgICAgICAgZGVmYXVsdDogdmFsdWVzPy5sZW5ndGhcbiAgICAgICAgICA/ICgpID0+IHJlc29sdmVPcHRpb25WYWx1ZXMob3B0aW9ucyQsIHZhbHVlcylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAna2V5d29yZCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBkZWZhdWx0OiBpbml0aWFsPy52YWx1ZSxcbiAgICAgIH07XG4gIH1cbn1cblxuLy8gUmVhZCBhbiBmcy1maWx0ZXIgY2hhbmdlIHF1ZXJ5IGludG8gcGVyLWdyb3VwIHZhbHVlcy4gUmV0dXJucyBvbmUgZW50cnkgcGVyXG4vLyBncm91cCB3aXRoIHRoZSB2YWx1ZSB0byBzdG9yZSAob3IgbnVsbCB0byBjbGVhcikg4oCUIGNhbGxlcnMgZmVlZCB0aGVzZSB0b1xuLy8gUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLnNldFZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5KFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgYW55PixcbiAgZ3JvdXBzOiBSZXBvcnRGaWx0ZXJHcm91cFtdLFxuKTogeyBncm91cElkOiBudW1iZXI7IHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCB9W10ge1xuICByZXR1cm4gZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHtcbiAgICBjb25zdCBuYW1lID0gaXRlbU5hbWUoZ3JvdXApO1xuXG4gICAgaWYgKGdyb3VwLnR5cGUgPT09ICdkYXRlUmFuZ2UnKSB7XG4gICAgICBjb25zdCBzdGFydCA9IHF1ZXJ5W2Ake25hbWV9RnJvbWBdO1xuICAgICAgY29uc3QgZW5kID0gcXVlcnlbYCR7bmFtZX1Ub2BdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkOiBncm91cC5pZCxcbiAgICAgICAgdmFsdWU6IChzdGFydCB8fCBlbmQpID8geyBzdGFydDogc3RhcnQgfHwgbnVsbCwgZW5kOiBlbmQgfHwgbnVsbCB9IDogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBzZWxlY3RRdWVyeVZhbHVlcyhxdWVyeVtuYW1lXSk7XG5cbiAgICAgIHJldHVybiB7IGdyb3VwSWQ6IGdyb3VwLmlkLCB2YWx1ZTogdmFsdWVzLmxlbmd0aCA/IHsgdmFsdWVzIH0gOiBudWxsIH07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5d29yZCA9IFN0cmluZyhxdWVyeVtuYW1lXSA/PyAnJykudHJpbSgpO1xuXG4gICAgcmV0dXJuIHsgZ3JvdXBJZDogZ3JvdXAuaWQsIHZhbHVlOiBrZXl3b3JkID8geyB2YWx1ZToga2V5d29yZCB9IDogbnVsbCB9O1xuICB9KTtcbn1cblxuLy8gZnMtZmlsdGVyJ3MgQXV0b0NvbXBsZXRlQ2hpcHMgc2VyaWFsaXNlcyBhIG11bHRpLXNlbGVjdCBpbnRvIE9ORSBxdWVyeSB2YWx1ZTpcbi8vIHRoZSBzZWxlY3RlZCB2YWx1ZXMgam9pbmVkIGJ5IFwiLFwiIChpdHMgYHF1ZXJ5YCBnZXR0ZXIgZG9lcyBgLm1hcCh2YWx1ZSkuam9pbignLCcpYCkuXG4vLyBTbyBhIDIrIHNlbGVjdGlvbiBhcnJpdmVzIGFzIHRoZSBzdHJpbmcgXCJhLGJcIiwgbm90IGFuIGFycmF5IOKAlCBzcGxpdHRpbmcgb24gXCIsXCJcbi8vIHJldmVyc2VzIHRoYXQgZmFpdGhmdWxseS4gV2l0aG91dCB0aGlzLCBhIG11bHRpLXNlbGVjdCB3YXMgc2VudCBhcyB0aGUgc2luZ2xlXG4vLyB2YWx1ZSBbXCJhLGJcIl0sIHByb2R1Y2luZyBgY29sIElOICgnYSxiJylgIHNlcnZlci1zaWRlLCB3aGljaCBtYXRjaGVzIG5vdGhpbmcuXG5mdW5jdGlvbiBzZWxlY3RRdWVyeVZhbHVlcyhyYXc6IHVua25vd24pOiB1bmtub3duW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShyYXcpKSB7XG4gICAgcmV0dXJuIHJhdztcbiAgfVxuXG4gIGlmIChyYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcocmF3KS5zcGxpdCgnLCcpO1xufVxuIl19
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1pdGVtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9yZXBvcnQtZmlsdGVyLWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEQsT0FBTyxFQUMrQixtQkFBbUIsR0FDeEQsTUFBTSwrQkFBK0IsQ0FBQztBQUd2QywyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQXVDO0lBQ3JFLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLDhCQUE4QjtJQUM5QixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN4RCxDQUFDO0FBR0QsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLGlFQUFpRTtBQUNqRSxFQUFFO0FBQ0YsZ0ZBQWdGO0FBQ2hGLDREQUE0RDtBQUU1RCxzREFBc0Q7QUFDdEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUF3QixFQUFVLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUV0RSw2RUFBNkU7QUFDN0UsOEVBQThF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bnRlbnQiOlsiaW1wb3J0IHsgSUZpbHRlckNvbmZpZ0l0ZW0sIEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcblxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQge1xuICBDaGFydEdyYW51bGFyaXR5LCBGaWx0ZXJHcm91cFZhbHVlLCBHUkFOVUxBUklUWV9PUFRJT05TLCBSZXBvcnQsIFJlcG9ydEZpbHRlckdyb3VwLCBSZXBvcnRGaWx0ZXJPcHRpb24sXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBBIGRhdGUtcmFuZ2UgYm91bmRhcnkgYXMgdGhlIHBpY2tlZCBMT0NBTCBjYWxlbmRhciBkYXkgKG5vIHRpbWUsIG5vIHR6KS5cbi8vIERhdGUtcmFuZ2UgZmlsdGVycyBhcmUgY2FsZW5kYXItZGF5IHNlbWFudGljcywgc28gdGhlIGJvdW5kYXJ5IG11c3QgY2Fycnlcbi8vIG9ubHkgWS1NLUQg4oCUIG5ldmVyIGEgdGltZXpvbmUtYmVhcmluZyBpbnN0YW50IHRoZSBiYWNrZW5kIHdvdWxkIHNoaWZ0LlxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVCb3VuZFN0cmluZyh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgfVxuXG4gIC8vIEF1dGhvcmVkL3JlbGF0aXZlIGRlZmF1bHRzIGFycml2ZSBhcyBzdHJpbmdzIGFscmVhZHkgaW4gWS1NLUQgZm9ybTtcbiAgLy8ga2VlcCBqdXN0IHRoZSBkYXRlIHBvcnRpb24uXG4gIHJldHVybiB2YWx1ZSA/IFN0cmluZyh2YWx1ZSkuc2xpY2UoMCwgMTApIDogdW5kZWZpbmVkO1xufVxuXG5cbi8vIE1hcHMgYSByZXBvcnQgZmlsdGVyIEdST1VQIHRvIGFuIGZzLWZpbHRlciBjb25maWcgaXRlbSwgYW5kIHJlYWRzIGZzLWZpbHRlclxuLy8gcXVlcnkgdmFsdWVzIGJhY2sgaW50byBwZXItZ3JvdXAgRmlsdGVyR3JvdXBWYWx1ZXMuIFNoYXJlZCBieSB0aGUgcmVwb3J0LWJhclxuLy8gZnMtZmlsdGVyIGFuZCB0aGUgcGVyLWNvbXBvbmVudCBmcy1maWx0ZXIgc28gYm90aCByZW5kZXIgdGhyb3VnaCB0aGUgc2FtZVxuLy8gbGlicmFyeSBhbmQgd3JpdGUgaW50byBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgaWRlbnRpY2FsbHkuIEl0ZW1zIGFyZSBuYW1lZFxuLy8gYGc8Z3JvdXBJZD5gIHNvIHRoZSBxdWVyeSBrZXlzIG1hcCBzdHJhaWdodCBiYWNrIHRvIHRoZSBncm91cC5cbi8vXG4vLyAoTGlzdHMga2VlcCB0aGVpciBvd24gZmlsdGVycyBpbiBGc0xpc3QgYW5kIG5hbWUgaXRlbXMgYGY8ZmlsdGVySWQ+YDsgdGhpcyBpc1xuLy8gdGhlIGdyb3VwLWtleWVkIHBhdGggZm9yIGNoYXJ0cy9LUElzIGFuZCB0aGUgcmVwb3J0IGJhci4pXG5cbi8vIFRoZSBxdWVyeSBrZXkgZnMtZmlsdGVyIHVzZXMgZm9yIGEgZ3JvdXAncyBpdGVtKHMpLlxuY29uc3QgaXRlbU5hbWUgPSAoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwKTogc3RyaW5nID0+IGBnJHtncm91cC5pZH1gO1xuXG4vLyBUaGUgcXVlcnkga2V5IGZvciB0aGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbC4gRml4ZWQgcmF0aGVyIHRoYW4gZGVyaXZlZFxuLy8gZnJvbSBhbiBpZCBiZWNhdXNlIGEgcmVwb3J0IGhhcyBleGFjdGx5IG9uZSDigJQgYW5kIGl0IGlzIE5PVCBhIGZpbHRlciBncm91cCxcbi8vIHNvIGl0IGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBjaGFuZ2UgcXVlcnkgaW5zdGVhZCBvZiB0aHJvdWdoXG4vLyBncm91cFZhbHVlc0Zyb21RdWVyeS4gQ2xpZW50LXNpZGUgb25seTogdGhlIGdyYWluIHRyYXZlbHMgdG8gdGhlIHNlcnZlciBhc1xuLy8gdGhlIGRhdGEgcmVxdWVzdCdzIGBzdGF0ZS5mcmVxdWVuY3lgLlxuZXhwb3J0IGNvbnN0IEdST1VQX0JZX0lURU0gPSAnZ3JvdXBCeSc7XG5cbi8vIEEgc2VsZWN0IGdyb3VwJ3MgZGlzdGluY3Qgb3B0aW9ucywgYXMgeyBuYW1lLCB2YWx1ZSB9IHBhaXJzLiBUaGUgc2VydmVyIHNlbmRzXG4vLyB7IHZhbHVlLCBsYWJlbCB9OiB0aGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyIG1hdGNoZXMgb24gKGFuIGVudGl0eSdzIHN0YWJsZVxuLy8gaWQpIGFuZCB0aGUgbGFiZWwgaXMgd2hhdCB0aGUgdmlld2VyIHJlYWRzIOKAlCBzbyBhIHJlbmFtZWQgZW50aXR5IGtlZXBzIGl0cyBpZFxuLy8gYW5kIHNpbXBseSBzaG93cyBpdHMgbmV3IG5hbWUgaGVyZS4gT3B0aW9ucyBjb21lIGZyb20gdGhlIGZpcnN0IG1lbWJlciBmaWx0ZXJcbi8vIHRoYXQgZGVjbGFyZXMgdGhlbSDigJQgbWVtYmVycyBhcmUgdGhlIHNhbWUgZGF0YSBwb2ludCwgc28gYW55IG1lbWJlcidzIGxpc3Rcbi8vIHNlcnZlcyB0aGUgZ3JvdXAuIFRoZSBsaXN0IGlzIGZldGNoZWQgb25jZSAodGhlIHNlcnZlciBjYXBzIGl0KSBhbmQgcmVwbGF5ZWRcbi8vIChzaGFyZVJlcGxheSksIHNvIHJlcGVhdGVkIHJlYWRzIG5ldmVyIHJlZmV0Y2guIFNoYXJlZCBieSB0aGUgcmVwb3J0LWJhclxuLy8gc2VsZWN0IGNvbnRyb2wgYW5kIHRoZSByZXBvcnQtc2V0dGluZ3MgZGVmYXVsdCBwaWNrZXIgc28gdGhlIHR3byBuZXZlciBkcmlmdC5cbi8vIFJldHVybnMgYW4gZW1wdHkgbGlzdCB3aGVuIG5vIG1lbWJlciBwcm92aWRlcyBvcHRpb25zLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRHcm91cE9wdGlvbnMoXG4gIGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgcmVwb3J0RGF0YTogUmVwb3J0RGF0YSxcbiAgcmVwb3J0SWQ6IG51bWJlcixcbik6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT4ge1xuICBjb25zdCBvcHRpb25GaWx0ZXIgPSAoZ3JvdXAuZmlsdGVycyA/PyBbXSkuZmluZCgobWVtYmVyKSA9PiBtZW1iZXIuaGFzT3B0aW9ucyk7XG4gIGlmICghb3B0aW9uRmlsdGVyKSB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIHJldHVybiByZXBvcnREYXRhLmZpbHRlck9wdGlvbnMocmVwb3J0SWQsIG9wdGlvbkZpbHRlci5pZClcbiAgICAucGlwZShcbiAgICAgIG1hcCgob3B0aW9uczogUmVwb3J0RmlsdGVyT3B0aW9uW10pID0+IChvcHRpb25zID8/IFtdKVxuICAgICAgICAubWFwKChvcHRpb24pID0+ICh7IG5hbWU6IG9wdGlvbi5sYWJlbCwgdmFsdWU6IG9wdGlvbi52YWx1ZSB9KSkpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSksXG4gICAgKTtcbn1cblxuLy8gU3RvcmVkIGZpbHRlciB2YWx1ZXMgKGlkcykgcGFpcmVkIGJhY2sgd2l0aCB0aGUgbGFiZWxzIHRvIHNob3cgZm9yIHRoZW0uXG4vLyBBIHNhdmVkIGRlZmF1bHQgaG9sZHMgb25seSB2YWx1ZXMsIHNvIHRoZSBuYW1lcyBoYXZlIHRvIGJlIHJlYWQgYmFjayBvZmYgdGhlXG4vLyBvcHRpb24gbGlzdCDigJQgdGhhdCBpbmRpcmVjdGlvbiBpcyBleGFjdGx5IHdoYXQgc3Vydml2ZXMgYSByZW5hbWUuIEEgdmFsdWUgd2l0aFxuLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIChpdHMgZW50aXR5IHdhcyBkZWxldGVkLCBzbyBpdCBpcyBubyBsb25nZXIgbGlzdGVkKSBmYWxsc1xuLy8gYmFjayB0byBzaG93aW5nIHRoZSByYXcgdmFsdWUgcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlIGNoaXAsIHdoaWNoIHdvdWxkXG4vLyBzaWxlbnRseSB3aWRlbiB0aGUgZmlsdGVyLlxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25WYWx1ZXMoXG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W10+LFxuICB2YWx1ZXM6IHVua25vd25bXSxcbik6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT4ge1xuICByZXR1cm4gb3B0aW9ucyQucGlwZShtYXAoKG9wdGlvbnMpID0+IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maW5kKChjYW5kaWRhdGUpID0+IFN0cmluZyhjYW5kaWRhdGUudmFsdWUpID09PSBTdHJpbmcodmFsdWUpKTtcblxuICAgIHJldHVybiB7IG5hbWU6IG9wdGlvbj8ubmFtZSA/PyBTdHJpbmcodmFsdWUpLCB2YWx1ZSB9O1xuICB9KSkpO1xufVxuXG4vLyBDYXNlLWluc2Vuc2l0aXZlIG5hbWUgZmlsdGVyIGFwcGxpZWQgdG8gYSBsb2FkZWQgb3B0aW9uIGxpc3Qg4oCUIHRoZSB0eXBlZFxuLy8ga2V5d29yZCBoYXMgdG8gYmUgbWF0Y2hlZCBoZXJlIGJlY2F1c2UgZnMtYXV0b2NvbXBsZXRlIHJlbmRlcnMgd2hhdCB3ZSByZXR1cm5cbi8vIHZlcmJhdGltLlxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoT3B0aW9ucyhcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT4sXG4gIGtleXdvcmQ/OiBzdHJpbmcsXG4pOiBPYnNlcnZhYmxlPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W10+IHtcbiAgY29uc3QgdGVybSA9IChrZXl3b3JkID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4gb3B0aW9ucyQucGlwZShtYXAoKG9wdGlvbnMpID0+IHRlcm1cbiAgICA/IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkpXG4gICAgOiBvcHRpb25zKSk7XG59XG5cbi8vIEJ1aWxkIHRoZSBmcy1maWx0ZXIgY29uZmlnIGl0ZW0gZm9yIGEgZ3JvdXAsIHNlZWRpbmcgaXRzIGRlZmF1bHQgZnJvbSB0aGVcbi8vIGN1cnJlbnQgc2Vzc2lvbiB2YWx1ZSBzbyBhdXRob3JlZC9yZWxhdGl2ZSBkZWZhdWx0cyBzaG93IHNlbGVjdGVkIG9uIG9wZW4uXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVySXRlbUZvckdyb3VwKFxuICBncm91cDogUmVwb3J0RmlsdGVyR3JvdXAsXG4gIHJlcG9ydERhdGE6IFJlcG9ydERhdGEsXG4gIHJlcG9ydElkOiBudW1iZXIsXG4gIGluaXRpYWw/OiBGaWx0ZXJHcm91cFZhbHVlLFxuKTogSUZpbHRlckNvbmZpZ0l0ZW0ge1xuICBjb25zdCBuYW1lID0gaXRlbU5hbWUoZ3JvdXApO1xuICBjb25zdCBsYWJlbCA9IGdyb3VwLmxhYmVsIHx8IGdyb3VwLmZpbHRlcnM/LlswXT8uZmlsdGVyQ29sdW1uIHx8ICcnO1xuXG4gIHN3aXRjaCAoZ3JvdXAudHlwZSkge1xuICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlOiBJdGVtVHlwZS5EYXRlUmFuZ2UsXG4gICAgICAgIGxhYmVsOiB7IGZyb206IGAke2xhYmVsfSBGcm9tYCwgdG86IGAke2xhYmVsfSBUb2AgfSxcbiAgICAgICAgZGVmYXVsdDogKGluaXRpYWw/LnN0YXJ0IHx8IGluaXRpYWw/LmVuZClcbiAgICAgICAgICA/IHsgZnJvbTogaW5pdGlhbC5zdGFydCA/PyB1bmRlZmluZWQsIHRvOiBpbml0aWFsLmVuZCA/PyB1bmRlZmluZWQgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgIC8vIE9uZSBzaGFyZWQsIHJlcGxheWVkIG9wdGlvbiBzdHJlYW0gc28gdHlwaW5nIG5ldmVyIHJlZmV0Y2hlcy5cbiAgICAgIGNvbnN0IG9wdGlvbnMkID0gbG9hZEdyb3VwT3B0aW9ucyhncm91cCwgcmVwb3J0RGF0YSwgcmVwb3J0SWQpO1xuICAgICAgY29uc3QgdmFsdWVzID0gaW5pdGlhbD8udmFsdWVzO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlOiBJdGVtVHlwZS5BdXRvQ29tcGxldGVDaGlwcyxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIGZldGNoT25Gb2N1czogdHJ1ZSxcbiAgICAgICAgdmFsdWVzOiAoa2V5d29yZD86IHN0cmluZykgPT4gbWF0Y2hPcHRpb25zKG9wdGlvbnMkLCBrZXl3b3JkKSxcbiAgICAgICAgLy8gU3RvcmVkIHZhbHVlcyBhcmUgaWRzLCBzbyB0aGUgY2hpcHMgY2FuIG9ubHkgYmUgbmFtZWQgb25jZSB0aGUgb3B0aW9uXG4gICAgICAgIC8vIGxpc3QgaGFzIGxvYWRlZCDigJQgaGVuY2UgdGhlIG9ic2VydmFibGUgZm9ybSBvZiBgZGVmYXVsdGAuXG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlcz8ubGVuZ3RoXG4gICAgICAgICAgPyAoKSA9PiByZXNvbHZlT3B0aW9uVmFsdWVzKG9wdGlvbnMkLCB2YWx1ZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgJ2tleXdvcmQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgZGVmYXVsdDogaW5pdGlhbD8udmFsdWUsXG4gICAgICB9O1xuICB9XG59XG5cbi8vIFdoZXRoZXIgdGhlIHJlcG9ydCBoYXMgYSBjaGFydCB0aGUgZ3JvdXAtYnkgY29udHJvbCBjYW4gcmUtYnVja2V0LiBBIHRpbWVcbi8vIHgtYXhpcyBpcyB0aGUgd2hvbGUgcXVhbGlmaWNhdGlvbjogdGhlIGNvbnRyb2wgY2hhbmdlcyB0aGUgZ3JhaW4gb2YgdGhhdFxuLy8gYXhpcywgYW5kIGEgY2F0ZWdvcnkgYXhpcyBoYXMgbm8gZ3JhaW4gdG8gY2hhbmdlLlxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RpbWVTZXJpZXNDaGFydChyZXBvcnQ6IFJlcG9ydCB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIChyZXBvcnQ/LnBhZ2VzID8/IFtdKS5zb21lKChwYWdlKSA9PiAocGFnZS5jb21wb25lbnRzID8/IFtdKS5zb21lKChjb21wb25lbnQpID0+XG4gICAgY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgY29tcG9uZW50LmNvbmZpZz8ueEF4aXM/LmtpbmQgPT09ICd0aW1lJykpO1xufVxuXG4vLyBUaGUgZ3JhaW5zIHRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIG9mZmVycywgbmFtZWQgZm9yIHRoZSB2aWV3ZXIuIFdISUNIXG4vLyBvZiB0aGVtIGNvbWVzIGZyb20gdGhlIHJlcG9ydDsgaG93IHRoZXkgcmVhZCBjb21lcyBmcm9tIEdSQU5VTEFSSVRZX09QVElPTlMuXG4vLyBBbiBlbXB0eSBzdG9yZWQgbGlzdCBtZWFucyBldmVyeSBncmFpbiDigJQgdGhlIHNhbWUgcnVsZSB0aGUgYmFja2VuZCBhcHBsaWVzLlxuZnVuY3Rpb24gZ3JvdXBCeU9wdGlvbnMocmVwb3J0OiBSZXBvcnQpOiB7IHZhbHVlOiBDaGFydEdyYW51bGFyaXR5OyBuYW1lOiBzdHJpbmcgfVtdIHtcbiAgY29uc3QgZ3JhbnVsYXJpdGllcyA9IHJlcG9ydC5jb25maWc/Lmdyb3VwQnk/LmdyYW51bGFyaXRpZXMgPz8gW107XG5cbiAgcmV0dXJuIGdyYW51bGFyaXRpZXMubGVuZ3RoXG4gICAgPyBHUkFOVUxBUklUWV9PUFRJT05TLmZpbHRlcigob3B0aW9uKSA9PiBncmFudWxhcml0aWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpXG4gICAgOiBHUkFOVUxBUklUWV9PUFRJT05TO1xufVxuXG4vLyBXaGV0aGVyIGEgZ3JhaW4gaXMgb25lIHRoZSByZXBvcnQncyBjb250cm9sIHN0aWxsIG9mZmVycy4gQSBncmFpbiBpdCBkb2Vzbid0XG4vLyBjYW5ub3Qgc3RheSBpbiBlZmZlY3Q6IHRoZSBhZ2VudCBjYW4gbmFycm93IHRoZSBsaXN0IGF0IGFueSB0aW1lLCBhbmQgYSBjaGFydFxuLy8gbGVmdCBidWNrZXRpbmcgYXQgYSBkcm9wcGVkIGdyYWluIGlzIG9uZSB0aGUgdmlld2VyIGNhbiBuZWl0aGVyIHNlZSBub3IgY2hhbmdlLlxuZXhwb3J0IGZ1bmN0aW9uIGlzR3JhbnVsYXJpdHlPZmZlcmVkKHJlcG9ydDogUmVwb3J0LCBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuICFncmFudWxhcml0eSB8fCBncm91cEJ5T3B0aW9ucyhyZXBvcnQpLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBncmFudWxhcml0eSk7XG59XG5cbi8vIFRoZSBmcy1maWx0ZXIgY29uZmlnIGl0ZW0gZm9yIHRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLCBvciBudWxsIHdoZW4gdGhlXG4vLyByZXBvcnQgaGFzIG5vbmUgdG8gc2hvdy5cbi8vXG4vLyBJdCBsZWFkcyB0aGUgc2FtZSBiYXIgdGhlIGZpbHRlcnMgcmVuZGVyIGluLCBidXQgaXQgaXMgTk9UIG9uZTogYSBmaWx0ZXJcbi8vIG5hcnJvd3MgV0hJQ0ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvdyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlXG4vLyBCVUNLRVRFRCDigJQgYW5kIGl0IGNvbWVzIGZpcnN0IGJlY2F1c2UgdGhlIGdyYWluIGlzIHdoYXQgYSB2aWV3ZXIgc2V0dGxlc1xuLy8gYmVmb3JlIGRlY2lkaW5nIHdoaWNoIHJvd3MgdGhleSB3YW50LlxuLy8gUGlja2luZyBhIGdyYWluIHNldHMgYSBzZXNzaW9uLXdpZGUgb3ZlcnJpZGUgdGhhdCByaWRlcyBhbG9uZyBpbiBlYWNoIGNoYXJ0J3Ncbi8vIGRhdGEgcmVxdWVzdCwgc28gdGhlIGNoYXJ0cyB0aGVtc2VsdmVzIGFyZSBuZXZlciByZXdyaXR0ZW4uXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUZpbHRlckl0ZW0oXG4gIHJlcG9ydDogUmVwb3J0LFxuICBpbml0aWFsPzogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsXG4pOiBJRmlsdGVyQ29uZmlnSXRlbSB8IG51bGwge1xuICBjb25zdCBncm91cEJ5ID0gcmVwb3J0LmNvbmZpZz8uZ3JvdXBCeTtcblxuICAvLyBPbmx5IGFuIEVYUExJQ0lUIGZhbHNlIGhpZGVzIHRoZSBjb250cm9sLiBBbiBhYnNlbnQgYmxvY2sgbWVhbnMgYSByZXBvcnRcbiAgLy8gc2VydmVkIGJ5IGEgYnVpbGQgdGhhdCBwcmVkYXRlcyB0aGUgY29udHJvbCBiZWluZyBzdG9yZWQsIGFuZCBldmVyeSBvbmUgb2ZcbiAgLy8gdGhvc2UgaGFkIG9uZSDigJQgdGhlIGJhY2tlbmQgcmVzb2x2ZXMgaXQgdGhlIHNhbWUgd2F5IChSZXBvcnRHcm91cEJ5KS5cbiAgaWYgKGdyb3VwQnk/LmVuYWJsZWQgPT09IGZhbHNlIHx8ICFoYXNUaW1lU2VyaWVzQ2hhcnQocmVwb3J0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdmFsdWVzID0gZ3JvdXBCeU9wdGlvbnMocmVwb3J0KTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IEdST1VQX0JZX0lURU0sXG4gICAgdHlwZTogSXRlbVR5cGUuU2VsZWN0LFxuICAgIGxhYmVsOiBncm91cEJ5Py5sYWJlbCB8fCAnR3JvdXAgQnknLFxuICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICB2YWx1ZXM6ICgpID0+IHZhbHVlcyxcbiAgICBkZWZhdWx0OiBpc0dyYW51bGFyaXR5T2ZmZXJlZChyZXBvcnQsIGluaXRpYWwgPz8gbnVsbCkgPyAoaW5pdGlhbCA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vLyBUaGUgZ3JvdXAtYnkgY29udHJvbCdzIGNvbnRyaWJ1dGlvbiB0byB0aGUgdG9vbGJhcidzIGZzLWZpbHRlciBrZXkuIGZzLWZpbHRlclxuLy8gcmVhZHMgaXRzIGNvbmZpZyBvbmNlIGF0IGluaXQsIGFuZCB0aGUgYWdlbnQgY2FuIGNoYW5nZSB0aGUgY29udHJvbCdzIGxhYmVsXG4vLyBvciB0aGUgZ3JhaW5zIGl0IG9mZmVycyDigJQgd2l0aG91dCB0aG9zZSBpbiB0aGUga2V5IHRoZSBiYXIga2VlcHMgcmVuZGVyaW5nXG4vLyB0aGUgY29udHJvbCBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5U2lnbmF0dXJlKHJlcG9ydDogUmVwb3J0IHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghcmVwb3J0IHx8ICFncm91cEJ5RmlsdGVySXRlbShyZXBvcnQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgZ3JvdXBCeSA9IHJlcG9ydC5jb25maWc/Lmdyb3VwQnk7XG5cbiAgcmV0dXJuIFsnZ3JvdXBCeScsIGdyb3VwQnk/LmxhYmVsID8/ICcnLCAoZ3JvdXBCeT8uZ3JhbnVsYXJpdGllcyA/PyBbXSkuam9pbignLCcpXS5qb2luKCc6Jyk7XG59XG5cbi8vIFJlYWQgYW4gZnMtZmlsdGVyIGNoYW5nZSBxdWVyeSBpbnRvIHBlci1ncm91cCB2YWx1ZXMuIFJldHVybnMgb25lIGVudHJ5IHBlclxuLy8gZ3JvdXAgd2l0aCB0aGUgdmFsdWUgdG8gc3RvcmUgKG9yIG51bGwgdG8gY2xlYXIpIOKAlCBjYWxsZXJzIGZlZWQgdGhlc2UgdG9cbi8vIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZS5zZXRWYWx1ZS5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFZhbHVlc0Zyb21RdWVyeShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGdyb3VwczogUmVwb3J0RmlsdGVyR3JvdXBbXSxcbik6IHsgZ3JvdXBJZDogbnVtYmVyOyB2YWx1ZTogRmlsdGVyR3JvdXBWYWx1ZSB8IG51bGwgfVtdIHtcbiAgcmV0dXJuIGdyb3Vwcy5tYXAoKGdyb3VwKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGl0ZW1OYW1lKGdyb3VwKTtcblxuICAgIGlmIChncm91cC50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuICAgICAgY29uc3Qgc3RhcnQgPSBxdWVyeVtgJHtuYW1lfUZyb21gXTtcbiAgICAgIGNvbnN0IGVuZCA9IHF1ZXJ5W2Ake25hbWV9VG9gXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3JvdXBJZDogZ3JvdXAuaWQsXG4gICAgICAgIHZhbHVlOiAoc3RhcnQgfHwgZW5kKSA/IHsgc3RhcnQ6IHN0YXJ0IHx8IG51bGwsIGVuZDogZW5kIHx8IG51bGwgfSA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChncm91cC50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgY29uc3QgdmFsdWVzID0gc2VsZWN0UXVlcnlWYWx1ZXMocXVlcnlbbmFtZV0pO1xuXG4gICAgICByZXR1cm4geyBncm91cElkOiBncm91cC5pZCwgdmFsdWU6IHZhbHVlcy5sZW5ndGggPyB7IHZhbHVlcyB9IDogbnVsbCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGtleXdvcmQgPSBTdHJpbmcocXVlcnlbbmFtZV0gPz8gJycpLnRyaW0oKTtcblxuICAgIHJldHVybiB7IGdyb3VwSWQ6IGdyb3VwLmlkLCB2YWx1ZToga2V5d29yZCA/IHsgdmFsdWU6IGtleXdvcmQgfSA6IG51bGwgfTtcbiAgfSk7XG59XG5cbi8vIGZzLWZpbHRlcidzIEF1dG9Db21wbGV0ZUNoaXBzIHNlcmlhbGlzZXMgYSBtdWx0aS1zZWxlY3QgaW50byBPTkUgcXVlcnkgdmFsdWU6XG4vLyB0aGUgc2VsZWN0ZWQgdmFsdWVzIGpvaW5lZCBieSBcIixcIiAoaXRzIGBxdWVyeWAgZ2V0dGVyIGRvZXMgYC5tYXAodmFsdWUpLmpvaW4oJywnKWApLlxuLy8gU28gYSAyKyBzZWxlY3Rpb24gYXJyaXZlcyBhcyB0aGUgc3RyaW5nIFwiYSxiXCIsIG5vdCBhbiBhcnJheSDigJQgc3BsaXR0aW5nIG9uIFwiLFwiXG4vLyByZXZlcnNlcyB0aGF0IGZhaXRoZnVsbHkuIFdpdGhvdXQgdGhpcywgYSBtdWx0aS1zZWxlY3Qgd2FzIHNlbnQgYXMgdGhlIHNpbmdsZVxuLy8gdmFsdWUgW1wiYSxiXCJdLCBwcm9kdWNpbmcgYGNvbCBJTiAoJ2EsYicpYCBzZXJ2ZXItc2lkZSwgd2hpY2ggbWF0Y2hlcyBub3RoaW5nLlxuZnVuY3Rpb24gc2VsZWN0UXVlcnlWYWx1ZXMocmF3OiB1bmtub3duKTogdW5rbm93bltdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgIHJldHVybiByYXc7XG4gIH1cblxuICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKHJhdykuc3BsaXQoJywnKTtcbn1cbiJdfQ==
|