@dbx-tools/model 0.9.153 → 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.
Files changed (57) hide show
  1. package/index.ts +23 -12
  2. package/lib/index.d.ts +23 -12
  3. package/lib/index.js +21 -12
  4. package/lib/scripts/generate-metadata.js +2 -2
  5. package/lib/src/_cache.js +2 -2
  6. package/lib/src/_metadata-generator.d.ts +1 -1
  7. package/lib/src/_metadata-generator.js +1 -1
  8. package/lib/src/_ranking.d.ts +1 -1
  9. package/lib/src/_ranking.js +22 -27
  10. package/lib/src/classes.d.ts +1 -1
  11. package/lib/src/classes.js +2 -2
  12. package/lib/src/classify.d.ts +1 -1
  13. package/lib/src/classify.js +2 -2
  14. package/lib/src/fallback.d.ts +1 -1
  15. package/lib/src/fallback.js +2 -2
  16. package/lib/src/metadata-cache.d.ts +1 -1
  17. package/lib/src/metadata-cache.js +5 -6
  18. package/lib/src/{_metadata-contract.d.ts → metadata-contract.d.ts} +1 -1
  19. package/lib/src/metadata-contract.js +13 -0
  20. package/lib/src/metadata.d.ts +3 -4
  21. package/lib/src/metadata.js +5 -7
  22. package/lib/src/model-catalog.js +5 -6
  23. package/lib/src/model-client.d.ts +1 -1
  24. package/lib/src/model-client.js +10 -12
  25. package/lib/src/policy.d.ts +1 -1
  26. package/lib/src/policy.js +2 -2
  27. package/lib/src/reasoning-translation.js +7 -10
  28. package/lib/src/resolve.d.ts +1 -3
  29. package/lib/src/resolve.js +2 -3
  30. package/lib/src/{_retirement.d.ts → retirement.d.ts} +1 -1
  31. package/lib/src/retirement.js +59 -0
  32. package/lib/src/{_selection.d.ts → selection.d.ts} +1 -1
  33. package/lib/src/selection.js +89 -0
  34. package/lib/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +8 -113
  36. package/src/_cache.ts +1 -1
  37. package/src/_metadata-generator.ts +1 -1
  38. package/src/_ranking.ts +21 -26
  39. package/src/classes.ts +1 -1
  40. package/src/classify.ts +1 -1
  41. package/src/fallback.ts +1 -1
  42. package/src/metadata-cache.ts +4 -5
  43. package/src/{_metadata-contract.ts → metadata-contract.ts} +1 -1
  44. package/src/metadata.ts +20 -34
  45. package/src/model-catalog.ts +4 -6
  46. package/src/model-client.ts +9 -11
  47. package/src/policy.ts +1 -1
  48. package/src/reasoning-translation.ts +6 -9
  49. package/src/resolve.ts +6 -9
  50. package/src/{_retirement.ts → retirement.ts} +2 -2
  51. package/src/{_selection.ts → selection.ts} +3 -3
  52. package/exports.ts +0 -1
  53. package/lib/exports.d.ts +0 -1
  54. package/lib/exports.js +0 -2
  55. package/lib/src/_metadata-contract.js +0 -13
  56. package/lib/src/_retirement.js +0 -59
  57. package/lib/src/_selection.js +0 -89
@@ -20,9 +20,7 @@
20
20
  *
21
21
  * @module
22
22
  */
23
- import { json } from "@dbx-tools/shared-core";
24
- import { isRecord } from "@dbx-tools/shared-core/object";
25
- import * as stringUtils from "@dbx-tools/shared-core/string-utils";
23
+ import { parseRecord, parse, isRecord, trimToNull } from "@dbx-tools/shared-core";
26
24
  import Fuse from "fuse.js";
27
25
  import { modelFamily, modelSearchQuery } from "./policy.js";
28
26
  /** Runtime values for {@link ReasoningLevel}. */
@@ -339,8 +337,7 @@ export function adaptRequestReasoning(body, levels) {
339
337
  }
340
338
  /** Normalize labels for alias lookup (`Extra High` → `extra-high`). */
341
339
  export function normalizeReasoningToken(value) {
342
- return (stringUtils
343
- .trimToNull(value)
340
+ return (trimToNull(value)
344
341
  ?.toLowerCase()
345
342
  .replace(/[_\s]+/g, "-")
346
343
  .replace(/[^a-z0-9-]/g, "")
@@ -384,7 +381,7 @@ function catalogueKeysFor(model) {
384
381
  return [...keys];
385
382
  }
386
383
  function modelCatalogueKey(name) {
387
- const trimmed = stringUtils.trimToNull(name);
384
+ const trimmed = trimToNull(name);
388
385
  if (!trimmed)
389
386
  return undefined;
390
387
  return (modelSearchQuery(trimmed)?.replaceAll(" ", "-") ??
@@ -430,20 +427,20 @@ function collectTextLeaves(value, depth = 0) {
430
427
  return Object.values(value).flatMap((entry) => collectTextLeaves(entry, depth + 1));
431
428
  }
432
429
  function tryUnwrapJson(text) {
433
- const asRecord = json.parseRecord(text);
430
+ const asRecord = parseRecord(text);
434
431
  if (asRecord)
435
432
  return asRecord;
436
- const parsed = json.parse(text);
433
+ const parsed = parse(text);
437
434
  if (parsed !== undefined)
438
435
  return parsed;
439
436
  if (text.includes('\\"') || text.includes("\\n")) {
440
437
  const unescaped = text.replace(/\\"/g, '"').replace(/\\n/g, "\n").replace(/\\\\/g, "\\");
441
438
  if (unescaped !== text) {
442
- const nested = json.parse(unescaped);
439
+ const nested = parse(unescaped);
443
440
  if (nested !== undefined)
444
441
  return nested;
445
442
  }
446
443
  }
447
444
  return undefined;
448
445
  }
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhc29uaW5nLXRyYW5zbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzVELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLEdBQUcsRUFBRSxLQUFLO0NBQ3VDLENBQUM7QUFFcEQsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUE4QjtJQUN6RCxjQUFjLENBQUMsR0FBRztJQUNsQixjQUFjLENBQUMsTUFBTTtJQUNyQixjQUFjLENBQUMsSUFBSTtJQUNuQixjQUFjLENBQUMsU0FBUztJQUN4QixjQUFjLENBQUMsR0FBRztDQUNuQixDQUFDO0FBS0YsTUFBTSxRQUFRLEdBQThCO0lBQzFDLGNBQWMsQ0FBQyxHQUFHO0lBQ2xCLGNBQWMsQ0FBQyxNQUFNO0lBQ3JCLGNBQWMsQ0FBQyxJQUFJO0NBQ3BCLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBOEI7SUFDakQsY0FBYyxDQUFDLEdBQUc7SUFDbEIsY0FBYyxDQUFDLE1BQU07SUFDckIsY0FBYyxDQUFDLElBQUk7SUFDbkIsY0FBYyxDQUFDLFNBQVM7Q0FDekIs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QUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBSSxRQUFRO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekYsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyByZWFzb25pbmctYnVkZ2V0IHRyYW5zbGF0aW9uIGZvciBNb2RlbCBTZXJ2aW5nIGFuZCBnYXRld2F5IGNhbGxlcnMuXG4gKlxuICogUHJvdmlkZXIgd2lyZXMgZGlzYWdyZWUgb24gZWZmb3J0IGxhYmVscyAoYHhoaWdoYCwgYHVsdHJhYCwgYG1lZGAsIGBub25lYCwg4oCmKS5cbiAqIFRoaXMgbW9kdWxlIG93bnMgb25lIGluZHVzdHJ5LXNoYXBlZCBsYWRkZXIgYW5kIHR3byBwYXJzZXJzOlxuICpcbiAqIC0ge0BsaW5rIHBhcnNlUmVhc29uaW5nfTogZnV6enktbWF0Y2ggb25lIGxhYmVsIG9udG8ge0BsaW5rIFJlYXNvbmluZ0xldmVsfVxuICogLSB7QGxpbmsgcGFyc2VSZWFzb25pbmdMZXZlbHN9OiB1bndyYXAgbmVzdGVkIC8gZG91YmxlLWVuY29kZWQgZXJyb3IgYm9kaWVzXG4gKiAtIHtAbGluayByZW1hcFJlYXNvbmluZ30gLyB7QGxpbmsgYWRhcHRSZXF1ZXN0UmVhc29uaW5nfTogbWFwIGEgcmVxdWVzdCBvbnRvIGFcbiAqICAgc3VwcG9ydGVkIGxhZGRlciBhbmQgcmV3cml0ZSBgcmVhc29uaW5nX2VmZm9ydGAgLyBgcmVhc29uaW5nLmVmZm9ydGBcbiAqXG4gKiBEb2N1bWVudGVkIG1vZGVsIGxhZGRlcnMgY29tZSBmcm9tIHRoZSBjb21taXR0ZWQgSFRNTCBzbmFwc2hvdCByZWZyZXNoZWQgYnlcbiAqIGBidW4gcnVuIC0tZmlsdGVyICdAZGJ4LXRvb2xzL21vZGVsJyBtZXRhZGF0YWAgKHNhbWUgY2FjaGUgcGF0aCBhc1xuICogY2FwYWJpbGl0aWVzIC8gcmF0ZSBsaW1pdHMpLiBFcnJvci1ib2R5IHBhcnNpbmcgaXMgbmV2ZXIgY2FjaGVkOyBjYWxsZXJzXG4gKiBwZXJzaXN0IGxlYXJuZWQgbGFkZGVycyB2aWEgdGhlIG1ldGFkYXRhIG1vZHVsZS5cbiAqXG4gKiBFcnJvciBib2RpZXMgYXJyaXZlIGFzIGNvbXBsZXRlIEhUVFAgSlNPTiB3aGV0aGVyIHRoZSByZXF1ZXN0IGFza2VkIGZvclxuICogc3RyZWFtaW5nIG9yIG5vdCAoRGF0YWJyaWNrcyByZWplY3RzIHVuc3VwcG9ydGVkIGVmZm9ydHMgd2l0aCA0MDAgYmVmb3JlIFNTRVxuICogc3RhcnRzKSwgc28ge0BsaW5rIHBhcnNlUmVhc29uaW5nTGV2ZWxzfSBhcHBsaWVzIHRvIGJvdGggcGF0aHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGpzb24gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgaXNSZWNvcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9vYmplY3RcIjtcbmltcG9ydCAqIGFzIHN0cmluZ1V0aWxzIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL3N0cmluZy11dGlsc1wiO1xuaW1wb3J0IEZ1c2UgZnJvbSBcImZ1c2UuanNcIjtcblxuaW1wb3J0IHsgbW9kZWxGYW1pbHksIG1vZGVsU2VhcmNoUXVlcnkgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcblxuLyoqIEluZHVzdHJ5LWdlbmVyaWMgcmVhc29uaW5nIGJ1ZGdldCBsZXZlbHMsIGxvd2VzdCB0byBoaWdoZXN0LiAqL1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nTGV2ZWwgPSBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJleHRyYS1oaWdoXCIgfCBcIm1heFwiO1xuXG4vKiogUnVudGltZSB2YWx1ZXMgZm9yIHtAbGluayBSZWFzb25pbmdMZXZlbH0uICovXG5leHBvcnQgY29uc3QgUmVhc29uaW5nTGV2ZWwgPSB7XG4gIExvdzogXCJsb3dcIixcbiAgTWVkaXVtOiBcIm1lZGl1bVwiLFxuICBIaWdoOiBcImhpZ2hcIixcbiAgRXh0cmFIaWdoOiBcImV4dHJhLWhpZ2hcIixcbiAgTWF4OiBcIm1heFwiLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWw+O1xuXG4vKiogQ2Fub25pY2FsIGxhZGRlciBvcmRlciB1c2VkIHdoZW4gc29ydGluZyBvciByYW5raW5nIHJlbWFwcy4gKi9cbmV4cG9ydCBjb25zdCBSRUFTT05JTkdfTEVWRUxTOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBSZWFzb25pbmdMZXZlbC5NYXgsXG5dO1xuXG4vKiogTW9kZWwgaWRlbnRpdHkg4oaSIGFjY2VwdGVkIHtAbGluayBSZWFzb25pbmdMZXZlbH0gbGFkZGVyLiAqL1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdPj47XG5cbmNvbnN0IFNUQU5EQVJEOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbl07XG5cbmNvbnN0IFdJVEhfRVhUUkFfSElHSDogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSA9IFtcbiAgUmVhc29uaW5nTGV2ZWwuTG93LFxuICBSZWFzb25pbmdMZXZlbC5NZWRpdW0sXG4gIFJlYXNvbmluZ0xldmVsLkhpZ2gsXG4gIFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbl07XG5cbmNvbnN0IFdJVEhfTUFYOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBSZWFzb25pbmdMZXZlbC5NYXgsXG5dO1xuXG5jb25zdCBHUFRfNV81X1BSTzogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSA9IFtcbiAgUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBSZWFzb25pbmdMZXZlbC5IaWdoLFxuICBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2gsXG5dO1xuXG4vKipcbiAqIEFsaWFzIHRhYmxlIGZvciBleGFjdCAvIG5lYXItZXhhY3QgbGFiZWxzLiBLZXlzIGFyZSB7QGxpbmsgbm9ybWFsaXplUmVhc29uaW5nVG9rZW59XG4gKiByZXN1bHRzLiBQcm92aWRlciB3aXJlcyAoYHhoaWdoYCkgYW5kIHBsYWluIEVuZ2xpc2ggKGB1bHRyYWAsIGBtZWRgKSBib3RoIGxhbmRcbiAqIG9uIHRoZSBnZW5lcmljIGxhZGRlci5cbiAqL1xuY29uc3QgQUxJQVNFUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWw+PiA9IHtcbiAgbG93OiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIGw6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbm9uZTogUmVhc29uaW5nTGV2ZWwuTG93LFxuICBvZmY6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgZGlzYWJsZTogUmVhc29uaW5nTGV2ZWwuTG93LFxuICBkaXNhYmxlZDogUmVhc29uaW5nTGV2ZWwuTG93LFxuICB6ZXJvOiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIG1pbmltYWw6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbWluOiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIHRpbnk6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbGlnaHQ6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbWVkaXVtOiBSZWFzb25pbmdMZXZlbC5NZWRpdW0sXG4gIG1lZDogUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBtaWQ6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgbW9kZXJhdGU6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgZGVmYXVsdDogUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBub3JtYWw6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgYmFsYW5jZWQ6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgaGlnaDogUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgaGk6IFJlYXNvbmluZ0xldmVsLkhpZ2gsXG4gIGhlYXZ5OiBSZWFzb25pbmdMZXZlbC5IaWdoLFxuICBcImV4dHJhLWhpZ2hcIjogUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBleHRyYWhpZ2g6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgeGhpZ2g6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgeGg6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgdWx0cmE6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgXCJ1bHRyYS1oaWdoXCI6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgdWx0cmFoaWdoOiBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2gsXG4gIG1heDogUmVhc29uaW5nTGV2ZWwuTWF4LFxuICBtYXhpbXVtOiBSZWFzb25pbmdMZXZlbC5NYXgsXG4gIGhpZ2hlc3Q6IFJlYXNvbmluZ0xldmVsLk1heCxcbiAgZnVsbDogUmVhc29uaW5nTGV2ZWwuTWF4LFxufTtcblxuY29uc3QgU1VQUE9SVEVEX1ZBTFVFU19QQVRURVJOID1cbiAgL3N1cHBvcnRlZFxccyt2YWx1ZXM/XFxzK2FyZVxccyo6P1xccyooLis/KSg/OlxcLj9cXHMqKD86cGFyYW18dHlwZXxjb2RlKVxcYnwkKS9pcztcbmNvbnN0IFRPS0VOX1BBVFRFUk4gPSAvJyhbXiddKyknfFwiKFteXCJdKylcInxgKFteYF0rKWB8XFxiKFthLXpdW2EtejAtOV8tXSopXFxiL2dpO1xuY29uc3QgTUFYX0pTT05fVU5XUkFQX0RFUFRIID0gODtcblxuaW50ZXJmYWNlIEFsaWFzRG9jdW1lbnQge1xuICByZWFkb25seSB0b2tlbjogc3RyaW5nO1xuICByZWFkb25seSBsZXZlbDogUmVhc29uaW5nTGV2ZWw7XG59XG5cbmNvbnN0IGFsaWFzRG9jdW1lbnRzOiByZWFkb25seSBBbGlhc0RvY3VtZW50W10gPSBPYmplY3QuZW50cmllcyhBTElBU0VTKS5tYXAoKFt0b2tlbiwgbGV2ZWxdKSA9PiAoe1xuICB0b2tlbixcbiAgbGV2ZWwsXG59KSk7XG5cbmNvbnN0IGFsaWFzRnVzZSA9IG5ldyBGdXNlKGFsaWFzRG9jdW1lbnRzLCB7XG4gIGtleXM6IFtcInRva2VuXCJdLFxuICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gIHRocmVzaG9sZDogMC4zNSxcbiAgaWdub3JlTG9jYXRpb246IHRydWUsXG59KTtcblxuLyoqXG4gKiBGdXp6eS1tYXRjaCBvbmUgcmVhc29uaW5nIGxhYmVsIG9udG8ge0BsaW5rIFJlYXNvbmluZ0xldmVsfS5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGlucHV0IGlzIGVtcHR5IG9yIGNhbm5vdCBiZSBtYXBwZWQgY29uZmlkZW50bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlYXNvbmluZyh2YWx1ZTogdW5rbm93bik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJlYXNvbmluZ1Rva2VuKFN0cmluZyh2YWx1ZSkpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4YWN0ID0gQUxJQVNFU1tub3JtYWxpemVkXSA/PyBBTElBU0VTW25vcm1hbGl6ZWQucmVwbGFjZSgvLS9nLCBcIlwiKV07XG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0O1xuICBjb25zdCBbbWF0Y2hdID0gYWxpYXNGdXNlLnNlYXJjaChub3JtYWxpemVkKTtcbiAgaWYgKCFtYXRjaCB8fCAobWF0Y2guc2NvcmUgPz8gMSkgPiAwLjM1KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gbWF0Y2guaXRlbS5sZXZlbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN1cHBvcnRlZCByZWFzb25pbmcgbGV2ZWxzIGZyb20gYW4gdXBzdHJlYW0gZXJyb3IgYm9keS5cbiAqXG4gKiBBY2NlcHRzIHJhdyByZXNwb25zZSB0ZXh0LCBhbHJlYWR5LXBhcnNlZCBKU09OLCBvciBEYXRhYnJpY2tzIGVudmVsb3BlcyB0aGF0XG4gKiBuZXN0IEpTT04gc3RyaW5ncyBzZXZlcmFsIHRpbWVzLiBSZXR1cm5zIGBbXWAgd2hlbiBubyBzdXBwb3J0ZWQtdmFsdWVzIGxpc3RcbiAqIGNhbiBiZSByZWNvdmVyZWQuIFJlc3VsdHMgYXJlIG5vdCBjYWNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlYXNvbmluZ0xldmVscyhib2R5OiB1bmtub3duKTogUmVhc29uaW5nTGV2ZWxbXSB7XG4gIGNvbnN0IGxldmVsczogUmVhc29uaW5nTGV2ZWxbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxSZWFzb25pbmdMZXZlbD4oKTtcbiAgZm9yIChjb25zdCB0ZXh0IG9mIGNvbGxlY3RUZXh0TGVhdmVzKGJvZHkpKSB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBleHRyYWN0U3VwcG9ydGVkVG9rZW5zKHRleHQpKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHBhcnNlUmVhc29uaW5nKHRva2VuKTtcbiAgICAgIGlmICghbGV2ZWwgfHwgc2Vlbi5oYXMobGV2ZWwpKSBjb250aW51ZTtcbiAgICAgIHNlZW4uYWRkKGxldmVsKTtcbiAgICAgIGxldmVscy5wdXNoKGxldmVsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxldmVscztcbn1cblxuLyoqXG4gKiBMb29rIHVwIGRvY3VtZW50ZWQgbGV2ZWxzIGZvciBhIG1vZGVsIGlkZW50aXR5IGluc2lkZSBhIGNhdGFsb2d1ZS5cbiAqXG4gKiBNYXRjaGVzIGV4YWN0IGNhdGFsb2d1ZSBrZXlzIGFuZCBzdWZmaXggaWRlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIGNhdGFsb2d1ZTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUsXG4pOiBSZWFzb25pbmdMZXZlbFtdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga2V5cyA9IGNhdGFsb2d1ZUtleXNGb3IobW9kZWwpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgbGV2ZWxzID0gY2F0YWxvZ3VlW2tleV07XG4gICAgaWYgKGxldmVscz8ubGVuZ3RoKSByZXR1cm4gWy4uLmxldmVsc107XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBsZXZlbHNdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGFsb2d1ZSkpIHtcbiAgICBpZiAoa2V5cy5zb21lKChjYW5kaWRhdGUpID0+IGtleS5lbmRzV2l0aChjYW5kaWRhdGUpIHx8IGNhbmRpZGF0ZS5lbmRzV2l0aChrZXkpKSkge1xuICAgICAgcmV0dXJuIFsuLi5sZXZlbHNdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEhhcmQtY29kZWQgZmFtaWx5IGRlZmF1bHRzIHVzZWQgd2hlbiBkb2N1bWVudGF0aW9uIGhhcyBubyBlbnRyeS5cbiAqXG4gKiBVbmtub3duIGZhbWlsaWVzIHJldHVybiB0aGUgc3RhbmRhcmQgbG93L21lZGl1bS9oaWdoIGxhZGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMobW9kZWw6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBmYW1pbHkgPSBtb2RlbEZhbWlseShtb2RlbCk/LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBtb2RlbC50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmFtaWx5ID09PSBcImdyb2tcIiB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiZ3Jva1wiKSkgcmV0dXJuIFsuLi5XSVRIX0VYVFJBX0hJR0hdO1xuICBpZiAoZmFtaWx5ID09PSBcImdlbWluaVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJnZW1pbmlcIikpIHJldHVybiBbLi4uU1RBTkRBUkRdO1xuICBpZiAoZmFtaWx5ID09PSBcImNsYXVkZVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJjbGF1ZGVcIikpIHJldHVybiBbLi4uV0lUSF9NQVhdO1xuICBpZiAoZmFtaWx5ID09PSBcImdsbVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJnbG1cIikpIHtcbiAgICByZXR1cm4gW1JlYXNvbmluZ0xldmVsLkhpZ2gsIFJlYXNvbmluZ0xldmVsLk1heF07XG4gIH1cbiAgaWYgKFxuICAgIGZhbWlseSA9PT0gXCJkZWVwc2Vla1wiIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcyhcImRlZXBzZWVrXCIpIHx8XG4gICAgZmFtaWx5ID09PSBcImtpbWlcIiB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJraW1pXCIpXG4gICkge1xuICAgIHJldHVybiBbUmVhc29uaW5nTGV2ZWwuTG93LCBSZWFzb25pbmdMZXZlbC5IaWdoLCBSZWFzb25pbmdMZXZlbC5NYXhdO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiaW5rbGluZ1wiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJpbmtsaW5nXCIpKSByZXR1cm4gWy4uLldJVEhfTUFYXTtcbiAgaWYgKGZhbWlseSA9PT0gXCJncHRcIiB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiZ3B0XCIpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJjb2RleFwiKSkge1xuICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKFwib3NzXCIpKSByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbiAgICBpZiAoLyg/Ol58Wy1fLl0pNVstXy5dPzUoPzpbLV8uXXwkKS8udGVzdChub3JtYWxpemVkKSAmJiBub3JtYWxpemVkLmluY2x1ZGVzKFwicHJvXCIpKSB7XG4gICAgICByZXR1cm4gWy4uLkdQVF81XzVfUFJPXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgLyg/Ol58Wy1fLl0pNVstXy5dPzYoPzpbLV8uXXwkKS8udGVzdChub3JtYWxpemVkKSB8fFxuICAgICAgLyg/Ol58Wy1fLl0pNig/OlstXy5dfCQpLy50ZXN0KG5vcm1hbGl6ZWQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gWy4uLldJVEhfTUFYXTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5TVEFOREFSRF07XG4gIH1cbiAgaWYgKC8oPzpefFstXy4vXSlvKD86MXwzfDQpKD86Wy1fLi9dfCQpLy50ZXN0KG1vZGVsKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiY29kZXhcIikpIHtcbiAgICByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbiAgfVxuICByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbn1cblxuLyoqXG4gKiBQcmVmZXIgYSBkb2N1bWVudGF0aW9uIGNhdGFsb2d1ZSB3aGVuIHByb3ZpZGVkLCBvdGhlcndpc2VcbiAqIHtAbGluayBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYXNvbmluZ0xldmVsc0ZvcihcbiAgbW9kZWw6IHN0cmluZyxcbiAgY2F0YWxvZ3VlPzogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUsXG4pOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgaWYgKGNhdGFsb2d1ZSkge1xuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSBkb2N1bWVudGVkUmVhc29uaW5nTGV2ZWxzKG1vZGVsLCBjYXRhbG9ndWUpO1xuICAgIGlmIChkb2N1bWVudGVkPy5sZW5ndGgpIHJldHVybiBkb2N1bWVudGVkO1xuICB9XG4gIHJldHVybiBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzKG1vZGVsKTtcbn1cblxuLyoqXG4gKiBNYXAgYSBnZW5lcmljIGxldmVsIG9udG8gdGhlIG1vc3QgY29tbW9uIHByb3ZpZGVyIHdpcmUgdG9rZW4uXG4gKlxuICogYGV4dHJhLWhpZ2hgIGJlY29tZXMgYHhoaWdoYCBiZWNhdXNlIHRoYXQgaXMgd2hhdCBEYXRhYnJpY2tzIC8gT3BlbkFJIGVycm9yXG4gKiBtZXNzYWdlcyBhZHZlcnRpc2UgdG9kYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWFzb25pbmcobGV2ZWw6IFJlYXNvbmluZ0xldmVsKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxldmVsID09PSBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2ggPyBcInhoaWdoXCIgOiBsZXZlbDtcbn1cblxuLyoqIFdpcmUgdG9rZW5zIHRoYXQgbWVhbiBcImRvIG5vdCByZWFzb25cIiByYXRoZXIgdGhhbiBcInVzZSBhIGxvdyBidWRnZXRcIi4gKi9cbmNvbnN0IERJU0FCTEVEX1JFQVNPTklOR19UT0tFTlMgPSBuZXcgU2V0KFtcIm5vbmVcIiwgXCJvZmZcIiwgXCJkaXNhYmxlXCIsIFwiZGlzYWJsZWRcIl0pO1xuXG4vKipcbiAqIFJlbWFwIGEgcmVxdWVzdGVkIGVmZm9ydCBvbnRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB7QGxpbmsgUmVhc29uaW5nTGV2ZWx9LlxuICpcbiAqIGBub25lYCAvIGBvZmZgIChhbmQgZGlzYWJsZSBhbGlhc2VzKSBhcmUgbm90IGEgbG93IGJ1ZGdldDogd2hlbiB0aGUgbW9kZWxcbiAqIHJlcXVpcmVzIHJlYXNvbmluZywgdGhleSBzbmFwIHRvIHRoZSBzdXBwb3J0ZWQgbGV2ZWwgY2xvc2VzdCB0b1xuICoge0BsaW5rIFJlYXNvbmluZ0xldmVsLk1lZGl1bX0uIE90aGVyIHJlcXVlc3RzIHByZWZlciB0aGUgaGlnaGVzdCBhbGxvd2VkXG4gKiBsZXZlbCBhdCBvciBiZWxvdyB0aGUgcmVxdWVzdCwgb3RoZXJ3aXNlIHRoZSBsb3dlc3QgYWxsb3dlZCBsZXZlbC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlcXVlc3QgY2Fubm90IGJlIHBhcnNlZCBvciBgbGV2ZWxzYCBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwUmVhc29uaW5nKFxuICByZXF1ZXN0ZWQ6IHVua25vd24sXG4gIGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSxcbik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpc0Rpc2FibGVkUmVhc29uaW5nVG9rZW4ocmVxdWVzdGVkKSkge1xuICAgIHJldHVybiBuZWFyZXN0UmVhc29uaW5nKFJlYXNvbmluZ0xldmVsLk1lZGl1bSwgbGV2ZWxzKTtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZVJlYXNvbmluZyhyZXF1ZXN0ZWQpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGxldmVscy5pbmNsdWRlcyhwYXJzZWQpKSByZXR1cm4gcGFyc2VkO1xuICBjb25zdCByZXF1ZXN0ZWRJbmRleCA9IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihwYXJzZWQpO1xuICBsZXQgYmVzdDogUmVhc29uaW5nTGV2ZWwgfCB1bmRlZmluZWQ7XG4gIGxldCBiZXN0SW5kZXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgbGV2ZWxzKSB7XG4gICAgY29uc3QgaW5kZXggPSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChpbmRleCA8PSByZXF1ZXN0ZWRJbmRleCAmJiBpbmRleCA+IGJlc3RJbmRleCkge1xuICAgICAgYmVzdCA9IGxldmVsO1xuICAgICAgYmVzdEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0ID8/IGxldmVsc1swXTtcbn1cblxuZnVuY3Rpb24gaXNEaXNhYmxlZFJlYXNvbmluZ1Rva2VuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIERJU0FCTEVEX1JFQVNPTklOR19UT0tFTlMuaGFzKG5vcm1hbGl6ZVJlYXNvbmluZ1Rva2VuKFN0cmluZyh2YWx1ZSkpKTtcbn1cblxuLyoqIENsb3Nlc3Qgc3VwcG9ydGVkIGxldmVsIHRvIGB0YXJnZXRgOyB0aWVzIHByZWZlciB0aGUgaGlnaGVyIGJ1ZGdldC4gKi9cbmZ1bmN0aW9uIG5lYXJlc3RSZWFzb25pbmcoXG4gIHRhcmdldDogUmVhc29uaW5nTGV2ZWwsXG4gIGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSxcbik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChsZXZlbHMuaW5jbHVkZXModGFyZ2V0KSkgcmV0dXJuIHRhcmdldDtcbiAgY29uc3QgdGFyZ2V0SW5kZXggPSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IGJlc3Q6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkO1xuICBsZXQgYmVzdERpc3RhbmNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IGxldmVsIG9mIGxldmVscykge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoUkVBU09OSU5HX0xFVkVMUy5pbmRleE9mKGxldmVsKSAtIHRhcmdldEluZGV4KTtcbiAgICBpZiAoXG4gICAgICBkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSB8fFxuICAgICAgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UgJiZcbiAgICAgICAgUkVBU09OSU5HX0xFVkVMUy5pbmRleE9mKGxldmVsKSA+IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihiZXN0ID8/IGxldmVsKSlcbiAgICApIHtcbiAgICAgIGJlc3QgPSBsZXZlbDtcbiAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYmVzdDtcbn1cblxuLyoqIFJlc3VsdCBvZiBhZGFwdGluZyByZWFzb25pbmcgZmllbGRzIG9uIGEgZ2F0ZXdheSByZXF1ZXN0IGJvZHkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZWRSZXF1ZXN0UmVhc29uaW5nIHtcbiAgLyoqIEJvZHkgd2l0aCByZW1hcHBlZCB3aXJlIHRva2VucyAoc2FtZSByZWZlcmVuY2Ugd2hlbiB1bmNoYW5nZWQpLiAqL1xuICByZWFkb25seSBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUcnVlIHdoZW4gYW55IHJlYXNvbmluZyBmaWVsZCB3YXMgcmV3cml0dGVuLiAqL1xuICByZWFkb25seSBjaGFuZ2VkOiBib29sZWFuO1xuICAvKiogV2lyZSB0b2tlbiB3cml0dGVuIHdoZW4gYSByZWFzb25pbmcgZmllbGQgd2FzIHByZXNlbnQgYW5kIHJlbWFwcGVkLiAqL1xuICByZWFkb25seSB3aXJlRWZmb3J0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYHJlYXNvbmluZ19lZmZvcnRgIC8gYHJlYXNvbmluZy5lZmZvcnRgIG9udG8gYSBzdXBwb3J0ZWQgbGFkZGVyLlxuICpcbiAqIE1vZGVsLWFnbm9zdGljOiBjYWxsZXJzIHN1cHBseSB0aGUgYWxsb3dlZCBsZXZlbHMgKGxlYXJuZWQsIGRvY3VtZW50ZWQsIG9yXG4gKiBkZWZhdWx0cykuIEJvZGllcyB3aXRob3V0IHJlYXNvbmluZyBmaWVsZHMgYXJlIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0UmVxdWVzdFJlYXNvbmluZyhcbiAgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBsZXZlbHM6IHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10sXG4pOiBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB7XG4gIGlmIChsZXZlbHMubGVuZ3RoID09PSAwKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHRvcExldmVsID0gYm9keS5yZWFzb25pbmdfZWZmb3J0O1xuICBjb25zdCByZWFzb25pbmcgPSBpc1JlY29yZChib2R5LnJlYXNvbmluZykgPyBib2R5LnJlYXNvbmluZyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbmVzdGVkID0gcmVhc29uaW5nPy5lZmZvcnQ7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IHRvcExldmVsID8/IG5lc3RlZDtcbiAgaWYgKHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHJlbWFwcGVkID0gcmVtYXBSZWFzb25pbmcocmVxdWVzdGVkLCBsZXZlbHMpO1xuICBpZiAoIXJlbWFwcGVkKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuICBjb25zdCB3aXJlID0gZm9ybWF0UmVhc29uaW5nKHJlbWFwcGVkKTtcblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICBsZXQgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHkgfTtcblxuICBpZiAodHlwZW9mIHRvcExldmVsID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB0b3BMZXZlbCA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmIChTdHJpbmcodG9wTGV2ZWwpICE9PSB3aXJlKSB7XG4gICAgICBuZXh0ID0geyAuLi5uZXh0LCByZWFzb25pbmdfZWZmb3J0OiB3aXJlIH07XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlYXNvbmluZyAmJiAodHlwZW9mIG5lc3RlZCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbmVzdGVkID09PSBcIm51bWJlclwiKSkge1xuICAgIGlmIChTdHJpbmcobmVzdGVkKSAhPT0gd2lyZSkge1xuICAgICAgbmV4dCA9IHsgLi4ubmV4dCwgcmVhc29uaW5nOiB7IC4uLnJlYXNvbmluZywgZWZmb3J0OiB3aXJlIH0gfTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkXG4gICAgPyB7IGJvZHk6IG5leHQsIGNoYW5nZWQ6IHRydWUsIHdpcmVFZmZvcnQ6IHdpcmUgfVxuICAgIDogeyBib2R5LCBjaGFuZ2VkOiBmYWxzZSwgd2lyZUVmZm9ydDogd2lyZSB9O1xufVxuXG4vKiogTm9ybWFsaXplIGxhYmVscyBmb3IgYWxpYXMgbG9va3VwIChgRXh0cmEgSGlnaGAg4oaSIGBleHRyYS1oaWdoYCkuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmVhc29uaW5nVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgc3RyaW5nVXRpbHNcbiAgICAgIC50cmltVG9OdWxsKHZhbHVlKVxuICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW19cXHNdKy9nLCBcIi1cIilcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOS1dL2csIFwiXCIpXG4gICAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgICAucmVwbGFjZSgvXi18LSQvZywgXCJcIikgPz8gXCJcIlxuICApO1xufVxuXG4vKiogRGVkdXBsaWNhdGUgbGV2ZWxzIHdoaWxlIHByZXNlcnZpbmcgZmlyc3Qtc2VlbiBvcmRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVSZWFzb25pbmdMZXZlbHMobGV2ZWxzOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdKTogUmVhc29uaW5nTGV2ZWxbXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PFJlYXNvbmluZ0xldmVsPigpO1xuICBjb25zdCBvcmRlcmVkOiBSZWFzb25pbmdMZXZlbFtdID0gW107XG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgbGV2ZWxzKSB7XG4gICAgaWYgKHNlZW4uaGFzKGxldmVsKSkgY29udGludWU7XG4gICAgc2Vlbi5hZGQobGV2ZWwpO1xuICAgIG9yZGVyZWQucHVzaChsZXZlbCk7XG4gIH1cbiAgcmV0dXJuIG9yZGVyZWQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RTdXBwb3J0ZWRUb2tlbnModGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBtYXRjaCA9IFNVUFBPUlRFRF9WQUxVRVNfUEFUVEVSTi5leGVjKHRleHQpO1xuICBpZiAoIW1hdGNoPy5bMV0pIHJldHVybiBbXTtcbiAgcmV0dXJuIHRva2Vuc0Zyb21GcmFnbWVudChtYXRjaFsxXSk7XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2d1ZUtleXNGb3IobW9kZWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBkaXJlY3QgPSBtb2RlbENhdGFsb2d1ZUtleShtb2RlbCk7XG4gIGlmIChkaXJlY3QpIGtleXMuYWRkKGRpcmVjdCk7XG4gIGNvbnN0IHN0cmlwcGVkID0gbW9kZWxcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9eZGF0YWJyaWNrc1xcLy8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL15zeXN0ZW1cXC5haVxcLi8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL15kYXRhYnJpY2tzLS8sIFwiXCIpO1xuICBjb25zdCBzdHJpcHBlZEtleSA9IG1vZGVsQ2F0YWxvZ3VlS2V5KHN0cmlwcGVkKTtcbiAgaWYgKHN0cmlwcGVkS2V5KSBrZXlzLmFkZChzdHJpcHBlZEtleSk7XG4gIGNvbnN0IHdpdGhQcmVmaXggPSBtb2RlbENhdGFsb2d1ZUtleShgZGF0YWJyaWNrcy0ke3N0cmlwcGVkfWApO1xuICBpZiAod2l0aFByZWZpeCkga2V5cy5hZGQod2l0aFByZWZpeCk7XG4gIHJldHVybiBbLi4ua2V5c107XG59XG5cbmZ1bmN0aW9uIG1vZGVsQ2F0YWxvZ3VlS2V5KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKG5hbWUpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgbW9kZWxTZWFyY2hRdWVyeSh0cmltbWVkKT8ucmVwbGFjZUFsbChcIiBcIiwgXCItXCIpID8/XG4gICAgdHJpbW1lZFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9eZGF0YWJyaWNrcy0vLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05Ll8tXSsvZywgXCItXCIpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRva2Vuc0Zyb21GcmFnbWVudChmcmFnbWVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGFydCBvZiBmcmFnbWVudC5tYXRjaEFsbChUT0tFTl9QQVRURVJOKSkge1xuICAgIGNvbnN0IHRva2VuID0gcGFydFsxXSA/PyBwYXJ0WzJdID8/IHBhcnRbM10gPz8gcGFydFs0XTtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuID09PSBcImFuZFwiIHx8IHRva2VuID09PSBcIm9yXCIgfHwgdG9rZW4gPT09IFwib2ZcIikgY29udGludWU7XG4gICAgdG9rZW5zLnB1c2godG9rZW4ucmVwbGFjZSgvXltcIidgXSt8W1wiJ2BdKyQvZywgXCJcIikpO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbi8qKlxuICogV2FsayBhIHZhbHVlIHRyZWUsIHVud3JhcHBpbmcgbmVzdGVkIEpTT04gc3RyaW5ncywgYW5kIGNvbGxlY3QgdGV4dCBsZWF2ZXNcbiAqIHRoYXQgbWF5IGNvbnRhaW4gYSBzdXBwb3J0ZWQtdmFsdWVzIHNlbnRlbmNlLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0VGV4dExlYXZlcyh2YWx1ZTogdW5rbm93biwgZGVwdGggPSAwKTogc3RyaW5nW10ge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBkZXB0aCA+IE1BWF9KU09OX1VOV1JBUF9ERVBUSCkgcmV0dXJuIFtdO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBwYXJzZWQgPSB0cnlVbndyYXBKc29uKHRyaW1tZWQpO1xuICAgIGlmIChwYXJzZWQgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWQgIT09IHRyaW1tZWQpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0VGV4dExlYXZlcyhwYXJzZWQsIGRlcHRoICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBbdHJpbW1lZF07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gW1N0cmluZyh2YWx1ZSldO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUuZmxhdE1hcCgoZW50cnkpID0+IGNvbGxlY3RUZXh0TGVhdmVzKGVudHJ5LCBkZXB0aCArIDEpKTtcbiAgfVxuICBpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmxhdE1hcCgoZW50cnkpID0+IGNvbGxlY3RUZXh0TGVhdmVzKGVudHJ5LCBkZXB0aCArIDEpKTtcbn1cblxuZnVuY3Rpb24gdHJ5VW53cmFwSnNvbih0ZXh0OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgY29uc3QgYXNSZWNvcmQgPSBqc29uLnBhcnNlUmVjb3JkKHRleHQpO1xuICBpZiAoYXNSZWNvcmQpIHJldHVybiBhc1JlY29yZDtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZSh0ZXh0KTtcbiAgaWYgKHBhcnNlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcGFyc2VkO1xuICBpZiAodGV4dC5pbmNsdWRlcygnXFxcXFwiJykgfHwgdGV4dC5pbmNsdWRlcyhcIlxcXFxuXCIpKSB7XG4gICAgY29uc3QgdW5lc2NhcGVkID0gdGV4dC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvXFxcXG4vZywgXCJcXG5cIikucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpO1xuICAgIGlmICh1bmVzY2FwZWQgIT09IHRleHQpIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IGpzb24ucGFyc2UodW5lc2NhcGVkKTtcbiAgICAgIGlmIChuZXN0ZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG5lc3RlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhc29uaW5nLXRyYW5zbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzVELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLEdBQUcsRUFBRSxLQUFLO0NBQ3VDLENBQUM7QUFFcEQsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUE4QjtJQUN6RCxjQUFjLENBQUMsR0FBRztJQUNsQixjQUFjLENBQUMsTUFBTTtJQUNyQixjQUFjLENBQUMsSUFBSTtJQUNuQixjQUFjLENBQUMsU0FBUztJQUN4QixjQUFjLENBQUMsR0FBRztDQUNuQixDQUFDO0FBS0YsTUFBTSxRQUFRLEdBQThCO0lBQzFDLGNBQWMsQ0FBQyxHQUFHO0lBQ2xCLGNBQWMsQ0FBQyxNQUFNO0lBQ3JCLGNBQWMsQ0FBQyxJQUFJO0NBQ3BCLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBOEI7SUFDakQsY0FBYyxDQUFDLEdBQUc7SUFDbEIsY0FBYyxDQUFDLE1BQU07SUFDckIsY0FBYyxDQUFDLElBQUk7SUFDbkIsY0FBYyxDQUFDLFNBQVM7Q0FDekIsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUE4QjtJQUMxQyxjQUFjLENBQUMsR0FBRztJQUNsQixjQUFjLENBQUMsTUFBTTtJQUNyQixjQUFjLENBQUMsSUFBSTtJQUNuQixjQUFjLENBQUMsU0FBUztJQUN4QixjQUFjLENBQUMsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQThCO0lBQzdDLGNBQWMsQ0FBQyxNQUFNO0lBQ3JCLGNBQWMsQ0FBQyxJQUFJO0lBQ25CLGNBQWMsQ0FBQyxTQUFTO0NBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLEdBQTZDO0lBQ3hELEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDckIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQ3hCLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDM0IsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQzVCLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRztJQUN4QixPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDM0IsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRztJQUN4QixLQUFLLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDekIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO0lBQzdCLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTTtJQUMxQixHQUFHLEVBQUUsY0FBYyxDQUFDLE1BQU07SUFDMUIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxNQUFNO0lBQy9CLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTTtJQUM5QixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07SUFDN0IsUUFBUSxFQUFFLGNBQWMsQ0FBQyxNQUFNO0lBQy9CLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtJQUN6QixFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDdkIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxJQUFJO0lBQzFCLFlBQVksRUFBRSxjQUFjLENBQUMsU0FBUztJQUN0QyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7SUFDbkMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxTQUFTO0lBQy9CLEVBQUUsRUFBRSxjQUFjLENBQUMsU0FBUztJQUM1QixLQUFLLEVBQUUsY0FBYyxDQUFDLFNBQVM7SUFDL0IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxTQUFTO0lBQ3RDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztJQUNuQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDdkIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQzNCLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRztJQUMzQixJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUc7Q0FDekIsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQzVCLDJFQUEyRSxDQUFDO0FBQzlFLE1BQU0sYUFBYSxHQUFHLHdEQUF3RCxDQUFDO0FBQy9FLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBT2hDLE1BQU0sY0FBYyxHQUE2QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLEtBQUs7SUFDTCxLQUFLO0NBQ04sQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7SUFDekMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQ2YsWUFBWSxFQUFFLElBQUk7SUFDbEIsU0FBUyxFQUFFLElBQUk7SUFDZixjQUFjLEVBQUUsSUFBSTtDQUNyQixDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFjO0lBQzNDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6RixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0UsSUFBSSxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFhO0lBQ2hELE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDdkMsS0FBSyxNQUFNLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzNDLEtBQUssTUFBTSxLQUFLLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFBRSxTQUFTO1lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxLQUFhLEVBQ2IsU0FBa0M7SUFFbEMsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxNQUFNLEVBQUUsTUFBTTtZQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRixPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWE7SUFDbEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUNsRixJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMvRSxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMvRSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFDRSxNQUFNLEtBQUssVUFBVTtRQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMvQixNQUFNLEtBQUssTUFBTTtRQUNqQixVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUMzQixDQUFDO1FBQ0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2pGLElBQUksTUFBTSxLQUFLLEtBQUssSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNuRixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUNFLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDakQseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUMxQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDckYsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEtBQWEsRUFDYixTQUFtQztJQUVuQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELElBQUksVUFBVSxFQUFFLE1BQU07WUFBRSxPQUFPLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQXFCO0lBQ25ELE9BQU8sS0FBSyxLQUFLLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlELENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFFbEY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsU0FBa0IsRUFDbEIsTUFBaUM7SUFFakMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQyxJQUFJLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5QixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELElBQUksSUFBZ0MsQ0FBQztJQUNyQyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxLQUFLLElBQUksY0FBYyxJQUFJLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2IsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxLQUFjO0lBQzlDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6RixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBc0IsRUFDdEIsTUFBaUM7SUFFakMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBZ0MsQ0FBQztJQUNyQyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUN6RSxJQUNFLFFBQVEsR0FBRyxZQUFZO1lBQ3ZCLENBQUMsUUFBUSxLQUFLLFlBQVk7Z0JBQ3hCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQzVFLENBQUM7WUFDRCxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2IsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQVlEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxJQUF1QyxFQUN2QyxNQUFpQztJQUVqQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXpELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEUsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNqQyxNQUFNLFNBQVMsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDO0lBQ3JDLElBQUksU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUU3RCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLElBQUksR0FBNEIsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBRWhELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDO1lBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLFNBQVMsSUFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzVFLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlELE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE9BQU87UUFDWixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtRQUNqRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsdUJBQXVCLENBQUMsS0FBYTtJQUNuRCxPQUFPLENBQ0wsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNmLEVBQUUsV0FBVyxFQUFFO1NBQ2QsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7U0FDMUIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDbkIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsNERBQTREO0FBQzVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUFpQztJQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUFFLFNBQVM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQzFDLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxNQUFNO1FBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixNQUFNLFFBQVEsR0FBRyxLQUFLO1NBQ25CLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1NBQzVCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1NBQzVCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0IsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsSUFBSSxXQUFXO1FBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0QsSUFBSSxVQUFVO1FBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQy9CLE9BQU8sQ0FDTCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUMvQyxPQUFPO2FBQ0osV0FBVyxFQUFFO2FBQ2IsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7YUFDM0IsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUNsQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0I7SUFDMUMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLFNBQVM7UUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQWMsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUNsRCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLHFCQUFxQjtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDL0MsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pGLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyByZWFzb25pbmctYnVkZ2V0IHRyYW5zbGF0aW9uIGZvciBNb2RlbCBTZXJ2aW5nIGFuZCBnYXRld2F5IGNhbGxlcnMuXG4gKlxuICogUHJvdmlkZXIgd2lyZXMgZGlzYWdyZWUgb24gZWZmb3J0IGxhYmVscyAoYHhoaWdoYCwgYHVsdHJhYCwgYG1lZGAsIGBub25lYCwg4oCmKS5cbiAqIFRoaXMgbW9kdWxlIG93bnMgb25lIGluZHVzdHJ5LXNoYXBlZCBsYWRkZXIgYW5kIHR3byBwYXJzZXJzOlxuICpcbiAqIC0ge0BsaW5rIHBhcnNlUmVhc29uaW5nfTogZnV6enktbWF0Y2ggb25lIGxhYmVsIG9udG8ge0BsaW5rIFJlYXNvbmluZ0xldmVsfVxuICogLSB7QGxpbmsgcGFyc2VSZWFzb25pbmdMZXZlbHN9OiB1bndyYXAgbmVzdGVkIC8gZG91YmxlLWVuY29kZWQgZXJyb3IgYm9kaWVzXG4gKiAtIHtAbGluayByZW1hcFJlYXNvbmluZ30gLyB7QGxpbmsgYWRhcHRSZXF1ZXN0UmVhc29uaW5nfTogbWFwIGEgcmVxdWVzdCBvbnRvIGFcbiAqICAgc3VwcG9ydGVkIGxhZGRlciBhbmQgcmV3cml0ZSBgcmVhc29uaW5nX2VmZm9ydGAgLyBgcmVhc29uaW5nLmVmZm9ydGBcbiAqXG4gKiBEb2N1bWVudGVkIG1vZGVsIGxhZGRlcnMgY29tZSBmcm9tIHRoZSBjb21taXR0ZWQgSFRNTCBzbmFwc2hvdCByZWZyZXNoZWQgYnlcbiAqIGBidW4gcnVuIC0tZmlsdGVyICdAZGJ4LXRvb2xzL21vZGVsJyBtZXRhZGF0YWAgKHNhbWUgY2FjaGUgcGF0aCBhc1xuICogY2FwYWJpbGl0aWVzIC8gcmF0ZSBsaW1pdHMpLiBFcnJvci1ib2R5IHBhcnNpbmcgaXMgbmV2ZXIgY2FjaGVkOyBjYWxsZXJzXG4gKiBwZXJzaXN0IGxlYXJuZWQgbGFkZGVycyB2aWEgdGhlIG1ldGFkYXRhIG1vZHVsZS5cbiAqXG4gKiBFcnJvciBib2RpZXMgYXJyaXZlIGFzIGNvbXBsZXRlIEhUVFAgSlNPTiB3aGV0aGVyIHRoZSByZXF1ZXN0IGFza2VkIGZvclxuICogc3RyZWFtaW5nIG9yIG5vdCAoRGF0YWJyaWNrcyByZWplY3RzIHVuc3VwcG9ydGVkIGVmZm9ydHMgd2l0aCA0MDAgYmVmb3JlIFNTRVxuICogc3RhcnRzKSwgc28ge0BsaW5rIHBhcnNlUmVhc29uaW5nTGV2ZWxzfSBhcHBsaWVzIHRvIGJvdGggcGF0aHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBhcnNlUmVjb3JkLCBwYXJzZSwgaXNSZWNvcmQsIHRyaW1Ub051bGwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IEZ1c2UgZnJvbSBcImZ1c2UuanNcIjtcblxuaW1wb3J0IHsgbW9kZWxGYW1pbHksIG1vZGVsU2VhcmNoUXVlcnkgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcblxuLyoqIEluZHVzdHJ5LWdlbmVyaWMgcmVhc29uaW5nIGJ1ZGdldCBsZXZlbHMsIGxvd2VzdCB0byBoaWdoZXN0LiAqL1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nTGV2ZWwgPSBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJleHRyYS1oaWdoXCIgfCBcIm1heFwiO1xuXG4vKiogUnVudGltZSB2YWx1ZXMgZm9yIHtAbGluayBSZWFzb25pbmdMZXZlbH0uICovXG5leHBvcnQgY29uc3QgUmVhc29uaW5nTGV2ZWwgPSB7XG4gIExvdzogXCJsb3dcIixcbiAgTWVkaXVtOiBcIm1lZGl1bVwiLFxuICBIaWdoOiBcImhpZ2hcIixcbiAgRXh0cmFIaWdoOiBcImV4dHJhLWhpZ2hcIixcbiAgTWF4OiBcIm1heFwiLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWw+O1xuXG4vKiogQ2Fub25pY2FsIGxhZGRlciBvcmRlciB1c2VkIHdoZW4gc29ydGluZyBvciByYW5raW5nIHJlbWFwcy4gKi9cbmV4cG9ydCBjb25zdCBSRUFTT05JTkdfTEVWRUxTOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBSZWFzb25pbmdMZXZlbC5NYXgsXG5dO1xuXG4vKiogTW9kZWwgaWRlbnRpdHkg4oaSIGFjY2VwdGVkIHtAbGluayBSZWFzb25pbmdMZXZlbH0gbGFkZGVyLiAqL1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdPj47XG5cbmNvbnN0IFNUQU5EQVJEOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbl07XG5cbmNvbnN0IFdJVEhfRVhUUkFfSElHSDogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSA9IFtcbiAgUmVhc29uaW5nTGV2ZWwuTG93LFxuICBSZWFzb25pbmdMZXZlbC5NZWRpdW0sXG4gIFJlYXNvbmluZ0xldmVsLkhpZ2gsXG4gIFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbl07XG5cbmNvbnN0IFdJVEhfTUFYOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdID0gW1xuICBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBSZWFzb25pbmdMZXZlbC5NYXgsXG5dO1xuXG5jb25zdCBHUFRfNV81X1BSTzogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSA9IFtcbiAgUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBSZWFzb25pbmdMZXZlbC5IaWdoLFxuICBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2gsXG5dO1xuXG4vKipcbiAqIEFsaWFzIHRhYmxlIGZvciBleGFjdCAvIG5lYXItZXhhY3QgbGFiZWxzLiBLZXlzIGFyZSB7QGxpbmsgbm9ybWFsaXplUmVhc29uaW5nVG9rZW59XG4gKiByZXN1bHRzLiBQcm92aWRlciB3aXJlcyAoYHhoaWdoYCkgYW5kIHBsYWluIEVuZ2xpc2ggKGB1bHRyYWAsIGBtZWRgKSBib3RoIGxhbmRcbiAqIG9uIHRoZSBnZW5lcmljIGxhZGRlci5cbiAqL1xuY29uc3QgQUxJQVNFUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWw+PiA9IHtcbiAgbG93OiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIGw6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbm9uZTogUmVhc29uaW5nTGV2ZWwuTG93LFxuICBvZmY6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgZGlzYWJsZTogUmVhc29uaW5nTGV2ZWwuTG93LFxuICBkaXNhYmxlZDogUmVhc29uaW5nTGV2ZWwuTG93LFxuICB6ZXJvOiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIG1pbmltYWw6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbWluOiBSZWFzb25pbmdMZXZlbC5Mb3csXG4gIHRpbnk6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbGlnaHQ6IFJlYXNvbmluZ0xldmVsLkxvdyxcbiAgbWVkaXVtOiBSZWFzb25pbmdMZXZlbC5NZWRpdW0sXG4gIG1lZDogUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBtaWQ6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgbW9kZXJhdGU6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgZGVmYXVsdDogUmVhc29uaW5nTGV2ZWwuTWVkaXVtLFxuICBub3JtYWw6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgYmFsYW5jZWQ6IFJlYXNvbmluZ0xldmVsLk1lZGl1bSxcbiAgaGlnaDogUmVhc29uaW5nTGV2ZWwuSGlnaCxcbiAgaGk6IFJlYXNvbmluZ0xldmVsLkhpZ2gsXG4gIGhlYXZ5OiBSZWFzb25pbmdMZXZlbC5IaWdoLFxuICBcImV4dHJhLWhpZ2hcIjogUmVhc29uaW5nTGV2ZWwuRXh0cmFIaWdoLFxuICBleHRyYWhpZ2g6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgeGhpZ2g6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgeGg6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgdWx0cmE6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgXCJ1bHRyYS1oaWdoXCI6IFJlYXNvbmluZ0xldmVsLkV4dHJhSGlnaCxcbiAgdWx0cmFoaWdoOiBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2gsXG4gIG1heDogUmVhc29uaW5nTGV2ZWwuTWF4LFxuICBtYXhpbXVtOiBSZWFzb25pbmdMZXZlbC5NYXgsXG4gIGhpZ2hlc3Q6IFJlYXNvbmluZ0xldmVsLk1heCxcbiAgZnVsbDogUmVhc29uaW5nTGV2ZWwuTWF4LFxufTtcblxuY29uc3QgU1VQUE9SVEVEX1ZBTFVFU19QQVRURVJOID1cbiAgL3N1cHBvcnRlZFxccyt2YWx1ZXM/XFxzK2FyZVxccyo6P1xccyooLis/KSg/OlxcLj9cXHMqKD86cGFyYW18dHlwZXxjb2RlKVxcYnwkKS9pcztcbmNvbnN0IFRPS0VOX1BBVFRFUk4gPSAvJyhbXiddKyknfFwiKFteXCJdKylcInxgKFteYF0rKWB8XFxiKFthLXpdW2EtejAtOV8tXSopXFxiL2dpO1xuY29uc3QgTUFYX0pTT05fVU5XUkFQX0RFUFRIID0gODtcblxuaW50ZXJmYWNlIEFsaWFzRG9jdW1lbnQge1xuICByZWFkb25seSB0b2tlbjogc3RyaW5nO1xuICByZWFkb25seSBsZXZlbDogUmVhc29uaW5nTGV2ZWw7XG59XG5cbmNvbnN0IGFsaWFzRG9jdW1lbnRzOiByZWFkb25seSBBbGlhc0RvY3VtZW50W10gPSBPYmplY3QuZW50cmllcyhBTElBU0VTKS5tYXAoKFt0b2tlbiwgbGV2ZWxdKSA9PiAoe1xuICB0b2tlbixcbiAgbGV2ZWwsXG59KSk7XG5cbmNvbnN0IGFsaWFzRnVzZSA9IG5ldyBGdXNlKGFsaWFzRG9jdW1lbnRzLCB7XG4gIGtleXM6IFtcInRva2VuXCJdLFxuICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gIHRocmVzaG9sZDogMC4zNSxcbiAgaWdub3JlTG9jYXRpb246IHRydWUsXG59KTtcblxuLyoqXG4gKiBGdXp6eS1tYXRjaCBvbmUgcmVhc29uaW5nIGxhYmVsIG9udG8ge0BsaW5rIFJlYXNvbmluZ0xldmVsfS5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGlucHV0IGlzIGVtcHR5IG9yIGNhbm5vdCBiZSBtYXBwZWQgY29uZmlkZW50bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlYXNvbmluZyh2YWx1ZTogdW5rbm93bik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJlYXNvbmluZ1Rva2VuKFN0cmluZyh2YWx1ZSkpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4YWN0ID0gQUxJQVNFU1tub3JtYWxpemVkXSA/PyBBTElBU0VTW25vcm1hbGl6ZWQucmVwbGFjZSgvLS9nLCBcIlwiKV07XG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0O1xuICBjb25zdCBbbWF0Y2hdID0gYWxpYXNGdXNlLnNlYXJjaChub3JtYWxpemVkKTtcbiAgaWYgKCFtYXRjaCB8fCAobWF0Y2guc2NvcmUgPz8gMSkgPiAwLjM1KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gbWF0Y2guaXRlbS5sZXZlbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN1cHBvcnRlZCByZWFzb25pbmcgbGV2ZWxzIGZyb20gYW4gdXBzdHJlYW0gZXJyb3IgYm9keS5cbiAqXG4gKiBBY2NlcHRzIHJhdyByZXNwb25zZSB0ZXh0LCBhbHJlYWR5LXBhcnNlZCBKU09OLCBvciBEYXRhYnJpY2tzIGVudmVsb3BlcyB0aGF0XG4gKiBuZXN0IEpTT04gc3RyaW5ncyBzZXZlcmFsIHRpbWVzLiBSZXR1cm5zIGBbXWAgd2hlbiBubyBzdXBwb3J0ZWQtdmFsdWVzIGxpc3RcbiAqIGNhbiBiZSByZWNvdmVyZWQuIFJlc3VsdHMgYXJlIG5vdCBjYWNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlYXNvbmluZ0xldmVscyhib2R5OiB1bmtub3duKTogUmVhc29uaW5nTGV2ZWxbXSB7XG4gIGNvbnN0IGxldmVsczogUmVhc29uaW5nTGV2ZWxbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxSZWFzb25pbmdMZXZlbD4oKTtcbiAgZm9yIChjb25zdCB0ZXh0IG9mIGNvbGxlY3RUZXh0TGVhdmVzKGJvZHkpKSB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBleHRyYWN0U3VwcG9ydGVkVG9rZW5zKHRleHQpKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHBhcnNlUmVhc29uaW5nKHRva2VuKTtcbiAgICAgIGlmICghbGV2ZWwgfHwgc2Vlbi5oYXMobGV2ZWwpKSBjb250aW51ZTtcbiAgICAgIHNlZW4uYWRkKGxldmVsKTtcbiAgICAgIGxldmVscy5wdXNoKGxldmVsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxldmVscztcbn1cblxuLyoqXG4gKiBMb29rIHVwIGRvY3VtZW50ZWQgbGV2ZWxzIGZvciBhIG1vZGVsIGlkZW50aXR5IGluc2lkZSBhIGNhdGFsb2d1ZS5cbiAqXG4gKiBNYXRjaGVzIGV4YWN0IGNhdGFsb2d1ZSBrZXlzIGFuZCBzdWZmaXggaWRlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIGNhdGFsb2d1ZTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUsXG4pOiBSZWFzb25pbmdMZXZlbFtdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga2V5cyA9IGNhdGFsb2d1ZUtleXNGb3IobW9kZWwpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgbGV2ZWxzID0gY2F0YWxvZ3VlW2tleV07XG4gICAgaWYgKGxldmVscz8ubGVuZ3RoKSByZXR1cm4gWy4uLmxldmVsc107XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBsZXZlbHNdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGFsb2d1ZSkpIHtcbiAgICBpZiAoa2V5cy5zb21lKChjYW5kaWRhdGUpID0+IGtleS5lbmRzV2l0aChjYW5kaWRhdGUpIHx8IGNhbmRpZGF0ZS5lbmRzV2l0aChrZXkpKSkge1xuICAgICAgcmV0dXJuIFsuLi5sZXZlbHNdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEhhcmQtY29kZWQgZmFtaWx5IGRlZmF1bHRzIHVzZWQgd2hlbiBkb2N1bWVudGF0aW9uIGhhcyBubyBlbnRyeS5cbiAqXG4gKiBVbmtub3duIGZhbWlsaWVzIHJldHVybiB0aGUgc3RhbmRhcmQgbG93L21lZGl1bS9oaWdoIGxhZGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMobW9kZWw6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBmYW1pbHkgPSBtb2RlbEZhbWlseShtb2RlbCk/LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBtb2RlbC50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmFtaWx5ID09PSBcImdyb2tcIiB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiZ3Jva1wiKSkgcmV0dXJuIFsuLi5XSVRIX0VYVFJBX0hJR0hdO1xuICBpZiAoZmFtaWx5ID09PSBcImdlbWluaVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJnZW1pbmlcIikpIHJldHVybiBbLi4uU1RBTkRBUkRdO1xuICBpZiAoZmFtaWx5ID09PSBcImNsYXVkZVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJjbGF1ZGVcIikpIHJldHVybiBbLi4uV0lUSF9NQVhdO1xuICBpZiAoZmFtaWx5ID09PSBcImdsbVwiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJnbG1cIikpIHtcbiAgICByZXR1cm4gW1JlYXNvbmluZ0xldmVsLkhpZ2gsIFJlYXNvbmluZ0xldmVsLk1heF07XG4gIH1cbiAgaWYgKFxuICAgIGZhbWlseSA9PT0gXCJkZWVwc2Vla1wiIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcyhcImRlZXBzZWVrXCIpIHx8XG4gICAgZmFtaWx5ID09PSBcImtpbWlcIiB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJraW1pXCIpXG4gICkge1xuICAgIHJldHVybiBbUmVhc29uaW5nTGV2ZWwuTG93LCBSZWFzb25pbmdMZXZlbC5IaWdoLCBSZWFzb25pbmdMZXZlbC5NYXhdO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiaW5rbGluZ1wiIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJpbmtsaW5nXCIpKSByZXR1cm4gWy4uLldJVEhfTUFYXTtcbiAgaWYgKGZhbWlseSA9PT0gXCJncHRcIiB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiZ3B0XCIpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoXCJjb2RleFwiKSkge1xuICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKFwib3NzXCIpKSByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbiAgICBpZiAoLyg/Ol58Wy1fLl0pNVstXy5dPzUoPzpbLV8uXXwkKS8udGVzdChub3JtYWxpemVkKSAmJiBub3JtYWxpemVkLmluY2x1ZGVzKFwicHJvXCIpKSB7XG4gICAgICByZXR1cm4gWy4uLkdQVF81XzVfUFJPXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgLyg/Ol58Wy1fLl0pNVstXy5dPzYoPzpbLV8uXXwkKS8udGVzdChub3JtYWxpemVkKSB8fFxuICAgICAgLyg/Ol58Wy1fLl0pNig/OlstXy5dfCQpLy50ZXN0KG5vcm1hbGl6ZWQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gWy4uLldJVEhfTUFYXTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5TVEFOREFSRF07XG4gIH1cbiAgaWYgKC8oPzpefFstXy4vXSlvKD86MXwzfDQpKD86Wy1fLi9dfCQpLy50ZXN0KG1vZGVsKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKFwiY29kZXhcIikpIHtcbiAgICByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbiAgfVxuICByZXR1cm4gWy4uLlNUQU5EQVJEXTtcbn1cblxuLyoqXG4gKiBQcmVmZXIgYSBkb2N1bWVudGF0aW9uIGNhdGFsb2d1ZSB3aGVuIHByb3ZpZGVkLCBvdGhlcndpc2VcbiAqIHtAbGluayBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYXNvbmluZ0xldmVsc0ZvcihcbiAgbW9kZWw6IHN0cmluZyxcbiAgY2F0YWxvZ3VlPzogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUsXG4pOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgaWYgKGNhdGFsb2d1ZSkge1xuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSBkb2N1bWVudGVkUmVhc29uaW5nTGV2ZWxzKG1vZGVsLCBjYXRhbG9ndWUpO1xuICAgIGlmIChkb2N1bWVudGVkPy5sZW5ndGgpIHJldHVybiBkb2N1bWVudGVkO1xuICB9XG4gIHJldHVybiBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzKG1vZGVsKTtcbn1cblxuLyoqXG4gKiBNYXAgYSBnZW5lcmljIGxldmVsIG9udG8gdGhlIG1vc3QgY29tbW9uIHByb3ZpZGVyIHdpcmUgdG9rZW4uXG4gKlxuICogYGV4dHJhLWhpZ2hgIGJlY29tZXMgYHhoaWdoYCBiZWNhdXNlIHRoYXQgaXMgd2hhdCBEYXRhYnJpY2tzIC8gT3BlbkFJIGVycm9yXG4gKiBtZXNzYWdlcyBhZHZlcnRpc2UgdG9kYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWFzb25pbmcobGV2ZWw6IFJlYXNvbmluZ0xldmVsKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxldmVsID09PSBSZWFzb25pbmdMZXZlbC5FeHRyYUhpZ2ggPyBcInhoaWdoXCIgOiBsZXZlbDtcbn1cblxuLyoqIFdpcmUgdG9rZW5zIHRoYXQgbWVhbiBcImRvIG5vdCByZWFzb25cIiByYXRoZXIgdGhhbiBcInVzZSBhIGxvdyBidWRnZXRcIi4gKi9cbmNvbnN0IERJU0FCTEVEX1JFQVNPTklOR19UT0tFTlMgPSBuZXcgU2V0KFtcIm5vbmVcIiwgXCJvZmZcIiwgXCJkaXNhYmxlXCIsIFwiZGlzYWJsZWRcIl0pO1xuXG4vKipcbiAqIFJlbWFwIGEgcmVxdWVzdGVkIGVmZm9ydCBvbnRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB7QGxpbmsgUmVhc29uaW5nTGV2ZWx9LlxuICpcbiAqIGBub25lYCAvIGBvZmZgIChhbmQgZGlzYWJsZSBhbGlhc2VzKSBhcmUgbm90IGEgbG93IGJ1ZGdldDogd2hlbiB0aGUgbW9kZWxcbiAqIHJlcXVpcmVzIHJlYXNvbmluZywgdGhleSBzbmFwIHRvIHRoZSBzdXBwb3J0ZWQgbGV2ZWwgY2xvc2VzdCB0b1xuICoge0BsaW5rIFJlYXNvbmluZ0xldmVsLk1lZGl1bX0uIE90aGVyIHJlcXVlc3RzIHByZWZlciB0aGUgaGlnaGVzdCBhbGxvd2VkXG4gKiBsZXZlbCBhdCBvciBiZWxvdyB0aGUgcmVxdWVzdCwgb3RoZXJ3aXNlIHRoZSBsb3dlc3QgYWxsb3dlZCBsZXZlbC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlcXVlc3QgY2Fubm90IGJlIHBhcnNlZCBvciBgbGV2ZWxzYCBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwUmVhc29uaW5nKFxuICByZXF1ZXN0ZWQ6IHVua25vd24sXG4gIGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSxcbik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpc0Rpc2FibGVkUmVhc29uaW5nVG9rZW4ocmVxdWVzdGVkKSkge1xuICAgIHJldHVybiBuZWFyZXN0UmVhc29uaW5nKFJlYXNvbmluZ0xldmVsLk1lZGl1bSwgbGV2ZWxzKTtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZVJlYXNvbmluZyhyZXF1ZXN0ZWQpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGxldmVscy5pbmNsdWRlcyhwYXJzZWQpKSByZXR1cm4gcGFyc2VkO1xuICBjb25zdCByZXF1ZXN0ZWRJbmRleCA9IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihwYXJzZWQpO1xuICBsZXQgYmVzdDogUmVhc29uaW5nTGV2ZWwgfCB1bmRlZmluZWQ7XG4gIGxldCBiZXN0SW5kZXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgbGV2ZWxzKSB7XG4gICAgY29uc3QgaW5kZXggPSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChpbmRleCA8PSByZXF1ZXN0ZWRJbmRleCAmJiBpbmRleCA+IGJlc3RJbmRleCkge1xuICAgICAgYmVzdCA9IGxldmVsO1xuICAgICAgYmVzdEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0ID8/IGxldmVsc1swXTtcbn1cblxuZnVuY3Rpb24gaXNEaXNhYmxlZFJlYXNvbmluZ1Rva2VuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIERJU0FCTEVEX1JFQVNPTklOR19UT0tFTlMuaGFzKG5vcm1hbGl6ZVJlYXNvbmluZ1Rva2VuKFN0cmluZyh2YWx1ZSkpKTtcbn1cblxuLyoqIENsb3Nlc3Qgc3VwcG9ydGVkIGxldmVsIHRvIGB0YXJnZXRgOyB0aWVzIHByZWZlciB0aGUgaGlnaGVyIGJ1ZGdldC4gKi9cbmZ1bmN0aW9uIG5lYXJlc3RSZWFzb25pbmcoXG4gIHRhcmdldDogUmVhc29uaW5nTGV2ZWwsXG4gIGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSxcbik6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChsZXZlbHMuaW5jbHVkZXModGFyZ2V0KSkgcmV0dXJuIHRhcmdldDtcbiAgY29uc3QgdGFyZ2V0SW5kZXggPSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IGJlc3Q6IFJlYXNvbmluZ0xldmVsIHwgdW5kZWZpbmVkO1xuICBsZXQgYmVzdERpc3RhbmNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IGxldmVsIG9mIGxldmVscykge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoUkVBU09OSU5HX0xFVkVMUy5pbmRleE9mKGxldmVsKSAtIHRhcmdldEluZGV4KTtcbiAgICBpZiAoXG4gICAgICBkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSB8fFxuICAgICAgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UgJiZcbiAgICAgICAgUkVBU09OSU5HX0xFVkVMUy5pbmRleE9mKGxldmVsKSA+IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihiZXN0ID8/IGxldmVsKSlcbiAgICApIHtcbiAgICAgIGJlc3QgPSBsZXZlbDtcbiAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYmVzdDtcbn1cblxuLyoqIFJlc3VsdCBvZiBhZGFwdGluZyByZWFzb25pbmcgZmllbGRzIG9uIGEgZ2F0ZXdheSByZXF1ZXN0IGJvZHkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZWRSZXF1ZXN0UmVhc29uaW5nIHtcbiAgLyoqIEJvZHkgd2l0aCByZW1hcHBlZCB3aXJlIHRva2VucyAoc2FtZSByZWZlcmVuY2Ugd2hlbiB1bmNoYW5nZWQpLiAqL1xuICByZWFkb25seSBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUcnVlIHdoZW4gYW55IHJlYXNvbmluZyBmaWVsZCB3YXMgcmV3cml0dGVuLiAqL1xuICByZWFkb25seSBjaGFuZ2VkOiBib29sZWFuO1xuICAvKiogV2lyZSB0b2tlbiB3cml0dGVuIHdoZW4gYSByZWFzb25pbmcgZmllbGQgd2FzIHByZXNlbnQgYW5kIHJlbWFwcGVkLiAqL1xuICByZWFkb25seSB3aXJlRWZmb3J0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYHJlYXNvbmluZ19lZmZvcnRgIC8gYHJlYXNvbmluZy5lZmZvcnRgIG9udG8gYSBzdXBwb3J0ZWQgbGFkZGVyLlxuICpcbiAqIE1vZGVsLWFnbm9zdGljOiBjYWxsZXJzIHN1cHBseSB0aGUgYWxsb3dlZCBsZXZlbHMgKGxlYXJuZWQsIGRvY3VtZW50ZWQsIG9yXG4gKiBkZWZhdWx0cykuIEJvZGllcyB3aXRob3V0IHJlYXNvbmluZyBmaWVsZHMgYXJlIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0UmVxdWVzdFJlYXNvbmluZyhcbiAgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBsZXZlbHM6IHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10sXG4pOiBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB7XG4gIGlmIChsZXZlbHMubGVuZ3RoID09PSAwKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHRvcExldmVsID0gYm9keS5yZWFzb25pbmdfZWZmb3J0O1xuICBjb25zdCByZWFzb25pbmcgPSBpc1JlY29yZChib2R5LnJlYXNvbmluZykgPyBib2R5LnJlYXNvbmluZyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbmVzdGVkID0gcmVhc29uaW5nPy5lZmZvcnQ7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IHRvcExldmVsID8/IG5lc3RlZDtcbiAgaWYgKHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHJlbWFwcGVkID0gcmVtYXBSZWFzb25pbmcocmVxdWVzdGVkLCBsZXZlbHMpO1xuICBpZiAoIXJlbWFwcGVkKSByZXR1cm4geyBib2R5LCBjaGFuZ2VkOiBmYWxzZSB9O1xuICBjb25zdCB3aXJlID0gZm9ybWF0UmVhc29uaW5nKHJlbWFwcGVkKTtcblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICBsZXQgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHkgfTtcblxuICBpZiAodHlwZW9mIHRvcExldmVsID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB0b3BMZXZlbCA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmIChTdHJpbmcodG9wTGV2ZWwpICE9PSB3aXJlKSB7XG4gICAgICBuZXh0ID0geyAuLi5uZXh0LCByZWFzb25pbmdfZWZmb3J0OiB3aXJlIH07XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlYXNvbmluZyAmJiAodHlwZW9mIG5lc3RlZCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbmVzdGVkID09PSBcIm51bWJlclwiKSkge1xuICAgIGlmIChTdHJpbmcobmVzdGVkKSAhPT0gd2lyZSkge1xuICAgICAgbmV4dCA9IHsgLi4ubmV4dCwgcmVhc29uaW5nOiB7IC4uLnJlYXNvbmluZywgZWZmb3J0OiB3aXJlIH0gfTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkXG4gICAgPyB7IGJvZHk6IG5leHQsIGNoYW5nZWQ6IHRydWUsIHdpcmVFZmZvcnQ6IHdpcmUgfVxuICAgIDogeyBib2R5LCBjaGFuZ2VkOiBmYWxzZSwgd2lyZUVmZm9ydDogd2lyZSB9O1xufVxuXG4vKiogTm9ybWFsaXplIGxhYmVscyBmb3IgYWxpYXMgbG9va3VwIChgRXh0cmEgSGlnaGAg4oaSIGBleHRyYS1oaWdoYCkuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmVhc29uaW5nVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHJpbVRvTnVsbCh2YWx1ZSlcbiAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1tfXFxzXSsvZywgXCItXCIpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLy0rL2csIFwiLVwiKVxuICAgICAgLnJlcGxhY2UoL14tfC0kL2csIFwiXCIpID8/IFwiXCJcbiAgKTtcbn1cblxuLyoqIERlZHVwbGljYXRlIGxldmVscyB3aGlsZSBwcmVzZXJ2aW5nIGZpcnN0LXNlZW4gb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxSZWFzb25pbmdMZXZlbD4oKTtcbiAgY29uc3Qgb3JkZXJlZDogUmVhc29uaW5nTGV2ZWxbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxldmVsIG9mIGxldmVscykge1xuICAgIGlmIChzZWVuLmhhcyhsZXZlbCkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKGxldmVsKTtcbiAgICBvcmRlcmVkLnB1c2gobGV2ZWwpO1xuICB9XG4gIHJldHVybiBvcmRlcmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0U3VwcG9ydGVkVG9rZW5zKHRleHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWF0Y2ggPSBTVVBQT1JURURfVkFMVUVTX1BBVFRFUk4uZXhlYyh0ZXh0KTtcbiAgaWYgKCFtYXRjaD8uWzFdKSByZXR1cm4gW107XG4gIHJldHVybiB0b2tlbnNGcm9tRnJhZ21lbnQobWF0Y2hbMV0pO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVLZXlzRm9yKG1vZGVsOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZGlyZWN0ID0gbW9kZWxDYXRhbG9ndWVLZXkobW9kZWwpO1xuICBpZiAoZGlyZWN0KSBrZXlzLmFkZChkaXJlY3QpO1xuICBjb25zdCBzdHJpcHBlZCA9IG1vZGVsXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXmRhdGFicmlja3NcXC8vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9ec3lzdGVtXFwuYWlcXC4vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9eZGF0YWJyaWNrcy0vLCBcIlwiKTtcbiAgY29uc3Qgc3RyaXBwZWRLZXkgPSBtb2RlbENhdGFsb2d1ZUtleShzdHJpcHBlZCk7XG4gIGlmIChzdHJpcHBlZEtleSkga2V5cy5hZGQoc3RyaXBwZWRLZXkpO1xuICBjb25zdCB3aXRoUHJlZml4ID0gbW9kZWxDYXRhbG9ndWVLZXkoYGRhdGFicmlja3MtJHtzdHJpcHBlZH1gKTtcbiAgaWYgKHdpdGhQcmVmaXgpIGtleXMuYWRkKHdpdGhQcmVmaXgpO1xuICByZXR1cm4gWy4uLmtleXNdO1xufVxuXG5mdW5jdGlvbiBtb2RlbENhdGFsb2d1ZUtleShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0cmltbWVkID0gdHJpbVRvTnVsbChuYW1lKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKFxuICAgIG1vZGVsU2VhcmNoUXVlcnkodHJpbW1lZCk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKSA/P1xuICAgIHRyaW1tZWRcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvXmRhdGFicmlja3MtLywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOS5fLV0rL2csIFwiLVwiKVxuICApO1xufVxuXG5mdW5jdGlvbiB0b2tlbnNGcm9tRnJhZ21lbnQoZnJhZ21lbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgZnJhZ21lbnQubWF0Y2hBbGwoVE9LRU5fUEFUVEVSTikpIHtcbiAgICBjb25zdCB0b2tlbiA9IHBhcnRbMV0gPz8gcGFydFsyXSA/PyBwYXJ0WzNdID8/IHBhcnRbNF07XG4gICAgaWYgKCF0b2tlbiB8fCB0b2tlbiA9PT0gXCJhbmRcIiB8fCB0b2tlbiA9PT0gXCJvclwiIHx8IHRva2VuID09PSBcIm9mXCIpIGNvbnRpbnVlO1xuICAgIHRva2Vucy5wdXNoKHRva2VuLnJlcGxhY2UoL15bXCInYF0rfFtcIidgXSskL2csIFwiXCIpKTtcbiAgfVxuICByZXR1cm4gdG9rZW5zO1xufVxuXG4vKipcbiAqIFdhbGsgYSB2YWx1ZSB0cmVlLCB1bndyYXBwaW5nIG5lc3RlZCBKU09OIHN0cmluZ3MsIGFuZCBjb2xsZWN0IHRleHQgbGVhdmVzXG4gKiB0aGF0IG1heSBjb250YWluIGEgc3VwcG9ydGVkLXZhbHVlcyBzZW50ZW5jZS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdFRleHRMZWF2ZXModmFsdWU6IHVua25vd24sIGRlcHRoID0gMCk6IHN0cmluZ1tdIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgZGVwdGggPiBNQVhfSlNPTl9VTldSQVBfREVQVEgpIHJldHVybiBbXTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSByZXR1cm4gW107XG4gICAgY29uc3QgcGFyc2VkID0gdHJ5VW53cmFwSnNvbih0cmltbWVkKTtcbiAgICBpZiAocGFyc2VkICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkICE9PSB0cmltbWVkKSB7XG4gICAgICByZXR1cm4gY29sbGVjdFRleHRMZWF2ZXMocGFyc2VkLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gW3RyaW1tZWRdO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFtTdHJpbmcodmFsdWUpXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmZsYXRNYXAoKGVudHJ5KSA9PiBjb2xsZWN0VGV4dExlYXZlcyhlbnRyeSwgZGVwdGggKyAxKSk7XG4gIH1cbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXModmFsdWUpLmZsYXRNYXAoKGVudHJ5KSA9PiBjb2xsZWN0VGV4dExlYXZlcyhlbnRyeSwgZGVwdGggKyAxKSk7XG59XG5cbmZ1bmN0aW9uIHRyeVVud3JhcEpzb24odGV4dDogc3RyaW5nKTogdW5rbm93biB7XG4gIGNvbnN0IGFzUmVjb3JkID0gcGFyc2VSZWNvcmQodGV4dCk7XG4gIGlmIChhc1JlY29yZCkgcmV0dXJuIGFzUmVjb3JkO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh0ZXh0KTtcbiAgaWYgKHBhcnNlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcGFyc2VkO1xuICBpZiAodGV4dC5pbmNsdWRlcygnXFxcXFwiJykgfHwgdGV4dC5pbmNsdWRlcyhcIlxcXFxuXCIpKSB7XG4gICAgY29uc3QgdW5lc2NhcGVkID0gdGV4dC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvXFxcXG4vZywgXCJcXG5cIikucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpO1xuICAgIGlmICh1bmVzY2FwZWQgIT09IHRleHQpIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IHBhcnNlKHVuZXNjYXBlZCk7XG4gICAgICBpZiAobmVzdGVkICE9PSB1bmRlZmluZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -4,10 +4,8 @@
4
4
  * @module
5
5
  */
6
6
  import type { ModelQuery, RankedModel, ResolvedModel, ResolvedModelSelection, ResolveModelInput, ResolveModelOptions, ServingEndpointSummary } from "@dbx-tools/shared-model";
7
- import { type ModelSelectionPolicyOptions } from "./_selection.ts";
8
7
  import { type WorkspaceClientLike } from "./model-catalog.ts";
9
- export { lookupModels, rankModelId, resolveModel } from "./_selection.ts";
10
- export type { ModelSelectionPolicyOptions } from "./_selection.ts";
8
+ import { type ModelSelectionPolicyOptions } from "./selection.ts";
11
9
  /** Intent plus catalogue cache controls passed to {@link selectModel}. */
12
10
  export interface SelectModelInput extends ResolveModelInput {
13
11
  ttlMs?: number;
@@ -1,6 +1,5 @@
1
- import { lookupModels, rankModelId, resolveModel, } from "./_selection.js";
2
1
  import { listServingEndpoints, } from "./model-catalog.js";
3
- export { lookupModels, rankModelId, resolveModel } from "./_selection.js";
2
+ import { lookupModels, rankModelId, resolveModel, } from "./selection.js";
4
3
  /** Resolve against a potentially stale catalogue, refreshing once on a miss. */
5
4
  export async function rankModelIdLive(load, search, options = {}, policy = {}) {
6
5
  const resolved = rankModelId(await load(false), search, options, policy);
@@ -27,4 +26,4 @@ function catalogueOptions(input) {
27
26
  ...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
28
27
  };
29
28
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWUxRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLElBQW9FLEVBQ3BFLE1BQWMsRUFDZCxVQUErQixFQUFFLEVBQ2pDLFNBQXNDLEVBQUU7SUFFeEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsTUFBMkIsRUFDM0IsSUFBWSxFQUNaLFFBQTJCLEVBQUU7SUFFN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQTJCLEVBQzNCLElBQVksRUFDWixRQUEwQixFQUFFO0lBRTVCLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBR3pCO0lBQ0MsT0FBTztRQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNyRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbiB3cmFwcGVycy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHtcbiAgbG9va3VwTW9kZWxzLFxuICByYW5rTW9kZWxJZCxcbiAgcmVzb2x2ZU1vZGVsLFxuICB0eXBlIE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyxcbn0gZnJvbSBcIi4vX3NlbGVjdGlvbi50c1wiO1xuaW1wb3J0IHtcbiAgbGlzdFNlcnZpbmdFbmRwb2ludHMsXG4gIHR5cGUgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudExpa2UsXG59IGZyb20gXCIuL21vZGVsLWNhdGFsb2cudHNcIjtcblxuZXhwb3J0IHsgbG9va3VwTW9kZWxzLCByYW5rTW9kZWxJZCwgcmVzb2x2ZU1vZGVsIH0gZnJvbSBcIi4vX3NlbGVjdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5cbi8qKiBJbnRlbnQgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWxlY3RNb2RlbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE1vZGVsSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIHR0bE1zPzogbnVtYmVyO1xuICBjYWNoZUlkZW50aXR5Pzogc3RyaW5nO1xufVxuXG4vKiogUXVlcnkgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWFyY2hNb2RlbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNb2RlbHNJbnB1dCBleHRlbmRzIE1vZGVsUXVlcnkge1xuICB0dGxNcz86IG51bWJlcjtcbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmUgYWdhaW5zdCBhIHBvdGVudGlhbGx5IHN0YWxlIGNhdGFsb2d1ZSwgcmVmcmVzaGluZyBvbmNlIG9uIGEgbWlzcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5rTW9kZWxJZExpdmUoXG4gIGxvYWQ6IChmb3JjZTogYm9vbGVhbikgPT4gUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+LFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmFua01vZGVsSWQoYXdhaXQgbG9hZChmYWxzZSksIHNlYXJjaCwgb3B0aW9ucywgcG9saWN5KTtcbiAgaWYgKHJlc29sdmVkLm1hdGNoZWQpIHJldHVybiByZXNvbHZlZDtcbiAgcmV0dXJuIHJhbmtNb2RlbElkKGF3YWl0IGxvYWQodHJ1ZSksIHNlYXJjaCwgb3B0aW9ucywgcG9saWN5KTtcbn1cblxuLyoqIExpc3QgYW5kIHJhbmsgYSB3b3Jrc3BhY2UgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaE1vZGVscyhcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBob3N0OiBzdHJpbmcsXG4gIGlucHV0OiBTZWFyY2hNb2RlbHNJbnB1dCA9IHt9LFxuKTogUHJvbWlzZTxSYW5rZWRNb2RlbFtdPiB7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzKGNsaWVudCwgaG9zdCwgY2F0YWxvZ3VlT3B0aW9ucyhpbnB1dCkpO1xuICByZXR1cm4gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgaW5wdXQpO1xufVxuXG4vKiogTGlzdCBhIHdvcmtzcGFjZSBjYXRhbG9ndWUgYW5kIHJlc29sdmUgb25lIG1vZGVsLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbGVjdE1vZGVsKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgaW5wdXQ6IFNlbGVjdE1vZGVsSW5wdXQgPSB7fSxcbik6IFByb21pc2U8UmVzb2x2ZWRNb2RlbFNlbGVjdGlvbj4ge1xuICBpZiAoaW5wdXQuZXhwbGljaXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dC5mdXp6eSA9PT0gZmFsc2UgJiYgIWlucHV0LnJlcXVpcmVzVG9vbHMpIHtcbiAgICByZXR1cm4geyBtb2RlbElkOiBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImV4cGxpY2l0XCIgfTtcbiAgfVxuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0U2VydmluZ0VuZHBvaW50cyhjbGllbnQsIGhvc3QsIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQpKTtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChlbmRwb2ludHMsIGlucHV0KTtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlT3B0aW9ucyhpbnB1dDoge1xuICByZWFkb25seSB0dGxNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn0pOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIC4uLihpbnB1dC50dGxNcyAhPT0gdW5kZWZpbmVkID8geyB0dGxNczogaW5wdXQudHRsTXMgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQuY2FjaGVJZGVudGl0eSAhPT0gdW5kZWZpbmVkID8geyBjYWNoZUlkZW50aXR5OiBpbnB1dC5jYWNoZUlkZW50aXR5IH0gOiB7fSksXG4gIH07XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEdBRWIsTUFBTSxnQkFBZ0IsQ0FBQztBQWN4QixnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLElBQW9FLEVBQ3BFLE1BQWMsRUFDZCxVQUErQixFQUFFLEVBQ2pDLFNBQXNDLEVBQUU7SUFFeEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsTUFBMkIsRUFDM0IsSUFBWSxFQUNaLFFBQTJCLEVBQUU7SUFFN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQTJCLEVBQzNCLElBQVksRUFDWixRQUEwQixFQUFFO0lBRTVCLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBR3pCO0lBQ0MsT0FBTztRQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNyRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbiB3cmFwcGVycy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHtcbiAgbGlzdFNlcnZpbmdFbmRwb2ludHMsXG4gIHR5cGUgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudExpa2UsXG59IGZyb20gXCIuL21vZGVsLWNhdGFsb2cudHNcIjtcbmltcG9ydCB7XG4gIGxvb2t1cE1vZGVscyxcbiAgcmFua01vZGVsSWQsXG4gIHJlc29sdmVNb2RlbCxcbiAgdHlwZSBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMsXG59IGZyb20gXCIuL3NlbGVjdGlvbi50c1wiO1xuXG4vKiogSW50ZW50IHBsdXMgY2F0YWxvZ3VlIGNhY2hlIGNvbnRyb2xzIHBhc3NlZCB0byB7QGxpbmsgc2VsZWN0TW9kZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RNb2RlbElucHV0IGV4dGVuZHMgUmVzb2x2ZU1vZGVsSW5wdXQge1xuICB0dGxNcz86IG51bWJlcjtcbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIFF1ZXJ5IHBsdXMgY2F0YWxvZ3VlIGNhY2hlIGNvbnRyb2xzIHBhc3NlZCB0byB7QGxpbmsgc2VhcmNoTW9kZWxzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTW9kZWxzSW5wdXQgZXh0ZW5kcyBNb2RlbFF1ZXJ5IHtcbiAgdHRsTXM/OiBudW1iZXI7XG4gIGNhY2hlSWRlbnRpdHk/OiBzdHJpbmc7XG59XG5cbi8qKiBSZXNvbHZlIGFnYWluc3QgYSBwb3RlbnRpYWxseSBzdGFsZSBjYXRhbG9ndWUsIHJlZnJlc2hpbmcgb25jZSBvbiBhIG1pc3MuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmFua01vZGVsSWRMaXZlKFxuICBsb2FkOiAoZm9yY2U6IGJvb2xlYW4pID0+IFByb21pc2U8cmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPixcbiAgc2VhcmNoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlc29sdmVNb2RlbE9wdGlvbnMgPSB7fSxcbiAgcG9saWN5OiBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8UmVzb2x2ZWRNb2RlbD4ge1xuICBjb25zdCByZXNvbHZlZCA9IHJhbmtNb2RlbElkKGF3YWl0IGxvYWQoZmFsc2UpLCBzZWFyY2gsIG9wdGlvbnMsIHBvbGljeSk7XG4gIGlmIChyZXNvbHZlZC5tYXRjaGVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHJldHVybiByYW5rTW9kZWxJZChhd2FpdCBsb2FkKHRydWUpLCBzZWFyY2gsIG9wdGlvbnMsIHBvbGljeSk7XG59XG5cbi8qKiBMaXN0IGFuZCByYW5rIGEgd29ya3NwYWNlIG1vZGVsIGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hNb2RlbHMoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgaG9zdDogc3RyaW5nLFxuICBpbnB1dDogU2VhcmNoTW9kZWxzSW5wdXQgPSB7fSxcbik6IFByb21pc2U8UmFua2VkTW9kZWxbXT4ge1xuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0U2VydmluZ0VuZHBvaW50cyhjbGllbnQsIGhvc3QsIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQpKTtcbiAgcmV0dXJuIGxvb2t1cE1vZGVscyhlbmRwb2ludHMsIGlucHV0KTtcbn1cblxuLyoqIExpc3QgYSB3b3Jrc3BhY2UgY2F0YWxvZ3VlIGFuZCByZXNvbHZlIG9uZSBtb2RlbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWxlY3RNb2RlbChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBob3N0OiBzdHJpbmcsXG4gIGlucHV0OiBTZWxlY3RNb2RlbElucHV0ID0ge30sXG4pOiBQcm9taXNlPFJlc29sdmVkTW9kZWxTZWxlY3Rpb24+IHtcbiAgaWYgKGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQuZnV6enkgPT09IGZhbHNlICYmICFpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJleHBsaWNpdFwiIH07XG4gIH1cbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoY2xpZW50LCBob3N0LCBjYXRhbG9ndWVPcHRpb25zKGlucHV0KSk7XG4gIHJldHVybiByZXNvbHZlTW9kZWwoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgdHRsTXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNhY2hlSWRlbnRpdHk/OiBzdHJpbmc7XG59KTogTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oaW5wdXQudHRsTXMgIT09IHVuZGVmaW5lZCA/IHsgdHRsTXM6IGlucHV0LnR0bE1zIH0gOiB7fSksXG4gICAgLi4uKGlucHV0LmNhY2hlSWRlbnRpdHkgIT09IHVuZGVmaW5lZCA/IHsgY2FjaGVJZGVudGl0eTogaW5wdXQuY2FjaGVJZGVudGl0eSB9IDoge30pLFxuICB9O1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  /** Lightweight model retirement state shared by discovery and metadata caches. */
2
- import type { ModelStatus, ServingEndpointSummary } from "@dbx-tools/shared-model/contracts";
2
+ import type { ModelStatus, ServingEndpointSummary } from "@dbx-tools/shared-model";
3
3
  export declare const COMMITTED_RETIRED_MODELS: readonly string[];
4
4
  export declare const RETIRED_MODELS_GENERATED_AT: number;
5
5
  /** Replace retirement state after metadata cache hydration or refresh. */
@@ -0,0 +1,59 @@
1
+ import retiredModelsSnapshotJson from "./generated/retired-models.json" with { type: "json" };
2
+ const snapshot = retiredModelsSnapshotJson;
3
+ const RETIRED_MODEL_PREFIXES = new Set([
4
+ "ai",
5
+ "anthropic",
6
+ "databricks",
7
+ "dbx",
8
+ "google",
9
+ "meta",
10
+ "openai",
11
+ "system",
12
+ ]);
13
+ let names = Object.freeze([...snapshot.models]);
14
+ let keys = retiredKeys(names);
15
+ export const COMMITTED_RETIRED_MODELS = snapshot.models;
16
+ export const RETIRED_MODELS_GENERATED_AT = snapshot.generatedAt;
17
+ /** Replace retirement state after metadata cache hydration or refresh. */
18
+ export function replaceRetiredModelNames(models) {
19
+ names = Object.freeze([...models]);
20
+ keys = retiredKeys(names);
21
+ }
22
+ /** Return the active retired-model names. */
23
+ export function retiredModelNames() {
24
+ return names;
25
+ }
26
+ /** Resolve whether any supplied identity is listed as retired. */
27
+ export function modelStatusFor(...models) {
28
+ const deprecated = models
29
+ .flatMap((model) => modelIdentities(model))
30
+ .some((identity) => {
31
+ const candidate = retiredModelKey(identity);
32
+ for (const key of keys) {
33
+ if (candidate === key || candidate.startsWith(`${key}-`))
34
+ return true;
35
+ }
36
+ return false;
37
+ });
38
+ return { deprecated };
39
+ }
40
+ function retiredKeys(models) {
41
+ return new Set(models.map(retiredModelKey).filter(Boolean));
42
+ }
43
+ function modelIdentities(model) {
44
+ if (typeof model === "string")
45
+ return [model];
46
+ return [
47
+ model.name,
48
+ model.displayName,
49
+ model.modelServiceName,
50
+ ...Object.values(model.serviceNames ?? {}),
51
+ ].filter((value) => Boolean(value));
52
+ }
53
+ function retiredModelKey(value) {
54
+ const tokens = value.toLowerCase().match(/[a-z0-9]+/g) ?? [];
55
+ while (tokens[0] && RETIRED_MODEL_PREFIXES.has(tokens[0]))
56
+ tokens.shift();
57
+ return tokens.join("-");
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0aXJlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXRpcmVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8seUJBQXlCLE1BQU0saUNBQWlDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFHOUYsTUFBTSxRQUFRLEdBQUcseUJBQWtELENBQUM7QUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJO0lBQ0osV0FBVztJQUNYLFlBQVk7SUFDWixLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtDQUNULENBQUMsQ0FBQztBQUVILElBQUksS0FBSyxHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0FBRWhFLDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBeUI7SUFDaEUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxjQUFjLENBQzVCLEdBQUcsTUFBb0Q7SUFFdkQsTUFBTSxVQUFVLEdBQUcsTUFBTTtTQUN0QixPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNqQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUF5QjtJQUM1QyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQXNDO0lBQzdELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsS0FBSyxDQUFDLElBQUk7UUFDVixLQUFLLENBQUMsV0FBVztRQUNqQixLQUFLLENBQUMsZ0JBQWdCO1FBQ3RCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUMzQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUFhO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTGlnaHR3ZWlnaHQgbW9kZWwgcmV0aXJlbWVudCBzdGF0ZSBzaGFyZWQgYnkgZGlzY292ZXJ5IGFuZCBtZXRhZGF0YSBjYWNoZXMuICovXG5pbXBvcnQgdHlwZSB7IE1vZGVsU3RhdHVzLCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5cbmltcG9ydCByZXRpcmVkTW9kZWxzU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9yZXRpcmVkLW1vZGVscy5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgdHlwZSB7IFJldGlyZWRNb2RlbHNTbmFwc2hvdCB9IGZyb20gXCIuL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5cbmNvbnN0IHNuYXBzaG90ID0gcmV0aXJlZE1vZGVsc1NuYXBzaG90SnNvbiBhcyBSZXRpcmVkTW9kZWxzU25hcHNob3Q7XG5jb25zdCBSRVRJUkVEX01PREVMX1BSRUZJWEVTID0gbmV3IFNldChbXG4gIFwiYWlcIixcbiAgXCJhbnRocm9waWNcIixcbiAgXCJkYXRhYnJpY2tzXCIsXG4gIFwiZGJ4XCIsXG4gIFwiZ29vZ2xlXCIsXG4gIFwibWV0YVwiLFxuICBcIm9wZW5haVwiLFxuICBcInN5c3RlbVwiLFxuXSk7XG5cbmxldCBuYW1lczogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFsuLi5zbmFwc2hvdC5tb2RlbHNdKTtcbmxldCBrZXlzID0gcmV0aXJlZEtleXMobmFtZXMpO1xuXG5leHBvcnQgY29uc3QgQ09NTUlUVEVEX1JFVElSRURfTU9ERUxTID0gc25hcHNob3QubW9kZWxzO1xuZXhwb3J0IGNvbnN0IFJFVElSRURfTU9ERUxTX0dFTkVSQVRFRF9BVCA9IHNuYXBzaG90LmdlbmVyYXRlZEF0O1xuXG4vKiogUmVwbGFjZSByZXRpcmVtZW50IHN0YXRlIGFmdGVyIG1ldGFkYXRhIGNhY2hlIGh5ZHJhdGlvbiBvciByZWZyZXNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSZXRpcmVkTW9kZWxOYW1lcyhtb2RlbHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gIG5hbWVzID0gT2JqZWN0LmZyZWV6ZShbLi4ubW9kZWxzXSk7XG4gIGtleXMgPSByZXRpcmVkS2V5cyhuYW1lcyk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFjdGl2ZSByZXRpcmVkLW1vZGVsIG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldGlyZWRNb2RlbE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG5hbWVzO1xufVxuXG4vKiogUmVzb2x2ZSB3aGV0aGVyIGFueSBzdXBwbGllZCBpZGVudGl0eSBpcyBsaXN0ZWQgYXMgcmV0aXJlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFN0YXR1c0ZvcihcbiAgLi4ubW9kZWxzOiByZWFkb25seSAoc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSlbXVxuKTogTW9kZWxTdGF0dXMge1xuICBjb25zdCBkZXByZWNhdGVkID0gbW9kZWxzXG4gICAgLmZsYXRNYXAoKG1vZGVsKSA9PiBtb2RlbElkZW50aXRpZXMobW9kZWwpKVxuICAgIC5zb21lKChpZGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gcmV0aXJlZE1vZGVsS2V5KGlkZW50aXR5KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0ga2V5IHx8IGNhbmRpZGF0ZS5zdGFydHNXaXRoKGAke2tleX0tYCkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICByZXR1cm4geyBkZXByZWNhdGVkIH07XG59XG5cbmZ1bmN0aW9uIHJldGlyZWRLZXlzKG1vZGVsczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWFkb25seVNldDxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBTZXQobW9kZWxzLm1hcChyZXRpcmVkTW9kZWxLZXkpLmZpbHRlcihCb29sZWFuKSk7XG59XG5cbmZ1bmN0aW9uIG1vZGVsSWRlbnRpdGllcyhtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIFttb2RlbF07XG4gIHJldHVybiBbXG4gICAgbW9kZWwubmFtZSxcbiAgICBtb2RlbC5kaXNwbGF5TmFtZSxcbiAgICBtb2RlbC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgIC4uLk9iamVjdC52YWx1ZXMobW9kZWwuc2VydmljZU5hbWVzID8/IHt9KSxcbiAgXS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcmV0aXJlZE1vZGVsS2V5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIHdoaWxlICh0b2tlbnNbMF0gJiYgUkVUSVJFRF9NT0RFTF9QUkVGSVhFUy5oYXModG9rZW5zWzBdKSkgdG9rZW5zLnNoaWZ0KCk7XG4gIHJldHVybiB0b2tlbnMuam9pbihcIi1cIik7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import type { ModelQuery, RankedModel, ResolvedModel, ResolvedModelSelection, ResolveModelInput, ResolveModelOptions, ServingEndpointSummary } from "@dbx-tools/shared-model/contracts";
1
+ import type { ModelQuery, RankedModel, ResolvedModel, ResolvedModelSelection, ResolveModelInput, ResolveModelOptions, ServingEndpointSummary } from "@dbx-tools/shared-model";
2
2
  /** In-process model-ranking policy controls. */
3
3
  export interface ModelSelectionPolicyOptions {
4
4
  /** Prefer Databricks system endpoints instead of excluding them from non-exact selection. */
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Runtime-independent model ranking and selection.
3
+ *
4
+ * @module
5
+ */
6
+ import { sequence } from "@dbx-tools/shared-core";
7
+ import { rankEndpoints } from "./_ranking.js";
8
+ import { FALLBACK_MODEL_IDS, modelsForClass } from "./fallback.js";
9
+ import { endpointSupportsTools } from "./policy.js";
10
+ /** Rank a catalogue against a model query, best-first. */
11
+ export function lookupModels(endpoints, query = {}, policy = {}) {
12
+ return rankEndpoints(endpoints, query, policy);
13
+ }
14
+ /** Resolve the closest model id in one catalogue snapshot. */
15
+ export function rankModelId(endpoints, search, options = {}, policy = {}) {
16
+ const [top] = lookupModels(endpoints, {
17
+ search,
18
+ limit: 1,
19
+ ...(options.threshold !== undefined ? { threshold: options.threshold } : {}),
20
+ ...(options.requiresTools !== undefined ? { requiresTools: options.requiresTools } : {}),
21
+ }, policy);
22
+ if (!top)
23
+ return { modelId: search, matched: false };
24
+ return { modelId: top.endpoint.name, matched: true, score: top.score };
25
+ }
26
+ /** Resolve a single model id from a catalogue and caller intent. */
27
+ export function resolveModel(endpoints, input = {}, policy = {}) {
28
+ if (input.explicit !== undefined) {
29
+ if (input.fuzzy === false) {
30
+ if (input.requiresTools)
31
+ assertToolSupport(endpoints, input.explicit);
32
+ return { modelId: input.explicit, source: "explicit" };
33
+ }
34
+ const [top] = lookupModels(endpoints, buildQuery(input, input.explicit), policy);
35
+ if (input.requiresTools && !top) {
36
+ throw new Error(`No tool-capable model matches "${input.explicit}"`);
37
+ }
38
+ return { modelId: top?.endpoint.name ?? input.explicit, source: "fuzzy-match" };
39
+ }
40
+ if (input.modelClass === undefined && input.fallbacks && input.fallbacks.length > 0) {
41
+ const present = new Set(endpoints
42
+ .filter((endpoint) => !input.requiresTools || endpointSupportsTools(endpoint))
43
+ .map((endpoint) => endpoint.name));
44
+ const pinned = input.fallbacks.find((id) => present.has(id));
45
+ if (pinned)
46
+ return { modelId: pinned, source: "fallback" };
47
+ }
48
+ const source = input.modelClass !== undefined ? "class" : "fallback";
49
+ const [top] = lookupModels(endpoints, buildQuery(input, undefined), policy);
50
+ if (top)
51
+ return { modelId: top.endpoint.name, source };
52
+ if (input.liveOnly) {
53
+ throw new Error("No matching live Model Serving endpoint is available");
54
+ }
55
+ const floorSource = input.modelClass !== undefined ? modelsForClass(input.modelClass) : (input.fallbacks ?? []);
56
+ const floor = sequence(floorSource).concat(FALLBACK_MODEL_IDS).distinct().toArray();
57
+ if (input.requiresTools) {
58
+ const available = new Set(endpoints.filter(endpointSupportsTools).map((endpoint) => endpoint.name));
59
+ const selected = floor.find((id) => available.has(id));
60
+ if (!selected)
61
+ throw new Error("No tool-capable model is available");
62
+ return { modelId: selected, source };
63
+ }
64
+ return { modelId: pickFirstAvailable(floor, endpoints), source };
65
+ }
66
+ function buildQuery(input, search) {
67
+ return {
68
+ ...(search !== undefined ? { search } : {}),
69
+ ...(input.modelClass !== undefined ? { modelClass: input.modelClass } : {}),
70
+ ...(input.requiresTools !== undefined ? { requiresTools: input.requiresTools } : {}),
71
+ ...(input.threshold !== undefined ? { threshold: input.threshold } : {}),
72
+ limit: 1,
73
+ };
74
+ }
75
+ function assertToolSupport(endpoints, modelId) {
76
+ const endpoint = endpoints.find((candidate) => candidate.name === modelId);
77
+ if (!endpoint || !endpointSupportsTools(endpoint)) {
78
+ throw new Error(`Model "${modelId}" does not support function tools`);
79
+ }
80
+ }
81
+ function pickFirstAvailable(candidates, endpoints) {
82
+ const present = new Set(endpoints.map((endpoint) => endpoint.name));
83
+ for (const candidate of candidates) {
84
+ if (present.has(candidate))
85
+ return candidate;
86
+ }
87
+ return candidates[0] ?? FALLBACK_MODEL_IDS[0];
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFRcEQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUUsRUFDdEIsU0FBc0MsRUFBRTtJQUV4QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsU0FBNEMsRUFDNUMsTUFBYyxFQUNkLFVBQStCLEVBQUUsRUFDakMsU0FBc0MsRUFBRTtJQUV4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUN4QixTQUFTLEVBQ1Q7UUFDRSxNQUFNO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUixHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDekYsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNGLElBQUksQ0FBQyxHQUFHO1FB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Q0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdW50aW1lLWluZGVwZW5kZW50IG1vZGVsIHJhbmtpbmcgYW5kIHNlbGVjdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHNlcXVlbmNlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHsgcmFua0VuZHBvaW50cyB9IGZyb20gXCIuL19yYW5raW5nLnRzXCI7XG5pbXBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMsIG1vZGVsc0ZvckNsYXNzIH0gZnJvbSBcIi4vZmFsbGJhY2sudHNcIjtcbmltcG9ydCB7IGVuZHBvaW50U3VwcG9ydHNUb29scyB9IGZyb20gXCIuL3BvbGljeS50c1wiO1xuXG4vKiogSW4tcHJvY2VzcyBtb2RlbC1yYW5raW5nIHBvbGljeSBjb250cm9scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxTZWxlY3Rpb25Qb2xpY3lPcHRpb25zIHtcbiAgLyoqIFByZWZlciBEYXRhYnJpY2tzIHN5c3RlbSBlbmRwb2ludHMgaW5zdGVhZCBvZiBleGNsdWRpbmcgdGhlbSBmcm9tIG5vbi1leGFjdCBzZWxlY3Rpb24uICovXG4gIHJlYWRvbmx5IHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW47XG59XG5cbi8qKiBSYW5rIGEgY2F0YWxvZ3VlIGFnYWluc3QgYSBtb2RlbCBxdWVyeSwgYmVzdC1maXJzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb29rdXBNb2RlbHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIHJldHVybiByYW5rRW5kcG9pbnRzKGVuZHBvaW50cywgcXVlcnksIHBvbGljeSk7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBjbG9zZXN0IG1vZGVsIGlkIGluIG9uZSBjYXRhbG9ndWUgc25hcHNob3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua01vZGVsSWQoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbCB7XG4gIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKFxuICAgIGVuZHBvaW50cyxcbiAgICB7XG4gICAgICBzZWFyY2gsXG4gICAgICBsaW1pdDogMSxcbiAgICAgIC4uLihvcHRpb25zLnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IG9wdGlvbnMudGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IG9wdGlvbnMucmVxdWlyZXNUb29scyB9IDoge30pLFxuICAgIH0sXG4gICAgcG9saWN5LFxuICApO1xuICBpZiAoIXRvcCkgcmV0dXJuIHsgbW9kZWxJZDogc2VhcmNoLCBtYXRjaGVkOiBmYWxzZSB9O1xuICByZXR1cm4geyBtb2RlbElkOiB0b3AuZW5kcG9pbnQubmFtZSwgbWF0Y2hlZDogdHJ1ZSwgc2NvcmU6IHRvcC5zY29yZSB9O1xufVxuXG4vKiogUmVzb2x2ZSBhIHNpbmdsZSBtb2RlbCBpZCBmcm9tIGEgY2F0YWxvZ3VlIGFuZCBjYWxsZXIgaW50ZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbChcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIGlucHV0OiBSZXNvbHZlTW9kZWxJbnB1dCA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIGlmIChpbnB1dC5leHBsaWNpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlucHV0LmZ1enp5ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGlucHV0LnJlcXVpcmVzVG9vbHMpIGFzc2VydFRvb2xTdXBwb3J0KGVuZHBvaW50cywgaW5wdXQuZXhwbGljaXQpO1xuICAgICAgcmV0dXJuIHsgbW9kZWxJZDogaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJleHBsaWNpdFwiIH07XG4gICAgfVxuICAgIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgYnVpbGRRdWVyeShpbnB1dCwgaW5wdXQuZXhwbGljaXQpLCBwb2xpY3kpO1xuICAgIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzICYmICF0b3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdG9vbC1jYXBhYmxlIG1vZGVsIG1hdGNoZXMgXCIke2lucHV0LmV4cGxpY2l0fVwiYCk7XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGVsSWQ6IHRvcD8uZW5kcG9pbnQubmFtZSA/PyBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImZ1enp5LW1hdGNoXCIgfTtcbiAgfVxuXG4gIGlmIChpbnB1dC5tb2RlbENsYXNzID09PSB1bmRlZmluZWQgJiYgaW5wdXQuZmFsbGJhY2tzICYmIGlucHV0LmZhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcHJlc2VudCA9IG5ldyBTZXQoXG4gICAgICBlbmRwb2ludHNcbiAgICAgICAgLmZpbHRlcigoZW5kcG9pbnQpID0+ICFpbnB1dC5yZXF1aXJlc1Rvb2xzIHx8IGVuZHBvaW50U3VwcG9ydHNUb29scyhlbmRwb2ludCkpXG4gICAgICAgIC5tYXAoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5uYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IHBpbm5lZCA9IGlucHV0LmZhbGxiYWNrcy5maW5kKChpZCkgPT4gcHJlc2VudC5oYXMoaWQpKTtcbiAgICBpZiAocGlubmVkKSByZXR1cm4geyBtb2RlbElkOiBwaW5uZWQsIHNvdXJjZTogXCJmYWxsYmFja1wiIH07XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyBcImNsYXNzXCIgOiBcImZhbGxiYWNrXCI7XG4gIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgYnVpbGRRdWVyeShpbnB1dCwgdW5kZWZpbmVkKSwgcG9saWN5KTtcbiAgaWYgKHRvcCkgcmV0dXJuIHsgbW9kZWxJZDogdG9wLmVuZHBvaW50Lm5hbWUsIHNvdXJjZSB9O1xuXG4gIGlmIChpbnB1dC5saXZlT25seSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIGxpdmUgTW9kZWwgU2VydmluZyBlbmRwb2ludCBpcyBhdmFpbGFibGVcIik7XG4gIH1cblxuICBjb25zdCBmbG9vclNvdXJjZSA9XG4gICAgaW5wdXQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8gbW9kZWxzRm9yQ2xhc3MoaW5wdXQubW9kZWxDbGFzcykgOiAoaW5wdXQuZmFsbGJhY2tzID8/IFtdKTtcbiAgY29uc3QgZmxvb3IgPSBzZXF1ZW5jZShmbG9vclNvdXJjZSkuY29uY2F0KEZBTExCQUNLX01PREVMX0lEUykuZGlzdGluY3QoKS50b0FycmF5KCk7XG4gIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChcbiAgICAgIGVuZHBvaW50cy5maWx0ZXIoZW5kcG9pbnRTdXBwb3J0c1Rvb2xzKS5tYXAoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5uYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmxvb3IuZmluZCgoaWQpID0+IGF2YWlsYWJsZS5oYXMoaWQpKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b29sLWNhcGFibGUgbW9kZWwgaXMgYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiB7IG1vZGVsSWQ6IHNlbGVjdGVkLCBzb3VyY2UgfTtcbiAgfVxuICByZXR1cm4geyBtb2RlbElkOiBwaWNrRmlyc3RBdmFpbGFibGUoZmxvb3IsIGVuZHBvaW50cyksIHNvdXJjZSB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFF1ZXJ5KGlucHV0OiBSZXNvbHZlTW9kZWxJbnB1dCwgc2VhcmNoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBNb2RlbFF1ZXJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oc2VhcmNoICE9PSB1bmRlZmluZWQgPyB7IHNlYXJjaCB9IDoge30pLFxuICAgIC4uLihpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyB7IG1vZGVsQ2xhc3M6IGlucHV0Lm1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQucmVxdWlyZXNUb29scyAhPT0gdW5kZWZpbmVkID8geyByZXF1aXJlc1Rvb2xzOiBpbnB1dC5yZXF1aXJlc1Rvb2xzIH0gOiB7fSksXG4gICAgLi4uKGlucHV0LnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IGlucHV0LnRocmVzaG9sZCB9IDoge30pLFxuICAgIGxpbWl0OiAxLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRUb29sU3VwcG9ydChlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSwgbW9kZWxJZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IG1vZGVsSWQpO1xuICBpZiAoIWVuZHBvaW50IHx8ICFlbmRwb2ludFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9uIHRvb2xzYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGlja0ZpcnN0QXZhaWxhYmxlKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSkpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKHByZXNlbnQuaGFzKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gRkFMTEJBQ0tfTU9ERUxfSURTWzBdITtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"root":["../src/_cache.ts","../src/_metadata-contract.ts","../src/_metadata-generator.ts","../src/_ranking.ts","../src/_retirement.ts","../src/_selection.ts","../src/bindings.ts","../src/classes.ts","../src/classify.ts","../src/fallback.ts","../src/invoke.ts","../src/metadata-cache.ts","../src/metadata.ts","../src/model-catalog.ts","../src/model-client.ts","../src/policy.ts","../src/reasoning-translation.ts","../src/resolve.ts","../scripts/generate-metadata.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_cache.ts","../src/_metadata-generator.ts","../src/_ranking.ts","../src/bindings.ts","../src/classes.ts","../src/classify.ts","../src/fallback.ts","../src/invoke.ts","../src/metadata-cache.ts","../src/metadata-contract.ts","../src/metadata.ts","../src/model-catalog.ts","../src/model-client.ts","../src/policy.ts","../src/reasoning-translation.ts","../src/resolve.ts","../src/retirement.ts","../src/selection.ts","../scripts/generate-metadata.ts","../index.ts"],"version":"5.9.3"}