bways-report 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +463 -316
- package/esm2022/lib/core/config/bways-report-config.mjs +31 -32
- package/esm2022/lib/core/models/index.mjs +1 -1
- package/esm2022/lib/core/models/report-api-endpoint.model.mjs +8 -0
- package/esm2022/lib/core/models/report-component.model.mjs +1 -1
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/services/index.mjs +2 -1
- package/esm2022/lib/core/services/report-api-execution.service.mjs +210 -0
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +76 -4
- package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
- package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
- package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +31 -1
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +27 -2
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +28 -51
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
- package/esm2022/lib/data-access/adapters/index.mjs +1 -1
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
- package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
- package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
- package/esm2022/lib/data-access/contracts/index.mjs +1 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +536 -6
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +55 -17
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -8
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +129 -28
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +27 -13
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
- package/esm2022/lib/features/designer/designer.component.mjs +109 -75
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
- package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
- package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
- package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +2 -1
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
- package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +6 -4
- package/esm2022/lib/features/routing/report-routes.mjs +6 -6
- package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +23 -4
- package/esm2022/lib/features/runtime/report-execution.service.mjs +36 -6
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +54 -11
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +105 -68
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +50 -42
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +16 -7
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +53 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +428 -0
- package/esm2022/lib/primitives/register-builtins.mjs +51 -2
- package/esm2022/lib/provide-reporting.mjs +11 -29
- package/fesm2022/bways-report.mjs +3745 -1281
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +27 -5
- package/lib/core/models/index.d.ts +2 -1
- package/lib/core/models/report-api-endpoint.model.d.ts +30 -0
- package/lib/core/models/report-component.model.d.ts +16 -4
- package/lib/core/models/report-datasource.model.d.ts +21 -2
- package/lib/core/services/index.d.ts +1 -0
- package/lib/core/services/report-api-execution.service.d.ts +41 -0
- package/lib/core/services/report-data-discovery.service.d.ts +23 -1
- package/lib/core/services/report-session-context.service.d.ts +9 -0
- package/lib/core/tokens/designer-config.token.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +4 -0
- package/lib/core/utils/report-endpoint.util.d.ts +12 -0
- package/lib/core/utils/report-request-scope.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +2 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +1 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
- package/lib/data-access/adapters/endpoint-tokens.d.ts +7 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -4
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
- package/lib/data-access/adapters/index.d.ts +1 -1
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
- package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
- package/lib/data-access/adapters/session-headers.d.ts +3 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +3 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +16 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +21 -3
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -7
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -1
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
- package/lib/features/designer/designer.component.d.ts +16 -2
- package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
- package/lib/features/designer/services/designer-config.service.d.ts +13 -0
- package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
- package/lib/features/persistence/services/report-store.service.d.ts +15 -1
- package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
- package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +4 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +4 -1
- package/lib/features/runtime/report-runtime.component.d.ts +14 -1
- package/lib/features/runtime/rpt-report.component.d.ts +5 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/radio/rpt-radio.component.d.ts +77 -0
- package/package.json +2 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { BWAYS_REPORT_ENDPOINTS } from '../../../data-access/adapters/endpoint-tokens';
|
|
2
|
+
import { ReportSessionContextService } from '../../../core/services/report-session-context.service';
|
|
1
3
|
import { computed, inject, Injectable, signal, } from '@angular/core';
|
|
2
|
-
import { of, tap, throwError, switchMap, catchError } from 'rxjs';
|
|
4
|
+
import { of, tap, throwError, switchMap, catchError, finalize, map, take } from 'rxjs';
|
|
3
5
|
import { ReportPersistenceAdapter } from '../../../data-access/contracts/report-persistence.contract';
|
|
4
|
-
import { SchemaValidatorService } from './schema-validator.service';
|
|
6
|
+
import { normalizeReportDefinition, SchemaValidatorService } from './schema-validator.service';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
/**
|
|
7
9
|
* ReportStoreService manages application-wide cached report states,
|
|
@@ -10,6 +12,29 @@ import * as i0 from "@angular/core";
|
|
|
10
12
|
export class ReportStoreService {
|
|
11
13
|
adapter = inject(ReportPersistenceAdapter, { optional: true });
|
|
12
14
|
validator = inject(SchemaValidatorService);
|
|
15
|
+
session = inject(ReportSessionContextService, { optional: true });
|
|
16
|
+
endpoints = inject(BWAYS_REPORT_ENDPOINTS, { optional: true });
|
|
17
|
+
cacheContext = '';
|
|
18
|
+
currentCacheContext() {
|
|
19
|
+
return JSON.stringify([this.session?.getCurrentSessionContext() ?? {}, this.endpoints?.reportsEndpoint]);
|
|
20
|
+
}
|
|
21
|
+
guardCacheContext(context) {
|
|
22
|
+
return tap(() => {
|
|
23
|
+
if (context !== this.currentCacheContext()) {
|
|
24
|
+
throw new Error('Reporting context changed while the request was pending.');
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
ensureCacheContext() {
|
|
29
|
+
const context = this.currentCacheContext();
|
|
30
|
+
if (context === this.cacheContext)
|
|
31
|
+
return context;
|
|
32
|
+
this.cacheContext = context;
|
|
33
|
+
this.cache.set(new Map());
|
|
34
|
+
this.summaries.set([]);
|
|
35
|
+
this.activeReportId.set(null);
|
|
36
|
+
return context;
|
|
37
|
+
}
|
|
13
38
|
/** List of all known report summaries */
|
|
14
39
|
summaries = signal([]);
|
|
15
40
|
/** In-memory cache of loaded full report definitions by ID */
|
|
@@ -31,6 +56,7 @@ export class ReportStoreService {
|
|
|
31
56
|
* Fetches the list of all available reports.
|
|
32
57
|
*/
|
|
33
58
|
loadSummaries() {
|
|
59
|
+
const context = this.ensureCacheContext();
|
|
34
60
|
if (!this.adapter) {
|
|
35
61
|
return of(this.summaries());
|
|
36
62
|
}
|
|
@@ -40,7 +66,7 @@ export class ReportStoreService {
|
|
|
40
66
|
}
|
|
41
67
|
this.isLoading.set(true);
|
|
42
68
|
this.error.set(null);
|
|
43
|
-
return list$.pipe(tap({
|
|
69
|
+
return list$.pipe(this.guardCacheContext(context), tap({
|
|
44
70
|
next: (list) => {
|
|
45
71
|
this.summaries.set(list || []);
|
|
46
72
|
this.isLoading.set(false);
|
|
@@ -49,7 +75,7 @@ export class ReportStoreService {
|
|
|
49
75
|
this.error.set(err?.message ?? 'Failed to load report list.');
|
|
50
76
|
this.isLoading.set(false);
|
|
51
77
|
},
|
|
52
|
-
}));
|
|
78
|
+
}), finalize(() => this.isLoading.set(false)));
|
|
53
79
|
}
|
|
54
80
|
/**
|
|
55
81
|
* Loads a report definition by ID, using cached instance if available.
|
|
@@ -58,6 +84,7 @@ export class ReportStoreService {
|
|
|
58
84
|
* @param forceRefresh - If true, bypasses the in-memory cache.
|
|
59
85
|
*/
|
|
60
86
|
loadReport(reportId, forceRefresh = false) {
|
|
87
|
+
const context = this.ensureCacheContext();
|
|
61
88
|
if (!forceRefresh) {
|
|
62
89
|
const cached = this.cache().get(reportId);
|
|
63
90
|
if (cached) {
|
|
@@ -70,9 +97,15 @@ export class ReportStoreService {
|
|
|
70
97
|
}
|
|
71
98
|
this.isLoading.set(true);
|
|
72
99
|
this.error.set(null);
|
|
73
|
-
return this.adapter.load(reportId).pipe(tap({
|
|
100
|
+
return this.adapter.load(reportId).pipe(map(normalizeReportDefinition), this.guardCacheContext(context), tap({
|
|
74
101
|
next: (def) => {
|
|
75
|
-
|
|
102
|
+
try {
|
|
103
|
+
this.validator.assertValid(def);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
this.error.set(err instanceof Error ? err.message : 'Invalid report definition.');
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
76
109
|
const nextCache = new Map(this.cache());
|
|
77
110
|
nextCache.set(reportId, def);
|
|
78
111
|
this.cache.set(nextCache);
|
|
@@ -83,13 +116,14 @@ export class ReportStoreService {
|
|
|
83
116
|
this.error.set(err?.message ?? `Failed to load report "${reportId}".`);
|
|
84
117
|
this.isLoading.set(false);
|
|
85
118
|
},
|
|
86
|
-
}));
|
|
119
|
+
}), finalize(() => this.isLoading.set(false)));
|
|
87
120
|
}
|
|
88
121
|
/**
|
|
89
122
|
* Loads a report definition by slug or ID.
|
|
90
123
|
* Resolves from cache, loaded summaries, or adapter.
|
|
91
124
|
*/
|
|
92
125
|
loadReportBySlug(slugOrId, forceRefresh = false) {
|
|
126
|
+
this.ensureCacheContext();
|
|
93
127
|
const slugLower = slugOrId.toLowerCase().trim();
|
|
94
128
|
// 1. Check in-memory cache if not forcing refresh
|
|
95
129
|
if (!forceRefresh) {
|
|
@@ -117,36 +151,57 @@ export class ReportStoreService {
|
|
|
117
151
|
/**
|
|
118
152
|
* Saves a report definition, validates it, and updates local cache.
|
|
119
153
|
*/
|
|
120
|
-
|
|
154
|
+
/** Opaque endpoint/session identity for pending user confirmations. */
|
|
155
|
+
getStorageContextKey() { return this.currentCacheContext(); }
|
|
156
|
+
inspectReportId(id) {
|
|
157
|
+
const context = this.ensureCacheContext();
|
|
158
|
+
if (!this.adapter)
|
|
159
|
+
return throwError(() => new Error('Report storage is not configured.'));
|
|
160
|
+
return this.adapter.inspectId(id).pipe(take(1),
|
|
161
|
+
// Read legacy version metadata without selecting another report or changing the draft/cache.
|
|
162
|
+
switchMap(status => status.exists && status.version === undefined
|
|
163
|
+
? this.adapter.load(id).pipe(map(report => ({ exists: true, name: report.name, version: report.version })))
|
|
164
|
+
: of(status)), this.guardCacheContext(context));
|
|
165
|
+
}
|
|
166
|
+
checkReportId(id) {
|
|
167
|
+
const context = this.ensureCacheContext();
|
|
168
|
+
if (!this.adapter)
|
|
169
|
+
return throwError(() => new Error('Report storage is not configured.'));
|
|
170
|
+
return this.adapter.checkId(id).pipe(this.guardCacheContext(context));
|
|
171
|
+
}
|
|
172
|
+
/** Saves a validated report definition and updates the local cache. */
|
|
173
|
+
saveReport(report, options) {
|
|
174
|
+
const context = this.ensureCacheContext();
|
|
121
175
|
this.validator.assertValid(report);
|
|
122
176
|
if (!this.adapter) {
|
|
123
|
-
|
|
124
|
-
const nextCache = new Map(this.cache());
|
|
125
|
-
nextCache.set(report.id, report);
|
|
126
|
-
this.cache.set(nextCache);
|
|
127
|
-
this.updateSummaryInList(report);
|
|
128
|
-
return of(report);
|
|
177
|
+
return throwError(() => new Error('Report storage is not configured. Register provideBwaysReport() to save reports.'));
|
|
129
178
|
}
|
|
130
179
|
this.isLoading.set(true);
|
|
131
180
|
this.error.set(null);
|
|
132
|
-
return this.adapter.save(report).pipe(tap({
|
|
181
|
+
return (options ? this.adapter.save(report, options) : this.adapter.save(report)).pipe(this.guardCacheContext(context), tap({
|
|
133
182
|
next: (saved) => {
|
|
134
|
-
|
|
135
|
-
nextCache.set(saved.id, saved);
|
|
136
|
-
this.cache.set(nextCache);
|
|
137
|
-
this.updateSummaryInList(saved);
|
|
183
|
+
this.cacheSavedReport(saved);
|
|
138
184
|
this.isLoading.set(false);
|
|
139
185
|
},
|
|
140
186
|
error: (err) => {
|
|
141
187
|
this.error.set(err?.message ?? `Failed to save report "${report.id}".`);
|
|
142
188
|
this.isLoading.set(false);
|
|
143
189
|
},
|
|
144
|
-
}));
|
|
190
|
+
}), finalize(() => this.isLoading.set(false)));
|
|
191
|
+
}
|
|
192
|
+
/** Accepts an already persisted report without issuing another database write. */
|
|
193
|
+
cacheSavedReport(report) {
|
|
194
|
+
this.ensureCacheContext();
|
|
195
|
+
const nextCache = new Map(this.cache());
|
|
196
|
+
nextCache.set(report.id, report);
|
|
197
|
+
this.cache.set(nextCache);
|
|
198
|
+
this.updateSummaryInList(report);
|
|
145
199
|
}
|
|
146
200
|
/**
|
|
147
201
|
* Deletes a report definition by ID.
|
|
148
202
|
*/
|
|
149
203
|
deleteReport(reportId) {
|
|
204
|
+
const context = this.ensureCacheContext();
|
|
150
205
|
if (!this.adapter) {
|
|
151
206
|
const nextCache = new Map(this.cache());
|
|
152
207
|
nextCache.delete(reportId);
|
|
@@ -158,7 +213,7 @@ export class ReportStoreService {
|
|
|
158
213
|
return of(void 0);
|
|
159
214
|
}
|
|
160
215
|
this.isLoading.set(true);
|
|
161
|
-
return this.adapter.delete(reportId).pipe(tap({
|
|
216
|
+
return this.adapter.delete(reportId).pipe(this.guardCacheContext(context), tap({
|
|
162
217
|
next: () => {
|
|
163
218
|
const nextCache = new Map(this.cache());
|
|
164
219
|
nextCache.delete(reportId);
|
|
@@ -173,7 +228,7 @@ export class ReportStoreService {
|
|
|
173
228
|
this.error.set(err?.message ?? `Failed to delete report "${reportId}".`);
|
|
174
229
|
this.isLoading.set(false);
|
|
175
230
|
},
|
|
176
|
-
}));
|
|
231
|
+
}), finalize(() => this.isLoading.set(false)));
|
|
177
232
|
}
|
|
178
233
|
/**
|
|
179
234
|
* Sets the active report ID.
|
|
@@ -218,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
218
273
|
type: Injectable,
|
|
219
274
|
args: [{ providedIn: 'root' }]
|
|
220
275
|
}] });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVwRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osT0FBTyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUU1RCx5Q0FBeUM7SUFDaEMsU0FBUyxHQUFHLE1BQU0sQ0FBa0IsRUFBRSxDQUFDLENBQUM7SUFFakQsOERBQThEO0lBQzdDLEtBQUssR0FBRyxNQUFNLENBQWdDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUUxRSxtQ0FBbUM7SUFDMUIsY0FBYyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFdEQsOEJBQThCO0lBQ3JCLFNBQVMsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFNUMsNEJBQTRCO0lBQ25CLEtBQUssR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRTdDLG1EQUFtRDtJQUMxQyxZQUFZLEdBQUcsUUFBUSxDQUEwQixHQUFHLEVBQUU7UUFDN0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixHQUFHLENBQUM7WUFDRixJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxRQUFnQixFQUFFLFlBQVksR0FBRyxLQUFLO1FBQy9DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUM7WUFDRixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLDBCQUEwQixRQUFRLElBQUksQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxZQUFZLEdBQUcsS0FBSztRQUNyRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFaEQsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxJQUNFLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUztvQkFDbEMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLEVBQ2xELENBQUM7b0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVM7WUFDaEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQ2pELENBQUM7UUFFRixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCwyRkFBMkY7UUFDM0YsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUNyQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTO2dCQUNoQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FDakQsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxNQUF3QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLDRDQUE0QztZQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDbkMsR0FBRyxDQUFDO1lBQ0YsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksMEJBQTBCLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsUUFBZ0I7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUM7WUFDRixJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksNEJBQTRCLFFBQVEsSUFBSSxDQUFDLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxFQUFpQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxHQUFxQjtRQUMvQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQWtCO1lBQzdCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztZQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztZQUN4QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzFELFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtTQUN2QyxDQUFDO1FBRUYsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0F6UFUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FETCxNQUFNOzs0RkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIEluamVjdGFibGUsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGFwLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFJlcG9ydERlZmluaXRpb24sXG4gIFJlcG9ydFN1bW1hcnksXG59IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4uLy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgU2NoZW1hVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4vc2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZXBvcnRTdG9yZVNlcnZpY2UgbWFuYWdlcyBhcHBsaWNhdGlvbi13aWRlIGNhY2hlZCByZXBvcnQgc3RhdGVzLFxuICogbGlzdGluZywgYW5kIHJlYWN0aXZlIGFjY2VzcyB2aWEgQW5ndWxhciBzaWduYWxzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFN0b3JlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yID0gaW5qZWN0KFNjaGVtYVZhbGlkYXRvclNlcnZpY2UpO1xuXG4gIC8qKiBMaXN0IG9mIGFsbCBrbm93biByZXBvcnQgc3VtbWFyaWVzICovXG4gIHJlYWRvbmx5IHN1bW1hcmllcyA9IHNpZ25hbDxSZXBvcnRTdW1tYXJ5W10+KFtdKTtcblxuICAvKiogSW4tbWVtb3J5IGNhY2hlIG9mIGxvYWRlZCBmdWxsIHJlcG9ydCBkZWZpbml0aW9ucyBieSBJRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gc2lnbmFsPE1hcDxzdHJpbmcsIFJlcG9ydERlZmluaXRpb24+PihuZXcgTWFwKCkpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgcmVwb3J0IElEICovXG4gIHJlYWRvbmx5IGFjdGl2ZVJlcG9ydElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGluZGljYXRvciAqL1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qKiBDdXJyZW50IGVycm9yIG1lc3NhZ2UgKi9cbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiBjb21wdXRlZCBmcm9tIGNhY2hlICovXG4gIHJlYWRvbmx5IGFjdGl2ZVJlcG9ydCA9IGNvbXB1dGVkPFJlcG9ydERlZmluaXRpb24gfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmFjdGl2ZVJlcG9ydElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoKS5nZXQoaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgcmVwb3J0cy5cbiAgICovXG4gIGxvYWRTdW1tYXJpZXMoKTogT2JzZXJ2YWJsZTxSZXBvcnRTdW1tYXJ5W10+IHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuc3VtbWFyaWVzKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3QkID0gdGhpcy5hZGFwdGVyLmxpc3QoKTtcbiAgICBpZiAoIWxpc3QkIHx8IHR5cGVvZiBsaXN0JC5waXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5zdW1tYXJpZXMoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuXG4gICAgcmV0dXJuIGxpc3QkLnBpcGUoXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3VtbWFyaWVzLnNldChsaXN0IHx8IFtdKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3Iuc2V0KGVycj8ubWVzc2FnZSA/PyAnRmFpbGVkIHRvIGxvYWQgcmVwb3J0IGxpc3QuJyk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIHJlcG9ydCBkZWZpbml0aW9uIGJ5IElELCB1c2luZyBjYWNoZWQgaW5zdGFuY2UgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVwb3J0SWQgLSBJRCBvZiB0aGUgcmVwb3J0IHRvIGxvYWQuXG4gICAqIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSBJZiB0cnVlLCBieXBhc3NlcyB0aGUgaW4tbWVtb3J5IGNhY2hlLlxuICAgKi9cbiAgbG9hZFJlcG9ydChyZXBvcnRJZDogc3RyaW5nLCBmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGlmICghZm9yY2VSZWZyZXNoKSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlKCkuZ2V0KHJlcG9ydElkKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQocmVwb3J0SWQpO1xuICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgbm90IGNvbmZpZ3VyZWQuJykpO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIubG9hZChyZXBvcnRJZCkucGlwZShcbiAgICAgIHRhcCh7XG4gICAgICAgIG5leHQ6IChkZWYpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRvci5hc3NlcnRWYWxpZChkZWYpO1xuICAgICAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgICAgICBuZXh0Q2FjaGUuc2V0KHJlcG9ydElkLCBkZWYpO1xuICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KG5leHRDYWNoZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQocmVwb3J0SWQpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGBGYWlsZWQgdG8gbG9hZCByZXBvcnQgXCIke3JlcG9ydElkfVwiLmApO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSByZXBvcnQgZGVmaW5pdGlvbiBieSBzbHVnIG9yIElELlxuICAgKiBSZXNvbHZlcyBmcm9tIGNhY2hlLCBsb2FkZWQgc3VtbWFyaWVzLCBvciBhZGFwdGVyLlxuICAgKi9cbiAgbG9hZFJlcG9ydEJ5U2x1ZyhzbHVnT3JJZDogc3RyaW5nLCBmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IHNsdWdMb3dlciA9IHNsdWdPcklkLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgLy8gMS4gQ2hlY2sgaW4tbWVtb3J5IGNhY2hlIGlmIG5vdCBmb3JjaW5nIHJlZnJlc2hcbiAgICBpZiAoIWZvcmNlUmVmcmVzaCkge1xuICAgICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5jYWNoZSgpLnZhbHVlcygpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWYuaWQudG9Mb3dlckNhc2UoKSA9PT0gc2x1Z0xvd2VyIHx8XG4gICAgICAgICAgKGRlZi5zbHVnICYmIGRlZi5zbHVnLnRvTG93ZXJDYXNlKCkgPT09IHNsdWdMb3dlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQoZGVmLmlkKTtcbiAgICAgICAgICByZXR1cm4gb2YoZGVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIENoZWNrIGV4aXN0aW5nIHN1bW1hcmllc1xuICAgIGNvbnN0IG1hdGNoZWRTdW1tYXJ5ID0gdGhpcy5zdW1tYXJpZXMoKS5maW5kKFxuICAgICAgKHMpID0+XG4gICAgICAgIHMuaWQudG9Mb3dlckNhc2UoKSA9PT0gc2x1Z0xvd2VyIHx8XG4gICAgICAgIChzLnNsdWcgJiYgcy5zbHVnLnRvTG93ZXJDYXNlKCkgPT09IHNsdWdMb3dlcilcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRTdW1tYXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkUmVwb3J0KG1hdGNoZWRTdW1tYXJ5LmlkLCBmb3JjZVJlZnJlc2gpO1xuICAgIH1cblxuICAgIC8vIDMuIElmIG5vdCBmb3VuZCBpbiBzdW1tYXJpZXMsIHJlZnJlc2ggc3VtbWFyaWVzIGZpcnN0IG9yIGZhbGxiYWNrIHRvIGxvYWRSZXBvcnQgZGlyZWN0bHlcbiAgICByZXR1cm4gdGhpcy5sb2FkU3VtbWFyaWVzKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgobGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGxpc3QuZmluZChcbiAgICAgICAgICAocykgPT5cbiAgICAgICAgICAgIHMuaWQudG9Mb3dlckNhc2UoKSA9PT0gc2x1Z0xvd2VyIHx8XG4gICAgICAgICAgICAocy5zbHVnICYmIHMuc2x1Zy50b0xvd2VyQ2FzZSgpID09PSBzbHVnTG93ZXIpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRSZXBvcnQoZm91bmQgPyBmb3VuZC5pZCA6IHNsdWdPcklkLCBmb3JjZVJlZnJlc2gpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IHRoaXMubG9hZFJlcG9ydChzbHVnT3JJZCwgZm9yY2VSZWZyZXNoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgcmVwb3J0IGRlZmluaXRpb24sIHZhbGlkYXRlcyBpdCwgYW5kIHVwZGF0ZXMgbG9jYWwgY2FjaGUuXG4gICAqL1xuICBzYXZlUmVwb3J0KHJlcG9ydDogUmVwb3J0RGVmaW5pdGlvbik6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIHRoaXMudmFsaWRhdG9yLmFzc2VydFZhbGlkKHJlcG9ydCk7XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgLy8gSW4tbWVtb3J5IHVwZGF0ZSBpZiBubyBhZGFwdGVyIGNvbmZpZ3VyZWRcbiAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgIG5leHRDYWNoZS5zZXQocmVwb3J0LmlkLCByZXBvcnQpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQobmV4dENhY2hlKTtcbiAgICAgIHRoaXMudXBkYXRlU3VtbWFyeUluTGlzdChyZXBvcnQpO1xuICAgICAgcmV0dXJuIG9mKHJlcG9ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5zYXZlKHJlcG9ydCkucGlwZShcbiAgICAgIHRhcCh7XG4gICAgICAgIG5leHQ6IChzYXZlZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgICAgICBuZXh0Q2FjaGUuc2V0KHNhdmVkLmlkLCBzYXZlZCk7XG4gICAgICAgICAgdGhpcy5jYWNoZS5zZXQobmV4dENhY2hlKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN1bW1hcnlJbkxpc3Qoc2F2ZWQpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGBGYWlsZWQgdG8gc2F2ZSByZXBvcnQgXCIke3JlcG9ydC5pZH1cIi5gKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByZXBvcnQgZGVmaW5pdGlvbiBieSBJRC5cbiAgICovXG4gIGRlbGV0ZVJlcG9ydChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgIG5leHRDYWNoZS5kZWxldGUocmVwb3J0SWQpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQobmV4dENhY2hlKTtcbiAgICAgIHRoaXMuc3VtbWFyaWVzLnNldCh0aGlzLnN1bW1hcmllcygpLmZpbHRlcigocykgPT4gcy5pZCAhPT0gcmVwb3J0SWQpKTtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVJlcG9ydElkKCkgPT09IHJlcG9ydElkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KG51bGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZGVsZXRlKHJlcG9ydElkKS5waXBlKFxuICAgICAgdGFwKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgICAgICBuZXh0Q2FjaGUuZGVsZXRlKHJlcG9ydElkKTtcbiAgICAgICAgICB0aGlzLmNhY2hlLnNldChuZXh0Q2FjaGUpO1xuICAgICAgICAgIHRoaXMuc3VtbWFyaWVzLnNldCh0aGlzLnN1bW1hcmllcygpLmZpbHRlcigocykgPT4gcy5pZCAhPT0gcmVwb3J0SWQpKTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVSZXBvcnRJZCgpID09PSByZXBvcnRJZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGBGYWlsZWQgdG8gZGVsZXRlIHJlcG9ydCBcIiR7cmVwb3J0SWR9XCIuYCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgcmVwb3J0IElELlxuICAgKi9cbiAgc2V0QWN0aXZlUmVwb3J0KGlkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgaW4tbWVtb3J5IGNhY2hlLlxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldChuZXcgTWFwKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdW1tYXJ5SW5MaXN0KGRlZjogUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGxpc3QgPSBbLi4udGhpcy5zdW1tYXJpZXMoKV07XG4gICAgY29uc3QgaWR4ID0gbGlzdC5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IGRlZi5pZCk7XG4gICAgY29uc3Qgc3VtbWFyeTogUmVwb3J0U3VtbWFyeSA9IHtcbiAgICAgIGlkOiBkZWYuaWQsXG4gICAgICBuYW1lOiBkZWYubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWYuZGVzY3JpcHRpb24sXG4gICAgICBjYXRlZ29yeTogZGVmLmNhdGVnb3J5LFxuICAgICAgc2x1ZzogZGVmLnNsdWcgPz8gZGVmLmlkLFxuICAgICAgbWVudUdyb3VwOiBkZWYubWVudUdyb3VwLFxuICAgICAgbWVudU9yZGVyOiBkZWYubWVudU9yZGVyLFxuICAgICAgaWNvbjogZGVmLmljb24sXG4gICAgICB2ZXJzaW9uOiBkZWYudmVyc2lvbixcbiAgICAgIGlzUHVibGlzaGVkOiBkZWYuaXNQdWJsaXNoZWQgPz8gIWRlZi5tZXRhZGF0YT8uWydpc0RyYWZ0J10sXG4gICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBsaXN0W2lkeF0gPSBzdW1tYXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnB1c2goc3VtbWFyeSk7XG4gICAgfVxuICAgIHRoaXMuc3VtbWFyaWVzLnNldChsaXN0KTtcbiAgfVxufVxuIl19
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUs3SCxPQUFPLEVBQUUsd0JBQXdCLEVBQXFDLE1BQU0sNERBQTRELENBQUM7QUFDekksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRS9GOzs7R0FHRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFDWixPQUFPLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0QsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsWUFBWSxHQUFHLEVBQUUsQ0FB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O1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E3VFUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FETCxNQUFNOzs0RkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuLi8uLi8uLi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC10b2tlbnMnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0YXAsIHRocm93RXJyb3IsIHN3aXRjaE1hcCwgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgdGFrZSwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSZXBvcnREZWZpbml0aW9uLFxuICBSZXBvcnRTdW1tYXJ5LFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIFJlcG9ydFNhdmVPcHRpb25zLCBSZXBvcnRJZFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgbm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbiwgU2NoZW1hVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4vc2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZXBvcnRTdG9yZVNlcnZpY2UgbWFuYWdlcyBhcHBsaWNhdGlvbi13aWRlIGNhY2hlZCByZXBvcnQgc3RhdGVzLFxuICogbGlzdGluZywgYW5kIHJlYWN0aXZlIGFjY2VzcyB2aWEgQW5ndWxhciBzaWduYWxzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFN0b3JlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yID0gaW5qZWN0KFNjaGVtYVZhbGlkYXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGNhY2hlQ29udGV4dCA9ICcnO1xuXG4gIHByaXZhdGUgY3VycmVudENhY2hlQ29udGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShbdGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSwgdGhpcy5lbmRwb2ludHM/LnJlcG9ydHNFbmRwb2ludF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBndWFyZENhY2hlQ29udGV4dDxUPihjb250ZXh0OiBzdHJpbmcpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiB0YXAoKCkgPT4ge1xuICAgICAgaWYgKGNvbnRleHQgIT09IHRoaXMuY3VycmVudENhY2hlQ29udGV4dCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVwb3J0aW5nIGNvbnRleHQgY2hhbmdlZCB3aGlsZSB0aGUgcmVxdWVzdCB3YXMgcGVuZGluZy4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlQ2FjaGVDb250ZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3VycmVudENhY2hlQ29udGV4dCgpO1xuICAgIGlmIChjb250ZXh0ID09PSB0aGlzLmNhY2hlQ29udGV4dCkgcmV0dXJuIGNvbnRleHQ7XG4gICAgdGhpcy5jYWNoZUNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuY2FjaGUuc2V0KG5ldyBNYXAoKSk7XG4gICAgdGhpcy5zdW1tYXJpZXMuc2V0KFtdKTtcbiAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldChudWxsKTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIC8qKiBMaXN0IG9mIGFsbCBrbm93biByZXBvcnQgc3VtbWFyaWVzICovXG4gIHJlYWRvbmx5IHN1bW1hcmllcyA9IHNpZ25hbDxSZXBvcnRTdW1tYXJ5W10+KFtdKTtcblxuICAvKiogSW4tbWVtb3J5IGNhY2hlIG9mIGxvYWRlZCBmdWxsIHJlcG9ydCBkZWZpbml0aW9ucyBieSBJRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gc2lnbmFsPE1hcDxzdHJpbmcsIFJlcG9ydERlZmluaXRpb24+PihuZXcgTWFwKCkpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgcmVwb3J0IElEICovXG4gIHJlYWRvbmx5IGFjdGl2ZVJlcG9ydElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGluZGljYXRvciAqL1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qKiBDdXJyZW50IGVycm9yIG1lc3NhZ2UgKi9cbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiBjb21wdXRlZCBmcm9tIGNhY2hlICovXG4gIHJlYWRvbmx5IGFjdGl2ZVJlcG9ydCA9IGNvbXB1dGVkPFJlcG9ydERlZmluaXRpb24gfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmFjdGl2ZVJlcG9ydElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoKS5nZXQoaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgcmVwb3J0cy5cbiAgICovXG4gIGxvYWRTdW1tYXJpZXMoKTogT2JzZXJ2YWJsZTxSZXBvcnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5lbnN1cmVDYWNoZUNvbnRleHQoKTtcbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuc3VtbWFyaWVzKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3QkID0gdGhpcy5hZGFwdGVyLmxpc3QoKTtcbiAgICBpZiAoIWxpc3QkIHx8IHR5cGVvZiBsaXN0JC5waXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5zdW1tYXJpZXMoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuXG4gICAgcmV0dXJuIGxpc3QkLnBpcGUoXG4gICAgICB0aGlzLmd1YXJkQ2FjaGVDb250ZXh0KGNvbnRleHQpLFxuICAgICAgdGFwKHtcbiAgICAgICAgbmV4dDogKGxpc3QpID0+IHtcbiAgICAgICAgICB0aGlzLnN1bW1hcmllcy5zZXQobGlzdCB8fCBbXSk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yLnNldChlcnI/Lm1lc3NhZ2UgPz8gJ0ZhaWxlZCB0byBsb2FkIHJlcG9ydCBsaXN0LicpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIHJlcG9ydCBkZWZpbml0aW9uIGJ5IElELCB1c2luZyBjYWNoZWQgaW5zdGFuY2UgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVwb3J0SWQgLSBJRCBvZiB0aGUgcmVwb3J0IHRvIGxvYWQuXG4gICAqIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSBJZiB0cnVlLCBieXBhc3NlcyB0aGUgaW4tbWVtb3J5IGNhY2hlLlxuICAgKi9cbiAgbG9hZFJlcG9ydChyZXBvcnRJZDogc3RyaW5nLCBmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmVuc3VyZUNhY2hlQ29udGV4dCgpO1xuICAgIGlmICghZm9yY2VSZWZyZXNoKSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlKCkuZ2V0KHJlcG9ydElkKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQocmVwb3J0SWQpO1xuICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgbm90IGNvbmZpZ3VyZWQuJykpO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIubG9hZChyZXBvcnRJZCkucGlwZShcbiAgICAgIG1hcChub3JtYWxpemVSZXBvcnREZWZpbml0aW9uKSxcbiAgICAgIHRoaXMuZ3VhcmRDYWNoZUNvbnRleHQoY29udGV4dCksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoZGVmKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmFzc2VydFZhbGlkKGRlZik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yLnNldChlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0ludmFsaWQgcmVwb3J0IGRlZmluaXRpb24uJyk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAodGhpcy5jYWNoZSgpKTtcbiAgICAgICAgICBuZXh0Q2FjaGUuc2V0KHJlcG9ydElkLCBkZWYpO1xuICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KG5leHRDYWNoZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQocmVwb3J0SWQpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGBGYWlsZWQgdG8gbG9hZCByZXBvcnQgXCIke3JlcG9ydElkfVwiLmApO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIHJlcG9ydCBkZWZpbml0aW9uIGJ5IHNsdWcgb3IgSUQuXG4gICAqIFJlc29sdmVzIGZyb20gY2FjaGUsIGxvYWRlZCBzdW1tYXJpZXMsIG9yIGFkYXB0ZXIuXG4gICAqL1xuICBsb2FkUmVwb3J0QnlTbHVnKHNsdWdPcklkOiBzdHJpbmcsIGZvcmNlUmVmcmVzaCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uPiB7XG4gICAgdGhpcy5lbnN1cmVDYWNoZUNvbnRleHQoKTtcbiAgICBjb25zdCBzbHVnTG93ZXIgPSBzbHVnT3JJZC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIC8vIDEuIENoZWNrIGluLW1lbW9yeSBjYWNoZSBpZiBub3QgZm9yY2luZyByZWZyZXNoXG4gICAgaWYgKCFmb3JjZVJlZnJlc2gpIHtcbiAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuY2FjaGUoKS52YWx1ZXMoKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVmLmlkLnRvTG93ZXJDYXNlKCkgPT09IHNsdWdMb3dlciB8fFxuICAgICAgICAgIChkZWYuc2x1ZyAmJiBkZWYuc2x1Zy50b0xvd2VyQ2FzZSgpID09PSBzbHVnTG93ZXIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KGRlZi5pZCk7XG4gICAgICAgICAgcmV0dXJuIG9mKGRlZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBleGlzdGluZyBzdW1tYXJpZXNcbiAgICBjb25zdCBtYXRjaGVkU3VtbWFyeSA9IHRoaXMuc3VtbWFyaWVzKCkuZmluZChcbiAgICAgIChzKSA9PlxuICAgICAgICBzLmlkLnRvTG93ZXJDYXNlKCkgPT09IHNsdWdMb3dlciB8fFxuICAgICAgICAocy5zbHVnICYmIHMuc2x1Zy50b0xvd2VyQ2FzZSgpID09PSBzbHVnTG93ZXIpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkU3VtbWFyeSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZFJlcG9ydChtYXRjaGVkU3VtbWFyeS5pZCwgZm9yY2VSZWZyZXNoKTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBub3QgZm91bmQgaW4gc3VtbWFyaWVzLCByZWZyZXNoIHN1bW1hcmllcyBmaXJzdCBvciBmYWxsYmFjayB0byBsb2FkUmVwb3J0IGRpcmVjdGx5XG4gICAgcmV0dXJuIHRoaXMubG9hZFN1bW1hcmllcygpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGxpc3QpID0+IHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBsaXN0LmZpbmQoXG4gICAgICAgICAgKHMpID0+XG4gICAgICAgICAgICBzLmlkLnRvTG93ZXJDYXNlKCkgPT09IHNsdWdMb3dlciB8fFxuICAgICAgICAgICAgKHMuc2x1ZyAmJiBzLnNsdWcudG9Mb3dlckNhc2UoKSA9PT0gc2x1Z0xvd2VyKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUmVwb3J0KGZvdW5kID8gZm91bmQuaWQgOiBzbHVnT3JJZCwgZm9yY2VSZWZyZXNoKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB0aGlzLmxvYWRSZXBvcnQoc2x1Z09ySWQsIGZvcmNlUmVmcmVzaCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIHJlcG9ydCBkZWZpbml0aW9uLCB2YWxpZGF0ZXMgaXQsIGFuZCB1cGRhdGVzIGxvY2FsIGNhY2hlLlxuICAgKi9cbiAgLyoqIE9wYXF1ZSBlbmRwb2ludC9zZXNzaW9uIGlkZW50aXR5IGZvciBwZW5kaW5nIHVzZXIgY29uZmlybWF0aW9ucy4gKi9cbiAgZ2V0U3RvcmFnZUNvbnRleHRLZXkoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY3VycmVudENhY2hlQ29udGV4dCgpOyB9XG5cbiAgaW5zcGVjdFJlcG9ydElkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlcG9ydElkU3RhdHVzPiB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZW5zdXJlQ2FjaGVDb250ZXh0KCk7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignUmVwb3J0IHN0b3JhZ2UgaXMgbm90IGNvbmZpZ3VyZWQuJykpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuaW5zcGVjdElkKGlkKS5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIC8vIFJlYWQgbGVnYWN5IHZlcnNpb24gbWV0YWRhdGEgd2l0aG91dCBzZWxlY3RpbmcgYW5vdGhlciByZXBvcnQgb3IgY2hhbmdpbmcgdGhlIGRyYWZ0L2NhY2hlLlxuICAgICAgc3dpdGNoTWFwKHN0YXR1cyA9PiBzdGF0dXMuZXhpc3RzICYmIHN0YXR1cy52ZXJzaW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmFkYXB0ZXIhLmxvYWQoaWQpLnBpcGUobWFwKHJlcG9ydCA9PiAoeyBleGlzdHM6IHRydWUsIG5hbWU6IHJlcG9ydC5uYW1lLCB2ZXJzaW9uOiByZXBvcnQudmVyc2lvbiB9KSkpXG4gICAgICAgIDogb2Yoc3RhdHVzKSksXG4gICAgICB0aGlzLmd1YXJkQ2FjaGVDb250ZXh0KGNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICBjaGVja1JlcG9ydElkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5lbnN1cmVDYWNoZUNvbnRleHQoKTtcbiAgICBpZiAoIXRoaXMuYWRhcHRlcikgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdSZXBvcnQgc3RvcmFnZSBpcyBub3QgY29uZmlndXJlZC4nKSk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5jaGVja0lkKGlkKS5waXBlKHRoaXMuZ3VhcmRDYWNoZUNvbnRleHQoY29udGV4dCkpO1xuICB9XG5cbiAgLyoqIFNhdmVzIGEgdmFsaWRhdGVkIHJlcG9ydCBkZWZpbml0aW9uIGFuZCB1cGRhdGVzIHRoZSBsb2NhbCBjYWNoZS4gKi9cbiAgc2F2ZVJlcG9ydChyZXBvcnQ6IFJlcG9ydERlZmluaXRpb24sIG9wdGlvbnM/OiBSZXBvcnRTYXZlT3B0aW9ucyk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmVuc3VyZUNhY2hlQ29udGV4dCgpO1xuICAgIHRoaXMudmFsaWRhdG9yLmFzc2VydFZhbGlkKHJlcG9ydCk7XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdSZXBvcnQgc3RvcmFnZSBpcyBub3QgY29uZmlndXJlZC4gUmVnaXN0ZXIgcHJvdmlkZUJ3YXlzUmVwb3J0KCkgdG8gc2F2ZSByZXBvcnRzLicpKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMgPyB0aGlzLmFkYXB0ZXIuc2F2ZShyZXBvcnQsIG9wdGlvbnMpIDogdGhpcy5hZGFwdGVyLnNhdmUocmVwb3J0KSkucGlwZShcbiAgICAgIHRoaXMuZ3VhcmRDYWNoZUNvbnRleHQoY29udGV4dCksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoc2F2ZWQpID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlU2F2ZWRSZXBvcnQoc2F2ZWQpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGBGYWlsZWQgdG8gc2F2ZSByZXBvcnQgXCIke3JlcG9ydC5pZH1cIi5gKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpKVxuICAgICk7XG4gIH1cblxuICAvKiogQWNjZXB0cyBhbiBhbHJlYWR5IHBlcnNpc3RlZCByZXBvcnQgd2l0aG91dCBpc3N1aW5nIGFub3RoZXIgZGF0YWJhc2Ugd3JpdGUuICovXG4gIGNhY2hlU2F2ZWRSZXBvcnQocmVwb3J0OiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVDYWNoZUNvbnRleHQoKTtcbiAgICBjb25zdCBuZXh0Q2FjaGUgPSBuZXcgTWFwKHRoaXMuY2FjaGUoKSk7XG4gICAgbmV4dENhY2hlLnNldChyZXBvcnQuaWQsIHJlcG9ydCk7XG4gICAgdGhpcy5jYWNoZS5zZXQobmV4dENhY2hlKTtcbiAgICB0aGlzLnVwZGF0ZVN1bW1hcnlJbkxpc3QocmVwb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVwb3J0IGRlZmluaXRpb24gYnkgSUQuXG4gICAqL1xuICBkZWxldGVSZXBvcnQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmVuc3VyZUNhY2hlQ29udGV4dCgpO1xuICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICBjb25zdCBuZXh0Q2FjaGUgPSBuZXcgTWFwKHRoaXMuY2FjaGUoKSk7XG4gICAgICBuZXh0Q2FjaGUuZGVsZXRlKHJlcG9ydElkKTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KG5leHRDYWNoZSk7XG4gICAgICB0aGlzLnN1bW1hcmllcy5zZXQodGhpcy5zdW1tYXJpZXMoKS5maWx0ZXIoKHMpID0+IHMuaWQgIT09IHJlcG9ydElkKSk7XG4gICAgICBpZiAodGhpcy5hY3RpdmVSZXBvcnRJZCgpID09PSByZXBvcnRJZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldChudWxsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvZih2b2lkIDApO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRlbGV0ZShyZXBvcnRJZCkucGlwZShcbiAgICAgIHRoaXMuZ3VhcmRDYWNoZUNvbnRleHQoY29udGV4dCksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dENhY2hlID0gbmV3IE1hcCh0aGlzLmNhY2hlKCkpO1xuICAgICAgICAgIG5leHRDYWNoZS5kZWxldGUocmVwb3J0SWQpO1xuICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KG5leHRDYWNoZSk7XG4gICAgICAgICAgdGhpcy5zdW1tYXJpZXMuc2V0KHRoaXMuc3VtbWFyaWVzKCkuZmlsdGVyKChzKSA9PiBzLmlkICE9PSByZXBvcnRJZCkpO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVJlcG9ydElkKCkgPT09IHJlcG9ydElkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yLnNldChlcnI/Lm1lc3NhZ2UgPz8gYEZhaWxlZCB0byBkZWxldGUgcmVwb3J0IFwiJHtyZXBvcnRJZH1cIi5gKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIHJlcG9ydCBJRC5cbiAgICovXG4gIHNldEFjdGl2ZVJlcG9ydChpZDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGluLW1lbW9yeSBjYWNoZS5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQobmV3IE1hcCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3VtbWFyeUluTGlzdChkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuc3VtbWFyaWVzKCldO1xuICAgIGNvbnN0IGlkeCA9IGxpc3QuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSBkZWYuaWQpO1xuICAgIGNvbnN0IHN1bW1hcnk6IFJlcG9ydFN1bW1hcnkgPSB7XG4gICAgICBpZDogZGVmLmlkLFxuICAgICAgbmFtZTogZGVmLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGVmLmRlc2NyaXB0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGRlZi5jYXRlZ29yeSxcbiAgICAgIHNsdWc6IGRlZi5zbHVnID8/IGRlZi5pZCxcbiAgICAgIG1lbnVHcm91cDogZGVmLm1lbnVHcm91cCxcbiAgICAgIG1lbnVPcmRlcjogZGVmLm1lbnVPcmRlcixcbiAgICAgIGljb246IGRlZi5pY29uLFxuICAgICAgdmVyc2lvbjogZGVmLnZlcnNpb24sXG4gICAgICBpc1B1Ymxpc2hlZDogZGVmLmlzUHVibGlzaGVkID8/ICFkZWYubWV0YWRhdGE/LlsnaXNEcmFmdCddLFxuICAgICAgbGFzdE1vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfTtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbGlzdFtpZHhdID0gc3VtbWFyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5wdXNoKHN1bW1hcnkpO1xuICAgIH1cbiAgICB0aGlzLnN1bW1hcmllcy5zZXQobGlzdCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -14,9 +14,56 @@ import * as i0 from "@angular/core";
|
|
|
14
14
|
export function validateReportSchema(definition) {
|
|
15
15
|
const errors = [];
|
|
16
16
|
const warnings = [];
|
|
17
|
-
if (!definition) {
|
|
17
|
+
if (!definition || typeof definition !== 'object' || Array.isArray(definition)) {
|
|
18
18
|
return { valid: false, errors: ['Report definition is null or undefined.'], warnings: [] };
|
|
19
19
|
}
|
|
20
|
+
const record = definition;
|
|
21
|
+
const object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
22
|
+
for (const key of ['id', 'name']) {
|
|
23
|
+
if (typeof record[key] !== 'string')
|
|
24
|
+
errors.push(`Report ${key} must be a string.`);
|
|
25
|
+
}
|
|
26
|
+
for (const key of ['components', 'parameters', 'dataSources']) {
|
|
27
|
+
const value = record[key];
|
|
28
|
+
if (value !== undefined && (!Array.isArray(value) || value.some(item => !object(item))))
|
|
29
|
+
errors.push(`${key} must be an array of objects.`);
|
|
30
|
+
}
|
|
31
|
+
if (record['version'] !== undefined && (!Number.isInteger(record['version']) || Number(record['version']) < 0))
|
|
32
|
+
errors.push('Report version must be a non-negative integer.');
|
|
33
|
+
if (record['schemaVersion'] !== undefined && record['schemaVersion'] !== 1)
|
|
34
|
+
errors.push('Unsupported report schemaVersion. Supported version: 1.');
|
|
35
|
+
if (record['layout'] !== undefined && !object(record['layout']))
|
|
36
|
+
errors.push('layout must be an object.');
|
|
37
|
+
if (record['grid'] !== undefined && (!object(record['grid']) || !Array.isArray(record['grid']['columns'])))
|
|
38
|
+
errors.push('grid must contain a columns array.');
|
|
39
|
+
if (errors.length)
|
|
40
|
+
return { valid: false, errors, warnings };
|
|
41
|
+
for (const component of definition.components ?? []) {
|
|
42
|
+
if (typeof component.id !== 'string' || typeof component.type !== 'string' || !component.type.trim())
|
|
43
|
+
errors.push('Components require string id and type fields.');
|
|
44
|
+
if (component.key !== undefined && typeof component.key !== 'string')
|
|
45
|
+
errors.push('Component keys must be strings.');
|
|
46
|
+
if (component.properties !== undefined && !object(component.properties))
|
|
47
|
+
errors.push('Component properties must be an object.');
|
|
48
|
+
if (component.dataSource !== undefined && !object(component.dataSource))
|
|
49
|
+
errors.push('Component dataSource must be an object.');
|
|
50
|
+
if (component.layout !== undefined && !object(component.layout))
|
|
51
|
+
errors.push('Component layout must be an object.');
|
|
52
|
+
}
|
|
53
|
+
const parameterKeys = new Set();
|
|
54
|
+
for (const parameter of definition.parameters ?? []) {
|
|
55
|
+
if (typeof parameter.key !== 'string' || !parameter.key.trim() || parameterKeys.has(parameter.key))
|
|
56
|
+
errors.push('Parameters require unique, non-empty string keys.');
|
|
57
|
+
parameterKeys.add(parameter.key);
|
|
58
|
+
}
|
|
59
|
+
for (const source of definition.dataSources ?? []) {
|
|
60
|
+
if (typeof source.id !== 'string' || typeof source.name !== 'string' || typeof source.endpoint !== 'string')
|
|
61
|
+
errors.push('Data sources require string id, name and endpoint fields.');
|
|
62
|
+
}
|
|
63
|
+
if (definition.grid?.columns.some(column => !object(column) || typeof column['field'] !== 'string'))
|
|
64
|
+
errors.push('Grid columns require string field names.');
|
|
65
|
+
if (errors.length)
|
|
66
|
+
return { valid: false, errors, warnings };
|
|
20
67
|
if (!definition.id || !definition.id.trim()) {
|
|
21
68
|
errors.push('Report definition missing required "id".');
|
|
22
69
|
}
|
|
@@ -24,7 +71,7 @@ export function validateReportSchema(definition) {
|
|
|
24
71
|
errors.push('Report definition missing required "name".');
|
|
25
72
|
}
|
|
26
73
|
const columns = definition.layout?.columns ?? 12;
|
|
27
|
-
if (columns < 1 || columns > 36) {
|
|
74
|
+
if (!Number.isInteger(columns) || columns < 1 || columns > 36) {
|
|
28
75
|
errors.push(`Invalid layout columns count: ${columns}. Must be between 1 and 36.`);
|
|
29
76
|
}
|
|
30
77
|
// Verify component IDs and keys
|
|
@@ -72,6 +119,15 @@ export function validateReportSchema(definition) {
|
|
|
72
119
|
warnings,
|
|
73
120
|
};
|
|
74
121
|
}
|
|
122
|
+
/** Normalize legacy optional collections only after verifying unknown input is safe. */
|
|
123
|
+
export function normalizeReportDefinition(value) {
|
|
124
|
+
const result = validateReportSchema(value);
|
|
125
|
+
if (!result.valid)
|
|
126
|
+
throw new ReportDefinitionError(result.errors.join('; '));
|
|
127
|
+
const report = value;
|
|
128
|
+
return { ...report, schemaVersion: report.schemaVersion ?? 1, layout: report.layout ?? { columns: 12 },
|
|
129
|
+
components: report.components ?? [], parameters: report.parameters ?? [], dataSources: report.dataSources ?? [] };
|
|
130
|
+
}
|
|
75
131
|
/**
|
|
76
132
|
* SchemaValidatorService provides schema verification methods.
|
|
77
133
|
*/
|
|
@@ -99,4 +155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
99
155
|
type: Injectable,
|
|
100
156
|
args: [{ providedIn: 'root' }]
|
|
101
157
|
}] });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcGVyc2lzdGVuY2Uvc2VydmljZXMvc2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBUTlFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUE0QjtJQUMvRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM3RixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNqRCxJQUFJLE9BQU8sR0FBRyxDQUFD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SUFDakM7O09BRUc7SUFDSCxRQUFRLENBQUMsVUFBNEI7UUFDbkMsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLFVBQTRCO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO3dHQWpCVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZXJyb3JzL3JlcG9ydGluZy1lcnJvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYVZhbGlkYXRpb25SZXN1bHQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFB1cmUgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgdGhlIGludGVncml0eSBhbmQgY29uc3RyYWludHMgb2YgYSBSZXBvcnREZWZpbml0aW9uLlxuICpcbiAqIENoZWNrczpcbiAqIC0gSUQgYW5kIE5hbWUgcHJlc2VuY2VcbiAqIC0gVW5pcXVlIGNvbXBvbmVudCBJRHNcbiAqIC0gVW5pcXVlIHBhcmFtZXRlci9pbnB1dCBrZXlzXG4gKiAtIEdyaWQgZGF0YSBzb3VyY2UgcmVmZXJlbmNlc1xuICogLSBDb2x1bW4gc3BhbiBib3VuZGFyeSB2aW9sYXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlcG9ydFNjaGVtYShkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uKTogU2NoZW1hVmFsaWRhdGlvblJlc3VsdCB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFsnUmVwb3J0IGRlZmluaXRpb24gaXMgbnVsbCBvciB1bmRlZmluZWQuJ10sIHdhcm5pbmdzOiBbXSB9O1xuICB9XG5cbiAgaWYgKCFkZWZpbml0aW9uLmlkIHx8ICFkZWZpbml0aW9uLmlkLnRyaW0oKSkge1xuICAgIGVycm9ycy5wdXNoKCdSZXBvcnQgZGVmaW5pdGlvbiBtaXNzaW5nIHJlcXVpcmVkIFwiaWRcIi4nKTtcbiAgfVxuXG4gIGlmICghZGVmaW5pdGlvbi5uYW1lIHx8ICFkZWZpbml0aW9uLm5hbWUudHJpbSgpKSB7XG4gICAgZXJyb3JzLnB1c2goJ1JlcG9ydCBkZWZpbml0aW9uIG1pc3NpbmcgcmVxdWlyZWQgXCJuYW1lXCIuJyk7XG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gZGVmaW5pdGlvbi5sYXlvdXQ/LmNvbHVtbnMgPz8gMTI7XG4gIGlmIChjb2x1bW5zIDwgMSB8fCBjb2x1bW5zID4gMzYpIHtcbiAgICBlcnJvcnMucHVzaChgSW52YWxpZCBsYXlvdXQgY29sdW1ucyBjb3VudDogJHtjb2x1bW5zfS4gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDM2LmApO1xuICB9XG5cbiAgLy8gVmVyaWZ5IGNvbXBvbmVudCBJRHMgYW5kIGtleXNcbiAgY29uc3QgY29tcG9uZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNvbXBvbmVudEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXAgb2YgZGVmaW5pdGlvbi5jb21wb25lbnRzID8/IFtdKSB7XG4gICAgaWYgKCFjb21wLmlkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnRW5jb3VudGVyZWQgY29tcG9uZW50IG1pc3NpbmcgdW5pcXVlIFwiaWRcIi4nKTtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudElkcy5oYXMoY29tcC5pZCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBEdXBsaWNhdGUgY29tcG9uZW50IElEIGZvdW5kOiBcIiR7Y29tcC5pZH1cIi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50SWRzLmFkZChjb21wLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC5rZXkpIHtcbiAgICAgIGlmIChjb21wb25lbnRLZXlzLmhhcyhjb21wLmtleSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBmb3JtIGZpZWxkIGtleSBmb3VuZDogXCIke2NvbXAua2V5fVwiLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50S2V5cy5hZGQoY29tcC5rZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tcC50eXBlICE9PSAnYnV0dG9uJyAmJiBjb21wLnR5cGUgIT09ICdkaXNwbGF5Jykge1xuICAgICAgd2FybmluZ3MucHVzaChgSW5wdXQgY29tcG9uZW50IFwiJHtjb21wLmlkfVwiICgke2NvbXAudHlwZX0pIGhhcyBubyBcImtleVwiIGRlZmluZWQgZm9yIGZvcm0gYmluZGluZy5gKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC5sYXlvdXQ/LmNvbHVtblNwYW4gJiYgY29tcC5sYXlvdXQuY29sdW1uU3BhbiA+IGNvbHVtbnMpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgIGBDb21wb25lbnQgXCIke2NvbXAuaWR9XCIgY29sdW1uU3BhbiAoJHtjb21wLmxheW91dC5jb2x1bW5TcGFufSkgZXhjZWVkcyBwYWdlIHRvdGFsIGNvbHVtbnMgKCR7Y29sdW1uc30pLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmVyaWZ5IGdyaWQgJiBkYXRhIHNvdXJjZSBpbnRlZ3JpdHlcbiAgaWYgKGRlZmluaXRpb24uZ3JpZCkge1xuICAgIGNvbnN0IGRzSWQgPSBkZWZpbml0aW9uLmdyaWQuZGF0YVNvdXJjZUlkO1xuICAgIGNvbnN0IGRzRXhpc3RzID0gKGRlZmluaXRpb24uZGF0YVNvdXJjZXMgPz8gW10pLnNvbWUoKGRzKSA9PiBkcy5pZCA9PT0gZHNJZCk7XG5cbiAgICBpZiAoIWRzRXhpc3RzKSB7XG4gICAgICBlcnJvcnMucHVzaChgR3JpZCByZWZlcmVuY2VzIGRhdGFTb3VyY2VJZCBcIiR7ZHNJZH1cIiwgYnV0IG5vIG1hdGNoaW5nIGRhdGEgc291cmNlIHdhcyBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlZmluaXRpb24uZ3JpZC5jb2x1bW5zIHx8IGRlZmluaXRpb24uZ3JpZC5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2FybmluZ3MucHVzaCgnR3JpZCBkZWZpbml0aW9uIGhhcyBubyBjb2x1bW5zIGNvbmZpZ3VyZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICBlcnJvcnMsXG4gICAgd2FybmluZ3MsXG4gIH07XG59XG5cbi8qKlxuICogU2NoZW1hVmFsaWRhdG9yU2VydmljZSBwcm92aWRlcyBzY2hlbWEgdmVyaWZpY2F0aW9uIG1ldGhvZHMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU2NoZW1hVmFsaWRhdG9yU2VydmljZSB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSByZXBvcnQgZGVmaW5pdGlvbiBhbmQgcmV0dXJucyBlcnJvcnMvd2FybmluZ3Mgd2l0aG91dCB0aHJvd2luZy5cbiAgICovXG4gIHZhbGlkYXRlKGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24pOiBTY2hlbWFWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gdmFsaWRhdGVSZXBvcnRTY2hlbWEoZGVmaW5pdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQXNzZXJ0cyB0aGF0IGEgcmVwb3J0IGRlZmluaXRpb24gaXMgdmFsaWQuXG4gICAqIFRocm93cyBgUmVwb3J0RGVmaW5pdGlvbkVycm9yYCBpZiBhbnkgdmFsaWRhdGlvbiBlcnJvciBpcyBkZXRlY3RlZC5cbiAgICovXG4gIGFzc2VydFZhbGlkKGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlKGRlZmluaXRpb24pO1xuICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVwb3J0RGVmaW5pdGlvbkVycm9yKHJlc3VsdC5lcnJvcnMuam9pbignOyAnKSwgZGVmaW5pdGlvbj8uaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcGVyc2lzdGVuY2Uvc2VydmljZXMvc2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBUTlFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUE0QjtJQUMvRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM3RixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsVUFBZ0QsQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWMsRUFBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuSSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBVSxFQUFFLENBQUM7UUFDMUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFVLEVBQUUsQ0FBQztRQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsK0JBQStCLENBQUMsQ0FBQztJQUM5SSxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDOUssSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ25KLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDMUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzlKLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFFN0QsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3BELElBQUksT0FBTyxTQUFTLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDbkssSUFBSSxTQUFTLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssUUFBUTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNySCxJQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDaEksSUFBSSxTQUFTLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ2hJLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN0SCxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEQsSUFBSSxPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDckssYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUN4TCxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7UUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDN0osSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUU3RCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE9BQU8sNkJBQTZCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUV4QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUM7YUFBTSxDQUFDO1lBQ04sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0QsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSwwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ2hFLFFBQVEsQ0FBQyxJQUFJLENBQ1gsY0FBYyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLGlDQUFpQyxPQUFPLElBQUksQ0FDekcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFN0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsSUFBSSwyQ0FBMkMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JFLFFBQVEsQ0FBQyxJQUFJLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzFCLE1BQU07UUFDTixRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUM7QUFFRCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQWM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsS0FBeUIsQ0FBQyxDQUFDO0lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLEtBQXlCLENBQUM7SUFDekMsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7UUFDcEcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN0SCxDQUFDO0FBRUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDOztPQUVHO0lBQ0gsUUFBUSxDQUFDLFVBQTRCO1FBQ25DLE9BQU8sb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxVQUE0QjtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQzt3R0FqQlUsc0JBQXNCOzRHQUF0QixzQkFBc0IsY0FEVCxNQUFNOzs0RkFDbkIsc0JBQXNCO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Vycm9ycy9yZXBvcnRpbmctZXJyb3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFWYWxpZGF0aW9uUmVzdWx0IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yczogc3RyaW5nW107XG4gIHdhcm5pbmdzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQdXJlIGZ1bmN0aW9uIHRoYXQgdmFsaWRhdGVzIHRoZSBpbnRlZ3JpdHkgYW5kIGNvbnN0cmFpbnRzIG9mIGEgUmVwb3J0RGVmaW5pdGlvbi5cbiAqXG4gKiBDaGVja3M6XG4gKiAtIElEIGFuZCBOYW1lIHByZXNlbmNlXG4gKiAtIFVuaXF1ZSBjb21wb25lbnQgSURzXG4gKiAtIFVuaXF1ZSBwYXJhbWV0ZXIvaW5wdXQga2V5c1xuICogLSBHcmlkIGRhdGEgc291cmNlIHJlZmVyZW5jZXNcbiAqIC0gQ29sdW1uIHNwYW4gYm91bmRhcnkgdmlvbGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZXBvcnRTY2hlbWEoZGVmaW5pdGlvbjogUmVwb3J0RGVmaW5pdGlvbik6IFNjaGVtYVZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICghZGVmaW5pdGlvbiB8fCB0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3JzOiBbJ1JlcG9ydCBkZWZpbml0aW9uIGlzIG51bGwgb3IgdW5kZWZpbmVkLiddLCB3YXJuaW5nczogW10gfTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZCA9IGRlZmluaXRpb24gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgb2JqZWN0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydpZCcsICduYW1lJ10gYXMgY29uc3QpIHtcbiAgICBpZiAodHlwZW9mIHJlY29yZFtrZXldICE9PSAnc3RyaW5nJykgZXJyb3JzLnB1c2goYFJlcG9ydCAke2tleX0gbXVzdCBiZSBhIHN0cmluZy5gKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2NvbXBvbmVudHMnLCAncGFyYW1ldGVycycsICdkYXRhU291cmNlcyddIGFzIGNvbnN0KSB7XG4gICAgY29uc3QgdmFsdWUgPSByZWNvcmRba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUoaXRlbSA9PiAhb2JqZWN0KGl0ZW0pKSkpIGVycm9ycy5wdXNoKGAke2tleX0gbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzLmApO1xuICB9XG4gIGlmIChyZWNvcmRbJ3ZlcnNpb24nXSAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzSW50ZWdlcihyZWNvcmRbJ3ZlcnNpb24nXSkgfHwgTnVtYmVyKHJlY29yZFsndmVyc2lvbiddKSA8IDApKSBlcnJvcnMucHVzaCgnUmVwb3J0IHZlcnNpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLicpO1xuICBpZiAocmVjb3JkWydzY2hlbWFWZXJzaW9uJ10gIT09IHVuZGVmaW5lZCAmJiByZWNvcmRbJ3NjaGVtYVZlcnNpb24nXSAhPT0gMSkgZXJyb3JzLnB1c2goJ1Vuc3VwcG9ydGVkIHJlcG9ydCBzY2hlbWFWZXJzaW9uLiBTdXBwb3J0ZWQgdmVyc2lvbjogMS4nKTtcbiAgaWYgKHJlY29yZFsnbGF5b3V0J10gIT09IHVuZGVmaW5lZCAmJiAhb2JqZWN0KHJlY29yZFsnbGF5b3V0J10pKSBlcnJvcnMucHVzaCgnbGF5b3V0IG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICBpZiAocmVjb3JkWydncmlkJ10gIT09IHVuZGVmaW5lZCAmJiAoIW9iamVjdChyZWNvcmRbJ2dyaWQnXSkgfHwgIUFycmF5LmlzQXJyYXkocmVjb3JkWydncmlkJ11bJ2NvbHVtbnMnXSkpKSBlcnJvcnMucHVzaCgnZ3JpZCBtdXN0IGNvbnRhaW4gYSBjb2x1bW5zIGFycmF5LicpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcnMsIHdhcm5pbmdzIH07XG5cbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgZGVmaW5pdGlvbi5jb21wb25lbnRzID8/IFtdKSB7XG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQuaWQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb21wb25lbnQudHlwZSAhPT0gJ3N0cmluZycgfHwgIWNvbXBvbmVudC50eXBlLnRyaW0oKSkgZXJyb3JzLnB1c2goJ0NvbXBvbmVudHMgcmVxdWlyZSBzdHJpbmcgaWQgYW5kIHR5cGUgZmllbGRzLicpO1xuICAgIGlmIChjb21wb25lbnQua2V5ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGNvbXBvbmVudC5rZXkgIT09ICdzdHJpbmcnKSBlcnJvcnMucHVzaCgnQ29tcG9uZW50IGtleXMgbXVzdCBiZSBzdHJpbmdzLicpO1xuICAgIGlmIChjb21wb25lbnQucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkICYmICFvYmplY3QoY29tcG9uZW50LnByb3BlcnRpZXMpKSBlcnJvcnMucHVzaCgnQ29tcG9uZW50IHByb3BlcnRpZXMgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgaWYgKGNvbXBvbmVudC5kYXRhU291cmNlICE9PSB1bmRlZmluZWQgJiYgIW9iamVjdChjb21wb25lbnQuZGF0YVNvdXJjZSkpIGVycm9ycy5wdXNoKCdDb21wb25lbnQgZGF0YVNvdXJjZSBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICBpZiAoY29tcG9uZW50LmxheW91dCAhPT0gdW5kZWZpbmVkICYmICFvYmplY3QoY29tcG9uZW50LmxheW91dCkpIGVycm9ycy5wdXNoKCdDb21wb25lbnQgbGF5b3V0IG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICB9XG4gIGNvbnN0IHBhcmFtZXRlcktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID8/IFtdKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIua2V5ICE9PSAnc3RyaW5nJyB8fCAhcGFyYW1ldGVyLmtleS50cmltKCkgfHwgcGFyYW1ldGVyS2V5cy5oYXMocGFyYW1ldGVyLmtleSkpIGVycm9ycy5wdXNoKCdQYXJhbWV0ZXJzIHJlcXVpcmUgdW5pcXVlLCBub24tZW1wdHkgc3RyaW5nIGtleXMuJyk7XG4gICAgcGFyYW1ldGVyS2V5cy5hZGQocGFyYW1ldGVyLmtleSk7XG4gIH1cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgZGVmaW5pdGlvbi5kYXRhU291cmNlcyA/PyBbXSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlLmlkICE9PSAnc3RyaW5nJyB8fCB0eXBlb2Ygc291cmNlLm5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBzb3VyY2UuZW5kcG9pbnQgIT09ICdzdHJpbmcnKSBlcnJvcnMucHVzaCgnRGF0YSBzb3VyY2VzIHJlcXVpcmUgc3RyaW5nIGlkLCBuYW1lIGFuZCBlbmRwb2ludCBmaWVsZHMuJyk7XG4gIH1cbiAgaWYgKGRlZmluaXRpb24uZ3JpZD8uY29sdW1ucy5zb21lKGNvbHVtbiA9PiAhb2JqZWN0KGNvbHVtbikgfHwgdHlwZW9mIGNvbHVtblsnZmllbGQnXSAhPT0gJ3N0cmluZycpKSBlcnJvcnMucHVzaCgnR3JpZCBjb2x1bW5zIHJlcXVpcmUgc3RyaW5nIGZpZWxkIG5hbWVzLicpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcnMsIHdhcm5pbmdzIH07XG5cbiAgaWYgKCFkZWZpbml0aW9uLmlkIHx8ICFkZWZpbml0aW9uLmlkLnRyaW0oKSkge1xuICAgIGVycm9ycy5wdXNoKCdSZXBvcnQgZGVmaW5pdGlvbiBtaXNzaW5nIHJlcXVpcmVkIFwiaWRcIi4nKTtcbiAgfVxuXG4gIGlmICghZGVmaW5pdGlvbi5uYW1lIHx8ICFkZWZpbml0aW9uLm5hbWUudHJpbSgpKSB7XG4gICAgZXJyb3JzLnB1c2goJ1JlcG9ydCBkZWZpbml0aW9uIG1pc3NpbmcgcmVxdWlyZWQgXCJuYW1lXCIuJyk7XG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gZGVmaW5pdGlvbi5sYXlvdXQ/LmNvbHVtbnMgPz8gMTI7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2x1bW5zKSB8fCBjb2x1bW5zIDwgMSB8fCBjb2x1bW5zID4gMzYpIHtcbiAgICBlcnJvcnMucHVzaChgSW52YWxpZCBsYXlvdXQgY29sdW1ucyBjb3VudDogJHtjb2x1bW5zfS4gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDM2LmApO1xuICB9XG5cbiAgLy8gVmVyaWZ5IGNvbXBvbmVudCBJRHMgYW5kIGtleXNcbiAgY29uc3QgY29tcG9uZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNvbXBvbmVudEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXAgb2YgZGVmaW5pdGlvbi5jb21wb25lbnRzID8/IFtdKSB7XG4gICAgaWYgKCFjb21wLmlkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnRW5jb3VudGVyZWQgY29tcG9uZW50IG1pc3NpbmcgdW5pcXVlIFwiaWRcIi4nKTtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudElkcy5oYXMoY29tcC5pZCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBEdXBsaWNhdGUgY29tcG9uZW50IElEIGZvdW5kOiBcIiR7Y29tcC5pZH1cIi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50SWRzLmFkZChjb21wLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC5rZXkpIHtcbiAgICAgIGlmIChjb21wb25lbnRLZXlzLmhhcyhjb21wLmtleSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBmb3JtIGZpZWxkIGtleSBmb3VuZDogXCIke2NvbXAua2V5fVwiLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50S2V5cy5hZGQoY29tcC5rZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tcC50eXBlICE9PSAnYnV0dG9uJyAmJiBjb21wLnR5cGUgIT09ICdkaXNwbGF5Jykge1xuICAgICAgd2FybmluZ3MucHVzaChgSW5wdXQgY29tcG9uZW50IFwiJHtjb21wLmlkfVwiICgke2NvbXAudHlwZX0pIGhhcyBubyBcImtleVwiIGRlZmluZWQgZm9yIGZvcm0gYmluZGluZy5gKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC5sYXlvdXQ/LmNvbHVtblNwYW4gJiYgY29tcC5sYXlvdXQuY29sdW1uU3BhbiA+IGNvbHVtbnMpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgIGBDb21wb25lbnQgXCIke2NvbXAuaWR9XCIgY29sdW1uU3BhbiAoJHtjb21wLmxheW91dC5jb2x1bW5TcGFufSkgZXhjZWVkcyBwYWdlIHRvdGFsIGNvbHVtbnMgKCR7Y29sdW1uc30pLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmVyaWZ5IGdyaWQgJiBkYXRhIHNvdXJjZSBpbnRlZ3JpdHlcbiAgaWYgKGRlZmluaXRpb24uZ3JpZCkge1xuICAgIGNvbnN0IGRzSWQgPSBkZWZpbml0aW9uLmdyaWQuZGF0YVNvdXJjZUlkO1xuICAgIGNvbnN0IGRzRXhpc3RzID0gKGRlZmluaXRpb24uZGF0YVNvdXJjZXMgPz8gW10pLnNvbWUoKGRzKSA9PiBkcy5pZCA9PT0gZHNJZCk7XG5cbiAgICBpZiAoIWRzRXhpc3RzKSB7XG4gICAgICBlcnJvcnMucHVzaChgR3JpZCByZWZlcmVuY2VzIGRhdGFTb3VyY2VJZCBcIiR7ZHNJZH1cIiwgYnV0IG5vIG1hdGNoaW5nIGRhdGEgc291cmNlIHdhcyBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlZmluaXRpb24uZ3JpZC5jb2x1bW5zIHx8IGRlZmluaXRpb24uZ3JpZC5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2FybmluZ3MucHVzaCgnR3JpZCBkZWZpbml0aW9uIGhhcyBubyBjb2x1bW5zIGNvbmZpZ3VyZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICBlcnJvcnMsXG4gICAgd2FybmluZ3MsXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgbGVnYWN5IG9wdGlvbmFsIGNvbGxlY3Rpb25zIG9ubHkgYWZ0ZXIgdmVyaWZ5aW5nIHVua25vd24gaW5wdXQgaXMgc2FmZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXBvcnREZWZpbml0aW9uKHZhbHVlOiB1bmtub3duKTogUmVwb3J0RGVmaW5pdGlvbiB7XG4gIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUmVwb3J0U2NoZW1hKHZhbHVlIGFzIFJlcG9ydERlZmluaXRpb24pO1xuICBpZiAoIXJlc3VsdC52YWxpZCkgdGhyb3cgbmV3IFJlcG9ydERlZmluaXRpb25FcnJvcihyZXN1bHQuZXJyb3JzLmpvaW4oJzsgJykpO1xuICBjb25zdCByZXBvcnQgPSB2YWx1ZSBhcyBSZXBvcnREZWZpbml0aW9uO1xuICByZXR1cm4geyAuLi5yZXBvcnQsIHNjaGVtYVZlcnNpb246IHJlcG9ydC5zY2hlbWFWZXJzaW9uID8/IDEsIGxheW91dDogcmVwb3J0LmxheW91dCA/PyB7IGNvbHVtbnM6IDEyIH0sXG4gICAgY29tcG9uZW50czogcmVwb3J0LmNvbXBvbmVudHMgPz8gW10sIHBhcmFtZXRlcnM6IHJlcG9ydC5wYXJhbWV0ZXJzID8/IFtdLCBkYXRhU291cmNlczogcmVwb3J0LmRhdGFTb3VyY2VzID8/IFtdIH07XG59XG5cbi8qKlxuICogU2NoZW1hVmFsaWRhdG9yU2VydmljZSBwcm92aWRlcyBzY2hlbWEgdmVyaWZpY2F0aW9uIG1ldGhvZHMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU2NoZW1hVmFsaWRhdG9yU2VydmljZSB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSByZXBvcnQgZGVmaW5pdGlvbiBhbmQgcmV0dXJucyBlcnJvcnMvd2FybmluZ3Mgd2l0aG91dCB0aHJvd2luZy5cbiAgICovXG4gIHZhbGlkYXRlKGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24pOiBTY2hlbWFWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gdmFsaWRhdGVSZXBvcnRTY2hlbWEoZGVmaW5pdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQXNzZXJ0cyB0aGF0IGEgcmVwb3J0IGRlZmluaXRpb24gaXMgdmFsaWQuXG4gICAqIFRocm93cyBgUmVwb3J0RGVmaW5pdGlvbkVycm9yYCBpZiBhbnkgdmFsaWRhdGlvbiBlcnJvciBpcyBkZXRlY3RlZC5cbiAgICovXG4gIGFzc2VydFZhbGlkKGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlKGRlZmluaXRpb24pO1xuICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVwb3J0RGVmaW5pdGlvbkVycm9yKHJlc3VsdC5lcnJvcnMuam9pbignOyAnKSwgZGVmaW5pdGlvbj8uaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';
|
|
2
|
+
import { reportRouteIdentifier } from '../resolvers/report-route-identifier';
|
|
2
3
|
import { CommonModule } from '@angular/common';
|
|
3
4
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -15,14 +16,14 @@ export class RoutedReportDesignerComponent {
|
|
|
15
16
|
loading = signal(true);
|
|
16
17
|
savedFeedback = signal(false);
|
|
17
18
|
ngOnInit() {
|
|
18
|
-
const reportId = this.route.snapshot
|
|
19
|
+
const reportId = reportRouteIdentifier(this.route.snapshot);
|
|
19
20
|
if (!reportId || reportId === 'new') {
|
|
20
21
|
// Create blank report
|
|
21
22
|
this.report.set(this.createBlankReport());
|
|
22
23
|
this.loading.set(false);
|
|
23
24
|
return;
|
|
24
25
|
}
|
|
25
|
-
this.store.
|
|
26
|
+
this.store.loadReportBySlug(reportId)
|
|
26
27
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
27
28
|
.subscribe({
|
|
28
29
|
next: (rep) => {
|
|
@@ -36,20 +37,14 @@ export class RoutedReportDesignerComponent {
|
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
39
|
onSaveReport(updatedReport) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
setTimeout(() => this.savedFeedback.set(false), 2500);
|
|
45
|
-
},
|
|
46
|
-
error: (err) => {
|
|
47
|
-
console.error('[bways-report] Save report failed:', err);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
40
|
+
// The designer emits only after storage confirms the reviewed definition.
|
|
41
|
+
this.store.cacheSavedReport(updatedReport);
|
|
42
|
+
this.report.set(updatedReport);
|
|
43
|
+
this.savedFeedback.set(true);
|
|
44
|
+
setTimeout(() => this.savedFeedback.set(false), 2500);
|
|
50
45
|
}
|
|
51
46
|
goBack() {
|
|
52
|
-
const reportId = this.route.snapshot
|
|
47
|
+
const reportId = reportRouteIdentifier(this.route.snapshot);
|
|
53
48
|
if (reportId && reportId !== 'new') {
|
|
54
49
|
this.router.navigate(['../'], { relativeTo: this.route });
|
|
55
50
|
}
|
|
@@ -116,7 +111,7 @@ export class RoutedReportDesignerComponent {
|
|
|
116
111
|
/>
|
|
117
112
|
}
|
|
118
113
|
</div>
|
|
119
|
-
`, isInline: true, styles: [".rpt-routed-designer-host{display:flex;flex-direction:column;height:100%;min-height:
|
|
114
|
+
`, isInline: true, styles: [":host{display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0}.rpt-routed-designer-host{display:flex;flex-direction:column;height:100%;flex:1;min-height:0;box-sizing:border-box}.rpt-routed-designer-bar{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:var(--rpt-surface-bg, #ffffff);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-saved-pill{display:inline-flex;align-items:center;gap:5px;font-size:.8125rem;color:#166534;background:#dcfce7;padding:3px 10px;border-radius:9999px;font-weight:500;animation:rptFadeInOut 2.5s ease-in-out forwards}@keyframes rptFadeInOut{0%{opacity:0;transform:translateY(-4px)}15%{opacity:1;transform:translateY(0)}85%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.rpt-routed-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;color:var(--rpt-text-muted, #64748b)}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;font-size:.8125rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;background:transparent;color:var(--rpt-text-muted, #64748b);transition:all .15s ease}.rpt-btn:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DesignerComponent, selector: "rpt-designer", inputs: ["config", "apiUrl", "reportId", "initialReport"], outputs: ["save", "definitionChange"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
120
115
|
}
|
|
121
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RoutedReportDesignerComponent, decorators: [{
|
|
122
117
|
type: Component,
|
|
@@ -151,6 +146,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
151
146
|
/>
|
|
152
147
|
}
|
|
153
148
|
</div>
|
|
154
|
-
`, styles: [".rpt-routed-designer-host{display:flex;flex-direction:column;height:100%;min-height:
|
|
149
|
+
`, styles: [":host{display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0}.rpt-routed-designer-host{display:flex;flex-direction:column;height:100%;flex:1;min-height:0;box-sizing:border-box}.rpt-routed-designer-bar{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:var(--rpt-surface-bg, #ffffff);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-saved-pill{display:inline-flex;align-items:center;gap:5px;font-size:.8125rem;color:#166534;background:#dcfce7;padding:3px 10px;border-radius:9999px;font-weight:500;animation:rptFadeInOut 2.5s ease-in-out forwards}@keyframes rptFadeInOut{0%{opacity:0;transform:translateY(-4px)}15%{opacity:1;transform:translateY(0)}85%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.rpt-routed-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;color:var(--rpt-text-muted, #64748b)}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;font-size:.8125rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;background:transparent;color:var(--rpt-text-muted, #64748b);transition:all .15s ease}.rpt-btn:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"] }]
|
|
155
150
|
}] });
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9yb3V0aW5nL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0RBQXdELENBQUM7O0FBMkgxRixNQUFNLE9BQU8sNkJBQTZCO0lBQ3ZCLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxNQUFNLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMvQyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLGFBQWEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7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LEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxFQUFFLEVBQUUsWUFBWTtvQkFDaEIsSUFBSSxFQUFFLHFCQUFxQjtvQkFDM0IsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUUsRUFBRTthQUNSO1NBQ0YsQ0FBQztJQUNKLENBQUM7d0dBbkZVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLCtFQW5IOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQsOGpEQWpDUyxZQUFZLCtCQUFFLGlCQUFpQix1SUFBRSxnQkFBZ0I7OzRGQXFIaEQsNkJBQTZCO2tCQXhIekMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLG1CQUMzQyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgT25Jbml0LFxuICBpbmplY3QsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBSZXBvcnRTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Rlc2lnbmVyL2Rlc2lnbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtcm91dGVkLWRlc2lnbmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGVzaWduZXJDb21wb25lbnQsIFJwdEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1kZXNpZ25lci1ob3N0XCI+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1sb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgPHA+TG9hZGluZyByZXBvcnQgZGVzaWduZXIuLi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWRlc2lnbmVyLWJhclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tZ2hvc3QgcnB0LWJ0bi1zbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgICAgICAgICAgdGl0bGU9XCJSZXR1cm4gdG8gcmVwb3J0IHZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkV4aXQgRGVzaWduZXI8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChzYXZlZEZlZWRiYWNrKCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXNhdmVkLXBpbGxcIj5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+U2F2ZWQgc3VjY2Vzc2Z1bGx5PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxycHQtZGVzaWduZXJcbiAgICAgICAgICBbaW5pdGlhbFJlcG9ydF09XCJyZXBvcnQoKVwiXG4gICAgICAgICAgKHNhdmUpPVwib25TYXZlUmVwb3J0KCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJwdC1yb3V0ZWQtZGVzaWduZXItaG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtZGVzaWduZXItYmFyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogNnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgfVxuXG4gICAgLnJwdC1zYXZlZC1waWxsIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBjb2xvcjogIzE2NjUzNDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBhbmltYXRpb246IHJwdEZhZGVJbk91dCAyLjVzIGVhc2UtaW4tb3V0IGZvcndhcmRzO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0RmFkZUluT3V0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOyB9XG4gICAgICAxNSUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICAgIDg1JSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgICAgMTAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsgfVxuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLWxvYWRpbmcge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBoZWlnaHQ6IDMwMHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXNwaW5uZXIge1xuICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogcnB0LXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0LXNwaW4ge1xuICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gICAgfVxuXG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG46aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2ZWRGZWVkYmFjayA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcblxuICAgIGlmICghcmVwb3J0SWQgfHwgcmVwb3J0SWQgPT09ICduZXcnKSB7XG4gICAgICAvLyBDcmVhdGUgYmxhbmsgcmVwb3J0XG4gICAgICB0aGlzLnJlcG9ydC5zZXQodGhpcy5jcmVhdGVCbGFua1JlcG9ydCgpKTtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmUubG9hZFJlcG9ydChyZXBvcnRJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXApID0+IHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQocmVwID8/IHRoaXMuY3JlYXRlQmxhbmtSZXBvcnQoKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHRoaXMuY3JlYXRlQmxhbmtSZXBvcnQoKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25TYXZlUmVwb3J0KHVwZGF0ZWRSZXBvcnQ6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLnNhdmVSZXBvcnQodXBkYXRlZFJlcG9ydClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNhdmVkRmVlZGJhY2suc2V0KHRydWUpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zYXZlZEZlZWRiYWNrLnNldChmYWxzZSksIDI1MDApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tid2F5cy1yZXBvcnRdIFNhdmUgcmVwb3J0IGZhaWxlZDonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXBvcnRJZCcpO1xuICAgIGlmIChyZXBvcnRJZCAmJiByZXBvcnRJZCAhPT0gJ25ldycpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxhbmtSZXBvcnQoKTogUmVwb3J0RGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgcmVwb3J0LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgbmFtZTogJ1VudGl0bGVkIFJlcG9ydCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ05ld2x5IGNyZWF0ZWQgcmVwb3J0JyxcbiAgICAgIGNhdGVnb3J5OiAnR2VuZXJhbCcsXG4gICAgICBzY2hlbWFWZXJzaW9uOiAxLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICBkYXRhU291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdkcy1kZWZhdWx0JyxcbiAgICAgICAgICBuYW1lOiAnRGVmYXVsdCBEYXRhIFNvdXJjZScsXG4gICAgICAgICAgZW5kcG9pbnQ6ICcvYXBpL3JlcG9ydHMvZGF0YSdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGdyaWQ6IHtcbiAgICAgICAgZGF0YVNvdXJjZUlkOiAnZHMtZGVmYXVsdCcsXG4gICAgICAgIGNvbHVtbnM6IFtdXG4gICAgICB9LFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIGNvbHVtbnM6IDEyLFxuICAgICAgICBnYXA6IDE2XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5cbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9yb3V0aW5nL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0RBQXdELENBQUM7O0FBcUkxRixNQUFNLE9BQU8sNkJBQTZCO0lBQ3ZCLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxNQUFNLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMvQyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxD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WSxFQUFFLFlBQVk7Z0JBQzFCLE9BQU8sRUFBRSxFQUFFO2FBQ1o7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLEVBQUU7YUFDUjtTQUNGLENBQUM7SUFDSixDQUFDO3dHQTdFVSw2QkFBNkI7NEZBQTdCLDZCQUE2QiwrRUE3SDlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JULHVwREFqQ1MsWUFBWSwrQkFBRSxpQkFBaUIsMkpBQUUsZ0JBQWdCOzs0RkErSGhELDZCQUE2QjtrQkFsSXpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFDM0MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXBvcnRSb3V0ZUlkZW50aWZpZXIgfSBmcm9tICcuLi9yZXNvbHZlcnMvcmVwb3J0LXJvdXRlLWlkZW50aWZpZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3JlcG9ydC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1yb3V0ZWQtZGVzaWduZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEZXNpZ25lckNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWRlc2lnbmVyLWhvc3RcIj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWxvYWRpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICA8cD5Mb2FkaW5nIHJlcG9ydCBkZXNpZ25lci4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtZGVzaWduZXItYmFyXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInJwdC1idG4gcnB0LWJ0bi1naG9zdCBycHQtYnRuLXNtXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICAgICAgICB0aXRsZT1cIlJldHVybiB0byByZXBvcnQgdmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJhcnJvdy1sZWZ0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+RXhpdCBEZXNpZ25lcjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKHNhdmVkRmVlZGJhY2soKSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtc2F2ZWQtcGlsbFwiPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5TYXZlZCBzdWNjZXNzZnVsbHk8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJwdC1kZXNpZ25lclxuICAgICAgICAgIFtpbml0aWFsUmVwb3J0XT1cInJlcG9ydCgpXCJcbiAgICAgICAgICAoc2F2ZSk9XCJvblNhdmVSZXBvcnQoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucnB0LXJvdXRlZC1kZXNpZ25lci1ob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLWRlc2lnbmVyLWJhciB7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogNnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgfVxuXG4gICAgLnJwdC1zYXZlZC1waWxsIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBjb2xvcjogIzE2NjUzNDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBhbmltYXRpb246IHJwdEZhZGVJbk91dCAyLjVzIGVhc2UtaW4tb3V0IGZvcndhcmRzO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0RmFkZUluT3V0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOyB9XG4gICAgICAxNSUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICAgIDg1JSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgICAgMTAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsgfVxuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLWxvYWRpbmcge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBoZWlnaHQ6IDMwMHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXNwaW5uZXIge1xuICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogcnB0LXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0LXNwaW4ge1xuICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gICAgfVxuXG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG46aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2ZWRGZWVkYmFjayA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSByZXBvcnRSb3V0ZUlkZW50aWZpZXIodGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG5cbiAgICBpZiAoIXJlcG9ydElkIHx8IHJlcG9ydElkID09PSAnbmV3Jykge1xuICAgICAgLy8gQ3JlYXRlIGJsYW5rIHJlcG9ydFxuICAgICAgdGhpcy5yZXBvcnQuc2V0KHRoaXMuY3JlYXRlQmxhbmtSZXBvcnQoKSk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLmxvYWRSZXBvcnRCeVNsdWcocmVwb3J0SWQpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVwKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHJlcCA/PyB0aGlzLmNyZWF0ZUJsYW5rUmVwb3J0KCkpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVwb3J0LnNldCh0aGlzLmNyZWF0ZUJsYW5rUmVwb3J0KCkpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU2F2ZVJlcG9ydCh1cGRhdGVkUmVwb3J0OiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgLy8gVGhlIGRlc2lnbmVyIGVtaXRzIG9ubHkgYWZ0ZXIgc3RvcmFnZSBjb25maXJtcyB0aGUgcmV2aWV3ZWQgZGVmaW5pdGlvbi5cbiAgICB0aGlzLnN0b3JlLmNhY2hlU2F2ZWRSZXBvcnQodXBkYXRlZFJlcG9ydCk7XG4gICAgdGhpcy5yZXBvcnQuc2V0KHVwZGF0ZWRSZXBvcnQpO1xuICAgIHRoaXMuc2F2ZWRGZWVkYmFjay5zZXQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNhdmVkRmVlZGJhY2suc2V0KGZhbHNlKSwgMjUwMCk7XG4gIH1cblxuICBnb0JhY2soKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSByZXBvcnRSb3V0ZUlkZW50aWZpZXIodGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG4gICAgaWYgKHJlcG9ydElkICYmIHJlcG9ydElkICE9PSAnbmV3Jykge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCbGFua1JlcG9ydCgpOiBSZXBvcnREZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGByZXBvcnQtJHtEYXRlLm5vdygpfWAsXG4gICAgICBuYW1lOiAnVW50aXRsZWQgUmVwb3J0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTmV3bHkgY3JlYXRlZCByZXBvcnQnLFxuICAgICAgY2F0ZWdvcnk6ICdHZW5lcmFsJyxcbiAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgY29tcG9uZW50czogW10sXG4gICAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICAgIGRhdGFTb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2RzLWRlZmF1bHQnLFxuICAgICAgICAgIG5hbWU6ICdEZWZhdWx0IERhdGEgU291cmNlJyxcbiAgICAgICAgICBlbmRwb2ludDogJy9hcGkvcmVwb3J0cy9kYXRhJ1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgZ3JpZDoge1xuICAgICAgICBkYXRhU291cmNlSWQ6ICdkcy1kZWZhdWx0JyxcbiAgICAgICAgY29sdW1uczogW11cbiAgICAgIH0sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uczogMTIsXG4gICAgICAgIGdhcDogMTZcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cblxuIl19
|