@dbx-tools/lakebox 0.9.154 → 0.9.157

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.
@@ -1,4 +1,4 @@
1
- import { asyncUtils } from "@dbx-tools/shared-core";
1
+ import { sleep } from "@dbx-tools/shared-core";
2
2
  const POLL_INTERVAL_MS = 1_000;
3
3
  const LIFECYCLE_TIMEOUT_MS = 300_000;
4
4
  /** Maps an upstream Lakebox status to the shared lifecycle state. */
@@ -67,9 +67,9 @@ async function waitForLakeboxStatus(api, current, expected, signal) {
67
67
  if (Date.now() >= deadline) {
68
68
  throw new Error(`Timed out waiting for Lakebox ${entry.sandboxId} to become ${expected}`);
69
69
  }
70
- await asyncUtils.sleep(POLL_INTERVAL_MS, signal);
70
+ await sleep(POLL_INTERVAL_MS, signal);
71
71
  entry = await api.get(entry.sandboxId, signal);
72
72
  }
73
73
  return entry;
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZmVjeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJcEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFFckMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFhO0lBQ2xELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDbkMsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxjQUFjLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQztRQUNqQjtZQUNFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxLQUF5QjtJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEdBQWtCLEVBQ2xCLE9BQXFCLEVBQ3JCLE1BQW9CO0lBRXBCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxLQUFLLFVBQVU7UUFBRSxPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RGLElBQUksTUFBTSxLQUFLLFVBQVU7UUFBRSxLQUFLLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RixPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxHQUFrQixFQUNsQixPQUFxQixFQUNyQixNQUFvQjtJQUVwQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDcEIsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RixJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsS0FBSyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0YsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9GLENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLEdBQWtCLEVBQ2xCLE9BQXFCLEVBQ3JCLFFBQStCLEVBQy9CLE1BQW9CO0lBRXBCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDcEIsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLFNBQVMsY0FBYyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3luY1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGFrZWJveFN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1sYWtlYm94XCI7XG5pbXBvcnQgdHlwZSB7IExha2Vib3hDbGllbnQsIExha2Vib3hFbnRyeSB9IGZyb20gXCIuL3Jlc3QudHNcIjtcblxuY29uc3QgUE9MTF9JTlRFUlZBTF9NUyA9IDFfMDAwO1xuY29uc3QgTElGRUNZQ0xFX1RJTUVPVVRfTVMgPSAzMDBfMDAwO1xuXG4vKiogTWFwcyBhbiB1cHN0cmVhbSBMYWtlYm94IHN0YXR1cyB0byB0aGUgc2hhcmVkIGxpZmVjeWNsZSBzdGF0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMYWtlYm94U3RhdHVzKHZhbHVlOiBzdHJpbmcpOiBFeGNsdWRlPExha2Vib3hTdGF0dXMsIFwibWlzc2luZ1wiPiB7XG4gIHN3aXRjaCAodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlIFwic3RhcnRpbmdcIjpcbiAgICBjYXNlIFwicHJvdmlzaW9uaW5nXCI6XG4gICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgY2FzZSBcInJ1bm5pbmdcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBjYXNlIFwic3RvcHBpbmdcIjpcbiAgICAgIHJldHVybiBcInN0b3BwaW5nXCI7XG4gICAgY2FzZSBcInN0b3BwZWRcIjpcbiAgICAgIHJldHVybiBcInN0b3BwZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgY2FzZSBcImVycm9yXCI6XG4gICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuLyoqIFBhcnNlcyBhbiB1cHN0cmVhbSBkdXJhdGlvbiBzdWNoIGFzIGA2MDBzYCBpbnRvIHNlY29uZHMuICovXG5leHBvcnQgZnVuY3Rpb24gbGFrZWJveElkbGVUaW1lb3V0U2Vjb25kcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZT8uZW5kc1dpdGgoXCJzXCIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHZhbHVlLnNsaWNlKDAsIC0xKSk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgJiYgc2Vjb25kcyA+IDAgPyBzZWNvbmRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YXJ0cyBhIExha2Vib3ggd2hlbiBuZWVkZWQgYW5kIHdhaXRzIHVudGlsIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHRocm93cyBXaGVuIHRoZSBMYWtlYm94IGRvZXMgbm90IHJlYWNoIHJ1bm5pbmcgd2l0aGluIGZpdmUgbWludXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxha2Vib3hSdW5uaW5nKFxuICBhcGk6IExha2Vib3hDbGllbnQsXG4gIGN1cnJlbnQ6IExha2Vib3hFbnRyeSxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICBsZXQgZW50cnkgPSBjdXJyZW50O1xuICBjb25zdCBzdGF0dXMgPSBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cyk7XG4gIGlmIChzdGF0dXMgPT09IFwicnVubmluZ1wiKSByZXR1cm4gZW50cnk7XG4gIGlmIChzdGF0dXMgPT09IFwic3RhcnRpbmdcIikgcmV0dXJuIHdhaXRGb3JMYWtlYm94U3RhdHVzKGFwaSwgZW50cnksIFwicnVubmluZ1wiLCBzaWduYWwpO1xuICBpZiAoc3RhdHVzID09PSBcInN0b3BwaW5nXCIpIGVudHJ5ID0gYXdhaXQgd2FpdEZvckxha2Vib3hTdGF0dXMoYXBpLCBlbnRyeSwgXCJzdG9wcGVkXCIsIHNpZ25hbCk7XG4gIHJldHVybiB3YWl0Rm9yTGFrZWJveFN0YXR1cyhhcGksIGF3YWl0IGFwaS5zdGFydChlbnRyeS5zYW5kYm94SWQsIHNpZ25hbCksIFwicnVubmluZ1wiLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFN0b3BzIGEgTGFrZWJveCB3aGVuIG5lZWRlZCBhbmQgd2FpdHMgdW50aWwgaXQgaXMgc3RvcHBlZC5cbiAqXG4gKiBAdGhyb3dzIFdoZW4gdGhlIExha2Vib3ggZG9lcyBub3QgcmVhY2ggc3RvcHBlZCB3aXRoaW4gZml2ZSBtaW51dGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTGFrZWJveFN0b3BwZWQoXG4gIGFwaTogTGFrZWJveENsaWVudCxcbiAgY3VycmVudDogTGFrZWJveEVudHJ5LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gIGxldCBlbnRyeSA9IGN1cnJlbnQ7XG4gIGNvbnN0IHN0YXR1cyA9IG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKTtcbiAgaWYgKHN0YXR1cyA9PT0gXCJzdG9wcGVkXCIpIHJldHVybiBlbnRyeTtcbiAgaWYgKHN0YXR1cyA9PT0gXCJzdG9wcGluZ1wiKSByZXR1cm4gd2FpdEZvckxha2Vib3hTdGF0dXMoYXBpLCBlbnRyeSwgXCJzdG9wcGVkXCIsIHNpZ25hbCk7XG4gIGlmIChzdGF0dXMgPT09IFwic3RhcnRpbmdcIikgZW50cnkgPSBhd2FpdCB3YWl0Rm9yTGFrZWJveFN0YXR1cyhhcGksIGVudHJ5LCBcInJ1bm5pbmdcIiwgc2lnbmFsKTtcbiAgcmV0dXJuIHdhaXRGb3JMYWtlYm94U3RhdHVzKGFwaSwgYXdhaXQgYXBpLnN0b3AoZW50cnkuc2FuZGJveElkLCBzaWduYWwpLCBcInN0b3BwZWRcIiwgc2lnbmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckxha2Vib3hTdGF0dXMoXG4gIGFwaTogTGFrZWJveENsaWVudCxcbiAgY3VycmVudDogTGFrZWJveEVudHJ5LFxuICBleHBlY3RlZDogXCJydW5uaW5nXCIgfCBcInN0b3BwZWRcIixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBMSUZFQ1lDTEVfVElNRU9VVF9NUztcbiAgbGV0IGVudHJ5ID0gY3VycmVudDtcbiAgd2hpbGUgKG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKSAhPT0gZXhwZWN0ZWQpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgTGFrZWJveCAke2VudHJ5LnNhbmRib3hJZH0gdG8gYmVjb21lICR7ZXhwZWN0ZWR9YCk7XG4gICAgfVxuICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoUE9MTF9JTlRFUlZBTF9NUywgc2lnbmFsKTtcbiAgICBlbnRyeSA9IGF3YWl0IGFwaS5nZXQoZW50cnkuc2FuZGJveElkLCBzaWduYWwpO1xuICB9XG4gIHJldHVybiBlbnRyeTtcbn1cbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZmVjeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJL0MsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFFckMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFhO0lBQ2xELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDbkMsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxjQUFjLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQztRQUNqQjtZQUNFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxLQUF5QjtJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEdBQWtCLEVBQ2xCLE9BQXFCLEVBQ3JCLE1BQW9CO0lBRXBCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxLQUFLLFVBQVU7UUFBRSxPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RGLElBQUksTUFBTSxLQUFLLFVBQVU7UUFBRSxLQUFLLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RixPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxHQUFrQixFQUNsQixPQUFxQixFQUNyQixNQUFvQjtJQUVwQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDcEIsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RixJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsS0FBSyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0YsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9GLENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLEdBQWtCLEVBQ2xCLE9BQXFCLEVBQ3JCLFFBQStCLEVBQy9CLE1BQW9CO0lBRXBCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDcEIsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLFNBQVMsY0FBYyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QyxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGFrZWJveFN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1sYWtlYm94XCI7XG5pbXBvcnQgdHlwZSB7IExha2Vib3hDbGllbnQsIExha2Vib3hFbnRyeSB9IGZyb20gXCIuL3Jlc3QudHNcIjtcblxuY29uc3QgUE9MTF9JTlRFUlZBTF9NUyA9IDFfMDAwO1xuY29uc3QgTElGRUNZQ0xFX1RJTUVPVVRfTVMgPSAzMDBfMDAwO1xuXG4vKiogTWFwcyBhbiB1cHN0cmVhbSBMYWtlYm94IHN0YXR1cyB0byB0aGUgc2hhcmVkIGxpZmVjeWNsZSBzdGF0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMYWtlYm94U3RhdHVzKHZhbHVlOiBzdHJpbmcpOiBFeGNsdWRlPExha2Vib3hTdGF0dXMsIFwibWlzc2luZ1wiPiB7XG4gIHN3aXRjaCAodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlIFwic3RhcnRpbmdcIjpcbiAgICBjYXNlIFwicHJvdmlzaW9uaW5nXCI6XG4gICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgY2FzZSBcInJ1bm5pbmdcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBjYXNlIFwic3RvcHBpbmdcIjpcbiAgICAgIHJldHVybiBcInN0b3BwaW5nXCI7XG4gICAgY2FzZSBcInN0b3BwZWRcIjpcbiAgICAgIHJldHVybiBcInN0b3BwZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgY2FzZSBcImVycm9yXCI6XG4gICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuLyoqIFBhcnNlcyBhbiB1cHN0cmVhbSBkdXJhdGlvbiBzdWNoIGFzIGA2MDBzYCBpbnRvIHNlY29uZHMuICovXG5leHBvcnQgZnVuY3Rpb24gbGFrZWJveElkbGVUaW1lb3V0U2Vjb25kcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZT8uZW5kc1dpdGgoXCJzXCIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHZhbHVlLnNsaWNlKDAsIC0xKSk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgJiYgc2Vjb25kcyA+IDAgPyBzZWNvbmRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YXJ0cyBhIExha2Vib3ggd2hlbiBuZWVkZWQgYW5kIHdhaXRzIHVudGlsIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHRocm93cyBXaGVuIHRoZSBMYWtlYm94IGRvZXMgbm90IHJlYWNoIHJ1bm5pbmcgd2l0aGluIGZpdmUgbWludXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxha2Vib3hSdW5uaW5nKFxuICBhcGk6IExha2Vib3hDbGllbnQsXG4gIGN1cnJlbnQ6IExha2Vib3hFbnRyeSxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICBsZXQgZW50cnkgPSBjdXJyZW50O1xuICBjb25zdCBzdGF0dXMgPSBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cyk7XG4gIGlmIChzdGF0dXMgPT09IFwicnVubmluZ1wiKSByZXR1cm4gZW50cnk7XG4gIGlmIChzdGF0dXMgPT09IFwic3RhcnRpbmdcIikgcmV0dXJuIHdhaXRGb3JMYWtlYm94U3RhdHVzKGFwaSwgZW50cnksIFwicnVubmluZ1wiLCBzaWduYWwpO1xuICBpZiAoc3RhdHVzID09PSBcInN0b3BwaW5nXCIpIGVudHJ5ID0gYXdhaXQgd2FpdEZvckxha2Vib3hTdGF0dXMoYXBpLCBlbnRyeSwgXCJzdG9wcGVkXCIsIHNpZ25hbCk7XG4gIHJldHVybiB3YWl0Rm9yTGFrZWJveFN0YXR1cyhhcGksIGF3YWl0IGFwaS5zdGFydChlbnRyeS5zYW5kYm94SWQsIHNpZ25hbCksIFwicnVubmluZ1wiLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFN0b3BzIGEgTGFrZWJveCB3aGVuIG5lZWRlZCBhbmQgd2FpdHMgdW50aWwgaXQgaXMgc3RvcHBlZC5cbiAqXG4gKiBAdGhyb3dzIFdoZW4gdGhlIExha2Vib3ggZG9lcyBub3QgcmVhY2ggc3RvcHBlZCB3aXRoaW4gZml2ZSBtaW51dGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTGFrZWJveFN0b3BwZWQoXG4gIGFwaTogTGFrZWJveENsaWVudCxcbiAgY3VycmVudDogTGFrZWJveEVudHJ5LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gIGxldCBlbnRyeSA9IGN1cnJlbnQ7XG4gIGNvbnN0IHN0YXR1cyA9IG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKTtcbiAgaWYgKHN0YXR1cyA9PT0gXCJzdG9wcGVkXCIpIHJldHVybiBlbnRyeTtcbiAgaWYgKHN0YXR1cyA9PT0gXCJzdG9wcGluZ1wiKSByZXR1cm4gd2FpdEZvckxha2Vib3hTdGF0dXMoYXBpLCBlbnRyeSwgXCJzdG9wcGVkXCIsIHNpZ25hbCk7XG4gIGlmIChzdGF0dXMgPT09IFwic3RhcnRpbmdcIikgZW50cnkgPSBhd2FpdCB3YWl0Rm9yTGFrZWJveFN0YXR1cyhhcGksIGVudHJ5LCBcInJ1bm5pbmdcIiwgc2lnbmFsKTtcbiAgcmV0dXJuIHdhaXRGb3JMYWtlYm94U3RhdHVzKGFwaSwgYXdhaXQgYXBpLnN0b3AoZW50cnkuc2FuZGJveElkLCBzaWduYWwpLCBcInN0b3BwZWRcIiwgc2lnbmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckxha2Vib3hTdGF0dXMoXG4gIGFwaTogTGFrZWJveENsaWVudCxcbiAgY3VycmVudDogTGFrZWJveEVudHJ5LFxuICBleHBlY3RlZDogXCJydW5uaW5nXCIgfCBcInN0b3BwZWRcIixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBMSUZFQ1lDTEVfVElNRU9VVF9NUztcbiAgbGV0IGVudHJ5ID0gY3VycmVudDtcbiAgd2hpbGUgKG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKSAhPT0gZXhwZWN0ZWQpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgTGFrZWJveCAke2VudHJ5LnNhbmRib3hJZH0gdG8gYmVjb21lICR7ZXhwZWN0ZWR9YCk7XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKFBPTExfSU5URVJWQUxfTVMsIHNpZ25hbCk7XG4gICAgZW50cnkgPSBhd2FpdCBhcGkuZ2V0KGVudHJ5LnNhbmRib3hJZCwgc2lnbmFsKTtcbiAgfVxuICByZXR1cm4gZW50cnk7XG59XG4iXX0=
package/lib/src/rest.js CHANGED
@@ -1,4 +1,4 @@
1
- import { errorUtils, log, net } from "@dbx-tools/shared-core";
1
+ import { log, toError, urlBuilder } from "@dbx-tools/shared-core";
2
2
  import { z } from "zod";
3
3
  const LAKEBOX_ROOT = "/api/2.0/lakebox";
4
4
  const LAKEBOXES_PATH = `${LAKEBOX_ROOT}/sandboxes`;
@@ -65,7 +65,7 @@ export class LakeboxClient {
65
65
  await this.auth.ensureResolved?.();
66
66
  return (process.env.DATABRICKS_WORKSPACE_ID?.trim() ||
67
67
  this.auth.workspaceId?.trim() ||
68
- net.urlBuilder(this.auth.host ?? "")?.origin ||
68
+ urlBuilder(this.auth.host ?? "")?.origin ||
69
69
  "workspace");
70
70
  }
71
71
  /** Lists every Lakebox visible to the caller, following pagination. */
@@ -142,7 +142,7 @@ export class LakeboxClient {
142
142
  logger.warn("lakebox REST request failed", {
143
143
  ...metadata,
144
144
  durationMs: Date.now() - startedAt,
145
- error: errorUtils.toError(error),
145
+ error: toError(error),
146
146
  });
147
147
  throw error;
148
148
  }
@@ -196,4 +196,4 @@ function parseBody(text) {
196
196
  return { message: text.slice(0, 4_000) };
197
197
  }
198
198
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFDeEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxZQUFZLFlBQVksQ0FBQztBQUNuRCxNQUFNLGFBQWEsR0FBRyxHQUFHLFlBQVksV0FBVyxDQUFDO0FBQ2pELE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBQzVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQztLQUNoQyxNQUFNLENBQUM7SUFDTixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxvREFBb0QsQ0FBQztJQUNwRixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQztJQUNyRixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUNwRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0RCxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztJ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QUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsT0FBTyxDQUNMLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRztRQUNwQixLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUc7UUFDcEIsK0JBQStCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDcEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxFQUFVO0lBQzdCLE9BQU8sR0FBRyxjQUFjLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ25DLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQVksQ0FBQztJQUNyQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBuZXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuY29uc3QgTEFLRUJPWF9ST09UID0gXCIvYXBpLzIuMC9sYWtlYm94XCI7XG5jb25zdCBMQUtFQk9YRVNfUEFUSCA9IGAke0xBS0VCT1hfUk9PVH0vc2FuZGJveGVzYDtcbmNvbnN0IFNTSF9LRVlTX1BBVEggPSBgJHtMQUtFQk9YX1JPT1R9L3NzaC1rZXlzYDtcbmNvbnN0IE9SR19JRF9IRUFERVIgPSBcIlgtRGF0YWJyaWNrcy1PcmctSWRcIjtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJsYWtlYm94OnJlc3RcIik7XG5cbmV4cG9ydCBjb25zdCBMYWtlYm94RW50cnlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNhbmRib3hJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkxha2Vib3ggaWRlbnRpZmllcjsgYWxzbyB0aGUgU1NIIGdhdGV3YXkgdXNlcm5hbWUuXCIpLFxuICAgIHN0YXR1czogei5zdHJpbmcoKS5kZXNjcmliZShcIlVwc3RyZWFtIGxpZmVjeWNsZSBzdGF0dXMsIHN1Y2ggYXMgUnVubmluZyBvciBTdG9wcGVkLlwiKSxcbiAgICBnYXRld2F5SG9zdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU1NIIGdhdGV3YXkgaG9zdG5hbWUuXCIpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRpc3BsYXkgbGFiZWwuXCIpLFxuICAgIGNyZWF0ZVRpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkNyZWF0aW9uIHRpbWUuXCIpLFxuICAgIGxhc3RTdGFydFRpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkxhc3Qgc3RhcnQgdGltZS5cIiksXG4gICAgaWRsZVRpbWVvdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlBsYXRmb3JtIGlkbGUgdGltZW91dCwgc3VjaCBhcyA2MDBzLlwiKSxcbiAgICBub0F1dG9zdG9wOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV2hldGhlciBpZGxlIGF1dG8tc3RvcCBpcyBkaXNhYmxlZC5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIkxha2Vib3ggcmVjb3JkIHJldHVybmVkIGJ5IHRoZSBEYXRhYnJpY2tzIExha2Vib3ggUkVTVCBBUEkuXCIpO1xuLyoqIExha2Vib3ggcmVjb3JkIHJldHVybmVkIGJ5IHRoZSBEYXRhYnJpY2tzIExha2Vib3ggUkVTVCBBUEkuICovXG5leHBvcnQgdHlwZSBMYWtlYm94RW50cnkgPSB6LmluZmVyPHR5cGVvZiBMYWtlYm94RW50cnlTY2hlbWE+O1xuXG5jb25zdCBMYWtlYm94TGlzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgc2FuZGJveGVzOiB6LmFycmF5KExha2Vib3hFbnRyeVNjaGVtYSkuZGVmYXVsdChbXSksXG4gICAgbmV4dFBhZ2VUb2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKTtcblxuZXhwb3J0IGNvbnN0IExha2Vib3hTc2hLZXlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGtleUhhc2g6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJSZWdpc3RlcmVkIHB1YmxpYyBrZXkgaGFzaC5cIiksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiS2V5IGxhYmVsLlwiKSxcbiAgICBnYXRld2F5SG9zdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiR2F0ZXdheSBob3N0bmFtZSBmb3IgdGhpcyBrZXkuXCIpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuICAuZGVzY3JpYmUoXCJSZWdpc3RlcmVkIFNTSCBrZXkgcmV0dXJuZWQgYnkgdGhlIERhdGFicmlja3MgTGFrZWJveCBSRVNUIEFQSS5cIik7XG4vKiogUmVnaXN0ZXJlZCBTU0gga2V5IHJldHVybmVkIGJ5IHRoZSBEYXRhYnJpY2tzIExha2Vib3ggUkVTVCBBUEkuICovXG5leHBvcnQgdHlwZSBMYWtlYm94U3NoS2V5ID0gei5pbmZlcjx0eXBlb2YgTGFrZWJveFNzaEtleVNjaGVtYT47XG5cbmNvbnN0IExha2Vib3hTc2hLZXlMaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHsgc3NoS2V5czogei5hcnJheShMYWtlYm94U3NoS2V5U2NoZW1hKS5kZWZhdWx0KFtdKSB9KVxuICAucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBXb3Jrc3BhY2UgY3JlZGVudGlhbHMgZm9yIExha2Vib3ggUkVTVCBjYWxscy5cbiAqXG4gKiBUaGUgRGF0YWJyaWNrcyBTREsgYW5kIEFwcEtpdCBgV29ya3NwYWNlQ2xpZW50LmNvbmZpZ2Agc2F0aXNmeSB0aGlzIHNoYXBlLCBhc1xuICogZG9lcyBhIHNtYWxsIGFkYXB0ZXIgb3ZlciBgQGRieC10b29scy9hdXRoYC4gTGFrZWJveCBsaWZlY3ljbGUgY2FsbHMgbXVzdCB1c2VcbiAqIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwsIG5ldmVyIHJlcXVlc3Qtc2NvcGVkIE9CTyBjcmVkZW50aWFscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYm94QXV0aCB7XG4gIC8qKiBXb3Jrc3BhY2UgVVJMLiAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICAvKiogTnVtZXJpYyB3b3Jrc3BhY2UgaWRlbnRpZmllciwgd2hlbiBrbm93bi4gKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlcyBsYXp5IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGBob3N0YCBpcyByZWFkLiAqL1xuICBlbnN1cmVSZXNvbHZlZD8oKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEFkZHMgYXV0aGVudGljYXRpb24gaGVhZGVycyB0byBvbmUgcmVxdWVzdC4gKi9cbiAgYXV0aGVudGljYXRlKGhlYWRlcnM6IEhlYWRlcnMpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKiogRXJyb3IgcmFpc2VkIGZvciBhIG5vbi1zdWNjZXNzIExha2Vib3ggUkVTVCByZXNwb25zZS4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYm94QXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICByZWFkb25seSBzdGF0dXM6IG51bWJlcixcbiAgICByZWFkb25seSBlcnJvckNvZGU/OiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgcmVxdWVzdElkPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIkxha2Vib3hBcGlFcnJvclwiO1xuICB9XG59XG5cbnR5cGUgUmVxdWVzdE1ldGhvZCA9IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUEFUQ0hcIiB8IFwiREVMRVRFXCI7XG5cbi8qKlxuICogUkVTVCBjbGllbnQgZm9yIERhdGFicmlja3MgTGFrZWJveGVzIGFuZCByZWdpc3RlcmVkIFNTSCBrZXlzLlxuICpcbiAqIFJlc3BvbnNlcyBhcmUgdmFsaWRhdGVkIGJlZm9yZSB0aGV5IHJlYWNoIGNhbGxlcnMuIERpYWdub3N0aWNzIG5ldmVyIGluY2x1ZGVcbiAqIHRva2VucyBvciByZXF1ZXN0IGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYm94Q2xpZW50IHtcbiAgLyoqIENyZWF0ZXMgYSBjbGllbnQgZm9yIG9uZSB3b3Jrc3BhY2UgY3JlZGVudGlhbC4gKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhdXRoOiBMYWtlYm94QXV0aCkge31cblxuICAvKiogUmV0dXJucyB0aGUgd29ya3NwYWNlIGlkZW50aWZpZXIsIG9yIHRoZSB3b3Jrc3BhY2Ugb3JpZ2luIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgdW5rbm93bi4gKi9cbiAgYXN5bmMgd29ya3NwYWNlU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmF1dGguZW5zdXJlUmVzb2x2ZWQ/LigpO1xuICAgIHJldHVybiAoXG4gICAgICBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX1dPUktTUEFDRV9JRD8udHJpbSgpIHx8XG4gICAgICB0aGlzLmF1dGgud29ya3NwYWNlSWQ/LnRyaW0oKSB8fFxuICAgICAgbmV0LnVybEJ1aWxkZXIodGhpcy5hdXRoLmhvc3QgPz8gXCJcIik/Lm9yaWdpbiB8fFxuICAgICAgXCJ3b3Jrc3BhY2VcIlxuICAgICk7XG4gIH1cblxuICAvKiogTGlzdHMgZXZlcnkgTGFrZWJveCB2aXNpYmxlIHRvIHRoZSBjYWxsZXIsIGZvbGxvd2luZyBwYWdpbmF0aW9uLiAqL1xuICBhc3luYyBsaXN0KHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94RW50cnlbXT4ge1xuICAgIGNvbnN0IGVudHJpZXM6IExha2Vib3hFbnRyeVtdID0gW107XG4gICAgbGV0IHBhZ2VUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHBhZ2Vfc2l6ZTogXCIxMDBcIiB9KTtcbiAgICAgIGlmIChwYWdlVG9rZW4pIHF1ZXJ5LnNldChcInBhZ2VfdG9rZW5cIiwgcGFnZVRva2VuKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gTGFrZWJveExpc3RTY2hlbWEucGFyc2UoXG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIkdFVFwiLCBgJHtMQUtFQk9YRVNfUEFUSH0/JHtxdWVyeX1gLCB1bmRlZmluZWQsIHNpZ25hbCksXG4gICAgICApO1xuICAgICAgZW50cmllcy5wdXNoKC4uLnJlc3BvbnNlLnNhbmRib3hlcyk7XG4gICAgICBwYWdlVG9rZW4gPSByZXNwb25zZS5uZXh0UGFnZVRva2VuIHx8IHVuZGVmaW5lZDtcbiAgICB9IHdoaWxlIChwYWdlVG9rZW4pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgLyoqIFJldHVybnMgb25lIExha2Vib3ggYnkgSUQuICovXG4gIGFzeW5jIGdldChpZDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gICAgcmV0dXJuIExha2Vib3hFbnRyeVNjaGVtYS5wYXJzZShhd2FpdCB0aGlzLnJlcXVlc3QoXCJHRVRcIiwgbGFrZWJveFBhdGgoaWQpLCB1bmRlZmluZWQsIHNpZ25hbCkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBMYWtlYm94IHdpdGggYSBEYXRhYnJpY2tzLWFzc2lnbmVkIGRpc3BsYXkgbmFtZS4gKi9cbiAgYXN5bmMgY3JlYXRlKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94RW50cnk+IHtcbiAgICByZXR1cm4gTGFrZWJveEVudHJ5U2NoZW1hLnBhcnNlKFxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiUE9TVFwiLCBMQUtFQk9YRVNfUEFUSCwgeyBzYW5kYm94OiB7fSB9LCBzaWduYWwpLFxuICAgICk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgcGxhdGZvcm0gaWRsZSB0aW1lb3V0IHRoYXQgc3RvcHMgdGhlIExha2Vib3ggYWZ0ZXIgaW5hY3Rpdml0eS4gKi9cbiAgYXN5bmMgc2V0SWRsZVRpbWVvdXQoaWQ6IHN0cmluZywgc2Vjb25kczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gICAgcmV0dXJuIExha2Vib3hFbnRyeVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcbiAgICAgICAgXCJQQVRDSFwiLFxuICAgICAgICBsYWtlYm94UGF0aChpZCksXG4gICAgICAgIHsgc2FuZGJveF9pZDogaWQsIGlkbGVfdGltZW91dDogYCR7c2Vjb25kc31zYCB9LFxuICAgICAgICBzaWduYWwsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKiogUGVybWFuZW50bHkgZGVsZXRlcyBvbmUgTGFrZWJveCBhbmQgaXRzIHBlcnNpc3RlbnQgaG9tZS4gKi9cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiREVMRVRFXCIsIGxha2Vib3hQYXRoKGlkKSwgdW5kZWZpbmVkLCBzaWduYWwpO1xuICB9XG5cbiAgLyoqIFJlcXVlc3RzIGEgc3RhcnQgYW5kIHJldHVybnMgdGhlIHVwZGF0ZWQgcmVjb3JkLiAqL1xuICBhc3luYyBzdGFydChpZDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gICAgcmV0dXJuIExha2Vib3hFbnRyeVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIlBPU1RcIiwgYCR7bGFrZWJveFBhdGgoaWQpfS9zdGFydGAsIHsgc2FuZGJveF9pZDogaWQgfSwgc2lnbmFsKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlcXVlc3RzIGEgc3RvcCBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCByZWNvcmQuICovXG4gIGFzeW5jIHN0b3AoaWQ6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICAgIHJldHVybiBMYWtlYm94RW50cnlTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCJQT1NUXCIsIGAke2xha2Vib3hQYXRoKGlkKX0vc3RvcGAsIHsgc2FuZGJveF9pZDogaWQgfSwgc2lnbmFsKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIExpc3RzIFNTSCBwdWJsaWMga2V5cyByZWdpc3RlcmVkIGJ5IHRoZSBjYWxsZXIuICovXG4gIGFzeW5jIGxpc3RLZXlzKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94U3NoS2V5W10+IHtcbiAgICByZXR1cm4gTGFrZWJveFNzaEtleUxpc3RTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCJHRVRcIiwgU1NIX0tFWVNfUEFUSCwgdW5kZWZpbmVkLCBzaWduYWwpLFxuICAgICkuc3NoS2V5cztcbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYW4gU1NIIHB1YmxpYyBrZXkgYW5kIHJldHVybnMgdGhlIERhdGFicmlja3Mga2V5IHJlY29yZC4gKi9cbiAgYXN5bmMgcmVnaXN0ZXJLZXkocHVibGljS2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hTc2hLZXk+IHtcbiAgICByZXR1cm4gTGFrZWJveFNzaEtleVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIlBPU1RcIiwgU1NIX0tFWVNfUEFUSCwgeyBwdWJsaWNfa2V5OiBwdWJsaWNLZXksIG5hbWUgfSwgc2lnbmFsKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0KFxuICAgIG1ldGhvZDogUmVxdWVzdE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgYXdhaXQgdGhpcy5hdXRoLmVuc3VyZVJlc29sdmVkPy4oKTtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5hdXRoLmhvc3Q/LnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gICAgaWYgKCFob3N0KSB0aHJvdyBuZXcgRXJyb3IoXCJMYWtlYm94IFJFU1QgcmVxdWVzdHMgcmVxdWlyZSBhIERhdGFicmlja3Mgd29ya3NwYWNlIGhvc3RcIik7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KTtcbiAgICBjb25zdCB3b3Jrc3BhY2VJZCA9IHRoaXMuYXV0aC53b3Jrc3BhY2VJZDtcbiAgICBpZiAod29ya3NwYWNlSWQgJiYgd29ya3NwYWNlSWQgIT09IFwibm9uZVwiKSBoZWFkZXJzLnNldChPUkdfSURfSEVBREVSLCB3b3Jrc3BhY2VJZCk7XG4gICAgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkgaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIGF3YWl0IHRoaXMuYXV0aC5hdXRoZW50aWNhdGUoaGVhZGVycyk7XG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHsgbWV0aG9kLCBwYXRoOiBwYXRoLnNwbGl0KFwiP1wiKVswXSwgaGFzUGF5bG9hZDogcGF5bG9hZCAhPT0gdW5kZWZpbmVkIH07XG4gICAgbG9nZ2VyLmRlYnVnKFwibGFrZWJveCBSRVNUIHJlcXVlc3RcIiwgbWV0YWRhdGEpO1xuICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7aG9zdH0ke3BhdGh9YCwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIC4uLihwYXlsb2FkID09PSB1bmRlZmluZWQgPyB7fSA6IHsgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkgfSksXG4gICAgICAgIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwibGFrZWJveCBSRVNUIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VCb2R5KHRleHQpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICAgIGVycm9yX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgICByZXF1ZXN0X2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIH0pXG4gICAgICAgIC5wYXNzdGhyb3VnaCgpXG4gICAgICAgIC5zYWZlUGFyc2UoYm9keSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gcmVjb3JkLnN1Y2Nlc3MgPyByZWNvcmQuZGF0YSA6IHt9O1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgTGFrZWJveEFwaUVycm9yKFxuICAgICAgICBkZXRhaWxzLm1lc3NhZ2UgfHwgYExha2Vib3ggcmVxdWVzdCBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIGRldGFpbHMuZXJyb3JfY29kZSxcbiAgICAgICAgZGV0YWlscy5yZXF1ZXN0X2lkID8/IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1yZXF1ZXN0LWlkXCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICBsb2dnZXIud2FybihcImxha2Vib3ggUkVTVCByZXF1ZXN0IGZhaWxlZFwiLCB7XG4gICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgZXJyb3JDb2RlOiBlcnJvci5lcnJvckNvZGUsXG4gICAgICAgIHJlcXVlc3RJZDogZXJyb3IucmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFwibGFrZWJveCBSRVNUIHJlc3BvbnNlXCIsIHsgLi4ubWV0YWRhdGEsIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQgfSk7XG4gICAgcmV0dXJuIGJvZHkgPz8ge307XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW4gQVBJIGVycm9yIGluZGljYXRlcyB0aGF0IExha2Vib3hlcyBhcmUgdW5hdmFpbGFibGUgaW4gdGhlXG4gKiB3b3Jrc3BhY2Ugb3IgcmVnaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWtlYm94VW5hdmFpbGFibGUoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBMYWtlYm94QXBpRXJyb3IpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAoXG4gICAgZXJyb3Iuc3RhdHVzID09PSA0MDQgfHxcbiAgICBlcnJvci5zdGF0dXMgPT09IDUwMyB8fFxuICAgIC9ub3QgYXZhaWxhYmxlIGluIHlvdXIgcmVnaW9uL2kudGVzdChlcnJvci5tZXNzYWdlKVxuICApO1xufVxuXG5mdW5jdGlvbiBsYWtlYm94UGF0aChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0xBS0VCT1hFU19QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YDtcbn1cblxuZnVuY3Rpb24gcGFyc2VCb2R5KHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpIGFzIHVua25vd247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1lc3NhZ2U6IHRleHQuc2xpY2UoMCwgNF8wMDApIH07XG4gIH1cbn1cbiJdfQ==
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFDeEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxZQUFZLFlBQVksQ0FBQztBQUNuRCxNQUFNLGFBQWEsR0FBRyxHQUFHLFlBQVksV0FBVyxDQUFDO0FBQ2pELE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBQzVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQztLQUNoQyxNQUFNLENBQUM7SUFDTixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxvREFBb0QsQ0FBQztJQUNwRixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQztJQUNyRixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUNwRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0RCxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztJ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Q3RELE9BQU8sQ0FDTCxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUc7UUFDcEIsS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHO1FBQ3BCLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsRUFBVTtJQUM3QixPQUFPLEdBQUcsY0FBYyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuQyxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFZLENBQUM7SUFDckMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZywgdG9FcnJvciwgdXJsQnVpbGRlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBMQUtFQk9YX1JPT1QgPSBcIi9hcGkvMi4wL2xha2Vib3hcIjtcbmNvbnN0IExBS0VCT1hFU19QQVRIID0gYCR7TEFLRUJPWF9ST09UfS9zYW5kYm94ZXNgO1xuY29uc3QgU1NIX0tFWVNfUEFUSCA9IGAke0xBS0VCT1hfUk9PVH0vc3NoLWtleXNgO1xuY29uc3QgT1JHX0lEX0hFQURFUiA9IFwiWC1EYXRhYnJpY2tzLU9yZy1JZFwiO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImxha2Vib3g6cmVzdFwiKTtcblxuZXhwb3J0IGNvbnN0IExha2Vib3hFbnRyeVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgc2FuZGJveElkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTGFrZWJveCBpZGVudGlmaWVyOyBhbHNvIHRoZSBTU0ggZ2F0ZXdheSB1c2VybmFtZS5cIiksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVXBzdHJlYW0gbGlmZWN5Y2xlIHN0YXR1cywgc3VjaCBhcyBSdW5uaW5nIG9yIFN0b3BwZWQuXCIpLFxuICAgIGdhdGV3YXlIb3N0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTU0ggZ2F0ZXdheSBob3N0bmFtZS5cIiksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRGlzcGxheSBsYWJlbC5cIiksXG4gICAgY3JlYXRlVGltZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQ3JlYXRpb24gdGltZS5cIiksXG4gICAgbGFzdFN0YXJ0VGltZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTGFzdCBzdGFydCB0aW1lLlwiKSxcbiAgICBpZGxlVGltZW91dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUGxhdGZvcm0gaWRsZSB0aW1lb3V0LCBzdWNoIGFzIDYwMHMuXCIpLFxuICAgIG5vQXV0b3N0b3A6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJXaGV0aGVyIGlkbGUgYXV0by1zdG9wIGlzIGRpc2FibGVkLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiTGFrZWJveCByZWNvcmQgcmV0dXJuZWQgYnkgdGhlIERhdGFicmlja3MgTGFrZWJveCBSRVNUIEFQSS5cIik7XG4vKiogTGFrZWJveCByZWNvcmQgcmV0dXJuZWQgYnkgdGhlIERhdGFicmlja3MgTGFrZWJveCBSRVNUIEFQSS4gKi9cbmV4cG9ydCB0eXBlIExha2Vib3hFbnRyeSA9IHouaW5mZXI8dHlwZW9mIExha2Vib3hFbnRyeVNjaGVtYT47XG5cbmNvbnN0IExha2Vib3hMaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzYW5kYm94ZXM6IHouYXJyYXkoTGFrZWJveEVudHJ5U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgICBuZXh0UGFnZVRva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgTGFrZWJveFNzaEtleVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAga2V5SGFzaDogei5zdHJpbmcoKS5kZXNjcmliZShcIlJlZ2lzdGVyZWQgcHVibGljIGtleSBoYXNoLlwiKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJLZXkgbGFiZWwuXCIpLFxuICAgIGdhdGV3YXlIb3N0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJHYXRld2F5IGhvc3RuYW1lIGZvciB0aGlzIGtleS5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIlJlZ2lzdGVyZWQgU1NIIGtleSByZXR1cm5lZCBieSB0aGUgRGF0YWJyaWNrcyBMYWtlYm94IFJFU1QgQVBJLlwiKTtcbi8qKiBSZWdpc3RlcmVkIFNTSCBrZXkgcmV0dXJuZWQgYnkgdGhlIERhdGFicmlja3MgTGFrZWJveCBSRVNUIEFQSS4gKi9cbmV4cG9ydCB0eXBlIExha2Vib3hTc2hLZXkgPSB6LmluZmVyPHR5cGVvZiBMYWtlYm94U3NoS2V5U2NoZW1hPjtcblxuY29uc3QgTGFrZWJveFNzaEtleUxpc3RTY2hlbWEgPSB6XG4gIC5vYmplY3QoeyBzc2hLZXlzOiB6LmFycmF5KExha2Vib3hTc2hLZXlTY2hlbWEpLmRlZmF1bHQoW10pIH0pXG4gIC5wYXNzdGhyb3VnaCgpO1xuXG4vKipcbiAqIFdvcmtzcGFjZSBjcmVkZW50aWFscyBmb3IgTGFrZWJveCBSRVNUIGNhbGxzLlxuICpcbiAqIFRoZSBEYXRhYnJpY2tzIFNESyBhbmQgQXBwS2l0IGBXb3Jrc3BhY2VDbGllbnQuY29uZmlnYCBzYXRpc2Z5IHRoaXMgc2hhcGUsIGFzXG4gKiBkb2VzIGEgc21hbGwgYWRhcHRlciBvdmVyIGBAZGJ4LXRvb2xzL2F1dGhgLiBMYWtlYm94IGxpZmVjeWNsZSBjYWxscyBtdXN0IHVzZVxuICogdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCwgbmV2ZXIgcmVxdWVzdC1zY29wZWQgT0JPIGNyZWRlbnRpYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2Vib3hBdXRoIHtcbiAgLyoqIFdvcmtzcGFjZSBVUkwuICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBOdW1lcmljIHdvcmtzcGFjZSBpZGVudGlmaWVyLCB3aGVuIGtub3duLiAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VJZD86IHN0cmluZztcbiAgLyoqIFJlc29sdmVzIGxhenkgY29uZmlndXJhdGlvbiBiZWZvcmUgYGhvc3RgIGlzIHJlYWQuICovXG4gIGVuc3VyZVJlc29sdmVkPygpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogQWRkcyBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIHRvIG9uZSByZXF1ZXN0LiAqL1xuICBhdXRoZW50aWNhdGUoaGVhZGVyczogSGVhZGVycyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBFcnJvciByYWlzZWQgZm9yIGEgbm9uLXN1Y2Nlc3MgTGFrZWJveCBSRVNUIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGNsYXNzIExha2Vib3hBcGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyLFxuICAgIHJlYWRvbmx5IGVycm9yQ29kZT86IHN0cmluZyxcbiAgICByZWFkb25seSByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiTGFrZWJveEFwaUVycm9yXCI7XG4gIH1cbn1cblxudHlwZSBSZXF1ZXN0TWV0aG9kID0gXCJHRVRcIiB8IFwiUE9TVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIjtcblxuLyoqXG4gKiBSRVNUIGNsaWVudCBmb3IgRGF0YWJyaWNrcyBMYWtlYm94ZXMgYW5kIHJlZ2lzdGVyZWQgU1NIIGtleXMuXG4gKlxuICogUmVzcG9uc2VzIGFyZSB2YWxpZGF0ZWQgYmVmb3JlIHRoZXkgcmVhY2ggY2FsbGVycy4gRGlhZ25vc3RpY3MgbmV2ZXIgaW5jbHVkZVxuICogdG9rZW5zIG9yIHJlcXVlc3QgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIExha2Vib3hDbGllbnQge1xuICAvKiogQ3JlYXRlcyBhIGNsaWVudCBmb3Igb25lIHdvcmtzcGFjZSBjcmVkZW50aWFsLiAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF1dGg6IExha2Vib3hBdXRoKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaWRlbnRpZmllciwgb3IgdGhlIHdvcmtzcGFjZSBvcmlnaW4gd2hlbiB0aGUgaWRlbnRpZmllciBpcyB1bmtub3duLiAqL1xuICBhc3luYyB3b3Jrc3BhY2VTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuYXV0aC5lbnN1cmVSZXNvbHZlZD8uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb2Nlc3MuZW52LkRBVEFCUklDS1NfV09SS1NQQUNFX0lEPy50cmltKCkgfHxcbiAgICAgIHRoaXMuYXV0aC53b3Jrc3BhY2VJZD8udHJpbSgpIHx8XG4gICAgICB1cmxCdWlsZGVyKHRoaXMuYXV0aC5ob3N0ID8/IFwiXCIpPy5vcmlnaW4gfHxcbiAgICAgIFwid29ya3NwYWNlXCJcbiAgICApO1xuICB9XG5cbiAgLyoqIExpc3RzIGV2ZXJ5IExha2Vib3ggdmlzaWJsZSB0byB0aGUgY2FsbGVyLCBmb2xsb3dpbmcgcGFnaW5hdGlvbi4gKi9cbiAgYXN5bmMgbGlzdChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveEVudHJ5W10+IHtcbiAgICBjb25zdCBlbnRyaWVzOiBMYWtlYm94RW50cnlbXSA9IFtdO1xuICAgIGxldCBwYWdlVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkbyB7XG4gICAgICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBwYWdlX3NpemU6IFwiMTAwXCIgfSk7XG4gICAgICBpZiAocGFnZVRva2VuKSBxdWVyeS5zZXQoXCJwYWdlX3Rva2VuXCIsIHBhZ2VUb2tlbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IExha2Vib3hMaXN0U2NoZW1hLnBhcnNlKFxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCJHRVRcIiwgYCR7TEFLRUJPWEVTX1BBVEh9PyR7cXVlcnl9YCwgdW5kZWZpbmVkLCBzaWduYWwpLFxuICAgICAgKTtcbiAgICAgIGVudHJpZXMucHVzaCguLi5yZXNwb25zZS5zYW5kYm94ZXMpO1xuICAgICAgcGFnZVRva2VuID0gcmVzcG9uc2UubmV4dFBhZ2VUb2tlbiB8fCB1bmRlZmluZWQ7XG4gICAgfSB3aGlsZSAocGFnZVRva2VuKTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIG9uZSBMYWtlYm94IGJ5IElELiAqL1xuICBhc3luYyBnZXQoaWQ6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICAgIHJldHVybiBMYWtlYm94RW50cnlTY2hlbWEucGFyc2UoYXdhaXQgdGhpcy5yZXF1ZXN0KFwiR0VUXCIsIGxha2Vib3hQYXRoKGlkKSwgdW5kZWZpbmVkLCBzaWduYWwpKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgTGFrZWJveCB3aXRoIGEgRGF0YWJyaWNrcy1hc3NpZ25lZCBkaXNwbGF5IG5hbWUuICovXG4gIGFzeW5jIGNyZWF0ZShzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveEVudHJ5PiB7XG4gICAgcmV0dXJuIExha2Vib3hFbnRyeVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIlBPU1RcIiwgTEFLRUJPWEVTX1BBVEgsIHsgc2FuZGJveDoge30gfSwgc2lnbmFsKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIHBsYXRmb3JtIGlkbGUgdGltZW91dCB0aGF0IHN0b3BzIHRoZSBMYWtlYm94IGFmdGVyIGluYWN0aXZpdHkuICovXG4gIGFzeW5jIHNldElkbGVUaW1lb3V0KGlkOiBzdHJpbmcsIHNlY29uZHM6IG51bWJlciwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICAgIHJldHVybiBMYWtlYm94RW50cnlTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXG4gICAgICAgIFwiUEFUQ0hcIixcbiAgICAgICAgbGFrZWJveFBhdGgoaWQpLFxuICAgICAgICB7IHNhbmRib3hfaWQ6IGlkLCBpZGxlX3RpbWVvdXQ6IGAke3NlY29uZHN9c2AgfSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFBlcm1hbmVudGx5IGRlbGV0ZXMgb25lIExha2Vib3ggYW5kIGl0cyBwZXJzaXN0ZW50IGhvbWUuICovXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIkRFTEVURVwiLCBsYWtlYm94UGF0aChpZCksIHVuZGVmaW5lZCwgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKiBSZXF1ZXN0cyBhIHN0YXJ0IGFuZCByZXR1cm5zIHRoZSB1cGRhdGVkIHJlY29yZC4gKi9cbiAgYXN5bmMgc3RhcnQoaWQ6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hFbnRyeT4ge1xuICAgIHJldHVybiBMYWtlYm94RW50cnlTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCJQT1NUXCIsIGAke2xha2Vib3hQYXRoKGlkKX0vc3RhcnRgLCB7IHNhbmRib3hfaWQ6IGlkIH0sIHNpZ25hbCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZXF1ZXN0cyBhIHN0b3AgYW5kIHJldHVybnMgdGhlIHVwZGF0ZWQgcmVjb3JkLiAqL1xuICBhc3luYyBzdG9wKGlkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94RW50cnk+IHtcbiAgICByZXR1cm4gTGFrZWJveEVudHJ5U2NoZW1hLnBhcnNlKFxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiUE9TVFwiLCBgJHtsYWtlYm94UGF0aChpZCl9L3N0b3BgLCB7IHNhbmRib3hfaWQ6IGlkIH0sIHNpZ25hbCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBMaXN0cyBTU0ggcHVibGljIGtleXMgcmVnaXN0ZXJlZCBieSB0aGUgY2FsbGVyLiAqL1xuICBhc3luYyBsaXN0S2V5cyhzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveFNzaEtleVtdPiB7XG4gICAgcmV0dXJuIExha2Vib3hTc2hLZXlMaXN0U2NoZW1hLnBhcnNlKFxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiR0VUXCIsIFNTSF9LRVlTX1BBVEgsIHVuZGVmaW5lZCwgc2lnbmFsKSxcbiAgICApLnNzaEtleXM7XG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIGFuIFNTSCBwdWJsaWMga2V5IGFuZCByZXR1cm5zIHRoZSBEYXRhYnJpY2tzIGtleSByZWNvcmQuICovXG4gIGFzeW5jIHJlZ2lzdGVyS2V5KHB1YmxpY0tleTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94U3NoS2V5PiB7XG4gICAgcmV0dXJuIExha2Vib3hTc2hLZXlTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCJQT1NUXCIsIFNTSF9LRVlTX1BBVEgsIHsgcHVibGljX2tleTogcHVibGljS2V5LCBuYW1lIH0sIHNpZ25hbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IFJlcXVlc3RNZXRob2QsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGF3YWl0IHRoaXMuYXV0aC5lbnN1cmVSZXNvbHZlZD8uKCk7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuYXV0aC5ob3N0Py5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICAgIGlmICghaG9zdCkgdGhyb3cgbmV3IEVycm9yKFwiTGFrZWJveCBSRVNUIHJlcXVlc3RzIHJlcXVpcmUgYSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBob3N0XCIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSk7XG4gICAgY29uc3Qgd29ya3NwYWNlSWQgPSB0aGlzLmF1dGgud29ya3NwYWNlSWQ7XG4gICAgaWYgKHdvcmtzcGFjZUlkICYmIHdvcmtzcGFjZUlkICE9PSBcIm5vbmVcIikgaGVhZGVycy5zZXQoT1JHX0lEX0hFQURFUiwgd29ya3NwYWNlSWQpO1xuICAgIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICBhd2FpdCB0aGlzLmF1dGguYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB7IG1ldGhvZCwgcGF0aDogcGF0aC5zcGxpdChcIj9cIilbMF0sIGhhc1BheWxvYWQ6IHBheWxvYWQgIT09IHVuZGVmaW5lZCB9O1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxha2Vib3ggUkVTVCByZXF1ZXN0XCIsIG1ldGFkYXRhKTtcbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2hvc3R9JHtwYXRofWAsIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICAuLi4ocGF5bG9hZCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpIH0pLFxuICAgICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihcImxha2Vib3ggUkVTVCByZXF1ZXN0IGZhaWxlZFwiLCB7XG4gICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZUJvZHkodGV4dCk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgcmVjb3JkID0gelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgICAgZXJyb3JfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICAgIHJlcXVlc3RfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLnBhc3N0aHJvdWdoKClcbiAgICAgICAgLnNhZmVQYXJzZShib2R5KTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSByZWNvcmQuc3VjY2VzcyA/IHJlY29yZC5kYXRhIDoge307XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBMYWtlYm94QXBpRXJyb3IoXG4gICAgICAgIGRldGFpbHMubWVzc2FnZSB8fCBgTGFrZWJveCByZXF1ZXN0IGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgZGV0YWlscy5lcnJvcl9jb2RlLFxuICAgICAgICBkZXRhaWxzLnJlcXVlc3RfaWQgPz8gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LXJlcXVlc3QtaWRcIikgPz8gdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci53YXJuKFwibGFrZWJveCBSRVNUIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICBlcnJvckNvZGU6IGVycm9yLmVycm9yQ29kZSxcbiAgICAgICAgcmVxdWVzdElkOiBlcnJvci5yZXF1ZXN0SWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXCJsYWtlYm94IFJFU1QgcmVzcG9uc2VcIiwgeyAuLi5tZXRhZGF0YSwgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCB9KTtcbiAgICByZXR1cm4gYm9keSA/PyB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhbiBBUEkgZXJyb3IgaW5kaWNhdGVzIHRoYXQgTGFrZWJveGVzIGFyZSB1bmF2YWlsYWJsZSBpbiB0aGVcbiAqIHdvcmtzcGFjZSBvciByZWdpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xha2Vib3hVbmF2YWlsYWJsZShlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIExha2Vib3hBcGlFcnJvcikpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChcbiAgICBlcnJvci5zdGF0dXMgPT09IDQwNCB8fFxuICAgIGVycm9yLnN0YXR1cyA9PT0gNTAzIHx8XG4gICAgL25vdCBhdmFpbGFibGUgaW4geW91ciByZWdpb24vaS50ZXN0KGVycm9yLm1lc3NhZ2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGxha2Vib3hQYXRoKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7TEFLRUJPWEVTX1BBVEh9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gO1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvZHkodGV4dDogc3RyaW5nKTogdW5rbm93biB7XG4gIGlmICghdGV4dC50cmltKCkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCkgYXMgdW5rbm93bjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWVzc2FnZTogdGV4dC5zbGljZSgwLCA0XzAwMCkgfTtcbiAgfVxufVxuIl19
@@ -1,7 +1,6 @@
1
1
  import type { Duplex } from "node:stream";
2
- import { SshCommand } from "./_ssh.ts";
2
+ import { SshCommand } from "./ssh.ts";
3
3
  import type { Ssh2PatchMode, SshTransportMode } from "./transport.ts";
4
- export { SshCommand, sshCommandScript, type SshCommandIdentity } from "./_ssh.ts";
5
4
  /** Connection, key, host-verification, and command settings for one SSH machine. */
6
5
  export interface SshSessionOptions {
7
6
  /** Databricks Lakebox gateway hostname. */
@@ -33,7 +32,7 @@ export interface SshSessionOptions {
33
32
  }
34
33
  /**
35
34
  * Verified SSH session that delegates commands and remote TCP connections to
36
- * the transport selected by `src/_ssh.ts`.
35
+ * the transport selected by `src/ssh.ts`.
37
36
  *
38
37
  * The initial ssh2 handshake verifies and persists the Databricks gateway host
39
38
  * key. The selected transport then starts its pooled command and forwarding
@@ -1,10 +1,9 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { isIP } from "node:net";
3
- import { errorUtils, log } from "@dbx-tools/shared-core";
3
+ import { log, toError } from "@dbx-tools/shared-core";
4
4
  import ssh2 from "ssh2";
5
5
  import { z } from "zod";
6
- import { createSshTransport, SshCommand, sshCommandScript, } from "./_ssh.js";
7
- export { SshCommand, sshCommandScript } from "./_ssh.js";
6
+ import { createSshTransport, SshCommand, sshCommandScript, } from "./ssh.js";
8
7
  const { Client } = ssh2;
9
8
  const logger = log.logger("lakebox:ssh");
10
9
  const SERVICE_DIRECT_SUFFIX = ".service-direct.cloud.databricks.com";
@@ -23,7 +22,7 @@ const DnsResponseSchema = z
23
22
  .describe("Google DNS-over-HTTPS JSON response.");
24
23
  /**
25
24
  * Verified SSH session that delegates commands and remote TCP connections to
26
- * the transport selected by `src/_ssh.ts`.
25
+ * the transport selected by `src/ssh.ts`.
27
26
  *
28
27
  * The initial ssh2 handshake verifies and persists the Databricks gateway host
29
28
  * key. The selected transport then starts its pooled command and forwarding
@@ -76,7 +75,7 @@ export class SshSession {
76
75
  catch (resolveError) {
77
76
  logger.warn("public Lakebox gateway resolution failed", {
78
77
  host: this.options.host,
79
- error: errorUtils.toError(resolveError),
78
+ error: toError(resolveError),
80
79
  });
81
80
  throw error;
82
81
  }
@@ -274,7 +273,7 @@ export class SshSession {
274
273
  for (const result of results) {
275
274
  if (result.status === "rejected") {
276
275
  logger.warn("failed to close SSH session resource", {
277
- error: errorUtils.toError(result.reason),
276
+ error: toError(result.reason),
278
277
  });
279
278
  }
280
279
  }
@@ -306,4 +305,4 @@ function shouldResolvePublicGateway(host, error) {
306
305
  error?.cause?.code;
307
306
  return code === "EHOSTUNREACH" || code === "ENETUNREACH" || code === "ETIMEDOUT";
308
307
  }
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sSUFBbUMsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixnQkFBZ0IsR0FHakIsTUFBTSxXQUFXLENBQUM7QUFHbkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSxXQUFXLENBQUM7QUFFbEYsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0scUJBQXFCLEdBQUcsc0NBQXNDLENBQUM7QUFFckUsTUFBTSxlQUFlLEdBQUcsQ0FBQztLQUN0QixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztJQUMxRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztDQUMvQyxDQUFDO0tBQ0QsV0FBVyxFQUFFO0tBQ2IsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFFakQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDO0tBQ3hCLE1BQU0sQ0FBQztJQUNOLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFD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LElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgaXNJUCB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHR5cGUgeyBEdXBsZXggfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgc3NoMiwgeyB0eXBlIENsaWVudCBhcyBTc2gyQ2xpZW50IH0gZnJvbSBcInNzaDJcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBjcmVhdGVTc2hUcmFuc3BvcnQsXG4gIFNzaENvbW1hbmQsXG4gIHNzaENvbW1hbmRTY3JpcHQsXG4gIHR5cGUgU3NoQ29tbWFuZElkZW50aXR5LFxuICB0eXBlIFNzaFRyYW5zcG9ydCxcbn0gZnJvbSBcIi4vX3NzaC50c1wiO1xuaW1wb3J0IHR5cGUgeyBTc2gyUGF0Y2hNb2RlLCBTc2hUcmFuc3BvcnRNb2RlIH0gZnJvbSBcIi4vdHJhbnNwb3J0LnRzXCI7XG5cbmV4cG9ydCB7IFNzaENvbW1hbmQsIHNzaENvbW1hbmRTY3JpcHQsIHR5cGUgU3NoQ29tbWFuZElkZW50aXR5IH0gZnJvbSBcIi4vX3NzaC50c1wiO1xuXG5jb25zdCB7IENsaWVudCB9ID0gc3NoMjtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJsYWtlYm94OnNzaFwiKTtcbmNvbnN0IFNFUlZJQ0VfRElSRUNUX1NVRkZJWCA9IFwiLnNlcnZpY2UtZGlyZWN0LmNsb3VkLmRhdGFicmlja3MuY29tXCI7XG5cbmNvbnN0IERuc0Fuc3dlclNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZShcIkROUyByZWNvcmQgdHlwZSBudW1iZXIuXCIpLFxuICAgIGRhdGE6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJETlMgcmVjb3JkIHZhbHVlLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiT25lIEROUy1vdmVyLUhUVFBTIGFuc3dlciByZWNvcmQuXCIpO1xuXG5jb25zdCBEbnNSZXNwb25zZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgQW5zd2VyOiB6LmFycmF5KERuc0Fuc3dlclNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIlJlc29sdmVkIEROUyBhbnN3ZXIgcmVjb3Jkcy5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIkdvb2dsZSBETlMtb3Zlci1IVFRQUyBKU09OIHJlc3BvbnNlLlwiKTtcblxuLyoqIENvbm5lY3Rpb24sIGtleSwgaG9zdC12ZXJpZmljYXRpb24sIGFuZCBjb21tYW5kIHNldHRpbmdzIGZvciBvbmUgU1NIIG1hY2hpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNzaFNlc3Npb25PcHRpb25zIHtcbiAgLyoqIERhdGFicmlja3MgTGFrZWJveCBnYXRld2F5IGhvc3RuYW1lLiAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBTU0ggZ2F0ZXdheSBwb3J0LiAqL1xuICBwb3J0OiBudW1iZXI7XG4gIC8qKiBTU0ggdXNlcm5hbWUgYWNjZXB0ZWQgYnkgdGhlIGdhdGV3YXk6IHRoZSBMYWtlYm94IElELiAqL1xuICB1c2VybmFtZTogc3RyaW5nO1xuICAvKiogSW4tbWVtb3J5IHByaXZhdGUga2V5IHVzZWQgZm9yIHRoZSB2ZXJpZmllZCBTU0ggaGFuZHNoYWtlIGFuZCBzc2gyIGZhbGxiYWNrLiAqL1xuICBwcml2YXRlS2V5OiBzdHJpbmc7XG4gIC8qKiBQcml2YXRlIGtleSBmaWxlIHVzZWQgYnkgbmF0aXZlIE9wZW5TU0guICovXG4gIHByaXZhdGVLZXlQYXRoOiBzdHJpbmc7XG4gIC8qKiBEZWRpY2F0ZWQgT3BlblNTSCBrbm93bi1ob3N0IGZpbGUgZm9yIHRoaXMgd29ya3NwYWNlLCB1c2VyLCBhbmQgZ2F0ZXdheS4gKi9cbiAga25vd25Ib3N0c1BhdGg6IHN0cmluZztcbiAgLyoqIENvbm5lY3Rpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIGNvbm5lY3RUaW1lb3V0TXM6IG51bWJlcjtcbiAgLyoqIFNTSCB0cmFuc3BvcnQgc2VsZWN0ZWQgZm9yIHRoaXMgc2Vzc2lvbi4gKi9cbiAgc3NoVHJhbnNwb3J0OiBTc2hUcmFuc3BvcnRNb2RlO1xuICAvKiogc3NoMiBtaXNzaW5nLWV4ZWMtcmVwbHkgcGF0Y2ggcG9saWN5LiAqL1xuICBzc2gyUGF0Y2g6IFNzaDJQYXRjaE1vZGU7XG4gIC8qKiBQcmV2aW91c2x5IHRydXN0ZWQgU0hBLTI1NiBob3N0LWtleSBmaW5nZXJwcmludC4gKi9cbiAga25vd25Ib3N0Pzogc3RyaW5nO1xuICAvKiogUGVyc2lzdHMgdGhlIGFjY2VwdGVkIGhvc3Qga2V5IGZvciBib3RoIHNzaDIgYW5kIG5hdGl2ZSBPcGVuU1NILiAqL1xuICByZW1lbWJlckhvc3Q/OiAoZmluZ2VycHJpbnQ6IHN0cmluZywga2V5OiBCdWZmZXIpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBOYXRpdmUgT3BlblNTSCBleGVjdXRhYmxlLiBEZWZhdWx0cyB0byBgc3NoYCBvbiBgUEFUSGAuICovXG4gIHNzaENvbW1hbmQ/OiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlcyBwdWJsaWMgZmFsbGJhY2sgYWRkcmVzc2VzIGZvciBhIHNlcnZpY2UtZGlyZWN0IGdhdGV3YXkuICovXG4gIHJlc29sdmVQdWJsaWNBZGRyZXNzZXM/OiAoaG9zdDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZ1tdPjtcbn1cblxuLyoqXG4gKiBWZXJpZmllZCBTU0ggc2Vzc2lvbiB0aGF0IGRlbGVnYXRlcyBjb21tYW5kcyBhbmQgcmVtb3RlIFRDUCBjb25uZWN0aW9ucyB0b1xuICogdGhlIHRyYW5zcG9ydCBzZWxlY3RlZCBieSBgc3JjL19zc2gudHNgLlxuICpcbiAqIFRoZSBpbml0aWFsIHNzaDIgaGFuZHNoYWtlIHZlcmlmaWVzIGFuZCBwZXJzaXN0cyB0aGUgRGF0YWJyaWNrcyBnYXRld2F5IGhvc3RcbiAqIGtleS4gVGhlIHNlbGVjdGVkIHRyYW5zcG9ydCB0aGVuIHN0YXJ0cyBpdHMgcG9vbGVkIGNvbW1hbmQgYW5kIGZvcndhcmRpbmdcbiAqIHJlc291cmNlcy4gUmVzb2x2ZWQgdHJhbnNwb3J0IGFuZCBwYXRjaCBwb2xpY3kgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHZlcmlmaWVkXG4gKiBjbGllbnQgc2VlZHMgdGhlIHNzaDIgcG9vbCBvciBpcyByZXBsYWNlZCBieSBuYXRpdmUgT3BlblNTSCBDb250cm9sTWFzdGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNzaFNlc3Npb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZUNvbW1hbmRzID0gbmV3IFNldDxTc2hDb21tYW5kPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdDbGllbnRzID0gbmV3IFNldDxTc2gyQ2xpZW50PigpO1xuICBwcml2YXRlIHRyYW5zcG9ydD86IFNzaFRyYW5zcG9ydDtcbiAgcHJpdmF0ZSBjb25uZWN0aW5nPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBjbG9zaW5nPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBrbm93bkhvc3Q/OiBzdHJpbmc7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG5cbiAgLyoqIENyZWF0ZXMgYSBkaXNjb25uZWN0ZWQgc2Vzc2lvbi4gQ2FsbCB7QGxpbmsgY29ubmVjdH0gb3IgYW5vdGhlciBvcGVyYXRpb24gdG8gY29ubmVjdC4gKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTc2hTZXNzaW9uT3B0aW9ucykge1xuICAgIHRoaXMua25vd25Ib3N0ID0gb3B0aW9ucy5rbm93bkhvc3Q7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhlIGdhdGV3YXksIHJlc29sdmVzIGl0cyBwdWJsaWMgZmFsbGJhY2sgd2hlbiBuZWNlc3NhcnksIGFuZFxuICAgKiBzZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBmb3J3YXJkaW5nIHRyYW5zcG9ydC5cbiAgICovXG4gIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggc2Vzc2lvbiBpcyBjbG9zZWRcIik7XG4gICAgaWYgKHRoaXMudHJhbnNwb3J0KSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29ubmVjdGluZykgcmV0dXJuIHRoaXMuY29ubmVjdGluZztcbiAgICB0aGlzLmNvbm5lY3RpbmcgPSB0aGlzLmNvbm5lY3RXaXRoRmFsbGJhY2soKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpbmc7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RXaXRoRmFsbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEhvc3QodGhpcy5vcHRpb25zLmhvc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIXNob3VsZFJlc29sdmVQdWJsaWNHYXRld2F5KHRoaXMub3B0aW9ucy5ob3N0LCBlcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgY29uc3QgcmVzb2x2ZUFkZHJlc3NlcyA9IHRoaXMub3B0aW9ucy5yZXNvbHZlUHVibGljQWRkcmVzc2VzID8/IHJlc29sdmVQdWJsaWNHYXRld2F5QWRkcmVzc2VzO1xuICAgICAgbGV0IGFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgICB0cnkge1xuICAgICAgICBhZGRyZXNzZXMgPSBhd2FpdCByZXNvbHZlQWRkcmVzc2VzKHRoaXMub3B0aW9ucy5ob3N0KTtcbiAgICAgIH0gY2F0Y2ggKHJlc29sdmVFcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihcInB1YmxpYyBMYWtlYm94IGdhdGV3YXkgcmVzb2x1dGlvbiBmYWlsZWRcIiwge1xuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0LFxuICAgICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IocmVzb2x2ZUVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oXCJwcml2YXRlIExha2Vib3ggZ2F0ZXdheSB1bnJlYWNoYWJsZTsgcmV0cnlpbmcgcHVibGljIGFkZHJlc3Nlc1wiLCB7XG4gICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0LFxuICAgICAgICBhZGRyZXNzQ291bnQ6IGFkZHJlc3Nlcy5sZW5ndGgsXG4gICAgICB9KTtcbiAgICAgIGxldCBsYXN0RXJyb3I6IHVua25vd24gPSBlcnJvcjtcbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RIb3N0KGFkZHJlc3MpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBjYXRjaCAoY29ubmVjdEVycm9yKSB7XG4gICAgICAgICAgbGFzdEVycm9yID0gY29ubmVjdEVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0SG9zdChjb25uZWN0SG9zdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggc2Vzc2lvbiBpcyBjbG9zZWRcIik7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVWZXJpZmllZENsaWVudChjb25uZWN0SG9zdCwgdHJ1ZSk7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU1NIIHNlc3Npb24gaXMgY2xvc2VkXCIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlU3NoVHJhbnNwb3J0KHtcbiAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QsXG4gICAgICAgIGNvbm5lY3RIb3N0LFxuICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucG9ydCxcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMub3B0aW9ucy51c2VybmFtZSxcbiAgICAgICAgcHJpdmF0ZUtleVBhdGg6IHRoaXMub3B0aW9ucy5wcml2YXRlS2V5UGF0aCxcbiAgICAgICAga25vd25Ib3N0c1BhdGg6IHRoaXMub3B0aW9ucy5rbm93bkhvc3RzUGF0aCxcbiAgICAgICAgY29ubmVjdFRpbWVvdXRNczogdGhpcy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0TXMsXG4gICAgICAgIHNzaDJDbGllbnQ6IGNsaWVudCxcbiAgICAgICAgY3JlYXRlU3NoMkNvbW1hbmRDbGllbnQ6ICgpID0+IHRoaXMuY3JlYXRlVmVyaWZpZWRDbGllbnQoY29ubmVjdEhvc3QsIGZhbHNlKSxcbiAgICAgICAgdHJhbnNwb3J0OiB0aGlzLm9wdGlvbnMuc3NoVHJhbnNwb3J0LFxuICAgICAgICBzc2gyUGF0Y2g6IHRoaXMub3B0aW9ucy5zc2gyUGF0Y2gsXG4gICAgICAgIC4uLih0aGlzLm9wdGlvbnMuc3NoQ29tbWFuZCA/IHsgc3NoQ29tbWFuZDogdGhpcy5vcHRpb25zLnNzaENvbW1hbmQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgIGF3YWl0IHRyYW5zcG9ydC5jbG9zZSgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggc2Vzc2lvbiBpcyBjbG9zZWRcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIHRoaXMuY29ubmVjdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0cmFuc3BvcnQua2luZCA9PT0gXCJvcGVuc3NoXCIpIGNsaWVudC5kZXN0cm95KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZlcmlmaWVkQ2xpZW50KGNvbm5lY3RIb3N0OiBzdHJpbmcsIHJlbWVtYmVySG9zdDogYm9vbGVhbik6IFByb21pc2U8U3NoMkNsaWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlNTSCBzZXNzaW9uIGlzIGNsb3NlZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoKTtcbiAgICAgIHRoaXMucGVuZGluZ0NsaWVudHMuYWRkKGNsaWVudCk7XG4gICAgICBsZXQgdmVyaWZpZWRIb3N0OiB7IGZpbmdlcnByaW50OiBzdHJpbmc7IGtleTogQnVmZmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZmluaXNoU2V0dGxlbWVudCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpZW50cy5kZWxldGUoY2xpZW50KTtcbiAgICAgIH07XG4gICAgICBjbGllbnQub25jZShcInJlYWR5XCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgZmluaXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdmVyaWZpZWRIb3N0KSB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggZ2F0ZXdheSBkaWQgbm90IHByb3ZpZGUgYSB2ZXJpZmllZCBob3N0IGtleVwiKTtcbiAgICAgICAgICB0aGlzLmtub3duSG9zdCA9IHZlcmlmaWVkSG9zdC5maW5nZXJwcmludDtcbiAgICAgICAgICBpZiAocmVtZW1iZXJIb3N0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMucmVtZW1iZXJIb3N0Py4odmVyaWZpZWRIb3N0LmZpbmdlcnByaW50LCB2ZXJpZmllZEhvc3Qua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgZmluaXNoU2V0dGxlbWVudCgpO1xuICAgICAgICAgIHJlc29sdmUoY2xpZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgdm9pZCBmaW5pc2goKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgZmluaXNoU2V0dGxlbWVudCgpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjbGllbnQub25jZShcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgZmluaXNoU2V0dGxlbWVudCgpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBjbGllbnQub25jZShcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGZpbmlzaFNldHRsZW1lbnQoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlNTSCBnYXRld2F5IGNsb3NlZCBiZWZvcmUgYXV0aGVudGljYXRpb24gY29tcGxldGVkXCIpKTtcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xpZW50LmNvbm5lY3Qoe1xuICAgICAgICAgIGhvc3Q6IGNvbm5lY3RIb3N0LFxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0LFxuICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLm9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgcHJpdmF0ZUtleTogdGhpcy5vcHRpb25zLnByaXZhdGVLZXksXG4gICAgICAgICAgcmVhZHlUaW1lb3V0OiB0aGlzLm9wdGlvbnMuY29ubmVjdFRpbWVvdXRNcyxcbiAgICAgICAgICBrZWVwYWxpdmVJbnRlcnZhbDogMTVfMDAwLFxuICAgICAgICAgIGtlZXBhbGl2ZUNvdW50TWF4OiAzLFxuICAgICAgICAgIGhvc3RWZXJpZmllcjogKGtleTogQnVmZmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaW5nZXJwcmludCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGtleSkuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMua25vd25Ib3N0ICYmIGZpbmdlcnByaW50ICE9PSB0aGlzLmtub3duSG9zdCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgdmVyaWZpZWRIb3N0ID0geyBmaW5nZXJwcmludCwga2V5OiBCdWZmZXIuZnJvbShrZXkpIH07XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBmaW5pc2hTZXR0bGVtZW50KCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIG9uZSBjb21tYW5kIGFzIGEgTGFrZWJveCB1c2VyIGFuZCByZXR1cm5zIGl0cyBsaXZlIG91dHB1dCBhbmRcbiAgICogY29tcGxldGlvbiBzdGF0ZSBpbW1lZGlhdGVseS5cbiAgICovXG4gIGV4ZWN1dGUoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHVzZXI6IHsgbmFtZTogc3RyaW5nOyBob21lOiBzdHJpbmcgfTtcbiAgICAgIGN3ZD86IHN0cmluZztcbiAgICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIH0sXG4gICk6IFNzaENvbW1hbmQge1xuICAgIGNvbnN0IHsgdXNlciwgLi4ucmVzdCB9ID0gb3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5zdGFydENvbW1hbmQoY29tbWFuZCwgYXJncywgcmVzdCwgeyBraW5kOiBcInVzZXJcIiwgLi4udXNlciB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgU3RhcnRzIG9uZSBmaXhlZCBwYWNrYWdlLW93bmVkIGJvb3RzdHJhcCBjb21tYW5kIGFzIHJvb3QuXG4gICAqXG4gICAqIE5ldmVyIHJvdXRlIFJFU1QsIGFnZW50LXRvb2wsIHNlcnZpY2UsIG9yIGVudmlyb25tZW50IGlucHV0IGhlcmUuXG4gICAqL1xuICBleGVjdXRlUHJpdmlsZWdlZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogeyB0aW1lb3V0TXM6IG51bWJlcjsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSxcbiAgKTogU3NoQ29tbWFuZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRDb21tYW5kKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMsIHsga2luZDogXCJyb290XCIgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0Q29tbWFuZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczoge1xuICAgICAgY3dkPzogc3RyaW5nO1xuICAgICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHRpbWVvdXRNczogbnVtYmVyO1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gICAgfSxcbiAgICBpZGVudGl0eTogU3NoQ29tbWFuZElkZW50aXR5LFxuICApOiBTc2hDb21tYW5kIHtcbiAgICBjb25zdCBzY3JpcHQgPSBzc2hDb21tYW5kU2NyaXB0KGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMuY3dkLCBvcHRpb25zLmVudiwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IHNzaENvbW1hbmQgPSBuZXcgU3NoQ29tbWFuZChjb21tYW5kLCBhcmdzLCBvcHRpb25zLCBhc3luYyAoZXhlY3V0aW9uKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcbiAgICAgIGlmIChleGVjdXRpb24uc2lnbmFsLmFib3J0ZWQpIHJldHVybiAxMzA7XG4gICAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLnRyYW5zcG9ydDtcbiAgICAgIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggdHJhbnNwb3J0IGRpZCBub3QgaW5pdGlhbGl6ZVwiKTtcbiAgICAgIHJldHVybiB0cmFuc3BvcnQucnVuKHNjcmlwdCwgZXhlY3V0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZUNvbW1hbmRzLmFkZChzc2hDb21tYW5kKTtcbiAgICBjb25zdCByZW1vdmUgPSAoKSA9PiB0aGlzLmFjdGl2ZUNvbW1hbmRzLmRlbGV0ZShzc2hDb21tYW5kKTtcbiAgICB2b2lkIHNzaENvbW1hbmQucmVzdWx0LnRoZW4ocmVtb3ZlLCByZW1vdmUpO1xuICAgIHJldHVybiBzc2hDb21tYW5kO1xuICB9XG5cbiAgLyoqIE9wZW5zIGEgcmVtb3RlIFRDUCBjb25uZWN0aW9uIHRocm91Z2ggbmF0aXZlIFNPQ0tTNSBvciBzc2gyIGRpcmVjdCBmb3J3YXJkaW5nLiAqL1xuICBhc3luYyBmb3J3YXJkT3V0KHJlbW90ZUhvc3Q6IHN0cmluZywgcmVtb3RlUG9ydDogbnVtYmVyKTogUHJvbWlzZTxEdXBsZXg+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLnRyYW5zcG9ydDtcbiAgICBpZiAoIXRyYW5zcG9ydCkgdGhyb3cgbmV3IEVycm9yKFwiU1NIIHRyYW5zcG9ydCBkaWQgbm90IGluaXRpYWxpemVcIik7XG4gICAgcmV0dXJuIHRyYW5zcG9ydC5jb25uZWN0KHJlbW90ZUhvc3QsIHJlbW90ZVBvcnQpO1xuICB9XG5cbiAgLyoqIENhbmNlbHMgYWN0aXZlIGNvbW1hbmRzLCBjbG9zZXMgdGhlIHNlbGVjdGVkIHRyYW5zcG9ydCwgYW5kIGNsZWFycyBjb25uZWN0aW9uIHN0YXRlLiAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jbG9zaW5nKSByZXR1cm4gdGhpcy5jbG9zaW5nO1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NpbmcgPSB0aGlzLmNsb3NlUmVzb3VyY2VzKCk7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2luZztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xvc2VSZXNvdXJjZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2FuY2VsbGF0aW9ucyA9IFsuLi50aGlzLmFjdGl2ZUNvbW1hbmRzXS5tYXAoKGNvbW1hbmQpID0+IGNvbW1hbmQuY2FuY2VsKCkpO1xuICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzLnBlbmRpbmdDbGllbnRzKSBjbGllbnQuZGVzdHJveSgpO1xuICAgIHRoaXMucGVuZGluZ0NsaWVudHMuY2xlYXIoKTtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLnRyYW5zcG9ydDtcbiAgICBjb25zdCBjb25uZWN0aW5nID0gdGhpcy5jb25uZWN0aW5nO1xuICAgIHRoaXMudHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29ubmVjdGluZyA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgIC4uLmNhbmNlbGxhdGlvbnMsXG4gICAgICAuLi4odHJhbnNwb3J0ID8gW3RyYW5zcG9ydC5jbG9zZSgpXSA6IFtdKSxcbiAgICAgIC4uLihjb25uZWN0aW5nID8gW2Nvbm5lY3RpbmddIDogW10pLFxuICAgIF0pO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJmYWlsZWQgdG8gY2xvc2UgU1NIIHNlc3Npb24gcmVzb3VyY2VcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IocmVzdWx0LnJlYXNvbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHB1YmxpYyBJUHY0IGFkZHJlc3NlcyBmb3IgYSBEYXRhYnJpY2tzIHNlcnZpY2UtZGlyZWN0IGdhdGV3YXkuXG4gKlxuICogUmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciBvdGhlciBob3N0bmFtZXMuIEROUy1vdmVyLUhUVFBTIHJlcXVlc3RzIHRpbWUgb3V0XG4gKiBhZnRlciBmaXZlIHNlY29uZHMgYW5kIHJlamVjdCBpbnZhbGlkIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQdWJsaWNHYXRld2F5QWRkcmVzc2VzKFxuICBob3N0OiBzdHJpbmcsXG4gIGZldGNoZXI6IHR5cGVvZiBmZXRjaCA9IGZldGNoLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAoIWhvc3QudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChTRVJWSUNFX0RJUkVDVF9TVUZGSVgpKSByZXR1cm4gW107XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hlcihcbiAgICBgaHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChob3N0KX0mdHlwZT1BYCxcbiAgICB7IGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2Rucy1qc29uXCIgfSwgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDVfMDAwKSB9LFxuICApO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYFB1YmxpYyBETlMgcmVzb2x1dGlvbiBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgKTtcbiAgY29uc3QgcGF5bG9hZCA9IERuc1Jlc3BvbnNlU2NoZW1hLnBhcnNlKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG4gIHJldHVybiBbXG4gICAgLi4ubmV3IFNldChcbiAgICAgIChwYXlsb2FkLkFuc3dlciA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoYW5zd2VyKSA9PiBhbnN3ZXIudHlwZSA9PT0gMSAmJiBpc0lQKGFuc3dlci5kYXRhKSA9PT0gNClcbiAgICAgICAgLm1hcCgoYW5zd2VyKSA9PiBhbnN3ZXIuZGF0YSksXG4gICAgKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVzb2x2ZVB1YmxpY0dhdGV3YXkoaG9zdDogc3RyaW5nLCBlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWhvc3QudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChTRVJWSUNFX0RJUkVDVF9TVUZGSVgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvZGUgPVxuICAgIChlcnJvciBhcyB7IGNvZGU/OiB1bmtub3duOyBjYXVzZT86IHsgY29kZT86IHVua25vd24gfSB9KT8uY29kZSA/P1xuICAgIChlcnJvciBhcyB7IGNhdXNlPzogeyBjb2RlPzogdW5rbm93biB9IH0pPy5jYXVzZT8uY29kZTtcbiAgcmV0dXJuIGNvZGUgPT09IFwiRUhPU1RVTlJFQUNIXCIgfHwgY29kZSA9PT0gXCJFTkVUVU5SRUFDSFwiIHx8IGNvZGUgPT09IFwiRVRJTUVET1VUXCI7XG59XG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sSUFBbUMsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixnQkFBZ0IsR0FHakIsTUFBTSxVQUFVLENBQUM7QUFHbEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0scUJBQXFCLEdBQUcsc0NBQXNDLENBQUM7QUFFckUsTUFBTSxlQUFlLEdBQUcsQ0FBQztLQUN0QixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztJQUMxRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztDQUMvQyxDQUFDO0tBQ0QsV0FBVyxFQUFFO0tBQ2IsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFFakQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDO0tBQ3hCLE1BQU0sQ0FBQztJQUNOLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQztDQUNyRixDQUFDO0tBQ0Qs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c2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGlzSVAgfSBmcm9tIFwibm9kZTpuZXRcIjtcbmltcG9ydCB0eXBlIHsgRHVwbGV4IH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHNzaDIsIHsgdHlwZSBDbGllbnQgYXMgU3NoMkNsaWVudCB9IGZyb20gXCJzc2gyXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlU3NoVHJhbnNwb3J0LFxuICBTc2hDb21tYW5kLFxuICBzc2hDb21tYW5kU2NyaXB0LFxuICB0eXBlIFNzaENvbW1hbmRJZGVudGl0eSxcbiAgdHlwZSBTc2hUcmFuc3BvcnQsXG59IGZyb20gXCIuL3NzaC50c1wiO1xuaW1wb3J0IHR5cGUgeyBTc2gyUGF0Y2hNb2RlLCBTc2hUcmFuc3BvcnRNb2RlIH0gZnJvbSBcIi4vdHJhbnNwb3J0LnRzXCI7XG5cbmNvbnN0IHsgQ2xpZW50IH0gPSBzc2gyO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImxha2Vib3g6c3NoXCIpO1xuY29uc3QgU0VSVklDRV9ESVJFQ1RfU1VGRklYID0gXCIuc2VydmljZS1kaXJlY3QuY2xvdWQuZGF0YWJyaWNrcy5jb21cIjtcblxuY29uc3QgRG5zQW5zd2VyU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6Lm51bWJlcigpLmludCgpLmRlc2NyaWJlKFwiRE5TIHJlY29yZCB0eXBlIG51bWJlci5cIiksXG4gICAgZGF0YTogei5zdHJpbmcoKS5kZXNjcmliZShcIkROUyByZWNvcmQgdmFsdWUuXCIpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuICAuZGVzY3JpYmUoXCJPbmUgRE5TLW92ZXItSFRUUFMgYW5zd2VyIHJlY29yZC5cIik7XG5cbmNvbnN0IERuc1Jlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBBbnN3ZXI6IHouYXJyYXkoRG5zQW5zd2VyU2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVzb2x2ZWQgRE5TIGFuc3dlciByZWNvcmRzLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiR29vZ2xlIEROUy1vdmVyLUhUVFBTIEpTT04gcmVzcG9uc2UuXCIpO1xuXG4vKiogQ29ubmVjdGlvbiwga2V5LCBob3N0LXZlcmlmaWNhdGlvbiwgYW5kIGNvbW1hbmQgc2V0dGluZ3MgZm9yIG9uZSBTU0ggbWFjaGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NoU2Vzc2lvbk9wdGlvbnMge1xuICAvKiogRGF0YWJyaWNrcyBMYWtlYm94IGdhdGV3YXkgaG9zdG5hbWUuICovXG4gIGhvc3Q6IHN0cmluZztcbiAgLyoqIFNTSCBnYXRld2F5IHBvcnQuICovXG4gIHBvcnQ6IG51bWJlcjtcbiAgLyoqIFNTSCB1c2VybmFtZSBhY2NlcHRlZCBieSB0aGUgZ2F0ZXdheTogdGhlIExha2Vib3ggSUQuICovXG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIC8qKiBJbi1tZW1vcnkgcHJpdmF0ZSBrZXkgdXNlZCBmb3IgdGhlIHZlcmlmaWVkIFNTSCBoYW5kc2hha2UgYW5kIHNzaDIgZmFsbGJhY2suICovXG4gIHByaXZhdGVLZXk6IHN0cmluZztcbiAgLyoqIFByaXZhdGUga2V5IGZpbGUgdXNlZCBieSBuYXRpdmUgT3BlblNTSC4gKi9cbiAgcHJpdmF0ZUtleVBhdGg6IHN0cmluZztcbiAgLyoqIERlZGljYXRlZCBPcGVuU1NIIGtub3duLWhvc3QgZmlsZSBmb3IgdGhpcyB3b3Jrc3BhY2UsIHVzZXIsIGFuZCBnYXRld2F5LiAqL1xuICBrbm93bkhvc3RzUGF0aDogc3RyaW5nO1xuICAvKiogQ29ubmVjdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgY29ubmVjdFRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogU1NIIHRyYW5zcG9ydCBzZWxlY3RlZCBmb3IgdGhpcyBzZXNzaW9uLiAqL1xuICBzc2hUcmFuc3BvcnQ6IFNzaFRyYW5zcG9ydE1vZGU7XG4gIC8qKiBzc2gyIG1pc3NpbmctZXhlYy1yZXBseSBwYXRjaCBwb2xpY3kuICovXG4gIHNzaDJQYXRjaDogU3NoMlBhdGNoTW9kZTtcbiAgLyoqIFByZXZpb3VzbHkgdHJ1c3RlZCBTSEEtMjU2IGhvc3Qta2V5IGZpbmdlcnByaW50LiAqL1xuICBrbm93bkhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBQZXJzaXN0cyB0aGUgYWNjZXB0ZWQgaG9zdCBrZXkgZm9yIGJvdGggc3NoMiBhbmQgbmF0aXZlIE9wZW5TU0guICovXG4gIHJlbWVtYmVySG9zdD86IChmaW5nZXJwcmludDogc3RyaW5nLCBrZXk6IEJ1ZmZlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIE5hdGl2ZSBPcGVuU1NIIGV4ZWN1dGFibGUuIERlZmF1bHRzIHRvIGBzc2hgIG9uIGBQQVRIYC4gKi9cbiAgc3NoQ29tbWFuZD86IHN0cmluZztcbiAgLyoqIFJlc29sdmVzIHB1YmxpYyBmYWxsYmFjayBhZGRyZXNzZXMgZm9yIGEgc2VydmljZS1kaXJlY3QgZ2F0ZXdheS4gKi9cbiAgcmVzb2x2ZVB1YmxpY0FkZHJlc3Nlcz86IChob3N0OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10+O1xufVxuXG4vKipcbiAqIFZlcmlmaWVkIFNTSCBzZXNzaW9uIHRoYXQgZGVsZWdhdGVzIGNvbW1hbmRzIGFuZCByZW1vdGUgVENQIGNvbm5lY3Rpb25zIHRvXG4gKiB0aGUgdHJhbnNwb3J0IHNlbGVjdGVkIGJ5IGBzcmMvc3NoLnRzYC5cbiAqXG4gKiBUaGUgaW5pdGlhbCBzc2gyIGhhbmRzaGFrZSB2ZXJpZmllcyBhbmQgcGVyc2lzdHMgdGhlIERhdGFicmlja3MgZ2F0ZXdheSBob3N0XG4gKiBrZXkuIFRoZSBzZWxlY3RlZCB0cmFuc3BvcnQgdGhlbiBzdGFydHMgaXRzIHBvb2xlZCBjb21tYW5kIGFuZCBmb3J3YXJkaW5nXG4gKiByZXNvdXJjZXMuIFJlc29sdmVkIHRyYW5zcG9ydCBhbmQgcGF0Y2ggcG9saWN5IGRldGVybWluZSB3aGV0aGVyIHRoZSB2ZXJpZmllZFxuICogY2xpZW50IHNlZWRzIHRoZSBzc2gyIHBvb2wgb3IgaXMgcmVwbGFjZWQgYnkgbmF0aXZlIE9wZW5TU0ggQ29udHJvbE1hc3RlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTc2hTZXNzaW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVDb21tYW5kcyA9IG5ldyBTZXQ8U3NoQ29tbWFuZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nQ2xpZW50cyA9IG5ldyBTZXQ8U3NoMkNsaWVudD4oKTtcbiAgcHJpdmF0ZSB0cmFuc3BvcnQ/OiBTc2hUcmFuc3BvcnQ7XG4gIHByaXZhdGUgY29ubmVjdGluZz86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgY2xvc2luZz86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUga25vd25Ib3N0Pzogc3RyaW5nO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIC8qKiBDcmVhdGVzIGEgZGlzY29ubmVjdGVkIHNlc3Npb24uIENhbGwge0BsaW5rIGNvbm5lY3R9IG9yIGFub3RoZXIgb3BlcmF0aW9uIHRvIGNvbm5lY3QuICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogU3NoU2Vzc2lvbk9wdGlvbnMpIHtcbiAgICB0aGlzLmtub3duSG9zdCA9IG9wdGlvbnMua25vd25Ib3N0O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBnYXRld2F5LCByZXNvbHZlcyBpdHMgcHVibGljIGZhbGxiYWNrIHdoZW4gbmVjZXNzYXJ5LCBhbmRcbiAgICogc2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgZm9yd2FyZGluZyB0cmFuc3BvcnQuXG4gICAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiU1NIIHNlc3Npb24gaXMgY2xvc2VkXCIpO1xuICAgIGlmICh0aGlzLnRyYW5zcG9ydCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNvbm5lY3RpbmcpIHJldHVybiB0aGlzLmNvbm5lY3Rpbmc7XG4gICAgdGhpcy5jb25uZWN0aW5nID0gdGhpcy5jb25uZWN0V2l0aEZhbGxiYWNrKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3RpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0V2l0aEZhbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3RIb3N0KHRoaXMub3B0aW9ucy5ob3N0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFzaG91bGRSZXNvbHZlUHVibGljR2F0ZXdheSh0aGlzLm9wdGlvbnMuaG9zdCwgZXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgIGNvbnN0IHJlc29sdmVBZGRyZXNzZXMgPSB0aGlzLm9wdGlvbnMucmVzb2x2ZVB1YmxpY0FkZHJlc3NlcyA/PyByZXNvbHZlUHVibGljR2F0ZXdheUFkZHJlc3NlcztcbiAgICAgIGxldCBhZGRyZXNzZXM6IHN0cmluZ1tdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWRkcmVzc2VzID0gYXdhaXQgcmVzb2x2ZUFkZHJlc3Nlcyh0aGlzLm9wdGlvbnMuaG9zdCk7XG4gICAgICB9IGNhdGNoIChyZXNvbHZlRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJwdWJsaWMgTGFrZWJveCBnYXRld2F5IHJlc29sdXRpb24gZmFpbGVkXCIsIHtcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdCxcbiAgICAgICAgICBlcnJvcjogdG9FcnJvcihyZXNvbHZlRXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybihcInByaXZhdGUgTGFrZWJveCBnYXRld2F5IHVucmVhY2hhYmxlOyByZXRyeWluZyBwdWJsaWMgYWRkcmVzc2VzXCIsIHtcbiAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QsXG4gICAgICAgIGFkZHJlc3NDb3VudDogYWRkcmVzc2VzLmxlbmd0aCxcbiAgICAgIH0pO1xuICAgICAgbGV0IGxhc3RFcnJvcjogdW5rbm93biA9IGVycm9yO1xuICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3Nlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEhvc3QoYWRkcmVzcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChjb25uZWN0RXJyb3IpIHtcbiAgICAgICAgICBsYXN0RXJyb3IgPSBjb25uZWN0RXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RIb3N0KGNvbm5lY3RIb3N0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHRocm93IG5ldyBFcnJvcihcIlNTSCBzZXNzaW9uIGlzIGNsb3NlZFwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZlcmlmaWVkQ2xpZW50KGNvbm5lY3RIb3N0LCB0cnVlKTtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggc2Vzc2lvbiBpcyBjbG9zZWRcIik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVTc2hUcmFuc3BvcnQoe1xuICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdCxcbiAgICAgICAgY29ubmVjdEhvc3QsXG4gICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0LFxuICAgICAgICB1c2VybmFtZTogdGhpcy5vcHRpb25zLnVzZXJuYW1lLFxuICAgICAgICBwcml2YXRlS2V5UGF0aDogdGhpcy5vcHRpb25zLnByaXZhdGVLZXlQYXRoLFxuICAgICAgICBrbm93bkhvc3RzUGF0aDogdGhpcy5vcHRpb25zLmtub3duSG9zdHNQYXRoLFxuICAgICAgICBjb25uZWN0VGltZW91dE1zOiB0aGlzLm9wdGlvbnMuY29ubmVjdFRpbWVvdXRNcyxcbiAgICAgICAgc3NoMkNsaWVudDogY2xpZW50LFxuICAgICAgICBjcmVhdGVTc2gyQ29tbWFuZENsaWVudDogKCkgPT4gdGhpcy5jcmVhdGVWZXJpZmllZENsaWVudChjb25uZWN0SG9zdCwgZmFsc2UpLFxuICAgICAgICB0cmFuc3BvcnQ6IHRoaXMub3B0aW9ucy5zc2hUcmFuc3BvcnQsXG4gICAgICAgIHNzaDJQYXRjaDogdGhpcy5vcHRpb25zLnNzaDJQYXRjaCxcbiAgICAgICAgLi4uKHRoaXMub3B0aW9ucy5zc2hDb21tYW5kID8geyBzc2hDb21tYW5kOiB0aGlzLm9wdGlvbnMuc3NoQ29tbWFuZCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgYXdhaXQgdHJhbnNwb3J0LmNsb3NlKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNTSCBzZXNzaW9uIGlzIGNsb3NlZFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgICAgdGhpcy5jb25uZWN0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRyYW5zcG9ydC5raW5kID09PSBcIm9wZW5zc2hcIikgY2xpZW50LmRlc3Ryb3koKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmVyaWZpZWRDbGllbnQoY29ubmVjdEhvc3Q6IHN0cmluZywgcmVtZW1iZXJIb3N0OiBib29sZWFuKTogUHJvbWlzZTxTc2gyQ2xpZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiU1NIIHNlc3Npb24gaXMgY2xvc2VkXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpZW50cy5hZGQoY2xpZW50KTtcbiAgICAgIGxldCB2ZXJpZmllZEhvc3Q6IHsgZmluZ2VycHJpbnQ6IHN0cmluZzsga2V5OiBCdWZmZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBmaW5pc2hTZXR0bGVtZW50ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbGllbnRzLmRlbGV0ZShjbGllbnQpO1xuICAgICAgfTtcbiAgICAgIGNsaWVudC5vbmNlKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmaW5pc2ggPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF2ZXJpZmllZEhvc3QpIHRocm93IG5ldyBFcnJvcihcIlNTSCBnYXRld2F5IGRpZCBub3QgcHJvdmlkZSBhIHZlcmlmaWVkIGhvc3Qga2V5XCIpO1xuICAgICAgICAgIHRoaXMua25vd25Ib3N0ID0gdmVyaWZpZWRIb3N0LmZpbmdlcnByaW50O1xuICAgICAgICAgIGlmIChyZW1lbWJlckhvc3QpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5yZW1lbWJlckhvc3Q/Lih2ZXJpZmllZEhvc3QuZmluZ2VycHJpbnQsIHZlcmlmaWVkSG9zdC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hTZXR0bGVtZW50KCk7XG4gICAgICAgICAgcmVzb2x2ZShjbGllbnQpO1xuICAgICAgICB9O1xuICAgICAgICB2b2lkIGZpbmlzaCgpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hTZXR0bGVtZW50KCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNsaWVudC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBmaW5pc2hTZXR0bGVtZW50KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIGNsaWVudC5vbmNlKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgZmluaXNoU2V0dGxlbWVudCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiU1NIIGdhdGV3YXkgY2xvc2VkIGJlZm9yZSBhdXRoZW50aWNhdGlvbiBjb21wbGV0ZWRcIikpO1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBjbGllbnQuY29ubmVjdCh7XG4gICAgICAgICAgaG9zdDogY29ubmVjdEhvc3QsXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnBvcnQsXG4gICAgICAgICAgdXNlcm5hbWU6IHRoaXMub3B0aW9ucy51c2VybmFtZSxcbiAgICAgICAgICBwcml2YXRlS2V5OiB0aGlzLm9wdGlvbnMucHJpdmF0ZUtleSxcbiAgICAgICAgICByZWFkeVRpbWVvdXQ6IHRoaXMub3B0aW9ucy5jb25uZWN0VGltZW91dE1zLFxuICAgICAgICAgIGtlZXBhbGl2ZUludGVydmFsOiAxNV8wMDAsXG4gICAgICAgICAga2VlcGFsaXZlQ291bnRNYXg6IDMsXG4gICAgICAgICAgaG9zdFZlcmlmaWVyOiAoa2V5OiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoa2V5KS5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5rbm93bkhvc3QgJiYgZmluZ2VycHJpbnQgIT09IHRoaXMua25vd25Ib3N0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2ZXJpZmllZEhvc3QgPSB7IGZpbmdlcnByaW50LCBrZXk6IEJ1ZmZlci5mcm9tKGtleSkgfTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGZpbmlzaFNldHRsZW1lbnQoKTtcbiAgICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgb25lIGNvbW1hbmQgYXMgYSBMYWtlYm94IHVzZXIgYW5kIHJldHVybnMgaXRzIGxpdmUgb3V0cHV0IGFuZFxuICAgKiBjb21wbGV0aW9uIHN0YXRlIGltbWVkaWF0ZWx5LlxuICAgKi9cbiAgZXhlY3V0ZShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczoge1xuICAgICAgdXNlcjogeyBuYW1lOiBzdHJpbmc7IGhvbWU6IHN0cmluZyB9O1xuICAgICAgY3dkPzogc3RyaW5nO1xuICAgICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHRpbWVvdXRNczogbnVtYmVyO1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gICAgfSxcbiAgKTogU3NoQ29tbWFuZCB7XG4gICAgY29uc3QgeyB1c2VyLCAuLi5yZXN0IH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0Q29tbWFuZChjb21tYW5kLCBhcmdzLCByZXN0LCB7IGtpbmQ6IFwidXNlclwiLCAuLi51c2VyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBTdGFydHMgb25lIGZpeGVkIHBhY2thZ2Utb3duZWQgYm9vdHN0cmFwIGNvbW1hbmQgYXMgcm9vdC5cbiAgICpcbiAgICogTmV2ZXIgcm91dGUgUkVTVCwgYWdlbnQtdG9vbCwgc2VydmljZSwgb3IgZW52aXJvbm1lbnQgaW5wdXQgaGVyZS5cbiAgICovXG4gIGV4ZWN1dGVQcml2aWxlZ2VkKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiB7IHRpbWVvdXRNczogbnVtYmVyOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9LFxuICApOiBTc2hDb21tYW5kIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydENvbW1hbmQoY29tbWFuZCwgYXJncywgb3B0aW9ucywgeyBraW5kOiBcInJvb3RcIiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb21tYW5kKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjd2Q/OiBzdHJpbmc7XG4gICAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgdGltZW91dE1zOiBudW1iZXI7XG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICB9LFxuICAgIGlkZW50aXR5OiBTc2hDb21tYW5kSWRlbnRpdHksXG4gICk6IFNzaENvbW1hbmQge1xuICAgIGNvbnN0IHNjcmlwdCA9IHNzaENvbW1hbmRTY3JpcHQoY29tbWFuZCwgYXJncywgb3B0aW9ucy5jd2QsIG9wdGlvbnMuZW52LCBpZGVudGl0eSk7XG4gICAgY29uc3Qgc3NoQ29tbWFuZCA9IG5ldyBTc2hDb21tYW5kKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMsIGFzeW5jIChleGVjdXRpb24pID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICAgICAgaWYgKGV4ZWN1dGlvbi5zaWduYWwuYWJvcnRlZCkgcmV0dXJuIDEzMDtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMudHJhbnNwb3J0O1xuICAgICAgaWYgKCF0cmFuc3BvcnQpIHRocm93IG5ldyBFcnJvcihcIlNTSCB0cmFuc3BvcnQgZGlkIG5vdCBpbml0aWFsaXplXCIpO1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5ydW4oc2NyaXB0LCBleGVjdXRpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMuYWRkKHNzaENvbW1hbmQpO1xuICAgIGNvbnN0IHJlbW92ZSA9ICgpID0+IHRoaXMuYWN0aXZlQ29tbWFuZHMuZGVsZXRlKHNzaENvbW1hbmQpO1xuICAgIHZvaWQgc3NoQ29tbWFuZC5yZXN1bHQudGhlbihyZW1vdmUsIHJlbW92ZSk7XG4gICAgcmV0dXJuIHNzaENvbW1hbmQ7XG4gIH1cblxuICAvKiogT3BlbnMgYSByZW1vdGUgVENQIGNvbm5lY3Rpb24gdGhyb3VnaCBuYXRpdmUgU09DS1M1IG9yIHNzaDIgZGlyZWN0IGZvcndhcmRpbmcuICovXG4gIGFzeW5jIGZvcndhcmRPdXQocmVtb3RlSG9zdDogc3RyaW5nLCByZW1vdGVQb3J0OiBudW1iZXIpOiBQcm9taXNlPER1cGxleD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMudHJhbnNwb3J0O1xuICAgIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoXCJTU0ggdHJhbnNwb3J0IGRpZCBub3QgaW5pdGlhbGl6ZVwiKTtcbiAgICByZXR1cm4gdHJhbnNwb3J0LmNvbm5lY3QocmVtb3RlSG9zdCwgcmVtb3RlUG9ydCk7XG4gIH1cblxuICAvKiogQ2FuY2VscyBhY3RpdmUgY29tbWFuZHMsIGNsb3NlcyB0aGUgc2VsZWN0ZWQgdHJhbnNwb3J0LCBhbmQgY2xlYXJzIGNvbm5lY3Rpb24gc3RhdGUuICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NpbmcpIHJldHVybiB0aGlzLmNsb3Npbmc7XG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2luZyA9IHRoaXMuY2xvc2VSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gdGhpcy5jbG9zaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbG9zZVJlc291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjYW5jZWxsYXRpb25zID0gWy4uLnRoaXMuYWN0aXZlQ29tbWFuZHNdLm1hcCgoY29tbWFuZCkgPT4gY29tbWFuZC5jYW5jZWwoKSk7XG4gICAgdGhpcy5hY3RpdmVDb21tYW5kcy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXMucGVuZGluZ0NsaWVudHMpIGNsaWVudC5kZXN0cm95KCk7XG4gICAgdGhpcy5wZW5kaW5nQ2xpZW50cy5jbGVhcigpO1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMudHJhbnNwb3J0O1xuICAgIGNvbnN0IGNvbm5lY3RpbmcgPSB0aGlzLmNvbm5lY3Rpbmc7XG4gICAgdGhpcy50cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25uZWN0aW5nID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgLi4uY2FuY2VsbGF0aW9ucyxcbiAgICAgIC4uLih0cmFuc3BvcnQgPyBbdHJhbnNwb3J0LmNsb3NlKCldIDogW10pLFxuICAgICAgLi4uKGNvbm5lY3RpbmcgPyBbY29ubmVjdGluZ10gOiBbXSksXG4gICAgXSk7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byBjbG9zZSBTU0ggc2Vzc2lvbiByZXNvdXJjZVwiLCB7XG4gICAgICAgICAgZXJyb3I6IHRvRXJyb3IocmVzdWx0LnJlYXNvbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHB1YmxpYyBJUHY0IGFkZHJlc3NlcyBmb3IgYSBEYXRhYnJpY2tzIHNlcnZpY2UtZGlyZWN0IGdhdGV3YXkuXG4gKlxuICogUmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciBvdGhlciBob3N0bmFtZXMuIEROUy1vdmVyLUhUVFBTIHJlcXVlc3RzIHRpbWUgb3V0XG4gKiBhZnRlciBmaXZlIHNlY29uZHMgYW5kIHJlamVjdCBpbnZhbGlkIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQdWJsaWNHYXRld2F5QWRkcmVzc2VzKFxuICBob3N0OiBzdHJpbmcsXG4gIGZldGNoZXI6IHR5cGVvZiBmZXRjaCA9IGZldGNoLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAoIWhvc3QudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChTRVJWSUNFX0RJUkVDVF9TVUZGSVgpKSByZXR1cm4gW107XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hlcihcbiAgICBgaHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChob3N0KX0mdHlwZT1BYCxcbiAgICB7IGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2Rucy1qc29uXCIgfSwgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDVfMDAwKSB9LFxuICApO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYFB1YmxpYyBETlMgcmVzb2x1dGlvbiBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgKTtcbiAgY29uc3QgcGF5bG9hZCA9IERuc1Jlc3BvbnNlU2NoZW1hLnBhcnNlKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG4gIHJldHVybiBbXG4gICAgLi4ubmV3IFNldChcbiAgICAgIChwYXlsb2FkLkFuc3dlciA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoYW5zd2VyKSA9PiBhbnN3ZXIudHlwZSA9PT0gMSAmJiBpc0lQKGFuc3dlci5kYXRhKSA9PT0gNClcbiAgICAgICAgLm1hcCgoYW5zd2VyKSA9PiBhbnN3ZXIuZGF0YSksXG4gICAgKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVzb2x2ZVB1YmxpY0dhdGV3YXkoaG9zdDogc3RyaW5nLCBlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWhvc3QudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChTRVJWSUNFX0RJUkVDVF9TVUZGSVgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvZGUgPVxuICAgIChlcnJvciBhcyB7IGNvZGU/OiB1bmtub3duOyBjYXVzZT86IHsgY29kZT86IHVua25vd24gfSB9KT8uY29kZSA/P1xuICAgIChlcnJvciBhcyB7IGNhdXNlPzogeyBjb2RlPzogdW5rbm93biB9IH0pPy5jYXVzZT8uY29kZTtcbiAgcmV0dXJuIGNvZGUgPT09IFwiRUhPU1RVTlJFQUNIXCIgfHwgY29kZSA9PT0gXCJFTkVUVU5SRUFDSFwiIHx8IGNvZGUgPT09IFwiRVRJTUVET1VUXCI7XG59XG4iXX0=