@archont561/qgis-sdk 0.4.0 → 0.5.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 +35 -32
- package/dist/host.d.ts +2 -2
- package/dist/host.js +27 -3
- package/dist/index.d.ts +42 -36
- package/dist/index.js +111 -425
- package/dist/react.d.ts +37 -57
- package/dist/react.js +40 -127
- package/dist/shared/chunk-3zscfm3y.d.ts +342 -0
- package/dist/shared/{chunk-khemhx86.d.ts → chunk-7tgzmz0m.d.ts} +98 -4
- package/dist/shared/chunk-8gawbn19.js +1 -1
- package/dist/shared/{chunk-tmca1ynt.d.ts → chunk-a33y575v.d.ts} +72 -4
- package/dist/shared/chunk-stre69mw.js +777 -0
- package/dist/shared/chunk-t1vpt5yq.js +895 -0
- package/dist/svelte.d.ts +75 -0
- package/dist/svelte.js +70 -0
- package/dist/testing.d.ts +9 -3
- package/dist/testing.js +7 -4
- package/dist/vue.d.ts +106 -0
- package/dist/vue.js +91 -0
- package/package.json +21 -3
- package/dist/shared/chunk-jjx14tgd.d.ts +0 -55
- package/dist/shared/chunk-vqyymknv.js +0 -414
|
@@ -0,0 +1,777 @@
|
|
|
1
|
+
import {
|
|
2
|
+
QgisSdkError2
|
|
3
|
+
} from "./chunk-2hwva3a3.js";
|
|
4
|
+
|
|
5
|
+
// src/generated/host.ts
|
|
6
|
+
var HOST_ID2 = "qgis.host";
|
|
7
|
+
var HOST_FINGERPRINT2 = "sha256:16790dc8c4d77ef5b5f22636702e913f3d6fb63275d0ae3e5a4ca6e8001a9abd";
|
|
8
|
+
var HOST_SCHEMA_VERSION2 = 1;
|
|
9
|
+
var HOST_OPERATIONS2 = [
|
|
10
|
+
"algorithms.describe",
|
|
11
|
+
"algorithms.list",
|
|
12
|
+
"algorithms.providers",
|
|
13
|
+
"algorithms.run",
|
|
14
|
+
"files.export",
|
|
15
|
+
"layers.get",
|
|
16
|
+
"layers.list",
|
|
17
|
+
"layers.open_vector",
|
|
18
|
+
"network.fetch",
|
|
19
|
+
"notifications.info",
|
|
20
|
+
"project.layer_ids",
|
|
21
|
+
"settings.get",
|
|
22
|
+
"styles.apply"
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
class QgisSdkHostContractError2 extends QgisSdkError2 {
|
|
26
|
+
operation;
|
|
27
|
+
constructor(operation, message) {
|
|
28
|
+
super(`operation "${operation}": ${message}`, "contract_validation_failed");
|
|
29
|
+
this.operation = operation;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function isRecord(value) {
|
|
33
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
34
|
+
}
|
|
35
|
+
function hasOnly(value, keys) {
|
|
36
|
+
return Object.keys(value).every((key) => keys.includes(key));
|
|
37
|
+
}
|
|
38
|
+
function isSafeInteger(value) {
|
|
39
|
+
return typeof value === "number" && Number.isSafeInteger(value);
|
|
40
|
+
}
|
|
41
|
+
function AlgorithmInfo2(value, strict = false) {
|
|
42
|
+
if (!isRecord(value))
|
|
43
|
+
return false;
|
|
44
|
+
if (!("id" in value))
|
|
45
|
+
return false;
|
|
46
|
+
if (!("provider" in value))
|
|
47
|
+
return false;
|
|
48
|
+
if (!("name" in value))
|
|
49
|
+
return false;
|
|
50
|
+
if (!("label" in value))
|
|
51
|
+
return false;
|
|
52
|
+
if (!("group" in value))
|
|
53
|
+
return false;
|
|
54
|
+
if (!("group_id" in value))
|
|
55
|
+
return false;
|
|
56
|
+
if (!("help" in value))
|
|
57
|
+
return false;
|
|
58
|
+
if (!("deprecated" in value))
|
|
59
|
+
return false;
|
|
60
|
+
if (!("parameters" in value))
|
|
61
|
+
return false;
|
|
62
|
+
if (!("outputs" in value))
|
|
63
|
+
return false;
|
|
64
|
+
if (value["deprecated"] !== undefined && !(typeof value["deprecated"] === "boolean")) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (value["group"] !== undefined && !(typeof value["group"] === "string")) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (value["group_id"] !== undefined && !(typeof value["group_id"] === "string")) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (value["help"] !== undefined && !(typeof value["help"] === "string")) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
if (value["outputs"] !== undefined && !(Array.isArray(value["outputs"]) && value["outputs"].every((item) => OutputInfo2(item, strict)))) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (value["parameters"] !== undefined && !(Array.isArray(value["parameters"]) && value["parameters"].every((item) => ParameterInfo2(item, strict)))) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (strict && !hasOnly(value, ["deprecated", "group", "group_id", "help", "id", "label", "name", "outputs", "parameters", "provider"]))
|
|
95
|
+
return false;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
function AlgorithmListRequest2(value, strict = false) {
|
|
99
|
+
if (!isRecord(value))
|
|
100
|
+
return false;
|
|
101
|
+
if (value["cursor"] !== undefined && !(typeof value["cursor"] === "string" && new RegExp("^(?:[0-9]+)$").test(value["cursor"]))) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
if (value["limit"] !== undefined && !(isSafeInteger(value["limit"]) && value["limit"] >= 1 && value["limit"] <= 200)) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
if (strict && !hasOnly(value, ["cursor", "limit", "provider"]))
|
|
111
|
+
return false;
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
function AlgorithmPage2(value, strict = false) {
|
|
115
|
+
if (!isRecord(value))
|
|
116
|
+
return false;
|
|
117
|
+
if (!("items" in value))
|
|
118
|
+
return false;
|
|
119
|
+
if (!("truncated" in value))
|
|
120
|
+
return false;
|
|
121
|
+
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => AlgorithmSummary2(item, strict)))) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
131
|
+
return false;
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
function AlgorithmRequest2(value, strict = false) {
|
|
135
|
+
if (!isRecord(value))
|
|
136
|
+
return false;
|
|
137
|
+
if (!("algorithm_id" in value))
|
|
138
|
+
return false;
|
|
139
|
+
if (value["algorithm_id"] !== undefined && !(typeof value["algorithm_id"] === "string")) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
if (strict && !hasOnly(value, ["algorithm_id"]))
|
|
143
|
+
return false;
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
function AlgorithmSummary2(value, strict = false) {
|
|
147
|
+
if (!isRecord(value))
|
|
148
|
+
return false;
|
|
149
|
+
if (!("id" in value))
|
|
150
|
+
return false;
|
|
151
|
+
if (!("provider" in value))
|
|
152
|
+
return false;
|
|
153
|
+
if (!("name" in value))
|
|
154
|
+
return false;
|
|
155
|
+
if (!("label" in value))
|
|
156
|
+
return false;
|
|
157
|
+
if (!("group" in value))
|
|
158
|
+
return false;
|
|
159
|
+
if (!("deprecated" in value))
|
|
160
|
+
return false;
|
|
161
|
+
if (value["deprecated"] !== undefined && !(typeof value["deprecated"] === "boolean")) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
if (value["group"] !== undefined && !(typeof value["group"] === "string")) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
if (strict && !hasOnly(value, ["deprecated", "group", "id", "label", "name", "provider"]))
|
|
180
|
+
return false;
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
function ExportRequest2(value, strict = false) {
|
|
184
|
+
if (!isRecord(value))
|
|
185
|
+
return false;
|
|
186
|
+
if (!("file" in value))
|
|
187
|
+
return false;
|
|
188
|
+
if (!("content" in value))
|
|
189
|
+
return false;
|
|
190
|
+
if (value["content"] !== undefined && !(typeof value["content"] === "string")) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
if (strict && !hasOnly(value, ["content", "file"]))
|
|
197
|
+
return false;
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
function ExportResult2(value, strict = false) {
|
|
201
|
+
if (!isRecord(value))
|
|
202
|
+
return false;
|
|
203
|
+
if (!("bytes_written" in value))
|
|
204
|
+
return false;
|
|
205
|
+
if (!("name" in value))
|
|
206
|
+
return false;
|
|
207
|
+
if (value["bytes_written"] !== undefined && !isSafeInteger(value["bytes_written"])) {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
if (strict && !hasOnly(value, ["bytes_written", "name"]))
|
|
214
|
+
return false;
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
function FetchRequest2(value, strict = false) {
|
|
218
|
+
if (!isRecord(value))
|
|
219
|
+
return false;
|
|
220
|
+
if (!("url" in value))
|
|
221
|
+
return false;
|
|
222
|
+
if (value["auth_config"] !== undefined && !(typeof value["auth_config"] === "string")) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
if (value["body"] !== undefined && !(typeof value["body"] === "string")) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
if (value["method"] !== undefined && !(value["method"] === "GET" || value["method"] === "HEAD" || value["method"] === "POST" || value["method"] === "PUT" || value["method"] === "PATCH" || value["method"] === "DELETE" || value["method"] === "OPTIONS")) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
if (value["timeout_seconds"] !== undefined && !(typeof value["timeout_seconds"] === "number" && Number.isFinite(value["timeout_seconds"]) && value["timeout_seconds"] >= 0.1 && value["timeout_seconds"] <= 300)) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
if (strict && !hasOnly(value, ["auth_config", "body", "headers", "method", "timeout_seconds", "url"]))
|
|
241
|
+
return false;
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
function FileRef2(value, strict = false) {
|
|
245
|
+
if (!isRecord(value))
|
|
246
|
+
return false;
|
|
247
|
+
if (!("kind" in value))
|
|
248
|
+
return false;
|
|
249
|
+
if (!("id" in value))
|
|
250
|
+
return false;
|
|
251
|
+
if (value["id"] !== undefined && !(typeof value["id"] === "string" && new RegExp("^(?:[a-f0-9]{16,64})$").test(value["id"]))) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
if (value["kind"] !== undefined && !(value["kind"] === "file" || value["kind"] === "directory")) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
if (value["operations"] !== undefined && !(Array.isArray(value["operations"]) && value["operations"].every((item) => item === "read" || item === "write"))) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
if (strict && !hasOnly(value, ["id", "kind", "name", "operations"]))
|
|
264
|
+
return false;
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
function HttpHeader2(value, strict = false) {
|
|
268
|
+
if (!isRecord(value))
|
|
269
|
+
return false;
|
|
270
|
+
if (!("name" in value))
|
|
271
|
+
return false;
|
|
272
|
+
if (!("value" in value))
|
|
273
|
+
return false;
|
|
274
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
if (value["value"] !== undefined && !(typeof value["value"] === "string")) {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
if (strict && !hasOnly(value, ["name", "value"]))
|
|
281
|
+
return false;
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
function IdPage2(value, strict = false) {
|
|
285
|
+
if (!isRecord(value))
|
|
286
|
+
return false;
|
|
287
|
+
if (!("items" in value))
|
|
288
|
+
return false;
|
|
289
|
+
if (!("truncated" in value))
|
|
290
|
+
return false;
|
|
291
|
+
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => typeof item === "string"))) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
301
|
+
return false;
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
function LayerPage2(value, strict = false) {
|
|
305
|
+
if (!isRecord(value))
|
|
306
|
+
return false;
|
|
307
|
+
if (!("items" in value))
|
|
308
|
+
return false;
|
|
309
|
+
if (!("truncated" in value))
|
|
310
|
+
return false;
|
|
311
|
+
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => VectorLayerInfo2(item, strict)))) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
321
|
+
return false;
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
function LayerRequest2(value, strict = false) {
|
|
325
|
+
if (!isRecord(value))
|
|
326
|
+
return false;
|
|
327
|
+
if (!("layer_id" in value))
|
|
328
|
+
return false;
|
|
329
|
+
if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
if (strict && !hasOnly(value, ["layer_id"]))
|
|
333
|
+
return false;
|
|
334
|
+
return true;
|
|
335
|
+
}
|
|
336
|
+
function NetworkFetchData2(value, strict = false) {
|
|
337
|
+
if (!isRecord(value))
|
|
338
|
+
return false;
|
|
339
|
+
if (!("url" in value))
|
|
340
|
+
return false;
|
|
341
|
+
if (!("status_code" in value))
|
|
342
|
+
return false;
|
|
343
|
+
if (!("reason" in value))
|
|
344
|
+
return false;
|
|
345
|
+
if (!("headers" in value))
|
|
346
|
+
return false;
|
|
347
|
+
if (!("text" in value))
|
|
348
|
+
return false;
|
|
349
|
+
if (!("base64" in value))
|
|
350
|
+
return false;
|
|
351
|
+
if (value["base64"] !== undefined && !(typeof value["base64"] === "string" || value["base64"] === null)) {
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
if (value["reason"] !== undefined && !(typeof value["reason"] === "string")) {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
if (value["status_code"] !== undefined && !isSafeInteger(value["status_code"])) {
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
if (value["text"] !== undefined && !(typeof value["text"] === "string" || value["text"] === null)) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
if (strict && !hasOnly(value, ["base64", "headers", "reason", "status_code", "text", "url"]))
|
|
370
|
+
return false;
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
function NotificationsInfoRequest2(value, strict = false) {
|
|
374
|
+
if (!isRecord(value))
|
|
375
|
+
return false;
|
|
376
|
+
if (!("message" in value))
|
|
377
|
+
return false;
|
|
378
|
+
if (value["message"] !== undefined && !(typeof value["message"] === "string")) {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
if (strict && !hasOnly(value, ["message"]))
|
|
382
|
+
return false;
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
function OpenVectorRequest2(value, strict = false) {
|
|
386
|
+
if (!isRecord(value))
|
|
387
|
+
return false;
|
|
388
|
+
if (!("file" in value))
|
|
389
|
+
return false;
|
|
390
|
+
if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
if (strict && !hasOnly(value, ["file"]))
|
|
394
|
+
return false;
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
function OutputInfo2(value, strict = false) {
|
|
398
|
+
if (!isRecord(value))
|
|
399
|
+
return false;
|
|
400
|
+
if (!("name" in value))
|
|
401
|
+
return false;
|
|
402
|
+
if (!("kind" in value))
|
|
403
|
+
return false;
|
|
404
|
+
if (!("label" in value))
|
|
405
|
+
return false;
|
|
406
|
+
if (value["kind"] !== undefined && !(typeof value["kind"] === "string")) {
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
if (strict && !hasOnly(value, ["kind", "label", "name"]))
|
|
416
|
+
return false;
|
|
417
|
+
return true;
|
|
418
|
+
}
|
|
419
|
+
function PageRequest2(value, strict = false) {
|
|
420
|
+
if (!isRecord(value))
|
|
421
|
+
return false;
|
|
422
|
+
if (value["cursor"] !== undefined && !(typeof value["cursor"] === "string" && new RegExp("^(?:[0-9]+)$").test(value["cursor"]))) {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
if (value["limit"] !== undefined && !(isSafeInteger(value["limit"]) && value["limit"] >= 1 && value["limit"] <= 200)) {
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
if (strict && !hasOnly(value, ["cursor", "limit"]))
|
|
429
|
+
return false;
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
function ParameterInfo2(value, strict = false) {
|
|
433
|
+
if (!isRecord(value))
|
|
434
|
+
return false;
|
|
435
|
+
if (!("name" in value))
|
|
436
|
+
return false;
|
|
437
|
+
if (!("kind" in value))
|
|
438
|
+
return false;
|
|
439
|
+
if (!("label" in value))
|
|
440
|
+
return false;
|
|
441
|
+
if (!("description" in value))
|
|
442
|
+
return false;
|
|
443
|
+
if (!("optional" in value))
|
|
444
|
+
return false;
|
|
445
|
+
if (!("advanced" in value))
|
|
446
|
+
return false;
|
|
447
|
+
if (!("hidden" in value))
|
|
448
|
+
return false;
|
|
449
|
+
if (!("destination" in value))
|
|
450
|
+
return false;
|
|
451
|
+
if (!("required" in value))
|
|
452
|
+
return false;
|
|
453
|
+
if (!("default_json" in value))
|
|
454
|
+
return false;
|
|
455
|
+
if (!("options" in value))
|
|
456
|
+
return false;
|
|
457
|
+
if (!("multiple" in value))
|
|
458
|
+
return false;
|
|
459
|
+
if (!("number_type" in value))
|
|
460
|
+
return false;
|
|
461
|
+
if (!("minimum" in value))
|
|
462
|
+
return false;
|
|
463
|
+
if (!("maximum" in value))
|
|
464
|
+
return false;
|
|
465
|
+
if (!("extension" in value))
|
|
466
|
+
return false;
|
|
467
|
+
if (value["advanced"] !== undefined && !(typeof value["advanced"] === "boolean")) {
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
if (value["default_json"] !== undefined && !(typeof value["default_json"] === "string" || value["default_json"] === null)) {
|
|
471
|
+
return false;
|
|
472
|
+
}
|
|
473
|
+
if (value["description"] !== undefined && !(typeof value["description"] === "string")) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
if (value["destination"] !== undefined && !(typeof value["destination"] === "boolean")) {
|
|
477
|
+
return false;
|
|
478
|
+
}
|
|
479
|
+
if (value["extension"] !== undefined && !(typeof value["extension"] === "string" || value["extension"] === null)) {
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
482
|
+
if (value["hidden"] !== undefined && !(typeof value["hidden"] === "boolean")) {
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
if (value["kind"] !== undefined && !(typeof value["kind"] === "string")) {
|
|
486
|
+
return false;
|
|
487
|
+
}
|
|
488
|
+
if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
if (value["maximum"] !== undefined && !(typeof value["maximum"] === "number" && Number.isFinite(value["maximum"]) || value["maximum"] === null)) {
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
if (value["minimum"] !== undefined && !(typeof value["minimum"] === "number" && Number.isFinite(value["minimum"]) || value["minimum"] === null)) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
if (value["multiple"] !== undefined && !(typeof value["multiple"] === "boolean")) {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
500
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
if (value["number_type"] !== undefined && !(typeof value["number_type"] === "string" || value["number_type"] === null)) {
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
506
|
+
if (value["optional"] !== undefined && !(typeof value["optional"] === "boolean")) {
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
if (value["options"] !== undefined && !(Array.isArray(value["options"]) && value["options"].every((item) => typeof item === "string"))) {
|
|
510
|
+
return false;
|
|
511
|
+
}
|
|
512
|
+
if (value["required"] !== undefined && !(typeof value["required"] === "boolean")) {
|
|
513
|
+
return false;
|
|
514
|
+
}
|
|
515
|
+
if (strict && !hasOnly(value, ["advanced", "default_json", "description", "destination", "extension", "hidden", "kind", "label", "maximum", "minimum", "multiple", "name", "number_type", "optional", "options", "required"]))
|
|
516
|
+
return false;
|
|
517
|
+
return true;
|
|
518
|
+
}
|
|
519
|
+
function ProviderInfo2(value, strict = false) {
|
|
520
|
+
if (!isRecord(value))
|
|
521
|
+
return false;
|
|
522
|
+
if (!("id" in value))
|
|
523
|
+
return false;
|
|
524
|
+
if (!("label" in value))
|
|
525
|
+
return false;
|
|
526
|
+
if (!("version" in value))
|
|
527
|
+
return false;
|
|
528
|
+
if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
|
|
532
|
+
return false;
|
|
533
|
+
}
|
|
534
|
+
if (value["version"] !== undefined && !(typeof value["version"] === "string")) {
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
if (strict && !hasOnly(value, ["id", "label", "version"]))
|
|
538
|
+
return false;
|
|
539
|
+
return true;
|
|
540
|
+
}
|
|
541
|
+
function ProviderPage2(value, strict = false) {
|
|
542
|
+
if (!isRecord(value))
|
|
543
|
+
return false;
|
|
544
|
+
if (!("items" in value))
|
|
545
|
+
return false;
|
|
546
|
+
if (!("truncated" in value))
|
|
547
|
+
return false;
|
|
548
|
+
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => ProviderInfo2(item, strict)))) {
|
|
549
|
+
return false;
|
|
550
|
+
}
|
|
551
|
+
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
552
|
+
return false;
|
|
553
|
+
}
|
|
554
|
+
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
555
|
+
return false;
|
|
556
|
+
}
|
|
557
|
+
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
558
|
+
return false;
|
|
559
|
+
return true;
|
|
560
|
+
}
|
|
561
|
+
function RunAlgorithmRequest2(value, strict = false) {
|
|
562
|
+
if (!isRecord(value))
|
|
563
|
+
return false;
|
|
564
|
+
if (!("algorithm_id" in value))
|
|
565
|
+
return false;
|
|
566
|
+
if (!("params" in value))
|
|
567
|
+
return false;
|
|
568
|
+
if (value["algorithm_id"] !== undefined && !(typeof value["algorithm_id"] === "string")) {
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
if (value["params"] !== undefined && !isRecord(value["params"])) {
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
if (strict && !hasOnly(value, ["algorithm_id", "params"]))
|
|
575
|
+
return false;
|
|
576
|
+
return true;
|
|
577
|
+
}
|
|
578
|
+
function RunOutput2(value, strict = false) {
|
|
579
|
+
if (!isRecord(value))
|
|
580
|
+
return false;
|
|
581
|
+
if (!("name" in value))
|
|
582
|
+
return false;
|
|
583
|
+
if (!("kind" in value))
|
|
584
|
+
return false;
|
|
585
|
+
if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
if (value["kind"] !== undefined && !(value["kind"] === "vector" || value["kind"] === "file" || value["kind"] === "value")) {
|
|
589
|
+
return false;
|
|
590
|
+
}
|
|
591
|
+
if (value["layer"] !== undefined && !VectorLayerInfo2(value["layer"], strict)) {
|
|
592
|
+
return false;
|
|
593
|
+
}
|
|
594
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
595
|
+
return false;
|
|
596
|
+
}
|
|
597
|
+
if (value["value"] !== undefined && !(typeof value["value"] === "string" || typeof value["value"] === "number" && Number.isFinite(value["value"]) || typeof value["value"] === "boolean" || value["value"] === null)) {
|
|
598
|
+
return false;
|
|
599
|
+
}
|
|
600
|
+
if (strict && !hasOnly(value, ["file", "kind", "layer", "name", "value"]))
|
|
601
|
+
return false;
|
|
602
|
+
return true;
|
|
603
|
+
}
|
|
604
|
+
function RunResult2(value, strict = false) {
|
|
605
|
+
if (!isRecord(value))
|
|
606
|
+
return false;
|
|
607
|
+
if (!("algorithm" in value))
|
|
608
|
+
return false;
|
|
609
|
+
if (!("outputs" in value))
|
|
610
|
+
return false;
|
|
611
|
+
if (value["algorithm"] !== undefined && !(typeof value["algorithm"] === "string")) {
|
|
612
|
+
return false;
|
|
613
|
+
}
|
|
614
|
+
if (value["outputs"] !== undefined && !(Array.isArray(value["outputs"]) && value["outputs"].every((item) => RunOutput2(item, strict)))) {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
if (strict && !hasOnly(value, ["algorithm", "outputs"]))
|
|
618
|
+
return false;
|
|
619
|
+
return true;
|
|
620
|
+
}
|
|
621
|
+
function SettingsGetRequest2(value, strict = false) {
|
|
622
|
+
if (!isRecord(value))
|
|
623
|
+
return false;
|
|
624
|
+
if (!("key" in value))
|
|
625
|
+
return false;
|
|
626
|
+
if (value["default"] !== undefined && !(typeof value["default"] === "string" || value["default"] === null)) {
|
|
627
|
+
return false;
|
|
628
|
+
}
|
|
629
|
+
if (value["key"] !== undefined && !(typeof value["key"] === "string")) {
|
|
630
|
+
return false;
|
|
631
|
+
}
|
|
632
|
+
if (strict && !hasOnly(value, ["default", "key"]))
|
|
633
|
+
return false;
|
|
634
|
+
return true;
|
|
635
|
+
}
|
|
636
|
+
function StylesApplyRequest2(value, strict = false) {
|
|
637
|
+
if (!isRecord(value))
|
|
638
|
+
return false;
|
|
639
|
+
if (!("layer_id" in value))
|
|
640
|
+
return false;
|
|
641
|
+
if (!("style" in value))
|
|
642
|
+
return false;
|
|
643
|
+
if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
|
|
644
|
+
return false;
|
|
645
|
+
}
|
|
646
|
+
if (value["style"] !== undefined && !(typeof value["style"] === "string")) {
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
649
|
+
if (strict && !hasOnly(value, ["layer_id", "style"]))
|
|
650
|
+
return false;
|
|
651
|
+
return true;
|
|
652
|
+
}
|
|
653
|
+
function VectorLayerInfo2(value, strict = false) {
|
|
654
|
+
if (!isRecord(value))
|
|
655
|
+
return false;
|
|
656
|
+
if (!("id" in value))
|
|
657
|
+
return false;
|
|
658
|
+
if (!("name" in value))
|
|
659
|
+
return false;
|
|
660
|
+
if (!("geometry_type" in value))
|
|
661
|
+
return false;
|
|
662
|
+
if (!("field_names" in value))
|
|
663
|
+
return false;
|
|
664
|
+
if (!("crs" in value))
|
|
665
|
+
return false;
|
|
666
|
+
if (value["crs"] !== undefined && !(typeof value["crs"] === "string" || value["crs"] === null)) {
|
|
667
|
+
return false;
|
|
668
|
+
}
|
|
669
|
+
if (value["field_names"] !== undefined && !(Array.isArray(value["field_names"]) && value["field_names"].every((item) => typeof item === "string"))) {
|
|
670
|
+
return false;
|
|
671
|
+
}
|
|
672
|
+
if (value["geometry_type"] !== undefined && !(value["geometry_type"] === "point" || value["geometry_type"] === "line" || value["geometry_type"] === "polygon" || value["geometry_type"] === "none")) {
|
|
673
|
+
return false;
|
|
674
|
+
}
|
|
675
|
+
if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
|
|
676
|
+
return false;
|
|
677
|
+
}
|
|
678
|
+
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
679
|
+
return false;
|
|
680
|
+
}
|
|
681
|
+
if (strict && !hasOnly(value, ["crs", "field_names", "geometry_type", "id", "name"]))
|
|
682
|
+
return false;
|
|
683
|
+
return true;
|
|
684
|
+
}
|
|
685
|
+
function NetworkFetchEvent2(value, strict = false) {
|
|
686
|
+
if (!isRecord(value))
|
|
687
|
+
return false;
|
|
688
|
+
if (value.kind === "data")
|
|
689
|
+
return NetworkFetchData2(value.payload, strict);
|
|
690
|
+
return false;
|
|
691
|
+
}
|
|
692
|
+
function createHost2(client) {
|
|
693
|
+
return {
|
|
694
|
+
algorithms: {
|
|
695
|
+
describe: (input, options) => call(client, "algorithms.describe", input, options, AlgorithmRequest2, AlgorithmInfo2),
|
|
696
|
+
list: (input, options) => call(client, "algorithms.list", input, options, AlgorithmListRequest2, AlgorithmPage2),
|
|
697
|
+
providers: (input, options) => call(client, "algorithms.providers", input, options, PageRequest2, ProviderPage2),
|
|
698
|
+
run: (input, options) => call(client, "algorithms.run", input, options, RunAlgorithmRequest2, RunResult2)
|
|
699
|
+
},
|
|
700
|
+
files: {
|
|
701
|
+
export: (input, options) => call(client, "files.export", input, options, ExportRequest2, ExportResult2)
|
|
702
|
+
},
|
|
703
|
+
layers: {
|
|
704
|
+
get: (input, options) => call(client, "layers.get", input, options, LayerRequest2, VectorLayerInfo2),
|
|
705
|
+
list: (input, options) => call(client, "layers.list", input, options, PageRequest2, LayerPage2),
|
|
706
|
+
open_vector: (input, options) => call(client, "layers.open_vector", input, options, OpenVectorRequest2, VectorLayerInfo2)
|
|
707
|
+
},
|
|
708
|
+
network: {
|
|
709
|
+
fetch: (input, handlers, options) => open(client, "network.fetch", input, handlers, options, FetchRequest2, NetworkFetchEvent2)
|
|
710
|
+
},
|
|
711
|
+
notifications: {
|
|
712
|
+
info: (input, options) => call(client, "notifications.info", input, options, NotificationsInfoRequest2, (candidate) => candidate === null)
|
|
713
|
+
},
|
|
714
|
+
project: {
|
|
715
|
+
layer_ids: (input, options) => call(client, "project.layer_ids", input, options, PageRequest2, IdPage2)
|
|
716
|
+
},
|
|
717
|
+
settings: {
|
|
718
|
+
get: (input, options) => call(client, "settings.get", input, options, SettingsGetRequest2, (candidate) => typeof candidate === "string" || candidate === null)
|
|
719
|
+
},
|
|
720
|
+
styles: {
|
|
721
|
+
apply: (input, options) => call(client, "styles.apply", input, options, StylesApplyRequest2, (candidate) => candidate === null)
|
|
722
|
+
}
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
async function call(client, operation, input, options, acceptInput, acceptOutput) {
|
|
726
|
+
if (input !== undefined && !acceptInput(input, true)) {
|
|
727
|
+
throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
|
|
728
|
+
}
|
|
729
|
+
const value = await client.invoke(operation, input ?? {}, options);
|
|
730
|
+
if (!acceptOutput(value)) {
|
|
731
|
+
throw new QgisSdkHostContractError2(operation, "the response does not match the declared result");
|
|
732
|
+
}
|
|
733
|
+
return value;
|
|
734
|
+
}
|
|
735
|
+
async function open(client, operation, input, handlers, options, acceptInput, acceptEvent) {
|
|
736
|
+
if (!acceptInput(input, true)) {
|
|
737
|
+
throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
|
|
738
|
+
}
|
|
739
|
+
let ended = false;
|
|
740
|
+
let violated = false;
|
|
741
|
+
let handle = null;
|
|
742
|
+
const end = (terminal) => {
|
|
743
|
+
if (ended)
|
|
744
|
+
return;
|
|
745
|
+
ended = true;
|
|
746
|
+
handlers.onTerminal?.(terminal);
|
|
747
|
+
};
|
|
748
|
+
handle = await client.subscribe(operation, input, {
|
|
749
|
+
onEvent: (event) => {
|
|
750
|
+
if (ended)
|
|
751
|
+
return;
|
|
752
|
+
if (acceptEvent(event)) {
|
|
753
|
+
handlers.onEvent?.(event);
|
|
754
|
+
return;
|
|
755
|
+
}
|
|
756
|
+
end({
|
|
757
|
+
kind: "error",
|
|
758
|
+
message: new QgisSdkHostContractError2(operation, "an event does not match the declared events").message
|
|
759
|
+
});
|
|
760
|
+
if (handle === null) {
|
|
761
|
+
violated = true;
|
|
762
|
+
} else {
|
|
763
|
+
handle.close();
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
onTerminal: end
|
|
767
|
+
}, options);
|
|
768
|
+
if (violated) {
|
|
769
|
+
handle.close();
|
|
770
|
+
}
|
|
771
|
+
return handle;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
export { HOST_ID2, HOST_FINGERPRINT2, HOST_SCHEMA_VERSION2, HOST_OPERATIONS2, QgisSdkHostContractError2, AlgorithmInfo2, AlgorithmListRequest2, AlgorithmPage2, AlgorithmRequest2, AlgorithmSummary2, ExportRequest2, ExportResult2, FetchRequest2, FileRef2, HttpHeader2, IdPage2, LayerPage2, LayerRequest2, NetworkFetchData2, NotificationsInfoRequest2, OpenVectorRequest2, OutputInfo2, PageRequest2, ParameterInfo2, ProviderInfo2, ProviderPage2, RunAlgorithmRequest2, RunOutput2, RunResult2, SettingsGetRequest2, StylesApplyRequest2, VectorLayerInfo2, NetworkFetchEvent2, createHost2 };
|
|
775
|
+
|
|
776
|
+
//# debugId=3FC4669017E4A86E64756E2164756E21
|
|
777
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2dlbmVyYXRlZC9ob3N0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIEdlbmVyYXRlZCBieSBxZ2lzLXNkay4gRG8gbm90IGVkaXQuXG4vLyBTb3VyY2U6IHRoZSBjdXJhdGVkIGhvc3QgbWFuaWZlc3QgaW4gcWdpc19zZGsuYnJpZGdlLmhvc3QuXG4vLyBSZWdlbmVyYXRlIHdpdGggYHFnaXMtc2RrIGJyaWRnZSBnZW5lcmF0ZSAtLWhvc3RgOyBDSSBmYWlscyBvbiBkcmlmdC5cblxuaW1wb3J0IHsgUWdpc1Nka0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG5leHBvcnQgY29uc3QgSE9TVF9JRCA9IFwicWdpcy5ob3N0XCI7XG5leHBvcnQgY29uc3QgSE9TVF9GSU5HRVJQUklOVCA9IFwic2hhMjU2OjE2NzkwZGM4YzRkNzdlZjViNWYyMjYzNjcwMmU5MTNmM2Q2ZmI2MzI3NWQwYWUzZTVhNGNhNmU4MDAxYTlhYmRcIjtcbmV4cG9ydCBjb25zdCBIT1NUX1NDSEVNQV9WRVJTSU9OID0gMTtcblxuLyoqIEV2ZXJ5IGRlY2xhcmVkIG9wZXJhdGlvbiBpZCwgc28gYSBuYW1lIGNhbiBiZSBjaGVja2VkLCBub3QgZ3Vlc3NlZC4gKi9cbmV4cG9ydCBjb25zdCBIT1NUX09QRVJBVElPTlMgPSBbXG5cdFwiYWxnb3JpdGhtcy5kZXNjcmliZVwiLFxuXHRcImFsZ29yaXRobXMubGlzdFwiLFxuXHRcImFsZ29yaXRobXMucHJvdmlkZXJzXCIsXG5cdFwiYWxnb3JpdGhtcy5ydW5cIixcblx0XCJmaWxlcy5leHBvcnRcIixcblx0XCJsYXllcnMuZ2V0XCIsXG5cdFwibGF5ZXJzLmxpc3RcIixcblx0XCJsYXllcnMub3Blbl92ZWN0b3JcIixcblx0XCJuZXR3b3JrLmZldGNoXCIsXG5cdFwibm90aWZpY2F0aW9ucy5pbmZvXCIsXG5cdFwicHJvamVjdC5sYXllcl9pZHNcIixcblx0XCJzZXR0aW5ncy5nZXRcIixcblx0XCJzdHlsZXMuYXBwbHlcIixcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEhvc3RPcGVyYXRpb25JZCA9ICh0eXBlb2YgSE9TVF9PUEVSQVRJT05TKVtudW1iZXJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RJbnZva2VPcHRpb25zIHtcblx0cmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBUaGUgY2xpZW50IHRoaXMgbW9kdWxlIHdyYXBzOiBhbnl0aGluZyB3aXRoIGEgY29ycmVsYXRlZCBpbnZva2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RDbGllbnRMaWtlIHtcblx0aW52b2tlKFxuXHRcdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRcdHBheWxvYWQ/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0b3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zLFxuXHQpOiBQcm9taXNlPHVua25vd24+O1xuXHRzdWJzY3JpYmUoXG5cdFx0b3BlcmF0aW9uOiBzdHJpbmcsXG5cdFx0cGF5bG9hZD86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHRoYW5kbGVycz86IEhvc3RTdHJlYW1IYW5kbGVyczx7XG5cdFx0XHRyZWFkb25seSBraW5kOiBcImRhdGFcIiB8IFwicHJvZ3Jlc3NcIiB8IFwic3RhdGVcIjtcblx0XHRcdHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG5cdFx0fT4sXG5cdFx0b3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zLFxuXHQpOiBQcm9taXNlPEhvc3RTdHJlYW1IYW5kbGU+O1xufVxuXG4vKiogSG93IGEgc3RyZWFtIGVuZGVkOyBgZHJvcHBlZGAgaXMgb25seSBwcmVzZW50IGZvciBhIGdhcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFN0cmVhbVRlcm1pbmFsIHtcblx0cmVhZG9ubHkga2luZDogXCJjb21wbGV0ZVwiIHwgXCJlcnJvclwiIHwgXCJjYW5jZWxsZWRcIiB8IFwiZ2FwXCIgfCBcImRpc3Bvc2VkXCI7XG5cdHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyb3BwZWQ/OiBudW1iZXI7XG59XG5cbi8qKiBXaGF0IGEgc3RyZWFtIHJlcG9ydHM6IHR5cGVkIGV2ZW50cywgdGhlbiBleGFjdGx5IG9uZSBlbmQuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RTdHJlYW1IYW5kbGVyczxFPiB7XG5cdHJlYWRvbmx5IG9uRXZlbnQ/OiAoZXZlbnQ6IEUpID0+IHZvaWQ7XG5cdHJlYWRvbmx5IG9uVGVybWluYWw/OiAodGVybWluYWw6IEhvc3RTdHJlYW1UZXJtaW5hbCkgPT4gdm9pZDtcbn1cblxuLyoqIEEgbGl2ZSBzdHJlYW0sIGFzIHRoZSBjYWxsZXIgaG9sZHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RTdHJlYW1IYW5kbGUge1xuXHRyZWFkb25seSBpZDogc3RyaW5nO1xuXHRyZWFkb25seSBjbG9zZWQ6IGJvb2xlYW47XG5cdGNsb3NlKCk6IHZvaWQ7XG59XG5cbi8qKiBBbiBhcmd1bWVudCBvciBhIHJlc3BvbnNlIHRoYXQgZG9lcyBub3QgbWF0Y2ggaXRzIGRlY2xhcmVkIHNjaGVtYS4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrSG9zdENvbnRyYWN0RXJyb3IgZXh0ZW5kcyBRZ2lzU2RrRXJyb3Ige1xuXHRwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW9uOiBzdHJpbmc7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcGVyYXRpb246IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIoYG9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiOiAke21lc3NhZ2V9YCwgXCJjb250cmFjdF92YWxpZGF0aW9uX2ZhaWxlZFwiKTtcblx0XHR0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGhhc09ubHkoXG5cdHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2V5czogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5ldmVyeSgoa2V5KSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xufVxuXG5mdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxnb3JpdGhtSW5mbyB7XG5cdHJlYWRvbmx5IGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGdyb3VwOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGdyb3VwX2lkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhlbHA6IHN0cmluZztcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBvdXRwdXRzOiByZWFkb25seSBPdXRwdXRJbmZvW107XG5cdHJlYWRvbmx5IHBhcmFtZXRlcnM6IHJlYWRvbmx5IFBhcmFtZXRlckluZm9bXTtcblx0cmVhZG9ubHkgcHJvdmlkZXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvcml0aG1MaXN0UmVxdWVzdCB7XG5cdHJlYWRvbmx5IGN1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG5cdHJlYWRvbmx5IHByb3ZpZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29yaXRobVBhZ2Uge1xuXHRyZWFkb25seSBpdGVtczogcmVhZG9ubHkgQWxnb3JpdGhtU3VtbWFyeVtdO1xuXHRyZWFkb25seSBuZXh0X2N1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29yaXRobVJlcXVlc3Qge1xuXHRyZWFkb25seSBhbGdvcml0aG1faWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvcml0aG1TdW1tYXJ5IHtcblx0cmVhZG9ubHkgZGVwcmVjYXRlZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZ3JvdXA6IHN0cmluZztcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBwcm92aWRlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFJlcXVlc3Qge1xuXHRyZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGZpbGU6IEZpbGVSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0UmVzdWx0IHtcblx0cmVhZG9ubHkgYnl0ZXNfd3JpdHRlbjogbnVtYmVyO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hSZXF1ZXN0IHtcblx0cmVhZG9ubHkgYXV0aF9jb25maWc/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGJvZHk/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhlYWRlcnM/OiByZWFkb25seSBIdHRwSGVhZGVyW107XG5cdHJlYWRvbmx5IG1ldGhvZD86IFwiR0VUXCIgfCBcIkhFQURcIiB8IFwiUE9TVFwiIHwgXCJQVVRcIiB8IFwiUEFUQ0hcIiB8IFwiREVMRVRFXCIgfCBcIk9QVElPTlNcIjtcblx0cmVhZG9ubHkgdGltZW91dF9zZWNvbmRzPzogbnVtYmVyO1xuXHRyZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlUmVmIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkga2luZDogXCJmaWxlXCIgfCBcImRpcmVjdG9yeVwiO1xuXHRyZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXHRyZWFkb25seSBvcGVyYXRpb25zPzogcmVhZG9ubHkgKFwicmVhZFwiIHwgXCJ3cml0ZVwiKVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBIZWFkZXIge1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRQYWdlIHtcblx0cmVhZG9ubHkgaXRlbXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRyZWFkb25seSBuZXh0X2N1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheWVyUGFnZSB7XG5cdHJlYWRvbmx5IGl0ZW1zOiByZWFkb25seSBWZWN0b3JMYXllckluZm9bXTtcblx0cmVhZG9ubHkgbmV4dF9jdXJzb3I/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IHRydW5jYXRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXllclJlcXVlc3Qge1xuXHRyZWFkb25seSBsYXllcl9pZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtGZXRjaERhdGEge1xuXHRyZWFkb25seSBiYXNlNjQ6IHN0cmluZyB8IG51bGw7XG5cdHJlYWRvbmx5IGhlYWRlcnM6IHJlYWRvbmx5IEh0dHBIZWFkZXJbXTtcblx0cmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN0YXR1c19jb2RlOiBudW1iZXI7XG5cdHJlYWRvbmx5IHRleHQ6IHN0cmluZyB8IG51bGw7XG5cdHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCB7XG5cdHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVmVjdG9yUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGZpbGU6IEZpbGVSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0SW5mbyB7XG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VSZXF1ZXN0IHtcblx0cmVhZG9ubHkgY3Vyc29yPzogc3RyaW5nO1xuXHRyZWFkb25seSBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJJbmZvIHtcblx0cmVhZG9ubHkgYWR2YW5jZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGRlZmF1bHRfanNvbjogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblx0cmVhZG9ubHkgZGVzdGluYXRpb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgaGlkZGVuOiBib29sZWFuO1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG1heGltdW06IG51bWJlciB8IG51bGw7XG5cdHJlYWRvbmx5IG1pbmltdW06IG51bWJlciB8IG51bGw7XG5cdHJlYWRvbmx5IG11bHRpcGxlOiBib29sZWFuO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG51bWJlcl90eXBlOiBzdHJpbmcgfCBudWxsO1xuXHRyZWFkb25seSBvcHRpb25hbDogYm9vbGVhbjtcblx0cmVhZG9ubHkgb3B0aW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cdHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVySW5mbyB7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclBhZ2Uge1xuXHRyZWFkb25seSBpdGVtczogcmVhZG9ubHkgUHJvdmlkZXJJbmZvW107XG5cdHJlYWRvbmx5IG5leHRfY3Vyc29yPzogc3RyaW5nO1xuXHRyZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQWxnb3JpdGhtUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGFsZ29yaXRobV9pZDogc3RyaW5nO1xuXHRyZWFkb25seSBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk91dHB1dCB7XG5cdHJlYWRvbmx5IGZpbGU/OiBGaWxlUmVmO1xuXHRyZWFkb25seSBraW5kOiBcInZlY3RvclwiIHwgXCJmaWxlXCIgfCBcInZhbHVlXCI7XG5cdHJlYWRvbmx5IGxheWVyPzogVmVjdG9yTGF5ZXJJbmZvO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUmVzdWx0IHtcblx0cmVhZG9ubHkgYWxnb3JpdGhtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG91dHB1dHM6IHJlYWRvbmx5IFJ1bk91dHB1dFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzR2V0UmVxdWVzdCB7XG5cdHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmcgfCBudWxsO1xuXHRyZWFkb25seSBrZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHlsZXNBcHBseVJlcXVlc3Qge1xuXHRyZWFkb25seSBsYXllcl9pZDogc3RyaW5nO1xuXHRyZWFkb25seSBzdHlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvckxheWVySW5mbyB7XG5cdHJlYWRvbmx5IGNyczogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgZmllbGRfbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRyZWFkb25seSBnZW9tZXRyeV90eXBlOiBcInBvaW50XCIgfCBcImxpbmVcIiB8IFwicG9seWdvblwiIHwgXCJub25lXCI7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFsZ29yaXRobUluZm8odmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgQWxnb3JpdGhtSW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJwcm92aWRlclwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImdyb3VwXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ3JvdXBfaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJoZWxwXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZGVwcmVjYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInBhcmFtZXRlcnNcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJvdXRwdXRzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJncm91cFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiZ3JvdXBcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImdyb3VwX2lkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJncm91cF9pZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGVscFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiaGVscFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm91dHB1dHNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChBcnJheS5pc0FycmF5KHZhbHVlW1wib3V0cHV0c1wiXSkgJiYgdmFsdWVbXCJvdXRwdXRzXCJdLmV2ZXJ5KChpdGVtKSA9PiBPdXRwdXRJbmZvKGl0ZW0sIHN0cmljdCkpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wicGFyYW1ldGVyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJwYXJhbWV0ZXJzXCJdKSAmJiB2YWx1ZVtcInBhcmFtZXRlcnNcIl0uZXZlcnkoKGl0ZW0pID0+IFBhcmFtZXRlckluZm8oaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImRlcHJlY2F0ZWRcIiwgXCJncm91cFwiLCBcImdyb3VwX2lkXCIsIFwiaGVscFwiLCBcImlkXCIsIFwibGFiZWxcIiwgXCJuYW1lXCIsIFwib3V0cHV0c1wiLCBcInBhcmFtZXRlcnNcIiwgXCJwcm92aWRlclwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbGdvcml0aG1MaXN0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1MaXN0UmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImN1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiY3Vyc29yXCJdID09PSBcInN0cmluZ1wiICYmIG5ldyBSZWdFeHAoXCJeKD86WzAtOV0rKSRcIikudGVzdCh2YWx1ZVtcImN1cnNvclwiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImxpbWl0XCJdICE9PSB1bmRlZmluZWQgJiYgISgoaXNTYWZlSW50ZWdlcih2YWx1ZVtcImxpbWl0XCJdKSAmJiB2YWx1ZVtcImxpbWl0XCJdID49IDEgJiYgdmFsdWVbXCJsaW1pdFwiXSA8PSAyMDApKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImN1cnNvclwiLCBcImxpbWl0XCIsIFwicHJvdmlkZXJcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWxnb3JpdGhtUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1QYWdlIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpdGVtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRydW5jYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJpdGVtc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJpdGVtc1wiXSkgJiYgdmFsdWVbXCJpdGVtc1wiXS5ldmVyeSgoaXRlbSkgPT4gQWxnb3JpdGhtU3VtbWFyeShpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5leHRfY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuZXh0X2N1cnNvclwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widHJ1bmNhdGVkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ0cnVuY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJpdGVtc1wiLCBcIm5leHRfY3Vyc29yXCIsIFwidHJ1bmNhdGVkXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFsZ29yaXRobVJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgQWxnb3JpdGhtUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYWxnb3JpdGhtX2lkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImFsZ29yaXRobV9pZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiYWxnb3JpdGhtX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJhbGdvcml0aG1faWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWxnb3JpdGhtU3VtbWFyeSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1TdW1tYXJ5IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInByb3ZpZGVyXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImxhYmVsXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ3JvdXBcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJkZXByZWNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJncm91cFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiZ3JvdXBcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImlkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJpZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGFiZWxcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxhYmVsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImRlcHJlY2F0ZWRcIiwgXCJncm91cFwiLCBcImlkXCIsIFwibGFiZWxcIiwgXCJuYW1lXCIsIFwicHJvdmlkZXJcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBFeHBvcnRSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJmaWxlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiY29udGVudFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJjb250ZW50XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjb250ZW50XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiY29udGVudFwiLCBcImZpbGVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVzdWx0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIEV4cG9ydFJlc3VsdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYnl0ZXNfd3JpdHRlblwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYnl0ZXNfd3JpdHRlblwiXSAhPT0gdW5kZWZpbmVkICYmICEoaXNTYWZlSW50ZWdlcih2YWx1ZVtcImJ5dGVzX3dyaXR0ZW5cIl0pKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJieXRlc193cml0dGVuXCIsIFwibmFtZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGZXRjaFJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgRmV0Y2hSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYXV0aF9jb25maWdcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImF1dGhfY29uZmlnXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJib2R5XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJib2R5XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJoZWFkZXJzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImhlYWRlcnNcIl0pICYmIHZhbHVlW1wiaGVhZGVyc1wiXS5ldmVyeSgoaXRlbSkgPT4gSHR0cEhlYWRlcihpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1ldGhvZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkdFVFwiIHx8IHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkhFQURcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJQT1NUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUFVUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUEFUQ0hcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJERUxFVEVcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJPUFRJT05TXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlW1widGltZW91dF9zZWNvbmRzXCJdKSAmJiB2YWx1ZVtcInRpbWVvdXRfc2Vjb25kc1wiXSA+PSAwLjEgJiYgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPD0gMzAwKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widXJsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ1cmxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImF1dGhfY29uZmlnXCIsIFwiYm9keVwiLCBcImhlYWRlcnNcIiwgXCJtZXRob2RcIiwgXCJ0aW1lb3V0X3NlY29uZHNcIiwgXCJ1cmxcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVJlZih2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBGaWxlUmVmIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJraW5kXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiICYmIG5ldyBSZWdFeHAoXCJeKD86W2EtZjAtOV17MTYsNjR9KSRcIikudGVzdCh2YWx1ZVtcImlkXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wia2luZFwiXSA9PT0gXCJmaWxlXCIgfHwgdmFsdWVbXCJraW5kXCJdID09PSBcImRpcmVjdG9yeVwiKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibmFtZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmFtZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wib3BlcmF0aW9uc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJvcGVyYXRpb25zXCJdKSAmJiB2YWx1ZVtcIm9wZXJhdGlvbnNcIl0uZXZlcnkoKGl0ZW0pID0+IChpdGVtID09PSBcInJlYWRcIiB8fCBpdGVtID09PSBcIndyaXRlXCIpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImlkXCIsIFwia2luZFwiLCBcIm5hbWVcIiwgXCJvcGVyYXRpb25zXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEh0dHBIZWFkZXIodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgSHR0cEhlYWRlciB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInZhbHVlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInZhbHVlXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wibmFtZVwiLCBcInZhbHVlXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIElkUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBJZFBhZ2Uge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIml0ZW1zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidHJ1bmNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIml0ZW1zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIml0ZW1zXCJdKSAmJiB2YWx1ZVtcIml0ZW1zXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuZXh0X2N1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRydW5jYXRlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widHJ1bmNhdGVkXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaXRlbXNcIiwgXCJuZXh0X2N1cnNvclwiLCBcInRydW5jYXRlZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXllclBhZ2UodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgTGF5ZXJQYWdlIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpdGVtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRydW5jYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJpdGVtc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJpdGVtc1wiXSkgJiYgdmFsdWVbXCJpdGVtc1wiXS5ldmVyeSgoaXRlbSkgPT4gVmVjdG9yTGF5ZXJJbmZvKGl0ZW0sIHN0cmljdCkpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5leHRfY3Vyc29yXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ0cnVuY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInRydW5jYXRlZFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcIml0ZW1zXCIsIFwibmV4dF9jdXJzb3JcIiwgXCJ0cnVuY2F0ZWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIExheWVyUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibGF5ZXJfaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibGF5ZXJfaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxheWVyX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJsYXllcl9pZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOZXR3b3JrRmV0Y2hEYXRhKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE5ldHdvcmtGZXRjaERhdGEge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInVybFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInN0YXR1c19jb2RlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwicmVhc29uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaGVhZGVyc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRleHRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJiYXNlNjRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYmFzZTY0XCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wiYmFzZTY0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiYmFzZTY0XCJdID09PSBudWxsKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGVhZGVyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJoZWFkZXJzXCJdKSAmJiB2YWx1ZVtcImhlYWRlcnNcIl0uZXZlcnkoKGl0ZW0pID0+IEh0dHBIZWFkZXIoaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJyZWFzb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInJlYXNvblwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wic3RhdHVzX2NvZGVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKGlzU2FmZUludGVnZXIodmFsdWVbXCJzdGF0dXNfY29kZVwiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRleHRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJ0ZXh0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1widGV4dFwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInVybFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widXJsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJiYXNlNjRcIiwgXCJoZWFkZXJzXCIsIFwicmVhc29uXCIsIFwic3RhdHVzX2NvZGVcIiwgXCJ0ZXh0XCIsIFwidXJsXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBOb3RpZmljYXRpb25zSW5mb1JlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm1lc3NhZ2VcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibWVzc2FnZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wibWVzc2FnZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPcGVuVmVjdG9yUmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBPcGVuVmVjdG9yUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZmlsZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiZmlsZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXRJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE91dHB1dEluZm8ge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJraW5kXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibGFiZWxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wia2luZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGFiZWxcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxhYmVsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJraW5kXCIsIFwibGFiZWxcIiwgXCJuYW1lXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhZ2VSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFBhZ2VSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjdXJzb3JcIl0gPT09IFwic3RyaW5nXCIgJiYgbmV3IFJlZ0V4cChcIl4oPzpbMC05XSspJFwiKS50ZXN0KHZhbHVlW1wiY3Vyc29yXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGltaXRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChpc1NhZmVJbnRlZ2VyKHZhbHVlW1wibGltaXRcIl0pICYmIHZhbHVlW1wibGltaXRcIl0gPj0gMSAmJiB2YWx1ZVtcImxpbWl0XCJdIDw9IDIwMCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImN1cnNvclwiLCBcImxpbWl0XCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhcmFtZXRlckluZm8odmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgUGFyYW1ldGVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImtpbmRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImRlc2NyaXB0aW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwib3B0aW9uYWxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJhZHZhbmNlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImhpZGRlblwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImRlc3RpbmF0aW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwicmVxdWlyZWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJkZWZhdWx0X2pzb25cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJvcHRpb25zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibXVsdGlwbGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJudW1iZXJfdHlwZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm1pbmltdW1cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJtYXhpbXVtXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZXh0ZW5zaW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImFkdmFuY2VkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJhZHZhbmNlZFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImRlZmF1bHRfanNvblwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcImRlZmF1bHRfanNvblwiXSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZVtcImRlZmF1bHRfanNvblwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImRlc2NyaXB0aW9uXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJkZXNjcmlwdGlvblwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiZGVzdGluYXRpb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlc3RpbmF0aW9uXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiZXh0ZW5zaW9uXCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wiZXh0ZW5zaW9uXCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiZXh0ZW5zaW9uXCJdID09PSBudWxsKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGlkZGVuXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJoaWRkZW5cIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJraW5kXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJraW5kXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1heGltdW1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJtYXhpbXVtXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcIm1heGltdW1cIl0pIHx8IHZhbHVlW1wibWF4aW11bVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1pbmltdW1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJtaW5pbXVtXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcIm1pbmltdW1cIl0pIHx8IHZhbHVlW1wibWluaW11bVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm11bHRpcGxlXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJtdWx0aXBsZVwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm51bWJlcl90eXBlXCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wibnVtYmVyX3R5cGVcIl0gPT09IFwic3RyaW5nXCIgfHwgdmFsdWVbXCJudW1iZXJfdHlwZVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm9wdGlvbmFsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJvcHRpb25hbFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm9wdGlvbnNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChBcnJheS5pc0FycmF5KHZhbHVlW1wib3B0aW9uc1wiXSkgJiYgdmFsdWVbXCJvcHRpb25zXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJyZXF1aXJlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicmVxdWlyZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJhZHZhbmNlZFwiLCBcImRlZmF1bHRfanNvblwiLCBcImRlc2NyaXB0aW9uXCIsIFwiZGVzdGluYXRpb25cIiwgXCJleHRlbnNpb25cIiwgXCJoaWRkZW5cIiwgXCJraW5kXCIsIFwibGFiZWxcIiwgXCJtYXhpbXVtXCIsIFwibWluaW11bVwiLCBcIm11bHRpcGxlXCIsIFwibmFtZVwiLCBcIm51bWJlcl90eXBlXCIsIFwib3B0aW9uYWxcIiwgXCJvcHRpb25zXCIsIFwicmVxdWlyZWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvdmlkZXJJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFByb3ZpZGVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInZlcnNpb25cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInZlcnNpb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInZlcnNpb25cIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImlkXCIsIFwibGFiZWxcIiwgXCJ2ZXJzaW9uXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGVyUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBQcm92aWRlclBhZ2Uge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIml0ZW1zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidHJ1bmNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIml0ZW1zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIml0ZW1zXCJdKSAmJiB2YWx1ZVtcIml0ZW1zXCJdLmV2ZXJ5KChpdGVtKSA9PiBQcm92aWRlckluZm8oaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuZXh0X2N1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRydW5jYXRlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widHJ1bmNhdGVkXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaXRlbXNcIiwgXCJuZXh0X2N1cnNvclwiLCBcInRydW5jYXRlZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSdW5BbGdvcml0aG1SZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFJ1bkFsZ29yaXRobVJlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImFsZ29yaXRobV9pZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInBhcmFtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJhbGdvcml0aG1faWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImFsZ29yaXRobV9pZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wicGFyYW1zXCJdICE9PSB1bmRlZmluZWQgJiYgIShpc1JlY29yZCh2YWx1ZVtcInBhcmFtc1wiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImFsZ29yaXRobV9pZFwiLCBcInBhcmFtc1wiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgUnVuT3V0cHV0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwia2luZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wia2luZFwiXSA9PT0gXCJ2ZWN0b3JcIiB8fCB2YWx1ZVtcImtpbmRcIl0gPT09IFwiZmlsZVwiIHx8IHZhbHVlW1wia2luZFwiXSA9PT0gXCJ2YWx1ZVwiKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGF5ZXJcIl0gIT09IHVuZGVmaW5lZCAmJiAhKFZlY3RvckxheWVySW5mbyh2YWx1ZVtcImxheWVyXCJdLCBzdHJpY3QpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ2YWx1ZVwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcInZhbHVlXCJdID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZVtcInZhbHVlXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcInZhbHVlXCJdKSB8fCB0eXBlb2YgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImZpbGVcIiwgXCJraW5kXCIsIFwibGF5ZXJcIiwgXCJuYW1lXCIsIFwidmFsdWVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnVuUmVzdWx0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFJ1blJlc3VsdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYWxnb3JpdGhtXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwib3V0cHV0c1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJhbGdvcml0aG1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImFsZ29yaXRobVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wib3V0cHV0c1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJvdXRwdXRzXCJdKSAmJiB2YWx1ZVtcIm91dHB1dHNcIl0uZXZlcnkoKGl0ZW0pID0+IFJ1bk91dHB1dChpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImFsZ29yaXRobVwiLCBcIm91dHB1dHNcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2V0dGluZ3NHZXRSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFNldHRpbmdzR2V0UmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwia2V5XCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlZmF1bHRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJkZWZhdWx0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiZGVmYXVsdFwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImtleVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wia2V5XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJkZWZhdWx0XCIsIFwia2V5XCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN0eWxlc0FwcGx5UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBTdHlsZXNBcHBseVJlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImxheWVyX2lkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwic3R5bGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibGF5ZXJfaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxheWVyX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJzdHlsZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wic3R5bGVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImxheWVyX2lkXCIsIFwic3R5bGVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmVjdG9yTGF5ZXJJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFZlY3RvckxheWVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ2VvbWV0cnlfdHlwZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImZpZWxkX25hbWVzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiY3JzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImNyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcImNyc1wiXSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZVtcImNyc1wiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImZpZWxkX25hbWVzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpZWxkX25hbWVzXCJdKSAmJiB2YWx1ZVtcImZpZWxkX25hbWVzXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdICE9PSB1bmRlZmluZWQgJiYgISgodmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdID09PSBcInBvaW50XCIgfHwgdmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdID09PSBcImxpbmVcIiB8fCB2YWx1ZVtcImdlb21ldHJ5X3R5cGVcIl0gPT09IFwicG9seWdvblwiIHx8IHZhbHVlW1wiZ2VvbWV0cnlfdHlwZVwiXSA9PT0gXCJub25lXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJpZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiaWRcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImNyc1wiLCBcImZpZWxkX25hbWVzXCIsIFwiZ2VvbWV0cnlfdHlwZVwiLCBcImlkXCIsIFwibmFtZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKiBPbmUgZXZlbnQgb2YgYG5ldHdvcmsuZmV0Y2hgLCBuYXJyb3dlZCBieSBpdHMga2luZC4gKi9cbmV4cG9ydCB0eXBlIE5ldHdvcmtGZXRjaEV2ZW50ID1cblx0fCB7IHJlYWRvbmx5IGtpbmQ6IFwiZGF0YVwiOyByZWFkb25seSBwYXlsb2FkOiBOZXR3b3JrRmV0Y2hEYXRhIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBOZXR3b3JrRmV0Y2hFdmVudCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBOZXR3b3JrRmV0Y2hFdmVudCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZS5raW5kID09PSBcImRhdGFcIikgcmV0dXJuIE5ldHdvcmtGZXRjaERhdGEodmFsdWUucGF5bG9hZCwgc3RyaWN0KTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKiogRXZlcnkgb3BlcmF0aW9uIHRoaXMgc3VyZmFjZSBkZWNsYXJlcywgYXMgY2FsbGFibGUgbWV0aG9kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdE9wZXJhdGlvbnMge1xuXHRyZWFkb25seSBhbGdvcml0aG1zOiB7XG5cdFx0cmVhZG9ubHkgZGVzY3JpYmU6IChpbnB1dDogQWxnb3JpdGhtUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPEFsZ29yaXRobUluZm8+O1xuXHRcdHJlYWRvbmx5IGxpc3Q6IChpbnB1dD86IEFsZ29yaXRobUxpc3RSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8QWxnb3JpdGhtUGFnZT47XG5cdFx0cmVhZG9ubHkgcHJvdmlkZXJzOiAoaW5wdXQ/OiBQYWdlUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPFByb3ZpZGVyUGFnZT47XG5cdFx0cmVhZG9ubHkgcnVuOiAoaW5wdXQ6IFJ1bkFsZ29yaXRobVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxSdW5SZXN1bHQ+O1xuXHR9O1xuXHRyZWFkb25seSBmaWxlczoge1xuXHRcdHJlYWRvbmx5IGV4cG9ydDogKGlucHV0OiBFeHBvcnRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8RXhwb3J0UmVzdWx0Pjtcblx0fTtcblx0cmVhZG9ubHkgbGF5ZXJzOiB7XG5cdFx0cmVhZG9ubHkgZ2V0OiAoaW5wdXQ6IExheWVyUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPFZlY3RvckxheWVySW5mbz47XG5cdFx0cmVhZG9ubHkgbGlzdDogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxMYXllclBhZ2U+O1xuXHRcdHJlYWRvbmx5IG9wZW5fdmVjdG9yOiAoaW5wdXQ6IE9wZW5WZWN0b3JSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8VmVjdG9yTGF5ZXJJbmZvPjtcblx0fTtcblx0cmVhZG9ubHkgbmV0d29yazoge1xuXHRcdHJlYWRvbmx5IGZldGNoOiAoaW5wdXQ6IEZldGNoUmVxdWVzdCwgaGFuZGxlcnM6IEhvc3RTdHJlYW1IYW5kbGVyczxOZXR3b3JrRmV0Y2hFdmVudD4sIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxIb3N0U3RyZWFtSGFuZGxlPjtcblx0fTtcblx0cmVhZG9ubHkgbm90aWZpY2F0aW9uczoge1xuXHRcdHJlYWRvbmx5IGluZm86IChpbnB1dDogTm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8bnVsbD47XG5cdH07XG5cdHJlYWRvbmx5IHByb2plY3Q6IHtcblx0XHRyZWFkb25seSBsYXllcl9pZHM6IChpbnB1dD86IFBhZ2VSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8SWRQYWdlPjtcblx0fTtcblx0cmVhZG9ubHkgc2V0dGluZ3M6IHtcblx0XHRyZWFkb25seSBnZXQ6IChpbnB1dDogU2V0dGluZ3NHZXRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cdH07XG5cdHJlYWRvbmx5IHN0eWxlczoge1xuXHRcdHJlYWRvbmx5IGFwcGx5OiAoaW5wdXQ6IFN0eWxlc0FwcGx5UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPG51bGw+O1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9zdChjbGllbnQ6IEhvc3RDbGllbnRMaWtlKTogSG9zdE9wZXJhdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdGFsZ29yaXRobXM6IHtcblx0XHRcdGRlc2NyaWJlOiAoaW5wdXQ6IEFsZ29yaXRobVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxBbGdvcml0aG1JbmZvPihcblx0XHRcdFx0XHRjbGllbnQsIFwiYWxnb3JpdGhtcy5kZXNjcmliZVwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRBbGdvcml0aG1SZXF1ZXN0LFxuXHRcdFx0XHRcdEFsZ29yaXRobUluZm8sXG5cdFx0XHRcdCksXG5cdFx0XHRsaXN0OiAoaW5wdXQ/OiBBbGdvcml0aG1MaXN0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPEFsZ29yaXRobVBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJhbGdvcml0aG1zLmxpc3RcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0QWxnb3JpdGhtTGlzdFJlcXVlc3QsXG5cdFx0XHRcdFx0QWxnb3JpdGhtUGFnZSxcblx0XHRcdFx0KSxcblx0XHRcdHByb3ZpZGVyczogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxQcm92aWRlclBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJhbGdvcml0aG1zLnByb3ZpZGVyc1wiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRQcm92aWRlclBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0XHRydW46IChpbnB1dDogUnVuQWxnb3JpdGhtUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPFJ1blJlc3VsdD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcImFsZ29yaXRobXMucnVuXCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdFJ1bkFsZ29yaXRobVJlcXVlc3QsXG5cdFx0XHRcdFx0UnVuUmVzdWx0LFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdFx0ZmlsZXM6IHtcblx0XHRcdGV4cG9ydDogKGlucHV0OiBFeHBvcnRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8RXhwb3J0UmVzdWx0Pihcblx0XHRcdFx0XHRjbGllbnQsIFwiZmlsZXMuZXhwb3J0XCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdEV4cG9ydFJlcXVlc3QsXG5cdFx0XHRcdFx0RXhwb3J0UmVzdWx0LFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdFx0bGF5ZXJzOiB7XG5cdFx0XHRnZXQ6IChpbnB1dDogTGF5ZXJSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8VmVjdG9yTGF5ZXJJbmZvPihcblx0XHRcdFx0XHRjbGllbnQsIFwibGF5ZXJzLmdldFwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRMYXllclJlcXVlc3QsXG5cdFx0XHRcdFx0VmVjdG9yTGF5ZXJJbmZvLFxuXHRcdFx0XHQpLFxuXHRcdFx0bGlzdDogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxMYXllclBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJsYXllcnMubGlzdFwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRMYXllclBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0XHRvcGVuX3ZlY3RvcjogKGlucHV0OiBPcGVuVmVjdG9yUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPFZlY3RvckxheWVySW5mbz4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcImxheWVycy5vcGVuX3ZlY3RvclwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRPcGVuVmVjdG9yUmVxdWVzdCxcblx0XHRcdFx0XHRWZWN0b3JMYXllckluZm8sXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRuZXR3b3JrOiB7XG5cdFx0XHRmZXRjaDogKGlucHV0OiBGZXRjaFJlcXVlc3QsIGhhbmRsZXJzOiBIb3N0U3RyZWFtSGFuZGxlcnM8TmV0d29ya0ZldGNoRXZlbnQ+LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdG9wZW48TmV0d29ya0ZldGNoRXZlbnQ+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJuZXR3b3JrLmZldGNoXCIsIGlucHV0LCBoYW5kbGVycywgb3B0aW9ucyxcblx0XHRcdFx0XHRGZXRjaFJlcXVlc3QsXG5cdFx0XHRcdFx0TmV0d29ya0ZldGNoRXZlbnQsXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRub3RpZmljYXRpb25zOiB7XG5cdFx0XHRpbmZvOiAoaW5wdXQ6IE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJub3RpZmljYXRpb25zLmluZm9cIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0Tm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+IGNhbmRpZGF0ZSA9PT0gbnVsbCxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdHByb2plY3Q6IHtcblx0XHRcdGxheWVyX2lkczogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxJZFBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJwcm9qZWN0LmxheWVyX2lkc1wiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRJZFBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRzZXR0aW5nczoge1xuXHRcdFx0Z2V0OiAoaW5wdXQ6IFNldHRpbmdzR2V0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPHN0cmluZyB8IG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJzZXR0aW5ncy5nZXRcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0U2V0dGluZ3NHZXRSZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+ICh0eXBlb2YgY2FuZGlkYXRlID09PSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZSA9PT0gbnVsbCksXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRzdHlsZXM6IHtcblx0XHRcdGFwcGx5OiAoaW5wdXQ6IFN0eWxlc0FwcGx5UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJzdHlsZXMuYXBwbHlcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0U3R5bGVzQXBwbHlSZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+IGNhbmRpZGF0ZSA9PT0gbnVsbCxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHR9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsPFQ+KFxuXHRjbGllbnQ6IEhvc3RDbGllbnRMaWtlLFxuXHRvcGVyYXRpb246IHN0cmluZyxcblx0aW5wdXQ6IHVua25vd24sXG5cdG9wdGlvbnM6IEhvc3RJbnZva2VPcHRpb25zIHwgdW5kZWZpbmVkLFxuXHRhY2NlcHRJbnB1dDogKHZhbHVlOiB1bmtub3duLCBzdHJpY3Q/OiBib29sZWFuKSA9PiBib29sZWFuLFxuXHRhY2NlcHRPdXRwdXQ6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbixcbik6IFByb21pc2U8VD4ge1xuXHRpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiAhYWNjZXB0SW5wdXQoaW5wdXQsIHRydWUpKSB7XG5cdFx0dGhyb3cgbmV3IFFnaXNTZGtIb3N0Q29udHJhY3RFcnJvcihvcGVyYXRpb24sIFwidGhlIGFyZ3VtZW50cyBkbyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIHJlcXVlc3RcIik7XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBhd2FpdCBjbGllbnQuaW52b2tlKFxuXHRcdG9wZXJhdGlvbixcblx0XHQoaW5wdXQgPz8ge30pIGFzIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHRvcHRpb25zLFxuXHQpO1xuXHRpZiAoIWFjY2VwdE91dHB1dCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKG9wZXJhdGlvbiwgXCJ0aGUgcmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIHJlc3VsdFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWUgYXMgVDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbjxFIGV4dGVuZHMgeyByZWFkb25seSBraW5kOiBzdHJpbmcgfT4oXG5cdGNsaWVudDogSG9zdENsaWVudExpa2UsXG5cdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRpbnB1dDogdW5rbm93bixcblx0aGFuZGxlcnM6IEhvc3RTdHJlYW1IYW5kbGVyczxFPixcblx0b3B0aW9uczogSG9zdEludm9rZU9wdGlvbnMgfCB1bmRlZmluZWQsXG5cdGFjY2VwdElucHV0OiAodmFsdWU6IHVua25vd24sIHN0cmljdD86IGJvb2xlYW4pID0+IGJvb2xlYW4sXG5cdGFjY2VwdEV2ZW50OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIEUsXG4pOiBQcm9taXNlPEhvc3RTdHJlYW1IYW5kbGU+IHtcblx0aWYgKCFhY2NlcHRJbnB1dChpbnB1dCwgdHJ1ZSkpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKG9wZXJhdGlvbiwgXCJ0aGUgYXJndW1lbnRzIGRvIG5vdCBtYXRjaCB0aGUgZGVjbGFyZWQgcmVxdWVzdFwiKTtcblx0fVxuXHQvLyBUaGUgdHlwZWQgc3RyZWFtIGVuZHMgZXhhY3RseSBvbmNlLCBsaWtlIHRoZSBzdWJzY3JpcHRpb24gdW5kZXIgaXQ6IGFcblx0Ly8gY29udHJhY3QgdmlvbGF0aW9uIGVuZHMgaXQgaGVyZSwgY2xvc2VzIHRoZSBzdWJzY3JpcHRpb24sIGFuZCB0aGVcblx0Ly8gYGRpc3Bvc2VkYCB0aGUgY2xpZW50IHRoZW4gcmVwb3J0cyBpcyBub3QgZGVsaXZlcmVkIGEgc2Vjb25kIHRpbWUuXG5cdGxldCBlbmRlZCA9IGZhbHNlO1xuXHRsZXQgdmlvbGF0ZWQgPSBmYWxzZTtcblx0bGV0IGhhbmRsZTogSG9zdFN0cmVhbUhhbmRsZSB8IG51bGwgPSBudWxsO1xuXHRjb25zdCBlbmQgPSAodGVybWluYWw6IEhvc3RTdHJlYW1UZXJtaW5hbCk6IHZvaWQgPT4ge1xuXHRcdGlmIChlbmRlZCkgcmV0dXJuO1xuXHRcdGVuZGVkID0gdHJ1ZTtcblx0XHRoYW5kbGVycy5vblRlcm1pbmFsPy4odGVybWluYWwpO1xuXHR9O1xuXHRoYW5kbGUgPSBhd2FpdCBjbGllbnQuc3Vic2NyaWJlKFxuXHRcdG9wZXJhdGlvbixcblx0XHRpbnB1dCBhcyBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0e1xuXHRcdFx0b25FdmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChlbmRlZCkgcmV0dXJuO1xuXHRcdFx0XHRpZiAoYWNjZXB0RXZlbnQoZXZlbnQpKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMub25FdmVudD8uKGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZW5kKHtcblx0XHRcdFx0XHRraW5kOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWVzc2FnZTogbmV3IFFnaXNTZGtIb3N0Q29udHJhY3RFcnJvcihcblx0XHRcdFx0XHRcdG9wZXJhdGlvbixcblx0XHRcdFx0XHRcdFwiYW4gZXZlbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIGV2ZW50c1wiLFxuXHRcdFx0XHRcdCkubWVzc2FnZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChoYW5kbGUgPT09IG51bGwpIHtcblx0XHRcdFx0XHR2aW9sYXRlZCA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGFuZGxlLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvblRlcm1pbmFsOiBlbmQsXG5cdFx0fSxcblx0XHRvcHRpb25zLFxuXHQpO1xuXHRpZiAodmlvbGF0ZWQpIHtcblx0XHRoYW5kbGUuY2xvc2UoKTtcblx0fVxuXHRyZXR1cm4gaGFuZGxlO1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNTyxJQUFNLFdBQVU7QUFDaEIsSUFBTSxvQkFBbUI7QUFDekIsSUFBTSx1QkFBc0I7QUFHNUIsSUFBTSxtQkFBa0I7QUFBQSxFQUM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBQUE7QUErQ08sTUFBTSxrQ0FBaUMsY0FBYTtBQUFBLEVBQzFDO0FBQUEsRUFDVCxXQUFXLENBQUMsV0FBbUIsU0FBaUI7QUFBQSxJQUN0RCxNQUFNLGNBQWMsZUFBZSxXQUFXLDRCQUE0QjtBQUFBLElBQzFFLEtBQUssWUFBWTtBQUFBO0FBRW5CO0FBRUEsU0FBUyxRQUFRLENBQUMsT0FBa0Q7QUFBQSxFQUNuRSxPQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLO0FBQUE7QUFHM0UsU0FBUyxPQUFPLENBQ2YsT0FDQSxNQUNVO0FBQUEsRUFDVixPQUFPLE9BQU8sS0FBSyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUFBO0FBRzVELFNBQVMsYUFBYSxDQUFDLE9BQWlDO0FBQUEsRUFDdkQsT0FBTyxPQUFPLFVBQVUsWUFBWSxPQUFPLGNBQWMsS0FBSztBQUFBO0FBdUx4RCxTQUFTLGNBQWEsQ0FBQyxPQUFnQixTQUFTLE9BQStCO0FBQUEsRUFDckYs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QUEsSUFDQyxTQUFTLENBQUMsVUFBVTtBQUFBLE1BQ25CLElBQUk7QUFBQSxRQUFPO0FBQUEsTUFDWCxJQUFJLFlBQVksS0FBSyxHQUFHO0FBQUEsUUFDdkIsU0FBUyxVQUFVLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0Q7QUFBQSxNQUNBLElBQUk7QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLFNBQVMsSUFBSSwwQkFDWixXQUNBLDZDQUNELEVBQUU7QUFBQSxNQUNILENBQUM7QUFBQSxNQUNELElBQUksV0FBVyxNQUFNO0FBQUEsUUFDcEIsV0FBVztBQUFBLE1BQ1osRUFBTztBQUFBLFFBQ04sT0FBTyxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR2YsWUFBWTtBQUFBLEVBQ2IsR0FDQSxPQUNEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFBQSxJQUNiLE9BQU8sTUFBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjNGQzQ2NjkwMTdFNEE4NkU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|