@dbx-tools/core 0.9.154 → 0.9.158

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.
@@ -32,12 +32,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
32
32
  import { mkdir, open } from "node:fs/promises";
33
33
  import { tmpdir } from "node:os";
34
34
  import { dirname, join } from "node:path";
35
- import * as asyncUtils from "@dbx-tools/shared-core/async-utils";
36
- import * as errorUtils from "@dbx-tools/shared-core/error-utils";
37
- import * as functionUtils from "@dbx-tools/shared-core/function-utils";
38
- import * as hash from "@dbx-tools/shared-core/hash";
39
- import * as log from "@dbx-tools/shared-core/log";
40
- import * as object from "@dbx-tools/shared-core/object";
35
+ import { sleep, toError, memoize, fnvHash, log, toNumber, toOneOrMany, toStableKey, } from "@dbx-tools/shared-core";
41
36
  import lockfile from "proper-lockfile";
42
37
  const logger = log.logger("core:file-lock");
43
38
  const DEFAULT_BACKENDS = ["file"];
@@ -48,9 +43,9 @@ const POLL_MS = 50;
48
43
  * Matches `proper-lockfile`'s default. Not caller-configurable: every process
49
44
  * must share the same threshold or a live holder can be mistaken for stale.
50
45
  */
51
- const STALE_MS = object.toNumber(process.env.FILE_LOCK_STALE_MS) ?? 10_000;
46
+ const STALE_MS = toNumber(process.env.FILE_LOCK_STALE_MS) ?? 10_000;
52
47
  /** Heartbeat interval for refreshing lock-directory mtime (`STALE_MS / 2`). */
53
- const UPDATE_MS = object.toNumber(process.env.FILE_LOCK_UPDATE_MS) ?? STALE_MS / 2;
48
+ const UPDATE_MS = toNumber(process.env.FILE_LOCK_UPDATE_MS) ?? STALE_MS / 2;
54
49
  /** `flock(2)` operation bits (Linux / macOS / BSD). */
55
50
  const LOCK_EX = 2;
56
51
  const LOCK_NB = 4;
@@ -150,13 +145,12 @@ export async function acquireFileLock(key, options = {}) {
150
145
  }
151
146
  /** Canonical filesystem-safe id for a lock key. */
152
147
  function lockId(key) {
153
- const stable = object
154
- .toOneOrMany(key)
155
- .map((part) => object.toStableKey(part))
148
+ const stable = toOneOrMany(key)
149
+ .map((part) => toStableKey(part))
156
150
  .join("\u0000");
157
151
  // Short digest so paths stay well under OS limits; collisions are fine — they
158
152
  // only merge critical sections that already shared a key string.
159
- return hash.fnvHash(stable);
153
+ return fnvHash(stable);
160
154
  }
161
155
  /**
162
156
  * Resolve `flock(2)` through Bun FFI when possible.
@@ -166,7 +160,7 @@ function lockId(key) {
166
160
  * callers fall through to the next backend. A miss is cached too, so a process
167
161
  * that cannot flock never retries the load.
168
162
  */
169
- const resolveFlock = functionUtils.memoize(async () => {
163
+ const resolveFlock = memoize(async () => {
170
164
  if (process.platform === "win32")
171
165
  return undefined;
172
166
  if (!process.versions.bun)
@@ -183,7 +177,7 @@ const resolveFlock = functionUtils.memoize(async () => {
183
177
  return lib.symbols.flock;
184
178
  }
185
179
  catch (cause) {
186
- logger.debug("flock FFI unavailable", { error: errorUtils.toError(cause) });
180
+ logger.debug("flock FFI unavailable", { error: toError(cause) });
187
181
  return undefined;
188
182
  }
189
183
  });
@@ -214,7 +208,7 @@ async function waitForFlock(fd, flock, lockPath, deadline, onWait) {
214
208
  onWait();
215
209
  }
216
210
  assertBeforeDeadline(lockPath, deadline);
217
- await asyncUtils.sleep(POLL_MS);
211
+ await sleep(POLL_MS);
218
212
  }
219
213
  }
220
214
  /**
@@ -259,13 +253,13 @@ async function acquireLockDirectory(lockPath, deadline, onWait) {
259
253
  catch (cause) {
260
254
  const err = cause;
261
255
  if (err.code !== "ELOCKED")
262
- throw errorUtils.toError(cause);
256
+ throw toError(cause);
263
257
  if (!waiting) {
264
258
  waiting = true;
265
259
  onWait();
266
260
  }
267
261
  assertBeforeDeadline(lockPath, deadline);
268
- await asyncUtils.sleep(POLL_MS);
262
+ await sleep(POLL_MS);
269
263
  }
270
264
  }
271
265
  }
@@ -277,4 +271,4 @@ function assertBeforeDeadline(lockPath, deadline) {
277
271
  async function ensureParentDir(lockPath) {
278
272
  await mkdir(dirname(lockPath), { recursive: true });
279
273
  }
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbGUtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFDLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxLQUFLLFVBQVUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRSxPQUFPLEtBQUssYUFBYSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxJQUFJLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEtBQUssTUFBTSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sUUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUs1QyxNQUFNLGdCQUFnQixHQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTlELDJEQUEyRDtBQUMzRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFFbkI7Ozs7R0FJRztBQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUUzRSwrRUFBK0U7QUFDL0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksUUFBUSxH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QUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFnQjtJQUM3QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXNjYWRpbmcgY3Jvc3MtcHJvY2VzcyBtdXR1YWwgZXhjbHVzaW9uIHZpYSBhIGxvY2tmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMgY29uY3VycmVudCAqcHJvY2Vzc2VzKiAodHdvIGBidW4gcnVuIGRlbW9gIHNoZWxscywgYSBDTEkgYmVzaWRlIGFcbiAqIHNlcnZlcikgb24gdGhlIHNhbWUga2V5LiBGb3IgaW4tcHJvY2VzcyAvIHdvcmtlci10aHJlYWQgZXhjbHVzaW9uIHVzZVxuICoge0BsaW5rIHdpdGhQcm9jZXNzTG9ja30gZnJvbSBgLi9wcm9jZXNzLWxvY2sudHNgIGluc3RlYWQuXG4gKlxuICogQmFja2VuZHM6XG4gKlxuICogMS4gKipmaWxlKiogKGRlZmF1bHQpIOKAlCBgcHJvcGVyLWxvY2tmaWxlYCBhdG9taWMgbG9jay1kaXJlY3RvcnkgY3JlYXRpb24sXG4gKiAgICBoZWFydGJlYXQsIHN0YWxlIHJlY292ZXJ5LCBhbmQgb3duZXJzaGlwLXNhZmUgcmVsZWFzZS4gQnVuIGFuZCBOb2RlIHVzZVxuICogICAgdGhpcyBzYW1lIHByb3RvY29sLlxuICogMi4gKipmbG9jayoqIChleHBsaWNpdCBjb21wYXRpYmlsaXR5IG9wdGlvbikg4oCUIGBmbG9jaygyKWAgdmlhIEJ1biBGRkkgb25cbiAqICAgIFVuaXguIEl0IHJlbWFpbnMgYXZhaWxhYmxlIHRvIGNhbGxlcnMgdGhhdCBzZWxlY3RlZCBpdCBleHBsaWNpdGx5LCBidXQgYVxuICogICAgcnVudGltZS1kZXBlbmRlbnQgY2FzY2FkZSBjYW5ub3QgY29vcmRpbmF0ZSBCdW4gYW5kIE5vZGUuXG4gKlxuICogVGhlIGZpcnN0IGJhY2tlbmQgdGhhdCBjYW4gYmUgKmluaXRpYWxpemVkKiBpcyB1c2VkIGZvciB0aGUgd2hvbGUgY2FsbC4gQSBidXN5XG4gKiBsb2NrIHdhaXRzOyBhbiB1bmF2YWlsYWJsZSBiYWNrZW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQuIENhbGxlcnMgbWF5IG9ubHlcbiAqIGJvdW5kIGhvdyBsb25nIHRvIHdhaXQgKHtAbGluayBGaWxlTG9ja09wdGlvbnMudGltZW91dE1zfSk7IHN0YWxlIHRpbWluZyBpc1xuICogbm90IGNvbmZpZ3VyYWJsZSBzbyBldmVyeSBob2xkZXIgYW5kIHdhaXRlciBhZ3JlZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1rZGlyLCBvcGVuIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgKiBhcyBhc3luY1V0aWxzIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBlcnJvclV0aWxzIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL2Vycm9yLXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBmdW5jdGlvblV0aWxzIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL2Z1bmN0aW9uLXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBoYXNoIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL2hhc2hcIjtcbmltcG9ydCAqIGFzIGxvZyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9sb2dcIjtcbmltcG9ydCAqIGFzIG9iamVjdCBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9vYmplY3RcIjtcbmltcG9ydCBsb2NrZmlsZSBmcm9tIFwicHJvcGVyLWxvY2tmaWxlXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb3JlOmZpbGUtbG9ja1wiKTtcblxuLyoqIEJhY2tlbmRzIHtAbGluayB3aXRoRmlsZUxvY2t9IGNhbiBhdHRlbXB0LCBpbiBjYXNjYWRlIG9yZGVyLiAqL1xuZXhwb3J0IHR5cGUgRmlsZUxvY2tCYWNrZW5kID0gXCJmbG9ja1wiIHwgXCJmaWxlXCI7XG5cbmNvbnN0IERFRkFVTFRfQkFDS0VORFM6IHJlYWRvbmx5IEZpbGVMb2NrQmFja2VuZFtdID0gW1wiZmlsZVwiXTtcblxuLyoqIFBvbGwgaW50ZXJ2YWwgd2hpbGUgd2FpdGluZyBmb3IgYSBjb250ZW5kZWQgT1MgbG9jay4gKi9cbmNvbnN0IFBPTExfTVMgPSA1MDtcblxuLyoqXG4gKiBBZ2UgYWZ0ZXIgd2hpY2ggYW4gdW5yZWZyZXNoZWQgbG9jayBkaXJlY3RvcnkgbWF5IGJlIHJlbW92ZWQuXG4gKiBNYXRjaGVzIGBwcm9wZXItbG9ja2ZpbGVgJ3MgZGVmYXVsdC4gTm90IGNhbGxlci1jb25maWd1cmFibGU6IGV2ZXJ5IHByb2Nlc3NcbiAqIG11c3Qgc2hhcmUgdGhlIHNhbWUgdGhyZXNob2xkIG9yIGEgbGl2ZSBob2xkZXIgY2FuIGJlIG1pc3Rha2VuIGZvciBzdGFsZS5cbiAqL1xuY29uc3QgU1RBTEVfTVMgPSBvYmplY3QudG9OdW1iZXIocHJvY2Vzcy5lbnYuRklMRV9MT0NLX1NUQUxFX01TKSA/PyAxMF8wMDA7XG5cbi8qKiBIZWFydGJlYXQgaW50ZXJ2YWwgZm9yIHJlZnJlc2hpbmcgbG9jay1kaXJlY3RvcnkgbXRpbWUgKGBTVEFMRV9NUyAvIDJgKS4gKi9cbmNvbnN0IFVQREFURV9NUyA9IG9iamVjdC50b051bWJlcihwcm9jZXNzLmVudi5GSUxFX0xPQ0tfVVBEQVRFX01TKSA/PyBTVEFMRV9NUyAvIDI7XG5cbi8qKiBgZmxvY2soMilgIG9wZXJhdGlvbiBiaXRzIChMaW51eCAvIG1hY09TIC8gQlNEKS4gKi9cbmNvbnN0IExPQ0tfRVggPSAyO1xuY29uc3QgTE9DS19OQiA9IDQ7XG5jb25zdCBMT0NLX1VOID0gODtcblxuLyoqIFJlc3VsdCBtZXRhZGF0YSB3aGVuIGEgY2FsbGVyIHdhbnRzIHRvIGtub3cgd2hpY2ggYmFja2VuZCByYW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2NrQWNxdWlzaXRpb24ge1xuICBiYWNrZW5kOiBGaWxlTG9ja0JhY2tlbmQ7XG59XG5cbi8qKiBCYWNrZW5kIHNlbGVjdGlvbiwgd2FpdCBwb2xpY3ksIGFuZCBsaWZlY3ljbGUgY2FsbGJhY2tzIGZvciBhIGNyb3NzLXByb2Nlc3MgbG9jay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUxvY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSBmb3IgbG9ja2ZpbGVzLiBEZWZhdWx0cyB0byBgJFRNUERJUi9kYngtdG9vbHMtbG9ja3NgLlxuICAgKi9cbiAgZGlyPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIGJhY2tlbmQgbGlzdC4gRGVmYXVsdHMgdG8gdGhlIHBvcnRhYmxlIGBmaWxlYCBwcm90b2NvbC4gKi9cbiAgYmFja2VuZHM/OiByZWFkb25seSBGaWxlTG9ja0JhY2tlbmRbXTtcbiAgLyoqXG4gICAqIFN0b3Agd2FpdGluZyBhbmQgdGhyb3cgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcy4gT21pdCB0byBwb2xsIGZvcmV2ZXIuXG4gICAqIFRoaXMgaXMgdGhlIG9ubHkgd2FpdC1sb29wIGtub2I7IHN0YWxlIHJlY2xhaW0gdGltaW5nIGlzIGZpeGVkLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogSW52b2tlZCBvbmNlIHRoZSBiYWNrZW5kIGZvciB0aGlzIGNhbGwgaGFzIGJlZW4gY2hvc2VuLiAqL1xuICBvbkFjcXVpcmU/OiAoYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24pID0+IHZvaWQ7XG4gIC8qKiBJbnZva2VkIG9uY2Ugd2hlbiB0aGUgc2VsZWN0ZWQgbG9jayBpcyBhbHJlYWR5IGhlbGQgYnkgYW5vdGhlciBwcm9jZXNzLiAqL1xuICBvbldhaXQ/OiAoYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24pID0+IHZvaWQ7XG59XG5cbi8qKiBFeHBsaWNpdCBjcm9zcy1wcm9jZXNzIGxlYXNlIHJldHVybmVkIGJ5IHtAbGluayBhY3F1aXJlRmlsZUxvY2t9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlTG9ja0xlYXNlIGV4dGVuZHMgRmlsZUxvY2tBY3F1aXNpdGlvbiB7XG4gIC8qKiBSZWxlYXNlIHRoZSBoZWxkIGxvY2suIFJlcGVhdGVkIGNhbGxzIGFyZSBzYWZlLiAqL1xuICByZWxlYXNlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbnR5cGUgRmxvY2tGbiA9IChmZDogbnVtYmVyLCBvcGVyYXRpb246IG51bWJlcikgPT4gbnVtYmVyO1xuXG5pbnRlcmZhY2UgQnVuRmZpTW9kdWxlIHtcbiAgZGxvcGVuOiAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW107IHJldHVybnM6IHN0cmluZyB9PixcbiAgKSA9PiB7IHN5bWJvbHM6IHsgZmxvY2s6IEZsb2NrRm4gfSB9O1xuICBzdWZmaXg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCB3aGlsZSBob2xkaW5nIGEgY3Jvc3MtcHJvY2VzcyBsb2NrIG5hbWVkIGJ5IGBrZXlgLlxuICpcbiAqIGBrZXlgIGlzIGNhbm9uaWNhbGl6ZWQgd2l0aCBgb2JqZWN0LnRvU3RhYmxlS2V5YCwgdGhlIHNhbWUgaWRlbnRpdHkgcnVsZSBhc1xuICogcHJvY2VzcyBhbmQgUG9zdGdyZXMgYWR2aXNvcnkgbG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHdpdGhGaWxlTG9jayhbXCJjYWNoZVwiLCBcImFwcGtpdFwiXSwgYXN5bmMgKCkgPT4ge1xuICogICBhd2FpdCBtaWdyYXRlKCk7XG4gKiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhGaWxlTG9jazxUPihcbiAga2V5OiB1bmtub3duLFxuICBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4sXG4gIG9wdGlvbnM6IEZpbGVMb2NrT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGlmIChvcHRpb25zLnRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGltZW91dE1zIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aW1lb3V0TXMgbXVzdCBiZSBub24tbmVnYXRpdmVcIik7XG4gIH1cbiAgY29uc3QgaWQgPSBsb2NrSWQoa2V5KTtcbiAgY29uc3QgYmFja2VuZHMgPSBvcHRpb25zLmJhY2tlbmRzID8/IERFRkFVTFRfQkFDS0VORFM7XG4gIGNvbnN0IGRpciA9IG9wdGlvbnMuZGlyID8/IGpvaW4odG1wZGlyKCksIFwiZGJ4LXRvb2xzLWxvY2tzXCIpO1xuICBjb25zdCBkZWFkbGluZSA9IG9wdGlvbnMudGltZW91dE1zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBEYXRlLm5vdygpICsgb3B0aW9ucy50aW1lb3V0TXM7XG5cbiAgZm9yIChjb25zdCBiYWNrZW5kIG9mIGJhY2tlbmRzKSB7XG4gICAgc3dpdGNoIChiYWNrZW5kKSB7XG4gICAgICBjYXNlIFwiZmxvY2tcIjoge1xuICAgICAgICBjb25zdCBsb2NrUGF0aCA9IGpvaW4oZGlyLCBgJHtpZH0uZmxvY2tgKTtcbiAgICAgICAgY29uc3QgZmxvY2sgPSBhd2FpdCByZXNvbHZlRmxvY2soKTtcbiAgICAgICAgaWYgKCFmbG9jaykge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcImxvY2sgYmFja2VuZCB1bmF2YWlsYWJsZVwiLCB7IGJhY2tlbmQsIGtleTogaWQgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiYWNxdWlyaW5nIGxvY2tcIiwgeyBiYWNrZW5kLCBrZXk6IGlkLCBwYXRoOiBsb2NrUGF0aCB9KTtcbiAgICAgICAgY29uc3QgYWNxdWlzaXRpb24gPSB7IGJhY2tlbmQgfSBhcyBjb25zdDtcbiAgICAgICAgb3B0aW9ucy5vbkFjcXVpcmU/LihhY3F1aXNpdGlvbik7XG4gICAgICAgIHJldHVybiBob2xkRmxvY2sobG9ja1BhdGgsIGZsb2NrLCBkZWFkbGluZSwgZm4sICgpID0+IG9wdGlvbnMub25XYWl0Py4oYWNxdWlzaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmaWxlXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgaWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJhY3F1aXJpbmcgbG9ja1wiLCB7IGJhY2tlbmQsIGtleTogaWQsIHBhdGg6IGxvY2tQYXRoIH0pO1xuICAgICAgICBjb25zdCBhY3F1aXNpdGlvbiA9IHsgYmFja2VuZCB9IGFzIGNvbnN0O1xuICAgICAgICBvcHRpb25zLm9uQWNxdWlyZT8uKGFjcXVpc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGhvbGRMb2NrRGlyZWN0b3J5KGxvY2tQYXRoLCBkZWFkbGluZSwgZm4sICgpID0+IG9wdGlvbnMub25XYWl0Py4oYWNxdWlzaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gYmFja2VuZDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGZpbGUtbG9jayBiYWNrZW5kOiAke1N0cmluZyhfZXhoYXVzdGl2ZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwid2l0aEZpbGVMb2NrOiBubyBsb2NrIGJhY2tlbmQgYXZhaWxhYmxlXCIpO1xufVxuXG4vKipcbiAqIEFjcXVpcmUgYSBjcm9zcy1wcm9jZXNzIGxvY2sgYW5kIHJldHVybiBhbiBleHBsaWNpdCBsZWFzZS5cbiAqXG4gKiBQcmVmZXIge0BsaW5rIHdpdGhGaWxlTG9ja30gZm9yIG9yZGluYXJ5IEphdmFTY3JpcHQgY2FsbGVycy4gVGhpcyBsb3dlci1sZXZlbFxuICogc2hhcGUgZXhpc3RzIGZvciBzdG9yYWdlIGFkYXB0ZXJzIGFuZCBjcm9zcy1sYW5ndWFnZSBicmlkZ2VzIHRoYXQgY2Fubm90XG4gKiBjb252ZW5pZW50bHkgcGFzcyBhbiBhc3luYyBjYWxsYmFjayB0aHJvdWdoIHRoZWlyIEZGSSBib3VuZGFyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjcXVpcmVGaWxlTG9jayhcbiAga2V5OiB1bmtub3duLFxuICBvcHRpb25zOiBGaWxlTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8RmlsZUxvY2tMZWFzZT4ge1xuICBsZXQgYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24gfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlQWNxdWlyZWQhOiAoKSA9PiB2b2lkO1xuICBsZXQgcmVqZWN0QWNxdWlyZWQhOiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG4gIGxldCByZXNvbHZlUmVsZWFzZSE6ICgpID0+IHZvaWQ7XG4gIGNvbnN0IGFjcXVpcmVkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc29sdmVBY3F1aXJlZCA9IHJlc29sdmU7XG4gICAgcmVqZWN0QWNxdWlyZWQgPSByZWplY3Q7XG4gIH0pO1xuICBjb25zdCByZWxlYXNlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZVJlbGVhc2UgPSByZXNvbHZlO1xuICB9KTtcbiAgY29uc3QgcnVuID0gd2l0aEZpbGVMb2NrKFxuICAgIGtleSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXNvbHZlQWNxdWlyZWQoKTtcbiAgICAgIGF3YWl0IHJlbGVhc2VkO1xuICAgIH0sXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uQWNxdWlyZTogKHZhbHVlKSA9PiB7XG4gICAgICAgIGFjcXVpc2l0aW9uID0gdmFsdWU7XG4gICAgICAgIG9wdGlvbnMub25BY3F1aXJlPy4odmFsdWUpO1xuICAgICAgfSxcbiAgICB9LFxuICApO1xuICB2b2lkIHJ1bi5jYXRjaChyZWplY3RBY3F1aXJlZCk7XG4gIGF3YWl0IGFjcXVpcmVkO1xuICBpZiAoIWFjcXVpc2l0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlLWxvY2sgYmFja2VuZCB3YXMgbm90IHJlY29yZGVkXCIpO1xuXG4gIGxldCBhY3RpdmUgPSB0cnVlO1xuICByZXR1cm4ge1xuICAgIC4uLmFjcXVpc2l0aW9uLFxuICAgIGFzeW5jIHJlbGVhc2UoKSB7XG4gICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICByZXNvbHZlUmVsZWFzZSgpO1xuICAgICAgYXdhaXQgcnVuO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBDYW5vbmljYWwgZmlsZXN5c3RlbS1zYWZlIGlkIGZvciBhIGxvY2sga2V5LiAqL1xuZnVuY3Rpb24gbG9ja0lkKGtleTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YWJsZSA9IG9iamVjdFxuICAgIC50b09uZU9yTWFueShrZXkpXG4gICAgLm1hcCgocGFydCkgPT4gb2JqZWN0LnRvU3RhYmxlS2V5KHBhcnQpKVxuICAgIC5qb2luKFwiXFx1MDAwMFwiKTtcbiAgLy8gU2hvcnQgZGlnZXN0IHNvIHBhdGhzIHN0YXkgd2VsbCB1bmRlciBPUyBsaW1pdHM7IGNvbGxpc2lvbnMgYXJlIGZpbmUg4oCUIHRoZXlcbiAgLy8gb25seSBtZXJnZSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFscmVhZHkgc2hhcmVkIGEga2V5IHN0cmluZy5cbiAgcmV0dXJuIGhhc2guZm52SGFzaChzdGFibGUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYGZsb2NrKDIpYCB0aHJvdWdoIEJ1biBGRkkgd2hlbiBwb3NzaWJsZS5cbiAqXG4gKiBNZW1vaXplZDogdGhlIEZGSSBpbXBvcnQgKyBsaWJjIGBkbG9wZW5gIHJ1biBvbmNlIHBlciBwcm9jZXNzLiBSZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCBvbiBXaW5kb3dzLCB1bmRlciBwbGFpbiBOb2RlLCBvciB3aGVuIGxpYmMgY2Fubm90IGJlIGxvYWRlZCDigJRcbiAqIGNhbGxlcnMgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGJhY2tlbmQuIEEgbWlzcyBpcyBjYWNoZWQgdG9vLCBzbyBhIHByb2Nlc3NcbiAqIHRoYXQgY2Fubm90IGZsb2NrIG5ldmVyIHJldHJpZXMgdGhlIGxvYWQuXG4gKi9cbmNvbnN0IHJlc29sdmVGbG9jayA9IGZ1bmN0aW9uVXRpbHMubWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxGbG9ja0ZuIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghcHJvY2Vzcy52ZXJzaW9ucy5idW4pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBEeW5hbWljIHNwZWNpZmllciBzbyBgdHNjYCAobm8gYEB0eXBlc2AgZm9yIGBidW46ZmZpYCkgZG9lcyBub3QgcmVzb2x2ZSBpdDtcbiAgICAvLyB0aGUgaW1wb3J0IG9ubHkgc3VjY2VlZHMgdW5kZXIgQnVuIGF0IHJ1bnRpbWUuXG4gICAgY29uc3Qgc3BlY2lmaWVyID0gXCJidW46ZmZpXCI7XG4gICAgY29uc3QgZmZpID0gKGF3YWl0IGltcG9ydChzcGVjaWZpZXIpKSBhcyB1bmtub3duIGFzIEJ1bkZmaU1vZHVsZTtcbiAgICBjb25zdCBsaWJQYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiA/IFwibGliU3lzdGVtLkIuZHlsaWJcIiA6IGBsaWJjLiR7ZmZpLnN1ZmZpeH1gO1xuICAgIGNvbnN0IGxpYiA9IGZmaS5kbG9wZW4obGliUGF0aCwge1xuICAgICAgZmxvY2s6IHsgYXJnczogW1wiaTMyXCIsIFwiaTMyXCJdLCByZXR1cm5zOiBcImkzMlwiIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGxpYi5zeW1ib2xzLmZsb2NrO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZsb2NrIEZGSSB1bmF2YWlsYWJsZVwiLCB7IGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoY2F1c2UpIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBob2xkRmxvY2s8VD4oXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGZsb2NrOiBGbG9ja0ZuLFxuICBkZWFkbGluZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4sXG4gIG9uV2FpdDogKCkgPT4gdm9pZCxcbik6IFByb21pc2U8VD4ge1xuICBhd2FpdCBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGgpO1xuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBvcGVuKGxvY2tQYXRoLCBcImErXCIpO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JGbG9jayhoYW5kbGUuZmQsIGZsb2NrLCBsb2NrUGF0aCwgZGVhZGxpbmUsIG9uV2FpdCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBmbG9jayhoYW5kbGUuZmQsIExPQ0tfVU4pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBoYW5kbGUuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckZsb2NrKFxuICBmZDogbnVtYmVyLFxuICBmbG9jazogRmxvY2tGbixcbiAgbG9ja1BhdGg6IHN0cmluZyxcbiAgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgb25XYWl0OiAoKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB3YWl0aW5nID0gZmFsc2U7XG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByYyA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7XG4gICAgaWYgKHJjID09PSAwKSByZXR1cm47XG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgIG9uV2FpdCgpO1xuICAgIH1cbiAgICBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoUE9MTF9NUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb3J0YWJsZSBsb2NrLWRpcmVjdG9yeSBvd25lcnNoaXAgdGhyb3VnaCBgcHJvcGVyLWxvY2tmaWxlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9sZExvY2tEaXJlY3Rvcnk8VD4oXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGZuOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgb25XYWl0OiAoKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxUPiB7XG4gIGF3YWl0IGVuc3VyZVBhcmVudERpcihsb2NrUGF0aCk7XG4gIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCBhY3F1aXJlTG9ja0RpcmVjdG9yeShsb2NrUGF0aCwgZGVhZGxpbmUsIG9uV2FpdCk7XG4gIGxldCBjYWxsYmFja0Vycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhbGxiYWNrRXJyb3IgPSBlcnJvcjtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVsZWFzZSgpO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBpZiAoY2FsbGJhY2tFcnJvciA9PT0gdW5kZWZpbmVkIHx8IChjYXVzZSBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09IFwiRVJFTEVBU0VEXCIpIHtcbiAgICAgICAgdGhyb3cgY2F1c2U7XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybihcImxvY2sgcmVsZWFzZSB3YXMgYWxyZWFkeSBjb21wbGV0ZWQgYWZ0ZXIgY2FsbGJhY2sgZmFpbHVyZVwiLCB7XG4gICAgICAgIHBhdGg6IGxvY2tQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFjcXVpcmVMb2NrRGlyZWN0b3J5KFxuICBsb2NrUGF0aDogc3RyaW5nLFxuICBkZWFkbGluZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBvbldhaXQ6ICgpID0+IHZvaWQsXG4pOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IHdhaXRpbmcgPSBmYWxzZTtcbiAgZm9yICg7Oykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbG9ja2ZpbGUubG9jayhsb2NrUGF0aCwge1xuICAgICAgICByZWFscGF0aDogZmFsc2UsXG4gICAgICAgIHN0YWxlOiBTVEFMRV9NUyxcbiAgICAgICAgdXBkYXRlOiBVUERBVEVfTVMsXG4gICAgICAgIHJldHJpZXM6IDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgY29uc3QgZXJyID0gY2F1c2UgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uO1xuICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVMT0NLRURcIikgdGhyb3cgZXJyb3JVdGlscy50b0Vycm9yKGNhdXNlKTtcbiAgICAgIGlmICghd2FpdGluZykge1xuICAgICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgb25XYWl0KCk7XG4gICAgICB9XG4gICAgICBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChQT0xMX01TKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0QmVmb3JlRGVhZGxpbmUobG9ja1BhdGg6IHN0cmluZywgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoZGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiBEYXRlLm5vdygpID49IGRlYWRsaW5lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgZmlsZSBsb2NrOiAke2xvY2tQYXRofWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVBhcmVudERpcihsb2NrUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9ja1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cbiJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbGUtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEVBQ1AsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsV0FBVyxHQUNaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUM7QUFFdkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBSzVDLE1BQU0sZ0JBQWdCLEdBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFOUQsMkRBQTJEO0FBQzNELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUVuQjs7OztHQUlHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxNQUFNLENBQUM7QUFFcEUsK0VBQStFO0FBQy9FLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUU1RSx1REFBdUQ7QUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUEwQ2xCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsR0FBWSxFQUNaLEVBQXdCLEVBQ3hCLFVBQTJCLEVBQUU7SUFFN0IsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUU5RixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEIsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDL0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDckUsTUFBTSxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQVcsQ0FBQztnQkFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sV0FBVyxHQUFHLEVBQUUsT0FBTyxFQUFXLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakMsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDUixNQUFNLFdBQVcsR0FBVSxPQUFPLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FDbkMsR0FBWSxFQUNaLFVBQTJCLEVBQUU7SUFFN0IsSUFBSSxXQUE0QyxDQUFDO0lBQ2pELElBQUksZUFBNEIsQ0FBQztJQUNqQyxJQUFJLGNBQXlDLENBQUM7SUFDOUMsSUFBSSxjQUEyQixDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JELGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDMUIsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0MsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FDdEIsR0FBRyxFQUNILEtBQUssSUFBSSxFQUFFO1FBQ1QsZUFBZSxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLENBQUM7SUFDakIsQ0FBQyxFQUNEO1FBQ0UsR0FBRyxPQUFPO1FBQ1YsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUNwQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztLQUNGLENBQ0YsQ0FBQztJQUNGLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLFFBQVEsQ0FBQztJQUNmLElBQUksQ0FBQyxXQUFXO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRXhFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPO1FBQ0wsR0FBRyxXQUFXO1FBQ2QsS0FBSyxDQUFDLE9BQU87WUFDWCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDZixjQUFjLEVBQUUsQ0FBQztZQUNqQixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELG1EQUFtRDtBQUNuRCxTQUFTLE1BQU0sQ0FBQyxHQUFZO0lBQzFCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7U0FDNUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xCLDhFQUE4RTtJQUM5RSxpRUFBaUU7SUFDakUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFrQyxFQUFFO0lBQ3BFLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTVDLElBQUksQ0FBQztRQUNILDhFQUE4RTtRQUM5RSxpREFBaUQ7UUFDakQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxNQUFNLGtDQUFDLFNBQVMsRUFBQyxDQUE0QixDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDOUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxLQUFLLFVBQVUsU0FBUyxDQUN0QixRQUFnQixFQUNoQixLQUFjLEVBQ2QsUUFBNEIsRUFDNUIsRUFBd0IsRUFDeEIsTUFBa0I7SUFFbEIsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7Z0JBQVMsQ0FBQztZQUNULEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZLENBQ3pCLEVBQVUsRUFDVixLQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsUUFBNEIsRUFDNUIsTUFBa0I7SUFFbEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFNBQVMsQ0FBQztRQUNSLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksRUFBRSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixNQUFNLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsUUFBZ0IsRUFDaEIsUUFBNEIsRUFDNUIsRUFBd0IsRUFDeEIsTUFBa0I7SUFFbEIsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLElBQUksYUFBc0IsQ0FBQztJQUMzQixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFLLEtBQStCLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUN6RixNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxFQUFFO2dCQUN2RSxJQUFJLEVBQUUsUUFBUTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FDakMsUUFBZ0IsRUFDaEIsUUFBNEIsRUFDNUIsTUFBa0I7SUFFbEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFNBQVMsQ0FBQztRQUNSLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsR0FBRyxLQUE4QixDQUFDO1lBQzNDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTO2dCQUFFLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQztZQUNELG9CQUFvQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsUUFBNEI7SUFDMUUsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFnQjtJQUM3QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXNjYWRpbmcgY3Jvc3MtcHJvY2VzcyBtdXR1YWwgZXhjbHVzaW9uIHZpYSBhIGxvY2tmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMgY29uY3VycmVudCAqcHJvY2Vzc2VzKiAodHdvIGBidW4gcnVuIGRlbW9gIHNoZWxscywgYSBDTEkgYmVzaWRlIGFcbiAqIHNlcnZlcikgb24gdGhlIHNhbWUga2V5LiBGb3IgaW4tcHJvY2VzcyAvIHdvcmtlci10aHJlYWQgZXhjbHVzaW9uIHVzZVxuICoge0BsaW5rIHdpdGhQcm9jZXNzTG9ja30gZnJvbSBgLi9wcm9jZXNzLWxvY2sudHNgIGluc3RlYWQuXG4gKlxuICogQmFja2VuZHM6XG4gKlxuICogMS4gKipmaWxlKiogKGRlZmF1bHQpIOKAlCBgcHJvcGVyLWxvY2tmaWxlYCBhdG9taWMgbG9jay1kaXJlY3RvcnkgY3JlYXRpb24sXG4gKiAgICBoZWFydGJlYXQsIHN0YWxlIHJlY292ZXJ5LCBhbmQgb3duZXJzaGlwLXNhZmUgcmVsZWFzZS4gQnVuIGFuZCBOb2RlIHVzZVxuICogICAgdGhpcyBzYW1lIHByb3RvY29sLlxuICogMi4gKipmbG9jayoqIChleHBsaWNpdCBjb21wYXRpYmlsaXR5IG9wdGlvbikg4oCUIGBmbG9jaygyKWAgdmlhIEJ1biBGRkkgb25cbiAqICAgIFVuaXguIEl0IHJlbWFpbnMgYXZhaWxhYmxlIHRvIGNhbGxlcnMgdGhhdCBzZWxlY3RlZCBpdCBleHBsaWNpdGx5LCBidXQgYVxuICogICAgcnVudGltZS1kZXBlbmRlbnQgY2FzY2FkZSBjYW5ub3QgY29vcmRpbmF0ZSBCdW4gYW5kIE5vZGUuXG4gKlxuICogVGhlIGZpcnN0IGJhY2tlbmQgdGhhdCBjYW4gYmUgKmluaXRpYWxpemVkKiBpcyB1c2VkIGZvciB0aGUgd2hvbGUgY2FsbC4gQSBidXN5XG4gKiBsb2NrIHdhaXRzOyBhbiB1bmF2YWlsYWJsZSBiYWNrZW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQuIENhbGxlcnMgbWF5IG9ubHlcbiAqIGJvdW5kIGhvdyBsb25nIHRvIHdhaXQgKHtAbGluayBGaWxlTG9ja09wdGlvbnMudGltZW91dE1zfSk7IHN0YWxlIHRpbWluZyBpc1xuICogbm90IGNvbmZpZ3VyYWJsZSBzbyBldmVyeSBob2xkZXIgYW5kIHdhaXRlciBhZ3JlZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1rZGlyLCBvcGVuIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQge1xuICBzbGVlcCxcbiAgdG9FcnJvcixcbiAgbWVtb2l6ZSxcbiAgZm52SGFzaCxcbiAgbG9nLFxuICB0b051bWJlcixcbiAgdG9PbmVPck1hbnksXG4gIHRvU3RhYmxlS2V5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IGxvY2tmaWxlIGZyb20gXCJwcm9wZXItbG9ja2ZpbGVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvcmU6ZmlsZS1sb2NrXCIpO1xuXG4vKiogQmFja2VuZHMge0BsaW5rIHdpdGhGaWxlTG9ja30gY2FuIGF0dGVtcHQsIGluIGNhc2NhZGUgb3JkZXIuICovXG5leHBvcnQgdHlwZSBGaWxlTG9ja0JhY2tlbmQgPSBcImZsb2NrXCIgfCBcImZpbGVcIjtcblxuY29uc3QgREVGQVVMVF9CQUNLRU5EUzogcmVhZG9ubHkgRmlsZUxvY2tCYWNrZW5kW10gPSBbXCJmaWxlXCJdO1xuXG4vKiogUG9sbCBpbnRlcnZhbCB3aGlsZSB3YWl0aW5nIGZvciBhIGNvbnRlbmRlZCBPUyBsb2NrLiAqL1xuY29uc3QgUE9MTF9NUyA9IDUwO1xuXG4vKipcbiAqIEFnZSBhZnRlciB3aGljaCBhbiB1bnJlZnJlc2hlZCBsb2NrIGRpcmVjdG9yeSBtYXkgYmUgcmVtb3ZlZC5cbiAqIE1hdGNoZXMgYHByb3Blci1sb2NrZmlsZWAncyBkZWZhdWx0LiBOb3QgY2FsbGVyLWNvbmZpZ3VyYWJsZTogZXZlcnkgcHJvY2Vzc1xuICogbXVzdCBzaGFyZSB0aGUgc2FtZSB0aHJlc2hvbGQgb3IgYSBsaXZlIGhvbGRlciBjYW4gYmUgbWlzdGFrZW4gZm9yIHN0YWxlLlxuICovXG5jb25zdCBTVEFMRV9NUyA9IHRvTnVtYmVyKHByb2Nlc3MuZW52LkZJTEVfTE9DS19TVEFMRV9NUykgPz8gMTBfMDAwO1xuXG4vKiogSGVhcnRiZWF0IGludGVydmFsIGZvciByZWZyZXNoaW5nIGxvY2stZGlyZWN0b3J5IG10aW1lIChgU1RBTEVfTVMgLyAyYCkuICovXG5jb25zdCBVUERBVEVfTVMgPSB0b051bWJlcihwcm9jZXNzLmVudi5GSUxFX0xPQ0tfVVBEQVRFX01TKSA/PyBTVEFMRV9NUyAvIDI7XG5cbi8qKiBgZmxvY2soMilgIG9wZXJhdGlvbiBiaXRzIChMaW51eCAvIG1hY09TIC8gQlNEKS4gKi9cbmNvbnN0IExPQ0tfRVggPSAyO1xuY29uc3QgTE9DS19OQiA9IDQ7XG5jb25zdCBMT0NLX1VOID0gODtcblxuLyoqIFJlc3VsdCBtZXRhZGF0YSB3aGVuIGEgY2FsbGVyIHdhbnRzIHRvIGtub3cgd2hpY2ggYmFja2VuZCByYW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2NrQWNxdWlzaXRpb24ge1xuICBiYWNrZW5kOiBGaWxlTG9ja0JhY2tlbmQ7XG59XG5cbi8qKiBCYWNrZW5kIHNlbGVjdGlvbiwgd2FpdCBwb2xpY3ksIGFuZCBsaWZlY3ljbGUgY2FsbGJhY2tzIGZvciBhIGNyb3NzLXByb2Nlc3MgbG9jay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUxvY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSBmb3IgbG9ja2ZpbGVzLiBEZWZhdWx0cyB0byBgJFRNUERJUi9kYngtdG9vbHMtbG9ja3NgLlxuICAgKi9cbiAgZGlyPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIGJhY2tlbmQgbGlzdC4gRGVmYXVsdHMgdG8gdGhlIHBvcnRhYmxlIGBmaWxlYCBwcm90b2NvbC4gKi9cbiAgYmFja2VuZHM/OiByZWFkb25seSBGaWxlTG9ja0JhY2tlbmRbXTtcbiAgLyoqXG4gICAqIFN0b3Agd2FpdGluZyBhbmQgdGhyb3cgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcy4gT21pdCB0byBwb2xsIGZvcmV2ZXIuXG4gICAqIFRoaXMgaXMgdGhlIG9ubHkgd2FpdC1sb29wIGtub2I7IHN0YWxlIHJlY2xhaW0gdGltaW5nIGlzIGZpeGVkLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogSW52b2tlZCBvbmNlIHRoZSBiYWNrZW5kIGZvciB0aGlzIGNhbGwgaGFzIGJlZW4gY2hvc2VuLiAqL1xuICBvbkFjcXVpcmU/OiAoYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24pID0+IHZvaWQ7XG4gIC8qKiBJbnZva2VkIG9uY2Ugd2hlbiB0aGUgc2VsZWN0ZWQgbG9jayBpcyBhbHJlYWR5IGhlbGQgYnkgYW5vdGhlciBwcm9jZXNzLiAqL1xuICBvbldhaXQ/OiAoYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24pID0+IHZvaWQ7XG59XG5cbi8qKiBFeHBsaWNpdCBjcm9zcy1wcm9jZXNzIGxlYXNlIHJldHVybmVkIGJ5IHtAbGluayBhY3F1aXJlRmlsZUxvY2t9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlTG9ja0xlYXNlIGV4dGVuZHMgRmlsZUxvY2tBY3F1aXNpdGlvbiB7XG4gIC8qKiBSZWxlYXNlIHRoZSBoZWxkIGxvY2suIFJlcGVhdGVkIGNhbGxzIGFyZSBzYWZlLiAqL1xuICByZWxlYXNlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbnR5cGUgRmxvY2tGbiA9IChmZDogbnVtYmVyLCBvcGVyYXRpb246IG51bWJlcikgPT4gbnVtYmVyO1xuXG5pbnRlcmZhY2UgQnVuRmZpTW9kdWxlIHtcbiAgZGxvcGVuOiAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW107IHJldHVybnM6IHN0cmluZyB9PixcbiAgKSA9PiB7IHN5bWJvbHM6IHsgZmxvY2s6IEZsb2NrRm4gfSB9O1xuICBzdWZmaXg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCB3aGlsZSBob2xkaW5nIGEgY3Jvc3MtcHJvY2VzcyBsb2NrIG5hbWVkIGJ5IGBrZXlgLlxuICpcbiAqIGBrZXlgIGlzIGNhbm9uaWNhbGl6ZWQgd2l0aCBgb2JqZWN0LnRvU3RhYmxlS2V5YCwgdGhlIHNhbWUgaWRlbnRpdHkgcnVsZSBhc1xuICogcHJvY2VzcyBhbmQgUG9zdGdyZXMgYWR2aXNvcnkgbG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHdpdGhGaWxlTG9jayhbXCJjYWNoZVwiLCBcImFwcGtpdFwiXSwgYXN5bmMgKCkgPT4ge1xuICogICBhd2FpdCBtaWdyYXRlKCk7XG4gKiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhGaWxlTG9jazxUPihcbiAga2V5OiB1bmtub3duLFxuICBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4sXG4gIG9wdGlvbnM6IEZpbGVMb2NrT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGlmIChvcHRpb25zLnRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGltZW91dE1zIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aW1lb3V0TXMgbXVzdCBiZSBub24tbmVnYXRpdmVcIik7XG4gIH1cbiAgY29uc3QgaWQgPSBsb2NrSWQoa2V5KTtcbiAgY29uc3QgYmFja2VuZHMgPSBvcHRpb25zLmJhY2tlbmRzID8/IERFRkFVTFRfQkFDS0VORFM7XG4gIGNvbnN0IGRpciA9IG9wdGlvbnMuZGlyID8/IGpvaW4odG1wZGlyKCksIFwiZGJ4LXRvb2xzLWxvY2tzXCIpO1xuICBjb25zdCBkZWFkbGluZSA9IG9wdGlvbnMudGltZW91dE1zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBEYXRlLm5vdygpICsgb3B0aW9ucy50aW1lb3V0TXM7XG5cbiAgZm9yIChjb25zdCBiYWNrZW5kIG9mIGJhY2tlbmRzKSB7XG4gICAgc3dpdGNoIChiYWNrZW5kKSB7XG4gICAgICBjYXNlIFwiZmxvY2tcIjoge1xuICAgICAgICBjb25zdCBsb2NrUGF0aCA9IGpvaW4oZGlyLCBgJHtpZH0uZmxvY2tgKTtcbiAgICAgICAgY29uc3QgZmxvY2sgPSBhd2FpdCByZXNvbHZlRmxvY2soKTtcbiAgICAgICAgaWYgKCFmbG9jaykge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcImxvY2sgYmFja2VuZCB1bmF2YWlsYWJsZVwiLCB7IGJhY2tlbmQsIGtleTogaWQgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiYWNxdWlyaW5nIGxvY2tcIiwgeyBiYWNrZW5kLCBrZXk6IGlkLCBwYXRoOiBsb2NrUGF0aCB9KTtcbiAgICAgICAgY29uc3QgYWNxdWlzaXRpb24gPSB7IGJhY2tlbmQgfSBhcyBjb25zdDtcbiAgICAgICAgb3B0aW9ucy5vbkFjcXVpcmU/LihhY3F1aXNpdGlvbik7XG4gICAgICAgIHJldHVybiBob2xkRmxvY2sobG9ja1BhdGgsIGZsb2NrLCBkZWFkbGluZSwgZm4sICgpID0+IG9wdGlvbnMub25XYWl0Py4oYWNxdWlzaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmaWxlXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgaWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJhY3F1aXJpbmcgbG9ja1wiLCB7IGJhY2tlbmQsIGtleTogaWQsIHBhdGg6IGxvY2tQYXRoIH0pO1xuICAgICAgICBjb25zdCBhY3F1aXNpdGlvbiA9IHsgYmFja2VuZCB9IGFzIGNvbnN0O1xuICAgICAgICBvcHRpb25zLm9uQWNxdWlyZT8uKGFjcXVpc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGhvbGRMb2NrRGlyZWN0b3J5KGxvY2tQYXRoLCBkZWFkbGluZSwgZm4sICgpID0+IG9wdGlvbnMub25XYWl0Py4oYWNxdWlzaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gYmFja2VuZDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGZpbGUtbG9jayBiYWNrZW5kOiAke1N0cmluZyhfZXhoYXVzdGl2ZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwid2l0aEZpbGVMb2NrOiBubyBsb2NrIGJhY2tlbmQgYXZhaWxhYmxlXCIpO1xufVxuXG4vKipcbiAqIEFjcXVpcmUgYSBjcm9zcy1wcm9jZXNzIGxvY2sgYW5kIHJldHVybiBhbiBleHBsaWNpdCBsZWFzZS5cbiAqXG4gKiBQcmVmZXIge0BsaW5rIHdpdGhGaWxlTG9ja30gZm9yIG9yZGluYXJ5IEphdmFTY3JpcHQgY2FsbGVycy4gVGhpcyBsb3dlci1sZXZlbFxuICogc2hhcGUgZXhpc3RzIGZvciBzdG9yYWdlIGFkYXB0ZXJzIGFuZCBjcm9zcy1sYW5ndWFnZSBicmlkZ2VzIHRoYXQgY2Fubm90XG4gKiBjb252ZW5pZW50bHkgcGFzcyBhbiBhc3luYyBjYWxsYmFjayB0aHJvdWdoIHRoZWlyIEZGSSBib3VuZGFyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjcXVpcmVGaWxlTG9jayhcbiAga2V5OiB1bmtub3duLFxuICBvcHRpb25zOiBGaWxlTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8RmlsZUxvY2tMZWFzZT4ge1xuICBsZXQgYWNxdWlzaXRpb246IEZpbGVMb2NrQWNxdWlzaXRpb24gfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlQWNxdWlyZWQhOiAoKSA9PiB2b2lkO1xuICBsZXQgcmVqZWN0QWNxdWlyZWQhOiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG4gIGxldCByZXNvbHZlUmVsZWFzZSE6ICgpID0+IHZvaWQ7XG4gIGNvbnN0IGFjcXVpcmVkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc29sdmVBY3F1aXJlZCA9IHJlc29sdmU7XG4gICAgcmVqZWN0QWNxdWlyZWQgPSByZWplY3Q7XG4gIH0pO1xuICBjb25zdCByZWxlYXNlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZVJlbGVhc2UgPSByZXNvbHZlO1xuICB9KTtcbiAgY29uc3QgcnVuID0gd2l0aEZpbGVMb2NrKFxuICAgIGtleSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXNvbHZlQWNxdWlyZWQoKTtcbiAgICAgIGF3YWl0IHJlbGVhc2VkO1xuICAgIH0sXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uQWNxdWlyZTogKHZhbHVlKSA9PiB7XG4gICAgICAgIGFjcXVpc2l0aW9uID0gdmFsdWU7XG4gICAgICAgIG9wdGlvbnMub25BY3F1aXJlPy4odmFsdWUpO1xuICAgICAgfSxcbiAgICB9LFxuICApO1xuICB2b2lkIHJ1bi5jYXRjaChyZWplY3RBY3F1aXJlZCk7XG4gIGF3YWl0IGFjcXVpcmVkO1xuICBpZiAoIWFjcXVpc2l0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlLWxvY2sgYmFja2VuZCB3YXMgbm90IHJlY29yZGVkXCIpO1xuXG4gIGxldCBhY3RpdmUgPSB0cnVlO1xuICByZXR1cm4ge1xuICAgIC4uLmFjcXVpc2l0aW9uLFxuICAgIGFzeW5jIHJlbGVhc2UoKSB7XG4gICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICByZXNvbHZlUmVsZWFzZSgpO1xuICAgICAgYXdhaXQgcnVuO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBDYW5vbmljYWwgZmlsZXN5c3RlbS1zYWZlIGlkIGZvciBhIGxvY2sga2V5LiAqL1xuZnVuY3Rpb24gbG9ja0lkKGtleTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YWJsZSA9IHRvT25lT3JNYW55KGtleSlcbiAgICAubWFwKChwYXJ0KSA9PiB0b1N0YWJsZUtleShwYXJ0KSlcbiAgICAuam9pbihcIlxcdTAwMDBcIik7XG4gIC8vIFNob3J0IGRpZ2VzdCBzbyBwYXRocyBzdGF5IHdlbGwgdW5kZXIgT1MgbGltaXRzOyBjb2xsaXNpb25zIGFyZSBmaW5lIOKAlCB0aGV5XG4gIC8vIG9ubHkgbWVyZ2UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBhbHJlYWR5IHNoYXJlZCBhIGtleSBzdHJpbmcuXG4gIHJldHVybiBmbnZIYXNoKHN0YWJsZSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBgZmxvY2soMilgIHRocm91Z2ggQnVuIEZGSSB3aGVuIHBvc3NpYmxlLlxuICpcbiAqIE1lbW9pemVkOiB0aGUgRkZJIGltcG9ydCArIGxpYmMgYGRsb3BlbmAgcnVuIG9uY2UgcGVyIHByb2Nlc3MuIFJldHVybnNcbiAqIGB1bmRlZmluZWRgIG9uIFdpbmRvd3MsIHVuZGVyIHBsYWluIE5vZGUsIG9yIHdoZW4gbGliYyBjYW5ub3QgYmUgbG9hZGVkIOKAlFxuICogY2FsbGVycyBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgYmFja2VuZC4gQSBtaXNzIGlzIGNhY2hlZCB0b28sIHNvIGEgcHJvY2Vzc1xuICogdGhhdCBjYW5ub3QgZmxvY2sgbmV2ZXIgcmV0cmllcyB0aGUgbG9hZC5cbiAqL1xuY29uc3QgcmVzb2x2ZUZsb2NrID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxGbG9ja0ZuIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghcHJvY2Vzcy52ZXJzaW9ucy5idW4pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBEeW5hbWljIHNwZWNpZmllciBzbyBgdHNjYCAobm8gYEB0eXBlc2AgZm9yIGBidW46ZmZpYCkgZG9lcyBub3QgcmVzb2x2ZSBpdDtcbiAgICAvLyB0aGUgaW1wb3J0IG9ubHkgc3VjY2VlZHMgdW5kZXIgQnVuIGF0IHJ1bnRpbWUuXG4gICAgY29uc3Qgc3BlY2lmaWVyID0gXCJidW46ZmZpXCI7XG4gICAgY29uc3QgZmZpID0gKGF3YWl0IGltcG9ydChzcGVjaWZpZXIpKSBhcyB1bmtub3duIGFzIEJ1bkZmaU1vZHVsZTtcbiAgICBjb25zdCBsaWJQYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiA/IFwibGliU3lzdGVtLkIuZHlsaWJcIiA6IGBsaWJjLiR7ZmZpLnN1ZmZpeH1gO1xuICAgIGNvbnN0IGxpYiA9IGZmaS5kbG9wZW4obGliUGF0aCwge1xuICAgICAgZmxvY2s6IHsgYXJnczogW1wiaTMyXCIsIFwiaTMyXCJdLCByZXR1cm5zOiBcImkzMlwiIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGxpYi5zeW1ib2xzLmZsb2NrO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZsb2NrIEZGSSB1bmF2YWlsYWJsZVwiLCB7IGVycm9yOiB0b0Vycm9yKGNhdXNlKSB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaG9sZEZsb2NrPFQ+KFxuICBsb2NrUGF0aDogc3RyaW5nLFxuICBmbG9jazogRmxvY2tGbixcbiAgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICBvbldhaXQ6ICgpID0+IHZvaWQsXG4pOiBQcm9taXNlPFQ+IHtcbiAgYXdhaXQgZW5zdXJlUGFyZW50RGlyKGxvY2tQYXRoKTtcbiAgY29uc3QgaGFuZGxlID0gYXdhaXQgb3Blbihsb2NrUGF0aCwgXCJhK1wiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yRmxvY2soaGFuZGxlLmZkLCBmbG9jaywgbG9ja1BhdGgsIGRlYWRsaW5lLCBvbldhaXQpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZmxvY2soaGFuZGxlLmZkLCBMT0NLX1VOKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgaGFuZGxlLmNsb3NlKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JGbG9jayhcbiAgZmQ6IG51bWJlcixcbiAgZmxvY2s6IEZsb2NrRm4sXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9uV2FpdDogKCkgPT4gdm9pZCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgd2FpdGluZyA9IGZhbHNlO1xuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpO1xuICAgIGlmIChyYyA9PT0gMCkgcmV0dXJuO1xuICAgIGlmICghd2FpdGluZykge1xuICAgICAgd2FpdGluZyA9IHRydWU7XG4gICAgICBvbldhaXQoKTtcbiAgICB9XG4gICAgYXNzZXJ0QmVmb3JlRGVhZGxpbmUobG9ja1BhdGgsIGRlYWRsaW5lKTtcbiAgICBhd2FpdCBzbGVlcChQT0xMX01TKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvcnRhYmxlIGxvY2stZGlyZWN0b3J5IG93bmVyc2hpcCB0aHJvdWdoIGBwcm9wZXItbG9ja2ZpbGVgLlxuICovXG5hc3luYyBmdW5jdGlvbiBob2xkTG9ja0RpcmVjdG9yeTxUPihcbiAgbG9ja1BhdGg6IHN0cmluZyxcbiAgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICBvbldhaXQ6ICgpID0+IHZvaWQsXG4pOiBQcm9taXNlPFQ+IHtcbiAgYXdhaXQgZW5zdXJlUGFyZW50RGlyKGxvY2tQYXRoKTtcbiAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IGFjcXVpcmVMb2NrRGlyZWN0b3J5KGxvY2tQYXRoLCBkZWFkbGluZSwgb25XYWl0KTtcbiAgbGV0IGNhbGxiYWNrRXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FsbGJhY2tFcnJvciA9IGVycm9yO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZWxlYXNlKCk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGlmIChjYWxsYmFja0Vycm9yID09PSB1bmRlZmluZWQgfHwgKGNhdXNlIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSAhPT0gXCJFUkVMRUFTRURcIikge1xuICAgICAgICB0aHJvdyBjYXVzZTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci53YXJuKFwibG9jayByZWxlYXNlIHdhcyBhbHJlYWR5IGNvbXBsZXRlZCBhZnRlciBjYWxsYmFjayBmYWlsdXJlXCIsIHtcbiAgICAgICAgcGF0aDogbG9ja1BhdGgsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNxdWlyZUxvY2tEaXJlY3RvcnkoXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9uV2FpdDogKCkgPT4gdm9pZCxcbik6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgd2FpdGluZyA9IGZhbHNlO1xuICBmb3IgKDs7KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBsb2NrZmlsZS5sb2NrKGxvY2tQYXRoLCB7XG4gICAgICAgIHJlYWxwYXRoOiBmYWxzZSxcbiAgICAgICAgc3RhbGU6IFNUQUxFX01TLFxuICAgICAgICB1cGRhdGU6IFVQREFURV9NUyxcbiAgICAgICAgcmV0cmllczogMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBjb25zdCBlcnIgPSBjYXVzZSBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb247XG4gICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRUxPQ0tFRFwiKSB0aHJvdyB0b0Vycm9yKGNhdXNlKTtcbiAgICAgIGlmICghd2FpdGluZykge1xuICAgICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgb25XYWl0KCk7XG4gICAgICB9XG4gICAgICBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgICAgYXdhaXQgc2xlZXAoUE9MTF9NUyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydEJlZm9yZURlYWRsaW5lKGxvY2tQYXRoOiBzdHJpbmcsIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKGRlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGZpbGUgbG9jazogJHtsb2NrUGF0aH1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGxvY2tQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59XG4iXX0=
@@ -29,7 +29,7 @@
29
29
  * @module
30
30
  */
31
31
  import { isMainThread, MessageChannel, parentPort, workerData, } from "node:worker_threads";
32
- import { errorUtils, hash, object } from "@dbx-tools/shared-core";
32
+ import { toError, id, toOneOrMany, toStableKey, isRecord } from "@dbx-tools/shared-core";
33
33
  /**
34
34
  * `workerData` slot carrying the coordinator port into a worker, and the
35
35
  * `parentPort` message `type` for the late {@link attachProcessLock} handshake.
@@ -188,7 +188,7 @@ class LockClient {
188
188
  if (this.closed) {
189
189
  throw new Error("Process lock port is closed");
190
190
  }
191
- const requestId = hash.id();
191
+ const requestId = id();
192
192
  this.retain();
193
193
  try {
194
194
  await new Promise((resolve, reject) => {
@@ -198,7 +198,7 @@ class LockClient {
198
198
  }
199
199
  catch (cause) {
200
200
  this.pending.delete(requestId);
201
- reject(errorUtils.toError(cause));
201
+ reject(toError(cause));
202
202
  }
203
203
  });
204
204
  }
@@ -273,9 +273,8 @@ export function withProcessLock(key, fn) {
273
273
  }
274
274
  /** Canonical string identity for a lock key (see `object.toStableKey`). */
275
275
  function lockKey(key) {
276
- return object
277
- .toOneOrMany(key)
278
- .map((part) => object.toStableKey(part))
276
+ return toOneOrMany(key)
277
+ .map((part) => toStableKey(part))
279
278
  .join("\u0000");
280
279
  }
281
280
  /**
@@ -290,7 +289,7 @@ function lockKey(key) {
290
289
  */
291
290
  export function processLockWorkerOptions(options = {}) {
292
291
  const port = createCoordinatorPort("processLockWorkerOptions");
293
- const existing = object.isRecord(options.workerData) ? options.workerData : {};
292
+ const existing = isRecord(options.workerData) ? options.workerData : {};
294
293
  return {
295
294
  ...options,
296
295
  workerData: { ...existing, [LOCK_PORT_KEY]: port },
@@ -343,7 +342,7 @@ export function processLockAttached() {
343
342
  }
344
343
  return new Promise((resolve) => {
345
344
  const onMessage = (message) => {
346
- if (!object.isRecord(message) || message.type !== ATTACH_MESSAGE_TYPE)
345
+ if (!isRecord(message) || message.type !== ATTACH_MESSAGE_TYPE)
347
346
  return;
348
347
  port.off("message", onMessage);
349
348
  client = new LockClient(message.port);
@@ -352,4 +351,4 @@ export function processLockAttached() {
352
351
  port.on("message", onMessage);
353
352
  });
354
353
  }
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3MtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxHQUlYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbEU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsMkJBQTJCLENBQUM7QUFDbEQsTUFBTSxtQkFBbUIsR0FBRyw2QkFBNkIsQ0FBQztBQTBDMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxlQUFlO0lBQ0YsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBRXZELDhEQUE4RDtJQUM5RCxPQUFPLENBQUMsSUFBaUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFvQixFQUFFLEVBQUU7WUFDMUMsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkQsTUFBTTtnQkFDUixLQUFLLFNBQVM7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FB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QUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLG1CQUFtQjtnQkFBRSxPQUFPO1lBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBRSxPQUFvQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLZXllZCBtdXR1YWwgZXhjbHVzaW9uIGFjcm9zcyB0aGUgbWFpbiB0aHJlYWQgYW5kIGl0cyB3b3JrZXIgdGhyZWFkcy5cbiAqXG4gKiB7QGxpbmsgd2l0aFByb2Nlc3NMb2NrfSBzZXJpYWxpemVzIGNhbGxiYWNrcyB0aGF0IHNoYXJlIGEga2V5OiBvbmUgcnVucyBhdCBhXG4gKiB0aW1lLCB0aGUgcmVzdCBxdWV1ZSBpbiBhcnJpdmFsIG9yZGVyLCBhbmQgZGlmZmVyZW50IGtleXMgcHJvY2VlZFxuICogY29uY3VycmVudGx5LiBVbmxpa2UgYSBwbGFpbiBpbi1tb2R1bGUgYFByb21pc2VgIGNoYWluLCB0aGUgcXVldWUgaXMgc2hhcmVkIGJ5XG4gKiBldmVyeSB0aHJlYWQgd2lyZWQgdXAgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfSwgc28gYSB3b3JrZXJcbiAqIHBvb2wgY2Fubm90IHJ1biB0d28gY2FsbGJhY2tzIGZvciB0aGUgc2FtZSBrZXkgYXQgb25jZS5cbiAqXG4gKiBUaGUgbmFtZSBzYXlzIGBwcm9jZXNzYDogdGhpcyBjb29yZGluYXRlcyB0aGUgVEhSRUFEUyBvZiBvbmUgTm9kZSBwcm9jZXNzLiBJdFxuICogaXMgbm90IGNyb3NzLXByb2Nlc3MgYW5kIG5vdCBjcm9zcy1ob3N0IC0gYSBzZWNvbmQgYG5vZGVgIGludm9jYXRpb24sIG9yIGFcbiAqIHNlY29uZCBhcHAgcmVwbGljYSwgaGFzIGl0cyBvd24gY29vcmRpbmF0b3IgYW5kIHNoYXJlcyBub3RoaW5nLiBXaGVuIHRoZSBzY29wZVxuICogaXMgYSBkZXBsb3ltZW50IHJhdGhlciB0aGFuIGEgcHJvY2VzcywgdXNlXG4gKiBgQGRieC10b29scy9wb3N0Z3Jlc2AncyBgd2l0aEFkdmlzb3J5TG9ja2AsIHdoaWNoIHB1dHMgdGhlIGFyYml0ZXIgaW5cbiAqIFBvc3RncmVTUUwgd2hlcmUgZXZlcnkgcmVwbGljYSBjYW4gc2VlIGl0LlxuICpcbiAqIFRoZSBtYWluIHRocmVhZCBvd25zIHRoZSBvbmx5IGNvb3JkaW5hdG9yLiBFYWNoIHBhcnRpY2lwYXRpbmcgdGhyZWFkIGdldHMgb25lXG4gKiBgTWVzc2FnZVBvcnRgIHRvIGl0LCBhbmQgYSBsb2NrIGlzIGdyYW50ZWQgYnkgYSBtZXNzYWdlIGJhY2sgb3ZlciB0aGF0IHBvcnQuXG4gKiBDb25zZXF1ZW50bHk6XG4gKlxuICogICAtIHRoZSBsb2NrIGlzIEFEVklTT1JZLCBsaWtlIFBvc3RncmVzIGFkdmlzb3J5IGxvY2tzIC0gaXQgcHJvdGVjdHMgYVxuICogICAgIGNyaXRpY2FsIHNlY3Rpb24gb25seSBpbnNvZmFyIGFzIGV2ZXJ5IHdyaXRlciB0YWtlcyB0aGUgc2FtZSBrZXk7XG4gKiAgIC0gZmFpcm5lc3MgaXMgRklGTyBwZXIga2V5LCBzaW5jZSB0aGUgY29vcmRpbmF0b3IgcXVldWVzIHdhaXRlcnMgaW4gdGhlXG4gKiAgICAgb3JkZXIgdGhlaXIgcmVxdWVzdHMgYXJyaXZlO1xuICogICAtIGEgdGhyZWFkIHRoYXQgZGllcyB3aGlsZSBob2xkaW5nIGEgbG9jayByZWxlYXNlcyBpdCwgYmVjYXVzZSBpdHMgcG9ydFxuICogICAgIGNsb3NpbmcgaXMgd2hhdCBoYW5kcyB0aGUga2V5IHRvIHRoZSBuZXh0IHdhaXRlciAoc2VlXG4gKiAgICAge0BsaW5rIExvY2tDb29yZGluYXRvci5yZW1vdmVQb3J0fSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGlzTWFpblRocmVhZCxcbiAgTWVzc2FnZUNoYW5uZWwsXG4gIHBhcmVudFBvcnQsXG4gIHdvcmtlckRhdGEsXG4gIHR5cGUgTWVzc2FnZVBvcnQsXG4gIHR5cGUgV29ya2VyLFxuICB0eXBlIFdvcmtlck9wdGlvbnMsXG59IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBoYXNoLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG4vKipcbiAqIGB3b3JrZXJEYXRhYCBzbG90IGNhcnJ5aW5nIHRoZSBjb29yZGluYXRvciBwb3J0IGludG8gYSB3b3JrZXIsIGFuZCB0aGVcbiAqIGBwYXJlbnRQb3J0YCBtZXNzYWdlIGB0eXBlYCBmb3IgdGhlIGxhdGUge0BsaW5rIGF0dGFjaFByb2Nlc3NMb2NrfSBoYW5kc2hha2UuXG4gKiBOYW1lc3BhY2VkIGJlY2F1c2UgYm90aCB0cmF2ZWwgdGhyb3VnaCBjaGFubmVscyBhbiBhcHBsaWNhdGlvbiBhbHNvIHVzZXM6XG4gKiBgd29ya2VyRGF0YWAgaXMgdGhlIGNhbGxlcidzIG93biBvYmplY3QsIGFuZCBgcGFyZW50UG9ydGAgY2FycmllcyB0aGUgY2FsbGVyJ3NcbiAqIG93biBtZXNzYWdlcy5cbiAqL1xuY29uc3QgTE9DS19QT1JUX0tFWSA9IFwiX19kYnhUb29sc1Byb2Nlc3NMb2NrUG9ydFwiO1xuY29uc3QgQVRUQUNIX01FU1NBR0VfVFlQRSA9IFwiX19kYnhUb29sc1Byb2Nlc3NMb2NrQXR0YWNoXCI7XG5cbi8qKiBTZW50IGJ5IGEgY2xpZW50IHRvIHRoZSBjb29yZGluYXRvci4gKi9cbnR5cGUgTG9ja1JlcXVlc3QgPVxuICB8IHsgdHlwZTogXCJhY3F1aXJlXCI7IHJlcXVlc3RJZDogc3RyaW5nOyBrZXk6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInJlbGVhc2VcIjsgcmVxdWVzdElkOiBzdHJpbmc7IGtleTogc3RyaW5nIH07XG5cbi8qKiBTZW50IGJ5IHRoZSBjb29yZGluYXRvciB0byB0aGUgY2xpZW50IHRoYXQgbm93IG93bnMgdGhlIGtleS4gKi9cbnR5cGUgTG9ja1Jlc3BvbnNlID0geyB0eXBlOiBcImdyYW50ZWRcIjsgcmVxdWVzdElkOiBzdHJpbmcgfTtcblxudHlwZSBMb2NrTWVzc2FnZSA9IExvY2tSZXF1ZXN0IHwgTG9ja1Jlc3BvbnNlO1xuXG4vKiogVGhlIGBwYXJlbnRQb3J0YCBlbnZlbG9wZSB0aGF0IGhhbmRzIGEgbGF0ZS1hdHRhY2hlZCB3b3JrZXIgaXRzIHBvcnQuICovXG5pbnRlcmZhY2UgQXR0YWNoTWVzc2FnZSB7XG4gIHR5cGU6IHR5cGVvZiBBVFRBQ0hfTUVTU0FHRV9UWVBFO1xuICBwb3J0OiBNZXNzYWdlUG9ydDtcbn1cblxuLyoqIE9uZSBvdXRzdGFuZGluZyBvciBncmFudGVkIGFjcXVpc2l0aW9uLiAqL1xuaW50ZXJmYWNlIExvY2tXYWl0ZXIge1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgcG9ydDogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKiBTaGFwZSBvZiB0aGUgYHdvcmtlckRhdGFgIHNsaWNlIHRoaXMgbW9kdWxlIHJlYWRzLiAqL1xuaW50ZXJmYWNlIExvY2tXb3JrZXJEYXRhIHtcbiAgW0xPQ0tfUE9SVF9LRVldPzogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKlxuICogQSBrZXkncyBvd25lciBwbHVzIGl0cyBGSUZPIHF1ZXVlIG9mIHdhaXRlcnMuXG4gKlxuICogT3duZXIgYW5kIHF1ZXVlIGxpdmUgaW4gT05FIG1hcCBlbnRyeSByYXRoZXIgdGhhbiB0d28gcGFyYWxsZWwgbWFwcyBzbyBhIGtleVxuICogY2Fubm90IGVuZCB1cCBoYWxmLXByZXNlbnQgLSBhIHF1ZXVlIHdob3NlIG93bmVyIG1hcCBlbnRyeSB3YXMgYWxyZWFkeSBkZWxldGVkXG4gKiB3b3VsZCBzdHJhbmQgaXRzIHdhaXRlcnMgZm9yZXZlciwgYW5kIHRoZSBlbnRyeSBpcyBkcm9wcGVkIG9ubHkgd2hlbiB0aGUga2V5XG4gKiBpcyBib3RoIHVub3duZWQgYW5kIHVud2FudGVkLlxuICovXG5pbnRlcmZhY2UgTG9ja1N0YXRlIHtcbiAgb3duZXI6IExvY2tXYWl0ZXI7XG4gIHF1ZXVlOiBMb2NrV2FpdGVyW107XG59XG5cbi8qKlxuICogQXJiaXRlciBmb3IgZXZlcnkga2V5LCBsaXZpbmcgb24gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqIEhvbGRzIG5vIHRpbWVycyBhbmQgbm8gaGFuZGxlcyBvZiBpdHMgb3duOiBhIHBvcnQgaXMgdW5yZWYnZCBieSBpdHMgY2xpZW50XG4gKiB3aGlsZSBpZGxlIChzZWUge0BsaW5rIExvY2tDbGllbnR9KSwgc28gYW4gaWRsZSBjb29yZGluYXRvciBuZXZlciBrZWVwcyB0aGVcbiAqIHByb2Nlc3MgYWxpdmUuXG4gKi9cbmNsYXNzIExvY2tDb29yZGluYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIExvY2tTdGF0ZT4oKTtcblxuICAvKiogU2VydmUgb25lIGNsaWVudC4gQ2FsbGVkIG9uY2UgcGVyIHBhcnRpY2lwYXRpbmcgdGhyZWFkLiAqL1xuICBhZGRQb3J0KHBvcnQ6IE1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gICAgcG9ydC5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2U6IExvY2tNZXNzYWdlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICBjYXNlIFwiYWNxdWlyZVwiOlxuICAgICAgICAgIHRoaXMuYWNxdWlyZShtZXNzYWdlLmtleSwgbWVzc2FnZS5yZXF1ZXN0SWQsIHBvcnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVsZWFzZVwiOlxuICAgICAgICAgIHRoaXMucmVsZWFzZShtZXNzYWdlLmtleSwgbWVzc2FnZS5yZXF1ZXN0SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEEgY2xvc2VkIHBvcnQgbWVhbnMgaXRzIHRocmVhZCBleGl0ZWQgb3Igd2FzIHRlcm1pbmF0ZWQuIFJlbGVhc2luZyBoZXJlIGlzXG4gICAgLy8gd2hhdCBrZWVwcyBvbmUgY3Jhc2hlZCB3b3JrZXIgZnJvbSB3ZWRnaW5nIGEga2V5IGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS5cbiAgICBwb3J0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gdGhpcy5yZW1vdmVQb3J0KHBvcnQpKTtcbiAgICAvLyBUaGUgY29vcmRpbmF0b3Igc2lkZSBzdGF5cyB1bnJlZidkIGZvciBpdHMgd2hvbGUgbGlmZS4gSXQgaXMgYSBwdXJlXG4gICAgLy8gcmVzcG9uZGVyIC0gaXQgbmV2ZXIgaGFzIGJ1c2luZXNzIG9mIGl0cyBvd24gcGVuZGluZyAtIHNvIGtlZXBpbmcgdGhlXG4gICAgLy8gZXZlbnQgbG9vcCBhbGl2ZSBmb3IgaXQgd291bGQgbWVhbiBhIHByb2Nlc3MgdGhhdCB1c2VkIGEgbG9jayBvbmNlIGNvdWxkXG4gICAgLy8gbmV2ZXIgZXhpdC4gQSByZXF1ZXN0IGFsd2F5cyBhcnJpdmVzIGZyb20gYSBjbGllbnQgdGhhdCBoYXMgcmVmJ2QgSVRTXG4gICAgLy8gcG9ydCwgc28gdGhlIGxvb3AgaXMgYXdha2Ugd2hlbmV2ZXIgdGhlcmUgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRvIHNlcnZlLlxuICAgIHBvcnQudW5yZWYoKTtcbiAgICBwb3J0LnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFjcXVpcmUoa2V5OiBzdHJpbmcsIHJlcXVlc3RJZDogc3RyaW5nLCBwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIGNvbnN0IHdhaXRlcjogTG9ja1dhaXRlciA9IHsgcmVxdWVzdElkLCBwb3J0IH07XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlcy5nZXQoa2V5KTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlcy5zZXQoa2V5LCB7IG93bmVyOiB3YWl0ZXIsIHF1ZXVlOiBbXSB9KTtcbiAgICAgIGdyYW50KHdhaXRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnF1ZXVlLnB1c2god2FpdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kIHRoZSBrZXkgb24sIGlnbm9yaW5nIGEgcmVsZWFzZSBmcm9tIGFueW9uZSBidXQgdGhlIGN1cnJlbnQgb3duZXIuXG4gICAqXG4gICAqIEEgc3RhbGUgcmVsZWFzZSBpcyBleHBlY3RlZCwgbm90IGRlZmVuc2l2ZSBjb2Rpbmc6IGFuIGFib3J0ZWQgYWNxdWlzaXRpb25cbiAgICogc2VuZHMgb25lIGZvciBhIHJlcXVlc3QgdGhhdCBuZXZlciBvd25lZCB0aGUga2V5LCBhbmQgaG9ub3VyaW5nIGl0IHdvdWxkXG4gICAqIHJldm9rZSB0aGUgbG9jayBmcm9tIHdob2V2ZXIgaG9sZHMgaXQgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSByZWxlYXNlKGtleTogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKHN0YXRlPy5vd25lci5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCkgcmV0dXJuO1xuICAgIHRoaXMuZ3JhbnROZXh0KGtleSwgc3RhdGUpO1xuICB9XG5cbiAgLyoqIFByb21vdGUgdGhlIG5leHQgd2FpdGVyLCBvciBkcm9wIHRoZSBrZXkgd2hlbiBub2JvZHkgd2FudHMgaXQuICovXG4gIHByaXZhdGUgZ3JhbnROZXh0KGtleTogc3RyaW5nLCBzdGF0ZTogTG9ja1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHN0YXRlLnF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICB0aGlzLnN0YXRlcy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUub3duZXIgPSBuZXh0O1xuICAgIGdyYW50KG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYSBkZWFkIHRocmVhZCBmcm9tIGV2ZXJ5IGtleTogcmVsZWFzZSB0aGUgb25lcyBpdCBvd25lZCBhbmQgcmVtb3ZlIGl0XG4gICAqIGZyb20gdGhlIHF1ZXVlcyBpdCB3YXMgd2FpdGluZyBpbi5cbiAgICpcbiAgICogUXVldWUgcmVtb3ZhbCBtdXN0IGhhcHBlbiBGSVJTVC4gQSB0aHJlYWQgY2FuIGFwcGVhciBhcyBib3RoIHRoZSBvd25lciBvZlxuICAgKiBvbmUga2V5IGFuZCBhIHdhaXRlciBmb3IgYW5vdGhlciwgYW5kIHByb21vdGluZyBpdCBvdXQgb2YgYSBxdWV1ZSBpdCBjYW4gbm9cbiAgICogbG9uZ2VyIGFuc3dlciBmb3Igd291bGQgZ3JhbnQgYSBsb2NrIHRvIGEgY2xvc2VkIHBvcnQgLSBzdGFsbGluZyB0aGF0IGtleVxuICAgKiB1bnRpbCB0aGUgcHJvY2VzcyBlbmRzLlxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVQb3J0KHBvcnQ6IE1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0aGlzLnN0YXRlcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHN0YXRlLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhdGUucXVldWUgPSBzdGF0ZS5xdWV1ZS5maWx0ZXIoKHdhaXRlcikgPT4gd2FpdGVyLnBvcnQgIT09IHBvcnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHN0YXRlXSBvZiBbLi4udGhpcy5zdGF0ZXNdKSB7XG4gICAgICBpZiAoc3RhdGUub3duZXIucG9ydCA9PT0gcG9ydCkgdGhpcy5ncmFudE5leHQoa2V5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBOb3RpZnkgYSB3YWl0ZXIgdGhhdCBpdCBub3cgb3ducyBpdHMga2V5LiAqL1xuZnVuY3Rpb24gZ3JhbnQod2FpdGVyOiBMb2NrV2FpdGVyKTogdm9pZCB7XG4gIHdhaXRlci5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJncmFudGVkXCIsIHJlcXVlc3RJZDogd2FpdGVyLnJlcXVlc3RJZCB9IHNhdGlzZmllcyBMb2NrUmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIEEgdGhyZWFkJ3MgZW5kIG9mIHRoZSBjb252ZXJzYXRpb246IHNlbmRzIHJlcXVlc3RzLCBhd2FpdHMgZ3JhbnRzLCBhbmQgcnVuc1xuICogY2FsbGJhY2tzLlxuICpcbiAqIE93bnMgdGhlIGV2ZW50LWxvb3AgYm9va2tlZXBpbmcuIFRoZSBwb3J0IGlzIHVucmVmJ2Qgd2hpbGUgaWRsZSBzbyBob2xkaW5nIGFcbiAqIGxvY2sgbW9kdWxlIG5ldmVyIGJsb2NrcyBwcm9jZXNzIGV4aXQsIGFuZCByZWYnZCBleGFjdGx5IHdoaWxlIHRoaXMgdGhyZWFkIGhhc1xuICogYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCBvciBhbiB1bnJlbGVhc2VkIGxvY2sgLSBvdGhlcndpc2UgTm9kZSB3b3VsZCBjb25zaWRlclxuICogaXRzZWxmIG91dCBvZiB3b3JrIGFuZCBleGl0IG1pZC1jcml0aWNhbC1zZWN0aW9uLCBkcm9wcGluZyB0aGUgZ3JhbnQgdGhhdCB3YXNcbiAqIGFscmVhZHkgb24gaXRzIHdheS5cbiAqL1xuY2xhc3MgTG9ja0NsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZyA9IG5ldyBNYXA8c3RyaW5nLCAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZD4oKTtcbiAgLyoqIFJlcXVlc3RzICsgaGVsZCBsb2Nrcy4gVGhlIHBvcnQgaXMgcmVmJ2Qgd2hpbGUgdGhpcyBpcyBhYm92ZSB6ZXJvLiAqL1xuICBwcml2YXRlIGFjdGl2ZSA9IDA7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb3J0OiBNZXNzYWdlUG9ydCkge1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlOiBMb2NrTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gXCJncmFudGVkXCIpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0dGxlKG1lc3NhZ2UucmVxdWVzdElkKTtcbiAgICB9KTtcbiAgICBwb3J0Lm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgLy8gVGhlIGNvb3JkaW5hdG9yIGlzIGdvbmUgKG1haW4gdGhyZWFkIGV4aXRpbmcsIG9yIHRoaXMgd29ya2VyIGJlaW5nIHRvcm5cbiAgICAgIC8vIGRvd24pLiBGYWlsIHRoZSB3YWl0ZXJzIHJhdGhlciB0aGFuIGhhbmcgdGhlbTogYSBjYWxsZXIgYmxvY2tlZCBvbiBhXG4gICAgICAvLyBsb2NrIHRoYXQgY2FuIG5ldmVyIGJlIGdyYW50ZWQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIGRlYWRsb2NrLlxuICAgICAgY29uc3QgY2xvc2VFcnJvciA9IG5ldyBFcnJvcihcIlByb2Nlc3MgbG9jayBwb3J0IGNsb3NlZCBiZWZvcmUgdGhlIGxvY2sgd2FzIGdyYW50ZWRcIik7XG4gICAgICBmb3IgKGNvbnN0IHNldHRsZSBvZiBbLi4udGhpcy5wZW5kaW5nLnZhbHVlcygpXSkgc2V0dGxlKGNsb3NlRXJyb3IpO1xuICAgIH0pO1xuICAgIHBvcnQudW5yZWYoKTtcbiAgICBwb3J0LnN0YXJ0KCk7XG4gIH1cblxuICAvKiogUmVzb2x2ZSBvciByZWplY3Qgb25lIHBlbmRpbmcgcmVxdWVzdCBhbmQgZHJvcCBpdHMgcmVmLiAqL1xuICBwcml2YXRlIHNldHRsZShyZXF1ZXN0SWQ6IHN0cmluZywgZmFpbHVyZT86IEVycm9yKTogdm9pZCB7XG4gICAgY29uc3Qgc2V0dGxlID0gdGhpcy5wZW5kaW5nLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICghc2V0dGxlKSByZXR1cm47XG4gICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgIHNldHRsZShmYWlsdXJlKTtcbiAgfVxuXG4gIC8qKiBSZWYgdGhlIHBvcnQgZm9yIHRoZSBmaXJzdCB1bml0IG9mIG91dHN0YW5kaW5nIHdvcmsuICovXG4gIHByaXZhdGUgcmV0YWluKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZSsrID09PSAwKSB0aGlzLnBvcnQucmVmKCk7XG4gIH1cblxuICAvKiogVW5yZWYgb25jZSBub3RoaW5nIGlzIG91dHN0YW5kaW5nLCBzbyB0aGUgdGhyZWFkIGNhbiBleGl0LiAqL1xuICBwcml2YXRlIHJlbGVhc2UoKTogdm9pZCB7XG4gICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIHRoaXMucG9ydC51bnJlZigpO1xuICB9XG5cbiAgYXN5bmMgcnVuPFQ+KGtleTogc3RyaW5nLCBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2Nlc3MgbG9jayBwb3J0IGlzIGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gaGFzaC5pZCgpO1xuICAgIHRoaXMucmV0YWluKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChyZXF1ZXN0SWQsIChmYWlsdXJlKSA9PiAoZmFpbHVyZSA/IHJlamVjdChmYWlsdXJlKSA6IHJlc29sdmUoKSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7IHR5cGU6IFwiYWNxdWlyZVwiLCByZXF1ZXN0SWQsIGtleSB9IHNhdGlzZmllcyBMb2NrUmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgICAgICAgIHJlamVjdChlcnJvclV0aWxzLnRvRXJyb3IoY2F1c2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIC8vIE5ldmVyIGdyYW50ZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVsZWFzZSAtIGp1c3QgZHJvcCB0aGUgcmVmLlxuICAgICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgICB0aHJvdyBjYXVzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBQb3N0IGJlZm9yZSB1bnJlZidpbmc6IHRoZSByZWxlYXNlIG11c3QgYmUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBwb3J0IGlzXG4gICAgICAvLyBzdGlsbCBob2xkaW5nIHRoZSBsb29wIG9wZW4sIG9yIHRoZSBuZXh0IHdhaXRlciBpcyBzdHJhbmRlZC5cbiAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJyZWxlYXNlXCIsIHJlcXVlc3RJZCwga2V5IH0gc2F0aXNmaWVzIExvY2tSZXF1ZXN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogVGhlIGNvb3JkaW5hdG9yLCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seS4gKi9cbmNvbnN0IGNvb3JkaW5hdG9yID0gaXNNYWluVGhyZWFkID8gbmV3IExvY2tDb29yZGluYXRvcigpIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoaXMgdGhyZWFkJ3MgY2xpZW50LCBjcmVhdGVkIG9uIGZpcnN0IHVzZS5cbiAqXG4gKiBMYXp5IHNvIGltcG9ydGluZyB0aGlzIG1vZHVsZSBjb3N0cyBub3RoaW5nIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgc28gYSB3b3JrZXJcbiAqIHRoYXQgbmV2ZXIgbG9ja3MgYW55dGhpbmcgaXMgbmV2ZXIgZm9yY2VkIHRvIGhhdmUgYmVlbiBzdGFydGVkIHRocm91Z2hcbiAqIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9LiBUaGUgbWFpbiB0aHJlYWQgd2lyZXMgYSBjaGFubmVsIHRvIGl0cyBvd25cbiAqIGNvb3JkaW5hdG9yOyBhIHdvcmtlciBhZG9wdHMgdGhlIHBvcnQgaXQgd2FzIGhhbmRlZC5cbiAqL1xubGV0IGNsaWVudDogTG9ja0NsaWVudCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbG9ja0NsaWVudCgpOiBMb2NrQ2xpZW50IHtcbiAgaWYgKGNsaWVudCkgcmV0dXJuIGNsaWVudDtcbiAgaWYgKGNvb3JkaW5hdG9yKSB7XG4gICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNvb3JkaW5hdG9yLmFkZFBvcnQocG9ydDEpO1xuICAgIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KHBvcnQyKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG4gIGNvbnN0IHBvcnQgPSAod29ya2VyRGF0YSBhcyBMb2NrV29ya2VyRGF0YSB8IHVuZGVmaW5lZCk/LltMT0NLX1BPUlRfS0VZXTtcbiAgaWYgKCFwb3J0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIHdvcmtlciBoYXMgbm8gcHJvY2Vzcy1sb2NrIHBvcnQuIFN0YXJ0IGl0IHdpdGggcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKCkgXCIgK1xuICAgICAgICBcIihvciBjYWxsIGF0dGFjaFByb2Nlc3NMb2NrKHdvcmtlcikgYW5kIGF3YWl0IHByb2Nlc3NMb2NrQXR0YWNoZWQoKSkuXCIsXG4gICAgKTtcbiAgfVxuICBjbGllbnQgPSBuZXcgTG9ja0NsaWVudChwb3J0KTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIG5hbWVkIGJ5IGBrZXlgLCByZWxlYXNpbmcgaXQgd2hlbiBgZm5gXG4gKiBzZXR0bGVzLlxuICpcbiAqIENhbGxlcnMgc2hhcmluZyBhIGtleSBhcmUgc2VyaWFsaXplZCBhY3Jvc3MgdGhlIG1haW4gdGhyZWFkIGFuZCBldmVyeSB3b3JrZXJcbiAqIHN0YXJ0ZWQgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTsgZGlzdGluY3Qga2V5cyBuZXZlciBibG9ja1xuICogZWFjaCBvdGhlci4gUmV0dXJucyB3aGF0ZXZlciBgZm5gIHJldHVybnMgYW5kIHByb3BhZ2F0ZXMgd2hhdCBpdCB0aHJvd3MsIHNvIGl0XG4gKiBkcm9wcyBpbnRvIGFuIGV4aXN0aW5nIGV4cHJlc3Npb24gd2l0aG91dCByZXN0cnVjdHVyaW5nLlxuICpcbiAqIGBrZXlgIGlzIGFueSB2YWx1ZSB3aXRoIGEgc3RhYmxlIGlkZW50aXR5IC0gYSBzdHJpbmcsIGEgYFtcImludm9pY2VcIiwgaWRdYFxuICogdHVwbGUsIGEgY29uZmlnIG9iamVjdCAtIGNhbm9uaWNhbGl6ZWQgYnkgYG9iamVjdC50b1N0YWJsZUtleWAsIHRoZSBzYW1lIHJ1bGVcbiAqIGBAZGJ4LXRvb2xzL3Bvc3RncmVzYCB1c2VzIGZvciBhZHZpc29yeS1sb2NrIGlkcyBhbmQgY2hhbm5lbCBuYW1lcy4gU3RydWN0dXJlXG4gKiBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYFtcImludm9pY2VcIiwgN11gIGFuZCBgXCJpbnZvaWNlXzdcImAgYXJlIGRpZmZlcmVudFxuICogbG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHdpdGhQcm9jZXNzTG9jayhbXCJjYWNoZVwiLCBuYW1lXSwgYXN5bmMgKCkgPT4ge1xuICogICBpZiAoIShhd2FpdCBleGlzdHMobmFtZSkpKSBhd2FpdCBidWlsZChuYW1lKTtcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb2Nlc3NMb2NrPFQ+KGtleTogdW5rbm93biwgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBsb2NrQ2xpZW50KCkucnVuKGxvY2tLZXkoa2V5KSwgZm4pO1xufVxuXG4vKiogQ2Fub25pY2FsIHN0cmluZyBpZGVudGl0eSBmb3IgYSBsb2NrIGtleSAoc2VlIGBvYmplY3QudG9TdGFibGVLZXlgKS4gKi9cbmZ1bmN0aW9uIGxvY2tLZXkoa2V5OiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIG9iamVjdFxuICAgIC50b09uZU9yTWFueShrZXkpXG4gICAgLm1hcCgocGFydCkgPT4gb2JqZWN0LnRvU3RhYmxlS2V5KHBhcnQpKVxuICAgIC5qb2luKFwiXFx1MDAwMFwiKTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvb3JkaW5hdG9yIHBvcnQgdG8gYSBgV29ya2VyYCdzIG9wdGlvbnMgc28gdGhlIHdvcmtlciBjYW4gbG9ja1xuICogaW1tZWRpYXRlbHkgLSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgYW55IG1lc3NhZ2UgaXMgaGFuZGxlZC5cbiAqXG4gKiBQcmVzZXJ2ZXMgdGhlIGNhbGxlcidzIGB3b3JrZXJEYXRhYCBhbmQgYHRyYW5zZmVyTGlzdGA7IHRoZSBwb3J0IGlzXG4gKiB0cmFuc2ZlcnJlZCwgYXMgYE1lc3NhZ2VQb3J0YCBjYW5ub3QgYmUgY2xvbmVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgV29ya2VyKHVybCwgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKHsgd29ya2VyRGF0YTogeyB0ZW5hbnQgfSB9KSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnMob3B0aW9uczogV29ya2VyT3B0aW9ucyA9IHt9KTogV29ya2VyT3B0aW9ucyB7XG4gIGNvbnN0IHBvcnQgPSBjcmVhdGVDb29yZGluYXRvclBvcnQoXCJwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnNcIik7XG4gIGNvbnN0IGV4aXN0aW5nID0gb2JqZWN0LmlzUmVjb3JkKG9wdGlvbnMud29ya2VyRGF0YSkgPyBvcHRpb25zLndvcmtlckRhdGEgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHdvcmtlckRhdGE6IHsgLi4uZXhpc3RpbmcsIFtMT0NLX1BPUlRfS0VZXTogcG9ydCB9LFxuICAgIHRyYW5zZmVyTGlzdDogWy4uLihvcHRpb25zLnRyYW5zZmVyTGlzdCA/PyBbXSksIHBvcnRdLFxuICB9O1xufVxuXG4vKipcbiAqIFdpcmUgYW4gQUxSRUFEWS1SVU5OSU5HIHdvcmtlciBpbnRvIHRoZSBsb2NrLCBmb3IgYSB3b3JrZXIgdGhpcyBjb2RlIGRpZCBub3RcbiAqIGNvbnN0cnVjdCAoYSBwb29sIGZyb20gYSBsaWJyYXJ5LCBzYXkpLlxuICpcbiAqIFByZWZlciB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTogdGhlIHBvcnQgYXJyaXZlcyB3aXRoIGEgbWVzc2FnZSwgc29cbiAqIHRoZSB3b3JrZXIgY2Fubm90IGxvY2sgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbXVzdCBhd2FpdFxuICoge0BsaW5rIHByb2Nlc3NMb2NrQXR0YWNoZWR9IGZpcnN0LiBUaGUgd29ya2VyIHNpZGUgbmVlZHMgbm8gb3RoZXIgY2hhbmdlIC1cbiAqIGB3aXRoUHJvY2Vzc0xvY2tgIHdvcmtzIG5vcm1hbGx5IG9uY2UgdGhlIHBvcnQgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hQcm9jZXNzTG9jayh3b3JrZXI6IFdvcmtlcik6IHZvaWQge1xuICBjb25zdCBwb3J0ID0gY3JlYXRlQ29vcmRpbmF0b3JQb3J0KFwiYXR0YWNoUHJvY2Vzc0xvY2tcIik7XG4gIHdvcmtlci5wb3N0TWVzc2FnZSh7IHR5cGU6IEFUVEFDSF9NRVNTQUdFX1RZUEUsIHBvcnQgfSBzYXRpc2ZpZXMgQXR0YWNoTWVzc2FnZSwgW3BvcnRdKTtcbn1cblxuLyoqIEEgZnJlc2ggY29vcmRpbmF0b3Itc2lkZSBjaGFubmVsLCBvciBhIGNsZWFyIGVycm9yIG9mZiB0aGUgbWFpbiB0aHJlYWQuICovXG5mdW5jdGlvbiBjcmVhdGVDb29yZGluYXRvclBvcnQoY2FsbGVyOiBzdHJpbmcpOiBNZXNzYWdlUG9ydCB7XG4gIGlmICghY29vcmRpbmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y2FsbGVyfSgpIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkYCk7XG4gIH1cbiAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjb29yZGluYXRvci5hZGRQb3J0KHBvcnQxKTtcbiAgcmV0dXJuIHBvcnQyO1xufVxuXG4vKipcbiAqIEluIGEgd29ya2VyLCByZXNvbHZlIG9uY2UgdGhlIHtAbGluayBhdHRhY2hQcm9jZXNzTG9ja30gcG9ydCBoYXMgYXJyaXZlZC5cbiAqXG4gKiBPbmx5IG5lZWRlZCBvbiB0aGUgYXR0YWNoIHBhdGgsIGFuZCBzYWZlIHRvIGF3YWl0IHJlZ2FyZGxlc3M6IGl0IHJldHVybnNcbiAqIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHdvcmtlciBhbHJlYWR5IGhhcyBhIHBvcnQgKHRoZVxuICoge0BsaW5rIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9uc30gY2FzZSkgb3Igd2hlbiBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCBzb1xuICogc2hhcmVkIHdvcmtlciBjb2RlIGRvZXMgbm90IGJyYW5jaCBvbiBob3cgaXQgd2FzIHN0YXJ0ZWQuXG4gKlxuICogQSBgcGFyZW50UG9ydGAgbGlzdGVuZXIga2VlcHMgdGhlIHdvcmtlciBhbGl2ZSwgd2hpY2ggaXMgQ09SUkVDVCBoZXJlIGFuZFxuICogZGVsaWJlcmF0ZWx5IG5vdCB1bnJlZidkOiB0aGlzIHByb21pc2UgaXMgcGVuZGluZyB3b3JrLCBhbmQgYSB3b3JrZXIgYWxsb3dlZCB0b1xuICogZXhpdCB3aGlsZSBhd2FpdGluZyBpdHMgcG9ydCB3b3VsZCBkaWUgc2lsZW50bHkgaW5zdGVhZCBvZiBsb2NraW5nLiBUaGVcbiAqIGxpc3RlbmVyIGlzIHJlbW92ZWQgYXMgc29vbiBhcyB0aGUgcG9ydCBsYW5kcywgc28gdGhlIHdvcmtlciBpcyBmcmVlIHRvIGV4aXRcbiAqIGFnYWluIHRoZSBtb21lbnQgdGhlIHdhaXQgaXMgb3Zlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NMb2NrQXR0YWNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc01haW5UaHJlYWQgfHwgY2xpZW50IHx8ICh3b3JrZXJEYXRhIGFzIExvY2tXb3JrZXJEYXRhIHwgdW5kZWZpbmVkKT8uW0xPQ0tfUE9SVF9LRVldKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGNvbnN0IHBvcnQgPSBwYXJlbnRQb3J0O1xuICBpZiAoIXBvcnQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwicHJvY2Vzc0xvY2tBdHRhY2hlZCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYSB3b3JrZXIgdGhyZWFkXCIpKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvbk1lc3NhZ2UgPSAobWVzc2FnZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFvYmplY3QuaXNSZWNvcmQobWVzc2FnZSkgfHwgbWVzc2FnZS50eXBlICE9PSBBVFRBQ0hfTUVTU0FHRV9UWVBFKSByZXR1cm47XG4gICAgICBwb3J0Lm9mZihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICAgIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KChtZXNzYWdlIGFzIHVua25vd24gYXMgQXR0YWNoTWVzc2FnZSkucG9ydCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBwb3J0Lm9uKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuICB9KTtcbn1cbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3MtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxHQUlYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6Rjs7Ozs7O0dBTUc7QUFDSCxNQUFNLGFBQWEsR0FBRywyQkFBMkIsQ0FBQztBQUNsRCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDO0FBMEMxRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLGVBQWU7SUFDRixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7SUFFdkQsOERBQThEO0lBQzlELE9BQU8sQ0FBQyxJQUFpQjtRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQW9CLEVBQUUsRUFBRTtZQUMxQyxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxTQUFTO29CQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM3QyxNQUFNO2dCQUNSO29CQUNFLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxzRUFBc0U7UUFDdEUsd0VBQXdFO1FBQ3hFLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyxPQUFPLENBQUMsR0FBVyxFQUFFLFNBQWlCLEVBQUUsSUFBaUI7UUFDL0QsTUFBTSxNQUFNLEdBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxPQUFPLENBQUMsR0FBVyxFQUFFLFNBQWlCO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUztZQUFFLE9BQU87UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELHFFQUFxRTtJQUM3RCxTQUFTLENBQUMsR0FBVyxFQUFFLEtBQWdCO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxVQUFVLENBQUMsSUFBaUI7UUFDbEMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJO2dCQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxnREFBZ0Q7QUFDaEQsU0FBUyxLQUFLLENBQUMsTUFBa0I7SUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUF5QixDQUFDLENBQUM7QUFDbkcsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVTtJQU1lO0lBTFosT0FBTyxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQ3RFLHlFQUF5RTtJQUNqRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUV2QixZQUE2QixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBb0IsRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTO2dCQUFFLE9BQU87WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsMEVBQTBFO1lBQzFFLHVFQUF1RTtZQUN2RSx1RUFBdUU7WUFDdkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUNyRixLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCw4REFBOEQ7SUFDdEQsTUFBTSxDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCwyREFBMkQ7SUFDbkQsTUFBTTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxpRUFBaUU7SUFDekQsT0FBTztRQUNiLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFJLEdBQVcsRUFBRSxFQUF3QjtRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUM7b0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQXdCLENBQUMsQ0FBQztnQkFDbkYsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO2dCQUFTLENBQUM7WUFDVCx5RUFBeUU7WUFDekUsK0RBQStEO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUF3QixDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRXJFOzs7Ozs7O0dBT0c7QUFDSCxJQUFJLE1BQThCLENBQUM7QUFFbkMsU0FBUyxVQUFVO0lBQ2pCLElBQUksTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxNQUFNLElBQUksR0FBSSxVQUF5QyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FDYixpRkFBaUY7WUFDL0Usc0VBQXNFLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUksR0FBWSxFQUFFLEVBQXdCO0lBQ3ZFLE9BQU8sVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLFNBQVMsT0FBTyxDQUFDLEdBQVk7SUFDM0IsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFVBQXlCLEVBQUU7SUFDbEUsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMvRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEUsT0FBTztRQUNMLEdBQUcsT0FBTztRQUNWLFVBQVUsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFO1FBQ2xELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztLQUN0RCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWM7SUFDOUMsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBMEIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxTQUFTLHFCQUFxQixDQUFDLE1BQWM7SUFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLHdDQUF3QyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUM5QyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLElBQUksWUFBWSxJQUFJLE1BQU0sSUFBSyxVQUF5QyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUMxRixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNELE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWdCLEVBQVEsRUFBRTtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssbUJBQW1CO2dCQUFFLE9BQU87WUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0IsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFFLE9BQW9DLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEtleWVkIG11dHVhbCBleGNsdXNpb24gYWNyb3NzIHRoZSBtYWluIHRocmVhZCBhbmQgaXRzIHdvcmtlciB0aHJlYWRzLlxuICpcbiAqIHtAbGluayB3aXRoUHJvY2Vzc0xvY2t9IHNlcmlhbGl6ZXMgY2FsbGJhY2tzIHRoYXQgc2hhcmUgYSBrZXk6IG9uZSBydW5zIGF0IGFcbiAqIHRpbWUsIHRoZSByZXN0IHF1ZXVlIGluIGFycml2YWwgb3JkZXIsIGFuZCBkaWZmZXJlbnQga2V5cyBwcm9jZWVkXG4gKiBjb25jdXJyZW50bHkuIFVubGlrZSBhIHBsYWluIGluLW1vZHVsZSBgUHJvbWlzZWAgY2hhaW4sIHRoZSBxdWV1ZSBpcyBzaGFyZWQgYnlcbiAqIGV2ZXJ5IHRocmVhZCB3aXJlZCB1cCB0aHJvdWdoIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9LCBzbyBhIHdvcmtlclxuICogcG9vbCBjYW5ub3QgcnVuIHR3byBjYWxsYmFja3MgZm9yIHRoZSBzYW1lIGtleSBhdCBvbmNlLlxuICpcbiAqIFRoZSBuYW1lIHNheXMgYHByb2Nlc3NgOiB0aGlzIGNvb3JkaW5hdGVzIHRoZSBUSFJFQURTIG9mIG9uZSBOb2RlIHByb2Nlc3MuIEl0XG4gKiBpcyBub3QgY3Jvc3MtcHJvY2VzcyBhbmQgbm90IGNyb3NzLWhvc3QgLSBhIHNlY29uZCBgbm9kZWAgaW52b2NhdGlvbiwgb3IgYVxuICogc2Vjb25kIGFwcCByZXBsaWNhLCBoYXMgaXRzIG93biBjb29yZGluYXRvciBhbmQgc2hhcmVzIG5vdGhpbmcuIFdoZW4gdGhlIHNjb3BlXG4gKiBpcyBhIGRlcGxveW1lbnQgcmF0aGVyIHRoYW4gYSBwcm9jZXNzLCB1c2VcbiAqIGBAZGJ4LXRvb2xzL3Bvc3RncmVzYCdzIGB3aXRoQWR2aXNvcnlMb2NrYCwgd2hpY2ggcHV0cyB0aGUgYXJiaXRlciBpblxuICogUG9zdGdyZVNRTCB3aGVyZSBldmVyeSByZXBsaWNhIGNhbiBzZWUgaXQuXG4gKlxuICogVGhlIG1haW4gdGhyZWFkIG93bnMgdGhlIG9ubHkgY29vcmRpbmF0b3IuIEVhY2ggcGFydGljaXBhdGluZyB0aHJlYWQgZ2V0cyBvbmVcbiAqIGBNZXNzYWdlUG9ydGAgdG8gaXQsIGFuZCBhIGxvY2sgaXMgZ3JhbnRlZCBieSBhIG1lc3NhZ2UgYmFjayBvdmVyIHRoYXQgcG9ydC5cbiAqIENvbnNlcXVlbnRseTpcbiAqXG4gKiAgIC0gdGhlIGxvY2sgaXMgQURWSVNPUlksIGxpa2UgUG9zdGdyZXMgYWR2aXNvcnkgbG9ja3MgLSBpdCBwcm90ZWN0cyBhXG4gKiAgICAgY3JpdGljYWwgc2VjdGlvbiBvbmx5IGluc29mYXIgYXMgZXZlcnkgd3JpdGVyIHRha2VzIHRoZSBzYW1lIGtleTtcbiAqICAgLSBmYWlybmVzcyBpcyBGSUZPIHBlciBrZXksIHNpbmNlIHRoZSBjb29yZGluYXRvciBxdWV1ZXMgd2FpdGVycyBpbiB0aGVcbiAqICAgICBvcmRlciB0aGVpciByZXF1ZXN0cyBhcnJpdmU7XG4gKiAgIC0gYSB0aHJlYWQgdGhhdCBkaWVzIHdoaWxlIGhvbGRpbmcgYSBsb2NrIHJlbGVhc2VzIGl0LCBiZWNhdXNlIGl0cyBwb3J0XG4gKiAgICAgY2xvc2luZyBpcyB3aGF0IGhhbmRzIHRoZSBrZXkgdG8gdGhlIG5leHQgd2FpdGVyIChzZWVcbiAqICAgICB7QGxpbmsgTG9ja0Nvb3JkaW5hdG9yLnJlbW92ZVBvcnR9KS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgaXNNYWluVGhyZWFkLFxuICBNZXNzYWdlQ2hhbm5lbCxcbiAgcGFyZW50UG9ydCxcbiAgd29ya2VyRGF0YSxcbiAgdHlwZSBNZXNzYWdlUG9ydCxcbiAgdHlwZSBXb3JrZXIsXG4gIHR5cGUgV29ya2VyT3B0aW9ucyxcbn0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB7IHRvRXJyb3IsIGlkLCB0b09uZU9yTWFueSwgdG9TdGFibGVLZXksIGlzUmVjb3JkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqXG4gKiBgd29ya2VyRGF0YWAgc2xvdCBjYXJyeWluZyB0aGUgY29vcmRpbmF0b3IgcG9ydCBpbnRvIGEgd29ya2VyLCBhbmQgdGhlXG4gKiBgcGFyZW50UG9ydGAgbWVzc2FnZSBgdHlwZWAgZm9yIHRoZSBsYXRlIHtAbGluayBhdHRhY2hQcm9jZXNzTG9ja30gaGFuZHNoYWtlLlxuICogTmFtZXNwYWNlZCBiZWNhdXNlIGJvdGggdHJhdmVsIHRocm91Z2ggY2hhbm5lbHMgYW4gYXBwbGljYXRpb24gYWxzbyB1c2VzOlxuICogYHdvcmtlckRhdGFgIGlzIHRoZSBjYWxsZXIncyBvd24gb2JqZWN0LCBhbmQgYHBhcmVudFBvcnRgIGNhcnJpZXMgdGhlIGNhbGxlcidzXG4gKiBvd24gbWVzc2FnZXMuXG4gKi9cbmNvbnN0IExPQ0tfUE9SVF9LRVkgPSBcIl9fZGJ4VG9vbHNQcm9jZXNzTG9ja1BvcnRcIjtcbmNvbnN0IEFUVEFDSF9NRVNTQUdFX1RZUEUgPSBcIl9fZGJ4VG9vbHNQcm9jZXNzTG9ja0F0dGFjaFwiO1xuXG4vKiogU2VudCBieSBhIGNsaWVudCB0byB0aGUgY29vcmRpbmF0b3IuICovXG50eXBlIExvY2tSZXF1ZXN0ID1cbiAgfCB7IHR5cGU6IFwiYWNxdWlyZVwiOyByZXF1ZXN0SWQ6IHN0cmluZzsga2V5OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJyZWxlYXNlXCI7IHJlcXVlc3RJZDogc3RyaW5nOyBrZXk6IHN0cmluZyB9O1xuXG4vKiogU2VudCBieSB0aGUgY29vcmRpbmF0b3IgdG8gdGhlIGNsaWVudCB0aGF0IG5vdyBvd25zIHRoZSBrZXkuICovXG50eXBlIExvY2tSZXNwb25zZSA9IHsgdHlwZTogXCJncmFudGVkXCI7IHJlcXVlc3RJZDogc3RyaW5nIH07XG5cbnR5cGUgTG9ja01lc3NhZ2UgPSBMb2NrUmVxdWVzdCB8IExvY2tSZXNwb25zZTtcblxuLyoqIFRoZSBgcGFyZW50UG9ydGAgZW52ZWxvcGUgdGhhdCBoYW5kcyBhIGxhdGUtYXR0YWNoZWQgd29ya2VyIGl0cyBwb3J0LiAqL1xuaW50ZXJmYWNlIEF0dGFjaE1lc3NhZ2Uge1xuICB0eXBlOiB0eXBlb2YgQVRUQUNIX01FU1NBR0VfVFlQRTtcbiAgcG9ydDogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKiBPbmUgb3V0c3RhbmRpbmcgb3IgZ3JhbnRlZCBhY3F1aXNpdGlvbi4gKi9cbmludGVyZmFjZSBMb2NrV2FpdGVyIHtcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHBvcnQ6IE1lc3NhZ2VQb3J0O1xufVxuXG4vKiogU2hhcGUgb2YgdGhlIGB3b3JrZXJEYXRhYCBzbGljZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBMb2NrV29ya2VyRGF0YSB7XG4gIFtMT0NLX1BPUlRfS0VZXT86IE1lc3NhZ2VQb3J0O1xufVxuXG4vKipcbiAqIEEga2V5J3Mgb3duZXIgcGx1cyBpdHMgRklGTyBxdWV1ZSBvZiB3YWl0ZXJzLlxuICpcbiAqIE93bmVyIGFuZCBxdWV1ZSBsaXZlIGluIE9ORSBtYXAgZW50cnkgcmF0aGVyIHRoYW4gdHdvIHBhcmFsbGVsIG1hcHMgc28gYSBrZXlcbiAqIGNhbm5vdCBlbmQgdXAgaGFsZi1wcmVzZW50IC0gYSBxdWV1ZSB3aG9zZSBvd25lciBtYXAgZW50cnkgd2FzIGFscmVhZHkgZGVsZXRlZFxuICogd291bGQgc3RyYW5kIGl0cyB3YWl0ZXJzIGZvcmV2ZXIsIGFuZCB0aGUgZW50cnkgaXMgZHJvcHBlZCBvbmx5IHdoZW4gdGhlIGtleVxuICogaXMgYm90aCB1bm93bmVkIGFuZCB1bndhbnRlZC5cbiAqL1xuaW50ZXJmYWNlIExvY2tTdGF0ZSB7XG4gIG93bmVyOiBMb2NrV2FpdGVyO1xuICBxdWV1ZTogTG9ja1dhaXRlcltdO1xufVxuXG4vKipcbiAqIEFyYml0ZXIgZm9yIGV2ZXJ5IGtleSwgbGl2aW5nIG9uIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiBIb2xkcyBubyB0aW1lcnMgYW5kIG5vIGhhbmRsZXMgb2YgaXRzIG93bjogYSBwb3J0IGlzIHVucmVmJ2QgYnkgaXRzIGNsaWVudFxuICogd2hpbGUgaWRsZSAoc2VlIHtAbGluayBMb2NrQ2xpZW50fSksIHNvIGFuIGlkbGUgY29vcmRpbmF0b3IgbmV2ZXIga2VlcHMgdGhlXG4gKiBwcm9jZXNzIGFsaXZlLlxuICovXG5jbGFzcyBMb2NrQ29vcmRpbmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2NrU3RhdGU+KCk7XG5cbiAgLyoqIFNlcnZlIG9uZSBjbGllbnQuIENhbGxlZCBvbmNlIHBlciBwYXJ0aWNpcGF0aW5nIHRocmVhZC4gKi9cbiAgYWRkUG9ydChwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlOiBMb2NrTWVzc2FnZSkgPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFjcXVpcmVcIjpcbiAgICAgICAgICB0aGlzLmFjcXVpcmUobWVzc2FnZS5rZXksIG1lc3NhZ2UucmVxdWVzdElkLCBwb3J0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlbGVhc2VcIjpcbiAgICAgICAgICB0aGlzLnJlbGVhc2UobWVzc2FnZS5rZXksIG1lc3NhZ2UucmVxdWVzdElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBIGNsb3NlZCBwb3J0IG1lYW5zIGl0cyB0aHJlYWQgZXhpdGVkIG9yIHdhcyB0ZXJtaW5hdGVkLiBSZWxlYXNpbmcgaGVyZSBpc1xuICAgIC8vIHdoYXQga2VlcHMgb25lIGNyYXNoZWQgd29ya2VyIGZyb20gd2VkZ2luZyBhIGtleSBmb3IgdGhlIHByb2Nlc3MgbGlmZXRpbWUuXG4gICAgcG9ydC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMucmVtb3ZlUG9ydChwb3J0KSk7XG4gICAgLy8gVGhlIGNvb3JkaW5hdG9yIHNpZGUgc3RheXMgdW5yZWYnZCBmb3IgaXRzIHdob2xlIGxpZmUuIEl0IGlzIGEgcHVyZVxuICAgIC8vIHJlc3BvbmRlciAtIGl0IG5ldmVyIGhhcyBidXNpbmVzcyBvZiBpdHMgb3duIHBlbmRpbmcgLSBzbyBrZWVwaW5nIHRoZVxuICAgIC8vIGV2ZW50IGxvb3AgYWxpdmUgZm9yIGl0IHdvdWxkIG1lYW4gYSBwcm9jZXNzIHRoYXQgdXNlZCBhIGxvY2sgb25jZSBjb3VsZFxuICAgIC8vIG5ldmVyIGV4aXQuIEEgcmVxdWVzdCBhbHdheXMgYXJyaXZlcyBmcm9tIGEgY2xpZW50IHRoYXQgaGFzIHJlZidkIElUU1xuICAgIC8vIHBvcnQsIHNvIHRoZSBsb29wIGlzIGF3YWtlIHdoZW5ldmVyIHRoZXJlIGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0byBzZXJ2ZS5cbiAgICBwb3J0LnVucmVmKCk7XG4gICAgcG9ydC5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3F1aXJlKGtleTogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZywgcG9ydDogTWVzc2FnZVBvcnQpOiB2b2lkIHtcbiAgICBjb25zdCB3YWl0ZXI6IExvY2tXYWl0ZXIgPSB7IHJlcXVlc3RJZCwgcG9ydCB9O1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgdGhpcy5zdGF0ZXMuc2V0KGtleSwgeyBvd25lcjogd2FpdGVyLCBxdWV1ZTogW10gfSk7XG4gICAgICBncmFudCh3YWl0ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5xdWV1ZS5wdXNoKHdhaXRlcik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZCB0aGUga2V5IG9uLCBpZ25vcmluZyBhIHJlbGVhc2UgZnJvbSBhbnlvbmUgYnV0IHRoZSBjdXJyZW50IG93bmVyLlxuICAgKlxuICAgKiBBIHN0YWxlIHJlbGVhc2UgaXMgZXhwZWN0ZWQsIG5vdCBkZWZlbnNpdmUgY29kaW5nOiBhbiBhYm9ydGVkIGFjcXVpc2l0aW9uXG4gICAqIHNlbmRzIG9uZSBmb3IgYSByZXF1ZXN0IHRoYXQgbmV2ZXIgb3duZWQgdGhlIGtleSwgYW5kIGhvbm91cmluZyBpdCB3b3VsZFxuICAgKiByZXZva2UgdGhlIGxvY2sgZnJvbSB3aG9ldmVyIGhvbGRzIGl0IG5vdy5cbiAgICovXG4gIHByaXZhdGUgcmVsZWFzZShrZXk6IHN0cmluZywgcmVxdWVzdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVzLmdldChrZXkpO1xuICAgIGlmIChzdGF0ZT8ub3duZXIucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIHJldHVybjtcbiAgICB0aGlzLmdyYW50TmV4dChrZXksIHN0YXRlKTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBuZXh0IHdhaXRlciwgb3IgZHJvcCB0aGUga2V5IHdoZW4gbm9ib2R5IHdhbnRzIGl0LiAqL1xuICBwcml2YXRlIGdyYW50TmV4dChrZXk6IHN0cmluZywgc3RhdGU6IExvY2tTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmICghbmV4dCkge1xuICAgICAgdGhpcy5zdGF0ZXMuZGVsZXRlKGtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLm93bmVyID0gbmV4dDtcbiAgICBncmFudChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGEgZGVhZCB0aHJlYWQgZnJvbSBldmVyeSBrZXk6IHJlbGVhc2UgdGhlIG9uZXMgaXQgb3duZWQgYW5kIHJlbW92ZSBpdFxuICAgKiBmcm9tIHRoZSBxdWV1ZXMgaXQgd2FzIHdhaXRpbmcgaW4uXG4gICAqXG4gICAqIFF1ZXVlIHJlbW92YWwgbXVzdCBoYXBwZW4gRklSU1QuIEEgdGhyZWFkIGNhbiBhcHBlYXIgYXMgYm90aCB0aGUgb3duZXIgb2ZcbiAgICogb25lIGtleSBhbmQgYSB3YWl0ZXIgZm9yIGFub3RoZXIsIGFuZCBwcm9tb3RpbmcgaXQgb3V0IG9mIGEgcXVldWUgaXQgY2FuIG5vXG4gICAqIGxvbmdlciBhbnN3ZXIgZm9yIHdvdWxkIGdyYW50IGEgbG9jayB0byBhIGNsb3NlZCBwb3J0IC0gc3RhbGxpbmcgdGhhdCBrZXlcbiAgICogdW50aWwgdGhlIHByb2Nlc3MgZW5kcy5cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlUG9ydChwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgdGhpcy5zdGF0ZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChzdGF0ZS5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YXRlLnF1ZXVlID0gc3RhdGUucXVldWUuZmlsdGVyKCh3YWl0ZXIpID0+IHdhaXRlci5wb3J0ICE9PSBwb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCBzdGF0ZV0gb2YgWy4uLnRoaXMuc3RhdGVzXSkge1xuICAgICAgaWYgKHN0YXRlLm93bmVyLnBvcnQgPT09IHBvcnQpIHRoaXMuZ3JhbnROZXh0KGtleSwgc3RhdGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogTm90aWZ5IGEgd2FpdGVyIHRoYXQgaXQgbm93IG93bnMgaXRzIGtleS4gKi9cbmZ1bmN0aW9uIGdyYW50KHdhaXRlcjogTG9ja1dhaXRlcik6IHZvaWQge1xuICB3YWl0ZXIucG9ydC5wb3N0TWVzc2FnZSh7IHR5cGU6IFwiZ3JhbnRlZFwiLCByZXF1ZXN0SWQ6IHdhaXRlci5yZXF1ZXN0SWQgfSBzYXRpc2ZpZXMgTG9ja1Jlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBBIHRocmVhZCdzIGVuZCBvZiB0aGUgY29udmVyc2F0aW9uOiBzZW5kcyByZXF1ZXN0cywgYXdhaXRzIGdyYW50cywgYW5kIHJ1bnNcbiAqIGNhbGxiYWNrcy5cbiAqXG4gKiBPd25zIHRoZSBldmVudC1sb29wIGJvb2trZWVwaW5nLiBUaGUgcG9ydCBpcyB1bnJlZidkIHdoaWxlIGlkbGUgc28gaG9sZGluZyBhXG4gKiBsb2NrIG1vZHVsZSBuZXZlciBibG9ja3MgcHJvY2VzcyBleGl0LCBhbmQgcmVmJ2QgZXhhY3RseSB3aGlsZSB0aGlzIHRocmVhZCBoYXNcbiAqIGFuIG91dHN0YW5kaW5nIHJlcXVlc3Qgb3IgYW4gdW5yZWxlYXNlZCBsb2NrIC0gb3RoZXJ3aXNlIE5vZGUgd291bGQgY29uc2lkZXJcbiAqIGl0c2VsZiBvdXQgb2Ygd29yayBhbmQgZXhpdCBtaWQtY3JpdGljYWwtc2VjdGlvbiwgZHJvcHBpbmcgdGhlIGdyYW50IHRoYXQgd2FzXG4gKiBhbHJlYWR5IG9uIGl0cyB3YXkuXG4gKi9cbmNsYXNzIExvY2tDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmcgPSBuZXcgTWFwPHN0cmluZywgKGVycm9yPzogRXJyb3IpID0+IHZvaWQ+KCk7XG4gIC8qKiBSZXF1ZXN0cyArIGhlbGQgbG9ja3MuIFRoZSBwb3J0IGlzIHJlZidkIHdoaWxlIHRoaXMgaXMgYWJvdmUgemVyby4gKi9cbiAgcHJpdmF0ZSBhY3RpdmUgPSAwO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcG9ydDogTWVzc2FnZVBvcnQpIHtcbiAgICBwb3J0Lm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZTogTG9ja01lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFwiZ3JhbnRlZFwiKSByZXR1cm47XG4gICAgICB0aGlzLnNldHRsZShtZXNzYWdlLnJlcXVlc3RJZCk7XG4gICAgfSk7XG4gICAgcG9ydC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIC8vIFRoZSBjb29yZGluYXRvciBpcyBnb25lIChtYWluIHRocmVhZCBleGl0aW5nLCBvciB0aGlzIHdvcmtlciBiZWluZyB0b3JuXG4gICAgICAvLyBkb3duKS4gRmFpbCB0aGUgd2FpdGVycyByYXRoZXIgdGhhbiBoYW5nIHRoZW06IGEgY2FsbGVyIGJsb2NrZWQgb24gYVxuICAgICAgLy8gbG9jayB0aGF0IGNhbiBuZXZlciBiZSBncmFudGVkIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBkZWFkbG9jay5cbiAgICAgIGNvbnN0IGNsb3NlRXJyb3IgPSBuZXcgRXJyb3IoXCJQcm9jZXNzIGxvY2sgcG9ydCBjbG9zZWQgYmVmb3JlIHRoZSBsb2NrIHdhcyBncmFudGVkXCIpO1xuICAgICAgZm9yIChjb25zdCBzZXR0bGUgb2YgWy4uLnRoaXMucGVuZGluZy52YWx1ZXMoKV0pIHNldHRsZShjbG9zZUVycm9yKTtcbiAgICB9KTtcbiAgICBwb3J0LnVucmVmKCk7XG4gICAgcG9ydC5zdGFydCgpO1xuICB9XG5cbiAgLyoqIFJlc29sdmUgb3IgcmVqZWN0IG9uZSBwZW5kaW5nIHJlcXVlc3QgYW5kIGRyb3AgaXRzIHJlZi4gKi9cbiAgcHJpdmF0ZSBzZXR0bGUocmVxdWVzdElkOiBzdHJpbmcsIGZhaWx1cmU/OiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IHNldHRsZSA9IHRoaXMucGVuZGluZy5nZXQocmVxdWVzdElkKTtcbiAgICBpZiAoIXNldHRsZSkgcmV0dXJuO1xuICAgIHRoaXMucGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcbiAgICBzZXR0bGUoZmFpbHVyZSk7XG4gIH1cblxuICAvKiogUmVmIHRoZSBwb3J0IGZvciB0aGUgZmlyc3QgdW5pdCBvZiBvdXRzdGFuZGluZyB3b3JrLiAqL1xuICBwcml2YXRlIHJldGFpbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmUrKyA9PT0gMCkgdGhpcy5wb3J0LnJlZigpO1xuICB9XG5cbiAgLyoqIFVucmVmIG9uY2Ugbm90aGluZyBpcyBvdXRzdGFuZGluZywgc28gdGhlIHRocmVhZCBjYW4gZXhpdC4gKi9cbiAgcHJpdmF0ZSByZWxlYXNlKCk6IHZvaWQge1xuICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB0aGlzLnBvcnQudW5yZWYoKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bjxUPihrZXk6IHN0cmluZywgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9jZXNzIGxvY2sgcG9ydCBpcyBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IGlkKCk7XG4gICAgdGhpcy5yZXRhaW4oKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmcuc2V0KHJlcXVlc3RJZCwgKGZhaWx1cmUpID0+IChmYWlsdXJlID8gcmVqZWN0KGZhaWx1cmUpIDogcmVzb2x2ZSgpKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJhY3F1aXJlXCIsIHJlcXVlc3RJZCwga2V5IH0gc2F0aXNmaWVzIExvY2tSZXF1ZXN0KTtcbiAgICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmcuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgICAgICAgcmVqZWN0KHRvRXJyb3IoY2F1c2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIC8vIE5ldmVyIGdyYW50ZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVsZWFzZSAtIGp1c3QgZHJvcCB0aGUgcmVmLlxuICAgICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgICB0aHJvdyBjYXVzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBQb3N0IGJlZm9yZSB1bnJlZidpbmc6IHRoZSByZWxlYXNlIG11c3QgYmUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBwb3J0IGlzXG4gICAgICAvLyBzdGlsbCBob2xkaW5nIHRoZSBsb29wIG9wZW4sIG9yIHRoZSBuZXh0IHdhaXRlciBpcyBzdHJhbmRlZC5cbiAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJyZWxlYXNlXCIsIHJlcXVlc3RJZCwga2V5IH0gc2F0aXNmaWVzIExvY2tSZXF1ZXN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogVGhlIGNvb3JkaW5hdG9yLCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seS4gKi9cbmNvbnN0IGNvb3JkaW5hdG9yID0gaXNNYWluVGhyZWFkID8gbmV3IExvY2tDb29yZGluYXRvcigpIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoaXMgdGhyZWFkJ3MgY2xpZW50LCBjcmVhdGVkIG9uIGZpcnN0IHVzZS5cbiAqXG4gKiBMYXp5IHNvIGltcG9ydGluZyB0aGlzIG1vZHVsZSBjb3N0cyBub3RoaW5nIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgc28gYSB3b3JrZXJcbiAqIHRoYXQgbmV2ZXIgbG9ja3MgYW55dGhpbmcgaXMgbmV2ZXIgZm9yY2VkIHRvIGhhdmUgYmVlbiBzdGFydGVkIHRocm91Z2hcbiAqIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9LiBUaGUgbWFpbiB0aHJlYWQgd2lyZXMgYSBjaGFubmVsIHRvIGl0cyBvd25cbiAqIGNvb3JkaW5hdG9yOyBhIHdvcmtlciBhZG9wdHMgdGhlIHBvcnQgaXQgd2FzIGhhbmRlZC5cbiAqL1xubGV0IGNsaWVudDogTG9ja0NsaWVudCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbG9ja0NsaWVudCgpOiBMb2NrQ2xpZW50IHtcbiAgaWYgKGNsaWVudCkgcmV0dXJuIGNsaWVudDtcbiAgaWYgKGNvb3JkaW5hdG9yKSB7XG4gICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNvb3JkaW5hdG9yLmFkZFBvcnQocG9ydDEpO1xuICAgIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KHBvcnQyKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG4gIGNvbnN0IHBvcnQgPSAod29ya2VyRGF0YSBhcyBMb2NrV29ya2VyRGF0YSB8IHVuZGVmaW5lZCk/LltMT0NLX1BPUlRfS0VZXTtcbiAgaWYgKCFwb3J0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIHdvcmtlciBoYXMgbm8gcHJvY2Vzcy1sb2NrIHBvcnQuIFN0YXJ0IGl0IHdpdGggcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKCkgXCIgK1xuICAgICAgICBcIihvciBjYWxsIGF0dGFjaFByb2Nlc3NMb2NrKHdvcmtlcikgYW5kIGF3YWl0IHByb2Nlc3NMb2NrQXR0YWNoZWQoKSkuXCIsXG4gICAgKTtcbiAgfVxuICBjbGllbnQgPSBuZXcgTG9ja0NsaWVudChwb3J0KTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIG5hbWVkIGJ5IGBrZXlgLCByZWxlYXNpbmcgaXQgd2hlbiBgZm5gXG4gKiBzZXR0bGVzLlxuICpcbiAqIENhbGxlcnMgc2hhcmluZyBhIGtleSBhcmUgc2VyaWFsaXplZCBhY3Jvc3MgdGhlIG1haW4gdGhyZWFkIGFuZCBldmVyeSB3b3JrZXJcbiAqIHN0YXJ0ZWQgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTsgZGlzdGluY3Qga2V5cyBuZXZlciBibG9ja1xuICogZWFjaCBvdGhlci4gUmV0dXJucyB3aGF0ZXZlciBgZm5gIHJldHVybnMgYW5kIHByb3BhZ2F0ZXMgd2hhdCBpdCB0aHJvd3MsIHNvIGl0XG4gKiBkcm9wcyBpbnRvIGFuIGV4aXN0aW5nIGV4cHJlc3Npb24gd2l0aG91dCByZXN0cnVjdHVyaW5nLlxuICpcbiAqIGBrZXlgIGlzIGFueSB2YWx1ZSB3aXRoIGEgc3RhYmxlIGlkZW50aXR5IC0gYSBzdHJpbmcsIGEgYFtcImludm9pY2VcIiwgaWRdYFxuICogdHVwbGUsIGEgY29uZmlnIG9iamVjdCAtIGNhbm9uaWNhbGl6ZWQgYnkgYG9iamVjdC50b1N0YWJsZUtleWAsIHRoZSBzYW1lIHJ1bGVcbiAqIGBAZGJ4LXRvb2xzL3Bvc3RncmVzYCB1c2VzIGZvciBhZHZpc29yeS1sb2NrIGlkcyBhbmQgY2hhbm5lbCBuYW1lcy4gU3RydWN0dXJlXG4gKiBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYFtcImludm9pY2VcIiwgN11gIGFuZCBgXCJpbnZvaWNlXzdcImAgYXJlIGRpZmZlcmVudFxuICogbG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHdpdGhQcm9jZXNzTG9jayhbXCJjYWNoZVwiLCBuYW1lXSwgYXN5bmMgKCkgPT4ge1xuICogICBpZiAoIShhd2FpdCBleGlzdHMobmFtZSkpKSBhd2FpdCBidWlsZChuYW1lKTtcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb2Nlc3NMb2NrPFQ+KGtleTogdW5rbm93biwgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBsb2NrQ2xpZW50KCkucnVuKGxvY2tLZXkoa2V5KSwgZm4pO1xufVxuXG4vKiogQ2Fub25pY2FsIHN0cmluZyBpZGVudGl0eSBmb3IgYSBsb2NrIGtleSAoc2VlIGBvYmplY3QudG9TdGFibGVLZXlgKS4gKi9cbmZ1bmN0aW9uIGxvY2tLZXkoa2V5OiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvT25lT3JNYW55KGtleSlcbiAgICAubWFwKChwYXJ0KSA9PiB0b1N0YWJsZUtleShwYXJ0KSlcbiAgICAuam9pbihcIlxcdTAwMDBcIik7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb29yZGluYXRvciBwb3J0IHRvIGEgYFdvcmtlcmAncyBvcHRpb25zIHNvIHRoZSB3b3JrZXIgY2FuIGxvY2tcbiAqIGltbWVkaWF0ZWx5IC0gZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiwgYmVmb3JlIGFueSBtZXNzYWdlIGlzIGhhbmRsZWQuXG4gKlxuICogUHJlc2VydmVzIHRoZSBjYWxsZXIncyBgd29ya2VyRGF0YWAgYW5kIGB0cmFuc2Zlckxpc3RgOyB0aGUgcG9ydCBpc1xuICogdHJhbnNmZXJyZWQsIGFzIGBNZXNzYWdlUG9ydGAgY2Fubm90IGJlIGNsb25lZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFdvcmtlcih1cmwsIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9ucyh7IHdvcmtlckRhdGE6IHsgdGVuYW50IH0gfSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKG9wdGlvbnM6IFdvcmtlck9wdGlvbnMgPSB7fSk6IFdvcmtlck9wdGlvbnMge1xuICBjb25zdCBwb3J0ID0gY3JlYXRlQ29vcmRpbmF0b3JQb3J0KFwicHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zXCIpO1xuICBjb25zdCBleGlzdGluZyA9IGlzUmVjb3JkKG9wdGlvbnMud29ya2VyRGF0YSkgPyBvcHRpb25zLndvcmtlckRhdGEgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHdvcmtlckRhdGE6IHsgLi4uZXhpc3RpbmcsIFtMT0NLX1BPUlRfS0VZXTogcG9ydCB9LFxuICAgIHRyYW5zZmVyTGlzdDogWy4uLihvcHRpb25zLnRyYW5zZmVyTGlzdCA/PyBbXSksIHBvcnRdLFxuICB9O1xufVxuXG4vKipcbiAqIFdpcmUgYW4gQUxSRUFEWS1SVU5OSU5HIHdvcmtlciBpbnRvIHRoZSBsb2NrLCBmb3IgYSB3b3JrZXIgdGhpcyBjb2RlIGRpZCBub3RcbiAqIGNvbnN0cnVjdCAoYSBwb29sIGZyb20gYSBsaWJyYXJ5LCBzYXkpLlxuICpcbiAqIFByZWZlciB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTogdGhlIHBvcnQgYXJyaXZlcyB3aXRoIGEgbWVzc2FnZSwgc29cbiAqIHRoZSB3b3JrZXIgY2Fubm90IGxvY2sgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbXVzdCBhd2FpdFxuICoge0BsaW5rIHByb2Nlc3NMb2NrQXR0YWNoZWR9IGZpcnN0LiBUaGUgd29ya2VyIHNpZGUgbmVlZHMgbm8gb3RoZXIgY2hhbmdlIC1cbiAqIGB3aXRoUHJvY2Vzc0xvY2tgIHdvcmtzIG5vcm1hbGx5IG9uY2UgdGhlIHBvcnQgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hQcm9jZXNzTG9jayh3b3JrZXI6IFdvcmtlcik6IHZvaWQge1xuICBjb25zdCBwb3J0ID0gY3JlYXRlQ29vcmRpbmF0b3JQb3J0KFwiYXR0YWNoUHJvY2Vzc0xvY2tcIik7XG4gIHdvcmtlci5wb3N0TWVzc2FnZSh7IHR5cGU6IEFUVEFDSF9NRVNTQUdFX1RZUEUsIHBvcnQgfSBzYXRpc2ZpZXMgQXR0YWNoTWVzc2FnZSwgW3BvcnRdKTtcbn1cblxuLyoqIEEgZnJlc2ggY29vcmRpbmF0b3Itc2lkZSBjaGFubmVsLCBvciBhIGNsZWFyIGVycm9yIG9mZiB0aGUgbWFpbiB0aHJlYWQuICovXG5mdW5jdGlvbiBjcmVhdGVDb29yZGluYXRvclBvcnQoY2FsbGVyOiBzdHJpbmcpOiBNZXNzYWdlUG9ydCB7XG4gIGlmICghY29vcmRpbmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y2FsbGVyfSgpIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkYCk7XG4gIH1cbiAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjb29yZGluYXRvci5hZGRQb3J0KHBvcnQxKTtcbiAgcmV0dXJuIHBvcnQyO1xufVxuXG4vKipcbiAqIEluIGEgd29ya2VyLCByZXNvbHZlIG9uY2UgdGhlIHtAbGluayBhdHRhY2hQcm9jZXNzTG9ja30gcG9ydCBoYXMgYXJyaXZlZC5cbiAqXG4gKiBPbmx5IG5lZWRlZCBvbiB0aGUgYXR0YWNoIHBhdGgsIGFuZCBzYWZlIHRvIGF3YWl0IHJlZ2FyZGxlc3M6IGl0IHJldHVybnNcbiAqIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHdvcmtlciBhbHJlYWR5IGhhcyBhIHBvcnQgKHRoZVxuICoge0BsaW5rIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9uc30gY2FzZSkgb3Igd2hlbiBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCBzb1xuICogc2hhcmVkIHdvcmtlciBjb2RlIGRvZXMgbm90IGJyYW5jaCBvbiBob3cgaXQgd2FzIHN0YXJ0ZWQuXG4gKlxuICogQSBgcGFyZW50UG9ydGAgbGlzdGVuZXIga2VlcHMgdGhlIHdvcmtlciBhbGl2ZSwgd2hpY2ggaXMgQ09SUkVDVCBoZXJlIGFuZFxuICogZGVsaWJlcmF0ZWx5IG5vdCB1bnJlZidkOiB0aGlzIHByb21pc2UgaXMgcGVuZGluZyB3b3JrLCBhbmQgYSB3b3JrZXIgYWxsb3dlZCB0b1xuICogZXhpdCB3aGlsZSBhd2FpdGluZyBpdHMgcG9ydCB3b3VsZCBkaWUgc2lsZW50bHkgaW5zdGVhZCBvZiBsb2NraW5nLiBUaGVcbiAqIGxpc3RlbmVyIGlzIHJlbW92ZWQgYXMgc29vbiBhcyB0aGUgcG9ydCBsYW5kcywgc28gdGhlIHdvcmtlciBpcyBmcmVlIHRvIGV4aXRcbiAqIGFnYWluIHRoZSBtb21lbnQgdGhlIHdhaXQgaXMgb3Zlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NMb2NrQXR0YWNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc01haW5UaHJlYWQgfHwgY2xpZW50IHx8ICh3b3JrZXJEYXRhIGFzIExvY2tXb3JrZXJEYXRhIHwgdW5kZWZpbmVkKT8uW0xPQ0tfUE9SVF9LRVldKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGNvbnN0IHBvcnQgPSBwYXJlbnRQb3J0O1xuICBpZiAoIXBvcnQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwicHJvY2Vzc0xvY2tBdHRhY2hlZCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYSB3b3JrZXIgdGhyZWFkXCIpKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvbk1lc3NhZ2UgPSAobWVzc2FnZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc1JlY29yZChtZXNzYWdlKSB8fCBtZXNzYWdlLnR5cGUgIT09IEFUVEFDSF9NRVNTQUdFX1RZUEUpIHJldHVybjtcbiAgICAgIHBvcnQub2ZmKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuICAgICAgY2xpZW50ID0gbmV3IExvY2tDbGllbnQoKG1lc3NhZ2UgYXMgdW5rbm93biBhcyBBdHRhY2hNZXNzYWdlKS5wb3J0KTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gIH0pO1xufVxuIl19
@@ -8,7 +8,7 @@
8
8
  * @module
9
9
  */
10
10
  import { Stats } from "node:fs";
11
- import { net } from "@dbx-tools/shared-core";
11
+ import { type UrlBuilder } from "@dbx-tools/shared-core";
12
12
  /** Resolve a blank, null, omitted, relative, or absolute cwd to an absolute path. */
13
13
  export declare function resolveWorkingDirectory(cwd?: string | null): string;
14
14
  /** A command's stdout, classified as a filesystem path and/or a URL. */
@@ -25,7 +25,7 @@ export interface ProjectContext {
25
25
  * network URL - a non-blank scheme (not `file:`) AND a non-blank hostname.
26
26
  * Bare paths, scp-like `git@host:...` remotes, and `file:` URLs stay unset.
27
27
  */
28
- readonly url?: net.UrlBuilder;
28
+ readonly url?: UrlBuilder;
29
29
  }
30
30
  /** Resolve the nearest project root without walking above its npm or Git boundary. */
31
31
  export declare function root(cwd?: string): string | undefined;
@@ -118,4 +118,4 @@ export type NpmRegistryOptions = {
118
118
  * `bunfig.toml` `install.registry`, then pnpm workspace/global YAML, then
119
119
  * `https://registry.npmjs.org/`. `overrideOnly` skips that public default.
120
120
  */
121
- export declare function npmRegistry(cwd?: string | null, options?: NpmRegistryOptions): net.UrlBuilder | undefined;
121
+ export declare function npmRegistry(cwd?: string | null, options?: NpmRegistryOptions): UrlBuilder | undefined;