vitest 0.0.137 → 0.0.141

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/dist/worker.js CHANGED
@@ -1,19 +1,20 @@
1
- import { d as dirname, b as basename, k as resolve, p as mergeSlashes, q as join, s as slash, m as toFilePath } from './index-64aafe4b.js';
2
- import { i as isNodeBuiltin, c as createBirpc } from './index-5d6a5929.js';
3
- import { c as distDir } from './constants-d24b670d.js';
1
+ import { a as resolve, d as dirname, b as basename, j as join } from './index-1b2eb03b.js';
2
+ import { s as slash, n as normalizeId$1, t as toFilePath, i as isNodeBuiltin, c as createBirpc } from './index-c037b40c.js';
3
+ import { c as distDir } from './constants-124522a1.js';
4
4
  import { builtinModules, createRequire } from 'module';
5
5
  import { pathToFileURL, fileURLToPath } from 'url';
6
6
  import vm from 'vm';
7
7
  import { existsSync, readdirSync } from 'fs';
8
8
  import { a as spyOn, s as spies } from './jest-mock-6c629944.js';
9
+ import { m as mergeSlashes } from './index-1bb8e174.js';
9
10
  import { r as rpc } from './rpc-8c7cc374.js';
10
- import 'tty';
11
- import 'local-pkg';
12
11
  import 'path';
13
12
  import 'assert';
14
13
  import 'util';
15
14
  import 'chai';
16
15
  import 'tinyspy';
16
+ import 'tty';
17
+ import 'local-pkg';
17
18
 
18
19
  function normalizeId(id, base) {
19
20
  if (base && id.startsWith(base))
@@ -21,6 +22,137 @@ function normalizeId(id, base) {
21
22
  return id.replace(/^\/@id\/__x00__/, "\0").replace(/^\/@id\//, "").replace(/^__vite-browser-external:/, "").replace(/^node:/, "").replace(/[?&]v=\w+/, "?").replace(/\?$/, "");
22
23
  }
23
24
 
25
+ class ViteNodeRunner {
26
+ constructor(options) {
27
+ this.options = options;
28
+ this.root = options.root || process.cwd();
29
+ this.moduleCache = options.moduleCache || new Map();
30
+ this.externalCache = new Map();
31
+ builtinModules.forEach((m) => this.externalCache.set(m, m));
32
+ }
33
+ async run(file) {
34
+ return await this.cachedRequest(`/@fs/${slash(resolve(file))}`, []);
35
+ }
36
+ async cachedRequest(rawId, callstack) {
37
+ var _a, _b;
38
+ const id = normalizeId$1(rawId, this.options.base);
39
+ const fsPath = toFilePath(id, this.root);
40
+ if ((_a = this.moduleCache.get(fsPath)) == null ? void 0 : _a.promise)
41
+ return (_b = this.moduleCache.get(fsPath)) == null ? void 0 : _b.promise;
42
+ const promise = this.directRequest(id, fsPath, callstack);
43
+ this.setCache(fsPath, { promise });
44
+ return await promise;
45
+ }
46
+ async directRequest(id, fsPath, callstack) {
47
+ callstack = [...callstack, id];
48
+ const request = async (dep) => {
49
+ var _a;
50
+ if (callstack.includes(dep)) {
51
+ const cacheKey = toFilePath(dep, this.root);
52
+ if (!((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports))
53
+ throw new Error(`Circular dependency detected
54
+ Stack:
55
+ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
56
+ return this.moduleCache.get(cacheKey).exports;
57
+ }
58
+ return this.cachedRequest(dep, callstack);
59
+ };
60
+ if (this.options.requestStubs && id in this.options.requestStubs)
61
+ return this.options.requestStubs[id];
62
+ const { code: transformed, externalize } = await this.options.fetchModule(id);
63
+ if (externalize) {
64
+ const mod = await interpretedImport(externalize, this.options.interpretDefault ?? true);
65
+ this.setCache(fsPath, { exports: mod });
66
+ return mod;
67
+ }
68
+ if (transformed == null)
69
+ throw new Error(`failed to load ${id}`);
70
+ const url = pathToFileURL(fsPath).href;
71
+ const exports = {};
72
+ this.setCache(fsPath, { code: transformed, exports });
73
+ const __filename = fileURLToPath(url);
74
+ const moduleProxy = {
75
+ set exports(value) {
76
+ exportAll(exports, value);
77
+ exports.default = value;
78
+ },
79
+ get exports() {
80
+ return exports.default;
81
+ }
82
+ };
83
+ const context = this.prepareContext({
84
+ __vite_ssr_import__: request,
85
+ __vite_ssr_dynamic_import__: request,
86
+ __vite_ssr_exports__: exports,
87
+ __vite_ssr_exportAll__: (obj) => exportAll(exports, obj),
88
+ __vite_ssr_import_meta__: { url },
89
+ require: createRequire(url),
90
+ exports,
91
+ module: moduleProxy,
92
+ __filename,
93
+ __dirname: dirname(__filename)
94
+ });
95
+ const fn = vm.runInThisContext(`async (${Object.keys(context).join(",")})=>{{${transformed}
96
+ }}`, {
97
+ filename: fsPath,
98
+ lineOffset: 0
99
+ });
100
+ await fn(...Object.values(context));
101
+ return exports;
102
+ }
103
+ prepareContext(context) {
104
+ return context;
105
+ }
106
+ setCache(id, mod) {
107
+ if (!this.moduleCache.has(id))
108
+ this.moduleCache.set(id, mod);
109
+ else
110
+ Object.assign(this.moduleCache.get(id), mod);
111
+ }
112
+ }
113
+ function hasNestedDefault(target) {
114
+ return "__esModule" in target && target.__esModule && "default" in target.default;
115
+ }
116
+ function proxyMethod(name, tryDefault) {
117
+ return function(target, key, ...args) {
118
+ const result = Reflect[name](target, key, ...args);
119
+ if (typeof target.default !== "object")
120
+ return result;
121
+ if (tryDefault && key === "default" || typeof result === "undefined")
122
+ return Reflect[name](target.default, key, ...args);
123
+ return result;
124
+ };
125
+ }
126
+ async function interpretedImport(path, interpretDefault) {
127
+ const mod = await import(path);
128
+ if (interpretDefault && "default" in mod) {
129
+ const tryDefault = hasNestedDefault(mod);
130
+ return new Proxy(mod, {
131
+ get: proxyMethod("get", tryDefault),
132
+ set: proxyMethod("set", tryDefault),
133
+ has: proxyMethod("has", tryDefault),
134
+ deleteProperty: proxyMethod("deleteProperty", tryDefault)
135
+ });
136
+ }
137
+ return mod;
138
+ }
139
+ function exportAll(exports, sourceModule) {
140
+ for (const key in sourceModule) {
141
+ if (key !== "default") {
142
+ try {
143
+ Object.defineProperty(exports, key, {
144
+ enumerable: true,
145
+ configurable: true,
146
+ get() {
147
+ return sourceModule[key];
148
+ }
149
+ });
150
+ } catch (_err) {
151
+ }
152
+ }
153
+ }
154
+ }
155
+
24
156
  var __defProp = Object.defineProperty;
25
157
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
26
158
  var __hasOwnProp = Object.prototype.hasOwnProperty;
@@ -149,202 +281,94 @@ function createMocker(root, mockMap) {
149
281
  };
150
282
  }
151
283
 
152
- const stubRequests = {
153
- "/@vite/client": {
154
- injectQuery: (id) => id,
155
- createHotContext() {
156
- return {
157
- accept: () => {
158
- },
159
- prune: () => {
160
- }
161
- };
162
- },
163
- updateStyle() {
164
- }
165
- }
166
- };
167
- function hasNestedDefault(target) {
168
- return "__esModule" in target && target.__esModule && "default" in target.default;
169
- }
170
- function proxyMethod(name, isNested) {
171
- return function(target, key, ...args) {
172
- const result = Reflect[name](target, key, ...args);
173
- if (isNested && key === "default" || !result)
174
- return Reflect[name](target.default, key, ...args);
175
- return result;
176
- };
177
- }
178
- async function interpretedImport(path, interpretDefault) {
179
- const mod = await import(path);
180
- if (interpretDefault && "default" in mod) {
181
- const isNested = hasNestedDefault(mod);
182
- return new Proxy(mod, {
183
- get: proxyMethod("get", isNested),
184
- set: proxyMethod("set", isNested),
185
- has: proxyMethod("has", isNested),
186
- deleteProperty: proxyMethod("deleteProperty", isNested)
187
- });
188
- }
189
- return mod;
190
- }
191
284
  async function executeInViteNode(options) {
192
- const { moduleCache, root, files, fetch, mockMap, base } = options;
193
- const externalCache = new Map();
194
- builtinModules.forEach((m) => externalCache.set(m, m));
195
- const {
196
- getActualPath,
197
- getSuiteFilepath,
198
- mockObject,
199
- mockPath,
200
- clearMocks,
201
- unmockPath,
202
- resolveMockPath,
203
- resolveDependency
204
- } = createMocker(root, mockMap);
285
+ const runner = new VitestRunner(options);
205
286
  const result = [];
206
- for (const file of files)
207
- result.push(await cachedRequest(`/@fs/${slash(resolve(file))}`, []));
287
+ for (const file of options.files)
288
+ result.push(await runner.run(file));
208
289
  return result;
209
- async function callFunctionMock(dep, mock) {
210
- var _a;
211
- const name = `${dep}__mock`;
212
- const cached = (_a = moduleCache.get(name)) == null ? void 0 : _a.exports;
213
- if (cached)
214
- return cached;
215
- const exports = await mock();
216
- setCache(name, { exports });
217
- return exports;
218
- }
219
- async function directRequest(id, fsPath, callstack) {
220
- callstack = [...callstack, id];
221
- const suite = getSuiteFilepath();
222
- const request = async (dep, canMock = true) => {
223
- var _a, _b;
224
- if (canMock) {
225
- const mocks = mockMap[suite || ""] || {};
226
- const mock = mocks[resolveDependency(dep)];
227
- if (mock === null) {
228
- const mockedKey = `${dep}__mock`;
229
- const cache = moduleCache.get(mockedKey);
230
- if (cache == null ? void 0 : cache.exports)
231
- return cache.exports;
232
- const cacheKey = toFilePath(dep, root);
233
- const mod = ((_a = moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await cachedRequest(dep, callstack);
234
- const exports2 = mockObject(mod);
235
- setCache(mockedKey, { exports: exports2 });
236
- return exports2;
290
+ }
291
+ class VitestRunner extends ViteNodeRunner {
292
+ constructor(options) {
293
+ super(options);
294
+ this.options = options;
295
+ options.requestStubs = options.requestStubs || {
296
+ "/@vite/client": {
297
+ injectQuery: (id) => id,
298
+ createHotContext() {
299
+ return {
300
+ accept: () => {
301
+ },
302
+ prune: () => {
303
+ }
304
+ };
305
+ },
306
+ updateStyle() {
237
307
  }
238
- if (typeof mock === "function")
239
- return callFunctionMock(dep, mock);
240
- if (typeof mock === "string")
241
- dep = mock;
242
308
  }
243
- if (callstack.includes(dep)) {
244
- const cacheKey = toFilePath(dep, root);
245
- if (!((_b = moduleCache.get(cacheKey)) == null ? void 0 : _b.exports))
246
- throw new Error(`Circular dependency detected
247
- Stack:
248
- ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
249
- return moduleCache.get(cacheKey).exports;
250
- }
251
- return cachedRequest(dep, callstack);
252
309
  };
253
- if (id in stubRequests)
254
- return stubRequests[id];
255
- const { code: transformed, externalize } = await fetch(id);
256
- if (externalize) {
257
- const mod = await interpretedImport(externalize, options.interpretDefault);
258
- setCache(fsPath, { exports: mod });
259
- return mod;
260
- }
261
- if (transformed == null)
262
- throw new Error(`failed to load ${id}`);
263
- const url = pathToFileURL(fsPath).href;
264
- const exports = {};
265
- setCache(fsPath, { code: transformed, exports });
266
- const __filename = fileURLToPath(url);
267
- const moduleProxy = {
268
- set exports(value) {
269
- exportAll(exports, value);
270
- exports.default = value;
271
- },
272
- get exports() {
273
- return exports.default;
310
+ this.mocker = createMocker(this.root, options.mockMap);
311
+ }
312
+ prepareContext(context) {
313
+ const suite = this.mocker.getSuiteFilepath();
314
+ const mockMap = this.options.mockMap;
315
+ const request = context.__vite_ssr_import__;
316
+ const callFunctionMock = async (dep, mock) => {
317
+ var _a;
318
+ const name = `${dep}__mock`;
319
+ const cached = (_a = this.moduleCache.get(name)) == null ? void 0 : _a.exports;
320
+ if (cached)
321
+ return cached;
322
+ const exports = await mock();
323
+ this.setCache(name, { exports });
324
+ return exports;
325
+ };
326
+ const requestWithMock = async (dep) => {
327
+ var _a;
328
+ const mocks = mockMap[suite || ""] || {};
329
+ const mock = mocks[this.mocker.resolveDependency(dep)];
330
+ if (mock === null) {
331
+ const mockedKey = `${dep}__mock`;
332
+ const cache = this.moduleCache.get(mockedKey);
333
+ if (cache == null ? void 0 : cache.exports)
334
+ return cache.exports;
335
+ const cacheKey = toFilePath(dep, this.root);
336
+ const mod = ((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await request(dep);
337
+ const exports = this.mocker.mockObject(mod);
338
+ this.setCache(mockedKey, { exports });
339
+ return exports;
274
340
  }
341
+ if (typeof mock === "function")
342
+ return callFunctionMock(dep, mock);
343
+ if (typeof mock === "string")
344
+ dep = mock;
345
+ return request(dep);
275
346
  };
276
347
  const importActual = (path, nmName) => {
277
- return request(getActualPath(path, nmName), false);
348
+ return request(this.mocker.getActualPath(path, nmName));
278
349
  };
279
- async function importMock(path, nmName) {
350
+ const importMock = async (path, nmName) => {
280
351
  if (!suite)
281
352
  throw new Error("You can import mock only inside of a running test");
282
- const mock = (mockMap[suite] || {})[path] || resolveMockPath(path, root, nmName);
353
+ const mock = (mockMap[suite] || {})[path] || this.mocker.resolveMockPath(path, this.root, nmName);
283
354
  if (mock === null) {
284
- const fsPath2 = getActualPath(path, nmName);
285
- const mod = await request(fsPath2, false);
286
- return mockObject(mod);
355
+ const fsPath = this.mocker.getActualPath(path, nmName);
356
+ const mod = await request(fsPath);
357
+ return this.mocker.mockObject(mod);
287
358
  }
288
359
  if (typeof mock === "function")
289
360
  return callFunctionMock(path, mock);
290
- return request(mock, true);
291
- }
292
- const context = {
293
- __vite_ssr_import__: request,
294
- __vite_ssr_dynamic_import__: request,
295
- __vite_ssr_exports__: exports,
296
- __vite_ssr_exportAll__: (obj) => exportAll(exports, obj),
297
- __vite_ssr_import_meta__: { url },
298
- __vitest__mock__: mockPath,
299
- __vitest__unmock__: unmockPath,
361
+ return requestWithMock(mock);
362
+ };
363
+ return Object.assign(context, {
364
+ __vite_ssr_import__: requestWithMock,
365
+ __vite_ssr_dynamic_import__: requestWithMock,
366
+ __vitest__mock__: this.mocker.mockPath,
367
+ __vitest__unmock__: this.mocker.unmockPath,
300
368
  __vitest__importActual__: importActual,
301
369
  __vitest__importMock__: importMock,
302
- __vitest__clearMocks__: clearMocks,
303
- require: createRequire(url),
304
- exports,
305
- module: moduleProxy,
306
- __filename,
307
- __dirname: dirname(__filename)
308
- };
309
- const fn = vm.runInThisContext(`async (${Object.keys(context).join(",")})=>{{${transformed}
310
- }}`, {
311
- filename: fsPath,
312
- lineOffset: 0
370
+ __vitest__clearMocks__: this.mocker.clearMocks
313
371
  });
314
- await fn(...Object.values(context));
315
- return exports;
316
- }
317
- function setCache(id, mod) {
318
- if (!moduleCache.has(id))
319
- moduleCache.set(id, mod);
320
- else
321
- Object.assign(moduleCache.get(id), mod);
322
- }
323
- async function cachedRequest(rawId, callstack) {
324
- var _a, _b;
325
- const id = normalizeId(rawId, base);
326
- const fsPath = toFilePath(id, root);
327
- if ((_a = moduleCache.get(fsPath)) == null ? void 0 : _a.promise)
328
- return (_b = moduleCache.get(fsPath)) == null ? void 0 : _b.promise;
329
- const promise = directRequest(id, fsPath, callstack);
330
- setCache(fsPath, { promise });
331
- return await promise;
332
- }
333
- function exportAll(exports, sourceModule) {
334
- for (const key in sourceModule) {
335
- if (key !== "default") {
336
- try {
337
- Object.defineProperty(exports, key, {
338
- enumerable: true,
339
- configurable: true,
340
- get() {
341
- return sourceModule[key];
342
- }
343
- });
344
- } catch (_err) {
345
- }
346
- }
347
- }
348
372
  }
349
373
  }
350
374
 
@@ -367,16 +391,13 @@ async function startViteNode(ctx) {
367
391
  files: [
368
392
  resolve(distDir, "entry.js")
369
393
  ],
370
- fetch(id) {
394
+ fetchModule(id) {
371
395
  return rpc().fetch(id);
372
396
  },
373
397
  moduleCache,
374
398
  mockMap,
399
+ interpretDefault: config.deps.interpretDefault ?? true,
375
400
  root: config.root,
376
- depsInline: config.depsInline,
377
- depsExternal: config.depsExternal,
378
- fallbackCJS: config.fallbackCJS,
379
- interpretDefault: config.interpretDefault,
380
401
  base: config.base
381
402
  }))[0];
382
403
  _viteNode = { run: run2, collect: collect2 };
@@ -391,8 +412,7 @@ function init(ctx) {
391
412
  ctx,
392
413
  moduleCache,
393
414
  config,
394
- rpc: createBirpc({
395
- functions: {},
415
+ rpc: createBirpc({}, {
396
416
  eventNames: ["onUserLog", "onCollected", "onWorkerExit"],
397
417
  post(v) {
398
418
  port.postMessage(v);
@@ -418,4 +438,4 @@ async function run(ctx) {
418
438
  }
419
439
 
420
440
  export { collect, run };
421
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uL3NyYy9ub2RlL21vY2tlci50cyIsIi4uL3NyYy9ub2RlL2V4ZWN1dGUudHMiLCIuLi9zcmMvcnVudGltZS93b3JrZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYmFzZSAmJiBpZC5zdGFydHNXaXRoKGJhc2UpKVxuICAgIGlkID0gYC8ke2lkLnNsaWNlKGJhc2UubGVuZ3RoKX1gXG5cbiAgcmV0dXJuIGlkXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgJ1xcMCcpIC8vIHZpcnR1YWwgbW9kdWxlcyBzdGFydCB3aXRoIGBcXDBgXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC8vLCAnJylcbiAgICAucmVwbGFjZSgvXl9fdml0ZS1icm93c2VyLWV4dGVybmFsOi8sICcnKVxuICAgIC5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICAucmVwbGFjZSgvWz8mXXY9XFx3Ky8sICc/JykgLy8gcmVtb3ZlID92PSBxdWVyeVxuICAgIC5yZXBsYWNlKC9cXD8kLywgJycpIC8vIHJlbW92ZSBlbmQgcXVlcnkgbWFya1xufVxuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IGlzTm9kZUJ1aWx0aW4gfSBmcm9tICdtbGx5J1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB7IHNwaWVzLCBzcHlPbiB9IGZyb20gJy4uL2ludGVncmF0aW9ucy9qZXN0LW1vY2snXG5pbXBvcnQgeyBtZXJnZVNsYXNoZXMsIG5vcm1hbGl6ZUlkIH0gZnJvbSAnLi4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VpdGVNb2NrcyB7XG4gIFtzdWl0ZVBhdGg6IHN0cmluZ106IHtcbiAgICBbb3JpZ2luYWxQYXRoOiBzdHJpbmddOiBzdHJpbmcgfCBudWxsIHwgKCgpID0+IGFueSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9ja1BhdGgobW9ja1BhdGg6IHN0cmluZywgcm9vdDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nIHwgbnVsbCkge1xuICBjb25zdCBwYXRoID0gbm9ybWFsaXplSWQoZXh0ZXJuYWwgfHwgbW9ja1BhdGgpXG5cbiAgLy8gaXQncyBhIG5vZGVfbW9kdWxlIGFsaWFzXG4gIC8vIGFsbCBtb2NrcyBzaG91bGQgYmUgaW5zaWRlIDxyb290Pi9fX21vY2tzX19cbiAgaWYgKGV4dGVybmFsIHx8IGlzTm9kZUJ1aWx0aW4obW9ja1BhdGgpKSB7XG4gICAgY29uc3QgbW9ja0Rpcm5hbWUgPSBkaXJuYW1lKHBhdGgpIC8vIGZvciBuZXN0ZWQgbW9ja3M6IEB2dWV1c2UvaW50ZWdyYXRpb24vdXNlSnd0XG4gICAgY29uc3QgYmFzZUZpbGVuYW1lID0gYmFzZW5hbWUocGF0aClcbiAgICBjb25zdCBtb2NrRm9sZGVyID0gcmVzb2x2ZShyb290LCAnX19tb2Nrc19fJywgbW9ja0Rpcm5hbWUpXG5cbiAgICBpZiAoIWV4aXN0c1N5bmMobW9ja0ZvbGRlcikpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vY2tGb2xkZXIpXG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IFtiYXNlbmFtZV0gPSBmaWxlLnNwbGl0KCcuJylcbiAgICAgIGlmIChiYXNlbmFtZSA9PT0gYmFzZUZpbGVuYW1lKVxuICAgICAgICByZXR1cm4gcmVzb2x2ZShtb2NrRm9sZGVyLCBmaWxlKS5yZXBsYWNlKHJvb3QsICcnKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBkaXIgPSBkaXJuYW1lKHBhdGgpXG4gIGNvbnN0IGJhc2VJZCA9IGJhc2VuYW1lKHBhdGgpXG4gIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsICdfX21vY2tzX18nLCBiYXNlSWQpXG4gIHJldHVybiBleGlzdHNTeW5jKGZ1bGxQYXRoKSA/IGZ1bGxQYXRoLnJlcGxhY2Uocm9vdCwgJycpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RUeXBlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG5mdW5jdGlvbiBtb2NrUHJvdG90eXBlKHByb3RvOiBhbnkpIHtcbiAgaWYgKCFwcm90bykgcmV0dXJuIG51bGxcblxuICBjb25zdCBuZXdQcm90bzogYW55ID0ge31cblxuICBjb25zdCBwcm90b0Rlc2NyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3QgZCBpbiBwcm90b0Rlc2NyKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld1Byb3RvLCBkLCBwcm90b0Rlc2NyW2RdKVxuXG4gICAgaWYgKHR5cGVvZiBwcm90b0Rlc2NyW2RdLnZhbHVlID09PSAnZnVuY3Rpb24nKVxuICAgICAgc3B5T24obmV3UHJvdG8sIGQpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSlcbiAgfVxuXG4gIHJldHVybiBuZXdQcm90b1xufVxuXG5mdW5jdGlvbiBtb2NrT2JqZWN0KG9iajogYW55KSB7XG4gIGNvbnN0IHR5cGUgPSBnZXRPYmplY3RUeXBlKG9iailcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgIHJldHVybiBbXVxuICBlbHNlIGlmICh0eXBlICE9PSAnT2JqZWN0JyAmJiB0eXBlICE9PSAnTW9kdWxlJylcbiAgICByZXR1cm4gb2JqXG5cbiAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfVxuXG4gIGNvbnN0IHByb3RvID0gbW9ja1Byb3RvdHlwZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSlcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld09iaiwgcHJvdG8pXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICBuZXdPYmpba10gPSBtb2NrT2JqZWN0KG9ialtrXSlcbiAgICBjb25zdCB0eXBlID0gZ2V0T2JqZWN0VHlwZShvYmpba10pXG5cbiAgICBpZiAodHlwZS5pbmNsdWRlcygnRnVuY3Rpb24nKSAmJiAhb2JqW2tdLl9faXNTcHkpIHtcbiAgICAgIHNweU9uKG5ld09iaiwgaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09ialtrXSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDAgfSkgLy8gdGlueXNweSByZXRhaW5zIGxlbmd0aCwgYnV0IGplc3QgZG9lc250XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmpcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tlcihyb290OiBzdHJpbmcsIG1vY2tNYXA6IFN1aXRlTW9ja3MpIHtcbiAgZnVuY3Rpb24gZ2V0U3VpdGVGaWxlcGF0aCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXz8uZmlsZXBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFjdHVhbFBhdGgocGF0aDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nKSB7XG4gICAgaWYgKGV4dGVybmFsKVxuICAgICAgcmV0dXJuIG1lcmdlU2xhc2hlcyhgL0Bmcy8ke3BhdGh9YClcblxuICAgIHJldHVybiBub3JtYWxpemVJZChwYXRoLnJlcGxhY2Uocm9vdCwgJycpKVxuICB9XG5cbiAgZnVuY3Rpb24gdW5tb2NrUGF0aChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VpdGVmaWxlID0gZ2V0U3VpdGVGaWxlcGF0aCgpXG5cbiAgICBpZiAoc3VpdGVmaWxlKSB7XG4gICAgICBjb25zdCBmc1BhdGggPSBnZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSlcbiAgICAgIG1vY2tNYXBbc3VpdGVmaWxlXSA/Pz0ge31cbiAgICAgIGRlbGV0ZSBtb2NrTWFwW3N1aXRlZmlsZV1bZnNQYXRoXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vY2tQYXRoKHBhdGg6IHN0cmluZywgbm1OYW1lOiBzdHJpbmcsIGZhY3Rvcnk/OiAoKSA9PiBhbnkpIHtcbiAgICBjb25zdCBzdWl0ZWZpbGUgPSBnZXRTdWl0ZUZpbGVwYXRoKClcblxuICAgIGlmIChzdWl0ZWZpbGUpIHtcbiAgICAgIGNvbnN0IGZzUGF0aCA9IGdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdID8/PSB7fVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdW2ZzUGF0aF0gPSBmYWN0b3J5IHx8IHJlc29sdmVNb2NrUGF0aChwYXRoLCByb290LCBubU5hbWUpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJNb2Nrcyh7IGNsZWFyTW9ja3MsIG1vY2tSZXNldCwgcmVzdG9yZU1vY2tzIH06IHsgY2xlYXJNb2NrczogYm9vbGVhbjsgbW9ja1Jlc2V0OiBib29sZWFuOyByZXN0b3JlTW9ja3M6IGJvb2xlYW59KSB7XG4gICAgaWYgKCFjbGVhck1vY2tzICYmICFtb2NrUmVzZXQgJiYgIXJlc3RvcmVNb2NrcylcbiAgICAgIHJldHVyblxuXG4gICAgc3BpZXMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgaWYgKHJlc3RvcmVNb2NrcylcbiAgICAgICAgcy5tb2NrUmVzdG9yZSgpXG4gICAgICBlbHNlIGlmIChtb2NrUmVzZXQpXG4gICAgICAgIHMubW9ja1Jlc2V0KClcbiAgICAgIGVsc2UgaWYgKGNsZWFyTW9ja3MpXG4gICAgICAgIHMubW9ja0NsZWFyKClcbiAgICB9KVxuICB9XG5cbiAgLy8gbnBtIHJlc29sdmVzIGFzIC9ub2RlX21vZHVsZXMsIGJ1dCB3ZSBzdG9yZSBhcyAvQGZzLy4uLi9ub2RlX21vZHVsZXNcbiAgZnVuY3Rpb24gcmVzb2x2ZURlcGVuZGVuY3koZGVwOiBzdHJpbmcpIHtcbiAgICBpZiAoZGVwLnN0YXJ0c1dpdGgoJy9ub2RlX21vZHVsZXMvJykpXG4gICAgICByZXR1cm4gbWVyZ2VTbGFzaGVzKGAvQGZzLyR7am9pbihyb290LCBkZXApfWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQoZGVwKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb2NrUGF0aCxcbiAgICB1bm1vY2tQYXRoLFxuICAgIGNsZWFyTW9ja3MsXG4gICAgZ2V0QWN0dWFsUGF0aCxcblxuICAgIG1vY2tPYmplY3QsXG4gICAgZ2V0U3VpdGVGaWxlcGF0aCxcbiAgICByZXNvbHZlTW9ja1BhdGgsXG4gICAgcmVzb2x2ZURlcGVuZGVuY3ksXG4gIH1cbn1cbiIsImltcG9ydCB7IGJ1aWx0aW5Nb2R1bGVzLCBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCB2bSBmcm9tICd2bSdcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB0eXBlIHsgRmV0Y2hGdW5jdGlvbiwgTW9kdWxlQ2FjaGUsIFJlc29sdmVkQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBub3JtYWxpemVJZCwgc2xhc2gsIHRvRmlsZVBhdGggfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB0eXBlIHsgU3VpdGVNb2NrcyB9IGZyb20gJy4vbW9ja2VyJ1xuaW1wb3J0IHsgY3JlYXRlTW9ja2VyIH0gZnJvbSAnLi9tb2NrZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZU9wdGlvbnMgZXh0ZW5kcyBQaWNrPFJlc29sdmVkQ29uZmlnLCAnZGVwc0lubGluZScgfCAnZGVwc0V4dGVybmFsJyB8ICdmYWxsYmFja0NKUycgfCAnYmFzZSc+IHtcbiAgcm9vdDogc3RyaW5nXG4gIGZpbGVzOiBzdHJpbmdbXVxuICBmZXRjaDogRmV0Y2hGdW5jdGlvblxuICBpbnRlcnByZXREZWZhdWx0OiBib29sZWFuXG4gIG1vZHVsZUNhY2hlOiBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT5cbiAgbW9ja01hcDogU3VpdGVNb2Nrc1xufVxuXG5leHBvcnQgY29uc3Qgc3R1YlJlcXVlc3RzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAnL0B2aXRlL2NsaWVudCc6IHtcbiAgICBpbmplY3RRdWVyeTogKGlkOiBzdHJpbmcpID0+IGlkLFxuICAgIGNyZWF0ZUhvdENvbnRleHQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NlcHQ6ICgpID0+IHt9LFxuICAgICAgICBwcnVuZTogKCkgPT4ge30sXG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVTdHlsZSgpIHt9LFxuICB9LFxufVxuXG5mdW5jdGlvbiBoYXNOZXN0ZWREZWZhdWx0KHRhcmdldDogYW55KSB7XG4gIHJldHVybiAnX19lc01vZHVsZScgaW4gdGFyZ2V0ICYmIHRhcmdldC5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiB0YXJnZXQuZGVmYXVsdFxufVxuXG5mdW5jdGlvbiBwcm94eU1ldGhvZChuYW1lOiAnZ2V0JyB8ICdzZXQnIHwgJ2hhcycgfCAnZGVsZXRlUHJvcGVydHknLCBpc05lc3RlZDogYm9vbGVhbikge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIGtleTogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBbYW55PywgYW55P10pIHtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0W25hbWVdKHRhcmdldCwga2V5LCAuLi5hcmdzKVxuICAgIGlmICgoaXNOZXN0ZWQgJiYga2V5ID09PSAnZGVmYXVsdCcpIHx8ICFyZXN1bHQpXG4gICAgICByZXR1cm4gUmVmbGVjdFtuYW1lXSh0YXJnZXQuZGVmYXVsdCwga2V5LCAuLi5hcmdzKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW50ZXJwcmV0ZWRJbXBvcnQocGF0aDogc3RyaW5nLCBpbnRlcnByZXREZWZhdWx0OiBib29sZWFuKSB7XG4gIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydChwYXRoKVxuXG4gIGlmIChpbnRlcnByZXREZWZhdWx0ICYmICdkZWZhdWx0JyBpbiBtb2QpIHtcbiAgICBjb25zdCBpc05lc3RlZCA9IGhhc05lc3RlZERlZmF1bHQobW9kKVxuICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICBnZXQ6IHByb3h5TWV0aG9kKCdnZXQnLCBpc05lc3RlZCksXG4gICAgICBzZXQ6IHByb3h5TWV0aG9kKCdzZXQnLCBpc05lc3RlZCksXG4gICAgICBoYXM6IHByb3h5TWV0aG9kKCdoYXMnLCBpc05lc3RlZCksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogcHJveHlNZXRob2QoJ2RlbGV0ZVByb3BlcnR5JywgaXNOZXN0ZWQpLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbW9kXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlSW5WaXRlTm9kZShvcHRpb25zOiBFeGVjdXRlT3B0aW9ucykge1xuICBjb25zdCB7IG1vZHVsZUNhY2hlLCByb290LCBmaWxlcywgZmV0Y2gsIG1vY2tNYXAsIGJhc2UgfSA9IG9wdGlvbnNcblxuICBjb25zdCBleHRlcm5hbENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IFByb21pc2U8ZmFsc2UgfCBzdHJpbmc+PigpXG4gIGJ1aWx0aW5Nb2R1bGVzLmZvckVhY2gobSA9PiBleHRlcm5hbENhY2hlLnNldChtLCBtKSlcblxuICBjb25zdCB7XG4gICAgZ2V0QWN0dWFsUGF0aCxcbiAgICBnZXRTdWl0ZUZpbGVwYXRoLFxuICAgIG1vY2tPYmplY3QsXG4gICAgbW9ja1BhdGgsXG4gICAgY2xlYXJNb2NrcyxcbiAgICB1bm1vY2tQYXRoLFxuICAgIHJlc29sdmVNb2NrUGF0aCxcbiAgICByZXNvbHZlRGVwZW5kZW5jeSxcbiAgfSA9IGNyZWF0ZU1vY2tlcihyb290LCBtb2NrTWFwKVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcylcbiAgICByZXN1bHQucHVzaChhd2FpdCBjYWNoZWRSZXF1ZXN0KGAvQGZzLyR7c2xhc2gocmVzb2x2ZShmaWxlKSl9YCwgW10pKVxuICByZXR1cm4gcmVzdWx0XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FsbEZ1bmN0aW9uTW9jayhkZXA6IHN0cmluZywgbW9jazogKCkgPT4gYW55KSB7XG4gICAgY29uc3QgbmFtZSA9IGAke2RlcH1fX21vY2tgXG4gICAgY29uc3QgY2FjaGVkID0gbW9kdWxlQ2FjaGUuZ2V0KG5hbWUpPy5leHBvcnRzXG4gICAgaWYgKGNhY2hlZClcbiAgICAgIHJldHVybiBjYWNoZWRcbiAgICBjb25zdCBleHBvcnRzID0gYXdhaXQgbW9jaygpXG4gICAgc2V0Q2FjaGUobmFtZSwgeyBleHBvcnRzIH0pXG4gICAgcmV0dXJuIGV4cG9ydHNcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpcmVjdFJlcXVlc3QoaWQ6IHN0cmluZywgZnNQYXRoOiBzdHJpbmcsIGNhbGxzdGFjazogc3RyaW5nW10pIHtcbiAgICBjYWxsc3RhY2sgPSBbLi4uY2FsbHN0YWNrLCBpZF1cbiAgICBjb25zdCBzdWl0ZSA9IGdldFN1aXRlRmlsZXBhdGgoKVxuICAgIGNvbnN0IHJlcXVlc3QgPSBhc3luYyhkZXA6IHN0cmluZywgY2FuTW9jayA9IHRydWUpID0+IHtcbiAgICAgIGlmIChjYW5Nb2NrKSB7XG4gICAgICAgIGNvbnN0IG1vY2tzID0gbW9ja01hcFtzdWl0ZSB8fCAnJ10gfHwge31cbiAgICAgICAgY29uc3QgbW9jayA9IG1vY2tzW3Jlc29sdmVEZXBlbmRlbmN5KGRlcCldXG4gICAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbW9ja2VkS2V5ID0gYCR7ZGVwfV9fbW9ja2BcbiAgICAgICAgICBjb25zdCBjYWNoZSA9IG1vZHVsZUNhY2hlLmdldChtb2NrZWRLZXkpXG4gICAgICAgICAgaWYgKGNhY2hlPy5leHBvcnRzKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmV4cG9ydHNcbiAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRvRmlsZVBhdGgoZGVwLCByb290KVxuICAgICAgICAgIGNvbnN0IG1vZCA9IG1vZHVsZUNhY2hlLmdldChjYWNoZUtleSk/LmV4cG9ydHMgfHwgYXdhaXQgY2FjaGVkUmVxdWVzdChkZXAsIGNhbGxzdGFjaylcbiAgICAgICAgICBjb25zdCBleHBvcnRzID0gbW9ja09iamVjdChtb2QpXG4gICAgICAgICAgc2V0Q2FjaGUobW9ja2VkS2V5LCB7IGV4cG9ydHMgfSlcbiAgICAgICAgICByZXR1cm4gZXhwb3J0c1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbW9jayA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhkZXAsIG1vY2spXG4gICAgICAgIGlmICh0eXBlb2YgbW9jayA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgZGVwID0gbW9ja1xuICAgICAgfVxuICAgICAgaWYgKGNhbGxzdGFjay5pbmNsdWRlcyhkZXApKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdG9GaWxlUGF0aChkZXAsIHJvb3QpXG4gICAgICAgIGlmICghbW9kdWxlQ2FjaGUuZ2V0KGNhY2hlS2V5KT8uZXhwb3J0cylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWRcXG5TdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcChwID0+IGAtICR7cH1gKS5qb2luKCdcXG4nKX1gKVxuICAgICAgICByZXR1cm4gbW9kdWxlQ2FjaGUuZ2V0KGNhY2hlS2V5KSEuZXhwb3J0c1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlZFJlcXVlc3QoZGVwLCBjYWxsc3RhY2spXG4gICAgfVxuXG4gICAgaWYgKGlkIGluIHN0dWJSZXF1ZXN0cylcbiAgICAgIHJldHVybiBzdHViUmVxdWVzdHNbaWRdXG5cbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgZmV0Y2goaWQpXG4gICAgaWYgKGV4dGVybmFsaXplKSB7XG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbnRlcnByZXRlZEltcG9ydChleHRlcm5hbGl6ZSwgb3B0aW9ucy5pbnRlcnByZXREZWZhdWx0KVxuICAgICAgc2V0Q2FjaGUoZnNQYXRoLCB7IGV4cG9ydHM6IG1vZCB9KVxuICAgICAgcmV0dXJuIG1vZFxuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1lZCA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke2lkfWApXG5cbiAgICAvLyBkaXNhbWJpZ3VhdGUgdGhlIGA8VU5JVD46L2Agb24gd2luZG93czogc2VlIG5vZGVqcy9ub2RlIzMxNzEwXG4gICAgY29uc3QgdXJsID0gcGF0aFRvRmlsZVVSTChmc1BhdGgpLmhyZWZcbiAgICBjb25zdCBleHBvcnRzOiBhbnkgPSB7fVxuXG4gICAgc2V0Q2FjaGUoZnNQYXRoLCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHBvcnRzIH0pXG5cbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aCh1cmwpXG4gICAgY29uc3QgbW9kdWxlUHJveHkgPSB7XG4gICAgICBzZXQgZXhwb3J0cyh2YWx1ZSkge1xuICAgICAgICBleHBvcnRBbGwoZXhwb3J0cywgdmFsdWUpXG4gICAgICAgIGV4cG9ydHMuZGVmYXVsdCA9IHZhbHVlXG4gICAgICB9LFxuICAgICAgZ2V0IGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmRlZmF1bHRcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0QWN0dWFsID0gKHBhdGg6IHN0cmluZywgbm1OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiByZXF1ZXN0KGdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKSwgZmFsc2UpXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaW1wb3J0TW9jayhwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGlmICghc3VpdGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBpbXBvcnQgbW9jayBvbmx5IGluc2lkZSBvZiBhIHJ1bm5pbmcgdGVzdCcpXG5cbiAgICAgIGNvbnN0IG1vY2sgPSAobW9ja01hcFtzdWl0ZV0gfHwge30pW3BhdGhdIHx8IHJlc29sdmVNb2NrUGF0aChwYXRoLCByb290LCBubU5hbWUpXG4gICAgICBpZiAobW9jayA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmc1BhdGggPSBnZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSlcbiAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgcmVxdWVzdChmc1BhdGgsIGZhbHNlKVxuICAgICAgICByZXR1cm4gbW9ja09iamVjdChtb2QpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBjYWxsRnVuY3Rpb25Nb2NrKHBhdGgsIG1vY2spXG4gICAgICByZXR1cm4gcmVxdWVzdChtb2NrLCB0cnVlKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAvLyBlc20gdHJhbnNmb3JtZWQgYnkgVml0ZVxuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0c19fOiBleHBvcnRzLFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRBbGxfXzogKG9iajogYW55KSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X21ldGFfXzogeyB1cmwgfSxcblxuICAgICAgLy8gdml0ZXN0Lm1vY2sgQVBJXG4gICAgICBfX3ZpdGVzdF9fbW9ja19fOiBtb2NrUGF0aCxcbiAgICAgIF9fdml0ZXN0X191bm1vY2tfXzogdW5tb2NrUGF0aCxcbiAgICAgIF9fdml0ZXN0X19pbXBvcnRBY3R1YWxfXzogaW1wb3J0QWN0dWFsLFxuICAgICAgX192aXRlc3RfX2ltcG9ydE1vY2tfXzogaW1wb3J0TW9jayxcbiAgICAgIC8vIHNwaWVzIGZyb20gJ2plc3QtbW9jaycgYXJlIGRpZmZlcmVudCBpbnNpZGUgc3VpdGVzIGFuZCBleGVjdXRlLFxuICAgICAgLy8gc28gd2VlIG5lZWQgdG8gY2FsbCB0aGlzIHR3aWNlIC0gaW5zaWRlIHN1aXRlIGFuZCBoZXJlXG4gICAgICBfX3ZpdGVzdF9fY2xlYXJNb2Nrc19fOiBjbGVhck1vY2tzLFxuXG4gICAgICAvLyBjanMgY29tcGFjdFxuICAgICAgcmVxdWlyZTogY3JlYXRlUmVxdWlyZSh1cmwpLFxuICAgICAgZXhwb3J0cyxcbiAgICAgIG1vZHVsZTogbW9kdWxlUHJveHksXG4gICAgICBfX2ZpbGVuYW1lLFxuICAgICAgX19kaXJuYW1lOiBkaXJuYW1lKF9fZmlsZW5hbWUpLFxuICAgIH1cblxuICAgIGNvbnN0IGZuID0gdm0ucnVuSW5UaGlzQ29udGV4dChgYXN5bmMgKCR7T2JqZWN0LmtleXMoY29udGV4dCkuam9pbignLCcpfSk9Pnt7JHt0cmFuc2Zvcm1lZH1cXG59fWAsIHtcbiAgICAgIGZpbGVuYW1lOiBmc1BhdGgsXG4gICAgICBsaW5lT2Zmc2V0OiAwLFxuICAgIH0pXG4gICAgYXdhaXQgZm4oLi4uT2JqZWN0LnZhbHVlcyhjb250ZXh0KSlcblxuICAgIHJldHVybiBleHBvcnRzXG4gIH1cblxuICBmdW5jdGlvbiBzZXRDYWNoZShpZDogc3RyaW5nLCBtb2Q6IFBhcnRpYWw8TW9kdWxlQ2FjaGU+KSB7XG4gICAgaWYgKCFtb2R1bGVDYWNoZS5oYXMoaWQpKVxuICAgICAgbW9kdWxlQ2FjaGUuc2V0KGlkLCBtb2QpXG4gICAgZWxzZVxuICAgICAgT2JqZWN0LmFzc2lnbihtb2R1bGVDYWNoZS5nZXQoaWQpLCBtb2QpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYWNoZWRSZXF1ZXN0KHJhd0lkOiBzdHJpbmcsIGNhbGxzdGFjazogc3RyaW5nW10pIHtcbiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkKHJhd0lkLCBiYXNlKVxuICAgIGNvbnN0IGZzUGF0aCA9IHRvRmlsZVBhdGgoaWQsIHJvb3QpXG5cbiAgICBpZiAobW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCk/LnByb21pc2UpXG4gICAgICByZXR1cm4gbW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCk/LnByb21pc2VcblxuICAgIGNvbnN0IHByb21pc2UgPSBkaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjaylcbiAgICBzZXRDYWNoZShmc1BhdGgsIHsgcHJvbWlzZSB9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzOiBhbnksIHNvdXJjZU1vZHVsZTogYW55KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlTW9kdWxlKSB7XG4gICAgICBpZiAoa2V5ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0KCkgeyByZXR1cm4gc291cmNlTW9kdWxlW2tleV0gfSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB0eXBlIHsgQmlycGNSZXR1cm4gfSBmcm9tICdiaXJwYydcbmltcG9ydCB7IGNyZWF0ZUJpcnBjIH0gZnJvbSAnYmlycGMnXG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNhY2hlLCBSZXNvbHZlZENvbmZpZywgVGVzdCwgV29ya2VyQ29udGV4dCwgV29ya2VyUlBDIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBkaXN0RGlyIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZXhlY3V0ZUluVml0ZU5vZGUgfSBmcm9tICcuLi9ub2RlL2V4ZWN1dGUnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYydcblxubGV0IF92aXRlTm9kZToge1xuICBydW46IChmaWxlczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpID0+IFByb21pc2U8dm9pZD5cbiAgY29sbGVjdDogKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykgPT4gUHJvbWlzZTx2b2lkPlxufVxuY29uc3QgbW9kdWxlQ2FjaGU6IE1hcDxzdHJpbmcsIE1vZHVsZUNhY2hlPiA9IG5ldyBNYXAoKVxuY29uc3QgbW9ja01hcCA9IHt9XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0Vml0ZU5vZGUoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGlmIChfdml0ZU5vZGUpXG4gICAgcmV0dXJuIF92aXRlTm9kZVxuXG4gIGNvbnN0IHByb2Nlc3NFeGl0ID0gcHJvY2Vzcy5leGl0XG5cbiAgcHJvY2Vzcy5vbignYmVmb3JlRXhpdCcsIChjb2RlKSA9PiB7XG4gICAgcnBjKCkub25Xb3JrZXJFeGl0KGNvZGUpXG4gIH0pXG5cbiAgcHJvY2Vzcy5leGl0ID0gKGNvZGUgPSBwcm9jZXNzLmV4aXRDb2RlIHx8IDApOiBuZXZlciA9PiB7XG4gICAgcnBjKCkub25Xb3JrZXJFeGl0KGNvZGUpXG4gICAgcmV0dXJuIHByb2Nlc3NFeGl0KGNvZGUpXG4gIH1cblxuICBjb25zdCB7IGNvbmZpZyB9ID0gY3R4XG5cbiAgY29uc3QgeyBydW4sIGNvbGxlY3QgfSA9IChhd2FpdCBleGVjdXRlSW5WaXRlTm9kZSh7XG4gICAgZmlsZXM6IFtcbiAgICAgIHJlc29sdmUoZGlzdERpciwgJ2VudHJ5LmpzJyksXG4gICAgXSxcbiAgICBmZXRjaChpZCkge1xuICAgICAgcmV0dXJuIHJwYygpLmZldGNoKGlkKVxuICAgIH0sXG4gICAgbW9kdWxlQ2FjaGUsXG4gICAgbW9ja01hcCxcbiAgICByb290OiBjb25maWcucm9vdCxcbiAgICBkZXBzSW5saW5lOiBjb25maWcuZGVwc0lubGluZSxcbiAgICBkZXBzRXh0ZXJuYWw6IGNvbmZpZy5kZXBzRXh0ZXJuYWwsXG4gICAgZmFsbGJhY2tDSlM6IGNvbmZpZy5mYWxsYmFja0NKUyxcbiAgICBpbnRlcnByZXREZWZhdWx0OiBjb25maWcuaW50ZXJwcmV0RGVmYXVsdCxcbiAgICBiYXNlOiBjb25maWcuYmFzZSxcbiAgfSkpWzBdXG5cbiAgX3ZpdGVOb2RlID0geyBydW4sIGNvbGxlY3QgfVxuXG4gIHJldHVybiBfdml0ZU5vZGVcbn1cblxuZnVuY3Rpb24gaW5pdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gJiYgY3R4LmNvbmZpZy50aHJlYWRzICYmIGN0eC5jb25maWcuaXNvbGF0ZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdvcmtlciBmb3IgJHtjdHguZmlsZXMuam9pbignLCcpfSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5ICR7cHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdHguZmlsZXMuam9pbignLCcpfS4gVGhpcyBpcyBwcm9iYWJseSBhbiBpbnRlcm5hbCBidWcgb2YgVml0ZXN0LmApXG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcMCcpXG5cbiAgY29uc3QgeyBjb25maWcsIHBvcnQgfSA9IGN0eFxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gPSB7XG4gICAgY3R4LFxuICAgIG1vZHVsZUNhY2hlLFxuICAgIGNvbmZpZyxcbiAgICBycGM6IGNyZWF0ZUJpcnBjPHt9LCBXb3JrZXJSUEM+KHtcbiAgICAgIGZ1bmN0aW9uczoge30sXG4gICAgICBldmVudE5hbWVzOiBbJ29uVXNlckxvZycsICdvbkNvbGxlY3RlZCcsICdvbldvcmtlckV4aXQnXSxcbiAgICAgIHBvc3QodikgeyBwb3J0LnBvc3RNZXNzYWdlKHYpIH0sXG4gICAgICBvbihmbikgeyBwb3J0LmFkZExpc3RlbmVyKCdtZXNzYWdlJywgZm4pIH0sXG4gICAgfSksXG4gIH1cblxuICBpZiAoY3R4LmludmFsaWRhdGVzKVxuICAgIGN0eC5pbnZhbGlkYXRlcy5mb3JFYWNoKGkgPT4gbW9kdWxlQ2FjaGUuZGVsZXRlKGkpKVxuICBjdHguZmlsZXMuZm9yRWFjaChpID0+IG1vZHVsZUNhY2hlLmRlbGV0ZShpKSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3QoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IGNvbGxlY3QgfSA9IGF3YWl0IHN0YXJ0Vml0ZU5vZGUoY3R4KVxuICByZXR1cm4gY29sbGVjdChjdHguZmlsZXMsIGN0eC5jb25maWcpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgc3RhcnRWaXRlTm9kZShjdHgpXG4gIHJldHVybiBydW4oY3R4LmZpbGVzLCBjdHguY29uZmlnKVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgIGludGVyZmFjZSBQcm9jZXNzIHtcbiAgICAgIF9fdml0ZXN0X3dvcmtlcl9fOiB7XG4gICAgICAgIGN0eDogV29ya2VyQ29udGV4dFxuICAgICAgICBjb25maWc6IFJlc29sdmVkQ29uZmlnXG4gICAgICAgIHJwYzogQmlycGNSZXR1cm48V29ya2VyUlBDPlxuICAgICAgICBjdXJyZW50PzogVGVzdFxuICAgICAgICBmaWxlcGF0aD86IHN0cmluZ1xuICAgICAgICBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxTQUFTLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pMOztBQ0pBLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDdEMsSUFBSSxtQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDdkQsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDbkQsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJLGVB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
441
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uLy4uL3ZpdGUtbm9kZS9kaXN0L2NsaWVudC5qcyIsIi4uL3NyYy9ub2RlL21vY2tlci50cyIsIi4uL3NyYy9ub2RlL2V4ZWN1dGUudHMiLCIuLi9zcmMvcnVudGltZS93b3JrZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYmFzZSAmJiBpZC5zdGFydHNXaXRoKGJhc2UpKVxuICAgIGlkID0gYC8ke2lkLnNsaWNlKGJhc2UubGVuZ3RoKX1gXG5cbiAgcmV0dXJuIGlkXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgJ1xcMCcpIC8vIHZpcnR1YWwgbW9kdWxlcyBzdGFydCB3aXRoIGBcXDBgXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC8vLCAnJylcbiAgICAucmVwbGFjZSgvXl9fdml0ZS1icm93c2VyLWV4dGVybmFsOi8sICcnKVxuICAgIC5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICAucmVwbGFjZSgvWz8mXXY9XFx3Ky8sICc/JykgLy8gcmVtb3ZlID92PSBxdWVyeVxuICAgIC5yZXBsYWNlKC9cXD8kLywgJycpIC8vIHJlbW92ZSBlbmQgcXVlcnkgbWFya1xufVxuIiwiaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMsIGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCwgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IHsgcmVzb2x2ZSwgZGlybmFtZSB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IHNsYXNoLCBub3JtYWxpemVJZCwgdG9GaWxlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5jbGFzcyBWaXRlTm9kZVJ1bm5lciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucm9vdCA9IG9wdGlvbnMucm9vdCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHRoaXMubW9kdWxlQ2FjaGUgPSBvcHRpb25zLm1vZHVsZUNhY2hlIHx8IG5ldyBNYXAoKTtcbiAgICB0aGlzLmV4dGVybmFsQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgYnVpbHRpbk1vZHVsZXMuZm9yRWFjaCgobSkgPT4gdGhpcy5leHRlcm5hbENhY2hlLnNldChtLCBtKSk7XG4gIH1cbiAgYXN5bmMgcnVuKGZpbGUpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZWRSZXF1ZXN0KGAvQGZzLyR7c2xhc2gocmVzb2x2ZShmaWxlKSl9YCwgW10pO1xuICB9XG4gIGFzeW5jIGNhY2hlZFJlcXVlc3QocmF3SWQsIGNhbGxzdGFjaykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgaWQgPSBub3JtYWxpemVJZChyYXdJZCwgdGhpcy5vcHRpb25zLmJhc2UpO1xuICAgIGNvbnN0IGZzUGF0aCA9IHRvRmlsZVBhdGgoaWQsIHRoaXMucm9vdCk7XG4gICAgaWYgKChfYSA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wcm9taXNlKVxuICAgICAgcmV0dXJuIChfYiA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCkpID09IG51bGwgPyB2b2lkIDAgOiBfYi5wcm9taXNlO1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QoaWQsIGZzUGF0aCwgY2FsbHN0YWNrKTtcbiAgICB0aGlzLnNldENhY2hlKGZzUGF0aCwgeyBwcm9taXNlIH0pO1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9XG4gIGFzeW5jIGRpcmVjdFJlcXVlc3QoaWQsIGZzUGF0aCwgY2FsbHN0YWNrKSB7XG4gICAgY2FsbHN0YWNrID0gWy4uLmNhbGxzdGFjaywgaWRdO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBhc3luYyAoZGVwKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoY2FsbHN0YWNrLmluY2x1ZGVzKGRlcCkpIHtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgdGhpcy5yb290KTtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoY2FjaGVLZXkpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZXhwb3J0cykpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkXG5TdGFjazpcbiR7Wy4uLmNhbGxzdGFjaywgZGVwXS5yZXZlcnNlKCkubWFwKChwKSA9PiBgLSAke3B9YCkuam9pbihcIlxcblwiKX1gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGNhY2hlS2V5KS5leHBvcnRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUmVxdWVzdChkZXAsIGNhbGxzdGFjayk7XG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcXVlc3RTdHVicyAmJiBpZCBpbiB0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzKVxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnNbaWRdO1xuICAgIGNvbnN0IHsgY29kZTogdHJhbnNmb3JtZWQsIGV4dGVybmFsaXplIH0gPSBhd2FpdCB0aGlzLm9wdGlvbnMuZmV0Y2hNb2R1bGUoaWQpO1xuICAgIGlmIChleHRlcm5hbGl6ZSkge1xuICAgICAgY29uc3QgbW9kID0gYXdhaXQgaW50ZXJwcmV0ZWRJbXBvcnQoZXh0ZXJuYWxpemUsIHRoaXMub3B0aW9ucy5pbnRlcnByZXREZWZhdWx0ID8/IHRydWUpO1xuICAgICAgdGhpcy5zZXRDYWNoZShmc1BhdGgsIHsgZXhwb3J0czogbW9kIH0pO1xuICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybWVkID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkICR7aWR9YCk7XG4gICAgY29uc3QgdXJsID0gcGF0aFRvRmlsZVVSTChmc1BhdGgpLmhyZWY7XG4gICAgY29uc3QgZXhwb3J0cyA9IHt9O1xuICAgIHRoaXMuc2V0Q2FjaGUoZnNQYXRoLCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHBvcnRzIH0pO1xuICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKHVybCk7XG4gICAgY29uc3QgbW9kdWxlUHJveHkgPSB7XG4gICAgICBzZXQgZXhwb3J0cyh2YWx1ZSkge1xuICAgICAgICBleHBvcnRBbGwoZXhwb3J0cywgdmFsdWUpO1xuICAgICAgICBleHBvcnRzLmRlZmF1bHQgPSB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVDb250ZXh0KHtcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2R5bmFtaWNfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydHNfXzogZXhwb3J0cyxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0QWxsX186IChvYmopID0+IGV4cG9ydEFsbChleHBvcnRzLCBvYmopLFxuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfbWV0YV9fOiB7IHVybCB9LFxuICAgICAgcmVxdWlyZTogY3JlYXRlUmVxdWlyZSh1cmwpLFxuICAgICAgZXhwb3J0cyxcbiAgICAgIG1vZHVsZTogbW9kdWxlUHJveHksXG4gICAgICBfX2ZpbGVuYW1lLFxuICAgICAgX19kaXJuYW1lOiBkaXJuYW1lKF9fZmlsZW5hbWUpXG4gICAgfSk7XG4gICAgY29uc3QgZm4gPSB2bS5ydW5JblRoaXNDb250ZXh0KGBhc3luYyAoJHtPYmplY3Qua2V5cyhjb250ZXh0KS5qb2luKFwiLFwiKX0pPT57eyR7dHJhbnNmb3JtZWR9XG59fWAsIHtcbiAgICAgIGZpbGVuYW1lOiBmc1BhdGgsXG4gICAgICBsaW5lT2Zmc2V0OiAwXG4gICAgfSk7XG4gICAgYXdhaXQgZm4oLi4uT2JqZWN0LnZhbHVlcyhjb250ZXh0KSk7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH1cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG4gIHNldENhY2hlKGlkLCBtb2QpIHtcbiAgICBpZiAoIXRoaXMubW9kdWxlQ2FjaGUuaGFzKGlkKSlcbiAgICAgIHRoaXMubW9kdWxlQ2FjaGUuc2V0KGlkLCBtb2QpO1xuICAgIGVsc2VcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2R1bGVDYWNoZS5nZXQoaWQpLCBtb2QpO1xuICB9XG59XG5mdW5jdGlvbiBoYXNOZXN0ZWREZWZhdWx0KHRhcmdldCkge1xuICByZXR1cm4gXCJfX2VzTW9kdWxlXCIgaW4gdGFyZ2V0ICYmIHRhcmdldC5fX2VzTW9kdWxlICYmIFwiZGVmYXVsdFwiIGluIHRhcmdldC5kZWZhdWx0O1xufVxuZnVuY3Rpb24gcHJveHlNZXRob2QobmFtZSwgdHJ5RGVmYXVsdCkge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0W25hbWVdKHRhcmdldCwga2V5LCAuLi5hcmdzKTtcbiAgICBpZiAodHlwZW9mIHRhcmdldC5kZWZhdWx0ICE9PSBcIm9iamVjdFwiKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAodHJ5RGVmYXVsdCAmJiBrZXkgPT09IFwiZGVmYXVsdFwiIHx8IHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICByZXR1cm4gUmVmbGVjdFtuYW1lXSh0YXJnZXQuZGVmYXVsdCwga2V5LCAuLi5hcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gaW50ZXJwcmV0ZWRJbXBvcnQocGF0aCwgaW50ZXJwcmV0RGVmYXVsdCkge1xuICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQocGF0aCk7XG4gIGlmIChpbnRlcnByZXREZWZhdWx0ICYmIFwiZGVmYXVsdFwiIGluIG1vZCkge1xuICAgIGNvbnN0IHRyeURlZmF1bHQgPSBoYXNOZXN0ZWREZWZhdWx0KG1vZCk7XG4gICAgcmV0dXJuIG5ldyBQcm94eShtb2QsIHtcbiAgICAgIGdldDogcHJveHlNZXRob2QoXCJnZXRcIiwgdHJ5RGVmYXVsdCksXG4gICAgICBzZXQ6IHByb3h5TWV0aG9kKFwic2V0XCIsIHRyeURlZmF1bHQpLFxuICAgICAgaGFzOiBwcm94eU1ldGhvZChcImhhc1wiLCB0cnlEZWZhdWx0KSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBwcm94eU1ldGhvZChcImRlbGV0ZVByb3BlcnR5XCIsIHRyeURlZmF1bHQpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1vZDtcbn1cbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlTW9kdWxlKSB7XG4gICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlTW9kdWxlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgVml0ZU5vZGVSdW5uZXIgfTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyBpc05vZGVCdWlsdGluIH0gZnJvbSAnbWxseSdcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgeyBzcGllcywgc3B5T24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvamVzdC1tb2NrJ1xuaW1wb3J0IHsgbWVyZ2VTbGFzaGVzLCBub3JtYWxpemVJZCB9IGZyb20gJy4uL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBTdWl0ZU1vY2tzID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8ICgoKSA9PiBhbnkpPj5cblxuZnVuY3Rpb24gcmVzb2x2ZU1vY2tQYXRoKG1vY2tQYXRoOiBzdHJpbmcsIHJvb3Q6IHN0cmluZywgZXh0ZXJuYWw6IHN0cmluZyB8IG51bGwpIHtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZUlkKGV4dGVybmFsIHx8IG1vY2tQYXRoKVxuXG4gIC8vIGl0J3MgYSBub2RlX21vZHVsZSBhbGlhc1xuICAvLyBhbGwgbW9ja3Mgc2hvdWxkIGJlIGluc2lkZSA8cm9vdD4vX19tb2Nrc19fXG4gIGlmIChleHRlcm5hbCB8fCBpc05vZGVCdWlsdGluKG1vY2tQYXRoKSkge1xuICAgIGNvbnN0IG1vY2tEaXJuYW1lID0gZGlybmFtZShwYXRoKSAvLyBmb3IgbmVzdGVkIG1vY2tzOiBAdnVldXNlL2ludGVncmF0aW9uL3VzZUp3dFxuICAgIGNvbnN0IGJhc2VGaWxlbmFtZSA9IGJhc2VuYW1lKHBhdGgpXG4gICAgY29uc3QgbW9ja0ZvbGRlciA9IHJlc29sdmUocm9vdCwgJ19fbW9ja3NfXycsIG1vY2tEaXJuYW1lKVxuXG4gICAgaWYgKCFleGlzdHNTeW5jKG1vY2tGb2xkZXIpKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgZmlsZXMgPSByZWFkZGlyU3luYyhtb2NrRm9sZGVyKVxuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBbYmFzZW5hbWVdID0gZmlsZS5zcGxpdCgnLicpXG4gICAgICBpZiAoYmFzZW5hbWUgPT09IGJhc2VGaWxlbmFtZSlcbiAgICAgICAgcmV0dXJuIHJlc29sdmUobW9ja0ZvbGRlciwgZmlsZSkucmVwbGFjZShyb290LCAnJylcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgZGlyID0gZGlybmFtZShwYXRoKVxuICBjb25zdCBiYXNlSWQgPSBiYXNlbmFtZShwYXRoKVxuICBjb25zdCBmdWxsUGF0aCA9IHJlc29sdmUoZGlyLCAnX19tb2Nrc19fJywgYmFzZUlkKVxuICByZXR1cm4gZXhpc3RzU3luYyhmdWxsUGF0aCkgPyBmdWxsUGF0aC5yZXBsYWNlKHJvb3QsICcnKSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0VHlwZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuZnVuY3Rpb24gbW9ja1Byb3RvdHlwZShwcm90bzogYW55KSB7XG4gIGlmICghcHJvdG8pIHJldHVybiBudWxsXG5cbiAgY29uc3QgbmV3UHJvdG86IGFueSA9IHt9XG5cbiAgY29uc3QgcHJvdG9EZXNjciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBmb3IgKGNvbnN0IGQgaW4gcHJvdG9EZXNjcikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdQcm90bywgZCwgcHJvdG9EZXNjcltkXSlcblxuICAgIGlmICh0eXBlb2YgcHJvdG9EZXNjcltkXS52YWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIHNweU9uKG5ld1Byb3RvLCBkKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pXG4gIH1cblxuICByZXR1cm4gbmV3UHJvdG9cbn1cblxuZnVuY3Rpb24gbW9ja09iamVjdChvYmo6IGFueSkge1xuICBjb25zdCB0eXBlID0gZ2V0T2JqZWN0VHlwZShvYmopXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSlcbiAgICByZXR1cm4gW11cbiAgZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcgJiYgdHlwZSAhPT0gJ01vZHVsZScpXG4gICAgcmV0dXJuIG9ialxuXG4gIGNvbnN0IG5ld09iaiA9IHsgLi4ub2JqIH1cblxuICBjb25zdCBwcm90byA9IG1vY2tQcm90b3R5cGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdPYmosIHByb3RvKVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBmb3IgKGNvbnN0IGsgaW4gb2JqKSB7XG4gICAgbmV3T2JqW2tdID0gbW9ja09iamVjdChvYmpba10pXG4gICAgY29uc3QgdHlwZSA9IGdldE9iamVjdFR5cGUob2JqW2tdKVxuXG4gICAgaWYgKHR5cGUuaW5jbHVkZXMoJ0Z1bmN0aW9uJykgJiYgIW9ialtrXS5fX2lzU3B5KSB7XG4gICAgICBzcHlPbihuZXdPYmosIGspLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSlcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmpba10sICdsZW5ndGgnLCB7IHZhbHVlOiAwIH0pIC8vIHRpbnlzcHkgcmV0YWlucyBsZW5ndGgsIGJ1dCBqZXN0IGRvZXNudFxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3T2JqXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrZXIocm9vdDogc3RyaW5nLCBtb2NrTWFwOiBTdWl0ZU1vY2tzKSB7XG4gIGZ1bmN0aW9uIGdldFN1aXRlRmlsZXBhdGgoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18/LmZpbGVwYXRoXG4gIH1cblxuICBmdW5jdGlvbiBnZXRBY3R1YWxQYXRoKHBhdGg6IHN0cmluZywgZXh0ZXJuYWw6IHN0cmluZykge1xuICAgIGlmIChleHRlcm5hbClcbiAgICAgIHJldHVybiBtZXJnZVNsYXNoZXMoYC9AZnMvJHtwYXRofWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQocGF0aC5yZXBsYWNlKHJvb3QsICcnKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVubW9ja1BhdGgocGF0aDogc3RyaW5nLCBubU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN1aXRlZmlsZSA9IGdldFN1aXRlRmlsZXBhdGgoKVxuXG4gICAgaWYgKHN1aXRlZmlsZSkge1xuICAgICAgY29uc3QgZnNQYXRoID0gZ2V0QWN0dWFsUGF0aChwYXRoLCBubU5hbWUpXG4gICAgICBtb2NrTWFwW3N1aXRlZmlsZV0gPz89IHt9XG4gICAgICBkZWxldGUgbW9ja01hcFtzdWl0ZWZpbGVdW2ZzUGF0aF1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb2NrUGF0aChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nLCBmYWN0b3J5PzogKCkgPT4gYW55KSB7XG4gICAgY29uc3Qgc3VpdGVmaWxlID0gZ2V0U3VpdGVGaWxlcGF0aCgpXG5cbiAgICBpZiAoc3VpdGVmaWxlKSB7XG4gICAgICBjb25zdCBmc1BhdGggPSBnZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSlcbiAgICAgIG1vY2tNYXBbc3VpdGVmaWxlXSA/Pz0ge31cbiAgICAgIG1vY2tNYXBbc3VpdGVmaWxlXVtmc1BhdGhdID0gZmFjdG9yeSB8fCByZXNvbHZlTW9ja1BhdGgocGF0aCwgcm9vdCwgbm1OYW1lKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTW9ja3MoeyBjbGVhck1vY2tzLCBtb2NrUmVzZXQsIHJlc3RvcmVNb2NrcyB9OiB7IGNsZWFyTW9ja3M6IGJvb2xlYW47IG1vY2tSZXNldDogYm9vbGVhbjsgcmVzdG9yZU1vY2tzOiBib29sZWFuIH0pIHtcbiAgICBpZiAoIWNsZWFyTW9ja3MgJiYgIW1vY2tSZXNldCAmJiAhcmVzdG9yZU1vY2tzKVxuICAgICAgcmV0dXJuXG5cbiAgICBzcGllcy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBpZiAocmVzdG9yZU1vY2tzKVxuICAgICAgICBzLm1vY2tSZXN0b3JlKClcbiAgICAgIGVsc2UgaWYgKG1vY2tSZXNldClcbiAgICAgICAgcy5tb2NrUmVzZXQoKVxuICAgICAgZWxzZSBpZiAoY2xlYXJNb2NrcylcbiAgICAgICAgcy5tb2NrQ2xlYXIoKVxuICAgIH0pXG4gIH1cblxuICAvLyBucG0gcmVzb2x2ZXMgYXMgL25vZGVfbW9kdWxlcywgYnV0IHdlIHN0b3JlIGFzIC9AZnMvLi4uL25vZGVfbW9kdWxlc1xuICBmdW5jdGlvbiByZXNvbHZlRGVwZW5kZW5jeShkZXA6IHN0cmluZykge1xuICAgIGlmIChkZXAuc3RhcnRzV2l0aCgnL25vZGVfbW9kdWxlcy8nKSlcbiAgICAgIHJldHVybiBtZXJnZVNsYXNoZXMoYC9AZnMvJHtqb2luKHJvb3QsIGRlcCl9YClcblxuICAgIHJldHVybiBub3JtYWxpemVJZChkZXApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vY2tQYXRoLFxuICAgIHVubW9ja1BhdGgsXG4gICAgY2xlYXJNb2NrcyxcbiAgICBnZXRBY3R1YWxQYXRoLFxuXG4gICAgbW9ja09iamVjdCxcbiAgICBnZXRTdWl0ZUZpbGVwYXRoLFxuICAgIHJlc29sdmVNb2NrUGF0aCxcbiAgICByZXNvbHZlRGVwZW5kZW5jeSxcbiAgfVxufVxuIiwiaW1wb3J0IHsgVml0ZU5vZGVSdW5uZXIgfSBmcm9tICd2aXRlLW5vZGUvY2xpZW50J1xuaW1wb3J0IHsgdG9GaWxlUGF0aCB9IGZyb20gJ3ZpdGUtbm9kZS91dGlscydcbmltcG9ydCB0eXBlIHsgVml0ZU5vZGVSdW5uZXJPcHRpb25zIH0gZnJvbSAndml0ZS1ub2RlJ1xuaW1wb3J0IHR5cGUgeyBTdWl0ZU1vY2tzIH0gZnJvbSAnLi9tb2NrZXInXG5pbXBvcnQgeyBjcmVhdGVNb2NrZXIgfSBmcm9tICcuL21vY2tlcidcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlT3B0aW9ucyBleHRlbmRzIFZpdGVOb2RlUnVubmVyT3B0aW9ucyB7XG4gIGZpbGVzOiBzdHJpbmdbXVxuICBtb2NrTWFwOiBTdWl0ZU1vY2tzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlSW5WaXRlTm9kZShvcHRpb25zOiBFeGVjdXRlT3B0aW9ucykge1xuICBjb25zdCBydW5uZXIgPSBuZXcgVml0ZXN0UnVubmVyKG9wdGlvbnMpXG5cbiAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdXG4gIGZvciAoY29uc3QgZmlsZSBvZiBvcHRpb25zLmZpbGVzKVxuICAgIHJlc3VsdC5wdXNoKGF3YWl0IHJ1bm5lci5ydW4oZmlsZSkpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY2xhc3MgVml0ZXN0UnVubmVyIGV4dGVuZHMgVml0ZU5vZGVSdW5uZXIge1xuICBtb2NrZXI6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZU1vY2tlcj5cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgb3B0aW9ucy5yZXF1ZXN0U3R1YnMgPSBvcHRpb25zLnJlcXVlc3RTdHVicyB8fCB7XG4gICAgICAnL0B2aXRlL2NsaWVudCc6IHtcbiAgICAgICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICAgICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHBydW5lOiAoKSA9PiB7fSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVN0eWxlKCkge30sXG4gICAgICB9LFxuICAgIH1cblxuICAgIHRoaXMubW9ja2VyID0gY3JlYXRlTW9ja2VyKHRoaXMucm9vdCwgb3B0aW9ucy5tb2NrTWFwKVxuICB9XG5cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IHN1aXRlID0gdGhpcy5tb2NrZXIuZ2V0U3VpdGVGaWxlcGF0aCgpXG4gICAgY29uc3QgbW9ja01hcCA9IHRoaXMub3B0aW9ucy5tb2NrTWFwXG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuX192aXRlX3Nzcl9pbXBvcnRfX1xuXG4gICAgY29uc3QgY2FsbEZ1bmN0aW9uTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nLCBtb2NrOiAoKSA9PiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBgJHtkZXB9X19tb2NrYFxuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobmFtZSk/LmV4cG9ydHNcbiAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBtb2NrKClcbiAgICAgIHRoaXMuc2V0Q2FjaGUobmFtZSwgeyBleHBvcnRzIH0pXG4gICAgICByZXR1cm4gZXhwb3J0c1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RXaXRoTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtb2NrcyA9IG1vY2tNYXBbc3VpdGUgfHwgJyddIHx8IHt9XG4gICAgICBjb25zdCBtb2NrID0gbW9ja3NbdGhpcy5tb2NrZXIucmVzb2x2ZURlcGVuZGVuY3koZGVwKV1cbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1vY2tlZEtleSA9IGAke2RlcH1fX21vY2tgXG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobW9ja2VkS2V5KVxuICAgICAgICBpZiAoY2FjaGU/LmV4cG9ydHMpXG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmV4cG9ydHNcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgdGhpcy5yb290KVxuICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZUtleSk/LmV4cG9ydHMgfHwgYXdhaXQgcmVxdWVzdChkZXApXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLm1vY2tlci5tb2NrT2JqZWN0KG1vZClcbiAgICAgICAgdGhpcy5zZXRDYWNoZShtb2NrZWRLZXksIHsgZXhwb3J0cyB9KVxuICAgICAgICByZXR1cm4gZXhwb3J0c1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhkZXAsIG1vY2spXG4gICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdzdHJpbmcnKVxuICAgICAgICBkZXAgPSBtb2NrXG4gICAgICByZXR1cm4gcmVxdWVzdChkZXApXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydEFjdHVhbCA9IChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcmVxdWVzdCh0aGlzLm1vY2tlci5nZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSkpXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1vY2sgPSBhc3luYyhwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIGlmICghc3VpdGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBpbXBvcnQgbW9jayBvbmx5IGluc2lkZSBvZiBhIHJ1bm5pbmcgdGVzdCcpXG5cbiAgICAgIGNvbnN0IG1vY2sgPSAobW9ja01hcFtzdWl0ZV0gfHwge30pW3BhdGhdIHx8IHRoaXMubW9ja2VyLnJlc29sdmVNb2NrUGF0aChwYXRoLCB0aGlzLnJvb3QsIG5tTmFtZSlcbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZzUGF0aCA9IHRoaXMubW9ja2VyLmdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCByZXF1ZXN0KGZzUGF0aClcbiAgICAgICAgcmV0dXJuIHRoaXMubW9ja2VyLm1vY2tPYmplY3QobW9kKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhwYXRoLCBtb2NrKVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoTW9jayhtb2NrKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbnRleHQsIHtcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3RXaXRoTW9jayxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdFdpdGhNb2NrLFxuXG4gICAgICAvLyB2aXRlc3QubW9jayBBUElcbiAgICAgIF9fdml0ZXN0X19tb2NrX186IHRoaXMubW9ja2VyLm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX3VubW9ja19fOiB0aGlzLm1vY2tlci51bm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX2ltcG9ydEFjdHVhbF9fOiBpbXBvcnRBY3R1YWwsXG4gICAgICBfX3ZpdGVzdF9faW1wb3J0TW9ja19fOiBpbXBvcnRNb2NrLFxuICAgICAgLy8gc3BpZXMgZnJvbSAnamVzdC1tb2NrJyBhcmUgZGlmZmVyZW50IGluc2lkZSBzdWl0ZXMgYW5kIGV4ZWN1dGUsXG4gICAgICAvLyBzbyB3ZWUgbmVlZCB0byBjYWxsIHRoaXMgdHdpY2UgLSBpbnNpZGUgc3VpdGUgYW5kIGhlcmVcbiAgICAgIF9fdml0ZXN0X19jbGVhck1vY2tzX186IHRoaXMubW9ja2VyLmNsZWFyTW9ja3MsXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHR5cGUgeyBCaXJwY1JldHVybiB9IGZyb20gJ2JpcnBjJ1xuaW1wb3J0IHsgY3JlYXRlQmlycGMgfSBmcm9tICdiaXJwYydcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ2FjaGUsIFJlc29sdmVkQ29uZmlnLCBUZXN0LCBXb3JrZXJDb250ZXh0LCBXb3JrZXJSUEMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGRpc3REaXIgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBleGVjdXRlSW5WaXRlTm9kZSB9IGZyb20gJy4uL25vZGUvZXhlY3V0ZSdcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuXG5sZXQgX3ZpdGVOb2RlOiB7XG4gIHJ1bjogKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykgPT4gUHJvbWlzZTx2b2lkPlxuICBjb2xsZWN0OiAoZmlsZXM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5jb25zdCBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+ID0gbmV3IE1hcCgpXG5jb25zdCBtb2NrTWFwID0ge31cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRWaXRlTm9kZShjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKF92aXRlTm9kZSlcbiAgICByZXR1cm4gX3ZpdGVOb2RlXG5cbiAgY29uc3QgcHJvY2Vzc0V4aXQgPSBwcm9jZXNzLmV4aXRcblxuICBwcm9jZXNzLm9uKCdiZWZvcmVFeGl0JywgKGNvZGUpID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgfSlcblxuICBwcm9jZXNzLmV4aXQgPSAoY29kZSA9IHByb2Nlc3MuZXhpdENvZGUgfHwgMCk6IG5ldmVyID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgICByZXR1cm4gcHJvY2Vzc0V4aXQoY29kZSlcbiAgfVxuXG4gIGNvbnN0IHsgY29uZmlnIH0gPSBjdHhcblxuICBjb25zdCB7IHJ1biwgY29sbGVjdCB9ID0gKGF3YWl0IGV4ZWN1dGVJblZpdGVOb2RlKHtcbiAgICBmaWxlczogW1xuICAgICAgcmVzb2x2ZShkaXN0RGlyLCAnZW50cnkuanMnKSxcbiAgICBdLFxuICAgIGZldGNoTW9kdWxlKGlkKSB7XG4gICAgICByZXR1cm4gcnBjKCkuZmV0Y2goaWQpXG4gICAgfSxcbiAgICBtb2R1bGVDYWNoZSxcbiAgICBtb2NrTWFwLFxuICAgIGludGVycHJldERlZmF1bHQ6IGNvbmZpZy5kZXBzLmludGVycHJldERlZmF1bHQgPz8gdHJ1ZSxcbiAgICByb290OiBjb25maWcucm9vdCxcbiAgICBiYXNlOiBjb25maWcuYmFzZSxcbiAgfSkpWzBdXG5cbiAgX3ZpdGVOb2RlID0geyBydW4sIGNvbGxlY3QgfVxuXG4gIHJldHVybiBfdml0ZU5vZGVcbn1cblxuZnVuY3Rpb24gaW5pdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gJiYgY3R4LmNvbmZpZy50aHJlYWRzICYmIGN0eC5jb25maWcuaXNvbGF0ZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdvcmtlciBmb3IgJHtjdHguZmlsZXMuam9pbignLCcpfSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5ICR7cHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdHguZmlsZXMuam9pbignLCcpfS4gVGhpcyBpcyBwcm9iYWJseSBhbiBpbnRlcm5hbCBidWcgb2YgVml0ZXN0LmApXG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcMCcpXG5cbiAgY29uc3QgeyBjb25maWcsIHBvcnQgfSA9IGN0eFxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gPSB7XG4gICAgY3R4LFxuICAgIG1vZHVsZUNhY2hlLFxuICAgIGNvbmZpZyxcbiAgICBycGM6IGNyZWF0ZUJpcnBjPFdvcmtlclJQQz4oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnROYW1lczogWydvblVzZXJMb2cnLCAnb25Db2xsZWN0ZWQnLCAnb25Xb3JrZXJFeGl0J10sXG4gICAgICAgIHBvc3QodikgeyBwb3J0LnBvc3RNZXNzYWdlKHYpIH0sXG4gICAgICAgIG9uKGZuKSB7IHBvcnQuYWRkTGlzdGVuZXIoJ21lc3NhZ2UnLCBmbikgfSxcbiAgICAgIH0sXG4gICAgKSxcbiAgfVxuXG4gIGlmIChjdHguaW52YWxpZGF0ZXMpXG4gICAgY3R4LmludmFsaWRhdGVzLmZvckVhY2goaSA9PiBtb2R1bGVDYWNoZS5kZWxldGUoaSkpXG4gIGN0eC5maWxlcy5mb3JFYWNoKGkgPT4gbW9kdWxlQ2FjaGUuZGVsZXRlKGkpKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaW5pdChjdHgpXG4gIGNvbnN0IHsgY29sbGVjdCB9ID0gYXdhaXQgc3RhcnRWaXRlTm9kZShjdHgpXG4gIHJldHVybiBjb2xsZWN0KGN0eC5maWxlcywgY3R4LmNvbmZpZylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bihjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaW5pdChjdHgpXG4gIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBzdGFydFZpdGVOb2RlKGN0eClcbiAgcmV0dXJuIHJ1bihjdHguZmlsZXMsIGN0eC5jb25maWcpXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgaW50ZXJmYWNlIFByb2Nlc3Mge1xuICAgICAgX192aXRlc3Rfd29ya2VyX186IHtcbiAgICAgICAgY3R4OiBXb3JrZXJDb250ZXh0XG4gICAgICAgIGNvbmZpZzogUmVzb2x2ZWRDb25maWdcbiAgICAgICAgcnBjOiBCaXJwY1JldHVybjxXb3JrZXJSUEM+XG4gICAgICAgIGN1cnJlbnQ/OiBUZXN0XG4gICAgICAgIGZpbGVwYXRoPzogc3RyaW5nXG4gICAgICAgIG1vZHVsZUNhY2hlOiBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJu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