@thinkhive/sdk 3.1.1 → 4.0.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.
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK v3.2 - Business Metrics API
4
+ *
5
+ * Industry-driven business metrics with historical tracking and external data support
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.businessMetrics = void 0;
9
+ exports.isMetricReady = isMetricReady;
10
+ exports.needsMoreTraces = needsMoreTraces;
11
+ exports.awaitingExternalData = awaitingExternalData;
12
+ exports.isMetricStale = isMetricStale;
13
+ exports.getStatusMessage = getStatusMessage;
14
+ exports.getTraceProgress = getTraceProgress;
15
+ exports.formatMetricValue = formatMetricValue;
16
+ exports.getTrendEmoji = getTrendEmoji;
17
+ const client_1 = require("../core/client");
18
+ // ============================================================================
19
+ // BUSINESS METRICS API CLIENT
20
+ // ============================================================================
21
+ /**
22
+ * Business Metrics API client for industry-driven metrics with historical tracking
23
+ */
24
+ exports.businessMetrics = {
25
+ /**
26
+ * Get current metric value with status information
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const metric = await businessMetrics.current('agent_123', 'Deflection Rate');
31
+ * console.log(`${metric.metricName}: ${metric.valueFormatted}`);
32
+ *
33
+ * if (metric.status === 'insufficient_data') {
34
+ * console.log(`Need ${metric.minTraceThreshold - metric.traceCount} more traces`);
35
+ * }
36
+ * ```
37
+ */
38
+ async current(agentId, metricName) {
39
+ const params = new URLSearchParams();
40
+ if (metricName) {
41
+ params.set('metricName', metricName);
42
+ }
43
+ const queryString = params.toString();
44
+ const url = `/agents/${agentId}/metrics/current${queryString ? `?${queryString}` : ''}`;
45
+ return (0, client_1.apiRequestWithData)(url, { apiVersion: 'v3' });
46
+ },
47
+ /**
48
+ * Get historical metric data for graphing
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const history = await businessMetrics.history('agent_123', 'Deflection Rate', {
53
+ * startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
54
+ * endDate: new Date(),
55
+ * granularity: 'daily',
56
+ * });
57
+ *
58
+ * console.log(`${history.dataPoints.length} data points`);
59
+ * console.log(`Change: ${history.summary.changePercent}%`);
60
+ * ```
61
+ */
62
+ async history(agentId, metricName, options = {}) {
63
+ const params = new URLSearchParams();
64
+ params.set('metricName', metricName);
65
+ if (options.startDate) {
66
+ params.set('startDate', new Date(options.startDate).toISOString());
67
+ }
68
+ if (options.endDate) {
69
+ params.set('endDate', new Date(options.endDate).toISOString());
70
+ }
71
+ if (options.granularity) {
72
+ params.set('granularity', options.granularity);
73
+ }
74
+ return (0, client_1.apiRequestWithData)(`/agents/${agentId}/metrics/history?${params.toString()}`, { apiVersion: 'v3' });
75
+ },
76
+ /**
77
+ * Record an external metric value
78
+ *
79
+ * Use this to ingest metrics from external data sources (CRM, surveys, billing, etc.)
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * // Record CSAT score from survey system
84
+ * await businessMetrics.record('agent_123', {
85
+ * metricName: 'CSAT/NPS',
86
+ * value: 4.5,
87
+ * unit: 'score',
88
+ * periodStart: '2024-01-01T00:00:00Z',
89
+ * periodEnd: '2024-01-07T23:59:59Z',
90
+ * source: 'survey_system',
91
+ * sourceDetails: { surveyId: 'survey_456', responseCount: 150 },
92
+ * });
93
+ * ```
94
+ */
95
+ async record(agentId, options) {
96
+ const body = {
97
+ metricName: options.metricName,
98
+ value: options.value,
99
+ unit: options.unit,
100
+ periodStart: new Date(options.periodStart).toISOString(),
101
+ periodEnd: new Date(options.periodEnd).toISOString(),
102
+ source: options.source || 'api',
103
+ sourceDetails: options.sourceDetails,
104
+ };
105
+ const response = await (0, client_1.apiRequest)(`/agents/${agentId}/metrics/values`, {
106
+ method: 'POST',
107
+ body,
108
+ apiVersion: 'v3',
109
+ });
110
+ return response.data;
111
+ },
112
+ /**
113
+ * Batch record multiple external metric values
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * await businessMetrics.recordBatch('agent_123', [
118
+ * { metricName: 'CSAT/NPS', value: 4.5, ... },
119
+ * { metricName: 'Hours Saved', value: 120, ... },
120
+ * ]);
121
+ * ```
122
+ */
123
+ async recordBatch(agentId, metrics) {
124
+ const results = await Promise.all(metrics.map((metric) => this.record(agentId, metric)));
125
+ return results;
126
+ },
127
+ };
128
+ // ============================================================================
129
+ // HELPER FUNCTIONS
130
+ // ============================================================================
131
+ /**
132
+ * Check if a metric is ready to display
133
+ */
134
+ function isMetricReady(metric) {
135
+ return metric.status === 'ready';
136
+ }
137
+ /**
138
+ * Check if a metric needs more trace data
139
+ */
140
+ function needsMoreTraces(metric) {
141
+ return metric.status === 'insufficient_data';
142
+ }
143
+ /**
144
+ * Check if a metric is waiting for external data
145
+ */
146
+ function awaitingExternalData(metric) {
147
+ return metric.status === 'awaiting_external';
148
+ }
149
+ /**
150
+ * Check if metric data is stale
151
+ */
152
+ function isMetricStale(metric) {
153
+ return metric.status === 'stale';
154
+ }
155
+ /**
156
+ * Get human-readable status message
157
+ */
158
+ function getStatusMessage(metric) {
159
+ switch (metric.status) {
160
+ case 'ready':
161
+ return 'Metric is up to date';
162
+ case 'insufficient_data':
163
+ return metric.statusMessage ||
164
+ `Need ${(metric.minTraceThreshold || 50) - (metric.traceCount || 0)} more traces`;
165
+ case 'awaiting_external':
166
+ return metric.statusMessage || 'Waiting for external data source';
167
+ case 'stale':
168
+ return metric.statusMessage || 'Data may be outdated';
169
+ default:
170
+ return 'Unknown status';
171
+ }
172
+ }
173
+ /**
174
+ * Calculate progress toward minimum trace threshold
175
+ */
176
+ function getTraceProgress(metric) {
177
+ if (metric.status !== 'insufficient_data')
178
+ return 100;
179
+ return metric.progressPercent || 0;
180
+ }
181
+ /**
182
+ * Format metric value for display based on unit
183
+ */
184
+ function formatMetricValue(value, unit) {
185
+ switch (unit) {
186
+ case '%':
187
+ return `${Math.round(value * 10) / 10}%`;
188
+ case '$':
189
+ return new Intl.NumberFormat('en-US', {
190
+ style: 'currency',
191
+ currency: 'USD',
192
+ }).format(value);
193
+ case 's':
194
+ return value < 60 ? `${Math.round(value)}s` : `${Math.round(value / 60)}m`;
195
+ case 'hrs':
196
+ return `${Math.round(value * 10) / 10} hrs`;
197
+ case 'score':
198
+ return value.toFixed(1);
199
+ default:
200
+ return String(Math.round(value * 100) / 100);
201
+ }
202
+ }
203
+ /**
204
+ * Get trend direction as emoji
205
+ */
206
+ function getTrendEmoji(trend) {
207
+ if (trend.direction === 'up')
208
+ return trend.isPositive ? '📈' : '📉';
209
+ if (trend.direction === 'down')
210
+ return trend.isPositive ? '📈' : '📉';
211
+ return '➡️';
212
+ }
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3MtbWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvYnVzaW5lc3MtbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBMFBILHNDQUVDO0FBS0QsMENBRUM7QUFLRCxvREFFQztBQUtELHNDQUVDO0FBS0QsNENBY0M7QUFLRCw0Q0FHQztBQUtELDhDQWtCQztBQUtELHNDQUlDO0FBMVVELDJDQUFnRTtBQStGaEUsK0VBQStFO0FBQy9FLDhCQUE4QjtBQUM5QiwrRUFBK0U7QUFFL0U7O0dBRUc7QUFDVSxRQUFBLGVBQWUsR0FBRztJQUM3Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUNYLE9BQWUsRUFDZixVQUFtQjtRQUVuQixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLFdBQVcsT0FBTyxtQkFBbUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV4RixPQUFPLElBQUEsMkJBQWtCLEVBQXdCLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsT0FBZSxFQUNmLFVBQWtCLEVBQ2xCLFVBSUksRUFBRTtRQUVOLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUs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QUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxLQUFLLEtBQUs7WUFDUixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7UUFDOUMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCO1lBQ0UsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUFrQjtJQUM5QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4yIC0gQnVzaW5lc3MgTWV0cmljcyBBUElcbiAqXG4gKiBJbmR1c3RyeS1kcml2ZW4gYnVzaW5lc3MgbWV0cmljcyB3aXRoIGhpc3RvcmljYWwgdHJhY2tpbmcgYW5kIGV4dGVybmFsIGRhdGEgc3VwcG9ydFxuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3QsIGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4uL2NvcmUvY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBNZXRyaWMgdHJlbmQgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNUcmVuZCB7XG4gIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyB8ICdzdGFibGUnO1xuICB2YWx1ZTogbnVtYmVyO1xuICBpc1Bvc2l0aXZlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1cnJlbnQgbWV0cmljIHN0YXR1c1xuICovXG5leHBvcnQgdHlwZSBNZXRyaWNTdGF0dXMgPSAncmVhZHknIHwgJ2luc3VmZmljaWVudF9kYXRhJyB8ICdhd2FpdGluZ19leHRlcm5hbCcgfCAnc3RhbGUnO1xuXG4vKipcbiAqIEN1cnJlbnQgbWV0cmljIHJlc3BvbnNlIGZyb20gdGhlIEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRNZXRyaWNSZXNwb25zZSB7XG4gIG1ldHJpY05hbWU6IHN0cmluZztcbiAgbWV0cmljVHlwZTogJ3RyYWNlX2NhbGN1bGF0ZWQnIHwgJ2V4dGVybmFsJztcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHZhbHVlRm9ybWF0dGVkOiBzdHJpbmc7XG4gIHVuaXQ/OiBzdHJpbmc7XG4gIHN0YXR1czogTWV0cmljU3RhdHVzO1xuICBzdGF0dXNNZXNzYWdlPzogc3RyaW5nO1xuICB0cmVuZD86IE1ldHJpY1RyZW5kO1xuICB0cmFjZUNvdW50PzogbnVtYmVyO1xuICBtaW5UcmFjZVRocmVzaG9sZD86IG51bWJlcjtcbiAgcHJvZ3Jlc3NQZXJjZW50PzogbnVtYmVyO1xuICBsYXN0RXh0ZXJuYWxVcGRhdGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGlzdG9yaWNhbCBkYXRhIHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljSGlzdG9yeVBvaW50IHtcbiAgcGVyaW9kU3RhcnQ6IHN0cmluZztcbiAgcGVyaW9kRW5kOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIHZhbHVlRm9ybWF0dGVkPzogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdHJhY2VDb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBIaXN0b3JpY2FsIHN1bW1hcnkgc3RhdGlzdGljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY0hpc3RvcnlTdW1tYXJ5IHtcbiAgY3VycmVudDogbnVtYmVyIHwgbnVsbDtcbiAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gIGNoYW5nZVBlcmNlbnQ6IG51bWJlciB8IG51bGw7XG4gIGlzUG9zaXRpdmU6IGJvb2xlYW47XG4gIGRhdGFQb2ludENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogRnVsbCBoaXN0b3J5IHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljSGlzdG9yeVJlc3BvbnNlIHtcbiAgbWV0cmljTmFtZTogc3RyaW5nO1xuICB1bml0OiBzdHJpbmc7XG4gIGhpZ2hlcklzQmV0dGVyOiBib29sZWFuO1xuICBkYXRhUG9pbnRzOiBNZXRyaWNIaXN0b3J5UG9pbnRbXTtcbiAgc3VtbWFyeTogTWV0cmljSGlzdG9yeVN1bW1hcnk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcmVjb3JkaW5nIGV4dGVybmFsIG1ldHJpYyB2YWx1ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRNZXRyaWNPcHRpb25zIHtcbiAgbWV0cmljTmFtZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICB1bml0Pzogc3RyaW5nO1xuICBwZXJpb2RTdGFydDogc3RyaW5nIHwgRGF0ZTtcbiAgcGVyaW9kRW5kOiBzdHJpbmcgfCBEYXRlO1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIHNvdXJjZURldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmcm9tIHJlY29yZGluZyBhIG1ldHJpYyB2YWx1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZE1ldHJpY1Jlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgaWQ6IHN0cmluZztcbiAgcmVjb3JkZWRBdDogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCVVNJTkVTUyBNRVRSSUNTIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdXNpbmVzcyBNZXRyaWNzIEFQSSBjbGllbnQgZm9yIGluZHVzdHJ5LWRyaXZlbiBtZXRyaWNzIHdpdGggaGlzdG9yaWNhbCB0cmFja2luZ1xuICovXG5leHBvcnQgY29uc3QgYnVzaW5lc3NNZXRyaWNzID0ge1xuICAvKipcbiAgICogR2V0IGN1cnJlbnQgbWV0cmljIHZhbHVlIHdpdGggc3RhdHVzIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWV0cmljID0gYXdhaXQgYnVzaW5lc3NNZXRyaWNzLmN1cnJlbnQoJ2FnZW50XzEyMycsICdEZWZsZWN0aW9uIFJhdGUnKTtcbiAgICogY29uc29sZS5sb2coYCR7bWV0cmljLm1ldHJpY05hbWV9OiAke21ldHJpYy52YWx1ZUZvcm1hdHRlZH1gKTtcbiAgICpcbiAgICogaWYgKG1ldHJpYy5zdGF0dXMgPT09ICdpbnN1ZmZpY2llbnRfZGF0YScpIHtcbiAgICogICBjb25zb2xlLmxvZyhgTmVlZCAke21ldHJpYy5taW5UcmFjZVRocmVzaG9sZCAtIG1ldHJpYy50cmFjZUNvdW50fSBtb3JlIHRyYWNlc2ApO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY3VycmVudChcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgbWV0cmljTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEN1cnJlbnRNZXRyaWNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAobWV0cmljTmFtZSkge1xuICAgICAgcGFyYW1zLnNldCgnbWV0cmljTmFtZScsIG1ldHJpY05hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYC9hZ2VudHMvJHthZ2VudElkfS9tZXRyaWNzL2N1cnJlbnQke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuXG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxDdXJyZW50TWV0cmljUmVzcG9uc2U+KHVybCwgeyBhcGlWZXJzaW9uOiAndjMnIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgaGlzdG9yaWNhbCBtZXRyaWMgZGF0YSBmb3IgZ3JhcGhpbmdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBoaXN0b3J5ID0gYXdhaXQgYnVzaW5lc3NNZXRyaWNzLmhpc3RvcnkoJ2FnZW50XzEyMycsICdEZWZsZWN0aW9uIFJhdGUnLCB7XG4gICAqICAgc3RhcnREYXRlOiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwKSxcbiAgICogICBlbmREYXRlOiBuZXcgRGF0ZSgpLFxuICAgKiAgIGdyYW51bGFyaXR5OiAnZGFpbHknLFxuICAgKiB9KTtcbiAgICpcbiAgICogY29uc29sZS5sb2coYCR7aGlzdG9yeS5kYXRhUG9pbnRzLmxlbmd0aH0gZGF0YSBwb2ludHNgKTtcbiAgICogY29uc29sZS5sb2coYENoYW5nZTogJHtoaXN0b3J5LnN1bW1hcnkuY2hhbmdlUGVyY2VudH0lYCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgaGlzdG9yeShcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHN0YXJ0RGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgICBlbmREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICAgIGdyYW51bGFyaXR5PzogJ2hvdXJseScgfCAnZGFpbHknIHwgJ3dlZWtseScgfCAnbW9udGhseSc7XG4gICAgfSA9IHt9XG4gICk6IFByb21pc2U8TWV0cmljSGlzdG9yeVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5zZXQoJ21ldHJpY05hbWUnLCBtZXRyaWNOYW1lKTtcblxuICAgIGlmIChvcHRpb25zLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgbmV3IERhdGUob3B0aW9ucy5zdGFydERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdlbmREYXRlJywgbmV3IERhdGUob3B0aW9ucy5lbmREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZ3JhbnVsYXJpdHkpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2dyYW51bGFyaXR5Jywgb3B0aW9ucy5ncmFudWxhcml0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxNZXRyaWNIaXN0b3J5UmVzcG9uc2U+KFxuICAgICAgYC9hZ2VudHMvJHthZ2VudElkfS9tZXRyaWNzL2hpc3Rvcnk/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjMnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZXh0ZXJuYWwgbWV0cmljIHZhbHVlXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGluZ2VzdCBtZXRyaWNzIGZyb20gZXh0ZXJuYWwgZGF0YSBzb3VyY2VzIChDUk0sIHN1cnZleXMsIGJpbGxpbmcsIGV0Yy4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gUmVjb3JkIENTQVQgc2NvcmUgZnJvbSBzdXJ2ZXkgc3lzdGVtXG4gICAqIGF3YWl0IGJ1c2luZXNzTWV0cmljcy5yZWNvcmQoJ2FnZW50XzEyMycsIHtcbiAgICogICBtZXRyaWNOYW1lOiAnQ1NBVC9OUFMnLFxuICAgKiAgIHZhbHVlOiA0LjUsXG4gICAqICAgdW5pdDogJ3Njb3JlJyxcbiAgICogICBwZXJpb2RTdGFydDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICogICBwZXJpb2RFbmQ6ICcyMDI0LTAxLTA3VDIzOjU5OjU5WicsXG4gICAqICAgc291cmNlOiAnc3VydmV5X3N5c3RlbScsXG4gICAqICAgc291cmNlRGV0YWlsczogeyBzdXJ2ZXlJZDogJ3N1cnZleV80NTYnLCByZXNwb25zZUNvdW50OiAxNTAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVjb3JkKFxuICAgIGFnZW50SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSZWNvcmRNZXRyaWNPcHRpb25zXG4gICk6IFByb21pc2U8UmVjb3JkTWV0cmljUmVzcG9uc2U+IHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgbWV0cmljTmFtZTogb3B0aW9ucy5tZXRyaWNOYW1lLFxuICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICB1bml0OiBvcHRpb25zLnVuaXQsXG4gICAgICBwZXJpb2RTdGFydDogbmV3IERhdGUob3B0aW9ucy5wZXJpb2RTdGFydCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBlcmlvZEVuZDogbmV3IERhdGUob3B0aW9ucy5wZXJpb2RFbmQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzb3VyY2U6IG9wdGlvbnMuc291cmNlIHx8ICdhcGknLFxuICAgICAgc291cmNlRGV0YWlsczogb3B0aW9ucy5zb3VyY2VEZXRhaWxzLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8UmVjb3JkTWV0cmljUmVzcG9uc2U+PihcbiAgICAgIGAvYWdlbnRzLyR7YWdlbnRJZH0vbWV0cmljcy92YWx1ZXNgLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keSxcbiAgICAgICAgYXBpVmVyc2lvbjogJ3YzJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEhO1xuICB9LFxuXG4gIC8qKlxuICAgKiBCYXRjaCByZWNvcmQgbXVsdGlwbGUgZXh0ZXJuYWwgbWV0cmljIHZhbHVlc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGJ1c2luZXNzTWV0cmljcy5yZWNvcmRCYXRjaCgnYWdlbnRfMTIzJywgW1xuICAgKiAgIHsgbWV0cmljTmFtZTogJ0NTQVQvTlBTJywgdmFsdWU6IDQuNSwgLi4uIH0sXG4gICAqICAgeyBtZXRyaWNOYW1lOiAnSG91cnMgU2F2ZWQnLCB2YWx1ZTogMTIwLCAuLi4gfSxcbiAgICogXSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVjb3JkQmF0Y2goXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIG1ldHJpY3M6IFJlY29yZE1ldHJpY09wdGlvbnNbXVxuICApOiBQcm9taXNlPFJlY29yZE1ldHJpY1Jlc3BvbnNlW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtZXRyaWNzLm1hcCgobWV0cmljKSA9PiB0aGlzLnJlY29yZChhZ2VudElkLCBtZXRyaWMpKVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtZXRyaWMgaXMgcmVhZHkgdG8gZGlzcGxheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNZXRyaWNSZWFkeShtZXRyaWM6IEN1cnJlbnRNZXRyaWNSZXNwb25zZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbWV0cmljLnN0YXR1cyA9PT0gJ3JlYWR5Jztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1ldHJpYyBuZWVkcyBtb3JlIHRyYWNlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzTW9yZVRyYWNlcyhtZXRyaWM6IEN1cnJlbnRNZXRyaWNSZXNwb25zZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbWV0cmljLnN0YXR1cyA9PT0gJ2luc3VmZmljaWVudF9kYXRhJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1ldHJpYyBpcyB3YWl0aW5nIGZvciBleHRlcm5hbCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhd2FpdGluZ0V4dGVybmFsRGF0YShtZXRyaWM6IEN1cnJlbnRNZXRyaWNSZXNwb25zZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbWV0cmljLnN0YXR1cyA9PT0gJ2F3YWl0aW5nX2V4dGVybmFsJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBtZXRyaWMgZGF0YSBpcyBzdGFsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNZXRyaWNTdGFsZShtZXRyaWM6IEN1cnJlbnRNZXRyaWNSZXNwb25zZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbWV0cmljLnN0YXR1cyA9PT0gJ3N0YWxlJztcbn1cblxuLyoqXG4gKiBHZXQgaHVtYW4tcmVhZGFibGUgc3RhdHVzIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c01lc3NhZ2UobWV0cmljOiBDdXJyZW50TWV0cmljUmVzcG9uc2UpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG1ldHJpYy5zdGF0dXMpIHtcbiAgICBjYXNlICdyZWFkeSc6XG4gICAgICByZXR1cm4gJ01ldHJpYyBpcyB1cCB0byBkYXRlJztcbiAgICBjYXNlICdpbnN1ZmZpY2llbnRfZGF0YSc6XG4gICAgICByZXR1cm4gbWV0cmljLnN0YXR1c01lc3NhZ2UgfHxcbiAgICAgICAgYE5lZWQgJHsobWV0cmljLm1pblRyYWNlVGhyZXNob2xkIHx8IDUwKSAtIChtZXRyaWMudHJhY2VDb3VudCB8fCAwKX0gbW9yZSB0cmFjZXNgO1xuICAgIGNhc2UgJ2F3YWl0aW5nX2V4dGVybmFsJzpcbiAgICAgIHJldHVybiBtZXRyaWMuc3RhdHVzTWVzc2FnZSB8fCAnV2FpdGluZyBmb3IgZXh0ZXJuYWwgZGF0YSBzb3VyY2UnO1xuICAgIGNhc2UgJ3N0YWxlJzpcbiAgICAgIHJldHVybiBtZXRyaWMuc3RhdHVzTWVzc2FnZSB8fCAnRGF0YSBtYXkgYmUgb3V0ZGF0ZWQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ1Vua25vd24gc3RhdHVzJztcbiAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9ncmVzcyB0b3dhcmQgbWluaW11bSB0cmFjZSB0aHJlc2hvbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYWNlUHJvZ3Jlc3MobWV0cmljOiBDdXJyZW50TWV0cmljUmVzcG9uc2UpOiBudW1iZXIge1xuICBpZiAobWV0cmljLnN0YXR1cyAhPT0gJ2luc3VmZmljaWVudF9kYXRhJykgcmV0dXJuIDEwMDtcbiAgcmV0dXJuIG1ldHJpYy5wcm9ncmVzc1BlcmNlbnQgfHwgMDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgbWV0cmljIHZhbHVlIGZvciBkaXNwbGF5IGJhc2VkIG9uIHVuaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE1ldHJpY1ZhbHVlKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJyUnOlxuICAgICAgcmV0dXJuIGAke01hdGgucm91bmQodmFsdWUgKiAxMCkgLyAxMH0lYDtcbiAgICBjYXNlICckJzpcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiB2YWx1ZSA8IDYwID8gYCR7TWF0aC5yb3VuZCh2YWx1ZSl9c2AgOiBgJHtNYXRoLnJvdW5kKHZhbHVlIC8gNjApfW1gO1xuICAgIGNhc2UgJ2hycyc6XG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZCh2YWx1ZSAqIDEwKSAvIDEwfSBocnNgO1xuICAgIGNhc2UgJ3Njb3JlJzpcbiAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKDEpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gU3RyaW5nKE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0cmVuZCBkaXJlY3Rpb24gYXMgZW1vamlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyZW5kRW1vamkodHJlbmQ6IE1ldHJpY1RyZW5kKTogc3RyaW5nIHtcbiAgaWYgKHRyZW5kLmRpcmVjdGlvbiA9PT0gJ3VwJykgcmV0dXJuIHRyZW5kLmlzUG9zaXRpdmUgPyAn8J+TiCcgOiAn8J+TiSc7XG4gIGlmICh0cmVuZC5kaXJlY3Rpb24gPT09ICdkb3duJykgcmV0dXJuIHRyZW5kLmlzUG9zaXRpdmUgPyAn8J+TiCcgOiAn8J+TiSc7XG4gIHJldHVybiAn4p6h77iPJztcbn1cbiJdfQ==
@@ -4,23 +4,6 @@
4
4
  * Prediction accuracy tracking with Brier scores and calibration metrics
5
5
  */
6
6
  import type { CalibrationStatus, CalibrationBucket, PredictionType } from '../core/types';
7
- /**
8
- * Record outcome input
9
- */
10
- export interface RecordOutcomeInput {
11
- /** Run ID the prediction was made for */
12
- runId: string;
13
- /** Type of prediction */
14
- predictionType: PredictionType;
15
- /** The predicted value (0-1 for probabilities) */
16
- predictedValue: number;
17
- /** The actual outcome (0 or 1 for binary, or actual value) */
18
- actualOutcome: number;
19
- /** When the prediction was made */
20
- predictedAt?: string;
21
- /** When the outcome was observed */
22
- observedAt?: string;
23
- }
24
7
  /**
25
8
  * Calibration metrics
26
9
  */
@@ -69,33 +52,6 @@ export declare const calibration: {
69
52
  * ```
70
53
  */
71
54
  allMetrics(agentId: string): Promise<CalibrationMetrics[]>;
72
- /**
73
- * Record a prediction outcome for calibration tracking
74
- *
75
- * @example
76
- * ```typescript
77
- * // Record a churn prediction outcome
78
- * await calibration.recordOutcome({
79
- * runId: 'run_abc123',
80
- * predictionType: 'churn_risk',
81
- * predictedValue: 0.7, // We predicted 70% churn risk
82
- * actualOutcome: 1, // Customer did churn
83
- * });
84
- *
85
- * // Record a resolution time prediction
86
- * await calibration.recordOutcome({
87
- * runId: 'run_abc123',
88
- * predictionType: 'resolution_time',
89
- * predictedValue: 15, // Predicted 15 minutes
90
- * actualOutcome: 22, // Actual was 22 minutes
91
- * });
92
- * ```
93
- */
94
- recordOutcome(input: RecordOutcomeInput): Promise<{
95
- recorded: boolean;
96
- brierContribution: number;
97
- message: string;
98
- }>;
99
55
  /**
100
56
  * Trigger recalibration for an agent
101
57
  *
@@ -119,24 +75,6 @@ export declare const calibration: {
119
75
  }>;
120
76
  newMetrics: CalibrationMetrics[];
121
77
  }>;
122
- /**
123
- * Get reliability diagram data for visualization
124
- *
125
- * @example
126
- * ```typescript
127
- * const diagram = await calibration.reliabilityDiagram('agent_123', 'outcome');
128
- * // Use diagram.buckets to plot predicted vs actual probabilities
129
- * ```
130
- */
131
- reliabilityDiagram(agentId: string, predictionType: PredictionType): Promise<{
132
- agentId: string;
133
- predictionType: PredictionType;
134
- buckets: CalibrationBucket[];
135
- perfectCalibrationLine: Array<{
136
- x: number;
137
- y: number;
138
- }>;
139
- }>;
140
78
  };
141
79
  /**
142
80
  * Calculate Brier score from predictions and outcomes
@@ -27,7 +27,7 @@ exports.calibration = {
27
27
  * ```
28
28
  */
29
29
  async status(agentId, predictionType) {
30
- return (0, client_1.apiRequestWithData)(`/calibration/status/${agentId}?predictionType=${predictionType}`);
30
+ return (0, client_1.apiRequestWithData)(`/calibration/${agentId}/status?predictionType=${predictionType}`, { apiVersion: 'v3' });
31
31
  },
32
32
  /**
33
33
  * Get all calibration metrics for an agent
@@ -41,39 +41,7 @@ exports.calibration = {
41
41
  * ```
42
42
  */
43
43
  async allMetrics(agentId) {
44
- return (0, client_1.apiRequestWithData)(`/calibration/metrics/${agentId}`);
45
- },
46
- /**
47
- * Record a prediction outcome for calibration tracking
48
- *
49
- * @example
50
- * ```typescript
51
- * // Record a churn prediction outcome
52
- * await calibration.recordOutcome({
53
- * runId: 'run_abc123',
54
- * predictionType: 'churn_risk',
55
- * predictedValue: 0.7, // We predicted 70% churn risk
56
- * actualOutcome: 1, // Customer did churn
57
- * });
58
- *
59
- * // Record a resolution time prediction
60
- * await calibration.recordOutcome({
61
- * runId: 'run_abc123',
62
- * predictionType: 'resolution_time',
63
- * predictedValue: 15, // Predicted 15 minutes
64
- * actualOutcome: 22, // Actual was 22 minutes
65
- * });
66
- * ```
67
- */
68
- async recordOutcome(input) {
69
- return (0, client_1.apiRequestWithData)('/calibration/record', {
70
- method: 'POST',
71
- body: {
72
- ...input,
73
- predictedAt: input.predictedAt || new Date().toISOString(),
74
- observedAt: input.observedAt || new Date().toISOString(),
75
- },
76
- });
44
+ return (0, client_1.apiRequestWithData)(`/calibration/${agentId}/metrics`, { apiVersion: 'v3' });
77
45
  },
78
46
  /**
79
47
  * Trigger recalibration for an agent
@@ -87,23 +55,12 @@ exports.calibration = {
87
55
  * ```
88
56
  */
89
57
  async retrain(agentId, options = {}) {
90
- return (0, client_1.apiRequestWithData)(`/calibration/retrain/${agentId}`, {
58
+ return (0, client_1.apiRequestWithData)(`/calibration/${agentId}/retrain`, {
91
59
  method: 'POST',
92
60
  body: options,
61
+ apiVersion: 'v3',
93
62
  });
94
63
  },
95
- /**
96
- * Get reliability diagram data for visualization
97
- *
98
- * @example
99
- * ```typescript
100
- * const diagram = await calibration.reliabilityDiagram('agent_123', 'outcome');
101
- * // Use diagram.buckets to plot predicted vs actual probabilities
102
- * ```
103
- */
104
- async reliabilityDiagram(agentId, predictionType) {
105
- return (0, client_1.apiRequestWithData)(`/calibration/diagram/${agentId}?predictionType=${predictionType}`);
106
- },
107
64
  };
108
65
  // ============================================================================
109
66
  // HELPER FUNCTIONS
@@ -173,4 +130,4 @@ function getCalibrationQuality(brierScore) {
173
130
  function formatBrierScore(score) {
174
131
  return score.toFixed(4);
175
132
  }
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsaWJyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NhbGlicmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFnTUgsa0RBVUM7QUFNRCxvQ0FvQ0M7QUFLRCw0Q0FFQztBQUtELHNEQU9DO0FBS0QsNENBRUM7QUE1UUQsMkNBQWdFO0FBb0RoRTs7R0FFRztBQUNVLFFBQUEsV0FBVyxHQUFHO0lBQ3pCOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQ1YsT0FBZSxFQUNmLGNBQThCO1FBRTlCLE9BQU8sSUFBQSwyQkFBa0IsRUFDdkIsdUJBQXVCLE9BQU8sbUJBQW1CLGNBQWMsRUFBRSxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQWU7UUFDOUIsT0FBTyxJQUFBLDJCQUFrQixFQUN2Qix3QkFBd0IsT0FBTyxFQUFFLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBeUI7UUFLM0MsT0FBTyxJQUFBLDJCQUFrQixFQUFDLHFCQUFxQixFQUFFO1lBQy9DLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLEdBQUcsS0FBSztnQkFDUixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDMUQsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDekQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsT0FBZSxFQUNmLFVBR0ksRUFBRTtRQU9OLE9BQU8sSUFBQSwyQkFBa0IsRUFB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LEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsVUFBa0I7SUFDakQsT0FBTyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxVQUFrQjtJQUVsQixJQUFJLFVBQVUsR0FBRyxJQUFJO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDMUMsSUFBSSxVQUFVLEdBQUcsR0FBRztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3BDLElBQUksVUFBVSxHQUFHLEdBQUc7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFhO0lBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDYWxpYnJhdGlvbiBBUElcbiAqXG4gKiBQcmVkaWN0aW9uIGFjY3VyYWN5IHRyYWNraW5nIHdpdGggQnJpZXIgc2NvcmVzIGFuZCBjYWxpYnJhdGlvbiBtZXRyaWNzXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxpYnJhdGlvblN0YXR1cyxcbiAgQ2FsaWJyYXRpb25CdWNrZXQsXG4gIFByZWRpY3Rpb25UeXBlLFxuICBBcGlSZXNwb25zZSxcbn0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENBTElCUkFUSU9OIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZWNvcmQgb3V0Y29tZSBpbnB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZE91dGNvbWVJbnB1dCB7XG4gIC8qKiBSdW4gSUQgdGhlIHByZWRpY3Rpb24gd2FzIG1hZGUgZm9yICovXG4gIHJ1bklkOiBzdHJpbmc7XG4gIC8qKiBUeXBlIG9mIHByZWRpY3Rpb24gKi9cbiAgcHJlZGljdGlvblR5cGU6IFByZWRpY3Rpb25UeXBlO1xuICAvKiogVGhlIHByZWRpY3RlZCB2YWx1ZSAoMC0xIGZvciBwcm9iYWJpbGl0aWVzKSAqL1xuICBwcmVkaWN0ZWRWYWx1ZTogbnVtYmVyO1xuICAvKiogVGhlIGFjdHVhbCBvdXRjb21lICgwIG9yIDEgZm9yIGJpbmFyeSwgb3IgYWN0dWFsIHZhbHVlKSAqL1xuICBhY3R1YWxPdXRjb21lOiBudW1iZXI7XG4gIC8qKiBXaGVuIHRoZSBwcmVkaWN0aW9uIHdhcyBtYWRlICovXG4gIHByZWRpY3RlZEF0Pzogc3RyaW5nO1xuICAvKiogV2hlbiB0aGUgb3V0Y29tZSB3YXMgb2JzZXJ2ZWQgKi9cbiAgb2JzZXJ2ZWRBdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDYWxpYnJhdGlvbiBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsaWJyYXRpb25NZXRyaWNzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogTWF4aW11bSBDYWxpYnJhdGlvbiBFcnJvciAqL1xuICBtY2U6IG51bWJlcjtcbiAgLyoqIFNhbXBsZSBjb3VudCAqL1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xuICAvKiogSXMgdGhlIG1vZGVsIHdlbGwtY2FsaWJyYXRlZCAqL1xuICBpc0NhbGlicmF0ZWQ6IGJvb2xlYW47XG4gIC8qKiBSZWxpYWJpbGl0eSBkaWFncmFtIGRhdGEgKi9cbiAgcmVsaWFiaWxpdHlEaWFncmFtOiBDYWxpYnJhdGlvbkJ1Y2tldFtdO1xuICAvKiogTGFzdCB1cGRhdGVkICovXG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FsaWJyYXRpb24gQVBJIGNsaWVudCBmb3IgcHJlZGljdGlvbiBhY2N1cmFjeSB0cmFja2luZ1xuICovXG5leHBvcnQgY29uc3QgY2FsaWJyYXRpb24gPSB7XG4gIC8qKlxuICAgKiBHZXQgY2FsaWJyYXRpb24gc3RhdHVzIGZvciBhbiBhZ2VudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNhbGlicmF0aW9uLnN0YXR1cygnYWdlbnRfMTIzJywgJ2NodXJuX3Jpc2snKTtcbiAgICogY29uc29sZS5sb2coYEJyaWVyIHNjb3JlOiAke3N0YXR1cy5icmllclNjb3JlfWApO1xuICAgKiBjb25zb2xlLmxvZyhgSXMgY2FsaWJyYXRlZDogJHtzdGF0dXMuaXNDYWxpYnJhdGVkfWApO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHN0YXR1cyhcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgcHJlZGljdGlvblR5cGU6IFByZWRpY3Rpb25UeXBlXG4gICk6IFByb21pc2U8Q2FsaWJyYXRpb25TdGF0dXM+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPENhbGlicmF0aW9uU3RhdHVzPihcbiAgICAgIGAvY2FsaWJyYXRpb24vc3RhdHVzLyR7YWdlbnRJZH0/cHJlZGljdGlvblR5cGU9JHtwcmVkaWN0aW9uVHlwZX1gXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGFsbCBjYWxpYnJhdGlvbiBtZXRyaWNzIGZvciBhbiBhZ2VudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1ldHJpY3MgPSBhd2FpdCBjYWxpYnJhdGlvbi5hbGxNZXRyaWNzKCdhZ2VudF8xMjMnKTtcbiAgICogZm9yIChjb25zdCBtIG9mIG1ldHJpY3MpIHtcbiAgICogICBjb25zb2xlLmxvZyhgJHttLnByZWRpY3Rpb25UeXBlfTogQnJpZXI9JHttLmJyaWVyU2NvcmV9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhbGxNZXRyaWNzKGFnZW50SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FsaWJyYXRpb25NZXRyaWNzW10+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPENhbGlicmF0aW9uTWV0cmljc1tdPihcbiAgICAgIGAvY2FsaWJyYXRpb24vbWV0cmljcy8ke2FnZW50SWR9YFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIHByZWRpY3Rpb24gb3V0Y29tZSBmb3IgY2FsaWJyYXRpb24gdHJhY2tpbmdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBSZWNvcmQgYSBjaHVybiBwcmVkaWN0aW9uIG91dGNvbWVcbiAgICogYXdhaXQgY2FsaWJyYXRpb24ucmVjb3JkT3V0Y29tZSh7XG4gICAqICAgcnVuSWQ6ICdydW5fYWJjMTIzJyxcbiAgICogICBwcmVkaWN0aW9uVHlwZTogJ2NodXJuX3Jpc2snLFxuICAgKiAgIHByZWRpY3RlZFZhbHVlOiAwLjcsICAvLyBXZSBwcmVkaWN0ZWQgNzAlIGNodXJuIHJpc2tcbiAgICogICBhY3R1YWxPdXRjb21lOiAxLCAgICAgLy8gQ3VzdG9tZXIgZGlkIGNodXJuXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBSZWNvcmQgYSByZXNvbHV0aW9uIHRpbWUgcHJlZGljdGlvblxuICAgKiBhd2FpdCBjYWxpYnJhdGlvbi5yZWNvcmRPdXRjb21lKHtcbiAgICogICBydW5JZDogJ3J1bl9hYmMxMjMnLFxuICAgKiAgIHByZWRpY3Rpb25UeXBlOiAncmVzb2x1dGlvbl90aW1lJyxcbiAgICogICBwcmVkaWN0ZWRWYWx1ZTogMTUsICAgLy8gUHJlZGljdGVkIDE1IG1pbnV0ZXNcbiAgICogICBhY3R1YWxPdXRjb21lOiAyMiwgICAgLy8gQWN0dWFsIHdhcyAyMiBtaW51dGVzXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHJlY29yZE91dGNvbWUoaW5wdXQ6IFJlY29yZE91dGNvbWVJbnB1dCk6IFByb21pc2U8e1xuICAgIHJlY29yZGVkOiBib29sZWFuO1xuICAgIGJyaWVyQ29udHJpYnV0aW9uOiBudW1iZXI7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YSgnL2NhbGlicmF0aW9uL3JlY29yZCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgcHJlZGljdGVkQXQ6IGlucHV0LnByZWRpY3RlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgb2JzZXJ2ZWRBdDogaW5wdXQub2JzZXJ2ZWRBdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHJlY2FsaWJyYXRpb24gZm9yIGFuIGFnZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsaWJyYXRpb24ucmV0cmFpbignYWdlbnRfMTIzJywge1xuICAgKiAgIHByZWRpY3Rpb25UeXBlczogWydjaHVybl9yaXNrJywgJ2VzY2FsYXRpb25fcmlzayddLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYFJldHJhaW5lZDogJHtyZXN1bHQuc3VjY2Vzc31gKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyByZXRyYWluKFxuICAgIGFnZW50SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwcmVkaWN0aW9uVHlwZXM/OiBQcmVkaWN0aW9uVHlwZVtdO1xuICAgICAgbWluU2FtcGxlcz86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogUHJvbWlzZTx7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICByZXRyYWluZWRUeXBlczogUHJlZGljdGlvblR5cGVbXTtcbiAgICBza2lwcGVkVHlwZXM6IEFycmF5PHsgdHlwZTogUHJlZGljdGlvblR5cGU7IHJlYXNvbjogc3RyaW5nIH0+O1xuICAgIG5ld01ldHJpY3M6IENhbGlicmF0aW9uTWV0cmljc1tdO1xuICB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL2NhbGlicmF0aW9uL3JldHJhaW4vJHthZ2VudElkfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogb3B0aW9ucyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHJlbGlhYmlsaXR5IGRpYWdyYW0gZGF0YSBmb3IgdmlzdWFsaXphdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRpYWdyYW0gPSBhd2FpdCBjYWxpYnJhdGlvbi5yZWxpYWJpbGl0eURpYWdyYW0oJ2FnZW50XzEyMycsICdvdXRjb21lJyk7XG4gICAqIC8vIFVzZSBkaWFncmFtLmJ1Y2tldHMgdG8gcGxvdCBwcmVkaWN0ZWQgdnMgYWN0dWFsIHByb2JhYmlsaXRpZXNcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyByZWxpYWJpbGl0eURpYWdyYW0oXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIHByZWRpY3Rpb25UeXBlOiBQcmVkaWN0aW9uVHlwZVxuICApOiBQcm9taXNlPHtcbiAgICBhZ2VudElkOiBzdHJpbmc7XG4gICAgcHJlZGljdGlvblR5cGU6IFByZWRpY3Rpb25UeXBlO1xuICAgIGJ1Y2tldHM6IENhbGlicmF0aW9uQnVja2V0W107XG4gICAgcGVyZmVjdENhbGlicmF0aW9uTGluZTogQXJyYXk8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PjtcbiAgfT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoXG4gICAgICBgL2NhbGlicmF0aW9uL2RpYWdyYW0vJHthZ2VudElkfT9wcmVkaWN0aW9uVHlwZT0ke3ByZWRpY3Rpb25UeXBlfWBcbiAgICApO1xuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENhbGN1bGF0ZSBCcmllciBzY29yZSBmcm9tIHByZWRpY3Rpb25zIGFuZCBvdXRjb21lc1xuICogTG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGNvbnNpZGVyZWQgZ29vZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQnJpZXJTY29yZShcbiAgcHJlZGljdGlvbnM6IEFycmF5PHsgcHJlZGljdGVkOiBudW1iZXI7IGFjdHVhbDogbnVtYmVyIH0+XG4pOiBudW1iZXIge1xuICBpZiAocHJlZGljdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICBjb25zdCBzdW0gPSBwcmVkaWN0aW9ucy5yZWR1Y2UoKGFjYywgeyBwcmVkaWN0ZWQsIGFjdHVhbCB9KSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIE1hdGgucG93KHByZWRpY3RlZCAtIGFjdHVhbCwgMik7XG4gIH0sIDApO1xuXG4gIHJldHVybiBzdW0gLyBwcmVkaWN0aW9ucy5sZW5ndGg7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yIChFQ0UpXG4gKiBNZWFzdXJlcyBob3cgd2VsbC1jYWxpYnJhdGVkIHByZWRpY3Rpb25zIGFyZSBhY3Jvc3MgY29uZmlkZW5jZSBidWNrZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVFQ0UoXG4gIHByZWRpY3Rpb25zOiBBcnJheTx7IHByZWRpY3RlZDogbnVtYmVyOyBhY3R1YWw6IG51bWJlciB9PixcbiAgbnVtQnVja2V0czogbnVtYmVyID0gMTBcbik6IG51bWJlciB7XG4gIGlmIChwcmVkaWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG4gIGNvbnN0IGJ1Y2tldHM6IEFycmF5PHsgcHJlZGljdGlvbnM6IG51bWJlcltdOyBhY3R1YWxzOiBudW1iZXJbXSB9PiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUJ1Y2tldHM7IGkrKykge1xuICAgIGJ1Y2tldHMucHVzaCh7IHByZWRpY3Rpb25zOiBbXSwgYWN0dWFsczogW10gfSk7XG4gIH1cblxuICAvLyBBc3NpZ24gcHJlZGljdGlvbnMgdG8gYnVja2V0c1xuICBmb3IgKGNvbnN0IHsgcHJlZGljdGVkLCBhY3R1YWwgfSBvZiBwcmVkaWN0aW9ucykge1xuICAgIGNvbnN0IGJ1Y2tldEluZGV4ID0gTWF0aC5taW4oXG4gICAgICBNYXRoLmZsb29yKHByZWRpY3RlZCAqIG51bUJ1Y2tldHMpLFxuICAgICAgbnVtQnVja2V0cyAtIDFcbiAgICApO1xuICAgIGJ1Y2tldHNbYnVja2V0SW5kZXhdLnByZWRpY3Rpb25zLnB1c2gocHJlZGljdGVkKTtcbiAgICBidWNrZXRzW2J1Y2tldEluZGV4XS5hY3R1YWxzLnB1c2goYWN0dWFsKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBFQ0VcbiAgbGV0IGVjZSA9IDA7XG4gIGZvciAoY29uc3QgYnVja2V0IG9mIGJ1Y2tldHMpIHtcbiAgICBpZiAoYnVja2V0LnByZWRpY3Rpb25zLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICBjb25zdCBhdmdQcmVkaWN0ZWQgPVxuICAgICAgYnVja2V0LnByZWRpY3Rpb25zLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gYnVja2V0LnByZWRpY3Rpb25zLmxlbmd0aDtcbiAgICBjb25zdCBhdmdBY3R1YWwgPVxuICAgICAgYnVja2V0LmFjdHVhbHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyBidWNrZXQuYWN0dWFscy5sZW5ndGg7XG4gICAgY29uc3Qgd2VpZ2h0ID0gYnVja2V0LnByZWRpY3Rpb25zLmxlbmd0aCAvIHByZWRpY3Rpb25zLmxlbmd0aDtcblxuICAgIGVjZSArPSB3ZWlnaHQgKiBNYXRoLmFicyhhdmdQcmVkaWN0ZWQgLSBhdmdBY3R1YWwpO1xuICB9XG5cbiAgcmV0dXJuIGVjZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1vZGVsIGlzIHdlbGwtY2FsaWJyYXRlZCBiYXNlZCBvbiBCcmllciBzY29yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXZWxsQ2FsaWJyYXRlZChicmllclNjb3JlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGJyaWVyU2NvcmUgPCAwLjE7XG59XG5cbi8qKlxuICogR2V0IGNhbGlicmF0aW9uIHF1YWxpdHkgbGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGlicmF0aW9uUXVhbGl0eShcbiAgYnJpZXJTY29yZTogbnVtYmVyXG4pOiAnZXhjZWxsZW50JyB8ICdnb29kJyB8ICdmYWlyJyB8ICdwb29yJyB7XG4gIGlmIChicmllclNjb3JlIDwgMC4wNSkgcmV0dXJuICdleGNlbGxlbnQnO1xuICBpZiAoYnJpZXJTY29yZSA8IDAuMSkgcmV0dXJuICdnb29kJztcbiAgaWYgKGJyaWVyU2NvcmUgPCAwLjIpIHJldHVybiAnZmFpcic7XG4gIHJldHVybiAncG9vcic7XG59XG5cbi8qKlxuICogRm9ybWF0IEJyaWVyIHNjb3JlIGZvciBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCcmllclNjb3JlKHNjb3JlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gc2NvcmUudG9GaXhlZCg0KTtcbn1cbiJdfQ==
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsaWJyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NhbGlicmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFzSEgsa0RBVUM7QUFNRCxvQ0FvQ0M7QUFLRCw0Q0FFQztBQUtELHNEQU9DO0FBS0QsNENBRUM7QUFsTUQsMkNBQWdFO0FBa0NoRTs7R0FFRztBQUNVLFFBQUEsV0FBVyxHQUFHO0lBQ3pCOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQ1YsT0FBZSxFQUNmLGNBQThCO1FBRTlCLE9BQU8sSUFBQSwyQkFBa0IsRUFDdkIsZ0JBQWdCLE9BQU8sMEJBQTBCLGNBQWMsRUFBRSxFQUNqRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sSUFBQSwyQkFBa0IsRUFDdkIsZ0JBQWdCLE9BQU8sVUFBVSxFQUNqQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FDWCxPQUFlLEVBQ2YsVUFHSSxFQUFFO1FBT04sT0FBTyxJQUFBLDJCQUFrQixFQUFDLGdCQUFnQixPQUFPLFVBQVUsRUFBRTtZQUMzRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1lBQ2IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsV0FBeUQ7SUFFekQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FB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QUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFhO0lBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDYWxpYnJhdGlvbiBBUElcbiAqXG4gKiBQcmVkaWN0aW9uIGFjY3VyYWN5IHRyYWNraW5nIHdpdGggQnJpZXIgc2NvcmVzIGFuZCBjYWxpYnJhdGlvbiBtZXRyaWNzXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxpYnJhdGlvblN0YXR1cyxcbiAgQ2FsaWJyYXRpb25CdWNrZXQsXG4gIFByZWRpY3Rpb25UeXBlLFxuICBBcGlSZXNwb25zZSxcbn0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENBTElCUkFUSU9OIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDYWxpYnJhdGlvbiBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsaWJyYXRpb25NZXRyaWNzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogTWF4aW11bSBDYWxpYnJhdGlvbiBFcnJvciAqL1xuICBtY2U6IG51bWJlcjtcbiAgLyoqIFNhbXBsZSBjb3VudCAqL1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xuICAvKiogSXMgdGhlIG1vZGVsIHdlbGwtY2FsaWJyYXRlZCAqL1xuICBpc0NhbGlicmF0ZWQ6IGJvb2xlYW47XG4gIC8qKiBSZWxpYWJpbGl0eSBkaWFncmFtIGRhdGEgKi9cbiAgcmVsaWFiaWxpdHlEaWFncmFtOiBDYWxpYnJhdGlvbkJ1Y2tldFtdO1xuICAvKiogTGFzdCB1cGRhdGVkICovXG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FsaWJyYXRpb24gQVBJIGNsaWVudCBmb3IgcHJlZGljdGlvbiBhY2N1cmFjeSB0cmFja2luZ1xuICovXG5leHBvcnQgY29uc3QgY2FsaWJyYXRpb24gPSB7XG4gIC8qKlxuICAgKiBHZXQgY2FsaWJyYXRpb24gc3RhdHVzIGZvciBhbiBhZ2VudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNhbGlicmF0aW9uLnN0YXR1cygnYWdlbnRfMTIzJywgJ2NodXJuX3Jpc2snKTtcbiAgICogY29uc29sZS5sb2coYEJyaWVyIHNjb3JlOiAke3N0YXR1cy5icmllclNjb3JlfWApO1xuICAgKiBjb25zb2xlLmxvZyhgSXMgY2FsaWJyYXRlZDogJHtzdGF0dXMuaXNDYWxpYnJhdGVkfWApO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHN0YXR1cyhcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgcHJlZGljdGlvblR5cGU6IFByZWRpY3Rpb25UeXBlXG4gICk6IFByb21pc2U8Q2FsaWJyYXRpb25TdGF0dXM+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPENhbGlicmF0aW9uU3RhdHVzPihcbiAgICAgIGAvY2FsaWJyYXRpb24vJHthZ2VudElkfS9zdGF0dXM/cHJlZGljdGlvblR5cGU9JHtwcmVkaWN0aW9uVHlwZX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjMnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNhbGlicmF0aW9uIG1ldHJpY3MgZm9yIGFuIGFnZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWV0cmljcyA9IGF3YWl0IGNhbGlicmF0aW9uLmFsbE1ldHJpY3MoJ2FnZW50XzEyMycpO1xuICAgKiBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgKiAgIGNvbnNvbGUubG9nKGAke20ucHJlZGljdGlvblR5cGV9OiBCcmllcj0ke20uYnJpZXJTY29yZX1gKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGFsbE1ldHJpY3MoYWdlbnRJZDogc3RyaW5nKTogUHJvbWlzZTxDYWxpYnJhdGlvbk1ldHJpY3NbXT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8Q2FsaWJyYXRpb25NZXRyaWNzW10+KFxuICAgICAgYC9jYWxpYnJhdGlvbi8ke2FnZW50SWR9L21ldHJpY3NgLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjMnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHJlY2FsaWJyYXRpb24gZm9yIGFuIGFnZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsaWJyYXRpb24ucmV0cmFpbignYWdlbnRfMTIzJywge1xuICAgKiAgIHByZWRpY3Rpb25UeXBlczogWydjaHVybl9yaXNrJywgJ2VzY2FsYXRpb25fcmlzayddLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYFJldHJhaW5lZDogJHtyZXN1bHQuc3VjY2Vzc31gKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyByZXRyYWluKFxuICAgIGFnZW50SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwcmVkaWN0aW9uVHlwZXM/OiBQcmVkaWN0aW9uVHlwZVtdO1xuICAgICAgbWluU2FtcGxlcz86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogUHJvbWlzZTx7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICByZXRyYWluZWRUeXBlczogUHJlZGljdGlvblR5cGVbXTtcbiAgICBza2lwcGVkVHlwZXM6IEFycmF5PHsgdHlwZTogUHJlZGljdGlvblR5cGU7IHJlYXNvbjogc3RyaW5nIH0+O1xuICAgIG5ld01ldHJpY3M6IENhbGlicmF0aW9uTWV0cmljc1tdO1xuICB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL2NhbGlicmF0aW9uLyR7YWdlbnRJZH0vcmV0cmFpbmAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIGFwaVZlcnNpb246ICd2MycsXG4gICAgfSk7XG4gIH0sXG5cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDYWxjdWxhdGUgQnJpZXIgc2NvcmUgZnJvbSBwcmVkaWN0aW9ucyBhbmQgb3V0Y29tZXNcbiAqIExvd2VyIGlzIGJldHRlciwgPDAuMSBpcyBjb25zaWRlcmVkIGdvb2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUJyaWVyU2NvcmUoXG4gIHByZWRpY3Rpb25zOiBBcnJheTx7IHByZWRpY3RlZDogbnVtYmVyOyBhY3R1YWw6IG51bWJlciB9PlxuKTogbnVtYmVyIHtcbiAgaWYgKHByZWRpY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgY29uc3Qgc3VtID0gcHJlZGljdGlvbnMucmVkdWNlKChhY2MsIHsgcHJlZGljdGVkLCBhY3R1YWwgfSkgPT4ge1xuICAgIHJldHVybiBhY2MgKyBNYXRoLnBvdyhwcmVkaWN0ZWQgLSBhY3R1YWwsIDIpO1xuICB9LCAwKTtcblxuICByZXR1cm4gc3VtIC8gcHJlZGljdGlvbnMubGVuZ3RoO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBFeHBlY3RlZCBDYWxpYnJhdGlvbiBFcnJvciAoRUNFKVxuICogTWVhc3VyZXMgaG93IHdlbGwtY2FsaWJyYXRlZCBwcmVkaWN0aW9ucyBhcmUgYWNyb3NzIGNvbmZpZGVuY2UgYnVja2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRUNFKFxuICBwcmVkaWN0aW9uczogQXJyYXk8eyBwcmVkaWN0ZWQ6IG51bWJlcjsgYWN0dWFsOiBudW1iZXIgfT4sXG4gIG51bUJ1Y2tldHM6IG51bWJlciA9IDEwXG4pOiBudW1iZXIge1xuICBpZiAocHJlZGljdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICBjb25zdCBidWNrZXRzOiBBcnJheTx7IHByZWRpY3Rpb25zOiBudW1iZXJbXTsgYWN0dWFsczogbnVtYmVyW10gfT4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1CdWNrZXRzOyBpKyspIHtcbiAgICBidWNrZXRzLnB1c2goeyBwcmVkaWN0aW9uczogW10sIGFjdHVhbHM6IFtdIH0pO1xuICB9XG5cbiAgLy8gQXNzaWduIHByZWRpY3Rpb25zIHRvIGJ1Y2tldHNcbiAgZm9yIChjb25zdCB7IHByZWRpY3RlZCwgYWN0dWFsIH0gb2YgcHJlZGljdGlvbnMpIHtcbiAgICBjb25zdCBidWNrZXRJbmRleCA9IE1hdGgubWluKFxuICAgICAgTWF0aC5mbG9vcihwcmVkaWN0ZWQgKiBudW1CdWNrZXRzKSxcbiAgICAgIG51bUJ1Y2tldHMgLSAxXG4gICAgKTtcbiAgICBidWNrZXRzW2J1Y2tldEluZGV4XS5wcmVkaWN0aW9ucy5wdXNoKHByZWRpY3RlZCk7XG4gICAgYnVja2V0c1tidWNrZXRJbmRleF0uYWN0dWFscy5wdXNoKGFjdHVhbCk7XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgRUNFXG4gIGxldCBlY2UgPSAwO1xuICBmb3IgKGNvbnN0IGJ1Y2tldCBvZiBidWNrZXRzKSB7XG4gICAgaWYgKGJ1Y2tldC5wcmVkaWN0aW9ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgYXZnUHJlZGljdGVkID1cbiAgICAgIGJ1Y2tldC5wcmVkaWN0aW9ucy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIGJ1Y2tldC5wcmVkaWN0aW9ucy5sZW5ndGg7XG4gICAgY29uc3QgYXZnQWN0dWFsID1cbiAgICAgIGJ1Y2tldC5hY3R1YWxzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gYnVja2V0LmFjdHVhbHMubGVuZ3RoO1xuICAgIGNvbnN0IHdlaWdodCA9IGJ1Y2tldC5wcmVkaWN0aW9ucy5sZW5ndGggLyBwcmVkaWN0aW9ucy5sZW5ndGg7XG5cbiAgICBlY2UgKz0gd2VpZ2h0ICogTWF0aC5hYnMoYXZnUHJlZGljdGVkIC0gYXZnQWN0dWFsKTtcbiAgfVxuXG4gIHJldHVybiBlY2U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtb2RlbCBpcyB3ZWxsLWNhbGlicmF0ZWQgYmFzZWQgb24gQnJpZXIgc2NvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2VsbENhbGlicmF0ZWQoYnJpZXJTY29yZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBicmllclNjb3JlIDwgMC4xO1xufVxuXG4vKipcbiAqIEdldCBjYWxpYnJhdGlvbiBxdWFsaXR5IGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWxpYnJhdGlvblF1YWxpdHkoXG4gIGJyaWVyU2NvcmU6IG51bWJlclxuKTogJ2V4Y2VsbGVudCcgfCAnZ29vZCcgfCAnZmFpcicgfCAncG9vcicge1xuICBpZiAoYnJpZXJTY29yZSA8IDAuMDUpIHJldHVybiAnZXhjZWxsZW50JztcbiAgaWYgKGJyaWVyU2NvcmUgPCAwLjEpIHJldHVybiAnZ29vZCc7XG4gIGlmIChicmllclNjb3JlIDwgMC4yKSByZXR1cm4gJ2ZhaXInO1xuICByZXR1cm4gJ3Bvb3InO1xufVxuXG4vKipcbiAqIEZvcm1hdCBCcmllciBzY29yZSBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnJpZXJTY29yZShzY29yZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNjb3JlLnRvRml4ZWQoNCk7XG59XG4iXX0=
@@ -49,6 +49,7 @@ exports.claims = {
49
49
  return (0, client_1.apiRequestWithData)('/analyses', {
50
50
  method: 'POST',
51
51
  body: options,
52
+ apiVersion: 'v3',
52
53
  });
53
54
  },
54
55
  /**
@@ -60,7 +61,7 @@ exports.claims = {
60
61
  * ```
61
62
  */
62
63
  async getAnalysis(analysisId) {
63
- return (0, client_1.apiRequestWithData)(`/analyses/${analysisId}`);
64
+ return (0, client_1.apiRequestWithData)(`/analyses/${analysisId}`, { apiVersion: 'v3' });
64
65
  },
65
66
  /**
66
67
  * Get current analysis for a run
@@ -71,7 +72,7 @@ exports.claims = {
71
72
  * ```
72
73
  */
73
74
  async getRunAnalysis(runId) {
74
- return (0, client_1.apiRequestWithData)(`/runs/${runId}/analysis`);
75
+ return (0, client_1.apiRequestWithData)(`/runs/${runId}/analysis`, { apiVersion: 'v3' });
75
76
  },
76
77
  /**
77
78
  * Get analysis history for a run
@@ -82,7 +83,7 @@ exports.claims = {
82
83
  * ```
83
84
  */
84
85
  async getAnalysisHistory(runId) {
85
- return (0, client_1.apiRequestWithData)(`/runs/${runId}/analyses`);
86
+ return (0, client_1.apiRequestWithData)(`/runs/${runId}/analyses`, { apiVersion: 'v3' });
86
87
  },
87
88
  /**
88
89
  * Supersede an analysis with a new one
@@ -103,6 +104,7 @@ exports.claims = {
103
104
  return (0, client_1.apiRequestWithData)(`/analyses/${analysisId}/supersede`, {
104
105
  method: 'POST',
105
106
  body: options,
107
+ apiVersion: 'v3',
106
108
  });
107
109
  },
108
110
  /**
@@ -143,7 +145,7 @@ exports.claims = {
143
145
  params.set('limit', String(options.limit));
144
146
  if (options.offset)
145
147
  params.set('offset', String(options.offset));
146
- const response = await (0, client_1.apiRequest)(`/claims?${params.toString()}`);
148
+ const response = await (0, client_1.apiRequest)(`/claims?${params.toString()}`, { apiVersion: 'v3' });
147
149
  return response.data;
148
150
  },
149
151
  /**
@@ -155,7 +157,7 @@ exports.claims = {
155
157
  * ```
156
158
  */
157
159
  async get(claimId) {
158
- return (0, client_1.apiRequestWithData)(`/claims/${claimId}`);
160
+ return (0, client_1.apiRequestWithData)(`/claims/${claimId}`, { apiVersion: 'v3' });
159
161
  },
160
162
  /**
161
163
  * Verify or reject a claim (human feedback)
@@ -179,6 +181,7 @@ exports.claims = {
179
181
  return (0, client_1.apiRequestWithData)(`/claims/${claimId}/verify`, {
180
182
  method: 'POST',
181
183
  body: options,
184
+ apiVersion: 'v3',
182
185
  });
183
186
  },
184
187
  /**
@@ -201,7 +204,7 @@ exports.claims = {
201
204
  params.set('runId', options.runId);
202
205
  if (options.analysisIds)
203
206
  params.set('analysisIds', options.analysisIds.join(','));
204
- return (0, client_1.apiRequestWithData)(`/claims/summary?${params.toString()}`);
207
+ return (0, client_1.apiRequestWithData)(`/claims/summary?${params.toString()}`, { apiVersion: 'v3' });
205
208
  },
206
209
  };
207
210
  // ============================================================================
@@ -259,4 +262,4 @@ function groupClaimsByCategory(claimsList) {
259
262
  }
260
263
  return groups;
261
264
  }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9jbGFpbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQTBUSCx3QkFFQztBQUtELGtDQUVDO0FBS0QsZ0NBRUM7QUFLRCwwREFLQztBQUtELDhDQVFDO0FBS0Qsc0RBa0JDO0FBdFhELDJDQUFnRTtBQThFaEU7O0dBRUc7QUFDVSxRQUFBLE1BQU0sR0FBRztJQUNwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkJHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUE4QjtRQUNqRCxPQUFPLElBQUEsMkJBQWtCLEVBQWlCLFdBQVcsRUFBRTtZQUNyRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2xDLE9BQU8sSUFBQSwyQkFBa0IsRUFBaUIsYUFBYSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sSUFBQSwyQkFBa0IsRUFBaUIsU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWE7UUFhcEMsT0FBTyxJQUFBLDJCQUFrQixFQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQ3JCLFVBQWtCLEVBQ2xCLE9BR0M7UUFFRCxPQUFPLElBQUEsMkJBQWtCLEVBQUMsYUFBYSxVQUFVLFlBQVksRUFBRTtZQUM3RCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQ1IsVUFBNkIsRUFBRTtRQUUvQixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxPQUFPLENBQUMsVUFBVTtZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLE9BQU8sQ0FBQyxTQUFTO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksT0FBTyxDQUFDLGFBQWE7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUUsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSztZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLE9BQU8sQ0FBQyxNQUFNO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxtQkFBVSxFQUMvQixXQUFXLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMvQixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFlO1FBQ3ZCLE9BQU8sSUFBQSwyQkFBa0IsRUFBUSxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQ1YsT0FBZSxFQUNmLE9BSUM7UUFFRCxPQUFPLElBQUEsMkJBQWtCLEVBQUMsV0FBVyxPQUFPLFNBQVMsRUFBRTtZQUNyRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUNYLFVBQXNELEVBQUU7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxDQUFDLFdBQVc7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxGLE9BQU8sSUFBQSwyQkFBa0IsRUFDdkIsbUJBQW1CLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxLQUFZO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7QUFDeEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQVk7SUFDdEMsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQUMsS0FBWTtJQUNyQyxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxVQUFtQixFQUNuQixZQUFvQixHQUFHO0lBRXZCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDL0IsVUFBbUI7SUFFbkIsT0FBTztRQUNMLFFBQVEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQztRQUM5RCxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7UUFDOUQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0tBQy9ELENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsVUFBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQW1DO1FBQzdDLE9BQU8sRUFBRSxFQUFFO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxlQUFlLEVBQUUsRUFBRTtRQUNuQixVQUFVLEVBQUUsRUFBRTtRQUNkLGNBQWMsRUFBRSxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsS0FBSyxFQUFFLEVBQUU7S0FDVixDQUFDO0lBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ2xhaW1zIEFQSVxuICpcbiAqIEZhY3RzIHZzIEluZmVyZW5jZXMgQVBJIGZvciBhY2Nlc3NpbmcgYW5hbHlzaXMgY2xhaW1zXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDbGFpbSxcbiAgQ2xhaW1UeXBlLFxuICBDbGFpbUNhdGVnb3J5LFxuICBBbmFseXNpc1Jlc3VsdCxcbiAgQXBpUmVzcG9uc2UsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBFdmlkZW5jZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNUyBBUEkgQ0xJRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTGlzdCBjbGFpbXMgcXVlcnkgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RDbGFpbXNPcHRpb25zIHtcbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIGFuYWx5c2lzSWQ/OiBzdHJpbmc7XG4gIGNsYWltVHlwZT86IENsYWltVHlwZTtcbiAgY2xhaW1DYXRlZ29yeT86IENsYWltQ2F0ZWdvcnk7XG4gIG1pbkNvbmZpZGVuY2U/OiBudW1iZXI7XG4gIGh1bWFuVmVyaWZpZWQ/OiBib29sZWFuO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbmFseXNpcyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQW5hbHlzaXNPcHRpb25zIHtcbiAgcnVuSWQ6IHN0cmluZztcbiAgbW9kZWxVc2VkPzogc3RyaW5nO1xuICBvdXRjb21lVmVyZGljdDogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gIG91dGNvbWVDb25maWRlbmNlPzogbnVtYmVyO1xuICByb290Q2F1c2VDYXRlZ29yeT86IHN0cmluZztcbiAgcm9vdENhdXNlQ29uZmlkZW5jZT86IG51bWJlcjtcbiAgY2xhaW1zPzogQ3JlYXRlQ2xhaW1JbnB1dFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNsYWltSW5wdXQge1xuICBjbGFpbVR5cGU6IENsYWltVHlwZTtcbiAgY2xhaW1DYXRlZ29yeTogQ2xhaW1DYXRlZ29yeTtcbiAgY2xhaW1UZXh0OiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgY29uZmlkZW5jZUNhbGlicmF0aW9uPzogJ2NhbGlicmF0ZWQnIHwgJ3VuY2FsaWJyYXRlZCcgfCAnbmVlZHNfbW9yZV9kYXRhJztcbiAgZXZpZGVuY2U/OiBFdmlkZW5jZVJlZmVyZW5jZVtdO1xuICBpc0V4cGxhaW5hYmxlPzogYm9vbGVhbjtcbiAgcHJvYmFiaWxpdHlWYWx1ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGYWN0cyB2cyBpbmZlcmVuY2VzIHN1bW1hcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWN0c1ZzSW5mZXJlbmNlc1N1bW1hcnkge1xuICBhbmFseXNpc0lkczogc3RyaW5nW107XG4gIHRvdGFsQ2xhaW1zOiBudW1iZXI7XG4gIG9ic2VydmVkOiB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBhdmdDb25maWRlbmNlOiBudW1iZXI7XG4gICAgY2F0ZWdvcmllczogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgfTtcbiAgaW5mZXJyZWQ6IHtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGF2Z0NvbmZpZGVuY2U6IG51bWJlcjtcbiAgICBjYXRlZ29yaWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICB9O1xuICBjb21wdXRlZDoge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgYXZnQ29uZmlkZW5jZTogbnVtYmVyO1xuICAgIGNhdGVnb3JpZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIH07XG4gIGh1bWFuVmVyaWZpZWRDb3VudDogbnVtYmVyO1xuICBodW1hblJlamVjdGVkQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFpbXMgQVBJIGNsaWVudCBmb3IgZmFjdHMgdnMgaW5mZXJlbmNlcyBtYW5hZ2VtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBjbGFpbXMgPSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYW5hbHlzaXMgZm9yIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgYW5hbHlzaXMgPSBhd2FpdCBjbGFpbXMuY3JlYXRlQW5hbHlzaXMoe1xuICAgKiAgIHJ1bklkOiAncnVuX2FiYzEyMycsXG4gICAqICAgb3V0Y29tZVZlcmRpY3Q6ICdmYWlsdXJlJyxcbiAgICogICBvdXRjb21lQ29uZmlkZW5jZTogMC44NSxcbiAgICogICByb290Q2F1c2VDYXRlZ29yeTogJ3JldHJpZXZhbF9mYWlsdXJlJyxcbiAgICogICBjbGFpbXM6IFtcbiAgICogICAgIHtcbiAgICogICAgICAgY2xhaW1UeXBlOiAnb2JzZXJ2ZWQnLFxuICAgKiAgICAgICBjbGFpbUNhdGVnb3J5OiAncm9vdF9jYXVzZScsXG4gICAqICAgICAgIGNsYWltVGV4dDogJ1ZlY3RvciBzZWFyY2ggcmV0dXJuZWQgMCByZXN1bHRzJyxcbiAgICogICAgICAgY29uZmlkZW5jZTogMS4wLFxuICAgKiAgICAgICBldmlkZW5jZTogW3sgdHlwZTogJ3NwYW4nLCByZWZlcmVuY2VJZDogJ3NwYW5fMTIzJywgcmVsZXZhbmNlOiAnZGlyZWN0JywgY29uZmlkZW5jZTogMS4wIH1dLFxuICAgKiAgICAgfSxcbiAgICogICAgIHtcbiAgICogICAgICAgY2xhaW1UeXBlOiAnaW5mZXJyZWQnLFxuICAgKiAgICAgICBjbGFpbUNhdGVnb3J5OiAnY2h1cm5fcmlzaycsXG4gICAqICAgICAgIGNsYWltVGV4dDogJ0hpZ2ggY2h1cm4gcmlzayBkdWUgdG8gcmVwZWF0ZWQgZmFpbHVyZXMnLFxuICAgKiAgICAgICBjb25maWRlbmNlOiAwLjcsXG4gICAqICAgICB9LFxuICAgKiAgIF0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFuYWx5c2lzKG9wdGlvbnM6IENyZWF0ZUFuYWx5c2lzT3B0aW9ucyk6IFByb21pc2U8QW5hbHlzaXNSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPEFuYWx5c2lzUmVzdWx0PignL2FuYWx5c2VzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBvcHRpb25zLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYW5hbHlzaXMgYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhbmFseXNpcyA9IGF3YWl0IGNsYWltcy5nZXRBbmFseXNpcygnYW5hbHlzaXNfYWJjMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0QW5hbHlzaXMoYW5hbHlzaXNJZDogc3RyaW5nKTogUHJvbWlzZTxBbmFseXNpc1Jlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8QW5hbHlzaXNSZXN1bHQ+KGAvYW5hbHlzZXMvJHthbmFseXNpc0lkfWApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBhbmFseXNpcyBmb3IgYSBydW5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhbmFseXNpcyA9IGF3YWl0IGNsYWltcy5nZXRSdW5BbmFseXNpcygncnVuX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFJ1bkFuYWx5c2lzKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPEFuYWx5c2lzUmVzdWx0PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxBbmFseXNpc1Jlc3VsdD4oYC9ydW5zLyR7cnVuSWR9L2FuYWx5c2lzYCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhbmFseXNpcyBoaXN0b3J5IGZvciBhIHJ1blxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGhpc3RvcnkgPSBhd2FpdCBjbGFpbXMuZ2V0QW5hbHlzaXNIaXN0b3J5KCdydW5fYWJjMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0QW5hbHlzaXNIaXN0b3J5KHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIGFuYWx5c2VzOiBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgYW5hbHlzaXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgICBtb2RlbFVzZWQ6IHN0cmluZztcbiAgICAgIG91dGNvbWVWZXJkaWN0OiBzdHJpbmc7XG4gICAgICBpc0N1cnJlbnQ6IGJvb2xlYW47XG4gICAgICBzdXBlcnNlZGVkQnk/OiBzdHJpbmc7XG4gICAgICBzdXBlcnNlc3Npb25SZWFzb24/OiBzdHJpbmc7XG4gICAgICBhbmFseXplZEF0OiBzdHJpbmc7XG4gICAgfT47XG4gIH0+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKGAvcnVucy8ke3J1bklkfS9hbmFseXNlc2ApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTdXBlcnNlZGUgYW4gYW5hbHlzaXMgd2l0aCBhIG5ldyBvbmVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdBbmFseXNpcyA9IGF3YWl0IGNsYWltcy5zdXBlcnNlZGVBbmFseXNpcygnYW5hbHlzaXNfb2xkJywge1xuICAgKiAgIHJlYXNvbjogJ0ltcHJvdmVkIG1vZGVsIGFjY3VyYWN5JyxcbiAgICogICBuZXdBbmFseXNpczoge1xuICAgKiAgICAgb3V0Y29tZVZlcmRpY3Q6ICdzdWNjZXNzJyxcbiAgICogICAgIG91dGNvbWVDb25maWRlbmNlOiAwLjk1LFxuICAgKiAgICAgY2xhaW1zOiBbLi4uXSxcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdXBlcnNlZGVBbmFseXNpcyhcbiAgICBhbmFseXNpc0lkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICBuZXdBbmFseXNpczogT21pdDxDcmVhdGVBbmFseXNpc09wdGlvbnMsICdydW5JZCc+O1xuICAgIH1cbiAgKTogUHJvbWlzZTx7IHN1cGVyc2VkZWRBbmFseXNpc0lkOiBzdHJpbmc7IG5ld0FuYWx5c2lzOiBBbmFseXNpc1Jlc3VsdCB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL2FuYWx5c2VzLyR7YW5hbHlzaXNJZH0vc3VwZXJzZWRlYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBvcHRpb25zLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0IGNsYWltcyB3aXRoIGZpbHRlcnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBHZXQgYWxsIGluZmVycmVkIGNsYWltcyB3aXRoIGhpZ2ggY29uZmlkZW5jZVxuICAgKiBjb25zdCB7IGNsYWltcyB9ID0gYXdhaXQgY2xhaW1zLmxpc3Qoe1xuICAgKiAgIGNsYWltVHlwZTogJ2luZmVycmVkJyxcbiAgICogICBtaW5Db25maWRlbmNlOiAwLjgsXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBHZXQgYWxsIGNodXJuIHJpc2sgY2xhaW1zIGZvciBhIHJ1blxuICAgKiBjb25zdCB7IGNsYWltcyB9ID0gYXdhaXQgY2xhaW1zLmxpc3Qoe1xuICAgKiAgIHJ1bklkOiAncnVuX2FiYzEyMycsXG4gICAqICAgY2xhaW1DYXRlZ29yeTogJ2NodXJuX3Jpc2snLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBsaXN0KFxuICAgIG9wdGlvbnM6IExpc3RDbGFpbXNPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTx7IGNsYWltczogQ2xhaW1bXTsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGhhc01vcmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucy5ydW5JZCkgcGFyYW1zLnNldCgncnVuSWQnLCBvcHRpb25zLnJ1bklkKTtcbiAgICBpZiAob3B0aW9ucy5hbmFseXNpc0lkKSBwYXJhbXMuc2V0KCdhbmFseXNpc0lkJywgb3B0aW9ucy5hbmFseXNpc0lkKTtcbiAgICBpZiAob3B0aW9ucy5jbGFpbVR5cGUpIHBhcmFtcy5zZXQoJ2NsYWltVHlwZScsIG9wdGlvbnMuY2xhaW1UeXBlKTtcbiAgICBpZiAob3B0aW9ucy5jbGFpbUNhdGVnb3J5KSBwYXJhbXMuc2V0KCdjbGFpbUNhdGVnb3J5Jywgb3B0aW9ucy5jbGFpbUNhdGVnb3J5KTtcbiAgICBpZiAob3B0aW9ucy5taW5Db25maWRlbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ21pbkNvbmZpZGVuY2UnLCBTdHJpbmcob3B0aW9ucy5taW5Db25maWRlbmNlKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmh1bWFuVmVyaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNldCgnaHVtYW5WZXJpZmllZCcsIFN0cmluZyhvcHRpb25zLmh1bWFuVmVyaWZpZWQpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKG9wdGlvbnMubGltaXQpKTtcbiAgICBpZiAob3B0aW9ucy5vZmZzZXQpIHBhcmFtcy5zZXQoJ29mZnNldCcsIFN0cmluZyhvcHRpb25zLm9mZnNldCkpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPHsgY2xhaW1zOiBDbGFpbVtdOyBsaW1pdDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgaGFzTW9yZTogYm9vbGVhbiB9Pj4oXG4gICAgICBgL2NsYWltcz8ke3BhcmFtcy50b1N0cmluZygpfWBcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhITtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGEgY2xhaW0gYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjbGFpbSA9IGF3YWl0IGNsYWltcy5nZXQoJ2NsYWltX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldChjbGFpbUlkOiBzdHJpbmcpOiBQcm9taXNlPENsYWltPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxDbGFpbT4oYC9jbGFpbXMvJHtjbGFpbUlkfWApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBWZXJpZnkgb3IgcmVqZWN0IGEgY2xhaW0gKGh1bWFuIGZlZWRiYWNrKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIENvbmZpcm0gYSBjbGFpbVxuICAgKiBhd2FpdCBjbGFpbXMudmVyaWZ5KCdjbGFpbV9hYmMxMjMnLCB7XG4gICAqICAgdmVyZGljdDogJ2NvbmZpcm1lZCcsXG4gICAqICAgbm90ZXM6ICdWZXJpZmllZCBhZ2FpbnN0IHRpY2tldCBoaXN0b3J5JyxcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFJlamVjdCBhIGNsYWltXG4gICAqIGF3YWl0IGNsYWltcy52ZXJpZnkoJ2NsYWltX2FiYzEyMycsIHtcbiAgICogICB2ZXJkaWN0OiAncmVqZWN0ZWQnLFxuICAgKiAgIG5vdGVzOiAnQ3VzdG9tZXIgY29udGV4dCB3YXMgbWlzc2luZycsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHZlcmlmeShcbiAgICBjbGFpbUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgdmVyZGljdDogJ2NvbmZpcm1lZCcgfCAncmVqZWN0ZWQnIHwgJ21vZGlmaWVkJztcbiAgICAgIG5vdGVzPzogc3RyaW5nO1xuICAgICAgbW9kaWZpZWRUZXh0Pzogc3RyaW5nO1xuICAgIH1cbiAgKTogUHJvbWlzZTx7IGNsYWltSWQ6IHN0cmluZzsgdmVyZGljdDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoYC9jbGFpbXMvJHtjbGFpbUlkfS92ZXJpZnlgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBmYWN0cyB2cyBpbmZlcmVuY2VzIHN1bW1hcnlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTdW1tYXJ5IGZvciBhIHNwZWNpZmljIHJ1blxuICAgKiBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgY2xhaW1zLnN1bW1hcnkoeyBydW5JZDogJ3J1bl9hYmMxMjMnIH0pO1xuICAgKlxuICAgKiAvLyBTdW1tYXJ5IGZvciBtdWx0aXBsZSBhbmFseXNlc1xuICAgKiBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgY2xhaW1zLnN1bW1hcnkoe1xuICAgKiAgIGFuYWx5c2lzSWRzOiBbJ2FuYWx5c2lzXzEnLCAnYW5hbHlzaXNfMiddLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdW1tYXJ5KFxuICAgIG9wdGlvbnM6IHsgcnVuSWQ/OiBzdHJpbmc7IGFuYWx5c2lzSWRzPzogc3RyaW5nW10gfSA9IHt9XG4gICk6IFByb21pc2U8RmFjdHNWc0luZmVyZW5jZXNTdW1tYXJ5PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRpb25zLnJ1bklkKSBwYXJhbXMuc2V0KCdydW5JZCcsIG9wdGlvbnMucnVuSWQpO1xuICAgIGlmIChvcHRpb25zLmFuYWx5c2lzSWRzKSBwYXJhbXMuc2V0KCdhbmFseXNpc0lkcycsIG9wdGlvbnMuYW5hbHlzaXNJZHMuam9pbignLCcpKTtcblxuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8RmFjdHNWc0luZmVyZW5jZXNTdW1tYXJ5PihcbiAgICAgIGAvY2xhaW1zL3N1bW1hcnk/JHtwYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgKTtcbiAgfSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGNsYWltIGlzIGEgZmFjdCAob2JzZXJ2ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZhY3QoY2xhaW06IENsYWltKTogYm9vbGVhbiB7XG4gIHJldHVybiBjbGFpbS5jbGFpbVR5cGUgPT09ICdvYnNlcnZlZCc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjbGFpbSBpcyBhbiBpbmZlcmVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5mZXJlbmNlKGNsYWltOiBDbGFpbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW0uY2xhaW1UeXBlID09PSAnaW5mZXJyZWQnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgY2xhaW0gaXMgY29tcHV0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcHV0ZWQoY2xhaW06IENsYWltKTogYm9vbGVhbiB7XG4gIHJldHVybiBjbGFpbS5jbGFpbVR5cGUgPT09ICdjb21wdXRlZCc7XG59XG5cbi8qKlxuICogR2V0IGhpZ2ggY29uZmlkZW5jZSBjbGFpbXMgKD49IHRocmVzaG9sZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zKFxuICBjbGFpbXNMaXN0OiBDbGFpbVtdLFxuICB0aHJlc2hvbGQ6IG51bWJlciA9IDAuOFxuKTogQ2xhaW1bXSB7XG4gIHJldHVybiBjbGFpbXNMaXN0LmZpbHRlcigoYykgPT4gYy5jb25maWRlbmNlID49IHRocmVzaG9sZCk7XG59XG5cbi8qKlxuICogR3JvdXAgY2xhaW1zIGJ5IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQ2xhaW1zQnlUeXBlKFxuICBjbGFpbXNMaXN0OiBDbGFpbVtdXG4pOiBSZWNvcmQ8Q2xhaW1UeXBlLCBDbGFpbVtdPiB7XG4gIHJldHVybiB7XG4gICAgb2JzZXJ2ZWQ6IGNsYWltc0xpc3QuZmlsdGVyKChjKSA9PiBjLmNsYWltVHlwZSA9PT0gJ29ic2VydmVkJyksXG4gICAgaW5mZXJyZWQ6IGNsYWltc0xpc3QuZmlsdGVyKChjKSA9PiBjLmNsYWltVHlwZSA9PT0gJ2luZmVycmVkJyksXG4gICAgY29tcHV0ZWQ6IGNsYWltc0xpc3QuZmlsdGVyKChjKSA9PiBjLmNsYWltVHlwZSA9PT0gJ2NvbXB1dGVkJyksXG4gIH07XG59XG5cbi8qKlxuICogR3JvdXAgY2xhaW1zIGJ5IGNhdGVnb3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cENsYWltc0J5Q2F0ZWdvcnkoXG4gIGNsYWltc0xpc3Q6IENsYWltW11cbik6IFJlY29yZDxDbGFpbUNhdGVnb3J5LCBDbGFpbVtdPiB7XG4gIGNvbnN0IGdyb3VwczogUmVjb3JkPENsYWltQ2F0ZWdvcnksIENsYWltW10+ID0ge1xuICAgIG91dGNvbWU6IFtdLFxuICAgIHJvb3RfY2F1c2U6IFtdLFxuICAgIGN1c3RvbWVyX2ltcGFjdDogW10sXG4gICAgY2h1cm5fcmlzazogW10sXG4gICAgcmV2ZW51ZV9pbXBhY3Q6IFtdLFxuICAgIHF1YWxpdHk6IFtdLFxuICAgIG90aGVyOiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IGNsYWltIG9mIGNsYWltc0xpc3QpIHtcbiAgICBncm91cHNbY2xhaW0uY2xhaW1DYXRlZ29yeV0ucHVzaChjbGFpbSk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufVxuIl19
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9jbGFpbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQStUSCx3QkFFQztBQUtELGtDQUVDO0FBS0QsZ0NBRUM7QUFLRCwwREFLQztBQUtELDhDQVFDO0FBS0Qsc0RBa0JDO0FBM1hELDJDQUFnRTtBQThFaEU7O0dBRUc7QUFDVSxRQUFBLE1BQU0sR0FBRztJQUNwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkJHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUE4QjtRQUNqRCxPQUFPLElBQUEsMkJBQWtCLEVBQWlCLFdBQVcsRUFBRTtZQUNyRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1lBQ2IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2xDLE9BQU8sSUFBQSwyQkFBa0IsRUFBaUIsYUFBYSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sSUFBQSwyQkFBa0IsRUFBaUIsU0FBUyxLQUFLLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWE7UUFhcEMsT0FBTyxJQUFBLDJCQUFrQixFQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsaUJB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LEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7S0FDL0QsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxVQUFtQjtJQUVuQixNQUFNLE1BQU0sR0FBbUM7UUFDN0MsT0FBTyxFQUFFLEVBQUU7UUFDWCxVQUFVLEVBQUUsRUFBRTtRQUNkLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxFQUFFO1FBQ2QsY0FBYyxFQUFFLEVBQUU7UUFDbEIsT0FBTyxFQUFFLEVBQUU7UUFDWCxLQUFLLEVBQUUsRUFBRTtLQUNWLENBQUM7SUFFRixLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDbGFpbXMgQVBJXG4gKlxuICogRmFjdHMgdnMgSW5mZXJlbmNlcyBBUEkgZm9yIGFjY2Vzc2luZyBhbmFseXNpcyBjbGFpbXNcbiAqL1xuXG5pbXBvcnQgeyBhcGlSZXF1ZXN0LCBhcGlSZXF1ZXN0V2l0aERhdGEgfSBmcm9tICcuLi9jb3JlL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYWltLFxuICBDbGFpbVR5cGUsXG4gIENsYWltQ2F0ZWdvcnksXG4gIEFuYWx5c2lzUmVzdWx0LFxuICBBcGlSZXNwb25zZSxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIEV2aWRlbmNlUmVmZXJlbmNlLFxufSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0xBSU1TIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMaXN0IGNsYWltcyBxdWVyeSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENsYWltc09wdGlvbnMge1xuICBydW5JZD86IHN0cmluZztcbiAgYW5hbHlzaXNJZD86IHN0cmluZztcbiAgY2xhaW1UeXBlPzogQ2xhaW1UeXBlO1xuICBjbGFpbUNhdGVnb3J5PzogQ2xhaW1DYXRlZ29yeTtcbiAgbWluQ29uZmlkZW5jZT86IG51bWJlcjtcbiAgaHVtYW5WZXJpZmllZD86IGJvb2xlYW47XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuYWx5c2lzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBbmFseXNpc09wdGlvbnMge1xuICBydW5JZDogc3RyaW5nO1xuICBtb2RlbFVzZWQ/OiBzdHJpbmc7XG4gIG91dGNvbWVWZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgb3V0Y29tZUNvbmZpZGVuY2U/OiBudW1iZXI7XG4gIHJvb3RDYXVzZUNhdGVnb3J5Pzogc3RyaW5nO1xuICByb290Q2F1c2VDb25maWRlbmNlPzogbnVtYmVyO1xuICBjbGFpbXM/OiBDcmVhdGVDbGFpbUlucHV0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2xhaW1JbnB1dCB7XG4gIGNsYWltVHlwZTogQ2xhaW1UeXBlO1xuICBjbGFpbUNhdGVnb3J5OiBDbGFpbUNhdGVnb3J5O1xuICBjbGFpbVRleHQ6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyO1xuICBjb25maWRlbmNlQ2FsaWJyYXRpb24/OiAnY2FsaWJyYXRlZCcgfCAndW5jYWxpYnJhdGVkJyB8ICduZWVkc19tb3JlX2RhdGEnO1xuICBldmlkZW5jZT86IEV2aWRlbmNlUmVmZXJlbmNlW107XG4gIGlzRXhwbGFpbmFibGU/OiBib29sZWFuO1xuICBwcm9iYWJpbGl0eVZhbHVlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZhY3RzIHZzIGluZmVyZW5jZXMgc3VtbWFyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RzVnNJbmZlcmVuY2VzU3VtbWFyeSB7XG4gIGFuYWx5c2lzSWRzOiBzdHJpbmdbXTtcbiAgdG90YWxDbGFpbXM6IG51bWJlcjtcbiAgb2JzZXJ2ZWQ6IHtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGF2Z0NvbmZpZGVuY2U6IG51bWJlcjtcbiAgICBjYXRlZ29yaWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICB9O1xuICBpbmZlcnJlZDoge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgYXZnQ29uZmlkZW5jZTogbnVtYmVyO1xuICAgIGNhdGVnb3JpZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIH07XG4gIGNvbXB1dGVkOiB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBhdmdDb25maWRlbmNlOiBudW1iZXI7XG4gICAgY2F0ZWdvcmllczogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgfTtcbiAgaHVtYW5WZXJpZmllZENvdW50OiBudW1iZXI7XG4gIGh1bWFuUmVqZWN0ZWRDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENsYWltcyBBUEkgY2xpZW50IGZvciBmYWN0cyB2cyBpbmZlcmVuY2VzIG1hbmFnZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGNsYWltcyA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBhbmFseXNpcyBmb3IgYSBydW5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhbmFseXNpcyA9IGF3YWl0IGNsYWltcy5jcmVhdGVBbmFseXNpcyh7XG4gICAqICAgcnVuSWQ6ICdydW5fYWJjMTIzJyxcbiAgICogICBvdXRjb21lVmVyZGljdDogJ2ZhaWx1cmUnLFxuICAgKiAgIG91dGNvbWVDb25maWRlbmNlOiAwLjg1LFxuICAgKiAgIHJvb3RDYXVzZUNhdGVnb3J5OiAncmV0cmlldmFsX2ZhaWx1cmUnLFxuICAgKiAgIGNsYWltczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBjbGFpbVR5cGU6ICdvYnNlcnZlZCcsXG4gICAqICAgICAgIGNsYWltQ2F0ZWdvcnk6ICdyb290X2NhdXNlJyxcbiAgICogICAgICAgY2xhaW1UZXh0OiAnVmVjdG9yIHNlYXJjaCByZXR1cm5lZCAwIHJlc3VsdHMnLFxuICAgKiAgICAgICBjb25maWRlbmNlOiAxLjAsXG4gICAqICAgICAgIGV2aWRlbmNlOiBbeyB0eXBlOiAnc3BhbicsIHJlZmVyZW5jZUlkOiAnc3Bhbl8xMjMnLCByZWxldmFuY2U6ICdkaXJlY3QnLCBjb25maWRlbmNlOiAxLjAgfV0sXG4gICAqICAgICB9LFxuICAgKiAgICAge1xuICAgKiAgICAgICBjbGFpbVR5cGU6ICdpbmZlcnJlZCcsXG4gICAqICAgICAgIGNsYWltQ2F0ZWdvcnk6ICdjaHVybl9yaXNrJyxcbiAgICogICAgICAgY2xhaW1UZXh0OiAnSGlnaCBjaHVybiByaXNrIGR1ZSB0byByZXBlYXRlZCBmYWlsdXJlcycsXG4gICAqICAgICAgIGNvbmZpZGVuY2U6IDAuNyxcbiAgICogICAgIH0sXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQW5hbHlzaXMob3B0aW9uczogQ3JlYXRlQW5hbHlzaXNPcHRpb25zKTogUHJvbWlzZTxBbmFseXNpc1Jlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8QW5hbHlzaXNSZXN1bHQ+KCcvYW5hbHlzZXMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICBhcGlWZXJzaW9uOiAndjMnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYW5hbHlzaXMgYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhbmFseXNpcyA9IGF3YWl0IGNsYWltcy5nZXRBbmFseXNpcygnYW5hbHlzaXNfYWJjMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0QW5hbHlzaXMoYW5hbHlzaXNJZDogc3RyaW5nKTogUHJvbWlzZTxBbmFseXNpc1Jlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8QW5hbHlzaXNSZXN1bHQ+KGAvYW5hbHlzZXMvJHthbmFseXNpc0lkfWAsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgYW5hbHlzaXMgZm9yIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgYW5hbHlzaXMgPSBhd2FpdCBjbGFpbXMuZ2V0UnVuQW5hbHlzaXMoJ3J1bl9hYmMxMjMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRSdW5BbmFseXNpcyhydW5JZDogc3RyaW5nKTogUHJvbWlzZTxBbmFseXNpc1Jlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8QW5hbHlzaXNSZXN1bHQ+KGAvcnVucy8ke3J1bklkfS9hbmFseXNpc2AsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGFuYWx5c2lzIGhpc3RvcnkgZm9yIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgaGlzdG9yeSA9IGF3YWl0IGNsYWltcy5nZXRBbmFseXNpc0hpc3RvcnkoJ3J1bl9hYmMxMjMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRBbmFseXNpc0hpc3RvcnkocnVuSWQ6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgYW5hbHlzZXM6IEFycmF5PHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBhbmFseXNpc1ZlcnNpb246IHN0cmluZztcbiAgICAgIG1vZGVsVXNlZDogc3RyaW5nO1xuICAgICAgb3V0Y29tZVZlcmRpY3Q6IHN0cmluZztcbiAgICAgIGlzQ3VycmVudDogYm9vbGVhbjtcbiAgICAgIHN1cGVyc2VkZWRCeT86IHN0cmluZztcbiAgICAgIHN1cGVyc2Vzc2lvblJlYXNvbj86IHN0cmluZztcbiAgICAgIGFuYWx5emVkQXQ6IHN0cmluZztcbiAgICB9PjtcbiAgfT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoYC9ydW5zLyR7cnVuSWR9L2FuYWx5c2VzYCwgeyBhcGlWZXJzaW9uOiAndjMnIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTdXBlcnNlZGUgYW4gYW5hbHlzaXMgd2l0aCBhIG5ldyBvbmVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdBbmFseXNpcyA9IGF3YWl0IGNsYWltcy5zdXBlcnNlZGVBbmFseXNpcygnYW5hbHlzaXNfb2xkJywge1xuICAgKiAgIHJlYXNvbjogJ0ltcHJvdmVkIG1vZGVsIGFjY3VyYWN5JyxcbiAgICogICBuZXdBbmFseXNpczoge1xuICAgKiAgICAgb3V0Y29tZVZlcmRpY3Q6ICdzdWNjZXNzJyxcbiAgICogICAgIG91dGNvbWVDb25maWRlbmNlOiAwLjk1LFxuICAgKiAgICAgY2xhaW1zOiBbLi4uXSxcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdXBlcnNlZGVBbmFseXNpcyhcbiAgICBhbmFseXNpc0lkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICBuZXdBbmFseXNpczogT21pdDxDcmVhdGVBbmFseXNpc09wdGlvbnMsICdydW5JZCc+O1xuICAgIH1cbiAgKTogUHJvbWlzZTx7IHN1cGVyc2VkZWRBbmFseXNpc0lkOiBzdHJpbmc7IG5ld0FuYWx5c2lzOiBBbmFseXNpc1Jlc3VsdCB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL2FuYWx5c2VzLyR7YW5hbHlzaXNJZH0vc3VwZXJzZWRlYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgYXBpVmVyc2lvbjogJ3YzJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogTGlzdCBjbGFpbXMgd2l0aCBmaWx0ZXJzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gR2V0IGFsbCBpbmZlcnJlZCBjbGFpbXMgd2l0aCBoaWdoIGNvbmZpZGVuY2VcbiAgICogY29uc3QgeyBjbGFpbXMgfSA9IGF3YWl0IGNsYWltcy5saXN0KHtcbiAgICogICBjbGFpbVR5cGU6ICdpbmZlcnJlZCcsXG4gICAqICAgbWluQ29uZmlkZW5jZTogMC44LFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gR2V0IGFsbCBjaHVybiByaXNrIGNsYWltcyBmb3IgYSBydW5cbiAgICogY29uc3QgeyBjbGFpbXMgfSA9IGF3YWl0IGNsYWltcy5saXN0KHtcbiAgICogICBydW5JZDogJ3J1bl9hYmMxMjMnLFxuICAgKiAgIGNsYWltQ2F0ZWdvcnk6ICdjaHVybl9yaXNrJyxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbGlzdChcbiAgICBvcHRpb25zOiBMaXN0Q2xhaW1zT3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8eyBjbGFpbXM6IENsYWltW107IGxpbWl0OiBudW1iZXI7IG9mZnNldDogbnVtYmVyOyBoYXNNb3JlOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMucnVuSWQpIHBhcmFtcy5zZXQoJ3J1bklkJywgb3B0aW9ucy5ydW5JZCk7XG4gICAgaWYgKG9wdGlvbnMuYW5hbHlzaXNJZCkgcGFyYW1zLnNldCgnYW5hbHlzaXNJZCcsIG9wdGlvbnMuYW5hbHlzaXNJZCk7XG4gICAgaWYgKG9wdGlvbnMuY2xhaW1UeXBlKSBwYXJhbXMuc2V0KCdjbGFpbVR5cGUnLCBvcHRpb25zLmNsYWltVHlwZSk7XG4gICAgaWYgKG9wdGlvbnMuY2xhaW1DYXRlZ29yeSkgcGFyYW1zLnNldCgnY2xhaW1DYXRlZ29yeScsIG9wdGlvbnMuY2xhaW1DYXRlZ29yeSk7XG4gICAgaWYgKG9wdGlvbnMubWluQ29uZmlkZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuc2V0KCdtaW5Db25maWRlbmNlJywgU3RyaW5nKG9wdGlvbnMubWluQ29uZmlkZW5jZSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5odW1hblZlcmlmaWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2h1bWFuVmVyaWZpZWQnLCBTdHJpbmcob3B0aW9ucy5odW1hblZlcmlmaWVkKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxpbWl0KSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhvcHRpb25zLmxpbWl0KSk7XG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0KSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcob3B0aW9ucy5vZmZzZXQpKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdDxBcGlSZXNwb25zZTx7IGNsYWltczogQ2xhaW1bXTsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGhhc01vcmU6IGJvb2xlYW4gfT4+KFxuICAgICAgYC9jbGFpbXM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjMnIH1cbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhITtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGEgY2xhaW0gYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjbGFpbSA9IGF3YWl0IGNsYWltcy5nZXQoJ2NsYWltX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldChjbGFpbUlkOiBzdHJpbmcpOiBQcm9taXNlPENsYWltPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxDbGFpbT4oYC9jbGFpbXMvJHtjbGFpbUlkfWAsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogVmVyaWZ5IG9yIHJlamVjdCBhIGNsYWltIChodW1hbiBmZWVkYmFjaylcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBDb25maXJtIGEgY2xhaW1cbiAgICogYXdhaXQgY2xhaW1zLnZlcmlmeSgnY2xhaW1fYWJjMTIzJywge1xuICAgKiAgIHZlcmRpY3Q6ICdjb25maXJtZWQnLFxuICAgKiAgIG5vdGVzOiAnVmVyaWZpZWQgYWdhaW5zdCB0aWNrZXQgaGlzdG9yeScsXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBSZWplY3QgYSBjbGFpbVxuICAgKiBhd2FpdCBjbGFpbXMudmVyaWZ5KCdjbGFpbV9hYmMxMjMnLCB7XG4gICAqICAgdmVyZGljdDogJ3JlamVjdGVkJyxcbiAgICogICBub3RlczogJ0N1c3RvbWVyIGNvbnRleHQgd2FzIG1pc3NpbmcnLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB2ZXJpZnkoXG4gICAgY2xhaW1JZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHZlcmRpY3Q6ICdjb25maXJtZWQnIHwgJ3JlamVjdGVkJyB8ICdtb2RpZmllZCc7XG4gICAgICBub3Rlcz86IHN0cmluZztcbiAgICAgIG1vZGlmaWVkVGV4dD86IHN0cmluZztcbiAgICB9XG4gICk6IFByb21pc2U8eyBjbGFpbUlkOiBzdHJpbmc7IHZlcmRpY3Q6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKGAvY2xhaW1zLyR7Y2xhaW1JZH0vdmVyaWZ5YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgYXBpVmVyc2lvbjogJ3YzJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGZhY3RzIHZzIGluZmVyZW5jZXMgc3VtbWFyeVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFN1bW1hcnkgZm9yIGEgc3BlY2lmaWMgcnVuXG4gICAqIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBjbGFpbXMuc3VtbWFyeSh7IHJ1bklkOiAncnVuX2FiYzEyMycgfSk7XG4gICAqXG4gICAqIC8vIFN1bW1hcnkgZm9yIG11bHRpcGxlIGFuYWx5c2VzXG4gICAqIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBjbGFpbXMuc3VtbWFyeSh7XG4gICAqICAgYW5hbHlzaXNJZHM6IFsnYW5hbHlzaXNfMScsICdhbmFseXNpc18yJ10sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHN1bW1hcnkoXG4gICAgb3B0aW9uczogeyBydW5JZD86IHN0cmluZzsgYW5hbHlzaXNJZHM/OiBzdHJpbmdbXSB9ID0ge31cbiAgKTogUHJvbWlzZTxGYWN0c1ZzSW5mZXJlbmNlc1N1bW1hcnk+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMucnVuSWQpIHBhcmFtcy5zZXQoJ3J1bklkJywgb3B0aW9ucy5ydW5JZCk7XG4gICAgaWYgKG9wdGlvbnMuYW5hbHlzaXNJZHMpIHBhcmFtcy5zZXQoJ2FuYWx5c2lzSWRzJywgb3B0aW9ucy5hbmFseXNpc0lkcy5qb2luKCcsJykpO1xuXG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxGYWN0c1ZzSW5mZXJlbmNlc1N1bW1hcnk+KFxuICAgICAgYC9jbGFpbXMvc3VtbWFyeT8ke3BhcmFtcy50b1N0cmluZygpfWAsXG4gICAgICB7IGFwaVZlcnNpb246ICd2MycgfVxuICAgICk7XG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjbGFpbSBpcyBhIGZhY3QgKG9ic2VydmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGYWN0KGNsYWltOiBDbGFpbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW0uY2xhaW1UeXBlID09PSAnb2JzZXJ2ZWQnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgY2xhaW0gaXMgYW4gaW5mZXJlbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luZmVyZW5jZShjbGFpbTogQ2xhaW0pOiBib29sZWFuIHtcbiAgcmV0dXJuIGNsYWltLmNsYWltVHlwZSA9PT0gJ2luZmVycmVkJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGNsYWltIGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXB1dGVkKGNsYWltOiBDbGFpbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW0uY2xhaW1UeXBlID09PSAnY29tcHV0ZWQnO1xufVxuXG4vKipcbiAqIEdldCBoaWdoIGNvbmZpZGVuY2UgY2xhaW1zICg+PSB0aHJlc2hvbGQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaWdoQ29uZmlkZW5jZUNsYWltcyhcbiAgY2xhaW1zTGlzdDogQ2xhaW1bXSxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwLjhcbik6IENsYWltW10ge1xuICByZXR1cm4gY2xhaW1zTGlzdC5maWx0ZXIoKGMpID0+IGMuY29uZmlkZW5jZSA+PSB0aHJlc2hvbGQpO1xufVxuXG4vKipcbiAqIEdyb3VwIGNsYWltcyBieSB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cENsYWltc0J5VHlwZShcbiAgY2xhaW1zTGlzdDogQ2xhaW1bXVxuKTogUmVjb3JkPENsYWltVHlwZSwgQ2xhaW1bXT4ge1xuICByZXR1cm4ge1xuICAgIG9ic2VydmVkOiBjbGFpbXNMaXN0LmZpbHRlcigoYykgPT4gYy5jbGFpbVR5cGUgPT09ICdvYnNlcnZlZCcpLFxuICAgIGluZmVycmVkOiBjbGFpbXNMaXN0LmZpbHRlcigoYykgPT4gYy5jbGFpbVR5cGUgPT09ICdpbmZlcnJlZCcpLFxuICAgIGNvbXB1dGVkOiBjbGFpbXNMaXN0LmZpbHRlcigoYykgPT4gYy5jbGFpbVR5cGUgPT09ICdjb21wdXRlZCcpLFxuICB9O1xufVxuXG4vKipcbiAqIEdyb3VwIGNsYWltcyBieSBjYXRlZ29yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBDbGFpbXNCeUNhdGVnb3J5KFxuICBjbGFpbXNMaXN0OiBDbGFpbVtdXG4pOiBSZWNvcmQ8Q2xhaW1DYXRlZ29yeSwgQ2xhaW1bXT4ge1xuICBjb25zdCBncm91cHM6IFJlY29yZDxDbGFpbUNhdGVnb3J5LCBDbGFpbVtdPiA9IHtcbiAgICBvdXRjb21lOiBbXSxcbiAgICByb290X2NhdXNlOiBbXSxcbiAgICBjdXN0b21lcl9pbXBhY3Q6IFtdLFxuICAgIGNodXJuX3Jpc2s6IFtdLFxuICAgIHJldmVudWVfaW1wYWN0OiBbXSxcbiAgICBxdWFsaXR5OiBbXSxcbiAgICBvdGhlcjogW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCBjbGFpbSBvZiBjbGFpbXNMaXN0KSB7XG4gICAgZ3JvdXBzW2NsYWltLmNsYWltQ2F0ZWdvcnldLnB1c2goY2xhaW0pO1xuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn1cbiJdfQ==