experimental-agent 0.1.2 → 0.1.4
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 +9 -0
- package/dist/agent-workflow.d.mts +1 -1
- package/dist/agent-workflow.d.ts +1 -1
- package/dist/agent-workflow.js +352 -104
- package/dist/agent-workflow.mjs +1 -1
- package/dist/{chunk-W4SSZPDX.mjs → chunk-24UDM5XV.mjs} +4 -4
- package/dist/chunk-2ZXHR6T6.mjs +401 -0
- package/dist/chunk-4WDKWMVB.mjs +389 -0
- package/dist/{chunk-E7TOPGHY.mjs → chunk-GYOBANFH.mjs} +3 -3
- package/dist/chunk-IACG26TC.mjs +2212 -0
- package/dist/chunk-NGLND33F.mjs +1247 -0
- package/dist/{chunk-HJGPUEFC.mjs → chunk-YRYXN7W4.mjs} +7 -1
- package/dist/client-Bkuq-Dfa.d.mts +2340 -0
- package/dist/client-Bkuq-Dfa.d.ts +2340 -0
- package/dist/{client-YUU54ZZH.mjs → client-SNN3XDKO.mjs} +2 -2
- package/dist/client.d.mts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/client.mjs +1 -1
- package/dist/{handler-LDFBSCRA.mjs → handler-WFNQWR6V.mjs} +2 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +624 -223
- package/dist/index.mjs +79 -43
- package/dist/lifecycle-workflow.d.mts +1 -1
- package/dist/lifecycle-workflow.d.ts +1 -1
- package/dist/lifecycle-workflow.js +88 -6
- package/dist/lifecycle-workflow.mjs +1 -1
- package/dist/local-fs-handlers-ESZBRAWK.mjs +439 -0
- package/dist/next/loader.js +3 -3
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +10 -4
- package/dist/next.mjs +9 -3
- package/dist/{sandbox-GPCA35PJ.mjs → sandbox-IFK5MVRM.mjs} +3 -3
- package/dist/{storage-LL6IA24R.mjs → storage-FCSHTDLC.mjs} +3 -3
- package/package.json +2 -2
- package/dist/chunk-2SPAJ777.mjs +0 -365
- package/dist/chunk-6J462JGP.mjs +0 -1267
- package/dist/chunk-ILPVXRI5.mjs +0 -2026
- package/dist/chunk-ORE6LK2L.mjs +0 -344
- package/dist/client-CKLwB-ES.d.mts +0 -2115
- package/dist/client-CKLwB-ES.d.ts +0 -2115
- package/dist/local-fs-handlers-SY2RDXZE.mjs +0 -314
package/dist/chunk-2SPAJ777.mjs
DELETED
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
// src/storage/rpc.ts
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
var VercelLifecycleConfigSchema = z.object({
|
|
4
|
-
pollIntervalMs: z.number().optional(),
|
|
5
|
-
stopAfterInactiveMs: z.number().optional(),
|
|
6
|
-
snapshotBeforeTimeoutMs: z.number().optional(),
|
|
7
|
-
snapshotId: z.string().optional(),
|
|
8
|
-
autoStart: z.boolean().optional()
|
|
9
|
-
});
|
|
10
|
-
var NetworkPolicySchema = z.union([
|
|
11
|
-
z.literal("allow-all"),
|
|
12
|
-
z.literal("deny-all"),
|
|
13
|
-
z.object({
|
|
14
|
-
allow: z.array(z.string()).optional(),
|
|
15
|
-
subnets: z.object({
|
|
16
|
-
allow: z.array(z.string()).optional(),
|
|
17
|
-
deny: z.array(z.string()).optional()
|
|
18
|
-
}).optional()
|
|
19
|
-
})
|
|
20
|
-
]).optional();
|
|
21
|
-
var SandboxConfigSchema = z.discriminatedUnion("type", [
|
|
22
|
-
z.object({
|
|
23
|
-
type: z.literal("vercel"),
|
|
24
|
-
resources: z.object({ vcpus: z.number() }).optional(),
|
|
25
|
-
ports: z.array(z.number()).optional(),
|
|
26
|
-
lifecycle: VercelLifecycleConfigSchema.optional(),
|
|
27
|
-
networkPolicy: NetworkPolicySchema
|
|
28
|
-
}),
|
|
29
|
-
z.object({
|
|
30
|
-
type: z.literal("local"),
|
|
31
|
-
path: z.string().optional()
|
|
32
|
-
}),
|
|
33
|
-
z.object({
|
|
34
|
-
type: z.literal("custom"),
|
|
35
|
-
url: z.string(),
|
|
36
|
-
headers: z.record(z.string(), z.string()).optional()
|
|
37
|
-
})
|
|
38
|
-
]);
|
|
39
|
-
var GenerationSchema = z.object({
|
|
40
|
-
maxSteps: z.number().optional(),
|
|
41
|
-
temperature: z.number().optional(),
|
|
42
|
-
topK: z.number().optional(),
|
|
43
|
-
topP: z.number().optional(),
|
|
44
|
-
frequencyPenalty: z.number().optional(),
|
|
45
|
-
presencePenalty: z.number().optional(),
|
|
46
|
-
maxOutputTokens: z.number().optional(),
|
|
47
|
-
headers: z.record(z.string(), z.string()).optional()
|
|
48
|
-
});
|
|
49
|
-
var SessionSchema = z.object({
|
|
50
|
-
id: z.string(),
|
|
51
|
-
createdAt: z.number(),
|
|
52
|
-
updatedAt: z.number(),
|
|
53
|
-
runId: z.string().nullable(),
|
|
54
|
-
lastMessageId: z.string().nullable(),
|
|
55
|
-
tags: z.record(z.string(), z.unknown()).nullable(),
|
|
56
|
-
system: z.string().nullable(),
|
|
57
|
-
model: z.string().nullable(),
|
|
58
|
-
sandboxId: z.string().nullable(),
|
|
59
|
-
skillsDir: z.array(z.string()).nullable(),
|
|
60
|
-
hookToken: z.string().nullable(),
|
|
61
|
-
activeTools: z.array(z.string()).nullable(),
|
|
62
|
-
generation: GenerationSchema.nullable().default(null)
|
|
63
|
-
});
|
|
64
|
-
var StepUsageSchema = z.object({
|
|
65
|
-
stepIndex: z.number(),
|
|
66
|
-
model: z.string(),
|
|
67
|
-
inputTokens: z.number(),
|
|
68
|
-
outputTokens: z.number(),
|
|
69
|
-
totalTokens: z.number(),
|
|
70
|
-
cacheReadTokens: z.number(),
|
|
71
|
-
cacheWriteTokens: z.number(),
|
|
72
|
-
reasoningTokens: z.number()
|
|
73
|
-
});
|
|
74
|
-
var UsageSummarySchema = z.object({
|
|
75
|
-
model: z.string(),
|
|
76
|
-
inputTokens: z.number(),
|
|
77
|
-
outputTokens: z.number(),
|
|
78
|
-
totalTokens: z.number(),
|
|
79
|
-
cacheReadTokens: z.number(),
|
|
80
|
-
cacheWriteTokens: z.number(),
|
|
81
|
-
reasoningTokens: z.number(),
|
|
82
|
-
stepCount: z.number()
|
|
83
|
-
});
|
|
84
|
-
var MessageUsageSchema = z.object({
|
|
85
|
-
steps: z.array(StepUsageSchema),
|
|
86
|
-
summary: UsageSummarySchema
|
|
87
|
-
});
|
|
88
|
-
var MessageSchema = z.object({
|
|
89
|
-
id: z.string(),
|
|
90
|
-
sessionId: z.string(),
|
|
91
|
-
role: z.enum(["user", "assistant", "system"]),
|
|
92
|
-
createdAt: z.number(),
|
|
93
|
-
startedAt: z.number().nullable(),
|
|
94
|
-
completedAt: z.number().nullable(),
|
|
95
|
-
interruptedAt: z.number().nullable(),
|
|
96
|
-
usage: MessageUsageSchema.nullable()
|
|
97
|
-
});
|
|
98
|
-
var PartSchema = z.object({
|
|
99
|
-
id: z.string(),
|
|
100
|
-
messageId: z.string(),
|
|
101
|
-
sessionId: z.string(),
|
|
102
|
-
index: z.number(),
|
|
103
|
-
part: z.unknown()
|
|
104
|
-
});
|
|
105
|
-
var CommandResultSchema = z.object({
|
|
106
|
-
stdout: z.string(),
|
|
107
|
-
stderr: z.string(),
|
|
108
|
-
exitCode: z.number(),
|
|
109
|
-
completedAt: z.number()
|
|
110
|
-
});
|
|
111
|
-
var SandboxRecordSchema = z.object({
|
|
112
|
-
id: z.string(),
|
|
113
|
-
config: SandboxConfigSchema,
|
|
114
|
-
tags: z.record(z.string(), z.unknown()).nullable(),
|
|
115
|
-
createdAt: z.number().nullable(),
|
|
116
|
-
lastActivityAt: z.number().nullable(),
|
|
117
|
-
acquiringLockId: z.string().nullable(),
|
|
118
|
-
acquiringLockAt: z.number().nullable(),
|
|
119
|
-
providerMetadata: z.discriminatedUnion("provider", [
|
|
120
|
-
z.object({
|
|
121
|
-
provider: z.literal("vercel"),
|
|
122
|
-
sandboxId: z.string().nullable(),
|
|
123
|
-
snapshotId: z.string().nullable()
|
|
124
|
-
})
|
|
125
|
-
]).optional()
|
|
126
|
-
});
|
|
127
|
-
var CommandBaseSchema = z.object({
|
|
128
|
-
id: z.string(),
|
|
129
|
-
sessionId: z.string(),
|
|
130
|
-
command: z.string(),
|
|
131
|
-
args: z.array(z.string()).optional(),
|
|
132
|
-
startedAt: z.number()
|
|
133
|
-
});
|
|
134
|
-
var CommandSchema = z.discriminatedUnion("status", [
|
|
135
|
-
CommandBaseSchema.extend({ status: z.literal("running") }),
|
|
136
|
-
CommandBaseSchema.extend({
|
|
137
|
-
status: z.literal("completed"),
|
|
138
|
-
result: CommandResultSchema
|
|
139
|
-
}),
|
|
140
|
-
CommandBaseSchema.extend({
|
|
141
|
-
status: z.literal("killed"),
|
|
142
|
-
result: CommandResultSchema.optional()
|
|
143
|
-
}),
|
|
144
|
-
CommandBaseSchema.extend({
|
|
145
|
-
status: z.literal("failed"),
|
|
146
|
-
result: CommandResultSchema
|
|
147
|
-
})
|
|
148
|
-
]);
|
|
149
|
-
function ListResultSchema(itemSchema) {
|
|
150
|
-
return z.object({
|
|
151
|
-
items: z.array(itemSchema),
|
|
152
|
-
nextCursor: z.string().nullable()
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
var SetupSnapshotSchema = z.object({
|
|
156
|
-
key: z.string(),
|
|
157
|
-
snapshotId: z.string().nullable(),
|
|
158
|
-
createdAt: z.number(),
|
|
159
|
-
lastUsedAt: z.number().nullable(),
|
|
160
|
-
acquiringLockId: z.string().nullable(),
|
|
161
|
-
acquiringLockAt: z.number().nullable()
|
|
162
|
-
});
|
|
163
|
-
var methods = {
|
|
164
|
-
"session.get": {
|
|
165
|
-
params: z.object({ id: z.string() }),
|
|
166
|
-
result: SessionSchema.nullable()
|
|
167
|
-
},
|
|
168
|
-
"session.set": {
|
|
169
|
-
params: SessionSchema,
|
|
170
|
-
result: SessionSchema
|
|
171
|
-
},
|
|
172
|
-
"session.list": {
|
|
173
|
-
params: z.object({
|
|
174
|
-
tags: z.record(z.string(), z.unknown()).optional(),
|
|
175
|
-
order: z.enum([
|
|
176
|
-
"createdAt_asc",
|
|
177
|
-
"createdAt_desc",
|
|
178
|
-
"updatedAt_asc",
|
|
179
|
-
"updatedAt_desc"
|
|
180
|
-
]).optional(),
|
|
181
|
-
cursor: z.string().optional(),
|
|
182
|
-
limit: z.number().optional()
|
|
183
|
-
}),
|
|
184
|
-
result: ListResultSchema(SessionSchema)
|
|
185
|
-
},
|
|
186
|
-
"session.listBySandbox": {
|
|
187
|
-
params: z.object({
|
|
188
|
-
sandboxId: z.string(),
|
|
189
|
-
tags: z.record(z.string(), z.unknown()).optional(),
|
|
190
|
-
order: z.enum([
|
|
191
|
-
"createdAt_asc",
|
|
192
|
-
"createdAt_desc",
|
|
193
|
-
"updatedAt_asc",
|
|
194
|
-
"updatedAt_desc"
|
|
195
|
-
]).optional(),
|
|
196
|
-
cursor: z.string().optional(),
|
|
197
|
-
limit: z.number().optional()
|
|
198
|
-
}),
|
|
199
|
-
result: ListResultSchema(SessionSchema)
|
|
200
|
-
},
|
|
201
|
-
"session.delete": {
|
|
202
|
-
params: z.object({ id: z.string() }),
|
|
203
|
-
result: z.void()
|
|
204
|
-
},
|
|
205
|
-
"session.tag.set": {
|
|
206
|
-
params: z.object({
|
|
207
|
-
sessionId: z.string(),
|
|
208
|
-
tags: z.record(z.string(), z.unknown())
|
|
209
|
-
}),
|
|
210
|
-
result: SessionSchema
|
|
211
|
-
},
|
|
212
|
-
"message.get": {
|
|
213
|
-
params: z.object({ id: z.string() }),
|
|
214
|
-
result: MessageSchema.nullable()
|
|
215
|
-
},
|
|
216
|
-
"message.set": {
|
|
217
|
-
params: MessageSchema,
|
|
218
|
-
result: MessageSchema
|
|
219
|
-
},
|
|
220
|
-
"message.list": {
|
|
221
|
-
params: z.object({
|
|
222
|
-
sessionId: z.string(),
|
|
223
|
-
cursor: z.string().optional(),
|
|
224
|
-
limit: z.number().optional()
|
|
225
|
-
}),
|
|
226
|
-
result: ListResultSchema(MessageSchema)
|
|
227
|
-
},
|
|
228
|
-
"part.listByMessage": {
|
|
229
|
-
params: z.object({
|
|
230
|
-
messageId: z.string(),
|
|
231
|
-
cursor: z.string().optional(),
|
|
232
|
-
limit: z.number().optional()
|
|
233
|
-
}),
|
|
234
|
-
result: ListResultSchema(PartSchema)
|
|
235
|
-
},
|
|
236
|
-
"part.listBySession": {
|
|
237
|
-
params: z.object({
|
|
238
|
-
sessionId: z.string(),
|
|
239
|
-
cursor: z.string().optional(),
|
|
240
|
-
limit: z.number().optional()
|
|
241
|
-
}),
|
|
242
|
-
result: ListResultSchema(PartSchema)
|
|
243
|
-
},
|
|
244
|
-
"part.set": {
|
|
245
|
-
params: PartSchema,
|
|
246
|
-
result: PartSchema
|
|
247
|
-
},
|
|
248
|
-
"part.delete": {
|
|
249
|
-
params: z.object({ id: z.string() }),
|
|
250
|
-
result: z.void()
|
|
251
|
-
},
|
|
252
|
-
"sandbox.get": {
|
|
253
|
-
params: z.object({ key: z.string() }),
|
|
254
|
-
result: SandboxRecordSchema.nullable()
|
|
255
|
-
},
|
|
256
|
-
"sandbox.getBySession": {
|
|
257
|
-
params: z.object({ sessionId: z.string() }),
|
|
258
|
-
result: SandboxRecordSchema.nullable()
|
|
259
|
-
},
|
|
260
|
-
"sandbox.set": {
|
|
261
|
-
params: SandboxRecordSchema,
|
|
262
|
-
result: z.void()
|
|
263
|
-
},
|
|
264
|
-
"sandbox.list": {
|
|
265
|
-
params: z.object({
|
|
266
|
-
tags: z.record(z.string(), z.unknown()).optional(),
|
|
267
|
-
order: z.enum([
|
|
268
|
-
"createdAt_asc",
|
|
269
|
-
"createdAt_desc",
|
|
270
|
-
"lastActivityAt_asc",
|
|
271
|
-
"lastActivityAt_desc"
|
|
272
|
-
]).optional(),
|
|
273
|
-
cursor: z.string().optional(),
|
|
274
|
-
limit: z.number().optional()
|
|
275
|
-
}),
|
|
276
|
-
result: ListResultSchema(SandboxRecordSchema)
|
|
277
|
-
},
|
|
278
|
-
"sandbox.tag.set": {
|
|
279
|
-
params: z.object({
|
|
280
|
-
sandboxId: z.string(),
|
|
281
|
-
tags: z.record(z.string(), z.unknown())
|
|
282
|
-
}),
|
|
283
|
-
result: SandboxRecordSchema
|
|
284
|
-
},
|
|
285
|
-
"command.get": {
|
|
286
|
-
params: z.object({ id: z.string() }),
|
|
287
|
-
result: CommandSchema.nullable()
|
|
288
|
-
},
|
|
289
|
-
"command.set": {
|
|
290
|
-
params: CommandSchema,
|
|
291
|
-
result: CommandSchema
|
|
292
|
-
},
|
|
293
|
-
"command.list": {
|
|
294
|
-
params: z.object({
|
|
295
|
-
sessionId: z.string(),
|
|
296
|
-
includeFinished: z.boolean().optional(),
|
|
297
|
-
cursor: z.string().optional(),
|
|
298
|
-
limit: z.number().optional()
|
|
299
|
-
}),
|
|
300
|
-
result: ListResultSchema(CommandSchema)
|
|
301
|
-
},
|
|
302
|
-
"setup.get": {
|
|
303
|
-
params: z.object({ key: z.string() }),
|
|
304
|
-
result: SetupSnapshotSchema.nullable()
|
|
305
|
-
},
|
|
306
|
-
"setup.set": {
|
|
307
|
-
params: SetupSnapshotSchema,
|
|
308
|
-
result: z.void()
|
|
309
|
-
},
|
|
310
|
-
"setup.acquireLock": {
|
|
311
|
-
params: z.object({
|
|
312
|
-
key: z.string(),
|
|
313
|
-
lockId: z.string(),
|
|
314
|
-
lockTimeoutMs: z.number()
|
|
315
|
-
}),
|
|
316
|
-
result: SetupSnapshotSchema.nullable()
|
|
317
|
-
},
|
|
318
|
-
"sandbox.acquireLock": {
|
|
319
|
-
params: z.object({
|
|
320
|
-
record: SandboxRecordSchema,
|
|
321
|
-
lockTimeoutMs: z.number()
|
|
322
|
-
}),
|
|
323
|
-
result: SandboxRecordSchema.nullable()
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
var STORAGE_RPC_METHODS = Object.keys(methods);
|
|
327
|
-
|
|
328
|
-
// src/storage/handler.ts
|
|
329
|
-
async function handleStorageRpc(body, handlers) {
|
|
330
|
-
const { method, params } = body;
|
|
331
|
-
if (!(method in methods)) {
|
|
332
|
-
return {
|
|
333
|
-
error: { code: "METHOD_NOT_FOUND", message: `Unknown method: ${method}` }
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
const methodName = method;
|
|
337
|
-
const schema = methods[methodName].params;
|
|
338
|
-
const parsed = schema.safeParse(params);
|
|
339
|
-
if (!parsed.success) {
|
|
340
|
-
return {
|
|
341
|
-
error: {
|
|
342
|
-
code: "INVALID_PARAMS",
|
|
343
|
-
message: parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join(", ")
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
}
|
|
347
|
-
try {
|
|
348
|
-
const handler = handlers[methodName];
|
|
349
|
-
const result = await handler(parsed.data);
|
|
350
|
-
return { result };
|
|
351
|
-
} catch (e) {
|
|
352
|
-
return {
|
|
353
|
-
error: {
|
|
354
|
-
code: "INTERNAL_ERROR",
|
|
355
|
-
message: e instanceof Error ? e.message : String(e)
|
|
356
|
-
}
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
export {
|
|
362
|
-
STORAGE_RPC_METHODS,
|
|
363
|
-
handleStorageRpc
|
|
364
|
-
};
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvcnBjLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2hhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IFZlcmNlbExpZmVjeWNsZUNvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgcG9sbEludGVydmFsTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc3RvcEFmdGVySW5hY3RpdmVNczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzbmFwc2hvdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF1dG9TdGFydDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBOZXR3b3JrUG9saWN5U2NoZW1hID0gelxuICAudW5pb24oW1xuICAgIHoubGl0ZXJhbChcImFsbG93LWFsbFwiKSxcbiAgICB6LmxpdGVyYWwoXCJkZW55LWFsbFwiKSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICBhbGxvdzogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgc3VibmV0czogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICBhbGxvdzogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgICAgIGRlbnk6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgfSksXG4gIF0pXG4gIC5vcHRpb25hbCgpO1xuXG5leHBvcnQgdHlwZSBOZXR3b3JrUG9saWN5ID0gei5pbmZlcjx0eXBlb2YgTmV0d29ya1BvbGljeVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBTYW5kYm94Q29uZmlnU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInZlcmNlbFwiKSxcbiAgICByZXNvdXJjZXM6IHoub2JqZWN0KHsgdmNwdXM6IHoubnVtYmVyKCkgfSkub3B0aW9uYWwoKSxcbiAgICBwb3J0czogei5hcnJheSh6Lm51bWJlcigpKS5vcHRpb25hbCgpLFxuICAgIGxpZmVjeWNsZTogVmVyY2VsTGlmZWN5Y2xlQ29uZmlnU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgbmV0d29ya1BvbGljeTogTmV0d29ya1BvbGljeVNjaGVtYSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJsb2NhbFwiKSxcbiAgICBwYXRoOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiY3VzdG9tXCIpLFxuICAgIHVybDogei5zdHJpbmcoKSxcbiAgICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94Q29uZmlnID0gei5pbmZlcjx0eXBlb2YgU2FuZGJveENvbmZpZ1NjaGVtYT47XG5cbmNvbnN0IEdlbmVyYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG1heFN0ZXBzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRlbXBlcmF0dXJlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvcEs6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9wUDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBmcmVxdWVuY3lQZW5hbHR5OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHByZXNlbmNlUGVuYWx0eTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBtYXhPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU2Vzc2lvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRBdDogei5udW1iZXIoKSxcbiAgdXBkYXRlZEF0OiB6Lm51bWJlcigpLFxuICBydW5JZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBsYXN0TWVzc2FnZUlkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5udWxsYWJsZSgpLFxuICBzeXN0ZW06IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc2FuZGJveElkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHNraWxsc0Rpcjogei5hcnJheSh6LnN0cmluZygpKS5udWxsYWJsZSgpLFxuICBob29rVG9rZW46IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgYWN0aXZlVG9vbHM6IHouYXJyYXkoei5zdHJpbmcoKSkubnVsbGFibGUoKSxcbiAgZ2VuZXJhdGlvbjogR2VuZXJhdGlvblNjaGVtYS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG59KTtcblxuZXhwb3J0IGNvbnN0IFN0ZXBVc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICBtb2RlbDogei5zdHJpbmcoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCksXG4gIG91dHB1dFRva2Vuczogei5udW1iZXIoKSxcbiAgdG90YWxUb2tlbnM6IHoubnVtYmVyKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKSxcbiAgY2FjaGVXcml0ZVRva2Vuczogei5udW1iZXIoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVN1bW1hcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG1vZGVsOiB6LnN0cmluZygpLFxuICBpbnB1dFRva2Vuczogei5udW1iZXIoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLFxuICB0b3RhbFRva2Vuczogei5udW1iZXIoKSxcbiAgY2FjaGVSZWFkVG9rZW5zOiB6Lm51bWJlcigpLFxuICBjYWNoZVdyaXRlVG9rZW5zOiB6Lm51bWJlcigpLFxuICByZWFzb25pbmdUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN0ZXBDb3VudDogei5udW1iZXIoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgTWVzc2FnZVVzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGVwczogei5hcnJheShTdGVwVXNhZ2VTY2hlbWEpLFxuICBzdW1tYXJ5OiBVc2FnZVN1bW1hcnlTY2hlbWEsXG59KTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVVzYWdlID0gei5pbmZlcjx0eXBlb2YgTWVzc2FnZVVzYWdlU2NoZW1hPjtcbmV4cG9ydCB0eXBlIFVzYWdlU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlU3VtbWFyeVNjaGVtYT47XG5leHBvcnQgdHlwZSBTdGVwVXNhZ2UgPSB6LmluZmVyPHR5cGVvZiBTdGVwVXNhZ2VTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgcm9sZTogei5lbnVtKFtcInVzZXJcIiwgXCJhc3Npc3RhbnRcIiwgXCJzeXN0ZW1cIl0pLFxuICBjcmVhdGVkQXQ6IHoubnVtYmVyKCksXG4gIHN0YXJ0ZWRBdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICBjb21wbGV0ZWRBdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICBpbnRlcnJ1cHRlZEF0OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIHVzYWdlOiBNZXNzYWdlVXNhZ2VTY2hlbWEubnVsbGFibGUoKSxcbn0pO1xuXG4vKipcbiAqIFRoZSBgcGFydGAgZmllbGQgY29ycmVzcG9uZHMgdG8gYFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl1gIGZyb20gdGhlIGBhaWAgcGFja2FnZS5cbiAqIFdlIHVzZSBgei51bmtub3duKClgIGJlY2F1c2UgdGhlIGV4YWN0IHNoYXBlIHZhcmllcyBieSBwYXJ0IHR5cGUgKHRleHQsIHRvb2wtY2FsbCxcbiAqIHRvb2wtcmVzdWx0LCBldGMuKSBhbmQgbWF5IGV2b2x2ZSB3aXRoIHRoZSBBSSBTREsuIFRoZSBSUEMgbGF5ZXIganVzdCBwYXNzZXMgaXQgdGhyb3VnaC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCksXG4gIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgaW5kZXg6IHoubnVtYmVyKCksXG4gIHBhcnQ6IHoudW5rbm93bigpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBDb21tYW5kUmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGRvdXQ6IHouc3RyaW5nKCksXG4gIHN0ZGVycjogei5zdHJpbmcoKSxcbiAgZXhpdENvZGU6IHoubnVtYmVyKCksXG4gIGNvbXBsZXRlZEF0OiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBTYW5kYm94UmVjb3JkU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgY29uZmlnOiBTYW5kYm94Q29uZmlnU2NoZW1hLFxuICB0YWdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkubnVsbGFibGUoKSxcbiAgY3JlYXRlZEF0OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIGxhc3RBY3Rpdml0eUF0OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIGFjcXVpcmluZ0xvY2tJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBhY3F1aXJpbmdMb2NrQXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgcHJvdmlkZXJNZXRhZGF0YTogelxuICAgIC5kaXNjcmltaW5hdGVkVW5pb24oXCJwcm92aWRlclwiLCBbXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJ2ZXJjZWxcIiksXG4gICAgICAgIHNhbmRib3hJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBzbmFwc2hvdElkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICB9KSxcbiAgICBdKVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IENvbW1hbmRCYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgc2Vzc2lvbklkOiB6LnN0cmluZygpLFxuICBjb21tYW5kOiB6LnN0cmluZygpLFxuICBhcmdzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHN0YXJ0ZWRBdDogei5udW1iZXIoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgQ29tbWFuZFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3RhdHVzXCIsIFtcbiAgQ29tbWFuZEJhc2VTY2hlbWEuZXh0ZW5kKHsgc3RhdHVzOiB6LmxpdGVyYWwoXCJydW5uaW5nXCIpIH0pLFxuICBDb21tYW5kQmFzZVNjaGVtYS5leHRlbmQoe1xuICAgIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVkXCIpLFxuICAgIHJlc3VsdDogQ29tbWFuZFJlc3VsdFNjaGVtYSxcbiAgfSksXG4gIENvbW1hbmRCYXNlU2NoZW1hLmV4dGVuZCh7XG4gICAgc3RhdHVzOiB6LmxpdGVyYWwoXCJraWxsZWRcIiksXG4gICAgcmVzdWx0OiBDb21tYW5kUmVzdWx0U2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxuICBDb21tYW5kQmFzZVNjaGVtYS5leHRlbmQoe1xuICAgIHN0YXR1czogei5saXRlcmFsKFwiZmFpbGVkXCIpLFxuICAgIHJlc3VsdDogQ29tbWFuZFJlc3VsdFNjaGVtYSxcbiAgfSksXG5dKTtcblxuZnVuY3Rpb24gTGlzdFJlc3VsdFNjaGVtYTxUIGV4dGVuZHMgei5ab2RUeXBlQW55PihpdGVtU2NoZW1hOiBUKSB7XG4gIHJldHVybiB6Lm9iamVjdCh7XG4gICAgaXRlbXM6IHouYXJyYXkoaXRlbVNjaGVtYSksXG4gICAgbmV4dEN1cnNvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IFNldHVwU25hcHNob3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGtleTogei5zdHJpbmcoKSxcbiAgc25hcHNob3RJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkQXQ6IHoubnVtYmVyKCksXG4gIGxhc3RVc2VkQXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgYWNxdWlyaW5nTG9ja0lkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGFjcXVpcmluZ0xvY2tBdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxufSk7XG5cbmNvbnN0IG1ldGhvZHMgPSB7XG4gIFwic2Vzc2lvbi5nZXRcIjoge1xuICAgIHBhcmFtczogei5vYmplY3QoeyBpZDogei5zdHJpbmcoKSB9KSxcbiAgICByZXN1bHQ6IFNlc3Npb25TY2hlbWEubnVsbGFibGUoKSxcbiAgfSxcbiAgXCJzZXNzaW9uLnNldFwiOiB7XG4gICAgcGFyYW1zOiBTZXNzaW9uU2NoZW1hLFxuICAgIHJlc3VsdDogU2Vzc2lvblNjaGVtYSxcbiAgfSxcbiAgXCJzZXNzaW9uLmxpc3RcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gICAgICBvcmRlcjogelxuICAgICAgICAuZW51bShbXG4gICAgICAgICAgXCJjcmVhdGVkQXRfYXNjXCIsXG4gICAgICAgICAgXCJjcmVhdGVkQXRfZGVzY1wiLFxuICAgICAgICAgIFwidXBkYXRlZEF0X2FzY1wiLFxuICAgICAgICAgIFwidXBkYXRlZEF0X2Rlc2NcIixcbiAgICAgICAgXSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBjdXJzb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGxpbWl0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgfSksXG4gICAgcmVzdWx0OiBMaXN0UmVzdWx0U2NoZW1hKFNlc3Npb25TY2hlbWEpLFxuICB9LFxuICBcInNlc3Npb24ubGlzdEJ5U2FuZGJveFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICBzYW5kYm94SWQ6IHouc3RyaW5nKCksXG4gICAgICB0YWdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICAgIG9yZGVyOiB6XG4gICAgICAgIC5lbnVtKFtcbiAgICAgICAgICBcImNyZWF0ZWRBdF9hc2NcIixcbiAgICAgICAgICBcImNyZWF0ZWRBdF9kZXNjXCIsXG4gICAgICAgICAgXCJ1cGRhdGVkQXRfYXNjXCIsXG4gICAgICAgICAgXCJ1cGRhdGVkQXRfZGVzY1wiLFxuICAgICAgICBdKVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoU2Vzc2lvblNjaGVtYSksXG4gIH0sXG4gIFwic2Vzc2lvbi5kZWxldGVcIjoge1xuICAgIHBhcmFtczogei5vYmplY3QoeyBpZDogei5zdHJpbmcoKSB9KSxcbiAgICByZXN1bHQ6IHoudm9pZCgpLFxuICB9LFxuICBcInNlc3Npb24udGFnLnNldFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICB0YWdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSksXG4gICAgfSksXG4gICAgcmVzdWx0OiBTZXNzaW9uU2NoZW1hLFxuICB9LFxuICBcIm1lc3NhZ2UuZ2V0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsgaWQ6IHouc3RyaW5nKCkgfSksXG4gICAgcmVzdWx0OiBNZXNzYWdlU2NoZW1hLm51bGxhYmxlKCksXG4gIH0sXG4gIFwibWVzc2FnZS5zZXRcIjoge1xuICAgIHBhcmFtczogTWVzc2FnZVNjaGVtYSxcbiAgICByZXN1bHQ6IE1lc3NhZ2VTY2hlbWEsXG4gIH0sXG4gIFwibWVzc2FnZS5saXN0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoTWVzc2FnZVNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5saXN0QnlNZXNzYWdlXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2VJZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoUGFydFNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoUGFydFNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5zZXRcIjoge1xuICAgIHBhcmFtczogUGFydFNjaGVtYSxcbiAgICByZXN1bHQ6IFBhcnRTY2hlbWEsXG4gIH0sXG4gIFwicGFydC5kZWxldGVcIjoge1xuICAgIHBhcmFtczogei5vYmplY3QoeyBpZDogei5zdHJpbmcoKSB9KSxcbiAgICByZXN1bHQ6IHoudm9pZCgpLFxuICB9LFxuICBcInNhbmRib3guZ2V0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsga2V5OiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcInNhbmRib3guZ2V0QnlTZXNzaW9uXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsgc2Vzc2lvbklkOiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcInNhbmRib3guc2V0XCI6IHtcbiAgICBwYXJhbXM6IFNhbmRib3hSZWNvcmRTY2hlbWEsXG4gICAgcmVzdWx0OiB6LnZvaWQoKSxcbiAgfSxcbiAgXCJzYW5kYm94Lmxpc3RcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gICAgICBvcmRlcjogelxuICAgICAgICAuZW51bShbXG4gICAgICAgICAgXCJjcmVhdGVkQXRfYXNjXCIsXG4gICAgICAgICAgXCJjcmVhdGVkQXRfZGVzY1wiLFxuICAgICAgICAgIFwibGFzdEFjdGl2aXR5QXRfYXNjXCIsXG4gICAgICAgICAgXCJsYXN0QWN0aXZpdHlBdF9kZXNjXCIsXG4gICAgICAgIF0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgY3Vyc29yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBsaW1pdDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogTGlzdFJlc3VsdFNjaGVtYShTYW5kYm94UmVjb3JkU2NoZW1hKSxcbiAgfSxcbiAgXCJzYW5kYm94LnRhZy5zZXRcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgc2FuZGJveElkOiB6LnN0cmluZygpLFxuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYSxcbiAgfSxcbiAgXCJjb21tYW5kLmdldFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7IGlkOiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogQ29tbWFuZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcImNvbW1hbmQuc2V0XCI6IHtcbiAgICBwYXJhbXM6IENvbW1hbmRTY2hlbWEsXG4gICAgcmVzdWx0OiBDb21tYW5kU2NoZW1hLFxuICB9LFxuICBcImNvbW1hbmQubGlzdFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICBpbmNsdWRlRmluaXNoZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBjdXJzb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGxpbWl0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgfSksXG4gICAgcmVzdWx0OiBMaXN0UmVzdWx0U2NoZW1hKENvbW1hbmRTY2hlbWEpLFxuICB9LFxuICBcInNldHVwLmdldFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7IGtleTogei5zdHJpbmcoKSB9KSxcbiAgICByZXN1bHQ6IFNldHVwU25hcHNob3RTY2hlbWEubnVsbGFibGUoKSxcbiAgfSxcbiAgXCJzZXR1cC5zZXRcIjoge1xuICAgIHBhcmFtczogU2V0dXBTbmFwc2hvdFNjaGVtYSxcbiAgICByZXN1bHQ6IHoudm9pZCgpLFxuICB9LFxuICBcInNldHVwLmFjcXVpcmVMb2NrXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIGtleTogei5zdHJpbmcoKSxcbiAgICAgIGxvY2tJZDogei5zdHJpbmcoKSxcbiAgICAgIGxvY2tUaW1lb3V0TXM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgcmVzdWx0OiBTZXR1cFNuYXBzaG90U2NoZW1hLm51bGxhYmxlKCksXG4gIH0sXG4gIFwic2FuZGJveC5hY3F1aXJlTG9ja1wiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICByZWNvcmQ6IFNhbmRib3hSZWNvcmRTY2hlbWEsXG4gICAgICBsb2NrVGltZW91dE1zOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHsgbWV0aG9kcyB9O1xuZXhwb3J0IHR5cGUgU3RvcmFnZU1ldGhvZHMgPSB0eXBlb2YgbWV0aG9kcztcbmV4cG9ydCB0eXBlIE1ldGhvZE5hbWUgPSBrZXlvZiBTdG9yYWdlTWV0aG9kcztcbmV4cG9ydCBjb25zdCBTVE9SQUdFX1JQQ19NRVRIT0RTID0gT2JqZWN0LmtleXMobWV0aG9kcykgYXMgTWV0aG9kTmFtZVtdO1xuIiwgImltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHR5cGUgTWV0aG9kTmFtZSwgbWV0aG9kcywgdHlwZSBTdG9yYWdlTWV0aG9kcyB9IGZyb20gXCIuL3JwY1wiO1xuXG5leHBvcnQgdHlwZSBIYW5kbGVycyA9IHtcbiAgW0sgaW4gTWV0aG9kTmFtZV06IChcbiAgICBwYXJhbXM6IHouaW5mZXI8U3RvcmFnZU1ldGhvZHNbS11bXCJwYXJhbXNcIl0+XG4gICkgPT4gUHJvbWlzZTx6LmluZmVyPFN0b3JhZ2VNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5leHBvcnQgdHlwZSBScGNSZXF1ZXN0ID0ge1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGFyYW1zOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgUnBjU3VjY2Vzc1Jlc3BvbnNlPFQgPSB1bmtub3duPiA9IHtcbiAgcmVzdWx0OiBUO1xufTtcblxuZXhwb3J0IHR5cGUgUnBjRXJyb3JSZXNwb25zZSA9IHtcbiAgZXJyb3I6IHsgY29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJwY1Jlc3BvbnNlPFQgPSB1bmtub3duPiA9IFJwY1N1Y2Nlc3NSZXNwb25zZTxUPiB8IFJwY0Vycm9yUmVzcG9uc2U7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVTdG9yYWdlUnBjKFxuICBib2R5OiBScGNSZXF1ZXN0LFxuICBoYW5kbGVyczogSGFuZGxlcnNcbik6IFByb21pc2U8UnBjUmVzcG9uc2U+IHtcbiAgY29uc3QgeyBtZXRob2QsIHBhcmFtcyB9ID0gYm9keTtcblxuICBpZiAoIShtZXRob2QgaW4gbWV0aG9kcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHsgY29kZTogXCJNRVRIT0RfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBVbmtub3duIG1ldGhvZDogJHttZXRob2R9YCB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtZXRob2ROYW1lID0gbWV0aG9kIGFzIE1ldGhvZE5hbWU7XG4gIGNvbnN0IHNjaGVtYSA9IG1ldGhvZHNbbWV0aG9kTmFtZV0ucGFyYW1zO1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEuc2FmZVBhcnNlKHBhcmFtcyk7XG5cbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBcIklOVkFMSURfUEFSQU1TXCIsXG4gICAgICAgIG1lc3NhZ2U6IHBhcnNlZC5lcnJvci5pc3N1ZXNcbiAgICAgICAgICAubWFwKChpKSA9PiBgJHtpLnBhdGguam9pbihcIi5cIil9OiAke2kubWVzc2FnZX1gKVxuICAgICAgICAgIC5qb2luKFwiLCBcIiksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1ttZXRob2ROYW1lXSBhcyAoXG4gICAgICBwYXJhbXM6IHVua25vd25cbiAgICApID0+IFByb21pc2U8dW5rbm93bj47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihwYXJzZWQuZGF0YSk7XG4gICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogXCJJTlRFUk5BTF9FUlJPUlwiLFxuICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLFNBQVM7QUFFbEIsSUFBTSw4QkFBOEIsRUFBRSxPQUFPO0FBQUEsRUFDM0MsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUNwQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQ3pDLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDN0MsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDaEMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ2xDLENBQUM7QUFFRCxJQUFNLHNCQUFzQixFQUN6QixNQUFNO0FBQUEsRUFDTCxFQUFFLFFBQVEsV0FBVztBQUFBLEVBQ3JCLEVBQUUsUUFBUSxVQUFVO0FBQUEsRUFDcEIsRUFBRSxPQUFPO0FBQUEsSUFDUCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFBQSxJQUNwQyxTQUFTLEVBQ04sT0FBTztBQUFBLE1BQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTO0FBQUEsTUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTO0FBQUEsSUFDckMsQ0FBQyxFQUNBLFNBQVM7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
|