experimental-agent 0.1.2 → 0.1.3

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.
Files changed (43) hide show
  1. package/README.md +9 -0
  2. package/dist/agent-workflow.d.mts +1 -1
  3. package/dist/agent-workflow.d.ts +1 -1
  4. package/dist/agent-workflow.js +352 -104
  5. package/dist/agent-workflow.mjs +1 -1
  6. package/dist/{chunk-W4SSZPDX.mjs → chunk-24UDM5XV.mjs} +4 -4
  7. package/dist/chunk-2ZXHR6T6.mjs +401 -0
  8. package/dist/chunk-4WDKWMVB.mjs +389 -0
  9. package/dist/chunk-IACG26TC.mjs +2212 -0
  10. package/dist/chunk-NGLND33F.mjs +1247 -0
  11. package/dist/{chunk-E7TOPGHY.mjs → chunk-RXPVLORL.mjs} +3 -3
  12. package/dist/{chunk-HJGPUEFC.mjs → chunk-YRYXN7W4.mjs} +7 -1
  13. package/dist/client-Bkuq-Dfa.d.mts +2340 -0
  14. package/dist/client-Bkuq-Dfa.d.ts +2340 -0
  15. package/dist/{client-YUU54ZZH.mjs → client-SNN3XDKO.mjs} +2 -2
  16. package/dist/client.d.mts +1 -1
  17. package/dist/client.d.ts +1 -1
  18. package/dist/client.js +1 -1
  19. package/dist/client.mjs +1 -1
  20. package/dist/{handler-LDFBSCRA.mjs → handler-WFNQWR6V.mjs} +2 -1
  21. package/dist/index.d.mts +2 -2
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +623 -220
  24. package/dist/index.mjs +78 -40
  25. package/dist/lifecycle-workflow.d.mts +1 -1
  26. package/dist/lifecycle-workflow.d.ts +1 -1
  27. package/dist/lifecycle-workflow.js +88 -6
  28. package/dist/lifecycle-workflow.mjs +1 -1
  29. package/dist/local-fs-handlers-ESZBRAWK.mjs +439 -0
  30. package/dist/next/loader.js +3 -3
  31. package/dist/next/loader.mjs +1 -1
  32. package/dist/next.js +10 -4
  33. package/dist/next.mjs +9 -3
  34. package/dist/{sandbox-GPCA35PJ.mjs → sandbox-IFK5MVRM.mjs} +3 -3
  35. package/dist/{storage-LL6IA24R.mjs → storage-FCSHTDLC.mjs} +3 -3
  36. package/package.json +2 -2
  37. package/dist/chunk-2SPAJ777.mjs +0 -365
  38. package/dist/chunk-6J462JGP.mjs +0 -1267
  39. package/dist/chunk-ILPVXRI5.mjs +0 -2026
  40. package/dist/chunk-ORE6LK2L.mjs +0 -344
  41. package/dist/client-CKLwB-ES.d.mts +0 -2115
  42. package/dist/client-CKLwB-ES.d.ts +0 -2115
  43. package/dist/local-fs-handlers-SY2RDXZE.mjs +0 -314
@@ -0,0 +1,439 @@
1
+ import {
2
+ StorageConflictError
3
+ } from "./chunk-YRYXN7W4.mjs";
4
+ import "./chunk-BJTO5JO5.mjs";
5
+
6
+ // src/storage/bindings/local-fs-handlers.ts
7
+ import {
8
+ mkdir,
9
+ readdir,
10
+ readFile,
11
+ rm,
12
+ unlink,
13
+ writeFile
14
+ } from "fs/promises";
15
+ import { dirname, join, resolve } from "path";
16
+ import equal from "fast-deep-equal";
17
+
18
+ // src/utils/paginate.ts
19
+ function paginate(opts) {
20
+ const { items, cursor, limit } = opts;
21
+ const startIndex = cursor ? items.findIndex((m) => m.id === cursor) + 1 : 0;
22
+ const sliced = limit !== void 0 ? items.slice(startIndex, startIndex + limit) : items.slice(startIndex);
23
+ const nextCursor = limit !== void 0 && startIndex + limit < items.length ? sliced.at(-1)?.id ?? null : null;
24
+ return { items: sliced, nextCursor };
25
+ }
26
+
27
+ // src/storage/bindings/local-fs-handlers.ts
28
+ function createFilesystemHandlers(basePath) {
29
+ const resolvedBase = resolve(basePath);
30
+ const sessionDir = join(resolvedBase, "session");
31
+ const messageDir = join(resolvedBase, "message");
32
+ const partDir = join(resolvedBase, "part");
33
+ const sandboxDir = join(resolvedBase, "sandbox");
34
+ const commandDir = join(resolvedBase, "command");
35
+ const setupDir = join(resolvedBase, "setup");
36
+ const lockDir = join(resolvedBase, ".locks");
37
+ const LOCK_STALE_MS = 3e4;
38
+ async function ensureDir(dir) {
39
+ await mkdir(dir, { recursive: true });
40
+ }
41
+ async function readJson(filePath) {
42
+ try {
43
+ const content = await readFile(filePath, "utf-8");
44
+ return JSON.parse(content);
45
+ } catch {
46
+ return null;
47
+ }
48
+ }
49
+ async function writeJsonFile(filePath, data) {
50
+ await ensureDir(dirname(filePath));
51
+ await writeFile(filePath, JSON.stringify(data, null, 2));
52
+ }
53
+ async function withRecordLock(key, fn) {
54
+ const lockName = Buffer.from(key).toString("base64url");
55
+ const lockPath = join(lockDir, `${lockName}.lock`);
56
+ const metadataPath = join(lockPath, "metadata.json");
57
+ await ensureDir(lockDir);
58
+ while (true) {
59
+ try {
60
+ await mkdir(lockPath);
61
+ await writeJsonFile(metadataPath, {
62
+ pid: process.pid,
63
+ createdAt: Date.now()
64
+ });
65
+ break;
66
+ } catch (e) {
67
+ if (!(e instanceof Error) || e.code !== "EEXIST") {
68
+ throw e;
69
+ }
70
+ const metadata = await readJson(metadataPath);
71
+ if (metadata?.createdAt && Date.now() - metadata.createdAt > LOCK_STALE_MS) {
72
+ await rm(lockPath, { recursive: true, force: true });
73
+ continue;
74
+ }
75
+ await new Promise((r) => setTimeout(r, 10));
76
+ }
77
+ }
78
+ try {
79
+ return await fn();
80
+ } finally {
81
+ await rm(lockPath, { recursive: true, force: true });
82
+ }
83
+ }
84
+ function removeUndefined(input) {
85
+ const result = {};
86
+ for (const [key, value] of Object.entries(input)) {
87
+ if (value !== void 0) {
88
+ result[key] = value;
89
+ }
90
+ }
91
+ return result;
92
+ }
93
+ async function readAllFromDir(dir) {
94
+ try {
95
+ const files = await readdir(dir);
96
+ const results = await Promise.all(
97
+ files.filter((f) => f.endsWith(".json")).map((f) => readJson(join(dir, f)))
98
+ );
99
+ return results.filter((r) => r !== null);
100
+ } catch {
101
+ return [];
102
+ }
103
+ }
104
+ return {
105
+ "session.get": async ({ id }) => {
106
+ const sessionPath = join(sessionDir, `${id}.json`);
107
+ return await readJson(sessionPath) ?? null;
108
+ },
109
+ "session.set": async (session) => {
110
+ return await withRecordLock(`session:${session.id}`, async () => {
111
+ const now = Date.now();
112
+ const sessionPath = join(sessionDir, `${session.id}.json`);
113
+ const existing = await readJson(sessionPath);
114
+ const newSession = {
115
+ ...session,
116
+ tags: session.tags ?? existing?.tags ?? {},
117
+ createdAt: existing?.createdAt ?? session.createdAt ?? now,
118
+ updatedAt: now
119
+ };
120
+ await writeJsonFile(sessionPath, newSession);
121
+ return newSession;
122
+ });
123
+ },
124
+ "session.update": async (opts) => {
125
+ return await withRecordLock(`session:${opts.id}`, async () => {
126
+ const sessionPath = join(sessionDir, `${opts.id}.json`);
127
+ const existing = await readJson(sessionPath);
128
+ if (!existing) {
129
+ throw new Error(`Session ${opts.id} not found`);
130
+ }
131
+ const rawPatch = removeUndefined({
132
+ ...opts,
133
+ id: void 0
134
+ });
135
+ if (Object.keys(rawPatch).length === 0) {
136
+ return existing;
137
+ }
138
+ if (Object.hasOwn(rawPatch, "runId")) {
139
+ const nextRunId = rawPatch.runId;
140
+ if (existing.runId !== null && nextRunId === null) {
141
+ throw new StorageConflictError({
142
+ reason: "runId cannot be cleared once set"
143
+ });
144
+ }
145
+ if (existing.runId !== null && nextRunId !== existing.runId) {
146
+ throw new StorageConflictError({
147
+ reason: `runId is already set to ${existing.runId}`
148
+ });
149
+ }
150
+ }
151
+ const patch = rawPatch;
152
+ const updatedAt = patch.updatedAt !== void 0 ? patch.updatedAt : Date.now();
153
+ const updatedSession = {
154
+ ...existing,
155
+ ...patch,
156
+ updatedAt
157
+ };
158
+ await writeJsonFile(sessionPath, updatedSession);
159
+ return updatedSession;
160
+ });
161
+ },
162
+ "session.delete": async ({ id }) => {
163
+ try {
164
+ await unlink(join(sessionDir, `${id}.json`));
165
+ } catch {
166
+ }
167
+ const allMessages = await readAllFromDir(messageDir);
168
+ const sessionMessages = allMessages.filter((m) => m.sessionId === id);
169
+ const allParts = await readAllFromDir(partDir);
170
+ const sessionParts = allParts.filter((p) => p.sessionId === id);
171
+ const allCommands = await readAllFromDir(commandDir);
172
+ const sessionCommands = allCommands.filter((c) => c.sessionId === id);
173
+ const noop = () => void 0;
174
+ await Promise.all([
175
+ ...sessionMessages.map(
176
+ (m) => unlink(join(messageDir, `${m.id}.json`)).catch(noop)
177
+ ),
178
+ ...sessionParts.map(
179
+ (p) => unlink(join(partDir, `${p.id}.json`)).catch(noop)
180
+ ),
181
+ ...sessionCommands.map(
182
+ (c) => unlink(join(commandDir, `${c.id}.json`)).catch(noop)
183
+ )
184
+ ]);
185
+ },
186
+ "session.list": async ({ tags, order, cursor, limit }) => {
187
+ const allSessions = await readAllFromDir(sessionDir);
188
+ let filtered = allSessions;
189
+ if (tags && Object.keys(tags).length > 0) {
190
+ filtered = filtered.filter((s) => {
191
+ const sessionTags = s.tags ?? {};
192
+ return Object.entries(tags).every(
193
+ ([key, value]) => equal(sessionTags[key], value)
194
+ );
195
+ });
196
+ }
197
+ const resolvedOrder = order ?? "updatedAt_desc";
198
+ const sortField = resolvedOrder.startsWith("updatedAt") ? "updatedAt" : "createdAt";
199
+ const sortDir = resolvedOrder.endsWith("_desc") ? -1 : 1;
200
+ filtered.sort((a, b) => sortDir * (a[sortField] - b[sortField]));
201
+ return paginate({ items: filtered, cursor, limit });
202
+ },
203
+ "session.listBySandbox": async ({
204
+ sandboxId,
205
+ tags,
206
+ order,
207
+ cursor,
208
+ limit
209
+ }) => {
210
+ const allSessions = await readAllFromDir(sessionDir);
211
+ let filtered = allSessions.filter((s) => s.sandboxId === sandboxId);
212
+ if (tags && Object.keys(tags).length > 0) {
213
+ filtered = filtered.filter((s) => {
214
+ const sessionTags = s.tags ?? {};
215
+ return Object.entries(tags).every(
216
+ ([key, value]) => equal(sessionTags[key], value)
217
+ );
218
+ });
219
+ }
220
+ const resolvedOrder = order ?? "updatedAt_desc";
221
+ const sortField = resolvedOrder.startsWith("updatedAt") ? "updatedAt" : "createdAt";
222
+ const sortDir = resolvedOrder.endsWith("_desc") ? -1 : 1;
223
+ filtered.sort((a, b) => sortDir * (a[sortField] - b[sortField]));
224
+ return paginate({ items: filtered, cursor, limit });
225
+ },
226
+ "session.tag.set": async ({ sessionId, tags }) => {
227
+ return await withRecordLock(`session:${sessionId}`, async () => {
228
+ const sessionPath = join(sessionDir, `${sessionId}.json`);
229
+ const existing = await readJson(sessionPath);
230
+ if (!existing) {
231
+ throw new Error(`Session ${sessionId} not found`);
232
+ }
233
+ const mergedTags = { ...existing.tags, ...tags };
234
+ const now = Date.now();
235
+ const updatedSession = {
236
+ ...existing,
237
+ tags: mergedTags,
238
+ updatedAt: now
239
+ };
240
+ await writeJsonFile(sessionPath, updatedSession);
241
+ return updatedSession;
242
+ });
243
+ },
244
+ "message.get": async ({ id }) => {
245
+ return await readJson(join(messageDir, `${id}.json`));
246
+ },
247
+ "message.set": async (message) => {
248
+ await writeJsonFile(join(messageDir, `${message.id}.json`), message);
249
+ return message;
250
+ },
251
+ "message.list": async ({ sessionId, cursor, limit }) => {
252
+ const allMessages = await readAllFromDir(messageDir);
253
+ const filtered = allMessages.filter((m) => m.sessionId === sessionId).sort((a, b) => a.createdAt - b.createdAt);
254
+ return paginate({ items: filtered, cursor, limit });
255
+ },
256
+ "part.listByMessage": async ({ messageId, cursor, limit }) => {
257
+ const allParts = await readAllFromDir(partDir);
258
+ const filtered = allParts.filter((p) => p.messageId === messageId).sort((a, b) => a.index - b.index);
259
+ return paginate({ items: filtered, cursor, limit });
260
+ },
261
+ "part.listBySession": async ({ sessionId, cursor, limit }) => {
262
+ const allParts = await readAllFromDir(partDir);
263
+ const filtered = allParts.filter((p) => p.sessionId === sessionId).sort((a, b) => {
264
+ if (a.messageId !== b.messageId) {
265
+ return a.messageId.localeCompare(b.messageId);
266
+ }
267
+ return a.index - b.index;
268
+ });
269
+ return paginate({ items: filtered, cursor, limit });
270
+ },
271
+ "part.set": async (part) => {
272
+ await writeJsonFile(join(partDir, `${part.id}.json`), part);
273
+ return part;
274
+ },
275
+ "part.delete": async ({ id }) => {
276
+ try {
277
+ await unlink(join(partDir, `${id}.json`));
278
+ } catch {
279
+ }
280
+ },
281
+ "sandbox.get": async ({ key }) => {
282
+ const safeName = Buffer.from(key).toString("base64url");
283
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
284
+ const data = await readJson(sandboxPath);
285
+ if (!data) {
286
+ return null;
287
+ }
288
+ return data;
289
+ },
290
+ "sandbox.set": async (record) => {
291
+ await withRecordLock(`sandbox:${record.id}`, async () => {
292
+ const safeName = Buffer.from(record.id).toString("base64url");
293
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
294
+ const existing = await readJson(sandboxPath);
295
+ const newRecord = {
296
+ ...record,
297
+ tags: record.tags ?? existing?.tags ?? null
298
+ };
299
+ await writeJsonFile(sandboxPath, newRecord);
300
+ });
301
+ },
302
+ "sandbox.update": async (opts) => {
303
+ return await withRecordLock(`sandbox:${opts.id}`, async () => {
304
+ const safeName = Buffer.from(opts.id).toString("base64url");
305
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
306
+ const existing = await readJson(sandboxPath);
307
+ if (!existing) {
308
+ throw new Error(`Sandbox ${opts.id} not found`);
309
+ }
310
+ const patch = removeUndefined({
311
+ ...opts,
312
+ id: void 0
313
+ });
314
+ if (Object.keys(patch).length === 0) {
315
+ return existing;
316
+ }
317
+ const updatedSandbox = {
318
+ ...existing,
319
+ ...patch
320
+ };
321
+ await writeJsonFile(sandboxPath, updatedSandbox);
322
+ return updatedSandbox;
323
+ });
324
+ },
325
+ "sandbox.list": async ({ tags, order, cursor, limit }) => {
326
+ const allSandboxes = await readAllFromDir(sandboxDir);
327
+ let filtered = allSandboxes;
328
+ if (tags && Object.keys(tags).length > 0) {
329
+ filtered = filtered.filter((s) => {
330
+ const sandboxTags = s.tags ?? {};
331
+ return Object.entries(tags).every(
332
+ ([key, value]) => equal(sandboxTags[key], value)
333
+ );
334
+ });
335
+ }
336
+ const sortField = order?.startsWith("lastActivityAt") ? "lastActivityAt" : "createdAt";
337
+ const sortDir = order?.endsWith("_desc") ? -1 : 1;
338
+ filtered.sort(
339
+ (a, b) => sortDir * ((a[sortField] ?? 0) - (b[sortField] ?? 0))
340
+ );
341
+ return paginate({ items: filtered, cursor, limit });
342
+ },
343
+ "sandbox.tag.set": async ({ sandboxId, tags }) => {
344
+ return await withRecordLock(`sandbox:${sandboxId}`, async () => {
345
+ const safeName = Buffer.from(sandboxId).toString("base64url");
346
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
347
+ const existing = await readJson(sandboxPath);
348
+ if (!existing) {
349
+ throw new Error(`Sandbox ${sandboxId} not found`);
350
+ }
351
+ const mergedTags = { ...existing.tags, ...tags };
352
+ const updatedSandbox = {
353
+ ...existing,
354
+ tags: mergedTags
355
+ };
356
+ await writeJsonFile(sandboxPath, updatedSandbox);
357
+ return updatedSandbox;
358
+ });
359
+ },
360
+ "sandbox.getBySession": async ({ sessionId }) => {
361
+ const sessionPath = join(sessionDir, `${sessionId}.json`);
362
+ const session = await readJson(sessionPath);
363
+ if (!session?.sandboxId) {
364
+ return null;
365
+ }
366
+ const safeName = Buffer.from(session.sandboxId).toString("base64url");
367
+ return await readJson(
368
+ join(sandboxDir, `${safeName}.json`)
369
+ );
370
+ },
371
+ "command.get": async ({ id }) => {
372
+ return await readJson(join(commandDir, `${id}.json`));
373
+ },
374
+ "command.set": async (command) => {
375
+ await writeJsonFile(join(commandDir, `${command.id}.json`), command);
376
+ return command;
377
+ },
378
+ "setup.get": async ({ key }) => {
379
+ const safeName = Buffer.from(key).toString("base64url");
380
+ return await readJson(join(setupDir, `${safeName}.json`));
381
+ },
382
+ "setup.set": async (snapshot) => {
383
+ await withRecordLock(`setup:${snapshot.key}`, async () => {
384
+ const safeName = Buffer.from(snapshot.key).toString("base64url");
385
+ await writeJsonFile(join(setupDir, `${safeName}.json`), snapshot);
386
+ });
387
+ },
388
+ "setup.acquireLock": async ({ key, lockId, lockTimeoutMs }) => {
389
+ return await withRecordLock(`setup:${key}`, async () => {
390
+ const safeName = Buffer.from(key).toString("base64url");
391
+ const filePath = join(setupDir, `${safeName}.json`);
392
+ const existing = await readJson(filePath);
393
+ if (existing?.acquiringLockId && existing.acquiringLockAt && Date.now() - existing.acquiringLockAt < lockTimeoutMs) {
394
+ return null;
395
+ }
396
+ const now = Date.now();
397
+ const snapshot = {
398
+ key,
399
+ snapshotId: existing?.snapshotId ?? null,
400
+ createdAt: existing?.createdAt ?? now,
401
+ lastUsedAt: existing?.lastUsedAt ?? null,
402
+ acquiringLockId: lockId,
403
+ acquiringLockAt: now
404
+ };
405
+ await writeJsonFile(filePath, snapshot);
406
+ return snapshot;
407
+ });
408
+ },
409
+ "sandbox.acquireLock": async ({ record, lockTimeoutMs }) => {
410
+ return await withRecordLock(`sandbox:${record.id}`, async () => {
411
+ const safeName = Buffer.from(record.id).toString("base64url");
412
+ const filePath = join(sandboxDir, `${safeName}.json`);
413
+ const existing = await readJson(filePath);
414
+ if (existing?.acquiringLockId && existing.acquiringLockAt && Date.now() - existing.acquiringLockAt < lockTimeoutMs) {
415
+ return null;
416
+ }
417
+ const newRecord = {
418
+ ...record,
419
+ tags: record.tags ?? existing?.tags ?? null
420
+ };
421
+ await writeJsonFile(filePath, newRecord);
422
+ return newRecord;
423
+ });
424
+ },
425
+ "command.list": async ({ sessionId, includeFinished, cursor, limit }) => {
426
+ const allCommands = await readAllFromDir(commandDir);
427
+ let filtered = allCommands.filter((c) => c.sessionId === sessionId);
428
+ if (!includeFinished) {
429
+ filtered = filtered.filter((c) => c.status === "running");
430
+ }
431
+ filtered.sort((a, b) => a.startedAt - b.startedAt);
432
+ return paginate({ items: filtered, cursor, limit });
433
+ }
434
+ };
435
+ }
436
+ export {
437
+ createFilesystemHandlers
438
+ };
439
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwtZnMtaGFuZGxlcnMudHMiLCAiLi4vc3JjL3V0aWxzL3BhZ2luYXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge1xuICBta2RpcixcbiAgcmVhZGRpcixcbiAgcmVhZEZpbGUsXG4gIHJtLFxuICB1bmxpbmssXG4gIHdyaXRlRmlsZSxcbn0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgU3RvcmFnZUNvbmZsaWN0RXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBwYWdpbmF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wYWdpbmF0ZVwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBIYW5kbGVycyxcbiAgTWVzc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveFJlY29yZCxcbiAgU2Vzc2lvbixcbiAgU2V0dXBTbmFwc2hvdCxcbn0gZnJvbSBcIi4uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMoYmFzZVBhdGg6IHN0cmluZyk6IEhhbmRsZXJzIHtcbiAgY29uc3QgcmVzb2x2ZWRCYXNlID0gcmVzb2x2ZShiYXNlUGF0aCk7XG4gIGNvbnN0IHNlc3Npb25EaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJzZXNzaW9uXCIpO1xuICBjb25zdCBtZXNzYWdlRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwibWVzc2FnZVwiKTtcbiAgY29uc3QgcGFydERpciA9IGpvaW4ocmVzb2x2ZWRCYXNlLCBcInBhcnRcIik7XG4gIGNvbnN0IHNhbmRib3hEaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJzYW5kYm94XCIpO1xuICBjb25zdCBjb21tYW5kRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwiY29tbWFuZFwiKTtcbiAgY29uc3Qgc2V0dXBEaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJzZXR1cFwiKTtcbiAgY29uc3QgbG9ja0RpciA9IGpvaW4ocmVzb2x2ZWRCYXNlLCBcIi5sb2Nrc1wiKTtcbiAgY29uc3QgTE9DS19TVEFMRV9NUyA9IDMwXzAwMDtcblxuICBhc3luYyBmdW5jdGlvbiBlbnN1cmVEaXIoZGlyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZEpzb248VD4oZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCkgYXMgVDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlSnNvbkZpbGUoZmlsZVBhdGg6IHN0cmluZywgZGF0YTogdW5rbm93bikge1xuICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKGZpbGVQYXRoKSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3aXRoUmVjb3JkTG9jazxUPihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBsb2NrTmFtZSA9IEJ1ZmZlci5mcm9tKGtleSkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGxvY2tEaXIsIGAke2xvY2tOYW1lfS5sb2NrYCk7XG4gICAgY29uc3QgbWV0YWRhdGFQYXRoID0gam9pbihsb2NrUGF0aCwgXCJtZXRhZGF0YS5qc29uXCIpO1xuICAgIGF3YWl0IGVuc3VyZURpcihsb2NrRGlyKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBta2Rpcihsb2NrUGF0aCk7XG4gICAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUobWV0YWRhdGFQYXRoLCB7XG4gICAgICAgICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoZSBpbnN0YW5jZW9mIEVycm9yKSB8fFxuICAgICAgICAgIChlIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSAhPT0gXCJFRVhJU1RcIlxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgcmVhZEpzb248eyBjcmVhdGVkQXQ/OiBudW1iZXIgfT4obWV0YWRhdGFQYXRoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1ldGFkYXRhPy5jcmVhdGVkQXQgJiZcbiAgICAgICAgICBEYXRlLm5vdygpIC0gbWV0YWRhdGEuY3JlYXRlZEF0ID4gTE9DS19TVEFMRV9NU1xuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCBybShsb2NrUGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBybShsb2NrUGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIGlucHV0OiBUXG4gICk6IFBhcnRpYWw8VD4ge1xuICAgIGNvbnN0IHJlc3VsdDogUGFydGlhbDxUPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0W2tleSBhcyBrZXlvZiBUXSA9IHZhbHVlIGFzIFRba2V5b2YgVF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlc1xuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuZW5kc1dpdGgoXCIuanNvblwiKSlcbiAgICAgICAgICAubWFwKChmKSA9PiByZWFkSnNvbjxUPihqb2luKGRpciwgZikpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHRzLmZpbHRlcigocik6IHIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIHI+ID0+IHIgIT09IG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uUGF0aCA9IGpvaW4oc2Vzc2lvbkRpciwgYCR7aWR9Lmpzb25gKTtcbiAgICAgIHJldHVybiAoYXdhaXQgcmVhZEpzb248U2Vzc2lvbj4oc2Vzc2lvblBhdGgpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jIChzZXNzaW9uKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgd2l0aFJlY29yZExvY2soYHNlc3Npb246JHtzZXNzaW9uLmlkfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvblBhdGggPSBqb2luKHNlc3Npb25EaXIsIGAke3Nlc3Npb24uaWR9Lmpzb25gKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTZXNzaW9uPihzZXNzaW9uUGF0aCk7XG4gICAgICAgIGNvbnN0IG5ld1Nlc3Npb246IFNlc3Npb24gPSB7XG4gICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICB0YWdzOiBzZXNzaW9uLnRhZ3MgPz8gZXhpc3Rpbmc/LnRhZ3MgPz8ge30sXG4gICAgICAgICAgY3JlYXRlZEF0OiBleGlzdGluZz8uY3JlYXRlZEF0ID8/IHNlc3Npb24uY3JlYXRlZEF0ID8/IG5vdyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzZXNzaW9uUGF0aCwgbmV3U2Vzc2lvbik7XG4gICAgICAgIHJldHVybiBuZXdTZXNzaW9uO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogYXN5bmMgKG9wdHMpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCB3aXRoUmVjb3JkTG9jayhgc2Vzc2lvbjoke29wdHMuaWR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uUGF0aCA9IGpvaW4oc2Vzc2lvbkRpciwgYCR7b3B0cy5pZH0uanNvbmApO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRKc29uPFNlc3Npb24+KHNlc3Npb25QYXRoKTtcbiAgICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2Vzc2lvbiAke29wdHMuaWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmF3UGF0Y2ggPSByZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyYXdQYXRjaCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24ocmF3UGF0Y2gsIFwicnVuSWRcIikpIHtcbiAgICAgICAgICBjb25zdCBuZXh0UnVuSWQgPSByYXdQYXRjaC5ydW5JZCBhcyBTZXNzaW9uW1wicnVuSWRcIl0gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nLnJ1bklkICE9PSBudWxsICYmIG5leHRSdW5JZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VDb25mbGljdEVycm9yKHtcbiAgICAgICAgICAgICAgcmVhc29uOiBcInJ1bklkIGNhbm5vdCBiZSBjbGVhcmVkIG9uY2Ugc2V0XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4aXN0aW5nLnJ1bklkICE9PSBudWxsICYmIG5leHRSdW5JZCAhPT0gZXhpc3RpbmcucnVuSWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTdG9yYWdlQ29uZmxpY3RFcnJvcih7XG4gICAgICAgICAgICAgIHJlYXNvbjogYHJ1bklkIGlzIGFscmVhZHkgc2V0IHRvICR7ZXhpc3RpbmcucnVuSWR9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGNoID0gcmF3UGF0Y2ggYXMgUGFydGlhbDxPbWl0PFNlc3Npb24sIFwiaWRcIj4+O1xuICAgICAgICBjb25zdCB1cGRhdGVkQXQgPVxuICAgICAgICAgIHBhdGNoLnVwZGF0ZWRBdCAhPT0gdW5kZWZpbmVkID8gcGF0Y2gudXBkYXRlZEF0IDogRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFNlc3Npb246IFNlc3Npb24gPSB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgICAgdXBkYXRlZEF0LFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKHNlc3Npb25QYXRoLCB1cGRhdGVkU2Vzc2lvbik7XG4gICAgICAgIHJldHVybiB1cGRhdGVkU2Vzc2lvbjtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uZGVsZXRlXCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHVubGluayhqb2luKHNlc3Npb25EaXIsIGAke2lkfS5qc29uYCkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBpZiBmaWxlIGRvZXNuJ3QgZXhpc3RcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICBjb25zdCBzZXNzaW9uTWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBpZCk7XG4gICAgICBjb25zdCBhbGxQYXJ0cyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgY29uc3Qgc2Vzc2lvblBhcnRzID0gYWxsUGFydHMuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gaWQpO1xuICAgICAgY29uc3QgYWxsQ29tbWFuZHMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxDb21tYW5kPihjb21tYW5kRGlyKTtcbiAgICAgIGNvbnN0IHNlc3Npb25Db21tYW5kcyA9IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gYy5zZXNzaW9uSWQgPT09IGlkKTtcbiAgICAgIGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIC4uLnNlc3Npb25NZXNzYWdlcy5tYXAoKG0pID0+XG4gICAgICAgICAgdW5saW5rKGpvaW4obWVzc2FnZURpciwgYCR7bS5pZH0uanNvbmApKS5jYXRjaChub29wKVxuICAgICAgICApLFxuICAgICAgICAuLi5zZXNzaW9uUGFydHMubWFwKChwKSA9PlxuICAgICAgICAgIHVubGluayhqb2luKHBhcnREaXIsIGAke3AuaWR9Lmpzb25gKSkuY2F0Y2gobm9vcClcbiAgICAgICAgKSxcbiAgICAgICAgLi4uc2Vzc2lvbkNvbW1hbmRzLm1hcCgoYykgPT5cbiAgICAgICAgICB1bmxpbmsoam9pbihjb21tYW5kRGlyLCBgJHtjLmlkfS5qc29uYCkpLmNhdGNoKG5vb3ApXG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLmxpc3RcIjogYXN5bmMgKHsgdGFncywgb3JkZXIsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsU2Vzc2lvbnMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxTZXNzaW9uPihzZXNzaW9uRGlyKTtcbiAgICAgIGxldCBmaWx0ZXJlZCA9IGFsbFNlc3Npb25zO1xuICAgICAgaWYgKHRhZ3MgJiYgT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25UYWdzID0gcy50YWdzID8/IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgZXF1YWwoc2Vzc2lvblRhZ3Nba2V5XSwgdmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZE9yZGVyID0gb3JkZXIgPz8gXCJ1cGRhdGVkQXRfZGVzY1wiO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVzb2x2ZWRPcmRlci5zdGFydHNXaXRoKFwidXBkYXRlZEF0XCIpXG4gICAgICAgID8gXCJ1cGRhdGVkQXRcIlxuICAgICAgICA6IFwiY3JlYXRlZEF0XCI7XG4gICAgICBjb25zdCBzb3J0RGlyID0gcmVzb2x2ZWRPcmRlci5lbmRzV2l0aChcIl9kZXNjXCIpID8gLTEgOiAxO1xuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gc29ydERpciAqIChhW3NvcnRGaWVsZF0gLSBiW3NvcnRGaWVsZF0pKTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLmxpc3RCeVNhbmRib3hcIjogYXN5bmMgKHtcbiAgICAgIHNhbmRib3hJZCxcbiAgICAgIHRhZ3MsXG4gICAgICBvcmRlcixcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0LFxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFNlc3Npb25zID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8U2Vzc2lvbj4oc2Vzc2lvbkRpcik7XG4gICAgICBsZXQgZmlsdGVyZWQgPSBhbGxTZXNzaW9ucy5maWx0ZXIoKHMpID0+IHMuc2FuZGJveElkID09PSBzYW5kYm94SWQpO1xuICAgICAgaWYgKHRhZ3MgJiYgT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25UYWdzID0gcy50YWdzID8/IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgZXF1YWwoc2Vzc2lvblRhZ3Nba2V5XSwgdmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZE9yZGVyID0gb3JkZXIgPz8gXCJ1cGRhdGVkQXRfZGVzY1wiO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVzb2x2ZWRPcmRlci5zdGFydHNXaXRoKFwidXBkYXRlZEF0XCIpXG4gICAgICAgID8gXCJ1cGRhdGVkQXRcIlxuICAgICAgICA6IFwiY3JlYXRlZEF0XCI7XG4gICAgICBjb25zdCBzb3J0RGlyID0gcmVzb2x2ZWRPcmRlci5lbmRzV2l0aChcIl9kZXNjXCIpID8gLTEgOiAxO1xuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gc29ydERpciAqIChhW3NvcnRGaWVsZF0gLSBiW3NvcnRGaWVsZF0pKTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnRhZy5zZXRcIjogYXN5bmMgKHsgc2Vzc2lvbklkLCB0YWdzIH0pID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCB3aXRoUmVjb3JkTG9jayhgc2Vzc2lvbjoke3Nlc3Npb25JZH1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25QYXRoID0gam9pbihzZXNzaW9uRGlyLCBgJHtzZXNzaW9uSWR9Lmpzb25gKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTZXNzaW9uPihzZXNzaW9uUGF0aCk7XG4gICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlc3Npb24gJHtzZXNzaW9uSWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlZFRhZ3MgPSB7IC4uLmV4aXN0aW5nLnRhZ3MsIC4uLnRhZ3MgfTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFNlc3Npb246IFNlc3Npb24gPSB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgdGFnczogbWVyZ2VkVGFncyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzZXNzaW9uUGF0aCwgdXBkYXRlZFNlc3Npb24pO1xuICAgICAgICByZXR1cm4gdXBkYXRlZFNlc3Npb247XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVhZEpzb248TWVzc2FnZT4oam9pbihtZXNzYWdlRGlyLCBgJHtpZH0uanNvbmApKTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnNldFwiOiBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKG1lc3NhZ2VEaXIsIGAke21lc3NhZ2UuaWR9Lmpzb25gKSwgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmxpc3RcIjogYXN5bmMgKHsgc2Vzc2lvbklkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGFsbE1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdCAtIGIuY3JlYXRlZEF0KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeU1lc3NhZ2VcIjogYXN5bmMgKHsgbWVzc2FnZUlkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFBhcnRzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGFsbFBhcnRzXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAubWVzc2FnZUlkID09PSBtZXNzYWdlSWQpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcblxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCwgY3Vyc29yLCBsaW1pdCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxQYXJ0cyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBhbGxQYXJ0c1xuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGlmIChhLm1lc3NhZ2VJZCAhPT0gYi5tZXNzYWdlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhLm1lc3NhZ2VJZC5sb2NhbGVDb21wYXJlKGIubWVzc2FnZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LnNldFwiOiBhc3luYyAocGFydCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKHBhcnREaXIsIGAke3BhcnQuaWR9Lmpzb25gKSwgcGFydCk7XG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmRlbGV0ZVwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB1bmxpbmsoam9pbihwYXJ0RGlyLCBgJHtpZH0uanNvbmApKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogYXN5bmMgKHsga2V5IH0pID0+IHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gQnVmZmVyLmZyb20oa2V5KS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQYXRoID0gam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRKc29uPFNhbmRib3hSZWNvcmQ+KHNhbmRib3hQYXRoKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guc2V0XCI6IGFzeW5jIChyZWNvcmQpID0+IHtcbiAgICAgIGF3YWl0IHdpdGhSZWNvcmRMb2NrKGBzYW5kYm94OiR7cmVjb3JkLmlkfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShyZWNvcmQuaWQpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgICBjb25zdCBzYW5kYm94UGF0aCA9IGpvaW4oc2FuZGJveERpciwgYCR7c2FmZU5hbWV9Lmpzb25gKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTYW5kYm94UmVjb3JkPihzYW5kYm94UGF0aCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY29yZDogU2FuZGJveFJlY29yZCA9IHtcbiAgICAgICAgICAuLi5yZWNvcmQsXG4gICAgICAgICAgdGFnczogcmVjb3JkLnRhZ3MgPz8gZXhpc3Rpbmc/LnRhZ3MgPz8gbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzYW5kYm94UGF0aCwgbmV3UmVjb3JkKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gudXBkYXRlXCI6IGFzeW5jIChvcHRzKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgd2l0aFJlY29yZExvY2soYHNhbmRib3g6JHtvcHRzLmlkfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShvcHRzLmlkKS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgICAgY29uc3Qgc2FuZGJveFBhdGggPSBqb2luKHNhbmRib3hEaXIsIGAke3NhZmVOYW1lfS5qc29uYCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2FuZGJveFJlY29yZD4oc2FuZGJveFBhdGgpO1xuICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYW5kYm94ICR7b3B0cy5pZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF0Y2ggPSByZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkgYXMgUGFydGlhbDxPbWl0PFNhbmRib3hSZWNvcmQsIFwiaWRcIj4+O1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkU2FuZGJveDogU2FuZGJveFJlY29yZCA9IHtcbiAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzYW5kYm94UGF0aCwgdXBkYXRlZFNhbmRib3gpO1xuICAgICAgICByZXR1cm4gdXBkYXRlZFNhbmRib3g7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94Lmxpc3RcIjogYXN5bmMgKHsgdGFncywgb3JkZXIsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsU2FuZGJveGVzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8U2FuZGJveFJlY29yZD4oc2FuZGJveERpcik7XG4gICAgICBsZXQgZmlsdGVyZWQgPSBhbGxTYW5kYm94ZXM7XG4gICAgICBpZiAodGFncyAmJiBPYmplY3Qua2V5cyh0YWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChzKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2FuZGJveFRhZ3MgPSBzLnRhZ3MgPz8ge307XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRhZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBlcXVhbChzYW5kYm94VGFnc1trZXldLCB2YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNvcnRGaWVsZCA9IG9yZGVyPy5zdGFydHNXaXRoKFwibGFzdEFjdGl2aXR5QXRcIilcbiAgICAgICAgPyBcImxhc3RBY3Rpdml0eUF0XCJcbiAgICAgICAgOiBcImNyZWF0ZWRBdFwiO1xuICAgICAgY29uc3Qgc29ydERpciA9IG9yZGVyPy5lbmRzV2l0aChcIl9kZXNjXCIpID8gLTEgOiAxO1xuICAgICAgZmlsdGVyZWQuc29ydChcbiAgICAgICAgKGEsIGIpID0+IHNvcnREaXIgKiAoKGFbc29ydEZpZWxkXSA/PyAwKSAtIChiW3NvcnRGaWVsZF0gPz8gMCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHBhZ2luYXRlKHsgaXRlbXM6IGZpbHRlcmVkLCBjdXJzb3IsIGxpbWl0IH0pO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gudGFnLnNldFwiOiBhc3luYyAoeyBzYW5kYm94SWQsIHRhZ3MgfSkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHdpdGhSZWNvcmRMb2NrKGBzYW5kYm94OiR7c2FuZGJveElkfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShzYW5kYm94SWQpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgICBjb25zdCBzYW5kYm94UGF0aCA9IGpvaW4oc2FuZGJveERpciwgYCR7c2FmZU5hbWV9Lmpzb25gKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTYW5kYm94UmVjb3JkPihzYW5kYm94UGF0aCk7XG4gICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhbmRib3ggJHtzYW5kYm94SWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlZFRhZ3MgPSB7IC4uLmV4aXN0aW5nLnRhZ3MsIC4uLnRhZ3MgfTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFNhbmRib3g6IFNhbmRib3hSZWNvcmQgPSB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgdGFnczogbWVyZ2VkVGFncyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzYW5kYm94UGF0aCwgdXBkYXRlZFNhbmRib3gpO1xuICAgICAgICByZXR1cm4gdXBkYXRlZFNhbmRib3g7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvblBhdGggPSBqb2luKHNlc3Npb25EaXIsIGAke3Nlc3Npb25JZH0uanNvbmApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJlYWRKc29uPFNlc3Npb24+KHNlc3Npb25QYXRoKTtcbiAgICAgIGlmICghc2Vzc2lvbj8uc2FuZGJveElkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzYWZlTmFtZSA9IEJ1ZmZlci5mcm9tKHNlc3Npb24uc2FuZGJveElkKS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgIHJldHVybiBhd2FpdCByZWFkSnNvbjxTYW5kYm94UmVjb3JkPihcbiAgICAgICAgam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBcImNvbW1hbmQuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZWFkSnNvbjxDb21tYW5kPihqb2luKGNvbW1hbmREaXIsIGAke2lkfS5qc29uYCkpO1xuICAgIH0sXG5cbiAgICBcImNvbW1hbmQuc2V0XCI6IGFzeW5jIChjb21tYW5kKSA9PiB7XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKGpvaW4oY29tbWFuZERpciwgYCR7Y29tbWFuZC5pZH0uanNvbmApLCBjb21tYW5kKTtcbiAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH0sXG5cbiAgICBcInNldHVwLmdldFwiOiBhc3luYyAoeyBrZXkgfSkgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShrZXkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPFNldHVwU25hcHNob3Q+KGpvaW4oc2V0dXBEaXIsIGAke3NhZmVOYW1lfS5qc29uYCkpO1xuICAgIH0sXG5cbiAgICBcInNldHVwLnNldFwiOiBhc3luYyAoc25hcHNob3QpID0+IHtcbiAgICAgIGF3YWl0IHdpdGhSZWNvcmRMb2NrKGBzZXR1cDoke3NuYXBzaG90LmtleX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVOYW1lID0gQnVmZmVyLmZyb20oc25hcHNob3Qua2V5KS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKHNldHVwRGlyLCBgJHtzYWZlTmFtZX0uanNvbmApLCBzbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5hY3F1aXJlTG9ja1wiOiBhc3luYyAoeyBrZXksIGxvY2tJZCwgbG9ja1RpbWVvdXRNcyB9KSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgd2l0aFJlY29yZExvY2soYHNldHVwOiR7a2V5fWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShrZXkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oc2V0dXBEaXIsIGAke3NhZmVOYW1lfS5qc29uYCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2V0dXBTbmFwc2hvdD4oZmlsZVBhdGgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhpc3Rpbmc/LmFjcXVpcmluZ0xvY2tJZCAmJlxuICAgICAgICAgIGV4aXN0aW5nLmFjcXVpcmluZ0xvY2tBdCAmJlxuICAgICAgICAgIERhdGUubm93KCkgLSBleGlzdGluZy5hY3F1aXJpbmdMb2NrQXQgPCBsb2NrVGltZW91dE1zXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90OiBTZXR1cFNuYXBzaG90ID0ge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBzbmFwc2hvdElkOiBleGlzdGluZz8uc25hcHNob3RJZCA/PyBudWxsLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZXhpc3Rpbmc/LmNyZWF0ZWRBdCA/PyBub3csXG4gICAgICAgICAgbGFzdFVzZWRBdDogZXhpc3Rpbmc/Lmxhc3RVc2VkQXQgPz8gbnVsbCxcbiAgICAgICAgICBhY3F1aXJpbmdMb2NrSWQ6IGxvY2tJZCxcbiAgICAgICAgICBhY3F1aXJpbmdMb2NrQXQ6IG5vdyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShmaWxlUGF0aCwgc25hcHNob3QpO1xuICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmFjcXVpcmVMb2NrXCI6IGFzeW5jICh7IHJlY29yZCwgbG9ja1RpbWVvdXRNcyB9KSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgd2l0aFJlY29yZExvY2soYHNhbmRib3g6JHtyZWNvcmQuaWR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IEJ1ZmZlci5mcm9tKHJlY29yZC5pZCkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRKc29uPFNhbmRib3hSZWNvcmQ+KGZpbGVQYXRoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nPy5hY3F1aXJpbmdMb2NrSWQgJiZcbiAgICAgICAgICBleGlzdGluZy5hY3F1aXJpbmdMb2NrQXQgJiZcbiAgICAgICAgICBEYXRlLm5vdygpIC0gZXhpc3RpbmcuYWNxdWlyaW5nTG9ja0F0IDwgbG9ja1RpbWVvdXRNc1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWNvcmQ6IFNhbmRib3hSZWNvcmQgPSB7XG4gICAgICAgICAgLi4ucmVjb3JkLFxuICAgICAgICAgIHRhZ3M6IHJlY29yZC50YWdzID8/IGV4aXN0aW5nPy50YWdzID8/IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoZmlsZVBhdGgsIG5ld1JlY29yZCk7XG4gICAgICAgIHJldHVybiBuZXdSZWNvcmQ7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJjb21tYW5kLmxpc3RcIjogYXN5bmMgKHsgc2Vzc2lvbklkLCBpbmNsdWRlRmluaXNoZWQsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsQ29tbWFuZHMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxDb21tYW5kPihjb21tYW5kRGlyKTtcbiAgICAgIGxldCBmaWx0ZXJlZCA9IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gYy5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgICBpZiAoIWluY2x1ZGVGaW5pc2hlZCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigoYykgPT4gYy5zdGF0dXMgPT09IFwicnVubmluZ1wiKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcmVkLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRlZEF0IC0gYi5zdGFydGVkQXQpO1xuICAgICAgcmV0dXJuIHBhZ2luYXRlKHsgaXRlbXM6IGZpbHRlcmVkLCBjdXJzb3IsIGxpbWl0IH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBMaXN0UmVzdWx0IH0gZnJvbSBcIi4uL3N0b3JhZ2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2luYXRlPFQgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4ob3B0czoge1xuICBpdGVtczogVFtdO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufSk6IExpc3RSZXN1bHQ8VD4ge1xuICBjb25zdCB7IGl0ZW1zLCBjdXJzb3IsIGxpbWl0IH0gPSBvcHRzO1xuICBjb25zdCBzdGFydEluZGV4ID0gY3Vyc29yID8gaXRlbXMuZmluZEluZGV4KChtKSA9PiBtLmlkID09PSBjdXJzb3IpICsgMSA6IDA7XG4gIGNvbnN0IHNsaWNlZCA9XG4gICAgbGltaXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBpdGVtcy5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgbGltaXQpXG4gICAgICA6IGl0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgpO1xuICBjb25zdCBuZXh0Q3Vyc29yID1cbiAgICBsaW1pdCAhPT0gdW5kZWZpbmVkICYmIHN0YXJ0SW5kZXggKyBsaW1pdCA8IGl0ZW1zLmxlbmd0aFxuICAgICAgPyAoc2xpY2VkLmF0KC0xKT8uaWQgPz8gbnVsbClcbiAgICAgIDogbnVsbDtcbiAgcmV0dXJuIHsgaXRlbXM6IHNsaWNlZCwgbmV4dEN1cnNvciB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7O0FBQUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxTQUFTLE1BQU0sZUFBZTtBQUN2QyxPQUFPLFdBQVc7OztBQ1BYLFNBQVMsU0FBbUMsTUFJakM7QUFDaEIsUUFBTSxFQUFFLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFDakMsUUFBTSxhQUFhLFNBQVMsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sTUFBTSxJQUFJLElBQUk7QUFDMUUsUUFBTSxTQUNKLFVBQVUsU0FDTixNQUFNLE1BQU0sWUFBWSxhQUFhLEtBQUssSUFDMUMsTUFBTSxNQUFNLFVBQVU7QUFDNUIsUUFBTSxhQUNKLFVBQVUsVUFBYSxhQUFhLFFBQVEsTUFBTSxTQUM3QyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sT0FDdEI7QUFDTixTQUFPLEVBQUUsT0FBTyxRQUFRLFdBQVc7QUFDckM7OztBRElPLFNBQVMseUJBQXlCLFVBQTRCO0FBQ25FLFFBQU0sZUFBZSxRQUFRLFFBQVE7QUFDckMsUUFBTSxhQUFhLEtBQUssY0FBYyxTQUFTO0FBQy9DLFFBQU0sYUFBYSxLQUFLLGNBQWMsU0FBUztBQUMvQyxRQUFNLFVBQVUsS0FBSyxjQUFjLE1BQU07QUFDekMsUUFBTSxhQUFhLEtBQUssY0FBYyxTQUFTO0FBQy9DLFFBQU0sYUFBYSxLQUFLLGNBQWMsU0FBUztBQUMvQyxRQUFNLFdBQVcsS0FBSyxjQUFjLE9BQU87QUFDM0MsUUFBTSxVQUFVLEtBQUssY0FBYyxRQUFRO0FBQzNDLFFBQU0sZ0JBQWdCO0FBRXRCLGlCQUFlLFVBQVUsS0FBYTtBQUNwQyxVQUFNLE1BQU0sS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsRUFDdEM7QUFFQSxpQkFBZSxTQUFZLFVBQXFDO0FBQzlELFFBQUk7QUFDRixZQUFNLFVBQVUsTUFBTSxTQUFTLFVBQVUsT0FBTztBQUNoRCxhQUFPLEtBQUssTUFBTSxPQUFPO0FBQUEsSUFDM0IsUUFBUTtBQUNOLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGNBQWMsVUFBa0IsTUFBZTtBQUM1RCxVQUFNLFVBQVUsUUFBUSxRQUFRLENBQUM7QUFDakMsVUFBTSxVQUFVLFVBQVUsS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFBQSxFQUN6RDtBQUVBLGlCQUFlLGVBQ2IsS0FDQSxJQUNZO0FBQ1osVUFBTSxXQUFXLE9BQU8sS0FBSyxHQUFHLEVBQUUsU0FBUyxXQUFXO0FBQ3RELFVBQU0sV0FBVyxLQUFLLFNBQVMsR0FBRyxRQUFRLE9BQU87QUFDakQsVUFBTSxlQUFlLEtBQUssVUFBVSxlQUFlO0FBQ25ELFVBQU0sVUFBVSxPQUFPO0FBRXZCLFdBQU8sTUFBTTtBQUNYLFVBQUk7QUFDRixjQUFNLE1BQU0sUUFBUTtBQUNwQixjQUFNLGNBQWMsY0FBYztBQUFBLFVBQ2hDLEtBQUssUUFBUTtBQUFBLFVBQ2IsV0FBVyxLQUFLLElBQUk7QUFBQSxRQUN0QixDQUFDO0FBQ0Q7QUFBQSxNQUNGLFNBQVMsR0FBRztBQUNWLFlBQ0UsRUFBRSxhQUFhLFVBQ2QsRUFBNEIsU0FBUyxVQUN0QztBQUNBLGdCQUFNO0FBQUEsUUFDUjtBQUNBLGNBQU0sV0FBVyxNQUFNLFNBQWlDLFlBQVk7QUFDcEUsWUFDRSxVQUFVLGFBQ1YsS0FBSyxJQUFJLElBQUksU0FBUyxZQUFZLGVBQ2xDO0FBQ0EsZ0JBQU0sR0FBRyxVQUFVLEVBQUUsV0FBVyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25EO0FBQUEsUUFDRjtBQUNBLGNBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNGLGFBQU8sTUFBTSxHQUFHO0FBQUEsSUFDbEIsVUFBRTtBQUNBLFlBQU0sR0FBRyxVQUFVLEVBQUUsV0FBVyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBRUEsV0FBUyxnQkFDUCxPQUNZO0FBQ1osVUFBTSxTQUFxQixDQUFDO0FBQzVCLGVBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQ2hELFVBQUksVUFBVSxRQUFXO0FBQ3ZCLGVBQU8sR0FBYyxJQUFJO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxpQkFBZSxlQUFrQixLQUEyQjtBQUMxRCxRQUFJO0FBQ0YsWUFBTSxRQUFRLE1BQU0sUUFBUSxHQUFHO0FBQy9CLFlBQU0sVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUM1QixNQUNHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxPQUFPLENBQUMsRUFDakMsSUFBSSxDQUFDLE1BQU0sU0FBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUN6QztBQUNBLGFBQU8sUUFBUSxPQUFPLENBQUMsTUFBa0MsTUFBTSxJQUFJO0FBQUEsSUFDckUsUUFBUTtBQUNOLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0wsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLFlBQU0sY0FBYyxLQUFLLFlBQVksR0FBRyxFQUFFLE9BQU87QUFDakQsYUFBUSxNQUFNLFNBQWtCLFdBQVcsS0FBTTtBQUFBLElBQ25EO0FBQUEsSUFFQSxlQUFlLE9BQU8sWUFBWTtBQUNoQyxhQUFPLE1BQU0sZUFBZSxXQUFXLFFBQVEsRUFBRSxJQUFJLFlBQVk7QUFDL0QsY0FBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixjQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsUUFBUSxFQUFFLE9BQU87QUFDekQsY0FBTSxXQUFXLE1BQU0sU0FBa0IsV0FBVztBQUNwRCxjQUFNLGFBQXNCO0FBQUEsVUFDMUIsR0FBRztBQUFBLFVBQ0gsTUFBTSxRQUFRLFFBQVEsVUFBVSxRQUFRLENBQUM7QUFBQSxVQUN6QyxXQUFXLFVBQVUsYUFBYSxRQUFRLGFBQWE7QUFBQSxVQUN2RCxXQUFXO0FBQUEsUUFDYjtBQUNBLGNBQU0sY0FBYyxhQUFhLFVBQVU7QUFDM0MsZUFBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUVBLGtCQUFrQixPQUFPLFNBQVM7QUFDaEMsYUFBTyxNQUFNLGVBQWUsV0FBVyxLQUFLLEVBQUUsSUFBSSxZQUFZO0FBQzVELGNBQU0sY0FBYyxLQUFLLFlBQVksR0FBRyxLQUFLLEVBQUUsT0FBTztBQUN0RCxjQUFNLFdBQVcsTUFBTSxTQUFrQixXQUFXO0FBQ3BELFlBQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQU0sSUFBSSxNQUFNLFdBQVcsS0FBSyxFQUFFLFlBQVk7QUFBQSxRQUNoRDtBQUVBLGNBQU0sV0FBVyxnQkFBZ0I7QUFBQSxVQUMvQixHQUFHO0FBQUEsVUFDSCxJQUFJO0FBQUEsUUFDTixDQUFDO0FBQ0QsWUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLFdBQVcsR0FBRztBQUN0QyxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJLE9BQU8sT0FBTyxVQUFVLE9BQU8sR0FBRztBQUNwQyxnQkFBTSxZQUFZLFNBQVM7QUFDM0IsY0FBSSxTQUFTLFVBQVUsUUFBUSxjQUFjLE1BQU07QUFDakQsa0JBQU0sSUFBSSxxQkFBcUI7QUFBQSxjQUM3QixRQUFRO0FBQUEsWUFDVixDQUFDO0FBQUEsVUFDSDtBQUNBLGNBQUksU0FBUyxVQUFVLFFBQVEsY0FBYyxTQUFTLE9BQU87QUFDM0Qsa0JBQU0sSUFBSSxxQkFBcUI7QUFBQSxjQUM3QixRQUFRLDJCQUEyQixTQUFTLEtBQUs7QUFBQSxZQUNuRCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFFBQVE7QUFDZCxjQUFNLFlBQ0osTUFBTSxjQUFjLFNBQVksTUFBTSxZQUFZLEtBQUssSUFBSTtBQUM3RCxjQUFNLGlCQUEwQjtBQUFBLFVBQzlCLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUNBLGNBQU0sY0FBYyxhQUFhLGNBQWM7QUFDL0MsZUFBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUVBLGtCQUFrQixPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQ2xDLFVBQUk7QUFDRixjQUFNLE9BQU8sS0FBSyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUM7QUFBQSxNQUM3QyxRQUFRO0FBQUEsTUFFUjtBQUNBLFlBQU0sY0FBYyxNQUFNLGVBQXdCLFVBQVU7QUFDNUQsWUFBTSxrQkFBa0IsWUFBWSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtBQUNwRSxZQUFNLFdBQVcsTUFBTSxlQUFxQixPQUFPO0FBQ25ELFlBQU0sZUFBZSxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFO0FBQzlELFlBQU0sY0FBYyxNQUFNLGVBQXdCLFVBQVU7QUFDNUQsWUFBTSxrQkFBa0IsWUFBWSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtBQUNwRSxZQUFNLE9BQU8sTUFBTTtBQUNuQixZQUFNLFFBQVEsSUFBSTtBQUFBLFFBQ2hCLEdBQUcsZ0JBQWdCO0FBQUEsVUFBSSxDQUFDLE1BQ3RCLE9BQU8sS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sSUFBSTtBQUFBLFFBQ3JEO0FBQUEsUUFDQSxHQUFHLGFBQWE7QUFBQSxVQUFJLENBQUMsTUFDbkIsT0FBTyxLQUFLLFNBQVMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxJQUFJO0FBQUEsUUFDbEQ7QUFBQSxRQUNBLEdBQUcsZ0JBQWdCO0FBQUEsVUFBSSxDQUFDLE1BQ3RCLE9BQU8sS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sSUFBSTtBQUFBLFFBQ3JEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLElBRUEsZ0JBQWdCLE9BQU8sRUFBRSxNQUFNLE9BQU8sUUFBUSxNQUFNLE1BQU07QUFDeEQsWUFBTSxjQUFjLE1BQU0sZUFBd0IsVUFBVTtBQUM1RCxVQUFJLFdBQVc7QUFDZixVQUFJLFFBQVEsT0FBTyxLQUFLLElBQUksRUFBRSxTQUFTLEdBQUc7QUFDeEMsbUJBQVcsU0FBUyxPQUFPLENBQUMsTUFBTTtBQUNoQyxnQkFBTSxjQUFjLEVBQUUsUUFBUSxDQUFDO0FBQy9CLGlCQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUU7QUFBQSxZQUFNLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFDNUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLO0FBQUEsVUFDL0I7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQ0EsWUFBTSxnQkFBZ0IsU0FBUztBQUMvQixZQUFNLFlBQVksY0FBYyxXQUFXLFdBQVcsSUFDbEQsY0FDQTtBQUNKLFlBQU0sVUFBVSxjQUFjLFNBQVMsT0FBTyxJQUFJLEtBQUs7QUFDdkQsZUFBUyxLQUFLLENBQUMsR0FBRyxNQUFNLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDL0QsYUFBTyxTQUFTLEVBQUUsT0FBTyxVQUFVLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLHlCQUF5QixPQUFPO0FBQUEsTUFDOUI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixNQUFNO0FBQ0osWUFBTSxjQUFjLE1BQU0sZUFBd0IsVUFBVTtBQUM1RCxVQUFJLFdBQVcsWUFBWSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsU0FBUztBQUNsRSxVQUFJLFFBQVEsT0FBTyxLQUFLLElBQUksRUFBRSxTQUFTLEdBQUc7QUFDeEMsbUJBQVcsU0FBUyxPQUFPLENBQUMsTUFBTTtBQUNoQyxnQkFBTSxjQUFjLEVBQUUsUUFBUSxDQUFDO0FBQy9CLGlCQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUU7QUFBQSxZQUFNLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFDNUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLO0FBQUEsVUFDL0I7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQ0EsWUFBTSxnQkFBZ0IsU0FBUztBQUMvQixZQUFNLFlBQVksY0FBYyxXQUFXLFdBQVcsSUFDbEQsY0FDQTtBQUNKLFlBQU0sVUFBVSxjQUFjLFNBQVMsT0FBTyxJQUFJLEtBQUs7QUFDdkQsZUFBUyxLQUFLLENBQUMsR0FBRyxNQUFNLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDL0QsYUFBTyxTQUFTLEVBQUUsT0FBTyxVQUFVLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLG1CQUFtQixPQUFPLEVBQUUsV0FBVyxLQUFLLE1BQU07QUFDaEQsYUFBTyxNQUFNLGVBQWUsV0FBVyxTQUFTLElBQUksWUFBWTtBQUM5RCxjQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsU0FBUyxPQUFPO0FBQ3hELGNBQU0sV0FBVyxNQUFNLFNBQWtCLFdBQVc7QUFDcEQsWUFBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxJQUFJLE1BQU0sV0FBVyxTQUFTLFlBQVk7QUFBQSxRQUNsRDtBQUNBLGNBQU0sYUFBYSxFQUFFLEdBQUcsU0FBUyxNQUFNLEdBQUcsS0FBSztBQUMvQyxjQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLGNBQU0saUJBQTBCO0FBQUEsVUFDOUIsR0FBRztBQUFBLFVBQ0gsTUFBTTtBQUFBLFVBQ04sV0FBVztBQUFBLFFBQ2I7QUFDQSxjQUFNLGNBQWMsYUFBYSxjQUFjO0FBQy9DLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxlQUFlLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDL0IsYUFBTyxNQUFNLFNBQWtCLEtBQUssWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDO0FBQUEsSUFDL0Q7QUFBQSxJQUVBLGVBQWUsT0FBTyxZQUFZO0FBQ2hDLFlBQU0sY0FBYyxLQUFLLFlBQVksR0FBRyxRQUFRLEVBQUUsT0FBTyxHQUFHLE9BQU87QUFDbkUsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLGdCQUFnQixPQUFPLEVBQUUsV0FBVyxRQUFRLE1BQU0sTUFBTTtBQUN0RCxZQUFNLGNBQWMsTUFBTSxlQUF3QixVQUFVO0FBQzVELFlBQU0sV0FBVyxZQUNkLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxTQUFTLEVBQ3ZDLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUztBQUMzQyxhQUFPLFNBQVMsRUFBRSxPQUFPLFVBQVUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNwRDtBQUFBLElBRUEsc0JBQXNCLE9BQU8sRUFBRSxXQUFXLFFBQVEsTUFBTSxNQUFNO0FBQzVELFlBQU0sV0FBVyxNQUFNLGVBQXFCLE9BQU87QUFDbkQsWUFBTSxXQUFXLFNBQ2QsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLFNBQVMsRUFDdkMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ25DLGFBQU8sU0FBUyxFQUFFLE9BQU8sVUFBVSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ3BEO0FBQUEsSUFFQSxzQkFBc0IsT0FBTyxFQUFFLFdBQVcsUUFBUSxNQUFNLE1BQU07QUFDNUQsWUFBTSxXQUFXLE1BQU0sZUFBcUIsT0FBTztBQUNuRCxZQUFNLFdBQVcsU0FDZCxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsU0FBUyxFQUN2QyxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ2QsWUFBSSxFQUFFLGNBQWMsRUFBRSxXQUFXO0FBQy9CLGlCQUFPLEVBQUUsVUFBVSxjQUFjLEVBQUUsU0FBUztBQUFBLFFBQzlDO0FBQ0EsZUFBTyxFQUFFLFFBQVEsRUFBRTtBQUFBLE1BQ3JCLENBQUM7QUFDSCxhQUFPLFNBQVMsRUFBRSxPQUFPLFVBQVUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNwRDtBQUFBLElBRUEsWUFBWSxPQUFPLFNBQVM7QUFDMUIsWUFBTSxjQUFjLEtBQUssU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsSUFBSTtBQUMxRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLFVBQUk7QUFDRixjQUFNLE9BQU8sS0FBSyxTQUFTLEdBQUcsRUFBRSxPQUFPLENBQUM7QUFBQSxNQUMxQyxRQUFRO0FBQUEsTUFFUjtBQUFBLElBQ0Y7QUFBQSxJQUVBLGVBQWUsT0FBTyxFQUFFLElBQUksTUFBTTtBQUNoQyxZQUFNLFdBQVcsT0FBTyxLQUFLLEdBQUcsRUFBRSxTQUFTLFdBQVc7QUFDdEQsWUFBTSxjQUFjLEtBQUssWUFBWSxHQUFHLFFBQVEsT0FBTztBQUN2RCxZQUFNLE9BQU8sTUFBTSxTQUF3QixXQUFXO0FBQ3RELFVBQUksQ0FBQyxNQUFNO0FBQ1QsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZUFBZSxPQUFPLFdBQVc7QUFDL0IsWUFBTSxlQUFlLFdBQVcsT0FBTyxFQUFFLElBQUksWUFBWTtBQUN2RCxjQUFNLFdBQVcsT0FBTyxLQUFLLE9BQU8sRUFBRSxFQUFFLFNBQVMsV0FBVztBQUM1RCxjQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsUUFBUSxPQUFPO0FBQ3ZELGNBQU0sV0FBVyxNQUFNLFNBQXdCLFdBQVc7QUFDMUQsY0FBTSxZQUEyQjtBQUFBLFVBQy9CLEdBQUc7QUFBQSxVQUNILE1BQU0sT0FBTyxRQUFRLFVBQVUsUUFBUTtBQUFBLFFBQ3pDO0FBQ0EsY0FBTSxjQUFjLGFBQWEsU0FBUztBQUFBLE1BQzVDLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxrQkFBa0IsT0FBTyxTQUFTO0FBQ2hDLGFBQU8sTUFBTSxlQUFlLFdBQVcsS0FBSyxFQUFFLElBQUksWUFBWTtBQUM1RCxjQUFNLFdBQVcsT0FBTyxLQUFLLEtBQUssRUFBRSxFQUFFLFNBQVMsV0FBVztBQUMxRCxjQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsUUFBUSxPQUFPO0FBQ3ZELGNBQU0sV0FBVyxNQUFNLFNBQXdCLFdBQVc7QUFDMUQsWUFBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxJQUFJLE1BQU0sV0FBVyxLQUFLLEVBQUUsWUFBWTtBQUFBLFFBQ2hEO0FBQ0EsY0FBTSxRQUFRLGdCQUFnQjtBQUFBLFVBQzVCLEdBQUc7QUFBQSxVQUNILElBQUk7QUFBQSxRQUNOLENBQUM7QUFDRCxZQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUUsV0FBVyxHQUFHO0FBQ25DLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGNBQU0saUJBQWdDO0FBQUEsVUFDcEMsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ0w7QUFDQSxjQUFNLGNBQWMsYUFBYSxjQUFjO0FBQy9DLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxnQkFBZ0IsT0FBTyxFQUFFLE1BQU0sT0FBTyxRQUFRLE1BQU0sTUFBTTtBQUN4RCxZQUFNLGVBQWUsTUFBTSxlQUE4QixVQUFVO0FBQ25FLFVBQUksV0FBVztBQUNmLFVBQUksUUFBUSxPQUFPLEtBQUssSUFBSSxFQUFFLFNBQVMsR0FBRztBQUN4QyxtQkFBVyxTQUFTLE9BQU8sQ0FBQyxNQUFNO0FBQ2hDLGdCQUFNLGNBQWMsRUFBRSxRQUFRLENBQUM7QUFDL0IsaUJBQU8sT0FBTyxRQUFRLElBQUksRUFBRTtBQUFBLFlBQU0sQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUM1QyxNQUFNLFlBQVksR0FBRyxHQUFHLEtBQUs7QUFBQSxVQUMvQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFDQSxZQUFNLFlBQVksT0FBTyxXQUFXLGdCQUFnQixJQUNoRCxtQkFDQTtBQUNKLFlBQU0sVUFBVSxPQUFPLFNBQVMsT0FBTyxJQUFJLEtBQUs7QUFDaEQsZUFBUztBQUFBLFFBQ1AsQ0FBQyxHQUFHLE1BQU0sWUFBWSxFQUFFLFNBQVMsS0FBSyxNQUFNLEVBQUUsU0FBUyxLQUFLO0FBQUEsTUFDOUQ7QUFDQSxhQUFPLFNBQVMsRUFBRSxPQUFPLFVBQVUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNwRDtBQUFBLElBRUEsbUJBQW1CLE9BQU8sRUFBRSxXQUFXLEtBQUssTUFBTTtBQUNoRCxhQUFPLE1BQU0sZUFBZSxXQUFXLFNBQVMsSUFBSSxZQUFZO0FBQzlELGNBQU0sV0FBVyxPQUFPLEtBQUssU0FBUyxFQUFFLFNBQVMsV0FBVztBQUM1RCxjQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsUUFBUSxPQUFPO0FBQ3ZELGNBQU0sV0FBVyxNQUFNLFNBQXdCLFdBQVc7QUFDMUQsWUFBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxJQUFJLE1BQU0sV0FBVyxTQUFTLFlBQVk7QUFBQSxRQUNsRDtBQUNBLGNBQU0sYUFBYSxFQUFFLEdBQUcsU0FBUyxNQUFNLEdBQUcsS0FBSztBQUMvQyxjQUFNLGlCQUFnQztBQUFBLFVBQ3BDLEdBQUc7QUFBQSxVQUNILE1BQU07QUFBQSxRQUNSO0FBQ0EsY0FBTSxjQUFjLGFBQWEsY0FBYztBQUMvQyxlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUFBLElBRUEsd0JBQXdCLE9BQU8sRUFBRSxVQUFVLE1BQU07QUFDL0MsWUFBTSxjQUFjLEtBQUssWUFBWSxHQUFHLFNBQVMsT0FBTztBQUN4RCxZQUFNLFVBQVUsTUFBTSxTQUFrQixXQUFXO0FBQ25ELFVBQUksQ0FBQyxTQUFTLFdBQVc7QUFDdkIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLFdBQVcsT0FBTyxLQUFLLFFBQVEsU0FBUyxFQUFFLFNBQVMsV0FBVztBQUNwRSxhQUFPLE1BQU07QUFBQSxRQUNYLEtBQUssWUFBWSxHQUFHLFFBQVEsT0FBTztBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLGFBQU8sTUFBTSxTQUFrQixLQUFLLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQztBQUFBLElBQy9EO0FBQUEsSUFFQSxlQUFlLE9BQU8sWUFBWTtBQUNoQyxZQUFNLGNBQWMsS0FBSyxZQUFZLEdBQUcsUUFBUSxFQUFFLE9BQU8sR0FBRyxPQUFPO0FBQ25FLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxhQUFhLE9BQU8sRUFBRSxJQUFJLE1BQU07QUFDOUIsWUFBTSxXQUFXLE9BQU8sS0FBSyxHQUFHLEVBQUUsU0FBUyxXQUFXO0FBQ3RELGFBQU8sTUFBTSxTQUF3QixLQUFLLFVBQVUsR0FBRyxRQUFRLE9BQU8sQ0FBQztBQUFBLElBQ3pFO0FBQUEsSUFFQSxhQUFhLE9BQU8sYUFBYTtBQUMvQixZQUFNLGVBQWUsU0FBUyxTQUFTLEdBQUcsSUFBSSxZQUFZO0FBQ3hELGNBQU0sV0FBVyxPQUFPLEtBQUssU0FBUyxHQUFHLEVBQUUsU0FBUyxXQUFXO0FBQy9ELGNBQU0sY0FBYyxLQUFLLFVBQVUsR0FBRyxRQUFRLE9BQU8sR0FBRyxRQUFRO0FBQUEsTUFDbEUsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUVBLHFCQUFxQixPQUFPLEVBQUUsS0FBSyxRQUFRLGNBQWMsTUFBTTtBQUM3RCxhQUFPLE1BQU0sZUFBZSxTQUFTLEdBQUcsSUFBSSxZQUFZO0FBQ3RELGNBQU0sV0FBVyxPQUFPLEtBQUssR0FBRyxFQUFFLFNBQVMsV0FBVztBQUN0RCxjQUFNLFdBQVcsS0FBSyxVQUFVLEdBQUcsUUFBUSxPQUFPO0FBQ2xELGNBQU0sV0FBVyxNQUFNLFNBQXdCLFFBQVE7QUFDdkQsWUFDRSxVQUFVLG1CQUNWLFNBQVMsbUJBQ1QsS0FBSyxJQUFJLElBQUksU0FBUyxrQkFBa0IsZUFDeEM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxjQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLGNBQU0sV0FBMEI7QUFBQSxVQUM5QjtBQUFBLFVBQ0EsWUFBWSxVQUFVLGNBQWM7QUFBQSxVQUNwQyxXQUFXLFVBQVUsYUFBYTtBQUFBLFVBQ2xDLFlBQVksVUFBVSxjQUFjO0FBQUEsVUFDcEMsaUJBQWlCO0FBQUEsVUFDakIsaUJBQWlCO0FBQUEsUUFDbkI7QUFDQSxjQUFNLGNBQWMsVUFBVSxRQUFRO0FBQ3RDLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSx1QkFBdUIsT0FBTyxFQUFFLFFBQVEsY0FBYyxNQUFNO0FBQzFELGFBQU8sTUFBTSxlQUFlLFdBQVcsT0FBTyxFQUFFLElBQUksWUFBWTtBQUM5RCxjQUFNLFdBQVcsT0FBTyxLQUFLLE9BQU8sRUFBRSxFQUFFLFNBQVMsV0FBVztBQUM1RCxjQUFNLFdBQVcsS0FBSyxZQUFZLEdBQUcsUUFBUSxPQUFPO0FBQ3BELGNBQU0sV0FBVyxNQUFNLFNBQXdCLFFBQVE7QUFDdkQsWUFDRSxVQUFVLG1CQUNWLFNBQVMsbUJBQ1QsS0FBSyxJQUFJLElBQUksU0FBUyxrQkFBa0IsZUFDeEM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxjQUFNLFlBQTJCO0FBQUEsVUFDL0IsR0FBRztBQUFBLFVBQ0gsTUFBTSxPQUFPLFFBQVEsVUFBVSxRQUFRO0FBQUEsUUFDekM7QUFDQSxjQUFNLGNBQWMsVUFBVSxTQUFTO0FBQ3ZDLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxnQkFBZ0IsT0FBTyxFQUFFLFdBQVcsaUJBQWlCLFFBQVEsTUFBTSxNQUFNO0FBQ3ZFLFlBQU0sY0FBYyxNQUFNLGVBQXdCLFVBQVU7QUFDNUQsVUFBSSxXQUFXLFlBQVksT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLFNBQVM7QUFDbEUsVUFBSSxDQUFDLGlCQUFpQjtBQUNwQixtQkFBVyxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxTQUFTO0FBQUEsTUFDMUQ7QUFDQSxlQUFTLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUztBQUNqRCxhQUFPLFNBQVMsRUFBRSxPQUFPLFVBQVUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -39,7 +39,7 @@ var import_core = require("@swc/core");
39
39
  // package.json
40
40
  var package_default = {
41
41
  name: "experimental-agent",
42
- version: "0.1.2",
42
+ version: "0.1.3",
43
43
  main: "./dist/index.js",
44
44
  module: "./dist/index.mjs",
45
45
  types: "./dist/index.d.ts",
@@ -104,7 +104,7 @@ var package_default = {
104
104
  },
105
105
  peerDependencies: {
106
106
  ai: "^6.0.0",
107
- workflow: "https://workflow-docs-6sokmamy6.vercel.sh/workflow.tgz"
107
+ workflow: "*"
108
108
  },
109
109
  publishConfig: {
110
110
  access: "public"
@@ -203,4 +203,4 @@ function findAgentExports(ast) {
203
203
  }
204
204
  return exports2;
205
205
  }
206
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuMlwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIl4xLjUuMFwiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjExLjI0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZS1mZXN0XCI6IFwiXjUuNC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhaVwiOiBcIl42LjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCJodHRwczovL3dvcmtmbG93LWRvY3MtNnNva21hbXk2LnZlcmNlbC5zaC93b3JrZmxvdy50Z3pcIlxuICB9LFxuICBcInB1Ymxpc2hDb25maWdcIjoge1xuICAgIFwiYWNjZXNzXCI6IFwicHVibGljXCJcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQXNCO0FBQ3RCLGtCQUF1Qzs7O0FDRHZDO0FBQUEsRUFDRSxNQUFRO0FBQUEsRUFDUixTQUFXO0FBQUEsRUFDWCxNQUFRO0FBQUEsRUFDUixRQUFVO0FBQUEsRUFDVixPQUFTO0FBQUEsRUFDVCxhQUFlO0FBQUEsRUFDZixTQUFXO0FBQUEsRUFDWCxPQUFTO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULEtBQUs7QUFBQSxNQUNILE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsTUFDZixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxPQUFTO0FBQUEsSUFDVCxLQUFPO0FBQUEsSUFDUCxPQUFTO0FBQUEsSUFDVCxTQUFXO0FBQUEsSUFDWCxXQUFhO0FBQUEsSUFDYixNQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLGNBQWdCO0FBQUEsSUFDZCxxQkFBcUI7QUFBQSxJQUNyQixhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixjQUFjO0FBQUEsSUFDZCxR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
206
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuM1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIl4xLjUuMFwiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjExLjI0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZS1mZXN0XCI6IFwiXjUuNC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhaVwiOiBcIl42LjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCIqXCJcbiAgfSxcbiAgXCJwdWJsaXNoQ29uZmlnXCI6IHtcbiAgICBcImFjY2Vzc1wiOiBcInB1YmxpY1wiXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFzQjtBQUN0QixrQkFBdUM7OztBQ0R2QztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFlBQVk7QUFBQSxNQUNWLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsT0FBUztBQUFBLElBQ1QsU0FBVztBQUFBLElBQ1gsV0FBYTtBQUFBLElBQ2IsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxjQUFnQjtBQUFBLElBQ2QscUJBQXFCO0FBQUEsSUFDckIsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsUUFBVTtBQUFBLElBQ1YsbUJBQW1CO0FBQUEsSUFDbkIsTUFBUTtBQUFBLElBQ1IsTUFBUTtB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
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunk-E7TOPGHY.mjs";
3
+ } from "../chunk-RXPVLORL.mjs";
4
4
  import "../chunk-BJTO5JO5.mjs";
5
5
 
6
6
  // src/next/loader.ts