@dbx-tools/core 0.6.27 → 0.6.34

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/lib/src/exec.d.ts CHANGED
@@ -81,7 +81,7 @@ export type ExecResult = {
81
81
  };
82
82
  /** Options for {@link spawn}. Extends `SpawnOptions` except `stdio`, which is driven by `stdin` / `stdout` / `stderr`. */
83
83
  export type ExecOptions = Omit<SpawnOptions, "stdio"> & {
84
- /** `"inherit"` by default, or a string written to the process stdin. */
84
+ /** `"inherit"` by default; `"pipe"` / `"ignore"` select modes, any other string is input. */
85
85
  stdin?: ExecStdio | string;
86
86
  stdout?: StdioOption;
87
87
  stderr?: StdioOption;
@@ -98,7 +98,7 @@ export type ExecOptions = Omit<SpawnOptions, "stdio"> & {
98
98
  export type SyncExecStdio = ExecStdio | "capture";
99
99
  /** Options for {@link spawnSync}. Same shape as {@link ExecOptions} but without line-handler stdio. */
100
100
  export type SyncExecOptions = Omit<SpawnOptions, "stdio"> & {
101
- /** `"inherit"` by default, or a string written to the process stdin. */
101
+ /** `"inherit"` by default; `"pipe"` / `"ignore"` select modes, any other string is input. */
102
102
  stdin?: ExecStdio | string;
103
103
  stdout?: SyncExecStdio;
104
104
  stderr?: SyncExecStdio;
package/lib/src/exec.js CHANGED
@@ -41,6 +41,7 @@
41
41
  */
42
42
  import { spawn as nodeSpawn, spawnSync as nodeSpawnSync, } from "node:child_process";
43
43
  import * as readline from "node:readline";
44
+ import { finished } from "node:stream/promises";
44
45
  /** Shell-compatible exit code returned when an executable cannot be found. */
45
46
  export const COMMAND_NOT_FOUND_EXIT_CODE = 127;
46
47
  function parseSpawnArgs(input) {
@@ -209,6 +210,10 @@ function lineHandlers(option) {
209
210
  function isPassthroughMode(option) {
210
211
  return option === "inherit" || option === "pipe" || option === "ignore";
211
212
  }
213
+ /** True when stdin is data rather than one of the three reserved stdio modes. */
214
+ function isStdinPayload(stdin) {
215
+ return typeof stdin === "string" && !isPassthroughMode(stdin);
216
+ }
212
217
  /**
213
218
  * Map a {@link StdioOption} into a spawn stdio mode and optional line callback.
214
219
  *
@@ -268,15 +273,24 @@ function queueLineReads(reads, stream, handler) {
268
273
  /**
269
274
  * Write string stdin to a spawned process and close the stream.
270
275
  *
271
- * No-op unless `stdin` is a string and `proc.stdin` is available.
276
+ * No-op unless `stdin` is a payload string (not a stdio mode) and
277
+ * `proc.stdin` is available. A child that exits before consuming the payload
278
+ * closes its pipe; EPIPE is expected in that case and is ignored.
272
279
  *
273
280
  * @param proc - Child process returned from `spawn`
274
281
  * @param stdin - Stdio mode or string payload from {@link ExecOptions}
275
282
  */
276
- function writeStdin(proc, stdin) {
277
- if (typeof stdin === "string" && proc.stdin) {
278
- proc.stdin.write(stdin);
279
- proc.stdin.end();
283
+ async function writeStdin(proc, stdin) {
284
+ if (!isStdinPayload(stdin) || !proc.stdin)
285
+ return;
286
+ const completion = finished(proc.stdin, { cleanup: true });
287
+ proc.stdin.end(stdin);
288
+ try {
289
+ await completion;
290
+ }
291
+ catch (err) {
292
+ if (!(err instanceof Error && "code" in err && err.code === "EPIPE"))
293
+ throw err;
280
294
  }
281
295
  }
282
296
  /**
@@ -355,12 +369,12 @@ export async function spawn(...args) {
355
369
  const stderrLines = [];
356
370
  const stdoutHandler = resolveStdio(stdout, stdoutLines);
357
371
  const stderrHandler = resolveStdio(stderr, stderrLines);
358
- const stdinMode = typeof stdin === "string" ? "pipe" : (stdin ?? "inherit");
372
+ const stdinMode = isStdinPayload(stdin) ? "pipe" : (stdin ?? "inherit");
359
373
  const proc = nodeSpawn(command, commandArgs, {
360
374
  ...spawnOpts,
361
375
  stdio: [stdinMode, stdoutHandler.mode, stderrHandler.mode],
362
376
  });
363
- writeStdin(proc, stdin);
377
+ const stdinWrite = writeStdin(proc, stdin);
364
378
  const reads = [];
365
379
  queueLineReads(reads, proc.stdout, stdoutHandler);
366
380
  queueLineReads(reads, proc.stderr, stderrHandler);
@@ -368,10 +382,10 @@ export async function spawn(...args) {
368
382
  let commandNotFoundError;
369
383
  try {
370
384
  exitCode = await waitForExit(proc);
371
- await Promise.all(reads);
385
+ await Promise.all([stdinWrite, ...reads]);
372
386
  }
373
387
  catch (err) {
374
- await Promise.allSettled(reads);
388
+ await Promise.allSettled([stdinWrite, ...reads]);
375
389
  if (!isCommandNotFoundError(err))
376
390
  throw err;
377
391
  commandNotFoundError = err;
@@ -402,7 +416,7 @@ export async function spawn(...args) {
402
416
  export function spawnSync(...args) {
403
417
  const { command, commandArgs, options = {} } = parseSpawnArgs(args);
404
418
  const { stdin, stdout, stderr, check, trim, ...spawnOpts } = options;
405
- const stdinMode = typeof stdin === "string" ? "pipe" : (stdin ?? "inherit");
419
+ const stdinMode = isStdinPayload(stdin) ? "pipe" : (stdin ?? "inherit");
406
420
  const captureStdout = stdout === "capture";
407
421
  const captureStderr = stderr === "capture";
408
422
  const stdoutMode = resolveSyncStdio(stdout);
@@ -411,7 +425,7 @@ export function spawnSync(...args) {
411
425
  ...spawnOpts,
412
426
  encoding: captureStdout || captureStderr ? "utf8" : undefined,
413
427
  stdio: [stdinMode, stdoutMode, stderrMode],
414
- input: typeof stdin === "string" ? stdin : undefined,
428
+ input: isStdinPayload(stdin) ? stdin : undefined,
415
429
  });
416
430
  const commandNotFound = isCommandNotFoundError(result.error);
417
431
  const exitCode = commandNotFound ? COMMAND_NOT_FOUND_EXIT_CODE : (result.status ?? 1);
@@ -495,4 +509,4 @@ export function shlex(command) {
495
509
  push();
496
510
  return args.length ? args : [command];
497
511
  }
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsT0FBTyxFQUdMLEtBQUssSUFBSSxTQUFTLEVBQ2xCLFNBQVMsSUFBSSxhQUFhLEdBQzNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFHMUMsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztBQXFHL0MsU0FBUyxjQUFjLENBQXlCLEtBQW1CO0lBQ2pFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDL0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTztZQUNMLE9BQU87WUFDUCxXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLE9BQU8sR0FDWCxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENB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LElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0IsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNYLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDZCxTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksRUFBRSxDQUFDO1lBQ1AsU0FBUztRQUNYLENBQUM7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLElBQUksSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEVBQUUsQ0FBQztJQUVQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRhYmxlIHN1YnByb2Nlc3MgaGVscGVyIGJ1aWx0IG9uIGBjaGlsZF9wcm9jZXNzLnNwYXduYCBhbmQgbGluZSBzdHJlYW1pbmcuXG4gKlxuICogUG9ydGVkIGZyb20gYGRieC10b29scy1qcy9wYWNrYWdlcy9jbGkvc3JjL2V4ZWMudHNgLiBFYWNoIHN0ZGlvIGZkIGRlZmF1bHRzIHRvXG4gKiBgXCJpbmhlcml0XCJgLiB7QGxpbmsgc3Bhd259IHN0cmVhbXMgb3V0cHV0IGxpbmUtYnktbGluZSBpbnRvIHtAbGluayBFeGVjUmVzdWx0LnN0ZG91dExpbmVzfVxuICogLyB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRlcnJMaW5lc307IGl0cyBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnMgam9pbiB0aG9zZSBsaW5lcy5cbiAqIHtAbGluayBzcGF3blN5bmN9IGtlZXBzIHRoZSBjYXB0dXJlZCBzdHJpbmc7IGl0cyBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnMgcmVhZFxuICogdGhhdCBzdHJpbmcgZGlyZWN0bHkgKGxpbmUgYXJyYXlzIHNwbGl0IGxhemlseSBvbiByZWFkKS5cbiAqIE9taXR0ZWQgYHRyaW1gIChkZWZhdWx0KSBhcHBsaWVzIGFkYXB0aXZlIG5vcm1hbGl6YXRpb246IHtAbGluayBzcGF3blN5bmN9IGRyb3BzXG4gKiBhdCBtb3N0IG9uZSB0cmFpbGluZyBlbXB0eSBsaW5lIC8gbmV3bGluZSBgc3Bhd25TeW5jYCBhZGRzOyB7QGxpbmsgc3Bhd259IGRvZXNcbiAqIG5vdCAocmVhZGxpbmUgbmV2ZXIgZW1pdHMgdGhhdCBleHRyYSBsaW5lKS4gYHRyaW06IHRydWVgIHN0cmlwcyBhbGwgbGVhZGluZy9cbiAqIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gYm90aCBtb2RlczsgYHRyaW06IGZhbHNlYCBsZWF2ZXMgb3V0cHV0IHVuY2hhbmdlZC5cbiAqXG4gKiBAZXhhbXBsZSBDYXB0dXJlIGNvbW1hbmQgb3V0cHV0XG4gKiBgYGB0c1xuICogY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWMoXCJnaXRcIiwgW1wicmV2LXBhcnNlXCIsIFwiLS1zaG93LXRvcGxldmVsXCJdLCB7XG4gKiAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gKiAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAqICAgc3RkaW46IFwiaWdub3JlXCIsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFN0cmVhbSBhbmQgY2FwdHVyZSB0b2dldGhlclxuICogYGBgdHNcbiAqIGF3YWl0IGV4ZWMoXCJwbnBtXCIsIFtcImluc3RhbGxcIl0sIHtcbiAqICAgc3Rkb3V0OiBbKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpLCBcImNhcHR1cmVcIl0sXG4gKiAgIGNoZWNrOiB0cnVlLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBTeW5jaHJvbm91cyBjYXB0dXJlIChubyBsaW5lIGNhbGxiYWNrcylcbiAqIGBgYHRzXG4gKiBjb25zdCB7IHN0ZG91dCB9ID0gZXhlY1N5bmMoXCJnaXRcIiwgW1wicmV2LXBhcnNlXCIsIFwiLS1zaG93LXRvcGxldmVsXCJdLCB7XG4gKiAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gKiAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAqICAgc3RkaW46IFwiaWdub3JlXCIsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHtcbiAgdHlwZSBDaGlsZFByb2Nlc3MsXG4gIHR5cGUgU3Bhd25PcHRpb25zLFxuICBzcGF3biBhcyBub2RlU3Bhd24sXG4gIHNwYXduU3luYyBhcyBub2RlU3Bhd25TeW5jLFxufSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwibm9kZTpyZWFkbGluZVwiO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcblxuLyoqIFNoZWxsLWNvbXBhdGlibGUgZXhpdCBjb2RlIHJldHVybmVkIHdoZW4gYW4gZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQuICovXG5leHBvcnQgY29uc3QgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFID0gMTI3O1xuXG4vKiogU3RkaW8gbW9kZSBmb3IgYSBzdWJwcm9jZXNzIGZkLiAqL1xuZXhwb3J0IHR5cGUgRXhlY1N0ZGlvID0gXCJpbmhlcml0XCIgfCBcInBpcGVcIiB8IFwiaWdub3JlXCI7XG5cbi8qKiBJbnZva2VkIG9uY2UgcGVyIG91dHB1dCBsaW5lIHdoZW4gYSBmZCBpcyBwaXBlZC4gKi9cbmV4cG9ydCB0eXBlIExpbmVIYW5kbGVyID0gKGxpbmU6IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBTdGRpbyBjb25maWcgZm9yIG9uZSBmZC5cbiAqXG4gKiAtIGBcImluaGVyaXRcImAgLyBgXCJwaXBlXCJgIC8gYFwiaWdub3JlXCJgIOKAlCBwYXNzIHRocm91Z2ggdG8gYHNwYXduYFxuICogLSBgXCJjYXB0dXJlXCJgIOKAlCBwaXBlIHRoZSBmZCBhbmQgYXBwZW5kIGVhY2ggbGluZSB0byB0aGUgcmVzdWx0XG4gKiAtIHtAbGluayBMaW5lSGFuZGxlcn0g4oCUIHBpcGUgYW5kIGludm9rZSB0aGUgaGFuZGxlciBwZXIgbGluZSAobGluZXMgYXJlIHN0aWxsIGNhcHR1cmVkKVxuICogLSBgKExpbmVIYW5kbGVyIHwgXCJjYXB0dXJlXCIpW11gIOKAlCBwaXBlOyBgXCJjYXB0dXJlXCJgIGlzIGEgbm8tb3AgbWFya2VyLCBoYW5kbGVycyBydW4gcGVyIGxpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU3RkaW9PcHRpb24gPSBFeGVjU3RkaW8gfCBMaW5lSGFuZGxlciB8IFwiY2FwdHVyZVwiIHwgKExpbmVIYW5kbGVyIHwgXCJjYXB0dXJlXCIpW107XG5cbi8qKiBPdXRjb21lIG9mIHtAbGluayBzcGF3bn0gLyB7QGxpbmsgc3Bhd25TeW5jfTogZXhpdCBjb2RlLCBjYXB0dXJlZCBvdXRwdXQsIGFuZCBsaW5lIHZpZXdzLiAqL1xuZXhwb3J0IHR5cGUgRXhlY1Jlc3VsdCA9IHtcbiAgZXhpdENvZGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZG91dCBsaW5lcy4gRm9yIHtAbGluayBzcGF3bn0gdGhlc2UgYXJlIGJ1aWx0IHdoaWxlIHRoZSBwcm9jZXNzIHJ1bnM7XG4gICAqIGZvciB7QGxpbmsgc3Bhd25TeW5jfSB0aGV5IGFyZSBzcGxpdCBmcm9tIHRoZSBjYXB0dXJlZCBzdHJpbmcgb24gZmlyc3QgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dExpbmVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZGVyciBsaW5lcy4gRm9yIHtAbGluayBzcGF3bn0gdGhlc2UgYXJlIGJ1aWx0IHdoaWxlIHRoZSBwcm9jZXNzIHJ1bnM7XG4gICAqIGZvciB7QGxpbmsgc3Bhd25TeW5jfSB0aGV5IGFyZSBzcGxpdCBmcm9tIHRoZSBjYXB0dXJlZCBzdHJpbmcgb24gZmlyc3QgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVyckxpbmVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZG91dCB0ZXh0LiB7QGxpbmsgc3Bhd25TeW5jfSByZWFkcyB0aGUgY2FwdHVyZWQgc3RyaW5nO1xuICAgKiB7QGxpbmsgc3Bhd259IGpvaW5zIHtAbGluayBzdGRvdXRMaW5lc30uIFNlZSBgdHJpbWAgZm9yIG5vcm1hbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENhcHR1cmVkIHN0ZGVyciB0ZXh0LiB7QGxpbmsgc3Bhd25TeW5jfSByZWFkcyB0aGUgY2FwdHVyZWQgc3RyaW5nO1xuICAgKiB7QGxpbmsgc3Bhd259IGpvaW5zIHtAbGluayBzdGRlcnJMaW5lc30uIFNlZSBgdHJpbWAgZm9yIG5vcm1hbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcbn07XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgc3Bhd259LiBFeHRlbmRzIGBTcGF3bk9wdGlvbnNgIGV4Y2VwdCBgc3RkaW9gLCB3aGljaCBpcyBkcml2ZW4gYnkgYHN0ZGluYCAvIGBzdGRvdXRgIC8gYHN0ZGVycmAuICovXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IE9taXQ8U3Bhd25PcHRpb25zLCBcInN0ZGlvXCI+ICYge1xuICAvKiogYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0LCBvciBhIHN0cmluZyB3cml0dGVuIHRvIHRoZSBwcm9jZXNzIHN0ZGluLiAqL1xuICBzdGRpbj86IEV4ZWNTdGRpbyB8IHN0cmluZztcbiAgc3Rkb3V0PzogU3RkaW9PcHRpb247XG4gIHN0ZGVycj86IFN0ZGlvT3B0aW9uO1xuICAvKiogVGhyb3cgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS4gKi9cbiAgY2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogT21pdHRlZCDigJQgYWRhcHRpdmUgdHJpbSAoe0BsaW5rIHNwYXduU3luY30gZHJvcHMgb25lIHNwYXduIHRyYWlsaW5nIG5ld2xpbmUsXG4gICAqIHtAbGluayBzcGF3bn0gZG9lcyBub3QpOyBgdHJ1ZWAg4oCUIHN0cmlwIGFsbCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2U7XG4gICAqIGBmYWxzZWAg4oCUIGxlYXZlIGNhcHR1cmVkIG91dHB1dCB1bmNoYW5nZWQuXG4gICAqL1xuICB0cmltPzogYm9vbGVhbjtcbn07XG5cbi8qKiBTdGRpbyBtb2RlIGZvciB7QGxpbmsgc3Bhd25TeW5jfSAobm8gcGVyLWxpbmUgY2FsbGJhY2tzKS4gKi9cbmV4cG9ydCB0eXBlIFN5bmNFeGVjU3RkaW8gPSBFeGVjU3RkaW8gfCBcImNhcHR1cmVcIjtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBzcGF3blN5bmN9LiBTYW1lIHNoYXBlIGFzIHtAbGluayBFeGVjT3B0aW9uc30gYnV0IHdpdGhvdXQgbGluZS1oYW5kbGVyIHN0ZGlvLiAqL1xuZXhwb3J0IHR5cGUgU3luY0V4ZWNPcHRpb25zID0gT21pdDxTcGF3bk9wdGlvbnMsIFwic3RkaW9cIj4gJiB7XG4gIC8qKiBgXCJpbmhlcml0XCJgIGJ5IGRlZmF1bHQsIG9yIGEgc3RyaW5nIHdyaXR0ZW4gdG8gdGhlIHByb2Nlc3Mgc3RkaW4uICovXG4gIHN0ZGluPzogRXhlY1N0ZGlvIHwgc3RyaW5nO1xuICBzdGRvdXQ/OiBTeW5jRXhlY1N0ZGlvO1xuICBzdGRlcnI/OiBTeW5jRXhlY1N0ZGlvO1xuICAvKiogVGhyb3cgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS4gKi9cbiAgY2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogT21pdHRlZCDigJQgYWRhcHRpdmUgdHJpbSAoe0BsaW5rIHNwYXduU3luY30gZHJvcHMgb25lIHNwYXduIHRyYWlsaW5nIG5ld2xpbmUsXG4gICAqIHtAbGluayBzcGF3bn0gZG9lcyBub3QpOyBgdHJ1ZWAg4oCUIHN0cmlwIGFsbCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2U7XG4gICAqIGBmYWxzZWAg4oCUIGxlYXZlIGNhcHR1cmVkIG91dHB1dCB1bmNoYW5nZWQuXG4gICAqL1xuICB0cmltPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogU3Bhd24gc3RkaW8gbW9kZSBwbHVzIGFuIG9wdGlvbmFsIHBlci1saW5lIGNhbGxiYWNrIGFmdGVyIHtAbGluayByZXNvbHZlU3RkaW99XG4gKiBtYXBzIGEge0BsaW5rIFN0ZGlvT3B0aW9ufSBpbnRvIHNvbWV0aGluZyBgc3Bhd25gIGNhbiBjb25zdW1lLlxuICovXG50eXBlIFJlc29sdmVkU3RkaW8gPSB7XG4gIC8qKiBWYWx1ZSBwYXNzZWQgdG8gYHNwYXduYCdzIGBzdGRpb2AgdHVwbGUgZm9yIHRoaXMgZmQuICovXG4gIG1vZGU6IEV4ZWNTdGRpbztcbiAgLyoqIFdoZW4gc2V0LCBlYWNoIG91dHB1dCBsaW5lIGlzIGFwcGVuZGVkIHRvIHRoZSBjYXB0dXJlIGJ1ZmZlciBhbmQgZm9yd2FyZGVkIGhlcmUuICovXG4gIG9uTGluZT86IExpbmVIYW5kbGVyO1xufTtcblxuZXhwb3J0IHR5cGUgU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+ID1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogVF1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzQW5kT3B0aW9uczogWy4uLnN0cmluZ1tdLCBUXV07XG5cbmludGVyZmFjZSBQYXJzZWRTcGF3bkFyZ3M8VCBleHRlbmRzIFNwYXduT3B0aW9ucz4ge1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGNvbW1hbmRBcmdzOiBzdHJpbmdbXTtcbiAgb3B0aW9ucz86IFQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+KGlucHV0OiBTcGF3bkFyZ3M8VD4pOiBQYXJzZWRTcGF3bkFyZ3M8VD4ge1xuICBsZXQgW3ZhbHVlLCAuLi52YWx1ZXNdID0gaW5wdXQ7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5jb21tYW5kQXJnc10gPSBzaGxleCh2YWx1ZSk7XG4gIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT0gMSAmJiB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1hbmQsXG4gICAgICBjb21tYW5kQXJnczogW10sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSB2YWx1ZXMuYXQoLTEpO1xuICBjb25zdCBvcHRpb25zID1cbiAgICBsYXN0ICE9PSBudWxsICYmIHR5cGVvZiBsYXN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGxhc3QpID8gbGFzdCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXJndW1lbnRWYWx1ZXMgPSBvcHRpb25zID8gdmFsdWVzLnNsaWNlKDAsIC0xKSA6IHZhbHVlcztcbiAgY29uc3QgdmFsdWVBcmdzOiBzdHJpbmdbXSA9XG4gICAgYXJndW1lbnRWYWx1ZXMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRWYWx1ZXNbMF0pXG4gICAgICA/IFsuLi5hcmd1bWVudFZhbHVlc1swXV1cbiAgICAgIDogYXJndW1lbnRWYWx1ZXM7XG5cbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kLFxuICAgIGNvbW1hbmRBcmdzOiBbLi4uY29tbWFuZEFyZ3MsIC4uLnZhbHVlQXJnc10sXG4gICAgb3B0aW9uczogb3B0aW9ucyBhcyBULFxuICB9O1xufVxuXG4vKipcbiAqIERyb3AgdGhlIHNpbmdsZSB0cmFpbGluZyBlbXB0eSBlbnRyeSBgc3Bhd25TeW5jYCBhZGRzIHdoZW4gc3BsaXR0aW5nIG9uIGEgZmluYWxcbiAqIG5ld2xpbmUgKGBcImhpXFxuXCJgIC0+IGBbXCJoaVwiLCBcIlwiXWApLiBEb2VzIG5vdCByZW1vdmUgbXVsdGlwbGUgdHJhaWxpbmcgZW1wdGllcy5cbiAqL1xuZnVuY3Rpb24gd2l0aG91dFNwYXduVHJhaWxpbmdFbXB0eUxpbmUobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xuICAgIHJldHVybiBsaW5lcy5zbGljZSgwLCAtMSk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzIGFzIHN0cmluZ1tdO1xufVxuXG4vKiogUmVtb3ZlIGF0IG1vc3Qgb25lIHRyYWlsaW5nIG5ld2xpbmUgZnJvbSBjYXB0dXJlZCBzcGF3biBzdGRvdXQvc3RkZXJyIHRleHQuICovXG5mdW5jdGlvbiB0cmltU2luZ2xlVHJhaWxpbmdOZXdsaW5lKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0ZXh0LmVuZHNXaXRoKFwiXFxyXFxuXCIpKSByZXR1cm4gdGV4dC5zbGljZSgwLCAtMik7XG4gIGlmICh0ZXh0LmVuZHNXaXRoKFwiXFxuXCIpKSByZXR1cm4gdGV4dC5zbGljZSgwLCAtMSk7XG4gIHJldHVybiB0ZXh0O1xufVxuXG4vKiogTGluZS1hcnJheSB2aWV3IG9mIGFzeW5jLWNhcHR1cmVkIG91dHB1dC4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRBc3luY0xpbmVzKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRyaW0gPT09IHRydWUpIHJldHVybiBsaW5lc0Zyb21DYXB0dXJlZE91dHB1dChsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKSk7XG4gIHJldHVybiBsaW5lcyBhcyBzdHJpbmdbXTtcbn1cblxuLyoqIEpvaW4gYXN5bmMtY2FwdHVyZWQgbGluZXMgaW50byBzdGRvdXQvc3RkZXJyIHRleHQuICovXG5mdW5jdGlvbiBmb3JtYXRBc3luY0NhcHR1cmVkTGluZXMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkID0gbGluZXMuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIHRyaW0gPT09IHRydWUgPyBqb2luZWQudHJpbSgpIDogam9pbmVkO1xufVxuXG4vKiogTGluZS1hcnJheSB2aWV3IG9mIHN5bmMtY2FwdHVyZWQgb3V0cHV0LiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplZFN5bmNMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh0cmltID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzIGFzIHN0cmluZ1tdO1xuICBpZiAodHJpbSA9PT0gdHJ1ZSkgcmV0dXJuIGxpbmVzRnJvbUNhcHR1cmVkT3V0cHV0KGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpKTtcbiAgcmV0dXJuIHdpdGhvdXRTcGF3blRyYWlsaW5nRW1wdHlMaW5lKGxpbmVzKTtcbn1cblxuLyoqIEZvcm1hdCBzeW5jLWNhcHR1cmVkIHN0ZG91dC9zdGRlcnIgdGV4dC4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN5bmNDYXB0dXJlZFRleHQoXG4gIHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0cmltID09PSBmYWxzZSkgcmV0dXJuIHRleHQ7XG4gIGlmICh0cmltID09PSB0cnVlKSByZXR1cm4gdGV4dC50cmltKCk7XG4gIHJldHVybiB0cmltU2luZ2xlVHJhaWxpbmdOZXdsaW5lKHRleHQpO1xufVxuXG4vKipcbiAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciBhIHNwYXduZWQgY29tbWFuZCwgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIEV4ZWN1dGFibGUgbmFtZSBvciBwYXRoXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEByZXR1cm5zIEJhY2t0aWNrLXdyYXBwZWQgYGNvbW1hbmQgYXJnMSBhcmcyIC4uLmAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRMYWJlbChjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcXGAke2NvbW1hbmR9ICR7YXJncy5qb2luKFwiIFwiKX1cXGBgO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgTm9kZSBmYWlsZWQgdG8gc3Bhd24gYmVjYXVzZSB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kLiAqL1xuZnVuY3Rpb24gaXNDb21tYW5kTm90Rm91bmRFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCI7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHtAbGluayBzcGF3bn0gd2l0aCBsaXZlIGxpbmUgYXJyYXlzIGFuZCBsYXp5XG4gKiB0cmltbWVkIGBzdGRvdXRgIC8gYHN0ZGVycmAgZ2V0dGVycyBkZXJpdmVkIGZyb20gdGhvc2UgbGluZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4ZWNSZXN1bHQoXG4gIGV4aXRDb2RlOiBudW1iZXIsXG4gIHN0ZG91dExpbmVzOiBzdHJpbmdbXSxcbiAgc3RkZXJyTGluZXM6IHN0cmluZ1tdLFxuICB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogRXhlY1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgZXhpdENvZGUsXG4gICAgZ2V0IHN0ZG91dExpbmVzKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRBc3luY0xpbmVzKHN0ZG91dExpbmVzLCB0cmltKTtcbiAgICB9LFxuICAgIGdldCBzdGRlcnJMaW5lcygpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkQXN5bmNMaW5lcyhzdGRlcnJMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgICBnZXQgc3Rkb3V0KCkge1xuICAgICAgcmV0dXJuIGZvcm1hdEFzeW5jQ2FwdHVyZWRMaW5lcyhzdGRvdXRMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIGZvcm1hdEFzeW5jQ2FwdHVyZWRMaW5lcyhzdGRlcnJMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20ge0BsaW5rIHNwYXduU3luY30uIENhcHR1cmVkIHN0cmluZ3MgYXJlIHN0b3JlZFxuICogYXMtaXM7IGBzdGRvdXRgIC8gYHN0ZGVycmAgdHJpbSBkaXJlY3RseSwgYW5kIGxpbmUgYXJyYXlzIHNwbGl0IG9ubHkgb24gcmVhZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3luY0V4ZWNSZXN1bHQoXG4gIGV4aXRDb2RlOiBudW1iZXIsXG4gIHN0ZG91dFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RkZXJyVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogRXhlY1Jlc3VsdCB7XG4gIGxldCBzdGRvdXRMaW5lc0NhY2hlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgbGV0IHN0ZGVyckxpbmVzQ2FjaGU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHN5bmNMaW5lcyA9ICh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbm9ybWFsaXplZFN5bmNMaW5lcyhsaW5lc0Zyb21DYXB0dXJlZE91dHB1dCh0ZXh0KSwgdHJpbSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZSxcbiAgICBnZXQgc3Rkb3V0TGluZXMoKSB7XG4gICAgICBpZiAoc3Rkb3V0VGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG4gICAgICBzdGRvdXRMaW5lc0NhY2hlID8/PSBzeW5jTGluZXMoc3Rkb3V0VGV4dCkgPz8gW107XG4gICAgICByZXR1cm4gc3Rkb3V0TGluZXNDYWNoZTtcbiAgICB9LFxuICAgIGdldCBzdGRlcnJMaW5lcygpIHtcbiAgICAgIGlmIChzdGRlcnJUZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICAgIHN0ZGVyckxpbmVzQ2FjaGUgPz89IHN5bmNMaW5lcyhzdGRlcnJUZXh0KSA/PyBbXTtcbiAgICAgIHJldHVybiBzdGRlcnJMaW5lc0NhY2hlO1xuICAgIH0sXG4gICAgZ2V0IHN0ZG91dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXRTeW5jQ2FwdHVyZWRUZXh0KHN0ZG91dFRleHQsIHRyaW0pID8/IFwiXCI7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIGZvcm1hdFN5bmNDYXB0dXJlZFRleHQoc3RkZXJyVGV4dCwgdHJpbSkgPz8gXCJcIjtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdXNlci1zdXBwbGllZCBsaW5lIGhhbmRsZXJzIGZyb20gYSB7QGxpbmsgU3RkaW9PcHRpb259LlxuICpcbiAqIFRoZSBgXCJjYXB0dXJlXCJgIG1hcmtlciBpcyBmaWx0ZXJlZCBvdXQ7IGNhcHR1cmUgaXRzZWxmIGlzIGFsd2F5cyBoYW5kbGVkIGJ5XG4gKiBwdXNoaW5nIGludG8gdGhlIGxpbmUgYnVmZmVyIGluc2lkZSB7QGxpbmsgcmVzb2x2ZVN0ZGlvfS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gU3RkaW8gb3B0aW9uIHRoYXQgbWF5IGVtYmVkIG9uZSBvciBtb3JlIGhhbmRsZXJzXG4gKiBAcmV0dXJucyBIYW5kbGVycyB0byBpbnZva2UgYWZ0ZXIgZWFjaCBjYXB0dXJlZCBsaW5lIChtYXkgYmUgZW1wdHkpXG4gKi9cbmZ1bmN0aW9uIGxpbmVIYW5kbGVycyhvcHRpb246IFN0ZGlvT3B0aW9uKTogTGluZUhhbmRsZXJbXSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBbb3B0aW9uXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgIHJldHVybiBvcHRpb24uZmlsdGVyKChpdGVtKTogaXRlbSBpcyBMaW5lSGFuZGxlciA9PiBpdGVtICE9PSBcImNhcHR1cmVcIik7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBhIHN0ZGlvIG9wdGlvbiBpcyBhIHN0cmluZyBzcGF3biBtb2RlIHJhdGhlciB0aGFuIGNhcHR1cmUvaGFuZGxlcnMuXG4gKlxuICoge0BsaW5rIHJlc29sdmVTdGRpb30gc3RpbGwgdHJlYXRzIGBcInBpcGVcImAgYXMgcGlwZS1hbmQtY2FwdHVyZTsgb25seVxuICogYFwiaW5oZXJpdFwiYCBhbmQgYFwiaWdub3JlXCJgIHJldHVybiB3aXRob3V0IGEgbGluZSBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gU3RkaW8gb3B0aW9uIHRvIGNsYXNzaWZ5XG4gKiBAcmV0dXJucyBXaGV0aGVyIGBvcHRpb25gIGlzIGBcImluaGVyaXRcImAsIGBcInBpcGVcImAsIG9yIGBcImlnbm9yZVwiYFxuICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoTW9kZShvcHRpb246IFN0ZGlvT3B0aW9uKTogb3B0aW9uIGlzIEV4ZWNTdGRpbyB7XG4gIHJldHVybiBvcHRpb24gPT09IFwiaW5oZXJpdFwiIHx8IG9wdGlvbiA9PT0gXCJwaXBlXCIgfHwgb3B0aW9uID09PSBcImlnbm9yZVwiO1xufVxuXG4vKipcbiAqIE1hcCBhIHtAbGluayBTdGRpb09wdGlvbn0gaW50byBhIHNwYXduIHN0ZGlvIG1vZGUgYW5kIG9wdGlvbmFsIGxpbmUgY2FsbGJhY2suXG4gKlxuICogUGlwZWQgbW9kZXMgKGBcImNhcHR1cmVcImAsIGBcInBpcGVcImAsIGhhbmRsZXJzLCBhcnJheXMpIGFwcGVuZCBldmVyeSBsaW5lIHRvXG4gKiBgbGluZXNgIGFuZCBpbnZva2UgYW55IGVtYmVkZGVkIGhhbmRsZXJzLiBPbWl0dGVkIG9wdGlvbnMgdXNlIGBkZWZhdWx0TW9kZWAuXG4gKlxuICogQHBhcmFtIG9wdGlvbiAtIENhbGxlciBzdGRpbyBwcmVmZXJlbmNlIGZvciBvbmUgZmRcbiAqIEBwYXJhbSBsaW5lcyAtIE11dGFibGUgYnVmZmVyIHRoYXQgcmVjZWl2ZXMgZWFjaCBwaXBlZCBsaW5lXG4gKiBAcGFyYW0gZGVmYXVsdE1vZGUgLSBTcGF3biBtb2RlIHdoZW4gYG9wdGlvbmAgaXMgb21pdHRlZCAoYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0KVxuICogQHJldHVybnMgUmVzb2x2ZWQgc3Bhd24gbW9kZSBhbmQgb3B0aW9uYWwgcGVyLWxpbmUgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVN0ZGlvKFxuICBvcHRpb246IFN0ZGlvT3B0aW9uIHwgdW5kZWZpbmVkLFxuICBsaW5lczogc3RyaW5nW10sXG4gIGRlZmF1bHRNb2RlOiBFeGVjU3RkaW8gPSBcImluaGVyaXRcIixcbik6IFJlc29sdmVkU3RkaW8ge1xuICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB7IG1vZGU6IGRlZmF1bHRNb2RlIH07XG4gIGlmIChpc1Bhc3N0aHJvdWdoTW9kZShvcHRpb24pICYmIG9wdGlvbiAhPT0gXCJwaXBlXCIpIHJldHVybiB7IG1vZGU6IG9wdGlvbiB9O1xuXG4gIGNvbnN0IGhhbmRsZXJzID0gbGluZUhhbmRsZXJzKG9wdGlvbik7XG4gIHJldHVybiB7XG4gICAgbW9kZTogXCJwaXBlXCIsXG4gICAgb25MaW5lOiAobGluZSkgPT4ge1xuICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgaGFuZGxlcihsaW5lKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWQgYSByZWFkYWJsZSBzdHJlYW0gbGluZS1ieS1saW5lIGFuZCBpbnZva2UgYG9uTGluZWAgZm9yIGVhY2ggY2h1bmsuXG4gKlxuICogVXNlcyBgcmVhZGxpbmVgIHNvIGBcXHJcXG5gIGFuZCBiYXJlIGBcXG5gIGFyZSBub3JtYWxpemVkLiBUaGUgaW50ZXJmYWNlIGlzXG4gKiBhbHdheXMgY2xvc2VkIGluIGEgYGZpbmFsbHlgIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gLSBTdWJwcm9jZXNzIHN0ZG91dCBvciBzdGRlcnIgc3RyZWFtXG4gKiBAcGFyYW0gb25MaW5lIC0gQ2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBvdXRwdXQgbGluZVxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkTGluZXMoc3RyZWFtOiBSZWFkYWJsZSwgb25MaW5lOiBMaW5lSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBzdHJlYW0sIGNybGZEZWxheTogSW5maW5pdHkgfSk7XG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIHJsKSBvbkxpbmUobGluZSk7XG4gIH0gZmluYWxseSB7XG4gICAgcmwuY2xvc2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IGEgYmFja2dyb3VuZCBsaW5lIHJlYWQgd2hlbiB0aGUgcmVzb2x2ZWQgaGFuZGxlciBwaXBlcyBhIHN0cmVhbS5cbiAqXG4gKiBAcGFyYW0gcmVhZHMgLSBQcm9taXNlIGxpc3QgYXdhaXRlZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSB7QGxpbmsgRXhlY1Jlc3VsdH1cbiAqIEBwYXJhbSBzdHJlYW0gLSBTdWJwcm9jZXNzIHN0cmVhbSBmb3IgdGhpcyBmZCAoYG51bGxgIHdoZW4gdW5hdmFpbGFibGUpXG4gKiBAcGFyYW0gaGFuZGxlciAtIFJlc29sdmVkIHN0ZGlvIGNvbmZpZyBmcm9tIHtAbGluayByZXNvbHZlU3RkaW99XG4gKi9cbmZ1bmN0aW9uIHF1ZXVlTGluZVJlYWRzKFxuICByZWFkczogUHJvbWlzZTx2b2lkPltdLFxuICBzdHJlYW06IFJlYWRhYmxlIHwgbnVsbCxcbiAgaGFuZGxlcjogUmVzb2x2ZWRTdGRpbyxcbik6IHZvaWQge1xuICBpZiAoaGFuZGxlci5vbkxpbmUgJiYgc3RyZWFtKSByZWFkcy5wdXNoKHJlYWRMaW5lcyhzdHJlYW0sIGhhbmRsZXIub25MaW5lKSk7XG59XG5cbi8qKlxuICogV3JpdGUgc3RyaW5nIHN0ZGluIHRvIGEgc3Bhd25lZCBwcm9jZXNzIGFuZCBjbG9zZSB0aGUgc3RyZWFtLlxuICpcbiAqIE5vLW9wIHVubGVzcyBgc3RkaW5gIGlzIGEgc3RyaW5nIGFuZCBgcHJvYy5zdGRpbmAgaXMgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSBwcm9jIC0gQ2hpbGQgcHJvY2VzcyByZXR1cm5lZCBmcm9tIGBzcGF3bmBcbiAqIEBwYXJhbSBzdGRpbiAtIFN0ZGlvIG1vZGUgb3Igc3RyaW5nIHBheWxvYWQgZnJvbSB7QGxpbmsgRXhlY09wdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIHdyaXRlU3RkaW4ocHJvYzogQ2hpbGRQcm9jZXNzLCBzdGRpbjogRXhlY1N0ZGlvIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygc3RkaW4gPT09IFwic3RyaW5nXCIgJiYgcHJvYy5zdGRpbikge1xuICAgIHByb2Muc3RkaW4ud3JpdGUoc3RkaW4pO1xuICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBd2FpdCBwcm9jZXNzIGV4aXQgYW5kIG5vcm1hbGl6ZSBhIG1pc3NpbmcgZXhpdCBjb2RlIHRvIGAxYC5cbiAqXG4gKiBSZWplY3RzIHdoZW4gc3Bhd24gZmFpbHMgYmVmb3JlIGBjbG9zZWAgKGUuZy4gZXhlY3V0YWJsZSBub3QgZm91bmQpLlxuICpcbiAqIEBwYXJhbSBwcm9jIC0gQ2hpbGQgcHJvY2VzcyByZXR1cm5lZCBmcm9tIGBzcGF3bmBcbiAqIEByZXR1cm5zIFJlc29sdmVkIGV4aXQgY29kZVxuICovXG5mdW5jdGlvbiB3YWl0Rm9yRXhpdChwcm9jOiBDaGlsZFByb2Nlc3MpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgcHJvYy5vbmNlKFwiY2xvc2VcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIGFuIGBFcnJvcmAgZm9yIGEgbm9uLXplcm8gZXhpdCB3aGVuIHtAbGluayBFeGVjT3B0aW9ucy5jaGVja30gaXMgc2V0LlxuICpcbiAqIFByZWZlcnMgdHJpbW1lZCBzdGRlcnIgdGV4dCwgdGhlbiBzdGRvdXQsIGluIHRoZSBtZXNzYWdlIGJvZHkuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBFeGVjdXRhYmxlIG5hbWUgb3IgcGF0aFxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gcmVzdWx0IC0gQ29tcGxldGVkIGV4ZWMgb3V0Y29tZSB3aXRoIGNhcHR1cmVkIG91dHB1dFxuICogQHJldHVybnMgRXJyb3Igc3VpdGFibGUgZm9yIHRocm93aW5nIGZyb20ge0BsaW5rIHNwYXdufVxuICovXG5mdW5jdGlvbiBleGVjRXJyb3IoY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgcmVzdWx0OiBFeGVjUmVzdWx0KTogRXJyb3Ige1xuICBjb25zdCBkZXRhaWwgPSByZXN1bHQuc3RkZXJyIHx8IHJlc3VsdC5zdGRvdXQ7XG4gIHJldHVybiBuZXcgRXJyb3IoXG4gICAgYCR7Y29tbWFuZExhYmVsKGNvbW1hbmQsIGFyZ3MpfSBmYWlsZWQgKGV4aXQgJHtyZXN1bHQuZXhpdENvZGV9KSR7ZGV0YWlsID8gYDogJHtkZXRhaWx9YCA6IFwiXCJ9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBNYXAgYSB7QGxpbmsgU3luY0V4ZWNTdGRpb30gb3B0aW9uIHRvIGEgYHNwYXduU3luY2Agc3RkaW8gbW9kZS5cbiAqXG4gKiBgXCJjYXB0dXJlXCJgIHBpcGVzIHRoZSBmZCBzbyBvdXRwdXQgY2FuIGJlIHJlYWQgaW50byB0aGUge0BsaW5rIEV4ZWNSZXN1bHR9LlxuICpcbiAqIEBwYXJhbSBvcHRpb24gLSBDYWxsZXIgc3RkaW8gcHJlZmVyZW5jZSBmb3Igb25lIGZkXG4gKiBAcGFyYW0gZGVmYXVsdE1vZGUgLSBTcGF3biBtb2RlIHdoZW4gYG9wdGlvbmAgaXMgb21pdHRlZCAoYFwiaW5oZXJpdFwiYCBieSBkZWZhdWx0KVxuICogQHJldHVybnMgVmFsdWUgZm9yIHRoZSBgc3Bhd25TeW5jYCBzdGRpbyB0dXBsZVxuICovXG5mdW5jdGlvbiByZXNvbHZlU3luY1N0ZGlvKFxuICBvcHRpb246IFN5bmNFeGVjU3RkaW8gfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRNb2RlOiBFeGVjU3RkaW8gPSBcImluaGVyaXRcIixcbik6IEV4ZWNTdGRpbyB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRNb2RlO1xuICBpZiAob3B0aW9uID09PSBcImNhcHR1cmVcIikgcmV0dXJuIFwicGlwZVwiO1xuICByZXR1cm4gb3B0aW9uO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSByYXcgYHNwYXduU3luY2Agb3V0cHV0IHRvIGEgVVRGLTggc3RyaW5nIHdoZW4gY2FwdHVyZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlZFRleHQob3V0cHV0OiBzdHJpbmcgfCBCdWZmZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG91dHB1dCA9PT0gbnVsbCB8fCBvdXRwdXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIgPyBvdXRwdXQgOiBvdXRwdXQudG9TdHJpbmcoXCJ1dGY4XCIpO1xufVxuXG4vKipcbiAqIFNwbGl0IGNhcHR1cmVkIHByb2Nlc3Mgb3V0cHV0IGludG8gbGluZXMgZm9yIHtAbGluayBFeGVjUmVzdWx0LnN0ZG91dExpbmVzfSAvXG4gKiB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRlcnJMaW5lc30gKHtAbGluayBzcGF3blN5bmN9IG9ubHk7IGludm9rZWQgbGF6aWx5KS5cbiAqL1xuZnVuY3Rpb24gbGluZXNGcm9tQ2FwdHVyZWRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcblwiKS5zcGxpdChcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBTcGF3biBhIHN1YnByb2Nlc3MgYW5kIHdhaXQgZm9yIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBFeGVjdXRhYmxlIHRvIHJ1biAocmVzb2x2ZWQgb24gYFBBVEhgIHdoZW4gYHNoZWxsYCBpcyBzZXQgb24gb3B0aW9ucylcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzIHBhc3NlZCB2ZXJiYXRpbSB0byB0aGUgZXhlY3V0YWJsZVxuICogQHBhcmFtIG9wdGlvbnMgLSBTcGF3biwgc3RkaW8sIGFuZCBjaGVjayBvcHRpb25zXG4gKiBAcmV0dXJucyBFeGl0IGNvZGUsIGNhcHR1cmVkIGxpbmUgYXJyYXlzLCBhbmQgdHJpbW1lZCBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnNcbiAqIEB0aHJvd3MgV2hlbiBzcGF3biBmYWlscyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIG1pc3NpbmcgZXhlY3V0YWJsZSwgbGluZVxuICogcmVhZHMgZmFpbCwgb3IgYGNoZWNrYCBpcyB0cnVlIGFuZCBleGl0IGNvZGUgaXMgbm9uLXplcm9cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNwYXduKC4uLmFyZ3M6IFNwYXduQXJnczxFeGVjT3B0aW9ucz4pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb21tYW5kLCBjb21tYW5kQXJncywgb3B0aW9ucyA9IHt9IH0gPSBwYXJzZVNwYXduQXJncyhhcmdzKTtcbiAgY29uc3QgeyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGNoZWNrLCB0cmltLCAuLi5zcGF3bk9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0ZG91dExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzdGRlcnJMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3Rkb3V0SGFuZGxlciA9IHJlc29sdmVTdGRpbyhzdGRvdXQsIHN0ZG91dExpbmVzKTtcbiAgY29uc3Qgc3RkZXJySGFuZGxlciA9IHJlc29sdmVTdGRpbyhzdGRlcnIsIHN0ZGVyckxpbmVzKTtcbiAgY29uc3Qgc3RkaW5Nb2RlOiBFeGVjU3RkaW8gPSB0eXBlb2Ygc3RkaW4gPT09IFwic3RyaW5nXCIgPyBcInBpcGVcIiA6IChzdGRpbiA/PyBcImluaGVyaXRcIik7XG5cbiAgY29uc3QgcHJvYyA9IG5vZGVTcGF3bihjb21tYW5kLCBjb21tYW5kQXJncywge1xuICAgIC4uLnNwYXduT3B0cyxcbiAgICBzdGRpbzogW3N0ZGluTW9kZSwgc3Rkb3V0SGFuZGxlci5tb2RlLCBzdGRlcnJIYW5kbGVyLm1vZGVdLFxuICB9KTtcblxuICB3cml0ZVN0ZGluKHByb2MsIHN0ZGluKTtcblxuICBjb25zdCByZWFkczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gIHF1ZXVlTGluZVJlYWRzKHJlYWRzLCBwcm9jLnN0ZG91dCwgc3Rkb3V0SGFuZGxlcik7XG4gIHF1ZXVlTGluZVJlYWRzKHJlYWRzLCBwcm9jLnN0ZGVyciwgc3RkZXJySGFuZGxlcik7XG5cbiAgbGV0IGV4aXRDb2RlID0gMTtcbiAgbGV0IGNvbW1hbmROb3RGb3VuZEVycm9yOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgZXhpdENvZGUgPSBhd2FpdCB3YWl0Rm9yRXhpdChwcm9jKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChyZWFkcyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChyZWFkcyk7XG4gICAgaWYgKCFpc0NvbW1hbmROb3RGb3VuZEVycm9yKGVycikpIHRocm93IGVycjtcbiAgICBjb21tYW5kTm90Rm91bmRFcnJvciA9IGVycjtcbiAgICBleGl0Q29kZSA9IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUV4ZWNSZXN1bHQoZXhpdENvZGUsIHN0ZG91dExpbmVzLCBzdGRlcnJMaW5lcywgdHJpbSk7XG4gIGlmIChjaGVjayAmJiByZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIHJlc3VsdCk7XG4gICAgaWYgKGNvbW1hbmROb3RGb3VuZEVycm9yKSBlcnIuY2F1c2UgPSBjb21tYW5kTm90Rm91bmRFcnJvcjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBTcGF3biBhIHN1YnByb2Nlc3Mgc3luY2hyb25vdXNseSBhbmQgd2FpdCBmb3IgZXhpdC5cbiAqXG4gKiBVbmxpa2Uge0BsaW5rIHNwYXdufSwgc3RkaW8gb3B0aW9ucyBhcmUgbGltaXRlZCB0byBgXCJpbmhlcml0XCJgLCBgXCJwaXBlXCJgLFxuICogYFwiaWdub3JlXCJgLCBhbmQgYFwiY2FwdHVyZVwiYCDigJQgbm8gcGVyLWxpbmUgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSB0byBydW4gKHJlc29sdmVkIG9uIGBQQVRIYCB3aGVuIGBzaGVsbGAgaXMgc2V0IG9uIG9wdGlvbnMpXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdmVyYmF0aW0gdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBzcGF3blN5bmMgLSBTcGF3biwgc3RkaW8sIGFuZCBjaGVjayBvcHRpb25zXG4gKiBAcmV0dXJucyBFeGl0IGNvZGUsIGNhcHR1cmVkIGxpbmUgYXJyYXlzLCBhbmQgdHJpbW1lZCBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnNcbiAqIEB0aHJvd3MgV2hlbiBzcGF3biBmYWlscyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIG1pc3NpbmcgZXhlY3V0YWJsZSwgb3JcbiAqIGBjaGVja2AgaXMgdHJ1ZSBhbmQgZXhpdCBjb2RlIGlzIG5vbi16ZXJvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmMoLi4uYXJnczogU3Bhd25BcmdzPFN5bmNFeGVjT3B0aW9ucz4pOiBFeGVjUmVzdWx0IHtcbiAgY29uc3QgeyBjb21tYW5kLCBjb21tYW5kQXJncywgb3B0aW9ucyA9IHt9IH0gPSBwYXJzZVNwYXduQXJncyhhcmdzKTtcbiAgY29uc3QgeyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGNoZWNrLCB0cmltLCAuLi5zcGF3bk9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0ZGluTW9kZTogRXhlY1N0ZGlvID0gdHlwZW9mIHN0ZGluID09PSBcInN0cmluZ1wiID8gXCJwaXBlXCIgOiAoc3RkaW4gPz8gXCJpbmhlcml0XCIpO1xuICBjb25zdCBjYXB0dXJlU3Rkb3V0ID0gc3Rkb3V0ID09PSBcImNhcHR1cmVcIjtcbiAgY29uc3QgY2FwdHVyZVN0ZGVyciA9IHN0ZGVyciA9PT0gXCJjYXB0dXJlXCI7XG4gIGNvbnN0IHN0ZG91dE1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZG91dCk7XG4gIGNvbnN0IHN0ZGVyck1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZGVycik7XG5cbiAgY29uc3QgcmVzdWx0ID0gbm9kZVNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJncywge1xuICAgIC4uLnNwYXduT3B0cyxcbiAgICBlbmNvZGluZzogY2FwdHVyZVN0ZG91dCB8fCBjYXB0dXJlU3RkZXJyID8gXCJ1dGY4XCIgOiB1bmRlZmluZWQsXG4gICAgc3RkaW86IFtzdGRpbk1vZGUsIHN0ZG91dE1vZGUsIHN0ZGVyck1vZGVdLFxuICAgIGlucHV0OiB0eXBlb2Ygc3RkaW4gPT09IFwic3RyaW5nXCIgPyBzdGRpbiA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZE5vdEZvdW5kID0gaXNDb21tYW5kTm90Rm91bmRFcnJvcihyZXN1bHQuZXJyb3IpO1xuICBjb25zdCBleGl0Q29kZSA9IGNvbW1hbmROb3RGb3VuZCA/IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSA6IChyZXN1bHQuc3RhdHVzID8/IDEpO1xuICBjb25zdCBzdGRvdXRUZXh0ID0gY2FwdHVyZVN0ZG91dCA/IGNhcHR1cmVkVGV4dChyZXN1bHQuc3Rkb3V0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RkZXJyVGV4dCA9IGNhcHR1cmVTdGRlcnIgPyBjYXB0dXJlZFRleHQocmVzdWx0LnN0ZGVycikgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBjcmVhdGVTeW5jRXhlY1Jlc3VsdChleGl0Q29kZSwgc3Rkb3V0VGV4dCwgc3RkZXJyVGV4dCwgdHJpbSk7XG5cbiAgaWYgKHJlc3VsdC5lcnJvciAmJiAoIWNvbW1hbmROb3RGb3VuZCB8fCBjaGVjaykpIHtcbiAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIGV4ZWNSZXN1bHQpO1xuICAgIGVyci5jYXVzZSA9IHJlc3VsdC5lcnJvcjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBpZiAoY2hlY2sgJiYgZXhlY1Jlc3VsdC5leGl0Q29kZSAhPT0gMCkgdGhyb3cgZXhlY0Vycm9yKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCBleGVjUmVzdWx0KTtcbiAgcmV0dXJuIGV4ZWNSZXN1bHQ7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc2hlbGwtbGlrZSBjb21tYW5kIGludG8gYXJndi5cbiAqXG4gKiBTdXBwb3J0czpcbiAqICAgLSB3aGl0ZXNwYWNlIHNlcGFyYXRvcnNcbiAqICAgLSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXNcbiAqICAgLSBiYWNrc2xhc2ggZXNjYXBpbmdcbiAqICAgLSBlc2NhcGVkIHNwYWNlc1xuICogICAtIGVtcHR5IHF1b3RlZCBzdHJpbmdzXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIG1hbGZvcm1lZCAoZm9yIGV4YW1wbGUsIGFuIHVudGVybWluYXRlZCBxdW90ZSksXG4gKiByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXMgYSBzaW5nbGUgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGxleChjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICBsZXQgcXVvdGU6IFwiJ1wiIHwgJ1wiJyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgbGV0IHF1b3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHB1c2ggPSAoKSA9PiB7XG4gICAgaWYgKHF1b3RlZCB8fCBjdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFyZ3MucHVzaChjdXJyZW50KTtcbiAgICB9XG4gICAgY3VycmVudCA9IFwiXCI7XG4gICAgcXVvdGVkID0gZmFsc2U7XG4gIH07XG5cbiAgZm9yIChjb25zdCBjaCBvZiBjb21tYW5kKSB7XG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChxdW90ZSkge1xuICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiJ1wiIHx8IGNoID09PSAnXCInKSB7XG4gICAgICBxdW90ZSA9IGNoO1xuICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvXFxzLy50ZXN0KGNoKSkge1xuICAgICAgcHVzaCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY3VycmVudCArPSBjaDtcbiAgfVxuXG4gIC8vIE1hbGZvcm1lZCBpbnB1dDogdHJlYXQgYXMgYSBsaXRlcmFsIGNvbW1hbmQuXG4gIGlmIChxdW90ZSkge1xuICAgIHJldHVybiBbY29tbWFuZF07XG4gIH1cblxuICAvLyBUcmFpbGluZyBiYWNrc2xhc2ggaXMgbGl0ZXJhbC5cbiAgaWYgKGVzY2FwZWQpIHtcbiAgICBjdXJyZW50ICs9IFwiXFxcXFwiO1xuICB9XG5cbiAgcHVzaCgpO1xuXG4gIHJldHVybiBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBbY29tbWFuZF07XG59XG4iXX0=
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsT0FBTyxFQUdMLEtBQUssSUFBSSxTQUFTLEVBQ2xCLFNBQVMsSUFBSSxhQUFhLEdBQzNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFxRy9DLFNBQVMsY0FBYyxDQUF5QixLQUFtQjtJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU87WUFDTCxPQUFPO1lBQ1AsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQ1gsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFD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QU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRhYmxlIHN1YnByb2Nlc3MgaGVscGVyIGJ1aWx0IG9uIGBjaGlsZF9wcm9jZXNzLnNwYXduYCBhbmQgbGluZSBzdHJlYW1pbmcuXG4gKlxuICogUG9ydGVkIGZyb20gYGRieC10b29scy1qcy9wYWNrYWdlcy9jbGkvc3JjL2V4ZWMudHNgLiBFYWNoIHN0ZGlvIGZkIGRlZmF1bHRzIHRvXG4gKiBgXCJpbmhlcml0XCJgLiB7QGxpbmsgc3Bhd259IHN0cmVhbXMgb3V0cHV0IGxpbmUtYnktbGluZSBpbnRvIHtAbGluayBFeGVjUmVzdWx0LnN0ZG91dExpbmVzfVxuICogLyB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRlcnJMaW5lc307IGl0cyBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnMgam9pbiB0aG9zZSBsaW5lcy5cbiAqIHtAbGluayBzcGF3blN5bmN9IGtlZXBzIHRoZSBjYXB0dXJlZCBzdHJpbmc7IGl0cyBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnMgcmVhZFxuICogdGhhdCBzdHJpbmcgZGlyZWN0bHkgKGxpbmUgYXJyYXlzIHNwbGl0IGxhemlseSBvbiByZWFkKS5cbiAqIE9taXR0ZWQgYHRyaW1gIChkZWZhdWx0KSBhcHBsaWVzIGFkYXB0aXZlIG5vcm1hbGl6YXRpb246IHtAbGluayBzcGF3blN5bmN9IGRyb3BzXG4gKiBhdCBtb3N0IG9uZSB0cmFpbGluZyBlbXB0eSBsaW5lIC8gbmV3bGluZSBgc3Bhd25TeW5jYCBhZGRzOyB7QGxpbmsgc3Bhd259IGRvZXNcbiAqIG5vdCAocmVhZGxpbmUgbmV2ZXIgZW1pdHMgdGhhdCBleHRyYSBsaW5lKS4gYHRyaW06IHRydWVgIHN0cmlwcyBhbGwgbGVhZGluZy9cbiAqIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gYm90aCBtb2RlczsgYHRyaW06IGZhbHNlYCBsZWF2ZXMgb3V0cHV0IHVuY2hhbmdlZC5cbiAqXG4gKiBAZXhhbXBsZSBDYXB0dXJlIGNvbW1hbmQgb3V0cHV0XG4gKiBgYGB0c1xuICogY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWMoXCJnaXRcIiwgW1wicmV2LXBhcnNlXCIsIFwiLS1zaG93LXRvcGxldmVsXCJdLCB7XG4gKiAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gKiAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAqICAgc3RkaW46IFwiaWdub3JlXCIsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFN0cmVhbSBhbmQgY2FwdHVyZSB0b2dldGhlclxuICogYGBgdHNcbiAqIGF3YWl0IGV4ZWMoXCJwbnBtXCIsIFtcImluc3RhbGxcIl0sIHtcbiAqICAgc3Rkb3V0OiBbKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpLCBcImNhcHR1cmVcIl0sXG4gKiAgIGNoZWNrOiB0cnVlLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBTeW5jaHJvbm91cyBjYXB0dXJlIChubyBsaW5lIGNhbGxiYWNrcylcbiAqIGBgYHRzXG4gKiBjb25zdCB7IHN0ZG91dCB9ID0gZXhlY1N5bmMoXCJnaXRcIiwgW1wicmV2LXBhcnNlXCIsIFwiLS1zaG93LXRvcGxldmVsXCJdLCB7XG4gKiAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gKiAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAqICAgc3RkaW46IFwiaWdub3JlXCIsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHtcbiAgdHlwZSBDaGlsZFByb2Nlc3MsXG4gIHR5cGUgU3Bhd25PcHRpb25zLFxuICBzcGF3biBhcyBub2RlU3Bhd24sXG4gIHNwYXduU3luYyBhcyBub2RlU3Bhd25TeW5jLFxufSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwibm9kZTpyZWFkbGluZVwiO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGZpbmlzaGVkIH0gZnJvbSBcIm5vZGU6c3RyZWFtL3Byb21pc2VzXCI7XG5cbi8qKiBTaGVsbC1jb21wYXRpYmxlIGV4aXQgY29kZSByZXR1cm5lZCB3aGVuIGFuIGV4ZWN1dGFibGUgY2Fubm90IGJlIGZvdW5kLiAqL1xuZXhwb3J0IGNvbnN0IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSA9IDEyNztcblxuLyoqIFN0ZGlvIG1vZGUgZm9yIGEgc3VicHJvY2VzcyBmZC4gKi9cbmV4cG9ydCB0eXBlIEV4ZWNTdGRpbyA9IFwiaW5oZXJpdFwiIHwgXCJwaXBlXCIgfCBcImlnbm9yZVwiO1xuXG4vKiogSW52b2tlZCBvbmNlIHBlciBvdXRwdXQgbGluZSB3aGVuIGEgZmQgaXMgcGlwZWQuICovXG5leHBvcnQgdHlwZSBMaW5lSGFuZGxlciA9IChsaW5lOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogU3RkaW8gY29uZmlnIGZvciBvbmUgZmQuXG4gKlxuICogLSBgXCJpbmhlcml0XCJgIC8gYFwicGlwZVwiYCAvIGBcImlnbm9yZVwiYCDigJQgcGFzcyB0aHJvdWdoIHRvIGBzcGF3bmBcbiAqIC0gYFwiY2FwdHVyZVwiYCDigJQgcGlwZSB0aGUgZmQgYW5kIGFwcGVuZCBlYWNoIGxpbmUgdG8gdGhlIHJlc3VsdFxuICogLSB7QGxpbmsgTGluZUhhbmRsZXJ9IOKAlCBwaXBlIGFuZCBpbnZva2UgdGhlIGhhbmRsZXIgcGVyIGxpbmUgKGxpbmVzIGFyZSBzdGlsbCBjYXB0dXJlZClcbiAqIC0gYChMaW5lSGFuZGxlciB8IFwiY2FwdHVyZVwiKVtdYCDigJQgcGlwZTsgYFwiY2FwdHVyZVwiYCBpcyBhIG5vLW9wIG1hcmtlciwgaGFuZGxlcnMgcnVuIHBlciBsaW5lXG4gKi9cbmV4cG9ydCB0eXBlIFN0ZGlvT3B0aW9uID0gRXhlY1N0ZGlvIHwgTGluZUhhbmRsZXIgfCBcImNhcHR1cmVcIiB8IChMaW5lSGFuZGxlciB8IFwiY2FwdHVyZVwiKVtdO1xuXG4vKiogT3V0Y29tZSBvZiB7QGxpbmsgc3Bhd259IC8ge0BsaW5rIHNwYXduU3luY306IGV4aXQgY29kZSwgY2FwdHVyZWQgb3V0cHV0LCBhbmQgbGluZSB2aWV3cy4gKi9cbmV4cG9ydCB0eXBlIEV4ZWNSZXN1bHQgPSB7XG4gIGV4aXRDb2RlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQgbGluZXMuIEZvciB7QGxpbmsgc3Bhd259IHRoZXNlIGFyZSBidWlsdCB3aGlsZSB0aGUgcHJvY2VzcyBydW5zO1xuICAgKiBmb3Ige0BsaW5rIHNwYXduU3luY30gdGhleSBhcmUgc3BsaXQgZnJvbSB0aGUgY2FwdHVyZWQgc3RyaW5nIG9uIGZpcnN0IHJlYWQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXRMaW5lczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIgbGluZXMuIEZvciB7QGxpbmsgc3Bhd259IHRoZXNlIGFyZSBidWlsdCB3aGlsZSB0aGUgcHJvY2VzcyBydW5zO1xuICAgKiBmb3Ige0BsaW5rIHNwYXduU3luY30gdGhleSBhcmUgc3BsaXQgZnJvbSB0aGUgY2FwdHVyZWQgc3RyaW5nIG9uIGZpcnN0IHJlYWQuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnJMaW5lczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQgdGV4dC4ge0BsaW5rIHNwYXduU3luY30gcmVhZHMgdGhlIGNhcHR1cmVkIHN0cmluZztcbiAgICoge0BsaW5rIHNwYXdufSBqb2lucyB7QGxpbmsgc3Rkb3V0TGluZXN9LiBTZWUgYHRyaW1gIGZvciBub3JtYWxpemF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIgdGV4dC4ge0BsaW5rIHNwYXduU3luY30gcmVhZHMgdGhlIGNhcHR1cmVkIHN0cmluZztcbiAgICoge0BsaW5rIHNwYXdufSBqb2lucyB7QGxpbmsgc3RkZXJyTGluZXN9LiBTZWUgYHRyaW1gIGZvciBub3JtYWxpemF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG59O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHNwYXdufS4gRXh0ZW5kcyBgU3Bhd25PcHRpb25zYCBleGNlcHQgYHN0ZGlvYCwgd2hpY2ggaXMgZHJpdmVuIGJ5IGBzdGRpbmAgLyBgc3Rkb3V0YCAvIGBzdGRlcnJgLiAqL1xuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSBPbWl0PFNwYXduT3B0aW9ucywgXCJzdGRpb1wiPiAmIHtcbiAgLyoqIGBcImluaGVyaXRcImAgYnkgZGVmYXVsdDsgYFwicGlwZVwiYCAvIGBcImlnbm9yZVwiYCBzZWxlY3QgbW9kZXMsIGFueSBvdGhlciBzdHJpbmcgaXMgaW5wdXQuICovXG4gIHN0ZGluPzogRXhlY1N0ZGlvIHwgc3RyaW5nO1xuICBzdGRvdXQ/OiBTdGRpb09wdGlvbjtcbiAgc3RkZXJyPzogU3RkaW9PcHRpb247XG4gIC8qKiBUaHJvdyB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBjb2RlLiAqL1xuICBjaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPbWl0dGVkIOKAlCBhZGFwdGl2ZSB0cmltICh7QGxpbmsgc3Bhd25TeW5jfSBkcm9wcyBvbmUgc3Bhd24gdHJhaWxpbmcgbmV3bGluZSxcbiAgICoge0BsaW5rIHNwYXdufSBkb2VzIG5vdCk7IGB0cnVlYCDigJQgc3RyaXAgYWxsIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZTtcbiAgICogYGZhbHNlYCDigJQgbGVhdmUgY2FwdHVyZWQgb3V0cHV0IHVuY2hhbmdlZC5cbiAgICovXG4gIHRyaW0/OiBib29sZWFuO1xufTtcblxuLyoqIFN0ZGlvIG1vZGUgZm9yIHtAbGluayBzcGF3blN5bmN9IChubyBwZXItbGluZSBjYWxsYmFja3MpLiAqL1xuZXhwb3J0IHR5cGUgU3luY0V4ZWNTdGRpbyA9IEV4ZWNTdGRpbyB8IFwiY2FwdHVyZVwiO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHNwYXduU3luY30uIFNhbWUgc2hhcGUgYXMge0BsaW5rIEV4ZWNPcHRpb25zfSBidXQgd2l0aG91dCBsaW5lLWhhbmRsZXIgc3RkaW8uICovXG5leHBvcnQgdHlwZSBTeW5jRXhlY09wdGlvbnMgPSBPbWl0PFNwYXduT3B0aW9ucywgXCJzdGRpb1wiPiAmIHtcbiAgLyoqIGBcImluaGVyaXRcImAgYnkgZGVmYXVsdDsgYFwicGlwZVwiYCAvIGBcImlnbm9yZVwiYCBzZWxlY3QgbW9kZXMsIGFueSBvdGhlciBzdHJpbmcgaXMgaW5wdXQuICovXG4gIHN0ZGluPzogRXhlY1N0ZGlvIHwgc3RyaW5nO1xuICBzdGRvdXQ/OiBTeW5jRXhlY1N0ZGlvO1xuICBzdGRlcnI/OiBTeW5jRXhlY1N0ZGlvO1xuICAvKiogVGhyb3cgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS4gKi9cbiAgY2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogT21pdHRlZCDigJQgYWRhcHRpdmUgdHJpbSAoe0BsaW5rIHNwYXduU3luY30gZHJvcHMgb25lIHNwYXduIHRyYWlsaW5nIG5ld2xpbmUsXG4gICAqIHtAbGluayBzcGF3bn0gZG9lcyBub3QpOyBgdHJ1ZWAg4oCUIHN0cmlwIGFsbCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2U7XG4gICAqIGBmYWxzZWAg4oCUIGxlYXZlIGNhcHR1cmVkIG91dHB1dCB1bmNoYW5nZWQuXG4gICAqL1xuICB0cmltPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogU3Bhd24gc3RkaW8gbW9kZSBwbHVzIGFuIG9wdGlvbmFsIHBlci1saW5lIGNhbGxiYWNrIGFmdGVyIHtAbGluayByZXNvbHZlU3RkaW99XG4gKiBtYXBzIGEge0BsaW5rIFN0ZGlvT3B0aW9ufSBpbnRvIHNvbWV0aGluZyBgc3Bhd25gIGNhbiBjb25zdW1lLlxuICovXG50eXBlIFJlc29sdmVkU3RkaW8gPSB7XG4gIC8qKiBWYWx1ZSBwYXNzZWQgdG8gYHNwYXduYCdzIGBzdGRpb2AgdHVwbGUgZm9yIHRoaXMgZmQuICovXG4gIG1vZGU6IEV4ZWNTdGRpbztcbiAgLyoqIFdoZW4gc2V0LCBlYWNoIG91dHB1dCBsaW5lIGlzIGFwcGVuZGVkIHRvIHRoZSBjYXB0dXJlIGJ1ZmZlciBhbmQgZm9yd2FyZGVkIGhlcmUuICovXG4gIG9uTGluZT86IExpbmVIYW5kbGVyO1xufTtcblxuZXhwb3J0IHR5cGUgU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+ID1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXV1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogVF1cbiAgfCBbY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzQW5kT3B0aW9uczogWy4uLnN0cmluZ1tdLCBUXV07XG5cbmludGVyZmFjZSBQYXJzZWRTcGF3bkFyZ3M8VCBleHRlbmRzIFNwYXduT3B0aW9ucz4ge1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGNvbW1hbmRBcmdzOiBzdHJpbmdbXTtcbiAgb3B0aW9ucz86IFQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3Bhd25BcmdzPFQgZXh0ZW5kcyBTcGF3bk9wdGlvbnM+KGlucHV0OiBTcGF3bkFyZ3M8VD4pOiBQYXJzZWRTcGF3bkFyZ3M8VD4ge1xuICBsZXQgW3ZhbHVlLCAuLi52YWx1ZXNdID0gaW5wdXQ7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5jb21tYW5kQXJnc10gPSBzaGxleCh2YWx1ZSk7XG4gIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT0gMSAmJiB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1hbmQsXG4gICAgICBjb21tYW5kQXJnczogW10sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSB2YWx1ZXMuYXQoLTEpO1xuICBjb25zdCBvcHRpb25zID1cbiAgICBsYXN0ICE9PSBudWxsICYmIHR5cGVvZiBsYXN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGxhc3QpID8gbGFzdCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXJndW1lbnRWYWx1ZXMgPSBvcHRpb25zID8gdmFsdWVzLnNsaWNlKDAsIC0xKSA6IHZhbHVlcztcbiAgY29uc3QgdmFsdWVBcmdzOiBzdHJpbmdbXSA9XG4gICAgYXJndW1lbnRWYWx1ZXMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRWYWx1ZXNbMF0pXG4gICAgICA/IFsuLi5hcmd1bWVudFZhbHVlc1swXV1cbiAgICAgIDogYXJndW1lbnRWYWx1ZXM7XG5cbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kLFxuICAgIGNvbW1hbmRBcmdzOiBbLi4uY29tbWFuZEFyZ3MsIC4uLnZhbHVlQXJnc10sXG4gICAgb3B0aW9uczogb3B0aW9ucyBhcyBULFxuICB9O1xufVxuXG4vKipcbiAqIERyb3AgdGhlIHNpbmdsZSB0cmFpbGluZyBlbXB0eSBlbnRyeSBgc3Bhd25TeW5jYCBhZGRzIHdoZW4gc3BsaXR0aW5nIG9uIGEgZmluYWxcbiAqIG5ld2xpbmUgKGBcImhpXFxuXCJgIC0+IGBbXCJoaVwiLCBcIlwiXWApLiBEb2VzIG5vdCByZW1vdmUgbXVsdGlwbGUgdHJhaWxpbmcgZW1wdGllcy5cbiAqL1xuZnVuY3Rpb24gd2l0aG91dFNwYXduVHJhaWxpbmdFbXB0eUxpbmUobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xuICAgIHJldHVybiBsaW5lcy5zbGljZSgwLCAtMSk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzIGFzIHN0cmluZ1tdO1xufVxuXG4vKiogUmVtb3ZlIGF0IG1vc3Qgb25lIHRyYWlsaW5nIG5ld2xpbmUgZnJvbSBjYXB0dXJlZCBzcGF3biBzdGRvdXQvc3RkZXJyIHRleHQuICovXG5mdW5jdGlvbiB0cmltU2luZ2xlVHJhaWxpbmdOZXdsaW5lKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0ZXh0LmVuZHNXaXRoKFwiXFxyXFxuXCIpKSByZXR1cm4gdGV4dC5zbGljZSgwLCAtMik7XG4gIGlmICh0ZXh0LmVuZHNXaXRoKFwiXFxuXCIpKSByZXR1cm4gdGV4dC5zbGljZSgwLCAtMSk7XG4gIHJldHVybiB0ZXh0O1xufVxuXG4vKiogTGluZS1hcnJheSB2aWV3IG9mIGFzeW5jLWNhcHR1cmVkIG91dHB1dC4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRBc3luY0xpbmVzKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRyaW0gPT09IHRydWUpIHJldHVybiBsaW5lc0Zyb21DYXB0dXJlZE91dHB1dChsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKSk7XG4gIHJldHVybiBsaW5lcyBhcyBzdHJpbmdbXTtcbn1cblxuLyoqIEpvaW4gYXN5bmMtY2FwdHVyZWQgbGluZXMgaW50byBzdGRvdXQvc3RkZXJyIHRleHQuICovXG5mdW5jdGlvbiBmb3JtYXRBc3luY0NhcHR1cmVkTGluZXMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkID0gbGluZXMuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIHRyaW0gPT09IHRydWUgPyBqb2luZWQudHJpbSgpIDogam9pbmVkO1xufVxuXG4vKiogTGluZS1hcnJheSB2aWV3IG9mIHN5bmMtY2FwdHVyZWQgb3V0cHV0LiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplZFN5bmNMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIHRyaW06IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh0cmltID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzIGFzIHN0cmluZ1tdO1xuICBpZiAodHJpbSA9PT0gdHJ1ZSkgcmV0dXJuIGxpbmVzRnJvbUNhcHR1cmVkT3V0cHV0KGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpKTtcbiAgcmV0dXJuIHdpdGhvdXRTcGF3blRyYWlsaW5nRW1wdHlMaW5lKGxpbmVzKTtcbn1cblxuLyoqIEZvcm1hdCBzeW5jLWNhcHR1cmVkIHN0ZG91dC9zdGRlcnIgdGV4dC4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN5bmNDYXB0dXJlZFRleHQoXG4gIHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHJpbTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0cmltID09PSBmYWxzZSkgcmV0dXJuIHRleHQ7XG4gIGlmICh0cmltID09PSB0cnVlKSByZXR1cm4gdGV4dC50cmltKCk7XG4gIHJldHVybiB0cmltU2luZ2xlVHJhaWxpbmdOZXdsaW5lKHRleHQpO1xufVxuXG4vKipcbiAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciBhIHNwYXduZWQgY29tbWFuZCwgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIEV4ZWN1dGFibGUgbmFtZSBvciBwYXRoXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEByZXR1cm5zIEJhY2t0aWNrLXdyYXBwZWQgYGNvbW1hbmQgYXJnMSBhcmcyIC4uLmAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRMYWJlbChjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcXGAke2NvbW1hbmR9ICR7YXJncy5qb2luKFwiIFwiKX1cXGBgO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgTm9kZSBmYWlsZWQgdG8gc3Bhd24gYmVjYXVzZSB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kLiAqL1xuZnVuY3Rpb24gaXNDb21tYW5kTm90Rm91bmRFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCI7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHtAbGluayBzcGF3bn0gd2l0aCBsaXZlIGxpbmUgYXJyYXlzIGFuZCBsYXp5XG4gKiB0cmltbWVkIGBzdGRvdXRgIC8gYHN0ZGVycmAgZ2V0dGVycyBkZXJpdmVkIGZyb20gdGhvc2UgbGluZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4ZWNSZXN1bHQoXG4gIGV4aXRDb2RlOiBudW1iZXIsXG4gIHN0ZG91dExpbmVzOiBzdHJpbmdbXSxcbiAgc3RkZXJyTGluZXM6IHN0cmluZ1tdLFxuICB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogRXhlY1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgZXhpdENvZGUsXG4gICAgZ2V0IHN0ZG91dExpbmVzKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRBc3luY0xpbmVzKHN0ZG91dExpbmVzLCB0cmltKTtcbiAgICB9LFxuICAgIGdldCBzdGRlcnJMaW5lcygpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkQXN5bmNMaW5lcyhzdGRlcnJMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgICBnZXQgc3Rkb3V0KCkge1xuICAgICAgcmV0dXJuIGZvcm1hdEFzeW5jQ2FwdHVyZWRMaW5lcyhzdGRvdXRMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIGZvcm1hdEFzeW5jQ2FwdHVyZWRMaW5lcyhzdGRlcnJMaW5lcywgdHJpbSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20ge0BsaW5rIHNwYXduU3luY30uIENhcHR1cmVkIHN0cmluZ3MgYXJlIHN0b3JlZFxuICogYXMtaXM7IGBzdGRvdXRgIC8gYHN0ZGVycmAgdHJpbSBkaXJlY3RseSwgYW5kIGxpbmUgYXJyYXlzIHNwbGl0IG9ubHkgb24gcmVhZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3luY0V4ZWNSZXN1bHQoXG4gIGV4aXRDb2RlOiBudW1iZXIsXG4gIHN0ZG91dFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RkZXJyVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0cmltOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogRXhlY1Jlc3VsdCB7XG4gIGxldCBzdGRvdXRMaW5lc0NhY2hlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgbGV0IHN0ZGVyckxpbmVzQ2FjaGU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHN5bmNMaW5lcyA9ICh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbm9ybWFsaXplZFN5bmNMaW5lcyhsaW5lc0Zyb21DYXB0dXJlZE91dHB1dCh0ZXh0KSwgdHJpbSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZSxcbiAgICBnZXQgc3Rkb3V0TGluZXMoKSB7XG4gICAgICBpZiAoc3Rkb3V0VGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG4gICAgICBzdGRvdXRMaW5lc0NhY2hlID8/PSBzeW5jTGluZXMoc3Rkb3V0VGV4dCkgPz8gW107XG4gICAgICByZXR1cm4gc3Rkb3V0TGluZXNDYWNoZTtcbiAgICB9LFxuICAgIGdldCBzdGRlcnJMaW5lcygpIHtcbiAgICAgIGlmIChzdGRlcnJUZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICAgIHN0ZGVyckxpbmVzQ2FjaGUgPz89IHN5bmNMaW5lcyhzdGRlcnJUZXh0KSA/PyBbXTtcbiAgICAgIHJldHVybiBzdGRlcnJMaW5lc0NhY2hlO1xuICAgIH0sXG4gICAgZ2V0IHN0ZG91dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXRTeW5jQ2FwdHVyZWRUZXh0KHN0ZG91dFRleHQsIHRyaW0pID8/IFwiXCI7XG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIGZvcm1hdFN5bmNDYXB0dXJlZFRleHQoc3RkZXJyVGV4dCwgdHJpbSkgPz8gXCJcIjtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdXNlci1zdXBwbGllZCBsaW5lIGhhbmRsZXJzIGZyb20gYSB7QGxpbmsgU3RkaW9PcHRpb259LlxuICpcbiAqIFRoZSBgXCJjYXB0dXJlXCJgIG1hcmtlciBpcyBmaWx0ZXJlZCBvdXQ7IGNhcHR1cmUgaXRzZWxmIGlzIGFsd2F5cyBoYW5kbGVkIGJ5XG4gKiBwdXNoaW5nIGludG8gdGhlIGxpbmUgYnVmZmVyIGluc2lkZSB7QGxpbmsgcmVzb2x2ZVN0ZGlvfS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gU3RkaW8gb3B0aW9uIHRoYXQgbWF5IGVtYmVkIG9uZSBvciBtb3JlIGhhbmRsZXJzXG4gKiBAcmV0dXJucyBIYW5kbGVycyB0byBpbnZva2UgYWZ0ZXIgZWFjaCBjYXB0dXJlZCBsaW5lIChtYXkgYmUgZW1wdHkpXG4gKi9cbmZ1bmN0aW9uIGxpbmVIYW5kbGVycyhvcHRpb246IFN0ZGlvT3B0aW9uKTogTGluZUhhbmRsZXJbXSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBbb3B0aW9uXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgIHJldHVybiBvcHRpb24uZmlsdGVyKChpdGVtKTogaXRlbSBpcyBMaW5lSGFuZGxlciA9PiBpdGVtICE9PSBcImNhcHR1cmVcIik7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBhIHN0ZGlvIG9wdGlvbiBpcyBhIHN0cmluZyBzcGF3biBtb2RlIHJhdGhlciB0aGFuIGNhcHR1cmUvaGFuZGxlcnMuXG4gKlxuICoge0BsaW5rIHJlc29sdmVTdGRpb30gc3RpbGwgdHJlYXRzIGBcInBpcGVcImAgYXMgcGlwZS1hbmQtY2FwdHVyZTsgb25seVxuICogYFwiaW5oZXJpdFwiYCBhbmQgYFwiaWdub3JlXCJgIHJldHVybiB3aXRob3V0IGEgbGluZSBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gU3RkaW8gb3B0aW9uIHRvIGNsYXNzaWZ5XG4gKiBAcmV0dXJucyBXaGV0aGVyIGBvcHRpb25gIGlzIGBcImluaGVyaXRcImAsIGBcInBpcGVcImAsIG9yIGBcImlnbm9yZVwiYFxuICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoTW9kZShvcHRpb246IHVua25vd24pOiBvcHRpb24gaXMgRXhlY1N0ZGlvIHtcbiAgcmV0dXJuIG9wdGlvbiA9PT0gXCJpbmhlcml0XCIgfHwgb3B0aW9uID09PSBcInBpcGVcIiB8fCBvcHRpb24gPT09IFwiaWdub3JlXCI7XG59XG5cbi8qKiBUcnVlIHdoZW4gc3RkaW4gaXMgZGF0YSByYXRoZXIgdGhhbiBvbmUgb2YgdGhlIHRocmVlIHJlc2VydmVkIHN0ZGlvIG1vZGVzLiAqL1xuZnVuY3Rpb24gaXNTdGRpblBheWxvYWQoc3RkaW46IEV4ZWNTdGRpbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0ZGluIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2Ygc3RkaW4gPT09IFwic3RyaW5nXCIgJiYgIWlzUGFzc3Rocm91Z2hNb2RlKHN0ZGluKTtcbn1cblxuLyoqXG4gKiBNYXAgYSB7QGxpbmsgU3RkaW9PcHRpb259IGludG8gYSBzcGF3biBzdGRpbyBtb2RlIGFuZCBvcHRpb25hbCBsaW5lIGNhbGxiYWNrLlxuICpcbiAqIFBpcGVkIG1vZGVzIChgXCJjYXB0dXJlXCJgLCBgXCJwaXBlXCJgLCBoYW5kbGVycywgYXJyYXlzKSBhcHBlbmQgZXZlcnkgbGluZSB0b1xuICogYGxpbmVzYCBhbmQgaW52b2tlIGFueSBlbWJlZGRlZCBoYW5kbGVycy4gT21pdHRlZCBvcHRpb25zIHVzZSBgZGVmYXVsdE1vZGVgLlxuICpcbiAqIEBwYXJhbSBvcHRpb24gLSBDYWxsZXIgc3RkaW8gcHJlZmVyZW5jZSBmb3Igb25lIGZkXG4gKiBAcGFyYW0gbGluZXMgLSBNdXRhYmxlIGJ1ZmZlciB0aGF0IHJlY2VpdmVzIGVhY2ggcGlwZWQgbGluZVxuICogQHBhcmFtIGRlZmF1bHRNb2RlIC0gU3Bhd24gbW9kZSB3aGVuIGBvcHRpb25gIGlzIG9taXR0ZWQgKGBcImluaGVyaXRcImAgYnkgZGVmYXVsdClcbiAqIEByZXR1cm5zIFJlc29sdmVkIHNwYXduIG1vZGUgYW5kIG9wdGlvbmFsIHBlci1saW5lIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTdGRpbyhcbiAgb3B0aW9uOiBTdGRpb09wdGlvbiB8IHVuZGVmaW5lZCxcbiAgbGluZXM6IHN0cmluZ1tdLFxuICBkZWZhdWx0TW9kZTogRXhlY1N0ZGlvID0gXCJpbmhlcml0XCIsXG4pOiBSZXNvbHZlZFN0ZGlvIHtcbiAgaWYgKG9wdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBtb2RlOiBkZWZhdWx0TW9kZSB9O1xuICBpZiAoaXNQYXNzdGhyb3VnaE1vZGUob3B0aW9uKSAmJiBvcHRpb24gIT09IFwicGlwZVwiKSByZXR1cm4geyBtb2RlOiBvcHRpb24gfTtcblxuICBjb25zdCBoYW5kbGVycyA9IGxpbmVIYW5kbGVycyhvcHRpb24pO1xuICByZXR1cm4ge1xuICAgIG1vZGU6IFwicGlwZVwiLFxuICAgIG9uTGluZTogKGxpbmUpID0+IHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIGhhbmRsZXIobGluZSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWFkIGEgcmVhZGFibGUgc3RyZWFtIGxpbmUtYnktbGluZSBhbmQgaW52b2tlIGBvbkxpbmVgIGZvciBlYWNoIGNodW5rLlxuICpcbiAqIFVzZXMgYHJlYWRsaW5lYCBzbyBgXFxyXFxuYCBhbmQgYmFyZSBgXFxuYCBhcmUgbm9ybWFsaXplZC4gVGhlIGludGVyZmFjZSBpc1xuICogYWx3YXlzIGNsb3NlZCBpbiBhIGBmaW5hbGx5YCBibG9jay5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gU3VicHJvY2VzcyBzdGRvdXQgb3Igc3RkZXJyIHN0cmVhbVxuICogQHBhcmFtIG9uTGluZSAtIENhbGxiYWNrIGludm9rZWQgb25jZSBwZXIgb3V0cHV0IGxpbmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZExpbmVzKHN0cmVhbTogUmVhZGFibGUsIG9uTGluZTogTGluZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogc3RyZWFtLCBjcmxmRGVsYXk6IEluZmluaXR5IH0pO1xuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgbGluZSBvZiBybCkgb25MaW5lKGxpbmUpO1xuICB9IGZpbmFsbHkge1xuICAgIHJsLmNsb3NlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhIGJhY2tncm91bmQgbGluZSByZWFkIHdoZW4gdGhlIHJlc29sdmVkIGhhbmRsZXIgcGlwZXMgYSBzdHJlYW0uXG4gKlxuICogQHBhcmFtIHJlYWRzIC0gUHJvbWlzZSBsaXN0IGF3YWl0ZWQgYmVmb3JlIHJldHVybmluZyB0aGUge0BsaW5rIEV4ZWNSZXN1bHR9XG4gKiBAcGFyYW0gc3RyZWFtIC0gU3VicHJvY2VzcyBzdHJlYW0gZm9yIHRoaXMgZmQgKGBudWxsYCB3aGVuIHVuYXZhaWxhYmxlKVxuICogQHBhcmFtIGhhbmRsZXIgLSBSZXNvbHZlZCBzdGRpbyBjb25maWcgZnJvbSB7QGxpbmsgcmVzb2x2ZVN0ZGlvfVxuICovXG5mdW5jdGlvbiBxdWV1ZUxpbmVSZWFkcyhcbiAgcmVhZHM6IFByb21pc2U8dm9pZD5bXSxcbiAgc3RyZWFtOiBSZWFkYWJsZSB8IG51bGwsXG4gIGhhbmRsZXI6IFJlc29sdmVkU3RkaW8sXG4pOiB2b2lkIHtcbiAgaWYgKGhhbmRsZXIub25MaW5lICYmIHN0cmVhbSkgcmVhZHMucHVzaChyZWFkTGluZXMoc3RyZWFtLCBoYW5kbGVyLm9uTGluZSkpO1xufVxuXG4vKipcbiAqIFdyaXRlIHN0cmluZyBzdGRpbiB0byBhIHNwYXduZWQgcHJvY2VzcyBhbmQgY2xvc2UgdGhlIHN0cmVhbS5cbiAqXG4gKiBOby1vcCB1bmxlc3MgYHN0ZGluYCBpcyBhIHBheWxvYWQgc3RyaW5nIChub3QgYSBzdGRpbyBtb2RlKSBhbmRcbiAqIGBwcm9jLnN0ZGluYCBpcyBhdmFpbGFibGUuIEEgY2hpbGQgdGhhdCBleGl0cyBiZWZvcmUgY29uc3VtaW5nIHRoZSBwYXlsb2FkXG4gKiBjbG9zZXMgaXRzIHBpcGU7IEVQSVBFIGlzIGV4cGVjdGVkIGluIHRoYXQgY2FzZSBhbmQgaXMgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0gcHJvYyAtIENoaWxkIHByb2Nlc3MgcmV0dXJuZWQgZnJvbSBgc3Bhd25gXG4gKiBAcGFyYW0gc3RkaW4gLSBTdGRpbyBtb2RlIG9yIHN0cmluZyBwYXlsb2FkIGZyb20ge0BsaW5rIEV4ZWNPcHRpb25zfVxuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZVN0ZGluKFxuICBwcm9jOiBDaGlsZFByb2Nlc3MsXG4gIHN0ZGluOiBFeGVjU3RkaW8gfCBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFpc1N0ZGluUGF5bG9hZChzdGRpbikgfHwgIXByb2Muc3RkaW4pIHJldHVybjtcbiAgY29uc3QgY29tcGxldGlvbiA9IGZpbmlzaGVkKHByb2Muc3RkaW4sIHsgY2xlYW51cDogdHJ1ZSB9KTtcbiAgcHJvYy5zdGRpbi5lbmQoc3RkaW4pO1xuICB0cnkge1xuICAgIGF3YWl0IGNvbXBsZXRpb247XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVyciAmJiBlcnIuY29kZSA9PT0gXCJFUElQRVwiKSkgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogQXdhaXQgcHJvY2VzcyBleGl0IGFuZCBub3JtYWxpemUgYSBtaXNzaW5nIGV4aXQgY29kZSB0byBgMWAuXG4gKlxuICogUmVqZWN0cyB3aGVuIHNwYXduIGZhaWxzIGJlZm9yZSBgY2xvc2VgIChlLmcuIGV4ZWN1dGFibGUgbm90IGZvdW5kKS5cbiAqXG4gKiBAcGFyYW0gcHJvYyAtIENoaWxkIHByb2Nlc3MgcmV0dXJuZWQgZnJvbSBgc3Bhd25gXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gd2FpdEZvckV4aXQocHJvYzogQ2hpbGRQcm9jZXNzKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBwcm9jLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHByb2Mub25jZShcImNsb3NlXCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhbiBgRXJyb3JgIGZvciBhIG5vbi16ZXJvIGV4aXQgd2hlbiB7QGxpbmsgRXhlY09wdGlvbnMuY2hlY2t9IGlzIHNldC5cbiAqXG4gKiBQcmVmZXJzIHRyaW1tZWQgc3RkZXJyIHRleHQsIHRoZW4gc3Rkb3V0LCBpbiB0aGUgbWVzc2FnZSBib2R5LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSBuYW1lIG9yIHBhdGhcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZVxuICogQHBhcmFtIHJlc3VsdCAtIENvbXBsZXRlZCBleGVjIG91dGNvbWUgd2l0aCBjYXB0dXJlZCBvdXRwdXRcbiAqIEByZXR1cm5zIEVycm9yIHN1aXRhYmxlIGZvciB0aHJvd2luZyBmcm9tIHtAbGluayBzcGF3bn1cbiAqL1xuZnVuY3Rpb24gZXhlY0Vycm9yKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIHJlc3VsdDogRXhlY1Jlc3VsdCk6IEVycm9yIHtcbiAgY29uc3QgZGV0YWlsID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0O1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIGAke2NvbW1hbmRMYWJlbChjb21tYW5kLCBhcmdzKX0gZmFpbGVkIChleGl0ICR7cmVzdWx0LmV4aXRDb2RlfSkke2RldGFpbCA/IGA6ICR7ZGV0YWlsfWAgOiBcIlwifWAsXG4gICk7XG59XG5cbi8qKlxuICogTWFwIGEge0BsaW5rIFN5bmNFeGVjU3RkaW99IG9wdGlvbiB0byBhIGBzcGF3blN5bmNgIHN0ZGlvIG1vZGUuXG4gKlxuICogYFwiY2FwdHVyZVwiYCBwaXBlcyB0aGUgZmQgc28gb3V0cHV0IGNhbiBiZSByZWFkIGludG8gdGhlIHtAbGluayBFeGVjUmVzdWx0fS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIC0gQ2FsbGVyIHN0ZGlvIHByZWZlcmVuY2UgZm9yIG9uZSBmZFxuICogQHBhcmFtIGRlZmF1bHRNb2RlIC0gU3Bhd24gbW9kZSB3aGVuIGBvcHRpb25gIGlzIG9taXR0ZWQgKGBcImluaGVyaXRcImAgYnkgZGVmYXVsdClcbiAqIEByZXR1cm5zIFZhbHVlIGZvciB0aGUgYHNwYXduU3luY2Agc3RkaW8gdHVwbGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVN5bmNTdGRpbyhcbiAgb3B0aW9uOiBTeW5jRXhlY1N0ZGlvIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0TW9kZTogRXhlY1N0ZGlvID0gXCJpbmhlcml0XCIsXG4pOiBFeGVjU3RkaW8ge1xuICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0TW9kZTtcbiAgaWYgKG9wdGlvbiA9PT0gXCJjYXB0dXJlXCIpIHJldHVybiBcInBpcGVcIjtcbiAgcmV0dXJuIG9wdGlvbjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGBzcGF3blN5bmNgIG91dHB1dCB0byBhIFVURi04IHN0cmluZyB3aGVuIGNhcHR1cmUgaXMgZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZWRUZXh0KG91dHB1dDogc3RyaW5nIHwgQnVmZmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChvdXRwdXQgPT09IG51bGwgfHwgb3V0cHV0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSBcInN0cmluZ1wiID8gb3V0cHV0IDogb3V0cHV0LnRvU3RyaW5nKFwidXRmOFwiKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBjYXB0dXJlZCBwcm9jZXNzIG91dHB1dCBpbnRvIGxpbmVzIGZvciB7QGxpbmsgRXhlY1Jlc3VsdC5zdGRvdXRMaW5lc30gL1xuICoge0BsaW5rIEV4ZWNSZXN1bHQuc3RkZXJyTGluZXN9ICh7QGxpbmsgc3Bhd25TeW5jfSBvbmx5OyBpbnZva2VkIGxhemlseSkuXG4gKi9cbmZ1bmN0aW9uIGxpbmVzRnJvbUNhcHR1cmVkT3V0cHV0KG91dHB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKS5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIikuc3BsaXQoXCJcXG5cIik7XG59XG5cbi8qKlxuICogU3Bhd24gYSBzdWJwcm9jZXNzIGFuZCB3YWl0IGZvciBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSB0byBydW4gKHJlc29sdmVkIG9uIGBQQVRIYCB3aGVuIGBzaGVsbGAgaXMgc2V0IG9uIG9wdGlvbnMpXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdmVyYmF0aW0gdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gU3Bhd24sIHN0ZGlvLCBhbmQgY2hlY2sgb3B0aW9uc1xuICogQHJldHVybnMgRXhpdCBjb2RlLCBjYXB0dXJlZCBsaW5lIGFycmF5cywgYW5kIHRyaW1tZWQgYHN0ZG91dGAgLyBgc3RkZXJyYCBnZXR0ZXJzXG4gKiBAdGhyb3dzIFdoZW4gc3Bhd24gZmFpbHMgZm9yIGEgcmVhc29uIG90aGVyIHRoYW4gYSBtaXNzaW5nIGV4ZWN1dGFibGUsIGxpbmVcbiAqIHJlYWRzIGZhaWwsIG9yIGBjaGVja2AgaXMgdHJ1ZSBhbmQgZXhpdCBjb2RlIGlzIG5vbi16ZXJvXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGF3biguLi5hcmdzOiBTcGF3bkFyZ3M8RXhlY09wdGlvbnM+KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IHsgY29tbWFuZCwgY29tbWFuZEFyZ3MsIG9wdGlvbnMgPSB7fSB9ID0gcGFyc2VTcGF3bkFyZ3MoYXJncyk7XG4gIGNvbnN0IHsgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBjaGVjaywgdHJpbSwgLi4uc3Bhd25PcHRzIH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGRvdXRMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3RkZXJyTGluZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHN0ZG91dEhhbmRsZXIgPSByZXNvbHZlU3RkaW8oc3Rkb3V0LCBzdGRvdXRMaW5lcyk7XG4gIGNvbnN0IHN0ZGVyckhhbmRsZXIgPSByZXNvbHZlU3RkaW8oc3RkZXJyLCBzdGRlcnJMaW5lcyk7XG4gIGNvbnN0IHN0ZGluTW9kZTogRXhlY1N0ZGlvID0gaXNTdGRpblBheWxvYWQoc3RkaW4pID8gXCJwaXBlXCIgOiAoc3RkaW4gPz8gXCJpbmhlcml0XCIpO1xuXG4gIGNvbnN0IHByb2MgPSBub2RlU3Bhd24oY29tbWFuZCwgY29tbWFuZEFyZ3MsIHtcbiAgICAuLi5zcGF3bk9wdHMsXG4gICAgc3RkaW86IFtzdGRpbk1vZGUsIHN0ZG91dEhhbmRsZXIubW9kZSwgc3RkZXJySGFuZGxlci5tb2RlXSxcbiAgfSk7XG5cbiAgY29uc3Qgc3RkaW5Xcml0ZSA9IHdyaXRlU3RkaW4ocHJvYywgc3RkaW4pO1xuXG4gIGNvbnN0IHJlYWRzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgcXVldWVMaW5lUmVhZHMocmVhZHMsIHByb2Muc3Rkb3V0LCBzdGRvdXRIYW5kbGVyKTtcbiAgcXVldWVMaW5lUmVhZHMocmVhZHMsIHByb2Muc3RkZXJyLCBzdGRlcnJIYW5kbGVyKTtcblxuICBsZXQgZXhpdENvZGUgPSAxO1xuICBsZXQgY29tbWFuZE5vdEZvdW5kRXJyb3I6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBleGl0Q29kZSA9IGF3YWl0IHdhaXRGb3JFeGl0KHByb2MpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtzdGRpbldyaXRlLCAuLi5yZWFkc10pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3N0ZGluV3JpdGUsIC4uLnJlYWRzXSk7XG4gICAgaWYgKCFpc0NvbW1hbmROb3RGb3VuZEVycm9yKGVycikpIHRocm93IGVycjtcbiAgICBjb21tYW5kTm90Rm91bmRFcnJvciA9IGVycjtcbiAgICBleGl0Q29kZSA9IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUV4ZWNSZXN1bHQoZXhpdENvZGUsIHN0ZG91dExpbmVzLCBzdGRlcnJMaW5lcywgdHJpbSk7XG4gIGlmIChjaGVjayAmJiByZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIHJlc3VsdCk7XG4gICAgaWYgKGNvbW1hbmROb3RGb3VuZEVycm9yKSBlcnIuY2F1c2UgPSBjb21tYW5kTm90Rm91bmRFcnJvcjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBTcGF3biBhIHN1YnByb2Nlc3Mgc3luY2hyb25vdXNseSBhbmQgd2FpdCBmb3IgZXhpdC5cbiAqXG4gKiBVbmxpa2Uge0BsaW5rIHNwYXdufSwgc3RkaW8gb3B0aW9ucyBhcmUgbGltaXRlZCB0byBgXCJpbmhlcml0XCJgLCBgXCJwaXBlXCJgLFxuICogYFwiaWdub3JlXCJgLCBhbmQgYFwiY2FwdHVyZVwiYCDigJQgbm8gcGVyLWxpbmUgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gRXhlY3V0YWJsZSB0byBydW4gKHJlc29sdmVkIG9uIGBQQVRIYCB3aGVuIGBzaGVsbGAgaXMgc2V0IG9uIG9wdGlvbnMpXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdmVyYmF0aW0gdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBzcGF3blN5bmMgLSBTcGF3biwgc3RkaW8sIGFuZCBjaGVjayBvcHRpb25zXG4gKiBAcmV0dXJucyBFeGl0IGNvZGUsIGNhcHR1cmVkIGxpbmUgYXJyYXlzLCBhbmQgdHJpbW1lZCBgc3Rkb3V0YCAvIGBzdGRlcnJgIGdldHRlcnNcbiAqIEB0aHJvd3MgV2hlbiBzcGF3biBmYWlscyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIG1pc3NpbmcgZXhlY3V0YWJsZSwgb3JcbiAqIGBjaGVja2AgaXMgdHJ1ZSBhbmQgZXhpdCBjb2RlIGlzIG5vbi16ZXJvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmMoLi4uYXJnczogU3Bhd25BcmdzPFN5bmNFeGVjT3B0aW9ucz4pOiBFeGVjUmVzdWx0IHtcbiAgY29uc3QgeyBjb21tYW5kLCBjb21tYW5kQXJncywgb3B0aW9ucyA9IHt9IH0gPSBwYXJzZVNwYXduQXJncyhhcmdzKTtcbiAgY29uc3QgeyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGNoZWNrLCB0cmltLCAuLi5zcGF3bk9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0ZGluTW9kZTogRXhlY1N0ZGlvID0gaXNTdGRpblBheWxvYWQoc3RkaW4pID8gXCJwaXBlXCIgOiAoc3RkaW4gPz8gXCJpbmhlcml0XCIpO1xuICBjb25zdCBjYXB0dXJlU3Rkb3V0ID0gc3Rkb3V0ID09PSBcImNhcHR1cmVcIjtcbiAgY29uc3QgY2FwdHVyZVN0ZGVyciA9IHN0ZGVyciA9PT0gXCJjYXB0dXJlXCI7XG4gIGNvbnN0IHN0ZG91dE1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZG91dCk7XG4gIGNvbnN0IHN0ZGVyck1vZGUgPSByZXNvbHZlU3luY1N0ZGlvKHN0ZGVycik7XG5cbiAgY29uc3QgcmVzdWx0ID0gbm9kZVNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJncywge1xuICAgIC4uLnNwYXduT3B0cyxcbiAgICBlbmNvZGluZzogY2FwdHVyZVN0ZG91dCB8fCBjYXB0dXJlU3RkZXJyID8gXCJ1dGY4XCIgOiB1bmRlZmluZWQsXG4gICAgc3RkaW86IFtzdGRpbk1vZGUsIHN0ZG91dE1vZGUsIHN0ZGVyck1vZGVdLFxuICAgIGlucHV0OiBpc1N0ZGluUGF5bG9hZChzdGRpbikgPyBzdGRpbiA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZE5vdEZvdW5kID0gaXNDb21tYW5kTm90Rm91bmRFcnJvcihyZXN1bHQuZXJyb3IpO1xuICBjb25zdCBleGl0Q29kZSA9IGNvbW1hbmROb3RGb3VuZCA/IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSA6IChyZXN1bHQuc3RhdHVzID8/IDEpO1xuICBjb25zdCBzdGRvdXRUZXh0ID0gY2FwdHVyZVN0ZG91dCA/IGNhcHR1cmVkVGV4dChyZXN1bHQuc3Rkb3V0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RkZXJyVGV4dCA9IGNhcHR1cmVTdGRlcnIgPyBjYXB0dXJlZFRleHQocmVzdWx0LnN0ZGVycikgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBjcmVhdGVTeW5jRXhlY1Jlc3VsdChleGl0Q29kZSwgc3Rkb3V0VGV4dCwgc3RkZXJyVGV4dCwgdHJpbSk7XG5cbiAgaWYgKHJlc3VsdC5lcnJvciAmJiAoIWNvbW1hbmROb3RGb3VuZCB8fCBjaGVjaykpIHtcbiAgICBjb25zdCBlcnIgPSBleGVjRXJyb3IoY29tbWFuZCwgY29tbWFuZEFyZ3MsIGV4ZWNSZXN1bHQpO1xuICAgIGVyci5jYXVzZSA9IHJlc3VsdC5lcnJvcjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBpZiAoY2hlY2sgJiYgZXhlY1Jlc3VsdC5leGl0Q29kZSAhPT0gMCkgdGhyb3cgZXhlY0Vycm9yKGNvbW1hbmQsIGNvbW1hbmRBcmdzLCBleGVjUmVzdWx0KTtcbiAgcmV0dXJuIGV4ZWNSZXN1bHQ7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc2hlbGwtbGlrZSBjb21tYW5kIGludG8gYXJndi5cbiAqXG4gKiBTdXBwb3J0czpcbiAqICAgLSB3aGl0ZXNwYWNlIHNlcGFyYXRvcnNcbiAqICAgLSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXNcbiAqICAgLSBiYWNrc2xhc2ggZXNjYXBpbmdcbiAqICAgLSBlc2NhcGVkIHNwYWNlc1xuICogICAtIGVtcHR5IHF1b3RlZCBzdHJpbmdzXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIG1hbGZvcm1lZCAoZm9yIGV4YW1wbGUsIGFuIHVudGVybWluYXRlZCBxdW90ZSksXG4gKiByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXMgYSBzaW5nbGUgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGxleChjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICBsZXQgcXVvdGU6IFwiJ1wiIHwgJ1wiJyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgbGV0IHF1b3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHB1c2ggPSAoKSA9PiB7XG4gICAgaWYgKHF1b3RlZCB8fCBjdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFyZ3MucHVzaChjdXJyZW50KTtcbiAgICB9XG4gICAgY3VycmVudCA9IFwiXCI7XG4gICAgcXVvdGVkID0gZmFsc2U7XG4gIH07XG5cbiAgZm9yIChjb25zdCBjaCBvZiBjb21tYW5kKSB7XG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChxdW90ZSkge1xuICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiJ1wiIHx8IGNoID09PSAnXCInKSB7XG4gICAgICBxdW90ZSA9IGNoO1xuICAgICAgcXVvdGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvXFxzLy50ZXN0KGNoKSkge1xuICAgICAgcHVzaCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY3VycmVudCArPSBjaDtcbiAgfVxuXG4gIC8vIE1hbGZvcm1lZCBpbnB1dDogdHJlYXQgYXMgYSBsaXRlcmFsIGNvbW1hbmQuXG4gIGlmIChxdW90ZSkge1xuICAgIHJldHVybiBbY29tbWFuZF07XG4gIH1cblxuICAvLyBUcmFpbGluZyBiYWNrc2xhc2ggaXMgbGl0ZXJhbC5cbiAgaWYgKGVzY2FwZWQpIHtcbiAgICBjdXJyZW50ICs9IFwiXFxcXFwiO1xuICB9XG5cbiAgcHVzaCgpO1xuXG4gIHJldHVybiBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBbY29tbWFuZF07XG59XG4iXX0=
@@ -20,7 +20,7 @@ const ROOT_MARKERS = [
20
20
  */
21
21
  function projectContextCommandOutput(command, args, cwd) {
22
22
  const result = spawnSync(command, args, { cwd, stdio: ["ignore", "pipe", "ignore"] });
23
- const output = result.stdout.toString().trim();
23
+ const output = result?.stdout?.toString()?.trim();
24
24
  if (result.status === 0 && output) {
25
25
  const pathStats = stat(output);
26
26
  // Only an EXPLICIT `scheme://...` counts as a URL. `urlBuilder` otherwise
@@ -295,4 +295,4 @@ if (import.meta.main) {
295
295
  console.log("repository url:", repositoryUrl());
296
296
  console.log("repository url (npm):", repositoryUrl(process.cwd(), "npm"));
297
297
  }
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQVMsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTdDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLGVBQWU7SUFDZixjQUFjO0NBQ04sQ0FBQztBQWtCWDs7Ozs7OztHQU9HO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLEdBQVc7SUFDL0UsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQiwwRUFBMEU7UUFDMUUsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsTUFBTSxHQUFHLEdB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YXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFN0YXRzLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBoYXNoLCBqc29uLCBuZXQsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBzdGF0U3luYyBhcyBzdGF0IH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuXG5jb25zdCBST09UX01BUktFUlMgPSBbXG4gIFwiLnByb2plbnJjLnRzXCIsXG4gIFwiLnByb2plbnJjLmpzXCIsXG4gIFwiLnByb2plbnJjLm1qc1wiLFxuICBcIi5wcm9qZW5yYy5janNcIixcbiAgXCJwYWNrYWdlLmpzb25cIixcbl0gYXMgY29uc3Q7XG5cbi8qKiBBIGNvbW1hbmQncyBzdGRvdXQsIGNsYXNzaWZpZWQgYXMgYSBmaWxlc3lzdGVtIHBhdGggYW5kL29yIGEgVVJMLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q29udGV4dCB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcbiAgLyoqIGBvdXRwdXRgIHdoZW4gaXQgbmFtZXMgc29tZXRoaW5nIG9uIGRpc2suICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gIC8qKiBgZnMuc3RhdGAgb2Yge0BsaW5rIHBhdGh9LCB3aGVuIGl0IGV4aXN0cy4gKi9cbiAgcmVhZG9ubHkgcGF0aFN0YXRzPzogU3RhdHM7XG4gIC8qKlxuICAgKiBgb3V0cHV0YCBwYXJzZWQgaW50byBhIGNoYWluYWJsZSB7QGxpbmsgbmV0LlVybEJ1aWxkZXJ9LCB3aGVuIGl0IGlzIGEgcmVhbFxuICAgKiBuZXR3b3JrIFVSTCAtIGEgbm9uLWJsYW5rIHNjaGVtZSAobm90IGBmaWxlOmApIEFORCBhIG5vbi1ibGFuayBob3N0bmFtZS5cbiAgICogQmFyZSBwYXRocywgc2NwLWxpa2UgYGdpdEBob3N0Oi4uLmAgcmVtb3RlcywgYW5kIGBmaWxlOmAgVVJMcyBzdGF5IHVuc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsPzogbmV0LlVybEJ1aWxkZXI7XG59XG5cbi8qKlxuICogYmVjYXVzZSB0aGlzIGlzIGNydWNpYWwgZG8gbm90IHVzZSBleGVjLnNwYXduU3luY1xuICpcbiAqIFJ1biBgY29tbWFuZCBhcmdzYCBpbiBgY3dkYCBhbmQgY2xhc3NpZnkgaXRzIHN0ZG91dDogYHBhdGhgICsgYHBhdGhTdGF0c2Agd2hlblxuICogdGhlIG91dHB1dCBuYW1lcyBzb21ldGhpbmcgb24gZGlzaywgYHVybGAgKGEge0BsaW5rIG5ldC5VcmxCdWlsZGVyfSkgd2hlbiBpdFxuICogcGFyc2VzIGFzIGEgcmVhbCBuZXR3b3JrIFVSTC4gRW1wdHkge0BsaW5rIFByb2plY3RDb250ZXh0fSBvbiBhIG5vbi16ZXJvIGV4aXRcbiAqIG9yIGVtcHR5IG91dHB1dC5cbiAqL1xuZnVuY3Rpb24gcHJvamVjdENvbnRleHRDb21tYW5kT3V0cHV0KGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvamVjdENvbnRleHQge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZCwgYXJncywgeyBjd2QsIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdIH0pO1xuICBjb25zdCBvdXRwdXQgPSByZXN1bHQuc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCAmJiBvdXRwdXQpIHtcbiAgICBjb25zdCBwYXRoU3RhdHMgPSBzdGF0KG91dHB1dCk7XG4gICAgLy8gT25seSBhbiBFWFBMSUNJVCBgc2NoZW1lOi8vLi4uYCBjb3VudHMgYXMgYSBVUkwuIGB1cmxCdWlsZGVyYCBvdGhlcndpc2VcbiAgICAvLyBzeW50aGVzaXplcyBvbmUgKGEgYmFyZSBgZXhhbXBsZS5jb21gIC0+IGBodHRwczovL+KApmAsIGFuIGFic29sdXRlIHBhdGggLT5cbiAgICAvLyBgaHR0cDovL2xvY2FsaG9zdC/igKZgKSwgd2hpY2ggd291bGQgbWlzbGFiZWwgZGlyZWN0b3J5IG91dHB1dHMgYW5kIGJhcmVcbiAgICAvLyB0b2tlbnMgLSBzbyBnYXRlIG9uIHRoZSByYXcgb3V0cHV0IGFscmVhZHkgY2FycnlpbmcgYSBzY2hlbWUgKyBhdXRob3JpdHkuXG4gICAgY29uc3QgdXJsID0gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KG91dHB1dCkgPyBuZXQudXJsQnVpbGRlcihvdXRwdXQpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGN3ZCwgb3V0cHV0LCBwYXRoOiBwYXRoU3RhdHMgPyBvdXRwdXQgOiB1bmRlZmluZWQsIHBhdGhTdGF0cywgdXJsIH07XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBvdXRwdXQgfTtcbn1cblxuLyoqXG4gKiBgcGFyc2VDb21tYW5kYCwgbWVtb2l6ZWQgcGVyIGAoY29tbWFuZCwgYXJncywgY3dkKWAgLSBzdG9yZXMgdGhlIHdob2xlXG4gKiB7QGxpbmsgUHJvamVjdENvbnRleHR9LiBUaGUgY2FjaGUga2V5IGlzIGEgc3RhYmxlIHtAbGluayBoYXNoLmZudkhhc2h9IG9mIHRoYXRcbiAqIHR1cGxlIChvcmRlci1zZW5zaXRpdmUgb3ZlciBgYXJnc2ApLCBzbyBgY3dkYCBpcyBwYXJ0IG9mIHRoZSBrZXkgYW5kIGEgbG9va3VwXG4gKiBpbiBhbm90aGVyIGRpcmVjdG9yeSBjYW4ndCBjb2xsaWRlIHdpdGggdGhlIGRlZmF1bHQtY3dkIGVudHJ5LlxuICovXG5jb25zdCBwYXJzZWRDb21tYW5kQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvamVjdENvbnRleHQ+KCk7XG5cbmZ1bmN0aW9uIHByb2plY3RDb250ZXh0Q29tbWFuZChjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBjd2Q/OiBzdHJpbmcpOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHByb2Nlc3NDd2QgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCkpO1xuICBsZXQgY2FjaGVFbmFibGVkOiBib29sZWFuO1xuICBpZiAoIWN3ZCkge1xuICAgIGN3ZCA9IHByb2Nlc3NDd2Q7XG4gICAgY2FjaGVFbmFibGVkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjd2QgPSByZXNvbHZlKGN3ZCk7XG4gICAgaWYgKGN3ZCA9PSBwcm9jZXNzQ3dkKSB7XG4gICAgICBjYWNoZUVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2FjaGVLZXkgPSBjYWNoZUVuYWJsZWQgPyBoYXNoLmZudkhhc2goY29tbWFuZCwgYXJncykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNhY2hlSGl0ID0gY2FjaGVLZXkgPyBwYXJzZWRDb21tYW5kQ2FjaGUuZ2V0KGNhY2hlS2V5KSA6IHVuZGVmaW5lZDtcbiAgaWYgKGNhY2hlSGl0Py5jd2QgPT09IGN3ZCkge1xuICAgIHJldHVybiBjYWNoZUhpdDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwcm9qZWN0Q29udGV4dENvbW1hbmRPdXRwdXQoY29tbWFuZCwgYXJncywgY3dkKTtcbiAgaWYgKGNhY2hlS2V5KSB7XG4gICAgcGFyc2VkQ29tbWFuZENhY2hlLnNldChjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBucG1Sb290KGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnNlZCA9IHByb2plY3RDb250ZXh0Q29tbWFuZChcIm5wbVwiLCBbXCJwcmVmaXhcIl0sIGN3ZCk7XG4gIHJldHVybiBwYXJzZWQucGF0aFN0YXRzPy5pc0RpcmVjdG9yeSgpID8gcGFyc2VkLnBhdGggOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdpdFJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyc2VkID0gcHJvamVjdENvbnRleHRDb21tYW5kKFwiZ2l0XCIsIFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwgY3dkKTtcbiAgcmV0dXJuIHBhcnNlZC5wYXRoU3RhdHM/LmlzRGlyZWN0b3J5KCkgPyBwYXJzZWQucGF0aCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvb3QoY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnQgPSByZXNvbHZlKGN3ZCk7XG5cbiAgaWYgKCFzdGF0KGN1cnJlbnQpPy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgY3VycmVudCA9IGRpcm5hbWUoY3VycmVudCk7XG4gIH1cbiAgY29uc3QgYm91bmRhcmllcyA9IG5ldyBTZXQoXG4gICAgW25wbVJvb3QoY3dkKSwgZ2l0Um9vdChjd2QpXVxuICAgICAgLmZpbHRlcigocGF0aCk6IHBhdGggaXMgc3RyaW5nID0+IHBhdGggIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHBhdGgpID0+IHJlc29sdmUocGF0aCkpLFxuICApO1xuICBjb25zdCBoYXNCb3VuZGFyeSA9IGJvdW5kYXJpZXMuc2l6ZSA+IDA7XG4gIGxldCBiZXN0OiB7IGRpcjogc3RyaW5nOyBwcmlvcml0eTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgZm9yIChjb25zdCBbcHJpb3JpdHksIG1hcmtlcl0gb2YgUk9PVF9NQVJLRVJTLmVudHJpZXMoKSkge1xuICAgICAgaWYgKHN0YXQoam9pbihjdXJyZW50LCBtYXJrZXIpKT8uaXNGaWxlKCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGJlc3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHByaW9yaXR5IDwgYmVzdC5wcmlvcml0eSB8fFxuICAgICAgICAgIChwcmlvcml0eSA9PT0gYmVzdC5wcmlvcml0eSAmJiBjdXJyZW50Lmxlbmd0aCA8IGJlc3QuZGlyLmxlbmd0aClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYmVzdCA9IHsgZGlyOiBjdXJyZW50LCBwcmlvcml0eSB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhhc0JvdW5kYXJ5ICYmIGJlc3QpIHtcbiAgICAgIHJldHVybiBiZXN0LmRpcjtcbiAgICB9XG4gICAgaWYgKGJvdW5kYXJpZXMuaGFzKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gYmVzdD8uZGlyO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBiZXN0Py5kaXI7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdpdCByZW1vdGUgVVJMIChgaHR0cHM6Ly8uLi5gLCBgZ2l0QGhvc3Q6b3duZXIvcmVwby5naXRgLCBldGMuKSBhbmRcbiAqIHJldHVybiB0aGUgcmVwbyBzZWdtZW50LCBzdHJpcHBpbmcgYW55IGAuZ2l0YCBzdWZmaXguIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yXG4gKiBlbXB0eSBvciB1bnBhcnNhYmxlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VHaXRSZW1vdGUodXJsOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0cmltbWVkID0gdXJsLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNjcCA9IC9eW15AXStAW146XSs6KC4rKSQvaS5leGVjKHRyaW1tZWQpO1xuICBpZiAoc2NwKSByZXR1cm4gbGFzdFBhdGhTZWdtZW50KHNjcFsxXSA/PyBcIlwiKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0cmltbWVkLnJlcGxhY2UoL1xcLmdpdCQvaSwgXCJcIik7XG4gICAgY29uc3QgcGF0aG5hbWUgPSBuZXcgVVJMKG5vcm1hbGl6ZWQpLnBhdGhuYW1lO1xuICAgIGNvbnN0IHNlZ21lbnQgPSBwYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmF0KC0xKTtcbiAgICByZXR1cm4gc2VnbWVudCA/IGxhc3RQYXRoU2VnbWVudChzZWdtZW50KSA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXN0UGF0aFNlZ21lbnQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudCA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKS5hdCgtMSkgPz8gcGF0aDtcbiAgcmV0dXJuIHNlZ21lbnQucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBZaWVsZCBjYW5kaWRhdGUgcHJvamVjdC1yb290IGRpcmVjdG9yaWVzIGZvciBgY3dkYCwgaW4gcHJpb3JpdHkgb3JkZXI6IHRoZVxuICogYG5wbSBwcmVmaXhgLCB0aGUgZ2l0IHRvcC1sZXZlbCwgdGhlbiBgY3dkYCBpdHNlbGYuIER1cGxpY2F0ZXMgYXJlIHNraXBwZWQ7XG4gKiBvbmx5IGV4aXN0aW5nIGRpcmVjdG9yaWVzIGFyZSB5aWVsZGVkIChleGNlcHQgdGhlIGZpbmFsIGBjd2RgIGZhbGxiYWNrKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNvbHZlUHJvamVjdFJvb3RzKGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IEdlbmVyYXRvcjxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZSA9IHJlc29sdmUoY3dkKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBbbnBtUm9vdChiYXNlKSwgZ2l0Um9vdChiYXNlKV0pIHtcbiAgICBpZiAoIWNhbmRpZGF0ZSkgY29udGludWU7XG4gICAgY29uc3QgZGlyID0gcmVzb2x2ZShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhkaXIpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChkaXIpO1xuICAgIGlmIChzdGF0KGRpcik/LmlzRGlyZWN0b3J5KCkpIHlpZWxkIGRpcjtcbiAgfVxuICBpZiAoIXNlZW4uaGFzKGJhc2UpKSB5aWVsZCBiYXNlO1xufVxuXG4vKiogVGhlIG5lYXJlc3QgYW5jZXN0b3Igb2YgYGN3ZGAgKGZyb20ge0BsaW5rIHJlc29sdmVQcm9qZWN0Um9vdHN9KSB3aXRoIGEgYHBhY2thZ2UuanNvbmAuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VSb290KGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIGxldCBsYXN0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZGlyIG9mIHJlc29sdmVQcm9qZWN0Um9vdHMoY3dkKSkge1xuICAgIGlmIChzdGF0KHJlc29sdmUoZGlyLCBcInBhY2thZ2UuanNvblwiKSk/LmlzRmlsZSgpKSByZXR1cm4gZGlyO1xuICAgIGxhc3QgPSBkaXI7XG4gIH1cbiAgcmV0dXJuIGxhc3QgPz8gcmVzb2x2ZShjd2QpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBodW1hbi1mcmllbmRseSBwcm9qZWN0IG5hbWUgZm9yIHRoZSByZXBvIHJvb3RlZCBhdCBgY3dkYDpcbiAqIGBwYWNrYWdlLmpzb25gIGBuYW1lYCwgdGhlbiB0aGUgZ2l0IHJlbW90ZSdzIHJlcG8gbmFtZSwgdGhlbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5J3MgYmFzZW5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lKGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3REaXIgPSB3b3Jrc3BhY2VSb290KGN3ZCk7XG5cbiAgY29uc3QgZnJvbVBhY2thZ2UgPSByZWFkUGFja2FnZU5hbWUocmVzb2x2ZShyb290RGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gIGlmIChmcm9tUGFja2FnZSkgcmV0dXJuIGZyb21QYWNrYWdlO1xuXG4gIGNvbnN0IHJlbW90ZSA9IHByb2plY3RDb250ZXh0Q29tbWFuZChcbiAgICBcImdpdFwiLFxuICAgIFtcIi1DXCIsIHJvb3REaXIsIFwicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSxcbiAgICByb290RGlyLFxuICApLm91dHB1dDtcbiAgY29uc3QgZnJvbUdpdCA9IHJlbW90ZSA/IHBhcnNlR2l0UmVtb3RlKHJlbW90ZSkgOiB1bmRlZmluZWQ7XG4gIGlmIChmcm9tR2l0KSByZXR1cm4gZnJvbUdpdDtcblxuICByZXR1cm4gYmFzZW5hbWUocm9vdERpcik7XG59XG5cbi8qKlxuICogVGhlIEdpdEh1YiBDTEkncyBjYW5vbmljYWwgcmVwbyBVUkwgLSB0aGUgZWFzeSBwYXRoLiBgZ2hgIGFscmVhZHkgcmVzb2x2ZXMgdGhlXG4gKiB0cnVlIGhvc3QgKG5vIHNzaC1hbGlhcyBwYXJzaW5nKSBhbmQgcHJpbnRzIGEgY2xlYW4gYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYC5cbiAqIGB1bmRlZmluZWRgIHdoZW4gYGdoYCBpcyBhYnNlbnQsIHVuYXV0aGVudGljYXRlZCwgb3IgdGhlIGRpciBpc24ndCBhIEdIIHJlcG8uXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb3V0ID0gcHJvamVjdENvbnRleHRDb21tYW5kKFwiZ2hcIiwgW1wicmVwb1wiLCBcInZpZXdcIiwgXCItLWpzb25cIiwgXCJ1cmxcIl0sIGN3ZCkub3V0cHV0O1xuICByZXR1cm4gc3RyaW5nLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChvdXQpPy51cmwpID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgYW4gc3NoIGhvc3QgYWxpYXMgKGB+Ly5zc2gvY29uZmlnYCkgdG8gaXRzIGVmZmVjdGl2ZSBgaG9zdG5hbWVgIHZpYSBgc3NoIC1HYC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTc2hIb3N0TmFtZShob3N0OiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmUgPSBwcm9qZWN0Q29udGV4dENvbW1hbmQoXCJzc2hcIiwgW1wiLUdcIiwgaG9zdF0sIGN3ZClcbiAgICAub3V0cHV0Py5zcGxpdChcIlxcblwiKVxuICAgIC5maW5kKChsKSA9PiAvXmhvc3RuYW1lXFxzL2kudGVzdChsLnRyaW0oKSkpO1xuICBjb25zdCBuYW1lID0gbGluZT8udHJpbSgpLnNwbGl0KC9cXHMrLylbMV07XG4gIHJldHVybiBuYW1lICYmIG5hbWUgIT09IGhvc3QgPyBuYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZhbGxiYWNrOiBub3JtYWxpemUgYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gIHRvIGEgcGxhaW5cbiAqIGBodHRwczovL2hvc3Qvb3duZXIvcmVwb2AgVVJMLiBzY3AtbGlrZSAvIGBzc2g6Ly9gIC8gYGdpdDovL2AgL1xuICogZW1iZWRkZWQtY3JlZGVudGlhbCBmb3JtcyBhcmUgcmV3cml0dGVuIHRvIGh0dHBzLCBhbmQgYW4gc3NoIGhvc3QgYWxpYXMgaXNcbiAqIGZvbGxvd2VkIHRvIGl0cyByZWFsIGhvc3RuYW1lLlxuICovXG5mdW5jdGlvbiByZXBvc2l0b3J5VXJsRnJvbUdpdChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByYXcgPSBwcm9qZWN0Q29udGV4dENvbW1hbmQoXCJnaXRcIiwgW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSwgY3dkKS5vdXRwdXQ7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgc2NoZW1lIHRvIGh0dHBzIGF0IHRoZSBzdHJpbmcgbGV2ZWwgZmlyc3Q6IHRoZSBXSEFUV0cgYFVSTGBcbiAgLy8gcGFyc2VyIGNhbid0IGNvbnZlcnQgYSBub24tc3BlY2lhbCBzY2hlbWUgKGBzc2hgL2BnaXRgKSB0byBgaHR0cHNgICh0aGVcbiAgLy8gYHByb3RvY29sYCBzZXR0ZXIgbm8tb3BzKSwgYW5kIHNjcC1saWtlIGBnaXRAaG9zdDpvd25lci9yZXBvYCBpc24ndCBhIFVSTCBhdFxuICAvLyBhbGwuIFJld3JpdGUgYm90aCBpbnRvIGFuIGBodHRwczovL2Agc3RyaW5nLCB0aGVuIGxldCB7QGxpbmsgbmV0LnVybEJ1aWxkZXJ9XG4gIC8vIG93biB0aGUgc3RydWN0dXJlZCBlZGl0cyAoc3RyaXAgY3JlZGVudGlhbHMsIHN3YXAgdGhlIGhvc3QpLlxuICBsZXQgaHR0cHMgPSByYXcucmVwbGFjZSgvXmdpdFxcKy8sIFwiXCIpO1xuICBjb25zdCBzY3AgPSAvXlteQF0rQChbXjpdKyk6KC4rKSQvLmV4ZWMoaHR0cHMpO1xuICBpZiAoc2NwKSBodHRwcyA9IGBodHRwczovLyR7c2NwWzFdfS8ke3NjcFsyXX1gO1xuICBodHRwcyA9IGh0dHBzLnJlcGxhY2UoL14oc3NofGdpdCk6XFwvXFwvLywgXCJodHRwczovL1wiKTtcblxuICBsZXQgYnVpbGRlciA9IG5ldC51cmxCdWlsZGVyKGh0dHBzKTtcbiAgaWYgKCFidWlsZGVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBEcm9wIGFueSBlbWJlZGRlZCBgdXNlcls6cGFzc11AYCBjcmVkZW50aWFscy5cbiAgaWYgKGJ1aWxkZXIudXNlcm5hbWUgfHwgYnVpbGRlci5wYXNzd29yZCkge1xuICAgIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJ1c2VybmFtZVwiLCBcIlwiKS53aXRoKFwicGFzc3dvcmRcIiwgXCJcIik7XG4gIH1cbiAgLy8gRm9sbG93IGFuIHNzaCBob3N0IGFsaWFzIHRvIHRoZSB0cnVlIGhvc3QgKHNvIGBnaXRodWItcmVnZ2llLWRiYCAtPiBgZ2l0aHViLmNvbWApLlxuICBjb25zdCByZWFsSG9zdCA9IHJlc29sdmVTc2hIb3N0TmFtZShidWlsZGVyLmhvc3RuYW1lLCBjd2QpO1xuICBpZiAocmVhbEhvc3QpIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJob3N0bmFtZVwiLCByZWFsSG9zdCk7XG5cbiAgcmV0dXJuIGAke2J1aWxkZXIub3JpZ2lufSR7YnVpbGRlci5wYXRobmFtZS5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9YDtcbn1cblxuLyoqXG4gKiBUaGUgcmVwbydzIGNhbm9uaWNhbCByZW1vdGUgVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIGdpdCByZW1vdGUuXG4gKiBUcmllcyBgZ2ggcmVwbyB2aWV3YCBmaXJzdCAoaG9zdC1hY2N1cmF0ZSwgbm8gcGFyc2luZyksIHRoZW4gbm9ybWFsaXplc1xuICogYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gLiBCb3RoIHVuZGVybHlpbmcgY29tbWFuZHMgYXJlIGNhY2hlZCBwZXIgYGN3ZGAgdmlhXG4gKiB7QGxpbmsgcHJvamVjdENvbnRleHRDb21tYW5kfS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gZGlyZWN0b3J5IHRvIHJlc29sdmUgZnJvbSAoZGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgKS5cbiAqIEBwYXJhbSBmb3JtYXQgLSBgXCJodHRwc1wiYCAoZGVmYXVsdCkgeWllbGRzIGBodHRwczovL2hvc3Qvb3duZXIvcmVwb2A7XG4gKiAgIGBcIm5wbVwiYCB5aWVsZHMgbnBtJ3MgYGdpdCtodHRwczovL2hvc3Qvb3duZXIvcmVwby5naXRgIGZvcm0gKGZvciBhXG4gKiAgIGBwYWNrYWdlLmpzb25gIGByZXBvc2l0b3J5LnVybGAgdGhhdCBwYXNzZXMgbnBtIHByb3ZlbmFuY2UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3NpdG9yeVVybChcbiAgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpLFxuICBmb3JtYXQ6IFwiaHR0cHNcIiB8IFwibnBtXCIgPSBcImh0dHBzXCIsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBodHRwcyA9IHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkKSA/PyByZXBvc2l0b3J5VXJsRnJvbUdpdChjd2QpO1xuICBpZiAoIWh0dHBzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gZm9ybWF0ID09PSBcIm5wbVwiID8gYGdpdCske2h0dHBzLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKX0uZ2l0YCA6IGh0dHBzO1xufVxuXG4vKipcbiAqIFRoZSBhY3RpdmUgbnBtIHJlZ2lzdHJ5IChgbnBtIGNvbmZpZyBnZXQgcmVnaXN0cnlgKSBhcyBhIGNoYWluYWJsZVxuICoge0BsaW5rIG5ldC5VcmxCdWlsZGVyfSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBucG0gaXMgYWJzZW50IG9yIHByaW50cyBubyBVUkwuXG4gKiBDYWNoZWQgcGVyIGBjd2RgIHZpYSB7QGxpbmsgcHJvamVjdENvbnRleHRDb21tYW5kfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5wbVJlZ2lzdHJ5KFxuICBjd2Q/OiBzdHJpbmcgfCBudWxsLFxuICBvcHRpb25zPzogeyBvdmVycmlkZU9ubHk/OiBib29sZWFuOyBlbnZWYXJzPzogYm9vbGVhbiB9LFxuKTogbmV0LlVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gKGZ1bmN0aW9uKiAoKSB7XG4gICAgeWllbGQgcHJvamVjdENvbnRleHRDb21tYW5kKFxuICAgICAgXCJucG1cIixcbiAgICAgIFtcImNvbmZpZ1wiLCBcImdldFwiLCBcInJlZ2lzdHJ5XCJdLFxuICAgICAgY3dkID8/IHVuZGVmaW5lZCxcbiAgICApLm91dHB1dD8udHJpbSgpO1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzPy5lbnYpIHtcbiAgICAgIGNvbnN0IGVudktleSA9IFwibnBtX2NvbmZpZ19yZWdpc3RyeVwiO1xuICAgICAgaWYgKG9wdGlvbnM/LmVudlZhcnMpIHtcbiAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnZbZW52S2V5XTtcbiAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnZbZW52S2V5LnRvVXBwZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH1cbiAgfSkoKTtcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldC51cmxCdWlsZGVyKGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8ub3ZlcnJpZGVPbmx5KSB7XG4gICAgICAgIGNvbnN0IG5wbWpzUmVnaXN0cnlVcmwgPSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCI7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5VXJsID0gdXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChyZWdpc3RyeVVybCA9PT0gbnBtanNSZWdpc3RyeVVybCB8fCByZWdpc3RyeVVybC5zdGFydHNXaXRoKG5wbWpzUmVnaXN0cnlVcmwgKyBcIi9cIikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2thZ2VOYW1lKHBrZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc3RhdChwa2dQYXRoKT8uaXNGaWxlKCkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBzdHJpbmcudHJpbVRvTnVsbChqc29uLnBhcnNlUmVjb3JkKHJlYWRGaWxlU3luYyhwa2dQYXRoLCBcInV0ZjhcIikpPy5uYW1lKSA/PyB1bmRlZmluZWQ7XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnNvbGUubG9nKFwibnBtIHJvb3Q6XCIsIG5wbVJvb3QoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwbyByb290OlwiLCBnaXRSb290KCkpO1xuICBjb25zb2xlLmxvZyhcInBhY2thZ2Ugcm9vdDpcIiwgcm9vdCgpKTtcbiAgY29uc29sZS5sb2coXCJwcm9qZWN0IG5hbWU6XCIsIG5hbWUoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwb3NpdG9yeSB1cmw6XCIsIHJlcG9zaXRvcnlVcmwoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwb3NpdG9yeSB1cmwgKG5wbSk6XCIsIHJlcG9zaXRvcnlVcmwocHJvY2Vzcy5jd2QoKSwgXCJucG1cIikpO1xufVxuIl19
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQVMsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTdDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLGVBQWU7SUFDZixjQUFjO0NBQ04sQ0FBQztBQWtCWDs7Ozs7OztHQU9HO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLEdBQVc7SUFDL0UsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQiwwRUFBMEU7UUFDMUUsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsTUFBTSxHQUFHLEdB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YXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFN0YXRzLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBoYXNoLCBqc29uLCBuZXQsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBzdGF0U3luYyBhcyBzdGF0IH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuXG5jb25zdCBST09UX01BUktFUlMgPSBbXG4gIFwiLnByb2plbnJjLnRzXCIsXG4gIFwiLnByb2plbnJjLmpzXCIsXG4gIFwiLnByb2plbnJjLm1qc1wiLFxuICBcIi5wcm9qZW5yYy5janNcIixcbiAgXCJwYWNrYWdlLmpzb25cIixcbl0gYXMgY29uc3Q7XG5cbi8qKiBBIGNvbW1hbmQncyBzdGRvdXQsIGNsYXNzaWZpZWQgYXMgYSBmaWxlc3lzdGVtIHBhdGggYW5kL29yIGEgVVJMLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q29udGV4dCB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcbiAgLyoqIGBvdXRwdXRgIHdoZW4gaXQgbmFtZXMgc29tZXRoaW5nIG9uIGRpc2suICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gIC8qKiBgZnMuc3RhdGAgb2Yge0BsaW5rIHBhdGh9LCB3aGVuIGl0IGV4aXN0cy4gKi9cbiAgcmVhZG9ubHkgcGF0aFN0YXRzPzogU3RhdHM7XG4gIC8qKlxuICAgKiBgb3V0cHV0YCBwYXJzZWQgaW50byBhIGNoYWluYWJsZSB7QGxpbmsgbmV0LlVybEJ1aWxkZXJ9LCB3aGVuIGl0IGlzIGEgcmVhbFxuICAgKiBuZXR3b3JrIFVSTCAtIGEgbm9uLWJsYW5rIHNjaGVtZSAobm90IGBmaWxlOmApIEFORCBhIG5vbi1ibGFuayBob3N0bmFtZS5cbiAgICogQmFyZSBwYXRocywgc2NwLWxpa2UgYGdpdEBob3N0Oi4uLmAgcmVtb3RlcywgYW5kIGBmaWxlOmAgVVJMcyBzdGF5IHVuc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsPzogbmV0LlVybEJ1aWxkZXI7XG59XG5cbi8qKlxuICogYmVjYXVzZSB0aGlzIGlzIGNydWNpYWwgZG8gbm90IHVzZSBleGVjLnNwYXduU3luY1xuICpcbiAqIFJ1biBgY29tbWFuZCBhcmdzYCBpbiBgY3dkYCBhbmQgY2xhc3NpZnkgaXRzIHN0ZG91dDogYHBhdGhgICsgYHBhdGhTdGF0c2Agd2hlblxuICogdGhlIG91dHB1dCBuYW1lcyBzb21ldGhpbmcgb24gZGlzaywgYHVybGAgKGEge0BsaW5rIG5ldC5VcmxCdWlsZGVyfSkgd2hlbiBpdFxuICogcGFyc2VzIGFzIGEgcmVhbCBuZXR3b3JrIFVSTC4gRW1wdHkge0BsaW5rIFByb2plY3RDb250ZXh0fSBvbiBhIG5vbi16ZXJvIGV4aXRcbiAqIG9yIGVtcHR5IG91dHB1dC5cbiAqL1xuZnVuY3Rpb24gcHJvamVjdENvbnRleHRDb21tYW5kT3V0cHV0KGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvamVjdENvbnRleHQge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZCwgYXJncywgeyBjd2QsIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdIH0pO1xuICBjb25zdCBvdXRwdXQgPSByZXN1bHQ/LnN0ZG91dD8udG9TdHJpbmcoKT8udHJpbSgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCAmJiBvdXRwdXQpIHtcbiAgICBjb25zdCBwYXRoU3RhdHMgPSBzdGF0KG91dHB1dCk7XG4gICAgLy8gT25seSBhbiBFWFBMSUNJVCBgc2NoZW1lOi8vLi4uYCBjb3VudHMgYXMgYSBVUkwuIGB1cmxCdWlsZGVyYCBvdGhlcndpc2VcbiAgICAvLyBzeW50aGVzaXplcyBvbmUgKGEgYmFyZSBgZXhhbXBsZS5jb21gIC0+IGBodHRwczovL+KApmAsIGFuIGFic29sdXRlIHBhdGggLT5cbiAgICAvLyBgaHR0cDovL2xvY2FsaG9zdC/igKZgKSwgd2hpY2ggd291bGQgbWlzbGFiZWwgZGlyZWN0b3J5IG91dHB1dHMgYW5kIGJhcmVcbiAgICAvLyB0b2tlbnMgLSBzbyBnYXRlIG9uIHRoZSByYXcgb3V0cHV0IGFscmVhZHkgY2FycnlpbmcgYSBzY2hlbWUgKyBhdXRob3JpdHkuXG4gICAgY29uc3QgdXJsID0gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KG91dHB1dCkgPyBuZXQudXJsQnVpbGRlcihvdXRwdXQpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGN3ZCwgb3V0cHV0LCBwYXRoOiBwYXRoU3RhdHMgPyBvdXRwdXQgOiB1bmRlZmluZWQsIHBhdGhTdGF0cywgdXJsIH07XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBvdXRwdXQgfTtcbn1cblxuLyoqXG4gKiBgcGFyc2VDb21tYW5kYCwgbWVtb2l6ZWQgcGVyIGAoY29tbWFuZCwgYXJncywgY3dkKWAgLSBzdG9yZXMgdGhlIHdob2xlXG4gKiB7QGxpbmsgUHJvamVjdENvbnRleHR9LiBUaGUgY2FjaGUga2V5IGlzIGEgc3RhYmxlIHtAbGluayBoYXNoLmZudkhhc2h9IG9mIHRoYXRcbiAqIHR1cGxlIChvcmRlci1zZW5zaXRpdmUgb3ZlciBgYXJnc2ApLCBzbyBgY3dkYCBpcyBwYXJ0IG9mIHRoZSBrZXkgYW5kIGEgbG9va3VwXG4gKiBpbiBhbm90aGVyIGRpcmVjdG9yeSBjYW4ndCBjb2xsaWRlIHdpdGggdGhlIGRlZmF1bHQtY3dkIGVudHJ5LlxuICovXG5jb25zdCBwYXJzZWRDb21tYW5kQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvamVjdENvbnRleHQ+KCk7XG5cbmZ1bmN0aW9uIHByb2plY3RDb250ZXh0Q29tbWFuZChjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBjd2Q/OiBzdHJpbmcpOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHByb2Nlc3NDd2QgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCkpO1xuICBsZXQgY2FjaGVFbmFibGVkOiBib29sZWFuO1xuICBpZiAoIWN3ZCkge1xuICAgIGN3ZCA9IHByb2Nlc3NDd2Q7XG4gICAgY2FjaGVFbmFibGVkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjd2QgPSByZXNvbHZlKGN3ZCk7XG4gICAgaWYgKGN3ZCA9PSBwcm9jZXNzQ3dkKSB7XG4gICAgICBjYWNoZUVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2FjaGVLZXkgPSBjYWNoZUVuYWJsZWQgPyBoYXNoLmZudkhhc2goY29tbWFuZCwgYXJncykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNhY2hlSGl0ID0gY2FjaGVLZXkgPyBwYXJzZWRDb21tYW5kQ2FjaGUuZ2V0KGNhY2hlS2V5KSA6IHVuZGVmaW5lZDtcbiAgaWYgKGNhY2hlSGl0Py5jd2QgPT09IGN3ZCkge1xuICAgIHJldHVybiBjYWNoZUhpdDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwcm9qZWN0Q29udGV4dENvbW1hbmRPdXRwdXQoY29tbWFuZCwgYXJncywgY3dkKTtcbiAgaWYgKGNhY2hlS2V5KSB7XG4gICAgcGFyc2VkQ29tbWFuZENhY2hlLnNldChjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBucG1Sb290KGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnNlZCA9IHByb2plY3RDb250ZXh0Q29tbWFuZChcIm5wbVwiLCBbXCJwcmVmaXhcIl0sIGN3ZCk7XG4gIHJldHVybiBwYXJzZWQucGF0aFN0YXRzPy5pc0RpcmVjdG9yeSgpID8gcGFyc2VkLnBhdGggOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdpdFJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyc2VkID0gcHJvamVjdENvbnRleHRDb21tYW5kKFwiZ2l0XCIsIFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwgY3dkKTtcbiAgcmV0dXJuIHBhcnNlZC5wYXRoU3RhdHM/LmlzRGlyZWN0b3J5KCkgPyBwYXJzZWQucGF0aCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvb3QoY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnQgPSByZXNvbHZlKGN3ZCk7XG5cbiAgaWYgKCFzdGF0KGN1cnJlbnQpPy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgY3VycmVudCA9IGRpcm5hbWUoY3VycmVudCk7XG4gIH1cbiAgY29uc3QgYm91bmRhcmllcyA9IG5ldyBTZXQoXG4gICAgW25wbVJvb3QoY3dkKSwgZ2l0Um9vdChjd2QpXVxuICAgICAgLmZpbHRlcigocGF0aCk6IHBhdGggaXMgc3RyaW5nID0+IHBhdGggIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHBhdGgpID0+IHJlc29sdmUocGF0aCkpLFxuICApO1xuICBjb25zdCBoYXNCb3VuZGFyeSA9IGJvdW5kYXJpZXMuc2l6ZSA+IDA7XG4gIGxldCBiZXN0OiB7IGRpcjogc3RyaW5nOyBwcmlvcml0eTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgZm9yIChjb25zdCBbcHJpb3JpdHksIG1hcmtlcl0gb2YgUk9PVF9NQVJLRVJTLmVudHJpZXMoKSkge1xuICAgICAgaWYgKHN0YXQoam9pbihjdXJyZW50LCBtYXJrZXIpKT8uaXNGaWxlKCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGJlc3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHByaW9yaXR5IDwgYmVzdC5wcmlvcml0eSB8fFxuICAgICAgICAgIChwcmlvcml0eSA9PT0gYmVzdC5wcmlvcml0eSAmJiBjdXJyZW50Lmxlbmd0aCA8IGJlc3QuZGlyLmxlbmd0aClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYmVzdCA9IHsgZGlyOiBjdXJyZW50LCBwcmlvcml0eSB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhhc0JvdW5kYXJ5ICYmIGJlc3QpIHtcbiAgICAgIHJldHVybiBiZXN0LmRpcjtcbiAgICB9XG4gICAgaWYgKGJvdW5kYXJpZXMuaGFzKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gYmVzdD8uZGlyO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBiZXN0Py5kaXI7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdpdCByZW1vdGUgVVJMIChgaHR0cHM6Ly8uLi5gLCBgZ2l0QGhvc3Q6b3duZXIvcmVwby5naXRgLCBldGMuKSBhbmRcbiAqIHJldHVybiB0aGUgcmVwbyBzZWdtZW50LCBzdHJpcHBpbmcgYW55IGAuZ2l0YCBzdWZmaXguIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yXG4gKiBlbXB0eSBvciB1bnBhcnNhYmxlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VHaXRSZW1vdGUodXJsOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0cmltbWVkID0gdXJsLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNjcCA9IC9eW15AXStAW146XSs6KC4rKSQvaS5leGVjKHRyaW1tZWQpO1xuICBpZiAoc2NwKSByZXR1cm4gbGFzdFBhdGhTZWdtZW50KHNjcFsxXSA/PyBcIlwiKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0cmltbWVkLnJlcGxhY2UoL1xcLmdpdCQvaSwgXCJcIik7XG4gICAgY29uc3QgcGF0aG5hbWUgPSBuZXcgVVJMKG5vcm1hbGl6ZWQpLnBhdGhuYW1lO1xuICAgIGNvbnN0IHNlZ21lbnQgPSBwYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmF0KC0xKTtcbiAgICByZXR1cm4gc2VnbWVudCA/IGxhc3RQYXRoU2VnbWVudChzZWdtZW50KSA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXN0UGF0aFNlZ21lbnQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudCA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKS5hdCgtMSkgPz8gcGF0aDtcbiAgcmV0dXJuIHNlZ21lbnQucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBZaWVsZCBjYW5kaWRhdGUgcHJvamVjdC1yb290IGRpcmVjdG9yaWVzIGZvciBgY3dkYCwgaW4gcHJpb3JpdHkgb3JkZXI6IHRoZVxuICogYG5wbSBwcmVmaXhgLCB0aGUgZ2l0IHRvcC1sZXZlbCwgdGhlbiBgY3dkYCBpdHNlbGYuIER1cGxpY2F0ZXMgYXJlIHNraXBwZWQ7XG4gKiBvbmx5IGV4aXN0aW5nIGRpcmVjdG9yaWVzIGFyZSB5aWVsZGVkIChleGNlcHQgdGhlIGZpbmFsIGBjd2RgIGZhbGxiYWNrKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNvbHZlUHJvamVjdFJvb3RzKGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IEdlbmVyYXRvcjxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZSA9IHJlc29sdmUoY3dkKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBbbnBtUm9vdChiYXNlKSwgZ2l0Um9vdChiYXNlKV0pIHtcbiAgICBpZiAoIWNhbmRpZGF0ZSkgY29udGludWU7XG4gICAgY29uc3QgZGlyID0gcmVzb2x2ZShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhkaXIpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChkaXIpO1xuICAgIGlmIChzdGF0KGRpcik/LmlzRGlyZWN0b3J5KCkpIHlpZWxkIGRpcjtcbiAgfVxuICBpZiAoIXNlZW4uaGFzKGJhc2UpKSB5aWVsZCBiYXNlO1xufVxuXG4vKiogVGhlIG5lYXJlc3QgYW5jZXN0b3Igb2YgYGN3ZGAgKGZyb20ge0BsaW5rIHJlc29sdmVQcm9qZWN0Um9vdHN9KSB3aXRoIGEgYHBhY2thZ2UuanNvbmAuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VSb290KGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIGxldCBsYXN0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZGlyIG9mIHJlc29sdmVQcm9qZWN0Um9vdHMoY3dkKSkge1xuICAgIGlmIChzdGF0KHJlc29sdmUoZGlyLCBcInBhY2thZ2UuanNvblwiKSk/LmlzRmlsZSgpKSByZXR1cm4gZGlyO1xuICAgIGxhc3QgPSBkaXI7XG4gIH1cbiAgcmV0dXJuIGxhc3QgPz8gcmVzb2x2ZShjd2QpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBodW1hbi1mcmllbmRseSBwcm9qZWN0IG5hbWUgZm9yIHRoZSByZXBvIHJvb3RlZCBhdCBgY3dkYDpcbiAqIGBwYWNrYWdlLmpzb25gIGBuYW1lYCwgdGhlbiB0aGUgZ2l0IHJlbW90ZSdzIHJlcG8gbmFtZSwgdGhlbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5J3MgYmFzZW5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lKGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3REaXIgPSB3b3Jrc3BhY2VSb290KGN3ZCk7XG5cbiAgY29uc3QgZnJvbVBhY2thZ2UgPSByZWFkUGFja2FnZU5hbWUocmVzb2x2ZShyb290RGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gIGlmIChmcm9tUGFja2FnZSkgcmV0dXJuIGZyb21QYWNrYWdlO1xuXG4gIGNvbnN0IHJlbW90ZSA9IHByb2plY3RDb250ZXh0Q29tbWFuZChcbiAgICBcImdpdFwiLFxuICAgIFtcIi1DXCIsIHJvb3REaXIsIFwicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSxcbiAgICByb290RGlyLFxuICApLm91dHB1dDtcbiAgY29uc3QgZnJvbUdpdCA9IHJlbW90ZSA/IHBhcnNlR2l0UmVtb3RlKHJlbW90ZSkgOiB1bmRlZmluZWQ7XG4gIGlmIChmcm9tR2l0KSByZXR1cm4gZnJvbUdpdDtcblxuICByZXR1cm4gYmFzZW5hbWUocm9vdERpcik7XG59XG5cbi8qKlxuICogVGhlIEdpdEh1YiBDTEkncyBjYW5vbmljYWwgcmVwbyBVUkwgLSB0aGUgZWFzeSBwYXRoLiBgZ2hgIGFscmVhZHkgcmVzb2x2ZXMgdGhlXG4gKiB0cnVlIGhvc3QgKG5vIHNzaC1hbGlhcyBwYXJzaW5nKSBhbmQgcHJpbnRzIGEgY2xlYW4gYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYC5cbiAqIGB1bmRlZmluZWRgIHdoZW4gYGdoYCBpcyBhYnNlbnQsIHVuYXV0aGVudGljYXRlZCwgb3IgdGhlIGRpciBpc24ndCBhIEdIIHJlcG8uXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb3V0ID0gcHJvamVjdENvbnRleHRDb21tYW5kKFwiZ2hcIiwgW1wicmVwb1wiLCBcInZpZXdcIiwgXCItLWpzb25cIiwgXCJ1cmxcIl0sIGN3ZCkub3V0cHV0O1xuICByZXR1cm4gc3RyaW5nLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChvdXQpPy51cmwpID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgYW4gc3NoIGhvc3QgYWxpYXMgKGB+Ly5zc2gvY29uZmlnYCkgdG8gaXRzIGVmZmVjdGl2ZSBgaG9zdG5hbWVgIHZpYSBgc3NoIC1HYC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTc2hIb3N0TmFtZShob3N0OiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmUgPSBwcm9qZWN0Q29udGV4dENvbW1hbmQoXCJzc2hcIiwgW1wiLUdcIiwgaG9zdF0sIGN3ZClcbiAgICAub3V0cHV0Py5zcGxpdChcIlxcblwiKVxuICAgIC5maW5kKChsKSA9PiAvXmhvc3RuYW1lXFxzL2kudGVzdChsLnRyaW0oKSkpO1xuICBjb25zdCBuYW1lID0gbGluZT8udHJpbSgpLnNwbGl0KC9cXHMrLylbMV07XG4gIHJldHVybiBuYW1lICYmIG5hbWUgIT09IGhvc3QgPyBuYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZhbGxiYWNrOiBub3JtYWxpemUgYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gIHRvIGEgcGxhaW5cbiAqIGBodHRwczovL2hvc3Qvb3duZXIvcmVwb2AgVVJMLiBzY3AtbGlrZSAvIGBzc2g6Ly9gIC8gYGdpdDovL2AgL1xuICogZW1iZWRkZWQtY3JlZGVudGlhbCBmb3JtcyBhcmUgcmV3cml0dGVuIHRvIGh0dHBzLCBhbmQgYW4gc3NoIGhvc3QgYWxpYXMgaXNcbiAqIGZvbGxvd2VkIHRvIGl0cyByZWFsIGhvc3RuYW1lLlxuICovXG5mdW5jdGlvbiByZXBvc2l0b3J5VXJsRnJvbUdpdChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByYXcgPSBwcm9qZWN0Q29udGV4dENvbW1hbmQoXCJnaXRcIiwgW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSwgY3dkKS5vdXRwdXQ7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgc2NoZW1lIHRvIGh0dHBzIGF0IHRoZSBzdHJpbmcgbGV2ZWwgZmlyc3Q6IHRoZSBXSEFUV0cgYFVSTGBcbiAgLy8gcGFyc2VyIGNhbid0IGNvbnZlcnQgYSBub24tc3BlY2lhbCBzY2hlbWUgKGBzc2hgL2BnaXRgKSB0byBgaHR0cHNgICh0aGVcbiAgLy8gYHByb3RvY29sYCBzZXR0ZXIgbm8tb3BzKSwgYW5kIHNjcC1saWtlIGBnaXRAaG9zdDpvd25lci9yZXBvYCBpc24ndCBhIFVSTCBhdFxuICAvLyBhbGwuIFJld3JpdGUgYm90aCBpbnRvIGFuIGBodHRwczovL2Agc3RyaW5nLCB0aGVuIGxldCB7QGxpbmsgbmV0LnVybEJ1aWxkZXJ9XG4gIC8vIG93biB0aGUgc3RydWN0dXJlZCBlZGl0cyAoc3RyaXAgY3JlZGVudGlhbHMsIHN3YXAgdGhlIGhvc3QpLlxuICBsZXQgaHR0cHMgPSByYXcucmVwbGFjZSgvXmdpdFxcKy8sIFwiXCIpO1xuICBjb25zdCBzY3AgPSAvXlteQF0rQChbXjpdKyk6KC4rKSQvLmV4ZWMoaHR0cHMpO1xuICBpZiAoc2NwKSBodHRwcyA9IGBodHRwczovLyR7c2NwWzFdfS8ke3NjcFsyXX1gO1xuICBodHRwcyA9IGh0dHBzLnJlcGxhY2UoL14oc3NofGdpdCk6XFwvXFwvLywgXCJodHRwczovL1wiKTtcblxuICBsZXQgYnVpbGRlciA9IG5ldC51cmxCdWlsZGVyKGh0dHBzKTtcbiAgaWYgKCFidWlsZGVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBEcm9wIGFueSBlbWJlZGRlZCBgdXNlcls6cGFzc11AYCBjcmVkZW50aWFscy5cbiAgaWYgKGJ1aWxkZXIudXNlcm5hbWUgfHwgYnVpbGRlci5wYXNzd29yZCkge1xuICAgIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJ1c2VybmFtZVwiLCBcIlwiKS53aXRoKFwicGFzc3dvcmRcIiwgXCJcIik7XG4gIH1cbiAgLy8gRm9sbG93IGFuIHNzaCBob3N0IGFsaWFzIHRvIHRoZSB0cnVlIGhvc3QgKHNvIGBnaXRodWItcmVnZ2llLWRiYCAtPiBgZ2l0aHViLmNvbWApLlxuICBjb25zdCByZWFsSG9zdCA9IHJlc29sdmVTc2hIb3N0TmFtZShidWlsZGVyLmhvc3RuYW1lLCBjd2QpO1xuICBpZiAocmVhbEhvc3QpIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJob3N0bmFtZVwiLCByZWFsSG9zdCk7XG5cbiAgcmV0dXJuIGAke2J1aWxkZXIub3JpZ2lufSR7YnVpbGRlci5wYXRobmFtZS5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9YDtcbn1cblxuLyoqXG4gKiBUaGUgcmVwbydzIGNhbm9uaWNhbCByZW1vdGUgVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIGdpdCByZW1vdGUuXG4gKiBUcmllcyBgZ2ggcmVwbyB2aWV3YCBmaXJzdCAoaG9zdC1hY2N1cmF0ZSwgbm8gcGFyc2luZyksIHRoZW4gbm9ybWFsaXplc1xuICogYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gLiBCb3RoIHVuZGVybHlpbmcgY29tbWFuZHMgYXJlIGNhY2hlZCBwZXIgYGN3ZGAgdmlhXG4gKiB7QGxpbmsgcHJvamVjdENvbnRleHRDb21tYW5kfS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gZGlyZWN0b3J5IHRvIHJlc29sdmUgZnJvbSAoZGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgKS5cbiAqIEBwYXJhbSBmb3JtYXQgLSBgXCJodHRwc1wiYCAoZGVmYXVsdCkgeWllbGRzIGBodHRwczovL2hvc3Qvb3duZXIvcmVwb2A7XG4gKiAgIGBcIm5wbVwiYCB5aWVsZHMgbnBtJ3MgYGdpdCtodHRwczovL2hvc3Qvb3duZXIvcmVwby5naXRgIGZvcm0gKGZvciBhXG4gKiAgIGBwYWNrYWdlLmpzb25gIGByZXBvc2l0b3J5LnVybGAgdGhhdCBwYXNzZXMgbnBtIHByb3ZlbmFuY2UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3NpdG9yeVVybChcbiAgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpLFxuICBmb3JtYXQ6IFwiaHR0cHNcIiB8IFwibnBtXCIgPSBcImh0dHBzXCIsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBodHRwcyA9IHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkKSA/PyByZXBvc2l0b3J5VXJsRnJvbUdpdChjd2QpO1xuICBpZiAoIWh0dHBzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gZm9ybWF0ID09PSBcIm5wbVwiID8gYGdpdCske2h0dHBzLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKX0uZ2l0YCA6IGh0dHBzO1xufVxuXG4vKipcbiAqIFRoZSBhY3RpdmUgbnBtIHJlZ2lzdHJ5IChgbnBtIGNvbmZpZyBnZXQgcmVnaXN0cnlgKSBhcyBhIGNoYWluYWJsZVxuICoge0BsaW5rIG5ldC5VcmxCdWlsZGVyfSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBucG0gaXMgYWJzZW50IG9yIHByaW50cyBubyBVUkwuXG4gKiBDYWNoZWQgcGVyIGBjd2RgIHZpYSB7QGxpbmsgcHJvamVjdENvbnRleHRDb21tYW5kfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5wbVJlZ2lzdHJ5KFxuICBjd2Q/OiBzdHJpbmcgfCBudWxsLFxuICBvcHRpb25zPzogeyBvdmVycmlkZU9ubHk/OiBib29sZWFuOyBlbnZWYXJzPzogYm9vbGVhbiB9LFxuKTogbmV0LlVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gKGZ1bmN0aW9uKiAoKSB7XG4gICAgeWllbGQgcHJvamVjdENvbnRleHRDb21tYW5kKFxuICAgICAgXCJucG1cIixcbiAgICAgIFtcImNvbmZpZ1wiLCBcImdldFwiLCBcInJlZ2lzdHJ5XCJdLFxuICAgICAgY3dkID8/IHVuZGVmaW5lZCxcbiAgICApLm91dHB1dD8udHJpbSgpO1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzPy5lbnYpIHtcbiAgICAgIGNvbnN0IGVudktleSA9IFwibnBtX2NvbmZpZ19yZWdpc3RyeVwiO1xuICAgICAgaWYgKG9wdGlvbnM/LmVudlZhcnMpIHtcbiAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnZbZW52S2V5XTtcbiAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnZbZW52S2V5LnRvVXBwZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH1cbiAgfSkoKTtcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldC51cmxCdWlsZGVyKGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8ub3ZlcnJpZGVPbmx5KSB7XG4gICAgICAgIGNvbnN0IG5wbWpzUmVnaXN0cnlVcmwgPSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCI7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5VXJsID0gdXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChyZWdpc3RyeVVybCA9PT0gbnBtanNSZWdpc3RyeVVybCB8fCByZWdpc3RyeVVybC5zdGFydHNXaXRoKG5wbWpzUmVnaXN0cnlVcmwgKyBcIi9cIikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2thZ2VOYW1lKHBrZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc3RhdChwa2dQYXRoKT8uaXNGaWxlKCkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBzdHJpbmcudHJpbVRvTnVsbChqc29uLnBhcnNlUmVjb3JkKHJlYWRGaWxlU3luYyhwa2dQYXRoLCBcInV0ZjhcIikpPy5uYW1lKSA/PyB1bmRlZmluZWQ7XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnNvbGUubG9nKFwibnBtIHJvb3Q6XCIsIG5wbVJvb3QoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwbyByb290OlwiLCBnaXRSb290KCkpO1xuICBjb25zb2xlLmxvZyhcInBhY2thZ2Ugcm9vdDpcIiwgcm9vdCgpKTtcbiAgY29uc29sZS5sb2coXCJwcm9qZWN0IG5hbWU6XCIsIG5hbWUoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwb3NpdG9yeSB1cmw6XCIsIHJlcG9zaXRvcnlVcmwoKSk7XG4gIGNvbnNvbGUubG9nKFwicmVwb3NpdG9yeSB1cmwgKG5wbSk6XCIsIHJlcG9zaXRvcnlVcmwocHJvY2Vzcy5jd2QoKSwgXCJucG1cIikpO1xufVxuIl19
package/package.json CHANGED
@@ -12,14 +12,14 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "yaml": "^2.9.0",
15
- "@dbx-tools/shared-core": "0.6.27"
15
+ "@dbx-tools/shared-core": "0.6.34"
16
16
  },
17
17
  "main": "./lib/index.js",
18
18
  "license": "UNLICENSED",
19
19
  "publishConfig": {
20
20
  "access": "public"
21
21
  },
22
- "version": "0.6.27",
22
+ "version": "0.6.34",
23
23
  "types": "./lib/index.d.ts",
24
24
  "type": "module",
25
25
  "exports": {
package/src/exec.ts CHANGED
@@ -47,6 +47,7 @@ import {
47
47
  } from "node:child_process";
48
48
  import * as readline from "node:readline";
49
49
  import { Readable } from "node:stream";
50
+ import { finished } from "node:stream/promises";
50
51
 
51
52
  /** Shell-compatible exit code returned when an executable cannot be found. */
52
53
  export const COMMAND_NOT_FOUND_EXIT_CODE = 127;
@@ -94,7 +95,7 @@ export type ExecResult = {
94
95
 
95
96
  /** Options for {@link spawn}. Extends `SpawnOptions` except `stdio`, which is driven by `stdin` / `stdout` / `stderr`. */
96
97
  export type ExecOptions = Omit<SpawnOptions, "stdio"> & {
97
- /** `"inherit"` by default, or a string written to the process stdin. */
98
+ /** `"inherit"` by default; `"pipe"` / `"ignore"` select modes, any other string is input. */
98
99
  stdin?: ExecStdio | string;
99
100
  stdout?: StdioOption;
100
101
  stderr?: StdioOption;
@@ -113,7 +114,7 @@ export type SyncExecStdio = ExecStdio | "capture";
113
114
 
114
115
  /** Options for {@link spawnSync}. Same shape as {@link ExecOptions} but without line-handler stdio. */
115
116
  export type SyncExecOptions = Omit<SpawnOptions, "stdio"> & {
116
- /** `"inherit"` by default, or a string written to the process stdin. */
117
+ /** `"inherit"` by default; `"pipe"` / `"ignore"` select modes, any other string is input. */
117
118
  stdin?: ExecStdio | string;
118
119
  stdout?: SyncExecStdio;
119
120
  stderr?: SyncExecStdio;
@@ -332,10 +333,15 @@ function lineHandlers(option: StdioOption): LineHandler[] {
332
333
  * @param option - Stdio option to classify
333
334
  * @returns Whether `option` is `"inherit"`, `"pipe"`, or `"ignore"`
334
335
  */
335
- function isPassthroughMode(option: StdioOption): option is ExecStdio {
336
+ function isPassthroughMode(option: unknown): option is ExecStdio {
336
337
  return option === "inherit" || option === "pipe" || option === "ignore";
337
338
  }
338
339
 
340
+ /** True when stdin is data rather than one of the three reserved stdio modes. */
341
+ function isStdinPayload(stdin: ExecStdio | string | undefined): stdin is string {
342
+ return typeof stdin === "string" && !isPassthroughMode(stdin);
343
+ }
344
+
339
345
  /**
340
346
  * Map a {@link StdioOption} into a spawn stdio mode and optional line callback.
341
347
  *
@@ -401,15 +407,24 @@ function queueLineReads(
401
407
  /**
402
408
  * Write string stdin to a spawned process and close the stream.
403
409
  *
404
- * No-op unless `stdin` is a string and `proc.stdin` is available.
410
+ * No-op unless `stdin` is a payload string (not a stdio mode) and
411
+ * `proc.stdin` is available. A child that exits before consuming the payload
412
+ * closes its pipe; EPIPE is expected in that case and is ignored.
405
413
  *
406
414
  * @param proc - Child process returned from `spawn`
407
415
  * @param stdin - Stdio mode or string payload from {@link ExecOptions}
408
416
  */
409
- function writeStdin(proc: ChildProcess, stdin: ExecStdio | string | undefined): void {
410
- if (typeof stdin === "string" && proc.stdin) {
411
- proc.stdin.write(stdin);
412
- proc.stdin.end();
417
+ async function writeStdin(
418
+ proc: ChildProcess,
419
+ stdin: ExecStdio | string | undefined,
420
+ ): Promise<void> {
421
+ if (!isStdinPayload(stdin) || !proc.stdin) return;
422
+ const completion = finished(proc.stdin, { cleanup: true });
423
+ proc.stdin.end(stdin);
424
+ try {
425
+ await completion;
426
+ } catch (err) {
427
+ if (!(err instanceof Error && "code" in err && err.code === "EPIPE")) throw err;
413
428
  }
414
429
  }
415
430
 
@@ -496,14 +511,14 @@ export async function spawn(...args: SpawnArgs<ExecOptions>): Promise<ExecResult
496
511
  const stderrLines: string[] = [];
497
512
  const stdoutHandler = resolveStdio(stdout, stdoutLines);
498
513
  const stderrHandler = resolveStdio(stderr, stderrLines);
499
- const stdinMode: ExecStdio = typeof stdin === "string" ? "pipe" : (stdin ?? "inherit");
514
+ const stdinMode: ExecStdio = isStdinPayload(stdin) ? "pipe" : (stdin ?? "inherit");
500
515
 
501
516
  const proc = nodeSpawn(command, commandArgs, {
502
517
  ...spawnOpts,
503
518
  stdio: [stdinMode, stdoutHandler.mode, stderrHandler.mode],
504
519
  });
505
520
 
506
- writeStdin(proc, stdin);
521
+ const stdinWrite = writeStdin(proc, stdin);
507
522
 
508
523
  const reads: Promise<void>[] = [];
509
524
  queueLineReads(reads, proc.stdout, stdoutHandler);
@@ -513,9 +528,9 @@ export async function spawn(...args: SpawnArgs<ExecOptions>): Promise<ExecResult
513
528
  let commandNotFoundError: NodeJS.ErrnoException | undefined;
514
529
  try {
515
530
  exitCode = await waitForExit(proc);
516
- await Promise.all(reads);
531
+ await Promise.all([stdinWrite, ...reads]);
517
532
  } catch (err) {
518
- await Promise.allSettled(reads);
533
+ await Promise.allSettled([stdinWrite, ...reads]);
519
534
  if (!isCommandNotFoundError(err)) throw err;
520
535
  commandNotFoundError = err;
521
536
  exitCode = COMMAND_NOT_FOUND_EXIT_CODE;
@@ -546,7 +561,7 @@ export async function spawn(...args: SpawnArgs<ExecOptions>): Promise<ExecResult
546
561
  export function spawnSync(...args: SpawnArgs<SyncExecOptions>): ExecResult {
547
562
  const { command, commandArgs, options = {} } = parseSpawnArgs(args);
548
563
  const { stdin, stdout, stderr, check, trim, ...spawnOpts } = options;
549
- const stdinMode: ExecStdio = typeof stdin === "string" ? "pipe" : (stdin ?? "inherit");
564
+ const stdinMode: ExecStdio = isStdinPayload(stdin) ? "pipe" : (stdin ?? "inherit");
550
565
  const captureStdout = stdout === "capture";
551
566
  const captureStderr = stderr === "capture";
552
567
  const stdoutMode = resolveSyncStdio(stdout);
@@ -556,7 +571,7 @@ export function spawnSync(...args: SpawnArgs<SyncExecOptions>): ExecResult {
556
571
  ...spawnOpts,
557
572
  encoding: captureStdout || captureStderr ? "utf8" : undefined,
558
573
  stdio: [stdinMode, stdoutMode, stderrMode],
559
- input: typeof stdin === "string" ? stdin : undefined,
574
+ input: isStdinPayload(stdin) ? stdin : undefined,
560
575
  });
561
576
 
562
577
  const commandNotFound = isCommandNotFoundError(result.error);
package/src/project.ts CHANGED
@@ -38,7 +38,7 @@ export interface ProjectContext {
38
38
  */
39
39
  function projectContextCommandOutput(command: string, args: string[], cwd: string): ProjectContext {
40
40
  const result = spawnSync(command, args, { cwd, stdio: ["ignore", "pipe", "ignore"] });
41
- const output = result.stdout.toString().trim();
41
+ const output = result?.stdout?.toString()?.trim();
42
42
  if (result.status === 0 && output) {
43
43
  const pathStats = stat(output);
44
44
  // Only an EXPLICIT `scheme://...` counts as a URL. `urlBuilder` otherwise