@dbx-tools/model 0.9.154 → 0.9.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
package/index.ts CHANGED
@@ -3,31 +3,42 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
6
- export const PACKAGE_VERSION = "0.9.154";
6
+ export const PACKAGE_VERSION = "0.9.158";
7
7
  export * as bindings from "./src/bindings.ts";
8
+ export * from "./src/bindings.ts";
8
9
  export * as classes from "./src/classes.ts";
9
10
  export * as classify from "./src/classify.ts";
10
11
  export * as fallback from "./src/fallback.ts";
11
12
  export * as invoke from "./src/invoke.ts";
12
- export * as metadata from "./src/metadata.ts";
13
13
  export * as metadataCache from "./src/metadata-cache.ts";
14
+ export * as metadataContract from "./src/metadata-contract.ts";
15
+ export * as metadata from "./src/metadata.ts";
14
16
  export * as modelCatalog from "./src/model-catalog.ts";
15
17
  export * as modelClient from "./src/model-client.ts";
16
18
  export * as policy from "./src/policy.ts";
17
19
  export * as reasoningTranslation from "./src/reasoning-translation.ts";
18
20
  export * as resolve from "./src/resolve.ts";
19
- export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.ts";
20
- export { FALLBACK_MODEL_IDS } from "./src/fallback.ts";
21
- export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH } from "./src/invoke.ts";
21
+ export * as retirement from "./src/retirement.ts";
22
+ export * as selection from "./src/selection.ts";
23
+ export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER, isChatClass, parseModelClass, classesAtOrBelow } from "./src/classes.ts";
24
+ export { supportsToolsByFamily, endpointCapabilities, versionTuple, compareVersionTuples, classifyByFamily, classifyEndpoints } from "./src/classify.ts";
25
+ export { modelsForClass, modelForClass, FALLBACK_MODEL_IDS } from "./src/fallback.ts";
26
+ export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH, servingEndpointsUrl, invocationsUrl, responsesUrl, openResponsesUrl, chatCompletionsUrl, aiGatewayCodexResponsesUrl, anthropicMessagesUrl, anthropicBaseUrl, responsesUpstreamUrl, authHeaders } from "./src/invoke.ts";
22
27
  export type { AuthenticatingClientLike } from "./src/invoke.ts";
23
- export { MODEL_METADATA_TTL_MS, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL } from "./src/metadata.ts";
28
+ export { createMetadataCache, mergePreferFreshList, mergePreferFreshRecord } from "./src/metadata-cache.ts";
24
29
  export type { MetadataCacheOptions, MetadataCacheMergeInput, MetadataCache } from "./src/metadata-cache.ts";
25
- export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.ts";
30
+ export { MODEL_METADATA_TTL_MS, RETIRED_MODELS_URL, OPENAI_RESPONSES_MODELS_URL, WEB_SEARCH_MODELS_URL, MODEL_RATE_LIMITS_URL, QUERY_REASON_MODELS_URL } from "./src/metadata-contract.ts";
31
+ export type { RetiredModelsSnapshot, ModelCapabilityCatalogue, ModelCapabilitiesSnapshot, ModelRateLimitCatalogue, ModelRateLimitsSnapshot, ReasoningModelsSnapshot } from "./src/metadata-contract.ts";
32
+ export { refreshModelMetadata, hydrateModelMetadata, reasoningModelCatalogue, learnedReasoningCatalogue, rememberReasoningLevels, learnReasoningLevelsFromError, modelCapabilitiesFor, modelRateLimitsFor, modelReasoningLevelsFor, modelMetadataFor, modelMetadataGeneratedAt } from "./src/metadata.ts";
33
+ export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD, listServingEndpoints, listServingEndpointsUncached, clearServingEndpointsCache, searchServingEndpoints, resolveModelId } from "./src/model-catalog.ts";
26
34
  export type { WorkspaceClientLike, ListServingEndpointsOptions } from "./src/model-catalog.ts";
27
- export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS } from "./src/model-client.ts";
35
+ export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS, createModelClient, listProfiles, createModelClientWithDatabricksClient, createModelClientWithDependencies } from "./src/model-client.ts";
28
36
  export type { ModelAuthOptions, ModelClientOptions, ModelClientStatus, ModelProtocol, ModelRouteInput, ModelRoute, ModelClient } from "./src/model-client.ts";
29
- export { ModelFamily } from "./src/policy.ts";
30
- export { REASONING_LEVELS } from "./src/reasoning-translation.ts";
31
- export type { ReasoningLevel, ReasoningModelCatalogue, AdaptedRequestReasoning } from "./src/reasoning-translation.ts";
37
+ export { ModelFamily, modelFamily, modelFamilyRank, modelSearchQuery, inheritsNativeWebSearch, isFoundationModelIdentity, modelServiceName, systemModelService, prefersSystemModelService, isOpenWeightsGpt, modelReasoningEfforts, modelSupportsTools, endpointSupportsTools, modelServingApi, chatToolReasoningEffort, modelServiceNames } from "./src/policy.ts";
38
+ export { ReasoningLevel, REASONING_LEVELS, parseReasoning, parseReasoningLevels, documentedReasoningLevels, defaultReasoningLevels, reasoningLevelsFor, formatReasoning, remapReasoning, adaptRequestReasoning, normalizeReasoningToken, uniqueReasoningLevels } from "./src/reasoning-translation.ts";
39
+ export type { AdaptedRequestReasoning } from "./src/reasoning-translation.ts";
40
+ export { rankModelIdLive, searchModels, selectModel } from "./src/resolve.ts";
32
41
  export type { SelectModelInput, SearchModelsInput } from "./src/resolve.ts";
33
- export * from "./exports.ts";
42
+ export { COMMITTED_RETIRED_MODELS, RETIRED_MODELS_GENERATED_AT, replaceRetiredModelNames, retiredModelNames, modelStatusFor } from "./src/retirement.ts";
43
+ export { lookupModels, rankModelId, resolveModel } from "./src/selection.ts";
44
+ export type { ModelSelectionPolicyOptions } from "./src/selection.ts";
package/lib/index.d.ts CHANGED
@@ -1,29 +1,40 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/model";
2
- export declare const PACKAGE_VERSION = "0.9.154";
2
+ export declare const PACKAGE_VERSION = "0.9.158";
3
3
  export * as bindings from "./src/bindings.ts";
4
+ export * from "./src/bindings.ts";
4
5
  export * as classes from "./src/classes.ts";
5
6
  export * as classify from "./src/classify.ts";
6
7
  export * as fallback from "./src/fallback.ts";
7
8
  export * as invoke from "./src/invoke.ts";
8
- export * as metadata from "./src/metadata.ts";
9
9
  export * as metadataCache from "./src/metadata-cache.ts";
10
+ export * as metadataContract from "./src/metadata-contract.ts";
11
+ export * as metadata from "./src/metadata.ts";
10
12
  export * as modelCatalog from "./src/model-catalog.ts";
11
13
  export * as modelClient from "./src/model-client.ts";
12
14
  export * as policy from "./src/policy.ts";
13
15
  export * as reasoningTranslation from "./src/reasoning-translation.ts";
14
16
  export * as resolve from "./src/resolve.ts";
15
- export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.ts";
16
- export { FALLBACK_MODEL_IDS } from "./src/fallback.ts";
17
- export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH } from "./src/invoke.ts";
17
+ export * as retirement from "./src/retirement.ts";
18
+ export * as selection from "./src/selection.ts";
19
+ export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER, isChatClass, parseModelClass, classesAtOrBelow } from "./src/classes.ts";
20
+ export { supportsToolsByFamily, endpointCapabilities, versionTuple, compareVersionTuples, classifyByFamily, classifyEndpoints } from "./src/classify.ts";
21
+ export { modelsForClass, modelForClass, FALLBACK_MODEL_IDS } from "./src/fallback.ts";
22
+ export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH, servingEndpointsUrl, invocationsUrl, responsesUrl, openResponsesUrl, chatCompletionsUrl, aiGatewayCodexResponsesUrl, anthropicMessagesUrl, anthropicBaseUrl, responsesUpstreamUrl, authHeaders } from "./src/invoke.ts";
18
23
  export type { AuthenticatingClientLike } from "./src/invoke.ts";
19
- export { MODEL_METADATA_TTL_MS, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL } from "./src/metadata.ts";
24
+ export { createMetadataCache, mergePreferFreshList, mergePreferFreshRecord } from "./src/metadata-cache.ts";
20
25
  export type { MetadataCacheOptions, MetadataCacheMergeInput, MetadataCache } from "./src/metadata-cache.ts";
21
- export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.ts";
26
+ export { MODEL_METADATA_TTL_MS, RETIRED_MODELS_URL, OPENAI_RESPONSES_MODELS_URL, WEB_SEARCH_MODELS_URL, MODEL_RATE_LIMITS_URL, QUERY_REASON_MODELS_URL } from "./src/metadata-contract.ts";
27
+ export type { RetiredModelsSnapshot, ModelCapabilityCatalogue, ModelCapabilitiesSnapshot, ModelRateLimitCatalogue, ModelRateLimitsSnapshot, ReasoningModelsSnapshot } from "./src/metadata-contract.ts";
28
+ export { refreshModelMetadata, hydrateModelMetadata, reasoningModelCatalogue, learnedReasoningCatalogue, rememberReasoningLevels, learnReasoningLevelsFromError, modelCapabilitiesFor, modelRateLimitsFor, modelReasoningLevelsFor, modelMetadataFor, modelMetadataGeneratedAt } from "./src/metadata.ts";
29
+ export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD, listServingEndpoints, listServingEndpointsUncached, clearServingEndpointsCache, searchServingEndpoints, resolveModelId } from "./src/model-catalog.ts";
22
30
  export type { WorkspaceClientLike, ListServingEndpointsOptions } from "./src/model-catalog.ts";
23
- export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS } from "./src/model-client.ts";
31
+ export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS, createModelClient, listProfiles, createModelClientWithDatabricksClient, createModelClientWithDependencies } from "./src/model-client.ts";
24
32
  export type { ModelAuthOptions, ModelClientOptions, ModelClientStatus, ModelProtocol, ModelRouteInput, ModelRoute, ModelClient } from "./src/model-client.ts";
25
- export { ModelFamily } from "./src/policy.ts";
26
- export { REASONING_LEVELS } from "./src/reasoning-translation.ts";
27
- export type { ReasoningLevel, ReasoningModelCatalogue, AdaptedRequestReasoning } from "./src/reasoning-translation.ts";
33
+ export { ModelFamily, modelFamily, modelFamilyRank, modelSearchQuery, inheritsNativeWebSearch, isFoundationModelIdentity, modelServiceName, systemModelService, prefersSystemModelService, isOpenWeightsGpt, modelReasoningEfforts, modelSupportsTools, endpointSupportsTools, modelServingApi, chatToolReasoningEffort, modelServiceNames } from "./src/policy.ts";
34
+ export { ReasoningLevel, REASONING_LEVELS, parseReasoning, parseReasoningLevels, documentedReasoningLevels, defaultReasoningLevels, reasoningLevelsFor, formatReasoning, remapReasoning, adaptRequestReasoning, normalizeReasoningToken, uniqueReasoningLevels } from "./src/reasoning-translation.ts";
35
+ export type { AdaptedRequestReasoning } from "./src/reasoning-translation.ts";
36
+ export { rankModelIdLive, searchModels, selectModel } from "./src/resolve.ts";
28
37
  export type { SelectModelInput, SearchModelsInput } from "./src/resolve.ts";
29
- export * from "./exports.ts";
38
+ export { COMMITTED_RETIRED_MODELS, RETIRED_MODELS_GENERATED_AT, replaceRetiredModelNames, retiredModelNames, modelStatusFor } from "./src/retirement.ts";
39
+ export { lookupModels, rankModelId, resolveModel } from "./src/selection.ts";
40
+ export type { ModelSelectionPolicyOptions } from "./src/selection.ts";
package/lib/index.js CHANGED
@@ -2,26 +2,35 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
5
- export const PACKAGE_VERSION = "0.9.154";
5
+ export const PACKAGE_VERSION = "0.9.158";
6
6
  export * as bindings from "./src/bindings.js";
7
+ export * from "./src/bindings.js";
7
8
  export * as classes from "./src/classes.js";
8
9
  export * as classify from "./src/classify.js";
9
10
  export * as fallback from "./src/fallback.js";
10
11
  export * as invoke from "./src/invoke.js";
11
- export * as metadata from "./src/metadata.js";
12
12
  export * as metadataCache from "./src/metadata-cache.js";
13
+ export * as metadataContract from "./src/metadata-contract.js";
14
+ export * as metadata from "./src/metadata.js";
13
15
  export * as modelCatalog from "./src/model-catalog.js";
14
16
  export * as modelClient from "./src/model-client.js";
15
17
  export * as policy from "./src/policy.js";
16
18
  export * as reasoningTranslation from "./src/reasoning-translation.js";
17
19
  export * as resolve from "./src/resolve.js";
18
- export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.js";
19
- export { FALLBACK_MODEL_IDS } from "./src/fallback.js";
20
- export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH } from "./src/invoke.js";
21
- export { MODEL_METADATA_TTL_MS, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL } from "./src/metadata.js";
22
- export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.js";
23
- export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS } from "./src/model-client.js";
24
- export { ModelFamily } from "./src/policy.js";
25
- export { REASONING_LEVELS } from "./src/reasoning-translation.js";
26
- export * from "./exports.js";
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhOLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSwyQkFBMkIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxMLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNTRcIjtcbmV4cG9ydCAqIGFzIGJpbmRpbmdzIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhQ2FjaGUgZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENhdGFsb2cgZnJvbSBcIi4vc3JjL21vZGVsLWNhdGFsb2cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsQ2xpZW50IGZyb20gXCIuL3NyYy9tb2RlbC1jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIHBvbGljeSBmcm9tIFwiLi9zcmMvcG9saWN5LnRzXCI7XG5leHBvcnQgKiBhcyByZWFzb25pbmdUcmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyByZXNvbHZlIGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgeyBDSEFUX0NMQVNTX09SREVSLCBNT0RFTF9DTEFTU19PUkRFUiB9IGZyb20gXCIuL3NyYy9jbGFzc2VzLnRzXCI7XG5leHBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMgfSBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCB7IElOVk9DQVRJT05TX1NVRkZJWCwgU0VSVklOR19FTkRQT0lOVFNfUEFUSCwgUkVTUE9OU0VTX1BBVEgsIE9QRU5fUkVTUE9OU0VTX1BBVEgsIENIQVRfQ09NUExFVElPTlNfUEFUSCwgQUlfR0FURVdBWV9DT0RFWF9SRVNQT05TRVNfUEFUSCwgQU5USFJPUElDX0JBU0VfUEFUSCwgQU5USFJPUElDX01FU1NBR0VTX1BBVEggfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF1dGhlbnRpY2F0aW5nQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9pbnZva2UudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFFVRVJZX1JFQVNPTl9NT0RFTFNfVVJMLCBSRVRJUkVEX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfTU9ERUxfQ0FDSEVfVFRMX01TLCBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCB9IGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudExpa2UsIExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NMSUVOVF9DQUNIRV9UVExfTVMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSB9IGZyb20gXCIuL3NyYy9wb2xpY3kudHNcIjtcbmV4cG9ydCB7IFJFQVNPTklOR19MRVZFTFMgfSBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlYXNvbmluZ0xldmVsLCBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZSwgQWRhcHRlZFJlcXVlc3RSZWFzb25pbmcgfSBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbGVjdE1vZGVsSW5wdXQsIFNlYXJjaE1vZGVsc0lucHV0IH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydHMudHNcIjtcbiJdfQ==
20
+ export * as retirement from "./src/retirement.js";
21
+ export * as selection from "./src/selection.js";
22
+ export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER, isChatClass, parseModelClass, classesAtOrBelow } from "./src/classes.js";
23
+ export { supportsToolsByFamily, endpointCapabilities, versionTuple, compareVersionTuples, classifyByFamily, classifyEndpoints } from "./src/classify.js";
24
+ export { modelsForClass, modelForClass, FALLBACK_MODEL_IDS } from "./src/fallback.js";
25
+ export { INVOCATIONS_SUFFIX, SERVING_ENDPOINTS_PATH, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH, AI_GATEWAY_CODEX_RESPONSES_PATH, ANTHROPIC_BASE_PATH, ANTHROPIC_MESSAGES_PATH, servingEndpointsUrl, invocationsUrl, responsesUrl, openResponsesUrl, chatCompletionsUrl, aiGatewayCodexResponsesUrl, anthropicMessagesUrl, anthropicBaseUrl, responsesUpstreamUrl, authHeaders } from "./src/invoke.js";
26
+ export { createMetadataCache, mergePreferFreshList, mergePreferFreshRecord } from "./src/metadata-cache.js";
27
+ export { MODEL_METADATA_TTL_MS, RETIRED_MODELS_URL, OPENAI_RESPONSES_MODELS_URL, WEB_SEARCH_MODELS_URL, MODEL_RATE_LIMITS_URL, QUERY_REASON_MODELS_URL } from "./src/metadata-contract.js";
28
+ export { refreshModelMetadata, hydrateModelMetadata, reasoningModelCatalogue, learnedReasoningCatalogue, rememberReasoningLevels, learnReasoningLevelsFromError, modelCapabilitiesFor, modelRateLimitsFor, modelReasoningLevelsFor, modelMetadataFor, modelMetadataGeneratedAt } from "./src/metadata.js";
29
+ export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD, listServingEndpoints, listServingEndpointsUncached, clearServingEndpointsCache, searchServingEndpoints, resolveModelId } from "./src/model-catalog.js";
30
+ export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS, createModelClient, listProfiles, createModelClientWithDatabricksClient, createModelClientWithDependencies } from "./src/model-client.js";
31
+ export { ModelFamily, modelFamily, modelFamilyRank, modelSearchQuery, inheritsNativeWebSearch, isFoundationModelIdentity, modelServiceName, systemModelService, prefersSystemModelService, isOpenWeightsGpt, modelReasoningEfforts, modelSupportsTools, endpointSupportsTools, modelServingApi, chatToolReasoningEffort, modelServiceNames } from "./src/policy.js";
32
+ export { ReasoningLevel, REASONING_LEVELS, parseReasoning, parseReasoningLevels, documentedReasoningLevels, defaultReasoningLevels, reasoningLevelsFor, formatReasoning, remapReasoning, adaptRequestReasoning, normalizeReasoningToken, uniqueReasoningLevels } from "./src/reasoning-translation.js";
33
+ export { rankModelIdLive, searchModels, selectModel } from "./src/resolve.js";
34
+ export { COMMITTED_RETIRED_MODELS, RETIRED_MODELS_GENERATED_AT, replaceRetiredModelNames, retiredModelNames, modelStatusFor } from "./src/retirement.js";
35
+ export { lookupModels, rankModelId, resolveModel } from "./src/selection.js";
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhaLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNMLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFTLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyTixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHFDQUFxQyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckwsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BXLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2UyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekosT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTU4XCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YUNhY2hlIGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgbWV0YWRhdGFDb250cmFjdCBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhIGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWxDYXRhbG9nIGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENsaWVudCBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBwb2xpY3kgZnJvbSBcIi4vc3JjL3BvbGljeS50c1wiO1xuZXhwb3J0ICogYXMgcmVhc29uaW5nVHJhbnNsYXRpb24gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVzb2x2ZSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogYXMgcmV0aXJlbWVudCBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbmV4cG9ydCB7IENIQVRfQ0xBU1NfT1JERVIsIE1PREVMX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgcGFyc2VNb2RlbENsYXNzLCBjbGFzc2VzQXRPckJlbG93IH0gZnJvbSBcIi4vc3JjL2NsYXNzZXMudHNcIjtcbmV4cG9ydCB7IHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY29tcGFyZVZlcnNpb25UdXBsZXMsIGNsYXNzaWZ5QnlGYW1pbHksIGNsYXNzaWZ5RW5kcG9pbnRzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgeyBtb2RlbHNGb3JDbGFzcywgbW9kZWxGb3JDbGFzcywgRkFMTEJBQ0tfTU9ERUxfSURTIH0gZnJvbSBcIi4vc3JjL2ZhbGxiYWNrLnRzXCI7XG5leHBvcnQgeyBJTlZPQ0FUSU9OU19TVUZGSVgsIFNFUlZJTkdfRU5EUE9JTlRTX1BBVEgsIFJFU1BPTlNFU19QQVRILCBPUEVOX1JFU1BPTlNFU19QQVRILCBDSEFUX0NPTVBMRVRJT05TX1BBVEgsIEFJX0dBVEVXQVlfQ09ERVhfUkVTUE9OU0VTX1BBVEgsIEFOVEhST1BJQ19CQVNFX1BBVEgsIEFOVEhST1BJQ19NRVNTQUdFU19QQVRILCBzZXJ2aW5nRW5kcG9pbnRzVXJsLCBpbnZvY2F0aW9uc1VybCwgcmVzcG9uc2VzVXJsLCBvcGVuUmVzcG9uc2VzVXJsLCBjaGF0Q29tcGxldGlvbnNVcmwsIGFpR2F0ZXdheUNvZGV4UmVzcG9uc2VzVXJsLCBhbnRocm9waWNNZXNzYWdlc1VybCwgYW50aHJvcGljQmFzZVVybCwgcmVzcG9uc2VzVXBzdHJlYW1VcmwsIGF1dGhIZWFkZXJzIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoZW50aWNhdGluZ0NsaWVudExpa2UgfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgeyBjcmVhdGVNZXRhZGF0YUNhY2hlLCBtZXJnZVByZWZlckZyZXNoTGlzdCwgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgUkVUSVJFRF9NT0RFTFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCwgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXRpcmVkTW9kZWxzU25hcHNob3QsIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCwgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LCBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHsgcmVmcmVzaE1vZGVsTWV0YWRhdGEsIGh5ZHJhdGVNb2RlbE1ldGFkYXRhLCByZWFzb25pbmdNb2RlbENhdGFsb2d1ZSwgbGVhcm5lZFJlYXNvbmluZ0NhdGFsb2d1ZSwgcmVtZW1iZXJSZWFzb25pbmdMZXZlbHMsIGxlYXJuUmVhc29uaW5nTGV2ZWxzRnJvbUVycm9yLCBtb2RlbENhcGFiaWxpdGllc0ZvciwgbW9kZWxSYXRlTGltaXRzRm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciwgbW9kZWxNZXRhZGF0YUZvciwgbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUywgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkLCBjbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZSwgc2VhcmNoU2VydmluZ0VuZHBvaW50cywgcmVzb2x2ZU1vZGVsSWQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnRMaWtlLCBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TLCBjcmVhdGVNb2RlbENsaWVudCwgbGlzdFByb2ZpbGVzLCBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50LCBjcmVhdGVNb2RlbENsaWVudFdpdGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSwgbW9kZWxGYW1pbHksIG1vZGVsRmFtaWx5UmFuaywgbW9kZWxTZWFyY2hRdWVyeSwgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksIG1vZGVsU2VydmljZU5hbWUsIHN5c3RlbU1vZGVsU2VydmljZSwgcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZSwgaXNPcGVuV2VpZ2h0c0dwdCwgbW9kZWxSZWFzb25pbmdFZmZvcnRzLCBtb2RlbFN1cHBvcnRzVG9vbHMsIGVuZHBvaW50U3VwcG9ydHNUb29scywgbW9kZWxTZXJ2aW5nQXBpLCBjaGF0VG9vbFJlYXNvbmluZ0VmZm9ydCwgbW9kZWxTZXJ2aWNlTmFtZXMgfSBmcm9tIFwiLi9zcmMvcG9saWN5LnRzXCI7XG5leHBvcnQgeyBSZWFzb25pbmdMZXZlbCwgUkVBU09OSU5HX0xFVkVMUywgcGFyc2VSZWFzb25pbmcsIHBhcnNlUmVhc29uaW5nTGV2ZWxzLCBkb2N1bWVudGVkUmVhc29uaW5nTGV2ZWxzLCBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzLCByZWFzb25pbmdMZXZlbHNGb3IsIGZvcm1hdFJlYXNvbmluZywgcmVtYXBSZWFzb25pbmcsIGFkYXB0UmVxdWVzdFJlYXNvbmluZywgbm9ybWFsaXplUmVhc29uaW5nVG9rZW4sIHVuaXF1ZVJlYXNvbmluZ0xldmVscyB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgQWRhcHRlZFJlcXVlc3RSZWFzb25pbmcgfSBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5leHBvcnQgeyByYW5rTW9kZWxJZExpdmUsIHNlYXJjaE1vZGVscywgc2VsZWN0TW9kZWwgfSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWxlY3RNb2RlbElucHV0LCBTZWFyY2hNb2RlbHNJbnB1dCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgeyBDT01NSVRURURfUkVUSVJFRF9NT0RFTFMsIFJFVElSRURfTU9ERUxTX0dFTkVSQVRFRF9BVCwgcmVwbGFjZVJldGlyZWRNb2RlbE5hbWVzLCByZXRpcmVkTW9kZWxOYW1lcywgbW9kZWxTdGF0dXNGb3IgfSBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0IHsgbG9va3VwTW9kZWxzLCByYW5rTW9kZWxJZCwgcmVzb2x2ZU1vZGVsIH0gZnJvbSBcIi4vc3JjL3NlbGVjdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uLnRzXCI7XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
2
  import { dirname, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { MODEL_METADATA_TTL_MS, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL, } from "../src/_metadata-contract.js";
5
4
  import { parseModelCapabilities, parseModelRateLimits, parseReasoningModels, parseRetiredModels, } from "../src/_metadata-generator.js";
5
+ import { MODEL_METADATA_TTL_MS, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL, } from "../src/metadata-contract.js";
6
6
  const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../../../..");
7
7
  const nodeOutput = resolve(repositoryRoot, "packages/js/node/model/src/generated");
8
8
  const now = Math.floor(Date.now() / 1000);
@@ -62,4 +62,4 @@ async function writeSnapshot(path, snapshot) {
62
62
  await writeFile(temporary, `${JSON.stringify(snapshot, null, 2)}\n`);
63
63
  await rename(temporary, path);
64
64
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zY3JpcHRzL2dlbmVyYXRlLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHFCQUFxQixHQUt0QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7QUFDbkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ2hCLGVBQWUsQ0FBd0IscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FDdkUsa0JBQWtCLENBQUMsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDNUQ7SUFDRCxlQUFlLENBQTRCLHlCQUF5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RSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDL0MsTUFBTSxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgcmVuYW1lLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHtcbiAgTU9ERUxfTUVUQURBVEFfVFRMX01TLFxuICBNT0RFTF9SQVRFX0xJTUlUU19VUkwsXG4gIE9QRU5BSV9SRVNQT05TRVNfTU9ERUxTX1VSTCxcbiAgUVVFUllfUkVBU09OX01PREVMU19VUkwsXG4gIFJFVElSRURfTU9ERUxTX1VSTCxcbiAgV0VCX1NFQVJDSF9NT0RFTFNfVVJMLFxuICB0eXBlIE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3QsXG4gIHR5cGUgTW9kZWxSYXRlTGltaXRzU25hcHNob3QsXG4gIHR5cGUgUmVhc29uaW5nTW9kZWxzU25hcHNob3QsXG4gIHR5cGUgUmV0aXJlZE1vZGVsc1NuYXBzaG90LFxufSBmcm9tIFwiLi4vc3JjL19tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuaW1wb3J0IHtcbiAgcGFyc2VNb2RlbENhcGFiaWxpdGllcyxcbiAgcGFyc2VNb2RlbFJhdGVMaW1pdHMsXG4gIHBhcnNlUmVhc29uaW5nTW9kZWxzLFxuICBwYXJzZVJldGlyZWRNb2RlbHMsXG59IGZyb20gXCIuLi9zcmMvX21ldGFkYXRhLWdlbmVyYXRvci50c1wiO1xuXG5jb25zdCByZXBvc2l0b3J5Um9vdCA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCBcIi4uLy4uLy4uLy4uLy4uXCIpO1xuY29uc3Qgbm9kZU91dHB1dCA9IHJlc29sdmUocmVwb3NpdG9yeVJvb3QsIFwicGFja2FnZXMvanMvbm9kZS9tb2RlbC9zcmMvZ2VuZXJhdGVkXCIpO1xuY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cbmF3YWl0IFByb21pc2UuYWxsKFtcbiAgcmVmcmVzaFNuYXBzaG90PFJldGlyZWRNb2RlbHNTbmFwc2hvdD4oXCJyZXRpcmVkLW1vZGVscy5qc29uXCIsIGFzeW5jICgpID0+XG4gICAgcGFyc2VSZXRpcmVkTW9kZWxzKGF3YWl0IGxvYWRQYWdlKFJFVElSRURfTU9ERUxTX1VSTCksIG5vdyksXG4gICksXG4gIHJlZnJlc2hTbmFwc2hvdDxNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90PihcIm1vZGVsLWNhcGFiaWxpdGllcy5qc29uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbcmVzcG9uc2VzSHRtbCwgd2ViU2VhcmNoSHRtbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBsb2FkUGFnZShPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwpLFxuICAgICAgbG9hZFBhZ2UoV0VCX1NFQVJDSF9NT0RFTFNfVVJMKSxcbiAgICBdKTtcbiAgICByZXR1cm4gcGFyc2VNb2RlbENhcGFiaWxpdGllcyhyZXNwb25zZXNIdG1sLCB3ZWJTZWFyY2hIdG1sLCBub3cpO1xuICB9KSxcbiAgcmVmcmVzaFNuYXBzaG90PE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90PihcIm1vZGVsLXJhdGUtbGltaXRzLmpzb25cIiwgYXN5bmMgKCkgPT5cbiAgICBwYXJzZU1vZGVsUmF0ZUxpbWl0cyhhd2FpdCBsb2FkUGFnZShNT0RFTF9SQVRFX0xJTUlUU19VUkwpLCBub3cpLFxuICApLFxuICByZWZyZXNoU25hcHNob3Q8UmVhc29uaW5nTW9kZWxzU25hcHNob3Q+KFwibW9kZWwtcmVhc29uaW5nLmpzb25cIiwgYXN5bmMgKCkgPT5cbiAgICBwYXJzZVJlYXNvbmluZ01vZGVscyhhd2FpdCBsb2FkUGFnZShRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCksIG5vdyksXG4gICksXG5dKTtcblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFNuYXBzaG90PFQgZXh0ZW5kcyB7IHJlYWRvbmx5IGdlbmVyYXRlZEF0OiBudW1iZXIgfT4oXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGxvYWRTbmFwc2hvdDogKCkgPT4gUHJvbWlzZTxUPixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcmltYXJ5UGF0aCA9IHJlc29sdmUobm9kZU91dHB1dCwgZmlsZW5hbWUpO1xuICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRTbmFwc2hvdDxUPihwcmltYXJ5UGF0aCk7XG4gIGlmIChleGlzdGluZyAmJiBub3cgLSBleGlzdGluZy5nZW5lcmF0ZWRBdCA8IE1PREVMX01FVEFEQVRBX1RUTF9NUyAvIDEwMDApIHtcbiAgICBhd2FpdCB3cml0ZVNuYXBzaG90KHByaW1hcnlQYXRoLCBleGlzdGluZyk7XG4gICAgY29uc29sZS5sb2coYCR7ZmlsZW5hbWV9OiBjdXJyZW50YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBsb2FkU25hcHNob3QoKTtcbiAgICBhd2FpdCB3cml0ZVNuYXBzaG90KHByaW1hcnlQYXRoLCBzbmFwc2hvdCk7XG4gICAgY29uc29sZS5sb2coYCR7ZmlsZW5hbWV9OiByZWZyZXNoZWRgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWV4aXN0aW5nKSB0aHJvdyBlcnJvcjtcbiAgICBhd2FpdCB3cml0ZVNuYXBzaG90KHByaW1hcnlQYXRoLCBleGlzdGluZyk7XG4gICAgY29uc29sZS53YXJuKGAke2ZpbGVuYW1lfTogcmVmcmVzaCBmYWlsZWQ7IHJldGFpbmVkIGNvbW1pdHRlZCBzbmFwc2hvdGAsIGVycm9yKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUGFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgaGVhZGVyczogeyBcInVzZXItYWdlbnRcIjogXCJkYngtdG9vbHMtbW9kZWwtbWV0YWRhdGEvMVwiIH0sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDE1XzAwMCksXG4gIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24gcmV0dXJuZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7dXJsfWApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTbmFwc2hvdDxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCBcInV0ZjhcIikpIGFzIFQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTbmFwc2hvdChwYXRoOiBzdHJpbmcsIHNuYXBzaG90OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHRlbXBvcmFyeSA9IGAke3BhdGh9LiR7cHJvY2Vzcy5waWR9LnRtcGA7XG4gIGF3YWl0IHdyaXRlRmlsZSh0ZW1wb3JhcnksIGAke0pTT04uc3RyaW5naWZ5KHNuYXBzaG90LCBudWxsLCAyKX1cXG5gKTtcbiAgYXdhaXQgcmVuYW1lKHRlbXBvcmFyeSwgcGF0aCk7XG59XG4iXX0=
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zY3JpcHRzL2dlbmVyYXRlLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixxQkFBcUIsR0FLdEIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7QUFDbkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ2hCLGVBQWUsQ0FBd0IscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FDdkUsa0JBQWtCLENBQUMsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDNUQ7SUFDRCxlQUFlLENBQTRCLHlCQUF5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RSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDL0MsTUFBTSxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgcmVuYW1lLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHtcbiAgcGFyc2VNb2RlbENhcGFiaWxpdGllcyxcbiAgcGFyc2VNb2RlbFJhdGVMaW1pdHMsXG4gIHBhcnNlUmVhc29uaW5nTW9kZWxzLFxuICBwYXJzZVJldGlyZWRNb2RlbHMsXG59IGZyb20gXCIuLi9zcmMvX21ldGFkYXRhLWdlbmVyYXRvci50c1wiO1xuaW1wb3J0IHtcbiAgTU9ERUxfTUVUQURBVEFfVFRMX01TLFxuICBNT0RFTF9SQVRFX0xJTUlUU19VUkwsXG4gIE9QRU5BSV9SRVNQT05TRVNfTU9ERUxTX1VSTCxcbiAgUVVFUllfUkVBU09OX01PREVMU19VUkwsXG4gIFJFVElSRURfTU9ERUxTX1VSTCxcbiAgV0VCX1NFQVJDSF9NT0RFTFNfVVJMLFxuICB0eXBlIE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3QsXG4gIHR5cGUgTW9kZWxSYXRlTGltaXRzU25hcHNob3QsXG4gIHR5cGUgUmVhc29uaW5nTW9kZWxzU25hcHNob3QsXG4gIHR5cGUgUmV0aXJlZE1vZGVsc1NuYXBzaG90LFxufSBmcm9tIFwiLi4vc3JjL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5cbmNvbnN0IHJlcG9zaXRvcnlSb290ID0gcmVzb2x2ZShkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSksIFwiLi4vLi4vLi4vLi4vLi5cIik7XG5jb25zdCBub2RlT3V0cHV0ID0gcmVzb2x2ZShyZXBvc2l0b3J5Um9vdCwgXCJwYWNrYWdlcy9qcy9ub2RlL21vZGVsL3NyYy9nZW5lcmF0ZWRcIik7XG5jb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcblxuYXdhaXQgUHJvbWlzZS5hbGwoW1xuICByZWZyZXNoU25hcHNob3Q8UmV0aXJlZE1vZGVsc1NuYXBzaG90PihcInJldGlyZWQtbW9kZWxzLmpzb25cIiwgYXN5bmMgKCkgPT5cbiAgICBwYXJzZVJldGlyZWRNb2RlbHMoYXdhaXQgbG9hZFBhZ2UoUkVUSVJFRF9NT0RFTFNfVVJMKSwgbm93KSxcbiAgKSxcbiAgcmVmcmVzaFNuYXBzaG90PE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3Q+KFwibW9kZWwtY2FwYWJpbGl0aWVzLmpzb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFtyZXNwb25zZXNIdG1sLCB3ZWJTZWFyY2hIdG1sXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGxvYWRQYWdlKE9QRU5BSV9SRVNQT05TRVNfTU9ERUxTX1VSTCksXG4gICAgICBsb2FkUGFnZShXRUJfU0VBUkNIX01PREVMU19VUkwpLFxuICAgIF0pO1xuICAgIHJldHVybiBwYXJzZU1vZGVsQ2FwYWJpbGl0aWVzKHJlc3BvbnNlc0h0bWwsIHdlYlNlYXJjaEh0bWwsIG5vdyk7XG4gIH0pLFxuICByZWZyZXNoU25hcHNob3Q8TW9kZWxSYXRlTGltaXRzU25hcHNob3Q+KFwibW9kZWwtcmF0ZS1saW1pdHMuanNvblwiLCBhc3luYyAoKSA9PlxuICAgIHBhcnNlTW9kZWxSYXRlTGltaXRzKGF3YWl0IGxvYWRQYWdlKE1PREVMX1JBVEVfTElNSVRTX1VSTCksIG5vdyksXG4gICksXG4gIHJlZnJlc2hTbmFwc2hvdDxSZWFzb25pbmdNb2RlbHNTbmFwc2hvdD4oXCJtb2RlbC1yZWFzb25pbmcuanNvblwiLCBhc3luYyAoKSA9PlxuICAgIHBhcnNlUmVhc29uaW5nTW9kZWxzKGF3YWl0IGxvYWRQYWdlKFFVRVJZX1JFQVNPTl9NT0RFTFNfVVJMKSwgbm93KSxcbiAgKSxcbl0pO1xuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoU25hcHNob3Q8VCBleHRlbmRzIHsgcmVhZG9ubHkgZ2VuZXJhdGVkQXQ6IG51bWJlciB9PihcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgbG9hZFNuYXBzaG90OiAoKSA9PiBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByaW1hcnlQYXRoID0gcmVzb2x2ZShub2RlT3V0cHV0LCBmaWxlbmFtZSk7XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZFNuYXBzaG90PFQ+KHByaW1hcnlQYXRoKTtcbiAgaWYgKGV4aXN0aW5nICYmIG5vdyAtIGV4aXN0aW5nLmdlbmVyYXRlZEF0IDwgTU9ERUxfTUVUQURBVEFfVFRMX01TIC8gMTAwMCkge1xuICAgIGF3YWl0IHdyaXRlU25hcHNob3QocHJpbWFyeVBhdGgsIGV4aXN0aW5nKTtcbiAgICBjb25zb2xlLmxvZyhgJHtmaWxlbmFtZX06IGN1cnJlbnRgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGxvYWRTbmFwc2hvdCgpO1xuICAgIGF3YWl0IHdyaXRlU25hcHNob3QocHJpbWFyeVBhdGgsIHNuYXBzaG90KTtcbiAgICBjb25zb2xlLmxvZyhgJHtmaWxlbmFtZX06IHJlZnJlc2hlZGApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghZXhpc3RpbmcpIHRocm93IGVycm9yO1xuICAgIGF3YWl0IHdyaXRlU25hcHNob3QocHJpbWFyeVBhdGgsIGV4aXN0aW5nKTtcbiAgICBjb25zb2xlLndhcm4oYCR7ZmlsZW5hbWV9OiByZWZyZXNoIGZhaWxlZDsgcmV0YWluZWQgY29tbWl0dGVkIHNuYXBzaG90YCwgZXJyb3IpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBoZWFkZXJzOiB7IFwidXNlci1hZ2VudFwiOiBcImRieC10b29scy1tb2RlbC1tZXRhZGF0YS8xXCIgfSxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMTVfMDAwKSxcbiAgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFicmlja3MgZG9jdW1lbnRhdGlvbiByZXR1cm5lZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHt1cmx9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFNuYXBzaG90PFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHBhdGgsIFwidXRmOFwiKSkgYXMgVDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVNuYXBzaG90KHBhdGg6IHN0cmluZywgc25hcHNob3Q6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgdGVtcG9yYXJ5ID0gYCR7cGF0aH0uJHtwcm9jZXNzLnBpZH0udG1wYDtcbiAgYXdhaXQgd3JpdGVGaWxlKHRlbXBvcmFyeSwgYCR7SlNPTi5zdHJpbmdpZnkoc25hcHNob3QsIG51bGwsIDIpfVxcbmApO1xuICBhd2FpdCByZW5hbWUodGVtcG9yYXJ5LCBwYXRoKTtcbn1cbiJdfQ==
package/lib/src/_cache.js CHANGED
@@ -1,4 +1,4 @@
1
- import { projectCache } from "@dbx-tools/cache/cache";
1
+ import { projectCache } from "@dbx-tools/cache";
2
2
  /** Memory-first cache for endpoint catalogues, isolated for full invalidation. */
3
3
  export const modelCatalogueCache = projectCache("model-catalog", {
4
4
  maxEntries: 256,
@@ -9,4 +9,4 @@ export const modelMetadataCache = projectCache("model-metadata", {
9
9
  maxEntries: 256,
10
10
  useClone: false,
11
11
  });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEQsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxlQUFlLEVBQUU7SUFDL0QsVUFBVSxFQUFFLEdBQUc7SUFDZixRQUFRLEVBQUUsS0FBSztDQUNoQixDQUFDLENBQUM7QUFFSCx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFO0lBQy9ELFVBQVUsRUFBRSxHQUFHO0lBQ2YsUUFBUSxFQUFFLEtBQUs7Q0FDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvamVjdENhY2hlIH0gZnJvbSBcIkBkYngtdG9vbHMvY2FjaGUvY2FjaGVcIjtcblxuLyoqIE1lbW9yeS1maXJzdCBjYWNoZSBmb3IgZW5kcG9pbnQgY2F0YWxvZ3VlcywgaXNvbGF0ZWQgZm9yIGZ1bGwgaW52YWxpZGF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsQ2F0YWxvZ3VlQ2FjaGUgPSBwcm9qZWN0Q2FjaGUoXCJtb2RlbC1jYXRhbG9nXCIsIHtcbiAgbWF4RW50cmllczogMjU2LFxuICB1c2VDbG9uZTogZmFsc2UsXG59KTtcblxuLyoqIE9uZSBtZW1vcnktZmlyc3QgcHJvamVjdCBjYWNoZSBzaGFyZWQgYnkgZXZlcnkgbW9kZWwgbWV0YWRhdGEga2V5LiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsTWV0YWRhdGFDYWNoZSA9IHByb2plY3RDYWNoZShcIm1vZGVsLW1ldGFkYXRhXCIsIHtcbiAgbWF4RW50cmllczogMjU2LFxuICB1c2VDbG9uZTogZmFsc2UsXG59KTtcbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxlQUFlLEVBQUU7SUFDL0QsVUFBVSxFQUFFLEdBQUc7SUFDZixRQUFRLEVBQUUsS0FBSztDQUNoQixDQUFDLENBQUM7QUFFSCx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFO0lBQy9ELFVBQVUsRUFBRSxHQUFHO0lBQ2YsUUFBUSxFQUFFLEtBQUs7Q0FDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvamVjdENhY2hlIH0gZnJvbSBcIkBkYngtdG9vbHMvY2FjaGVcIjtcblxuLyoqIE1lbW9yeS1maXJzdCBjYWNoZSBmb3IgZW5kcG9pbnQgY2F0YWxvZ3VlcywgaXNvbGF0ZWQgZm9yIGZ1bGwgaW52YWxpZGF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsQ2F0YWxvZ3VlQ2FjaGUgPSBwcm9qZWN0Q2FjaGUoXCJtb2RlbC1jYXRhbG9nXCIsIHtcbiAgbWF4RW50cmllczogMjU2LFxuICB1c2VDbG9uZTogZmFsc2UsXG59KTtcblxuLyoqIE9uZSBtZW1vcnktZmlyc3QgcHJvamVjdCBjYWNoZSBzaGFyZWQgYnkgZXZlcnkgbW9kZWwgbWV0YWRhdGEga2V5LiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsTWV0YWRhdGFDYWNoZSA9IHByb2plY3RDYWNoZShcIm1vZGVsLW1ldGFkYXRhXCIsIHtcbiAgbWF4RW50cmllczogMjU2LFxuICB1c2VDbG9uZTogZmFsc2UsXG59KTtcbiJdfQ==
@@ -1,4 +1,4 @@
1
- import type { ModelCapabilitiesSnapshot, ModelRateLimitsSnapshot, ReasoningModelsSnapshot, RetiredModelsSnapshot } from "./_metadata-contract.ts";
1
+ import type { ModelCapabilitiesSnapshot, ModelRateLimitsSnapshot, ReasoningModelsSnapshot, RetiredModelsSnapshot } from "./metadata-contract.ts";
2
2
  /** Parse retired model names from Databricks retirement-policy HTML. */
3
3
  export declare function parseRetiredModels(html: string, generatedAt: number): RetiredModelsSnapshot;
4
4
  /** Parse Responses and web-search documentation into model capability sets. */
@@ -329,4 +329,4 @@ function number(value) {
329
329
  function sortRecord(record) {
330
330
  return Object.fromEntries(Object.entries(record).sort(([left], [right]) => left.localeCompare(right)));
331
331
  }
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX21ldGFkYXRhLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbWV0YWRhdGEtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBU2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGdCQUFnQixFQUVoQixxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUlwQyxNQUFNLHVCQUF1QixHQUMzQiwwRkFBMEYsQ0FBQztBQUM3RixNQUFNLGlCQUFpQixHQUNyQix3SkFBd0osQ0FBQztBQUMzSixNQUFNLGFBQWEsR0FBRyx3REFBd0QsQ0FBQztBQUMvRSxNQUFNLGtCQUFrQixHQUFHLHFDQUFxQyxDQUFDO0FBQ2pFLHNGQUFzRjtBQUN0RixNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzFDLE1BQU07SUFDTixTQUFTO0lBQ1QsS0FBSztJQUNMLFFBQVE7SUFDUixNQUFNO0lBQ04sT0FBTztJQUNQLFlBQVk7SUFDWixXQUFXO0lBQ1gsT0FBTztJQUNQLFlBQVk7SUFDWixLQUFLO0lBQ0wsU0FBUztJQUNULFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVksRUFBRSxXQUFtQjtJQUNsRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNqQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENB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LGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQXlCO0lBQ3ZDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxNQUFtQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZCwgdHlwZSBDaGVlcmlvQVBJIH0gZnJvbSBcImNoZWVyaW9cIjtcblxuaW1wb3J0IHR5cGUge1xuICBNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90LFxuICBNb2RlbFJhdGVMaW1pdENhdGFsb2d1ZSxcbiAgTW9kZWxSYXRlTGltaXRzU25hcHNob3QsXG4gIFJlYXNvbmluZ01vZGVsc1NuYXBzaG90LFxuICBSZXRpcmVkTW9kZWxzU25hcHNob3QsXG59IGZyb20gXCIuL19tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuaW1wb3J0IHsgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIG1vZGVsU2VhcmNoUXVlcnkgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcbmltcG9ydCB7XG4gIHBhcnNlUmVhc29uaW5nLFxuICBSRUFTT05JTkdfTEVWRUxTLFxuICB0eXBlIFJlYXNvbmluZ0xldmVsLFxuICB1bmlxdWVSZWFzb25pbmdMZXZlbHMsXG59IGZyb20gXCIuL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuXG50eXBlIFNlbGVjdGlvbiA9IFJldHVyblR5cGU8Q2hlZXJpb0FQST47XG5cbmNvbnN0IEFDQ0VQVEVEX1ZBTFVFU19QQVRURVJOID1cbiAgLyg/OmFjY2VwdGVkIHZhbHVlcyg/OlxccythcmV8XFxzK3ZhcnkpP3xhY2NlcHRzKD86XFxzK3ZhbHVlcz8oPzpcXHMrb2YpPyk/KVxccyo6P1xccyooW14uXSspL2dpO1xuY29uc3QgRk9SX01PREVMX1BBVFRFUk4gPVxuICAvRm9yXFxzKyhbXixdKz8pLFxccysoPzp0aGlzIHBhcmFtZXRlciBhY2NlcHRzKD86XFxzK3ZhbHVlcz9cXHMrb2YpP3x0aGUgKD86YD9yZWFzb25pbmdfZWZmb3J0YD98ZWZmb3J0KSBwYXJhbWV0ZXIgYWNjZXB0cyg/Olxccyt2YWx1ZXM/XFxzK29mKT8pXFxzKihbXi5dKykvZ2k7XG5jb25zdCBUT0tFTl9QQVRURVJOID0gLycoW14nXSspJ3xcIihbXlwiXSspXCJ8YChbXmBdKylgfFxcYihbYS16XVthLXowLTlfLV0qKVxcYi9naTtcbmNvbnN0IE1PREVMX0NPREVfUEFUVEVSTiA9IC9cXGJkYXRhYnJpY2tzLVthLXowLTldW2EtejAtOS5fLV0qL2dpO1xuLyoqIFdpcmUgdG9rZW5zIGFkdmVydGlzZWQgaW4gRGF0YWJyaWNrcyBkb2NzOyBleGNsdWRlcyBwcm9zZSB3b3JkcyBsaWtlIGBkZWZhdWx0YC4gKi9cbmNvbnN0IERPQ1VNRU5UQVRJT05fRUZGT1JUX1RPS0VOUyA9IG5ldyBTZXQoW1xuICBcIm5vbmVcIixcbiAgXCJtaW5pbWFsXCIsXG4gIFwibG93XCIsXG4gIFwibWVkaXVtXCIsXG4gIFwiaGlnaFwiLFxuICBcInhoaWdoXCIsXG4gIFwiZXh0cmEtaGlnaFwiLFxuICBcImV4dHJhaGlnaFwiLFxuICBcInVsdHJhXCIsXG4gIFwidWx0cmEtaGlnaFwiLFxuICBcIm1heFwiLFxuICBcIm1heGltdW1cIixcbiAgXCJkaXNhYmxlZFwiLFxuXSk7XG5cbi8qKiBQYXJzZSByZXRpcmVkIG1vZGVsIG5hbWVzIGZyb20gRGF0YWJyaWNrcyByZXRpcmVtZW50LXBvbGljeSBIVE1MLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0aXJlZE1vZGVscyhodG1sOiBzdHJpbmcsIGdlbmVyYXRlZEF0OiBudW1iZXIpOiBSZXRpcmVkTW9kZWxzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICQoXCJ0YWJsZVwiKS5lYWNoKChfLCB0YWJsZSkgPT4ge1xuICAgIGNvbnN0IHJvd3MgPSAkKHRhYmxlKS5maW5kKFwidHJcIik7XG4gICAgY29uc3QgaGVhZGVyID0gY29sbGFwc2VUZXh0KCQocm93cy5nZXQoMCkpLmZpbmQoXCJ0aCwgdGRcIikuZmlyc3QoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoaGVhZGVyICE9PSBcIm9wZW4gbW9kZWxcIiAmJiBoZWFkZXIgIT09IFwicGFydG5lciBtb2RlbFwiKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgY29sbGFwc2VUZXh0KCQocm93KS5maW5kKFwidGgsIHRkXCIpLmZpcnN0KCkpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gbmFtZS50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkKSBtb2RlbHMuYWRkKHRyaW1tZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgaWYgKG1vZGVscy5zaXplID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIHJldGlyZW1lbnQgdGFibGVzIGNvbnRhaW5lZCBubyBtb2RlbCBuYW1lc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBtb2RlbHM6IFsuLi5tb2RlbHNdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgICAgbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0LCBcImVuXCIsIHsgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiIH0pLFxuICAgICksXG4gIH07XG59XG5cbi8qKiBQYXJzZSBSZXNwb25zZXMgYW5kIHdlYi1zZWFyY2ggZG9jdW1lbnRhdGlvbiBpbnRvIG1vZGVsIGNhcGFiaWxpdHkgc2V0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1vZGVsQ2FwYWJpbGl0aWVzKFxuICByZXNwb25zZXNIdG1sOiBzdHJpbmcsXG4gIHdlYlNlYXJjaEh0bWw6IHN0cmluZyxcbiAgZ2VuZXJhdGVkQXQ6IG51bWJlcixcbik6IE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3Qge1xuICBjb25zdCByZXNwb25zZXNEb2N1bWVudCA9IGxvYWQocmVzcG9uc2VzSHRtbCk7XG4gIGNvbnN0IHJlc3BvbnNlcyA9IG1vZGVsc0FmdGVySGVhZGluZyhyZXNwb25zZXNEb2N1bWVudCwgXCJkYXRhYnJpY2tzLWhvc3RlZC1mb3VuZGF0aW9uLW1vZGVsc1wiKTtcbiAgaWYgKHJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIE9wZW5BSSBSZXNwb25zZXMgbW9kZWxzXCIpO1xuICB9XG4gIGNvbnN0IGlucHV0VHlwZXMgPSBzZWN0aW9uRWxlbWVudHMocmVzcG9uc2VzRG9jdW1lbnQsIFwic3VwcG9ydGVkLWlucHV0LXR5cGVzXCIpXG4gICAgLm1hcCgoZWxlbWVudCkgPT4gY29sbGFwc2VUZXh0KGVsZW1lbnQpKVxuICAgIC5qb2luKFwiIFwiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpbnB1dFR5cGVXb3JkcyA9IG5ldyBTZXQoaW5wdXRUeXBlcy5zcGxpdCgvW15hLXowLTldKy8pLmZpbHRlcihCb29sZWFuKSk7XG4gIGNvbnN0IGltYWdlSW5wdXQgPSBpbnB1dFR5cGVXb3Jkcy5oYXMoXCJ0ZXh0XCIpICYmIGlucHV0VHlwZVdvcmRzLmhhcyhcImltYWdlXCIpID8gcmVzcG9uc2VzIDogW107XG4gIGNvbnN0IGFwcGx5UGF0Y2ggPSBjb2RlVmFsdWVzQWZ0ZXJIZWFkaW5nKHJlc3BvbnNlc0RvY3VtZW50LCBcImxpbWl0YXRpb25zXCIpLmluY2x1ZGVzKFxuICAgIFwiYXBwbHlfcGF0Y2hcIixcbiAgKVxuICAgID8gcmVzcG9uc2VzXG4gICAgOiBbXTtcbiAgY29uc3Qgd2ViU2VhcmNoID0gbmF0aXZlV2ViU2VhcmNoTW9kZWxzKGxvYWQod2ViU2VhcmNoSHRtbCksIHJlc3BvbnNlcyk7XG4gIGlmICh3ZWJTZWFyY2gubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBubyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbHNcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBjYXBhYmlsaXRpZXM6IHsgcmVzcG9uc2VzLCBpbWFnZUlucHV0LCBhcHBseVBhdGNoLCB3ZWJTZWFyY2ggfSxcbiAgfTtcbn1cblxuLyoqIFBhcnNlIHBheS1wZXItdG9rZW4gbGltaXRzIGZyb20gRGF0YWJyaWNrcyBGb3VuZGF0aW9uIE1vZGVsIEFQSSBIVE1MLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTW9kZWxSYXRlTGltaXRzKGh0bWw6IHN0cmluZywgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90IHtcbiAgY29uc3QgJCA9IGxvYWQoaHRtbCk7XG4gIGNvbnN0IG1vZGVsczogUmVjb3JkPHN0cmluZywgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWVbXCJtb2RlbHNcIl1bc3RyaW5nXT4gPSB7fTtcbiAgJChcInRhYmxlXCIpLmVhY2goKF8sIHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9ICQodGFibGUpLmZpbmQoXCJ0clwiKTtcbiAgICBjb25zdCBoZWFkZXJzID0gJChyb3dzLmdldCgwKSlcbiAgICAgIC5maW5kKFwidGgsIHRkXCIpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgbW9kZWxJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJtb2RlbFwiKSk7XG4gICAgY29uc3QgaW5wdXRJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJpdHBtXCIpKTtcbiAgICBjb25zdCBvdXRwdXRJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJvdHBtXCIpKTtcbiAgICBjb25zdCBxdWVyeUluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcInFwaFwiKSk7XG4gICAgaWYgKG1vZGVsSW5kZXggPCAwIHx8IGlucHV0SW5kZXggPCAwIHx8IG91dHB1dEluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHJvd3Muc2xpY2UoMSkuZWFjaCgoX18sIHJvdykgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSAkKHJvdylcbiAgICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkpO1xuICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkoY2VsbHNbbW9kZWxJbmRleF0pO1xuICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgIG1vZGVsc1trZXldID0ge1xuICAgICAgICBpbnB1dFRva2Vuc1Blck1pbnV0ZTogbnVtYmVyKGNlbGxzW2lucHV0SW5kZXhdKSxcbiAgICAgICAgb3V0cHV0VG9rZW5zUGVyTWludXRlOiBudW1iZXIoY2VsbHNbb3V0cHV0SW5kZXhdKSxcbiAgICAgICAgcXVlcmllc1BlckhvdXI6IHF1ZXJ5SW5kZXggPCAwID8gbnVsbCA6IG51bWJlcihjZWxsc1txdWVyeUluZGV4XSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKG1vZGVscykubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBtb2RlbC1saW1pdCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBubyBtb2RlbHNcIik7XG4gIH1cbiAgcmV0dXJuIHsgZ2VuZXJhdGVkQXQsIGNhdGFsb2d1ZTogeyBtb2RlbHM6IHNvcnRSZWNvcmQobW9kZWxzKSB9IH07XG59XG5cbi8qKiBQYXJzZSByZWFzb25pbmctZWZmb3J0IGxhZGRlcnMgZnJvbSB0aGUgUXVlcnkgcmVhc29uaW5nIG1vZGVscyBIVE1MIHRhYmxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhc29uaW5nTW9kZWxzKGh0bWw6IHN0cmluZywgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IFJlYXNvbmluZ01vZGVsc1NuYXBzaG90IHtcbiAgY29uc3QgJCA9IGxvYWQoaHRtbCk7XG4gIGNvbnN0IG1vZGVsczogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4gPSB7fTtcbiAgJChcInRhYmxlXCIpLmVhY2goKF8sIHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9ICQodGFibGUpLmZpbmQoXCJ0clwiKTtcbiAgICBjb25zdCBoZWFkZXJzID0gJChyb3dzLmdldCgwKSlcbiAgICAgIC5maW5kKFwidGgsIHRkXCIpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKCFoZWFkZXJzLnNvbWUoKGhlYWRlcikgPT4gaGVhZGVyLmluY2x1ZGVzKFwibW9kZWxcIikpKSByZXR1cm47XG4gICAgaWYgKCFoZWFkZXJzLnNvbWUoKGhlYWRlcikgPT4gaGVhZGVyLmluY2x1ZGVzKFwicGFyYW1ldGVyXCIpKSkgcmV0dXJuO1xuICAgIHJvd3Muc2xpY2UoMSkuZWFjaCgoX18sIHJvdykgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSAkKHJvdylcbiAgICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChjZWxsKSA9PiAkKGNlbGwpKTtcbiAgICAgIGlmIChjZWxscy5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgICBjb25zdCBtb2RlbE5hbWVzID0gcmVhc29uaW5nTW9kZWxOYW1lc0Zyb21DZWxsKGNlbGxzWzBdISwgJCk7XG4gICAgICBpZiAobW9kZWxOYW1lcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnNUZXh0ID0gY29sbGFwc2VUZXh0KGNlbGxzW2NlbGxzLmxlbmd0aCAtIDFdISk7XG4gICAgICBjb25zdCBwZXJNb2RlbCA9IHJlYXNvbmluZ0xldmVsc0J5TW9kZWxTZWN0aW9uKHBhcmFtZXRlcnNUZXh0LCBtb2RlbE5hbWVzKTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhwZXJNb2RlbCkubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGxldmVsc10gb2YgT2JqZWN0LmVudHJpZXMocGVyTW9kZWwpKSB7XG4gICAgICAgICAgaWYgKGxldmVscy5sZW5ndGggPiAwKSBtb2RlbHNba2V5XSA9IHNvcnRSZWFzb25pbmdMZXZlbHMobGV2ZWxzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzaGFyZWQgPSBzb3J0UmVhc29uaW5nTGV2ZWxzKGV4dHJhY3RBY2NlcHRlZFJlYXNvbmluZ0xldmVscyhwYXJhbWV0ZXJzVGV4dCkpO1xuICAgICAgaWYgKHNoYXJlZC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBtb2RlbE5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG1vZGVsS2V5KG5hbWUpO1xuICAgICAgICBpZiAoa2V5KSBtb2RlbHNba2V5XSA9IHNoYXJlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChPYmplY3Qua2V5cyhtb2RlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3MgcmVhc29uaW5nIGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIG1vZGVsIGVmZm9ydCBsYWRkZXJzXCIpO1xuICB9XG4gIHJldHVybiB7IGdlbmVyYXRlZEF0LCBjYXRhbG9ndWU6IHsgbW9kZWxzOiBzb3J0UmVjb3JkKG1vZGVscykgfSB9O1xufVxuXG5mdW5jdGlvbiByZWFzb25pbmdNb2RlbE5hbWVzRnJvbUNlbGwoY2VsbDogU2VsZWN0aW9uLCAkOiBDaGVlcmlvQVBJKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjZWxsLmZpbmQoXCJjb2RlXCIpLmVhY2goKF8sIGNvZGUpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gY29sbGFwc2VUZXh0KCQoY29kZSkpO1xuICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoXCJkYXRhYnJpY2tzLVwiKSkgbmFtZXMuYWRkKHRleHQpO1xuICB9KTtcbiAgaWYgKG5hbWVzLnNpemUgPT09IDApIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbGxhcHNlVGV4dChjZWxsKS5tYXRjaEFsbChNT0RFTF9DT0RFX1BBVFRFUk4pKSB7XG4gICAgICBuYW1lcy5hZGQobWF0Y2hbMF0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5uYW1lc107XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBY2NlcHRlZFJlYXNvbmluZ0xldmVscyh0ZXh0OiBzdHJpbmcpOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgY29uc3QgbGV2ZWxzOiBSZWFzb25pbmdMZXZlbFtdID0gW107XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dC5tYXRjaEFsbChBQ0NFUFRFRF9WQUxVRVNfUEFUVEVSTikpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IG1hdGNoWzFdO1xuICAgIGlmICghZnJhZ21lbnQgfHwgL3ZhcnkgYnkgbW9kZWwvaS50ZXN0KGZyYWdtZW50KSkgY29udGludWU7XG4gICAgbGV2ZWxzLnB1c2goLi4uZG9jdW1lbnRhdGlvbkVmZm9ydExldmVscyhmcmFnbWVudCkpO1xuICB9XG4gIHJldHVybiBsZXZlbHM7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ0xldmVsc0J5TW9kZWxTZWN0aW9uKFxuICBwYXJhbWV0ZXJzVGV4dDogc3RyaW5nLFxuICByb3dNb2RlbHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlYXNvbmluZ0xldmVsW10+ID0ge307XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFyYW1ldGVyc1RleHQubWF0Y2hBbGwoRk9SX01PREVMX1BBVFRFUk4pKSB7XG4gICAgY29uc3QgbGFiZWwgPSBtYXRjaFsxXT8udHJpbSgpO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gbWF0Y2hbMl07XG4gICAgaWYgKCFsYWJlbCB8fCAhZnJhZ21lbnQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxldmVscyA9IHVuaXF1ZVJlYXNvbmluZ0xldmVscyhkb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50KSk7XG4gICAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByb3dNb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gcmVhc29uaW5nTW9kZWxMYWJlbE1hdGNoZXMobGFiZWwsIG1vZGVsKSk7XG4gICAgLy8gT25seSBhdHRhY2ggZXhwbGljaXQgXCJGb3IgPG1vZGVsPlwiIGNsYXVzZXMgdG8gbW9kZWxzIGxpc3RlZCBpbiB0aGUgcm93LlxuICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hlZCkge1xuICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkodGFyZ2V0KTtcbiAgICAgIGlmIChrZXkpIHJlc3VsdFtrZXldID0gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBkb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50OiBzdHJpbmcpOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgcmV0dXJuIHJlYXNvbmluZ1Rva2Vuc0Zyb21GcmFnbWVudChmcmFnbWVudCkuZmxhdE1hcCgodG9rZW4pID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdG9rZW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bX1xcc10rL2csIFwiLVwiKTtcbiAgICBpZiAoXG4gICAgICAhRE9DVU1FTlRBVElPTl9FRkZPUlRfVE9LRU5TLmhhcyhub3JtYWxpemVkKSAmJlxuICAgICAgIURPQ1VNRU5UQVRJT05fRUZGT1JUX1RPS0VOUy5oYXModG9rZW4udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSBwYXJzZVJlYXNvbmluZyh0b2tlbik7XG4gICAgcmV0dXJuIGxldmVsID8gW2xldmVsXSA6IFtdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHM6IHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10pOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgcmV0dXJuIHVuaXF1ZVJlYXNvbmluZ0xldmVscyhsZXZlbHMpLnNvcnQoXG4gICAgKGxlZnQsIHJpZ2h0KSA9PiBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YobGVmdCkgLSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YocmlnaHQpLFxuICApO1xufVxuXG5mdW5jdGlvbiByZWFzb25pbmdNb2RlbExhYmVsTWF0Y2hlcyhsYWJlbDogc3RyaW5nLCBtb2RlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxlZnQgPSBsYWJlbFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15kYXRhYnJpY2tzLS8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCJcIik7XG4gIGNvbnN0IHJpZ2h0ID0gbW9kZWxcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9eZGF0YWJyaWNrcy0vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiXCIpO1xuICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgcmlnaHQuaW5jbHVkZXMobGVmdCkgfHwgbGVmdC5pbmNsdWRlcyhyaWdodCk7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ1Rva2Vuc0Zyb21GcmFnbWVudChmcmFnbWVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGFydCBvZiBmcmFnbWVudC5tYXRjaEFsbChUT0tFTl9QQVRURVJOKSkge1xuICAgIGNvbnN0IHRva2VuID0gcGFydFsxXSA/PyBwYXJ0WzJdID8/IHBhcnRbM10gPz8gcGFydFs0XTtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuID09PSBcImFuZFwiIHx8IHRva2VuID09PSBcIm9yXCIgfHwgdG9rZW4gPT09IFwib2ZcIikgY29udGludWU7XG4gICAgdG9rZW5zLnB1c2godG9rZW4ucmVwbGFjZSgvXltcIidgXSt8W1wiJ2BdKyQvZywgXCJcIikpO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIG1vZGVsc0FmdGVySGVhZGluZygkOiBDaGVlcmlvQVBJLCBoZWFkaW5nSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KGNvZGVWYWx1ZXNBZnRlckhlYWRpbmcoJCwgaGVhZGluZ0lkKS5mbGF0TWFwKCh2YWx1ZSkgPT4gbW9kZWxLZXkodmFsdWUpID8/IFtdKSksXG4gIF0uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBuYXRpdmVXZWJTZWFyY2hNb2RlbHMoJDogQ2hlZXJpb0FQSSwgcmVzcG9uc2VzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbW9kZWxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBuYXRpdmVTZWN0aW9uID0gZmFsc2U7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWN0aW9uRWxlbWVudHMoJCwgXCJzdXBwb3J0ZWQtbW9kZWxzXCIpKSB7XG4gICAgaWYgKGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hdGl2ZVNlY3Rpb24gPSAhY29sbGFwc2VUZXh0KGVsZW1lbnQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ2aWEgbWNwXCIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghbmF0aXZlU2VjdGlvbikgY29udGludWU7XG4gICAgY29uc3QgdmFsdWVzID0gbm9kZVRhZ05hbWUoZWxlbWVudC5nZXQoMCkpID09PSBcImNvZGVcIiA/IFtjb2xsYXBzZVRleHQoZWxlbWVudCldIDogW107XG4gICAgZWxlbWVudC5maW5kKFwiY29kZVwiKS5lYWNoKChfLCBjb2RlKSA9PiB7XG4gICAgICB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoJChjb2RlKSkpO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBjb25zdCBtb2RlbCA9IG1vZGVsS2V5KHZhbHVlKTtcbiAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgbW9kZWxzLmFkZChtb2RlbCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgbW9kZWwgb2YgcmVzcG9uc2VzKSB7XG4gICAgaWYgKGluaGVyaXRzTmF0aXZlV2ViU2VhcmNoKG1vZGVsLCBtb2RlbHMpKSBtb2RlbHMuYWRkKG1vZGVsKTtcbiAgfVxuICByZXR1cm4gWy4uLm1vZGVsc10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2RlVmFsdWVzQWZ0ZXJIZWFkaW5nKCQ6IENoZWVyaW9BUEksIGhlYWRpbmdJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWN0aW9uRWxlbWVudHMoJCwgaGVhZGluZ0lkKSkge1xuICAgIGlmIChub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkgPT09IFwiY29kZVwiKSB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoZWxlbWVudCkpO1xuICAgIGVsZW1lbnQuZmluZChcImNvZGVcIikuZWFjaCgoXywgY29kZSkgPT4ge1xuICAgICAgdmFsdWVzLnB1c2goY29sbGFwc2VUZXh0KCQoY29kZSkpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5mdW5jdGlvbiBzZWN0aW9uRWxlbWVudHMoJDogQ2hlZXJpb0FQSSwgaGVhZGluZ0lkOiBzdHJpbmcpOiBTZWxlY3Rpb25bXSB7XG4gIGNvbnN0IGhlYWRpbmcgPSAkKGAjJHtoZWFkaW5nSWR9YCkuZmlyc3QoKTtcbiAgaWYgKGhlYWRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYnJpY2tzIGNhcGFiaWxpdHkgcGFnZSBpcyBtaXNzaW5nIHNlY3Rpb24gJHtoZWFkaW5nSWR9YCk7XG4gIH1cbiAgY29uc3QgbGV2ZWwgPSBoZWFkaW5nTGV2ZWwobm9kZVRhZ05hbWUoaGVhZGluZy5nZXQoMCkpKTtcbiAgaWYgKGxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFicmlja3MgY2FwYWJpbGl0eSBzZWN0aW9uICR7aGVhZGluZ0lkfSBpcyBub3QgYSBoZWFkaW5nYCk7XG4gIH1cbiAgY29uc3QgZWxlbWVudHM6IFNlbGVjdGlvbltdID0gW107XG4gIGxldCBzaWJsaW5nID0gaGVhZGluZy5uZXh0KCk7XG4gIHdoaWxlIChzaWJsaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzaWJsaW5nTGV2ZWwgPSBoZWFkaW5nTGV2ZWwobm9kZVRhZ05hbWUoc2libGluZy5nZXQoMCkpKTtcbiAgICBpZiAoc2libGluZ0xldmVsICE9PSB1bmRlZmluZWQgJiYgc2libGluZ0xldmVsIDw9IGxldmVsKSBicmVhaztcbiAgICBlbGVtZW50cy5wdXNoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHQoKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGhlYWRpbmdMZXZlbChuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC9eaChbMS02XSkkLy5leGVjKG5hbWUgPz8gXCJcIik7XG4gIHJldHVybiBtYXRjaCA/IE51bWJlcihtYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxhcHNlVGV4dChlbGVtZW50OiBTZWxlY3Rpb24pOiBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudC50ZXh0KCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG59XG5cbmZ1bmN0aW9uIG5vZGVUYWdOYW1lKG5vZGU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIgfHwgIShcInRhZ05hbWVcIiBpbiBub2RlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnRhZ05hbWUgPT09IFwic3RyaW5nXCIgPyBub2RlLnRhZ05hbWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1vZGVsS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgbmFtZSA9IHZhbHVlLnRyaW0oKS5yZXBsYWNlKC9cXCorJC8sIFwiXCIpLnRyaW0oKTtcbiAgZm9yIChjb25zdCBzdWZmaXggb2YgW1wiKFB1YmxpYyBQcmV2aWV3KVwiLCBcIihCZXRhKVwiLCBcIihQcmV2aWV3KVwiXSkge1xuICAgIGlmIChuYW1lLmVuZHNXaXRoKHN1ZmZpeCkpIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIG1vZGVsU2VhcmNoUXVlcnkobmFtZSk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKFwiLFwiLCBcIlwiKS50cmltKCkpO1xuICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VkKSAmJiBwYXJzZWQgPj0gMCA/IHBhcnNlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNvcnRSZWNvcmQ8VD4ocmVjb3JkOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBUPj4pOiBSZWNvcmQ8c3RyaW5nLCBUPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVjb3JkKS5zb3J0KChbbGVmdF0sIFtyaWdodF0pID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpLFxuICApO1xufVxuIl19
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX21ldGFkYXRhLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbWV0YWRhdGEtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBU2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGdCQUFnQixFQUVoQixxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUlwQyxNQUFNLHVCQUF1QixHQUMzQiwwRkFBMEYsQ0FBQztBQUM3RixNQUFNLGlCQUFpQixHQUNyQix3SkFBd0osQ0FBQztBQUMzSixNQUFNLGFBQWEsR0FBRyx3REFBd0QsQ0FBQztBQUMvRSxNQUFNLGtCQUFrQixHQUFHLHFDQUFxQyxDQUFDO0FBQ2pFLHNGQUFzRjtBQUN0RixNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzFDLE1BQU07SUFDTixTQUFTO0lBQ1QsS0FBSztJQUNMLFFBQVE7SUFDUixNQUFNO0lBQ04sT0FBTztJQUNQLFlBQVk7SUFDWixXQUFXO0lBQ1gsT0FBTztJQUNQLFlBQVk7SUFDWixLQUFLO0lBQ0wsU0FBUztJQUNULFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVksRUFBRSxXQUFtQjtJQUNsRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNqQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENB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LGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQXlCO0lBQ3ZDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxNQUFtQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZCwgdHlwZSBDaGVlcmlvQVBJIH0gZnJvbSBcImNoZWVyaW9cIjtcblxuaW1wb3J0IHR5cGUge1xuICBNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90LFxuICBNb2RlbFJhdGVMaW1pdENhdGFsb2d1ZSxcbiAgTW9kZWxSYXRlTGltaXRzU25hcHNob3QsXG4gIFJlYXNvbmluZ01vZGVsc1NuYXBzaG90LFxuICBSZXRpcmVkTW9kZWxzU25hcHNob3QsXG59IGZyb20gXCIuL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5pbXBvcnQgeyBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaCwgbW9kZWxTZWFyY2hRdWVyeSB9IGZyb20gXCIuL3BvbGljeS50c1wiO1xuaW1wb3J0IHtcbiAgcGFyc2VSZWFzb25pbmcsXG4gIFJFQVNPTklOR19MRVZFTFMsXG4gIHR5cGUgUmVhc29uaW5nTGV2ZWwsXG4gIHVuaXF1ZVJlYXNvbmluZ0xldmVscyxcbn0gZnJvbSBcIi4vcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5cbnR5cGUgU2VsZWN0aW9uID0gUmV0dXJuVHlwZTxDaGVlcmlvQVBJPjtcblxuY29uc3QgQUNDRVBURURfVkFMVUVTX1BBVFRFUk4gPVxuICAvKD86YWNjZXB0ZWQgdmFsdWVzKD86XFxzK2FyZXxcXHMrdmFyeSk/fGFjY2VwdHMoPzpcXHMrdmFsdWVzPyg/OlxccytvZik/KT8pXFxzKjo/XFxzKihbXi5dKykvZ2k7XG5jb25zdCBGT1JfTU9ERUxfUEFUVEVSTiA9XG4gIC9Gb3JcXHMrKFteLF0rPyksXFxzKyg/OnRoaXMgcGFyYW1ldGVyIGFjY2VwdHMoPzpcXHMrdmFsdWVzP1xccytvZik/fHRoZSAoPzpgP3JlYXNvbmluZ19lZmZvcnRgP3xlZmZvcnQpIHBhcmFtZXRlciBhY2NlcHRzKD86XFxzK3ZhbHVlcz9cXHMrb2YpPylcXHMqKFteLl0rKS9naTtcbmNvbnN0IFRPS0VOX1BBVFRFUk4gPSAvJyhbXiddKyknfFwiKFteXCJdKylcInxgKFteYF0rKWB8XFxiKFthLXpdW2EtejAtOV8tXSopXFxiL2dpO1xuY29uc3QgTU9ERUxfQ09ERV9QQVRURVJOID0gL1xcYmRhdGFicmlja3MtW2EtejAtOV1bYS16MC05Ll8tXSovZ2k7XG4vKiogV2lyZSB0b2tlbnMgYWR2ZXJ0aXNlZCBpbiBEYXRhYnJpY2tzIGRvY3M7IGV4Y2x1ZGVzIHByb3NlIHdvcmRzIGxpa2UgYGRlZmF1bHRgLiAqL1xuY29uc3QgRE9DVU1FTlRBVElPTl9FRkZPUlRfVE9LRU5TID0gbmV3IFNldChbXG4gIFwibm9uZVwiLFxuICBcIm1pbmltYWxcIixcbiAgXCJsb3dcIixcbiAgXCJtZWRpdW1cIixcbiAgXCJoaWdoXCIsXG4gIFwieGhpZ2hcIixcbiAgXCJleHRyYS1oaWdoXCIsXG4gIFwiZXh0cmFoaWdoXCIsXG4gIFwidWx0cmFcIixcbiAgXCJ1bHRyYS1oaWdoXCIsXG4gIFwibWF4XCIsXG4gIFwibWF4aW11bVwiLFxuICBcImRpc2FibGVkXCIsXG5dKTtcblxuLyoqIFBhcnNlIHJldGlyZWQgbW9kZWwgbmFtZXMgZnJvbSBEYXRhYnJpY2tzIHJldGlyZW1lbnQtcG9saWN5IEhUTUwuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXRpcmVkTW9kZWxzKGh0bWw6IHN0cmluZywgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IFJldGlyZWRNb2RlbHNTbmFwc2hvdCB7XG4gIGNvbnN0ICQgPSBsb2FkKGh0bWwpO1xuICBjb25zdCBtb2RlbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgJChcInRhYmxlXCIpLmVhY2goKF8sIHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9ICQodGFibGUpLmZpbmQoXCJ0clwiKTtcbiAgICBjb25zdCBoZWFkZXIgPSBjb2xsYXBzZVRleHQoJChyb3dzLmdldCgwKSkuZmluZChcInRoLCB0ZFwiKS5maXJzdCgpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChoZWFkZXIgIT09IFwib3BlbiBtb2RlbFwiICYmIGhlYWRlciAhPT0gXCJwYXJ0bmVyIG1vZGVsXCIpIHJldHVybjtcbiAgICByb3dzLnNsaWNlKDEpLmVhY2goKF9fLCByb3cpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBjb2xsYXBzZVRleHQoJChyb3cpLmZpbmQoXCJ0aCwgdGRcIikuZmlyc3QoKSkuc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgICAgICAgaWYgKHRyaW1tZWQpIG1vZGVscy5hZGQodHJpbW1lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBpZiAobW9kZWxzLnNpemUgPT09IDApIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3MgcmV0aXJlbWVudCB0YWJsZXMgY29udGFpbmVkIG5vIG1vZGVsIG5hbWVzXCIpO1xuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlZEF0LFxuICAgIG1vZGVsczogWy4uLm1vZGVsc10uc29ydCgobGVmdCwgcmlnaHQpID0+XG4gICAgICBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQsIFwiZW5cIiwgeyBzZW5zaXRpdml0eTogXCJiYXNlXCIgfSksXG4gICAgKSxcbiAgfTtcbn1cblxuLyoqIFBhcnNlIFJlc3BvbnNlcyBhbmQgd2ViLXNlYXJjaCBkb2N1bWVudGF0aW9uIGludG8gbW9kZWwgY2FwYWJpbGl0eSBzZXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTW9kZWxDYXBhYmlsaXRpZXMoXG4gIHJlc3BvbnNlc0h0bWw6IHN0cmluZyxcbiAgd2ViU2VhcmNoSHRtbDogc3RyaW5nLFxuICBnZW5lcmF0ZWRBdDogbnVtYmVyLFxuKTogTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCB7XG4gIGNvbnN0IHJlc3BvbnNlc0RvY3VtZW50ID0gbG9hZChyZXNwb25zZXNIdG1sKTtcbiAgY29uc3QgcmVzcG9uc2VzID0gbW9kZWxzQWZ0ZXJIZWFkaW5nKHJlc3BvbnNlc0RvY3VtZW50LCBcImRhdGFicmlja3MtaG9zdGVkLWZvdW5kYXRpb24tbW9kZWxzXCIpO1xuICBpZiAocmVzcG9uc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3MgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgbm8gT3BlbkFJIFJlc3BvbnNlcyBtb2RlbHNcIik7XG4gIH1cbiAgY29uc3QgaW5wdXRUeXBlcyA9IHNlY3Rpb25FbGVtZW50cyhyZXNwb25zZXNEb2N1bWVudCwgXCJzdXBwb3J0ZWQtaW5wdXQtdHlwZXNcIilcbiAgICAubWFwKChlbGVtZW50KSA9PiBjb2xsYXBzZVRleHQoZWxlbWVudCkpXG4gICAgLmpvaW4oXCIgXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGlucHV0VHlwZVdvcmRzID0gbmV3IFNldChpbnB1dFR5cGVzLnNwbGl0KC9bXmEtejAtOV0rLykuZmlsdGVyKEJvb2xlYW4pKTtcbiAgY29uc3QgaW1hZ2VJbnB1dCA9IGlucHV0VHlwZVdvcmRzLmhhcyhcInRleHRcIikgJiYgaW5wdXRUeXBlV29yZHMuaGFzKFwiaW1hZ2VcIikgPyByZXNwb25zZXMgOiBbXTtcbiAgY29uc3QgYXBwbHlQYXRjaCA9IGNvZGVWYWx1ZXNBZnRlckhlYWRpbmcocmVzcG9uc2VzRG9jdW1lbnQsIFwibGltaXRhdGlvbnNcIikuaW5jbHVkZXMoXG4gICAgXCJhcHBseV9wYXRjaFwiLFxuICApXG4gICAgPyByZXNwb25zZXNcbiAgICA6IFtdO1xuICBjb25zdCB3ZWJTZWFyY2ggPSBuYXRpdmVXZWJTZWFyY2hNb2RlbHMobG9hZCh3ZWJTZWFyY2hIdG1sKSwgcmVzcG9uc2VzKTtcbiAgaWYgKHdlYlNlYXJjaC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIG5hdGl2ZSB3ZWItc2VhcmNoIG1vZGVsc1wiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlZEF0LFxuICAgIGNhcGFiaWxpdGllczogeyByZXNwb25zZXMsIGltYWdlSW5wdXQsIGFwcGx5UGF0Y2gsIHdlYlNlYXJjaCB9LFxuICB9O1xufVxuXG4vKiogUGFyc2UgcGF5LXBlci10b2tlbiBsaW1pdHMgZnJvbSBEYXRhYnJpY2tzIEZvdW5kYXRpb24gTW9kZWwgQVBJIEhUTUwuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNb2RlbFJhdGVMaW1pdHMoaHRtbDogc3RyaW5nLCBnZW5lcmF0ZWRBdDogbnVtYmVyKTogTW9kZWxSYXRlTGltaXRzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbFJhdGVMaW1pdENhdGFsb2d1ZVtcIm1vZGVsc1wiXVtzdHJpbmddPiA9IHt9O1xuICAkKFwidGFibGVcIikuZWFjaCgoXywgdGFibGUpID0+IHtcbiAgICBjb25zdCByb3dzID0gJCh0YWJsZSkuZmluZChcInRyXCIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAkKHJvd3MuZ2V0KDApKVxuICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBtb2RlbEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIm1vZGVsXCIpKTtcbiAgICBjb25zdCBpbnB1dEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIml0cG1cIikpO1xuICAgIGNvbnN0IG91dHB1dEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIm90cG1cIikpO1xuICAgIGNvbnN0IHF1ZXJ5SW5kZXggPSBoZWFkZXJzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlLmluY2x1ZGVzKFwicXBoXCIpKTtcbiAgICBpZiAobW9kZWxJbmRleCA8IDAgfHwgaW5wdXRJbmRleCA8IDAgfHwgb3V0cHV0SW5kZXggPCAwKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9ICQocm93KVxuICAgICAgICAuZmluZChcInRoLCB0ZFwiKVxuICAgICAgICAudG9BcnJheSgpXG4gICAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKSk7XG4gICAgICBjb25zdCBrZXkgPSBtb2RlbEtleShjZWxsc1ttb2RlbEluZGV4XSk7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgbW9kZWxzW2tleV0gPSB7XG4gICAgICAgIGlucHV0VG9rZW5zUGVyTWludXRlOiBudW1iZXIoY2VsbHNbaW5wdXRJbmRleF0pLFxuICAgICAgICBvdXRwdXRUb2tlbnNQZXJNaW51dGU6IG51bWJlcihjZWxsc1tvdXRwdXRJbmRleF0pLFxuICAgICAgICBxdWVyaWVzUGVySG91cjogcXVlcnlJbmRleCA8IDAgPyBudWxsIDogbnVtYmVyKGNlbGxzW3F1ZXJ5SW5kZXhdKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuICBpZiAoT2JqZWN0LmtleXMobW9kZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIG1vZGVsLWxpbWl0IGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIG1vZGVsc1wiKTtcbiAgfVxuICByZXR1cm4geyBnZW5lcmF0ZWRBdCwgY2F0YWxvZ3VlOiB7IG1vZGVsczogc29ydFJlY29yZChtb2RlbHMpIH0gfTtcbn1cblxuLyoqIFBhcnNlIHJlYXNvbmluZy1lZmZvcnQgbGFkZGVycyBmcm9tIHRoZSBRdWVyeSByZWFzb25pbmcgbW9kZWxzIEhUTUwgdGFibGUuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWFzb25pbmdNb2RlbHMoaHRtbDogc3RyaW5nLCBnZW5lcmF0ZWRBdDogbnVtYmVyKTogUmVhc29uaW5nTW9kZWxzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBSZWFzb25pbmdMZXZlbFtdPiA9IHt9O1xuICAkKFwidGFibGVcIikuZWFjaCgoXywgdGFibGUpID0+IHtcbiAgICBjb25zdCByb3dzID0gJCh0YWJsZSkuZmluZChcInRyXCIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAkKHJvd3MuZ2V0KDApKVxuICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoIWhlYWRlcnMuc29tZSgoaGVhZGVyKSA9PiBoZWFkZXIuaW5jbHVkZXMoXCJtb2RlbFwiKSkpIHJldHVybjtcbiAgICBpZiAoIWhlYWRlcnMuc29tZSgoaGVhZGVyKSA9PiBoZWFkZXIuaW5jbHVkZXMoXCJwYXJhbWV0ZXJcIikpKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9ICQocm93KVxuICAgICAgICAuZmluZChcInRoLCB0ZFwiKVxuICAgICAgICAudG9BcnJheSgpXG4gICAgICAgIC5tYXAoKGNlbGwpID0+ICQoY2VsbCkpO1xuICAgICAgaWYgKGNlbGxzLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZXMgPSByZWFzb25pbmdNb2RlbE5hbWVzRnJvbUNlbGwoY2VsbHNbMF0hLCAkKTtcbiAgICAgIGlmIChtb2RlbE5hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgcGFyYW1ldGVyc1RleHQgPSBjb2xsYXBzZVRleHQoY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV0hKTtcbiAgICAgIGNvbnN0IHBlck1vZGVsID0gcmVhc29uaW5nTGV2ZWxzQnlNb2RlbFNlY3Rpb24ocGFyYW1ldGVyc1RleHQsIG1vZGVsTmFtZXMpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHBlck1vZGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbGV2ZWxzXSBvZiBPYmplY3QuZW50cmllcyhwZXJNb2RlbCkpIHtcbiAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA+IDApIG1vZGVsc1trZXldID0gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNoYXJlZCA9IHNvcnRSZWFzb25pbmdMZXZlbHMoZXh0cmFjdEFjY2VwdGVkUmVhc29uaW5nTGV2ZWxzKHBhcmFtZXRlcnNUZXh0KSk7XG4gICAgICBpZiAoc2hhcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG1vZGVsTmFtZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkobmFtZSk7XG4gICAgICAgIGlmIChrZXkpIG1vZGVsc1trZXldID0gc2hhcmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKG1vZGVscykubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyByZWFzb25pbmcgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgbm8gbW9kZWwgZWZmb3J0IGxhZGRlcnNcIik7XG4gIH1cbiAgcmV0dXJuIHsgZ2VuZXJhdGVkQXQsIGNhdGFsb2d1ZTogeyBtb2RlbHM6IHNvcnRSZWNvcmQobW9kZWxzKSB9IH07XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ01vZGVsTmFtZXNGcm9tQ2VsbChjZWxsOiBTZWxlY3Rpb24sICQ6IENoZWVyaW9BUEkpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNlbGwuZmluZChcImNvZGVcIikuZWFjaCgoXywgY29kZSkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBjb2xsYXBzZVRleHQoJChjb2RlKSk7XG4gICAgaWYgKHRleHQuc3RhcnRzV2l0aChcImRhdGFicmlja3MtXCIpKSBuYW1lcy5hZGQodGV4dCk7XG4gIH0pO1xuICBpZiAobmFtZXMuc2l6ZSA9PT0gMCkge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgY29sbGFwc2VUZXh0KGNlbGwpLm1hdGNoQWxsKE1PREVMX0NPREVfUEFUVEVSTikpIHtcbiAgICAgIG5hbWVzLmFkZChtYXRjaFswXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLm5hbWVzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFjY2VwdGVkUmVhc29uaW5nTGV2ZWxzKHRleHQ6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBsZXZlbHM6IFJlYXNvbmluZ0xldmVsW10gPSBbXTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKEFDQ0VQVEVEX1ZBTFVFU19QQVRURVJOKSkge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gbWF0Y2hbMV07XG4gICAgaWYgKCFmcmFnbWVudCB8fCAvdmFyeSBieSBtb2RlbC9pLnRlc3QoZnJhZ21lbnQpKSBjb250aW51ZTtcbiAgICBsZXZlbHMucHVzaCguLi5kb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50KSk7XG4gIH1cbiAgcmV0dXJuIGxldmVscztcbn1cblxuZnVuY3Rpb24gcmVhc29uaW5nTGV2ZWxzQnlNb2RlbFNlY3Rpb24oXG4gIHBhcmFtZXRlcnNUZXh0OiBzdHJpbmcsXG4gIHJvd01vZGVsczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZWFzb25pbmdMZXZlbFtdPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBwYXJhbWV0ZXJzVGV4dC5tYXRjaEFsbChGT1JfTU9ERUxfUEFUVEVSTikpIHtcbiAgICBjb25zdCBsYWJlbCA9IG1hdGNoWzFdPy50cmltKCk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBtYXRjaFsyXTtcbiAgICBpZiAoIWxhYmVsIHx8ICFmcmFnbWVudCkgY29udGludWU7XG4gICAgY29uc3QgbGV2ZWxzID0gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGRvY3VtZW50YXRpb25FZmZvcnRMZXZlbHMoZnJhZ21lbnQpKTtcbiAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHJvd01vZGVscy5maWx0ZXIoKG1vZGVsKSA9PiByZWFzb25pbmdNb2RlbExhYmVsTWF0Y2hlcyhsYWJlbCwgbW9kZWwpKTtcbiAgICAvLyBPbmx5IGF0dGFjaCBleHBsaWNpdCBcIkZvciA8bW9kZWw+XCIgY2xhdXNlcyB0byBtb2RlbHMgbGlzdGVkIGluIHRoZSByb3cuXG4gICAgaWYgKG1hdGNoZWQubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBtYXRjaGVkKSB7XG4gICAgICBjb25zdCBrZXkgPSBtb2RlbEtleSh0YXJnZXQpO1xuICAgICAgaWYgKGtleSkgcmVzdWx0W2tleV0gPSBzb3J0UmVhc29uaW5nTGV2ZWxzKGxldmVscyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGRvY3VtZW50YXRpb25FZmZvcnRMZXZlbHMoZnJhZ21lbnQ6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICByZXR1cm4gcmVhc29uaW5nVG9rZW5zRnJvbUZyYWdtZW50KGZyYWdtZW50KS5mbGF0TWFwKCh0b2tlbikgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0b2tlbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1tfXFxzXSsvZywgXCItXCIpO1xuICAgIGlmIChcbiAgICAgICFET0NVTUVOVEFUSU9OX0VGRk9SVF9UT0tFTlMuaGFzKG5vcm1hbGl6ZWQpICYmXG4gICAgICAhRE9DVU1FTlRBVElPTl9FRkZPUlRfVE9LRU5TLmhhcyh0b2tlbi50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBsZXZlbCA9IHBhcnNlUmVhc29uaW5nKHRva2VuKTtcbiAgICByZXR1cm4gbGV2ZWwgPyBbbGV2ZWxdIDogW107XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzb3J0UmVhc29uaW5nTGV2ZWxzKGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSk6IFJlYXNvbmluZ0xldmVsW10ge1xuICByZXR1cm4gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVscykuc29ydChcbiAgICAobGVmdCwgcmlnaHQpID0+IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihsZWZ0KSAtIFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihyaWdodCksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ01vZGVsTGFiZWxNYXRjaGVzKGxhYmVsOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbGVmdCA9IGxhYmVsXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXmRhdGFicmlja3MtLywgXCJcIilcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIlwiKTtcbiAgY29uc3QgcmlnaHQgPSBtb2RlbFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15kYXRhYnJpY2tzLS8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCJcIik7XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCByaWdodC5pbmNsdWRlcyhsZWZ0KSB8fCBsZWZ0LmluY2x1ZGVzKHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gcmVhc29uaW5nVG9rZW5zRnJvbUZyYWdtZW50KGZyYWdtZW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGZyYWdtZW50Lm1hdGNoQWxsKFRPS0VOX1BBVFRFUk4pKSB7XG4gICAgY29uc3QgdG9rZW4gPSBwYXJ0WzFdID8/IHBhcnRbMl0gPz8gcGFydFszXSA/PyBwYXJ0WzRdO1xuICAgIGlmICghdG9rZW4gfHwgdG9rZW4gPT09IFwiYW5kXCIgfHwgdG9rZW4gPT09IFwib3JcIiB8fCB0b2tlbiA9PT0gXCJvZlwiKSBjb250aW51ZTtcbiAgICB0b2tlbnMucHVzaCh0b2tlbi5yZXBsYWNlKC9eW1wiJ2BdK3xbXCInYF0rJC9nLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gbW9kZWxzQWZ0ZXJIZWFkaW5nKCQ6IENoZWVyaW9BUEksIGhlYWRpbmdJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLm5ldyBTZXQoY29kZVZhbHVlc0FmdGVySGVhZGluZygkLCBoZWFkaW5nSWQpLmZsYXRNYXAoKHZhbHVlKSA9PiBtb2RlbEtleSh2YWx1ZSkgPz8gW10pKSxcbiAgXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIG5hdGl2ZVdlYlNlYXJjaE1vZGVscygkOiBDaGVlcmlvQVBJLCByZXNwb25zZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBtb2RlbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IG5hdGl2ZVNlY3Rpb24gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNlY3Rpb25FbGVtZW50cygkLCBcInN1cHBvcnRlZC1tb2RlbHNcIikpIHtcbiAgICBpZiAoaGVhZGluZ0xldmVsKG5vZGVUYWdOYW1lKGVsZW1lbnQuZ2V0KDApKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmF0aXZlU2VjdGlvbiA9ICFjb2xsYXBzZVRleHQoZWxlbWVudCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInZpYSBtY3BcIik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFuYXRpdmVTZWN0aW9uKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZXMgPSBub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkgPT09IFwiY29kZVwiID8gW2NvbGxhcHNlVGV4dChlbGVtZW50KV0gOiBbXTtcbiAgICBlbGVtZW50LmZpbmQoXCJjb2RlXCIpLmVhY2goKF8sIGNvZGUpID0+IHtcbiAgICAgIHZhbHVlcy5wdXNoKGNvbGxhcHNlVGV4dCgkKGNvZGUpKSk7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxLZXkodmFsdWUpO1xuICAgICAgaWYgKCFtb2RlbCkgY29udGludWU7XG4gICAgICBtb2RlbHMuYWRkKG1vZGVsKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBtb2RlbCBvZiByZXNwb25zZXMpIHtcbiAgICBpZiAoaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gobW9kZWwsIG1vZGVscykpIG1vZGVscy5hZGQobW9kZWwpO1xuICB9XG4gIHJldHVybiBbLi4ubW9kZWxzXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvZGVWYWx1ZXNBZnRlckhlYWRpbmcoJDogQ2hlZXJpb0FQSSwgaGVhZGluZ0lkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNlY3Rpb25FbGVtZW50cygkLCBoZWFkaW5nSWQpKSB7XG4gICAgaWYgKG5vZGVUYWdOYW1lKGVsZW1lbnQuZ2V0KDApKSA9PT0gXCJjb2RlXCIpIHZhbHVlcy5wdXNoKGNvbGxhcHNlVGV4dChlbGVtZW50KSk7XG4gICAgZWxlbWVudC5maW5kKFwiY29kZVwiKS5lYWNoKChfLCBjb2RlKSA9PiB7XG4gICAgICB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoJChjb2RlKSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIHNlY3Rpb25FbGVtZW50cygkOiBDaGVlcmlvQVBJLCBoZWFkaW5nSWQ6IHN0cmluZyk6IFNlbGVjdGlvbltdIHtcbiAgY29uc3QgaGVhZGluZyA9ICQoYCMke2hlYWRpbmdJZH1gKS5maXJzdCgpO1xuICBpZiAoaGVhZGluZy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFicmlja3MgY2FwYWJpbGl0eSBwYWdlIGlzIG1pc3Npbmcgc2VjdGlvbiAke2hlYWRpbmdJZH1gKTtcbiAgfVxuICBjb25zdCBsZXZlbCA9IGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShoZWFkaW5nLmdldCgwKSkpO1xuICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJyaWNrcyBjYXBhYmlsaXR5IHNlY3Rpb24gJHtoZWFkaW5nSWR9IGlzIG5vdCBhIGhlYWRpbmdgKTtcbiAgfVxuICBjb25zdCBlbGVtZW50czogU2VsZWN0aW9uW10gPSBbXTtcbiAgbGV0IHNpYmxpbmcgPSBoZWFkaW5nLm5leHQoKTtcbiAgd2hpbGUgKHNpYmxpbmcubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNpYmxpbmdMZXZlbCA9IGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShzaWJsaW5nLmdldCgwKSkpO1xuICAgIGlmIChzaWJsaW5nTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBzaWJsaW5nTGV2ZWwgPD0gbGV2ZWwpIGJyZWFrO1xuICAgIGVsZW1lbnRzLnB1c2goc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcubmV4dCgpO1xuICB9XG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaGVhZGluZ0xldmVsKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gL15oKFsxLTZdKSQvLmV4ZWMobmFtZSA/PyBcIlwiKTtcbiAgcmV0dXJuIG1hdGNoID8gTnVtYmVyKG1hdGNoWzFdKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29sbGFwc2VUZXh0KGVsZW1lbnQ6IFNlbGVjdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBlbGVtZW50LnRleHQoKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn1cblxuZnVuY3Rpb24gbm9kZVRhZ05hbWUobm9kZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIiB8fCAhKFwidGFnTmFtZVwiIGluIG5vZGUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIG5vZGUudGFnTmFtZSA9PT0gXCJzdHJpbmdcIiA/IG5vZGUudGFnTmFtZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbW9kZWxLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBuYW1lID0gdmFsdWUudHJpbSgpLnJlcGxhY2UoL1xcKiskLywgXCJcIikudHJpbSgpO1xuICBmb3IgKGNvbnN0IHN1ZmZpeCBvZiBbXCIoUHVibGljIFByZXZpZXcpXCIsIFwiKEJldGEpXCIsIFwiKFByZXZpZXcpXCJdKSB7XG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoc3VmZml4KSkgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gbW9kZWxTZWFyY2hRdWVyeShuYW1lKT8ucmVwbGFjZUFsbChcIiBcIiwgXCItXCIpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IG51bGwge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlLnJlcGxhY2VBbGwoXCIsXCIsIFwiXCIpLnRyaW0oKSk7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZWQpICYmIHBhcnNlZCA+PSAwID8gcGFyc2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gc29ydFJlY29yZDxUPihyZWNvcmQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFQ+Pik6IFJlY29yZDxzdHJpbmcsIFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZWNvcmQpLnNvcnQoKFtsZWZ0XSwgW3JpZ2h0XSkgPT4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0KSksXG4gICk7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { type ModelClass as ModelClassType, type ModelQuery, type RankedModel, type ServingEndpointSummary } from "@dbx-tools/shared-model/contracts";
1
+ import { type ModelClass as ModelClassType, type ModelQuery, type RankedModel, type ServingEndpointSummary } from "@dbx-tools/shared-model";
2
2
  type ModelClass = ModelClassType;
3
3
  declare const ModelClass: {
4
4
  readonly ChatThinking: "chat-thinking";