@dbx-tools/appkit-web-search 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.
- package/index.ts +11 -4
- package/lib/index.d.ts +11 -4
- package/lib/index.js +12 -5
- package/lib/src/allowlist.js +6 -6
- package/lib/src/config.js +19 -19
- package/lib/src/plugin.d.ts +1 -1
- package/lib/src/plugin.js +5 -5
- package/lib/src/runtime.js +5 -5
- package/lib/src/schema.js +6 -6
- package/lib/src/search.d.ts +1 -1
- package/lib/src/search.js +24 -24
- package/package.json +8 -112
- package/src/allowlist.ts +5 -5
- package/src/config.ts +22 -33
- package/src/plugin.ts +5 -5
- package/src/runtime.ts +4 -4
- package/src/schema.ts +5 -5
- package/src/search.ts +28 -25
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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/appkit-web-search";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.158";
|
|
7
7
|
export * as allowlist from "./src/allowlist.ts";
|
|
8
8
|
export * as config from "./src/config.ts";
|
|
9
9
|
export * as defaults from "./src/defaults.ts";
|
|
@@ -16,17 +16,24 @@ export * as schema from "./src/schema.ts";
|
|
|
16
16
|
export * as scrape from "./src/scrape.ts";
|
|
17
17
|
export * as search from "./src/search.ts";
|
|
18
18
|
export * as tool from "./src/tool.ts";
|
|
19
|
+
export { normalizeUrlPattern, parseAllowedUrls, toUrlAllowList, assertUrlAllowed } from "./src/allowlist.ts";
|
|
19
20
|
export type { UrlAllowList } from "./src/allowlist.ts";
|
|
20
|
-
export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA } from "./src/config.ts";
|
|
21
|
+
export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA, toApprovalPolicy, resolveWebSearchConfig, approvalMatches } from "./src/config.ts";
|
|
21
22
|
export type { ApprovalGate, ApprovalPolicy, UrlPolicyMode, ModelSource, WebSearchPluginConfig, ResolvedWebSearchConfig } from "./src/config.ts";
|
|
22
|
-
export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults } from "./src/defaults.ts";
|
|
23
|
+
export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults, toCallSettings } from "./src/defaults.ts";
|
|
23
24
|
export type { WebSearchExecuteConfig, WebSearchExecutionSettings } from "./src/defaults.ts";
|
|
25
|
+
export { runWebFetch, runWebAssetPageFetch, runWebImageFetch } from "./src/fetch.ts";
|
|
24
26
|
export type { WebAssetPageFetchRequest, WebImageFetchRequest, WebImageFetchResult } from "./src/fetch.ts";
|
|
27
|
+
export { decodeHtmlEntities, htmlFragmentToText, htmlToText } from "./src/html-text.ts";
|
|
25
28
|
export { WebSearchPlugin, webSearch } from "./src/plugin.ts";
|
|
26
|
-
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
|
|
29
|
+
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS, webSearchProviderForFamily, supportsWebSearch, webSearchToolSpec } from "./src/provider.ts";
|
|
27
30
|
export type { WebSearchProvider, WebSearchProviderSpec } from "./src/provider.ts";
|
|
31
|
+
export { createWebSearchRuntime, createResolvedWebSearchRuntime, toWebSearchRuntime, setWebSearchExecutor, executeRead } from "./src/runtime.ts";
|
|
28
32
|
export type { WebSearchExecutor, WebSearchRuntime, WebSearchRuntimeInput } from "./src/runtime.ts";
|
|
29
33
|
export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
|
|
30
34
|
export type { WebSearchRequest, WebSearchToolRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
|
|
35
|
+
export { parseDdgHtml, runScrapeSearch } from "./src/scrape.ts";
|
|
36
|
+
export { resolveWebSearchContext, selectWebSearchEndpoint, runWebSearch } from "./src/search.ts";
|
|
31
37
|
export type { WebSearchContext, WebSearchModelSelectionOptions } from "./src/search.ts";
|
|
38
|
+
export { webSearchTool, webFetchTool } from "./src/tool.ts";
|
|
32
39
|
export type { WebSearchToolOptions } from "./src/tool.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.158";
|
|
3
3
|
export * as allowlist from "./src/allowlist.ts";
|
|
4
4
|
export * as config from "./src/config.ts";
|
|
5
5
|
export * as defaults from "./src/defaults.ts";
|
|
@@ -12,17 +12,24 @@ export * as schema from "./src/schema.ts";
|
|
|
12
12
|
export * as scrape from "./src/scrape.ts";
|
|
13
13
|
export * as search from "./src/search.ts";
|
|
14
14
|
export * as tool from "./src/tool.ts";
|
|
15
|
+
export { normalizeUrlPattern, parseAllowedUrls, toUrlAllowList, assertUrlAllowed } from "./src/allowlist.ts";
|
|
15
16
|
export type { UrlAllowList } from "./src/allowlist.ts";
|
|
16
|
-
export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA } from "./src/config.ts";
|
|
17
|
+
export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA, toApprovalPolicy, resolveWebSearchConfig, approvalMatches } from "./src/config.ts";
|
|
17
18
|
export type { ApprovalGate, ApprovalPolicy, UrlPolicyMode, ModelSource, WebSearchPluginConfig, ResolvedWebSearchConfig } from "./src/config.ts";
|
|
18
|
-
export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults } from "./src/defaults.ts";
|
|
19
|
+
export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults, toCallSettings } from "./src/defaults.ts";
|
|
19
20
|
export type { WebSearchExecuteConfig, WebSearchExecutionSettings } from "./src/defaults.ts";
|
|
21
|
+
export { runWebFetch, runWebAssetPageFetch, runWebImageFetch } from "./src/fetch.ts";
|
|
20
22
|
export type { WebAssetPageFetchRequest, WebImageFetchRequest, WebImageFetchResult } from "./src/fetch.ts";
|
|
23
|
+
export { decodeHtmlEntities, htmlFragmentToText, htmlToText } from "./src/html-text.ts";
|
|
21
24
|
export { WebSearchPlugin, webSearch } from "./src/plugin.ts";
|
|
22
|
-
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
|
|
25
|
+
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS, webSearchProviderForFamily, supportsWebSearch, webSearchToolSpec } from "./src/provider.ts";
|
|
23
26
|
export type { WebSearchProvider, WebSearchProviderSpec } from "./src/provider.ts";
|
|
27
|
+
export { createWebSearchRuntime, createResolvedWebSearchRuntime, toWebSearchRuntime, setWebSearchExecutor, executeRead } from "./src/runtime.ts";
|
|
24
28
|
export type { WebSearchExecutor, WebSearchRuntime, WebSearchRuntimeInput } from "./src/runtime.ts";
|
|
25
29
|
export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
|
|
26
30
|
export type { WebSearchRequest, WebSearchToolRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
|
|
31
|
+
export { parseDdgHtml, runScrapeSearch } from "./src/scrape.ts";
|
|
32
|
+
export { resolveWebSearchContext, selectWebSearchEndpoint, runWebSearch } from "./src/search.ts";
|
|
27
33
|
export type { WebSearchContext, WebSearchModelSelectionOptions } from "./src/search.ts";
|
|
34
|
+
export { webSearchTool, webFetchTool } from "./src/tool.ts";
|
|
28
35
|
export type { WebSearchToolOptions } from "./src/tool.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
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/appkit-web-search";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.158";
|
|
6
6
|
export * as allowlist from "./src/allowlist.js";
|
|
7
7
|
export * as config from "./src/config.js";
|
|
8
8
|
export * as defaults from "./src/defaults.js";
|
|
@@ -15,9 +15,16 @@ export * as schema from "./src/schema.js";
|
|
|
15
15
|
export * as scrape from "./src/scrape.js";
|
|
16
16
|
export * as search from "./src/search.js";
|
|
17
17
|
export * as tool from "./src/tool.js";
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
18
|
+
export { normalizeUrlPattern, parseAllowedUrls, toUrlAllowList, assertUrlAllowed } from "./src/allowlist.js";
|
|
19
|
+
export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA, toApprovalPolicy, resolveWebSearchConfig, approvalMatches } from "./src/config.js";
|
|
20
|
+
export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults, toCallSettings } from "./src/defaults.js";
|
|
21
|
+
export { runWebFetch, runWebAssetPageFetch, runWebImageFetch } from "./src/fetch.js";
|
|
22
|
+
export { decodeHtmlEntities, htmlFragmentToText, htmlToText } from "./src/html-text.js";
|
|
20
23
|
export { WebSearchPlugin, webSearch } from "./src/plugin.js";
|
|
21
|
-
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.js";
|
|
24
|
+
export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS, webSearchProviderForFamily, supportsWebSearch, webSearchToolSpec } from "./src/provider.js";
|
|
25
|
+
export { createWebSearchRuntime, createResolvedWebSearchRuntime, toWebSearchRuntime, setWebSearchExecutor, executeRead } from "./src/runtime.js";
|
|
22
26
|
export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.js";
|
|
23
|
-
|
|
27
|
+
export { parseDdgHtml, runScrapeSearch } from "./src/scrape.js";
|
|
28
|
+
export { resolveWebSearchContext, selectWebSearchEndpoint, runWebSearch } from "./src/search.js";
|
|
29
|
+
export { webSearchTool, webFetchTool } from "./src/tool.js";
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyUCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbE8sT0FBTyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXhKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqSixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzTyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNThcIjtcbmV4cG9ydCAqIGFzIGFsbG93bGlzdCBmcm9tIFwiLi9zcmMvYWxsb3dsaXN0LnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWcgZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgKiBhcyBmZXRjaCBmcm9tIFwiLi9zcmMvZmV0Y2gudHNcIjtcbmV4cG9ydCAqIGFzIGh0bWxUZXh0IGZyb20gXCIuL3NyYy9odG1sLXRleHQudHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgKiBhcyBwcm92aWRlciBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCAqIGFzIHNjaGVtYSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgKiBhcyBzY3JhcGUgZnJvbSBcIi4vc3JjL3NjcmFwZS50c1wiO1xuZXhwb3J0ICogYXMgc2VhcmNoIGZyb20gXCIuL3NyYy9zZWFyY2gudHNcIjtcbmV4cG9ydCAqIGFzIHRvb2wgZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbmV4cG9ydCB7IG5vcm1hbGl6ZVVybFBhdHRlcm4sIHBhcnNlQWxsb3dlZFVybHMsIHRvVXJsQWxsb3dMaXN0LCBhc3NlcnRVcmxBbGxvd2VkIH0gZnJvbSBcIi4vc3JjL2FsbG93bGlzdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9zcmMvYWxsb3dsaXN0LnRzXCI7XG5leHBvcnQgeyBNT0RFTF9FTlYsIFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBERUZBVUxUX01PREVMX0ZBTExCQUNLUywgREVGQVVMVF9NQVhfQ0lUQVRJT05TLCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEgsIERFRkFVTFRfVElNRU9VVF9NUywgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BLCB0b0FwcHJvdmFsUG9saWN5LCByZXNvbHZlV2ViU2VhcmNoQ29uZmlnLCBhcHByb3ZhbE1hdGNoZXMgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcHJvdmFsR2F0ZSwgQXBwcm92YWxQb2xpY3ksIFVybFBvbGljeU1vZGUsIE1vZGVsU291cmNlLCBXZWJTZWFyY2hQbHVnaW5Db25maWcsIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX0NBQ0hFX1RUTF9TRUNPTkRTLCBGRVRDSF9DQUNIRV9UVExfU0VDT05EUywgU0VSVklOR19SRVRSWV9BVFRFTVBUUywgV0VCX1JFVFJZX0FUVEVNUFRTLCB3ZWJTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIHdlYkZldGNoRXhlY3V0ZURlZmF1bHRzLCBzY3JhcGVTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIHRvQ2FsbFNldHRpbmdzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaEV4ZWN1dGVDb25maWcsIFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgeyBydW5XZWJGZXRjaCwgcnVuV2ViQXNzZXRQYWdlRmV0Y2gsIHJ1bldlYkltYWdlRmV0Y2ggfSBmcm9tIFwiLi9zcmMvZmV0Y2gudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViQXNzZXRQYWdlRmV0Y2hSZXF1ZXN0LCBXZWJJbWFnZUZldGNoUmVxdWVzdCwgV2ViSW1hZ2VGZXRjaFJlc3VsdCB9IGZyb20gXCIuL3NyYy9mZXRjaC50c1wiO1xuZXhwb3J0IHsgZGVjb2RlSHRtbEVudGl0aWVzLCBodG1sRnJhZ21lbnRUb1RleHQsIGh0bWxUb1RleHQgfSBmcm9tIFwiLi9zcmMvaHRtbC10ZXh0LnRzXCI7XG5leHBvcnQgeyBXZWJTZWFyY2hQbHVnaW4sIHdlYlNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IFdlYlNlYXJjaFByb3ZpZGVyU3BlY1NjaGVtYSwgV0VCX1NFQVJDSF9QUk9WSURFUlMsIHdlYlNlYXJjaFByb3ZpZGVyRm9yRmFtaWx5LCBzdXBwb3J0c1dlYlNlYXJjaCwgd2ViU2VhcmNoVG9vbFNwZWMgfSBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoUHJvdmlkZXIsIFdlYlNlYXJjaFByb3ZpZGVyU3BlYyB9IGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0IHsgY3JlYXRlV2ViU2VhcmNoUnVudGltZSwgY3JlYXRlUmVzb2x2ZWRXZWJTZWFyY2hSdW50aW1lLCB0b1dlYlNlYXJjaFJ1bnRpbWUsIHNldFdlYlNlYXJjaEV4ZWN1dG9yLCBleGVjdXRlUmVhZCB9IGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaEV4ZWN1dG9yLCBXZWJTZWFyY2hSdW50aW1lLCBXZWJTZWFyY2hSdW50aW1lSW5wdXQgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLCBXRUJfRkVUQ0hfVE9PTF9ERVNDUklQVElPTiwgd2ViU2VhcmNoUmVxdWVzdFNjaGVtYSwgd2ViU2VhcmNoVG9vbFJlcXVlc3RTY2hlbWEsIHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hLCB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEsIHdlYkZldGNoUmVxdWVzdFNjaGVtYSwgd2ViRmV0Y2hSZXN1bHRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFJlcXVlc3QsIFdlYlNlYXJjaFRvb2xSZXF1ZXN0LCBXZWJTZWFyY2hDaXRhdGlvbiwgV2ViU2VhcmNoUmVzdWx0LCBXZWJGZXRjaFJlcXVlc3QsIFdlYkZldGNoUmVzdWx0IH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHsgcGFyc2VEZGdIdG1sLCBydW5TY3JhcGVTZWFyY2ggfSBmcm9tIFwiLi9zcmMvc2NyYXBlLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlV2ViU2VhcmNoQ29udGV4dCwgc2VsZWN0V2ViU2VhcmNoRW5kcG9pbnQsIHJ1bldlYlNlYXJjaCB9IGZyb20gXCIuL3NyYy9zZWFyY2gudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoQ29udGV4dCwgV2ViU2VhcmNoTW9kZWxTZWxlY3Rpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlYXJjaC50c1wiO1xuZXhwb3J0IHsgd2ViU2VhcmNoVG9vbCwgd2ViRmV0Y2hUb29sIH0gZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoVG9vbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuIl19
|
package/lib/src/allowlist.js
CHANGED
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
* @module
|
|
30
30
|
*/
|
|
31
31
|
import { ValidationError } from "@databricks/appkit";
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
32
|
+
import { toPathMatcher } from "@dbx-tools/path";
|
|
33
|
+
import { parseList } from "@dbx-tools/shared-core";
|
|
34
34
|
/** Strip a leading `scheme://` (or bare `scheme:`) from a pattern. */
|
|
35
35
|
function stripScheme(pattern) {
|
|
36
36
|
return pattern.replace(/^[a-z][a-z0-9+.-]*:\/\//i, "").replace(/^[a-z][a-z0-9+.-]*:/i, "");
|
|
@@ -51,18 +51,18 @@ export function normalizeUrlPattern(pattern) {
|
|
|
51
51
|
* identically.
|
|
52
52
|
*/
|
|
53
53
|
export function parseAllowedUrls(raw) {
|
|
54
|
-
return
|
|
54
|
+
return parseList(raw, normalizeUrlPattern);
|
|
55
55
|
}
|
|
56
56
|
/** Compile a single normalized entry into a {@link CompiledPattern}. */
|
|
57
57
|
function compilePattern(pattern) {
|
|
58
58
|
if (pattern.includes("/")) {
|
|
59
59
|
// A path entry matches against `host + pathname` (no scheme, no query).
|
|
60
|
-
return { target: "hostPath", matcher:
|
|
60
|
+
return { target: "hostPath", matcher: toPathMatcher(pattern) };
|
|
61
61
|
}
|
|
62
62
|
// A host entry matches the hostname. A bare host (no wildcard) also
|
|
63
63
|
// permits its subdomains via an added `*.<host>` alternative.
|
|
64
64
|
const globs = pattern.includes("*") ? [pattern] : [pattern, `*.${pattern}`];
|
|
65
|
-
return { target: "hostname", matcher:
|
|
65
|
+
return { target: "hostname", matcher: toPathMatcher(...globs) };
|
|
66
66
|
}
|
|
67
67
|
/** The URL slices a compiled pattern is tested against. */
|
|
68
68
|
function urlTargets(url) {
|
|
@@ -110,4 +110,4 @@ export function assertUrlAllowed(url, allow) {
|
|
|
110
110
|
throw ValidationError.invalidValue("url", url, `a URL permitted by the configured allow-list (${allow.patterns.join(", ")})`);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dsaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsbG93bGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZckQsc0VBQXNFO0FBQ3RFLFNBQVMsV0FBVyxDQUFDLE9BQWU7SUFDbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBa0M7SUFDakUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFRRCx3RUFBd0U7QUFDeEUsU0FBUyxjQUFjLENBQUMsT0FBZTtJQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQix3RUFBd0U7UUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBQ0Qsb0VBQW9FO0lBQ3BFLDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLHlFQUF5RTtZQUN6RSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQTJCO0lBQ3hELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsUUFBUTtRQUNSLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsS0FBbUI7SUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQ2hDLEtBQUssRUFDTCxHQUFHLEVBQ0gsaURBQWlELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzlFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVVJMIGFsbG93LWxpc3QgcG9saWN5IGZvciB0aGUgd2ViLXNlYXJjaCBhZGQtb24uXG4gKlxuICogQSBjb25maWd1cmVkIGFsbG93LWxpc3QgcmVzdHJpY3RzIHdoaWNoIFVSTHMgdGhlIHRvb2xzIHdpbGwgc3VyZmFjZSBvclxuICogZmV0Y2guIEVhY2ggZW50cnkgaXMgYSBnbG9iIGNvbXBpbGVkIGJ5IGBAZGJ4LXRvb2xzL3BhdGhgJ3NcbiAqIHtAbGluayBtYXRjaC50b1BhdGhNYXRjaGVyfSAodGhlIHNhbWUgYE1pbmltYXRjaGAtYmFja2VkIG1hdGNoZXIgdGhlXG4gKiBwYWNrYWdlJ3MgZmlsZSBzY2FubmluZyB1c2VzKS4gQmVjYXVzZSB0aGF0IG1hdGNoZXIgdHJlYXRzIGAvYCBhcyBhXG4gKiBwYXRoLXNlZ21lbnQgYm91bmRhcnksIGVudHJpZXMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgcmlnaHQgc2xpY2Ugb2YgdGhlXG4gKiBVUkwgcmF0aGVyIHRoYW4gdGhlIHJhdyBgaHJlZmA6XG4gKlxuICogLSBBICoqaG9zdCoqIGVudHJ5IChubyBgL2AgYWZ0ZXIgdGhlIG9wdGlvbmFsIHNjaGVtZSwgZS5nLiBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIG9yIGAqLmRhdGFicmlja3MuY29tYCkgaXMgdGVzdGVkIGFnYWluc3QgdGhlIFVSTCdzIGBob3N0bmFtZWAuIEEgYmFyZVxuICogICBob3N0IHdpdGggbm8gd2lsZGNhcmQgYWxzbyBtYXRjaGVzIGl0cyBzdWJkb21haW5zLCBzbyBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIHBlcm1pdHMgYGRvY3MuZGF0YWJyaWNrcy5jb21gIC0gdGhlIGludHVpdGl2ZSByZWFkaW5nIG9mIGEgZG9tYWluXG4gKiAgIGFsbG93LWxpc3QuXG4gKiAtIEEgKipwYXRoKiogZW50cnkgKGNvbnRhaW5zIGEgYC9gLCBlLmcuIGBkb2NzLmV4YW1wbGUuY29tL2FwaS8qKmApIGlzXG4gKiAgIHRlc3RlZCBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChzY2hlbWUgYW5kIHF1ZXJ5IHN0cmlwcGVkKSwgc28gcGF0aFxuICogICBnbG9icyB3b3JrIHdpdGhvdXQgZmlnaHRpbmcgdGhlIGBodHRwczovL2AgcHJlZml4LlxuICpcbiAqIEVuZm9yY2VtZW50IGlzIGFzeW1tZXRyaWMgYnkgZGVzaWduIChzZWUgdGhlIG1vZHVsZSdzIHR3byBjb25zdW1lcnMpOlxuICogYHdlYl9zZWFyY2hgIHJlc3VsdHMgYXJlIFNJTEVOVExZIGZpbHRlcmVkIHRvIHRoZSBwZXJtaXR0ZWQgc2V0LCB3aGlsZSBhblxuICogZXhwbGljaXQgYHdlYl9mZXRjaGAgb2YgYSBkaXNhbGxvd2VkIFVSTCBpcyByZWZ1c2VkIHdpdGggYW4gZXJyb3IgLSB0aGVcbiAqIHNlYXJjaCBuZXZlciBsZWFrcyBhIFVSTCB0aGUgY2FsbGVyIHRoZW4gY2FuJ3QgZmV0Y2gsIGJ1dCBhIGRpcmVjdCBmZXRjaFxuICogb2YgYSBibG9ja2VkIFVSTCBpcyBhIHZpc2libGUsIGNvcnJlY3RhYmxlIG1pc3Rha2UgcmF0aGVyIHRoYW4gYSBzaWxlbnRcbiAqIGVtcHR5LlxuICpcbiAqIEFuIGVtcHR5IC8gYWJzZW50IGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBtYXRjaCwgdHlwZSBQYXRoTWF0Y2hlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3BhdGhcIjtcbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqIEEgY29tcGlsZWQgVVJMIGFsbG93LWxpc3QuIEJ1aWxkIG9uZSB3aXRoIHtAbGluayB0b1VybEFsbG93TGlzdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFVybEFsbG93TGlzdCB7XG4gIC8qKiBUaGUgbm9ybWFsaXplZCBlbnRyaWVzIGJhY2tpbmcgdGhpcyBsaXN0IChmb3IgZGlhZ25vc3RpY3MpLiAqL1xuICByZWFkb25seSBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoZSBsaXN0IGFjdHVhbGx5IHJlc3RyaWN0cyBhbnl0aGluZyAoYGZhbHNlYCA9PSBwZXJtaXQgYWxsKS4gKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYHVybGAgaXMgcGVybWl0dGVkLiBBbiB1bnJlc3RyaWN0ZWQgbGlzdCBwZXJtaXRzIGV2ZXJ5dGhpbmcuICovXG4gIGFsbG93cyh1cmw6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKiBTdHJpcCBhIGxlYWRpbmcgYHNjaGVtZTovL2AgKG9yIGJhcmUgYHNjaGVtZTpgKSBmcm9tIGEgcGF0dGVybi4gKi9cbmZ1bmN0aW9uIHN0cmlwU2NoZW1lKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaSwgXCJcIikucmVwbGFjZSgvXlthLXpdW2EtejAtOSsuLV0qOi9pLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgb25lIHJhdyBhbGxvdy1saXN0IGVudHJ5OiB0cmltIGl0IGFuZCBkcm9wIGFueSBzY2hlbWUuIFRoZVxuICogc2NoZW1lIGlzIGlycmVsZXZhbnQgdG8gbWF0Y2hpbmcgKHdlIGNvbXBhcmUgYWdhaW5zdCBob3N0bmFtZSAvIGhvc3QrcGF0aCksXG4gKiBzbyBgaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL3hgIGFuZCBgZG9jcy5leGFtcGxlLmNvbS94YCBhcmUgZXF1aXZhbGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVVybFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmlwU2NoZW1lKHBhdHRlcm4udHJpbSgpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHJhdyBhbGxvdy1saXN0IGZyb20gY29uZmlnIChgc3RyaW5nW11gKSBvciBhbiBlbnYgdmFyIChhIENTViAvXG4gKiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcpIGludG8gYSBub3JtYWxpemVkLCBkZS1kdXBsaWNhdGVkIGVudHJ5IGxpc3QuXG4gKiBFbnRyaWVzIGFyZSB0cmltbWVkIGFuZCBzY2hlbWUtc3RyaXBwZWQ7IGVtcHRpZXMgYXJlIGRyb3BwZWQuIE1pcnJvcnMgdGhlXG4gKiBlbWFpbCBhZGQtb24ncyBgcGFyc2VBbGxvd2VkU2VuZGVyc2Agc28gdGhlIHR3byBwb2xpY2llcyByZWFkIHRoZWlyIGNvbmZpZ1xuICogaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbG93ZWRVcmxzKHJhdzogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBzdHJpbmdVdGlscy5wYXJzZUxpc3QocmF3LCBub3JtYWxpemVVcmxQYXR0ZXJuKTtcbn1cblxuLyoqIE9uZSBjb21waWxlZCBlbnRyeTogd2hpY2ggVVJMIHNsaWNlIGl0IHRlc3RzLCBhbmQgdGhlIG1hdGNoZXIgZm9yIGl0LiAqL1xuaW50ZXJmYWNlIENvbXBpbGVkUGF0dGVybiB7XG4gIHRhcmdldDogXCJob3N0bmFtZVwiIHwgXCJob3N0UGF0aFwiO1xuICBtYXRjaGVyOiBQYXRoTWF0Y2hlcjtcbn1cblxuLyoqIENvbXBpbGUgYSBzaW5nbGUgbm9ybWFsaXplZCBlbnRyeSBpbnRvIGEge0BsaW5rIENvbXBpbGVkUGF0dGVybn0uICovXG5mdW5jdGlvbiBjb21waWxlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpOiBDb21waWxlZFBhdHRlcm4ge1xuICBpZiAocGF0dGVybi5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAvLyBBIHBhdGggZW50cnkgbWF0Y2hlcyBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChubyBzY2hlbWUsIG5vIHF1ZXJ5KS5cbiAgICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdFBhdGhcIiwgbWF0Y2hlcjogbWF0Y2gudG9QYXRoTWF0Y2hlcihwYXR0ZXJuKSB9O1xuICB9XG4gIC8vIEEgaG9zdCBlbnRyeSBtYXRjaGVzIHRoZSBob3N0bmFtZS4gQSBiYXJlIGhvc3QgKG5vIHdpbGRjYXJkKSBhbHNvXG4gIC8vIHBlcm1pdHMgaXRzIHN1YmRvbWFpbnMgdmlhIGFuIGFkZGVkIGAqLjxob3N0PmAgYWx0ZXJuYXRpdmUuXG4gIGNvbnN0IGdsb2JzID0gcGF0dGVybi5pbmNsdWRlcyhcIipcIikgPyBbcGF0dGVybl0gOiBbcGF0dGVybiwgYCouJHtwYXR0ZXJufWBdO1xuICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdG5hbWVcIiwgbWF0Y2hlcjogbWF0Y2gudG9QYXRoTWF0Y2hlciguLi5nbG9icykgfTtcbn1cblxuLyoqIFRoZSBVUkwgc2xpY2VzIGEgY29tcGlsZWQgcGF0dGVybiBpcyB0ZXN0ZWQgYWdhaW5zdC4gKi9cbmZ1bmN0aW9uIHVybFRhcmdldHModXJsOiBzdHJpbmcpOiB7IGhvc3RuYW1lOiBzdHJpbmc7IGhvc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdG5hbWU6IHUuaG9zdG5hbWUsXG4gICAgICAvLyBEcm9wIGEgdHJhaWxpbmcgc2xhc2ggc28gYGV4YW1wbGUuY29tL2FwaWAgbWF0Y2hlcyBgZXhhbXBsZS5jb20vYXBpL2AuXG4gICAgICBob3N0UGF0aDogYCR7dS5ob3N0bmFtZX0ke3UucGF0aG5hbWV9YC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBub3JtYWxpemVkIGVudHJ5IGxpc3QgaW50byBhIHtAbGluayBVcmxBbGxvd0xpc3R9LiBBbiBlbXB0eSBsaXN0XG4gKiB5aWVsZHMgYSBwZXJtaXQtYWxsIGFsbG93LWxpc3Qgd2hvc2Uge0BsaW5rIFVybEFsbG93TGlzdC5hbGxvd3N9IGFsd2F5c1xuICogcmV0dXJucyBgdHJ1ZWAuIEEgVVJMIHRoYXQgY2FuJ3QgYmUgcGFyc2VkIGlzIG5ldmVyIHBlcm1pdHRlZCBieSBhXG4gKiByZXN0cmljdGVkIGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VybEFsbG93TGlzdChwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10pOiBVcmxBbGxvd0xpc3Qge1xuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcGF0dGVybnM6IFtdLCByZXN0cmljdGVkOiBmYWxzZSwgYWxsb3dzOiAoKSA9PiB0cnVlIH07XG4gIH1cbiAgY29uc3QgY29tcGlsZWQgPSBwYXR0ZXJucy5tYXAoY29tcGlsZVBhdHRlcm4pO1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm5zLFxuICAgIHJlc3RyaWN0ZWQ6IHRydWUsXG4gICAgYWxsb3dzOiAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB1cmxUYXJnZXRzKHVybCk7XG4gICAgICBpZiAoIXRhcmdldHMpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb21waWxlZC5zb21lKChjKSA9PiBjLm1hdGNoZXIodGFyZ2V0c1tjLnRhcmdldF0pKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRocm93IHdoZW4gYHVybGAgaXMgbm90IHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdC4gTm8tb3Agd2hlbiB0aGVcbiAqIGFsbG93LWxpc3QgaXMgdW5yZXN0cmljdGVkLiBUaGUgc2luZ2xlIGVuZm9yY2VtZW50IHBvaW50IGZvciB0aGVcbiAqIGB3ZWJfZmV0Y2hgIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVcmxBbGxvd2VkKHVybDogc3RyaW5nLCBhbGxvdzogVXJsQWxsb3dMaXN0KTogdm9pZCB7XG4gIGlmICghYWxsb3cuYWxsb3dzKHVybCkpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJ1cmxcIixcbiAgICAgIHVybCxcbiAgICAgIGBhIFVSTCBwZXJtaXR0ZWQgYnkgdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCAoJHthbGxvdy5wYXR0ZXJucy5qb2luKFwiLCBcIil9KWAsXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dsaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsbG93bGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFvQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZbkQsc0VBQXNFO0FBQ3RFLFNBQVMsV0FBVyxDQUFDLE9BQWU7SUFDbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBa0M7SUFDakUsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQVFELHdFQUF3RTtBQUN4RSxTQUFTLGNBQWMsQ0FBQyxPQUFlO0lBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLHdFQUF3RTtRQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUNELG9FQUFvRTtJQUNwRSw4REFBOEQ7SUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ2xFLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLHlFQUF5RTtZQUN6RSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQTJCO0lBQ3hELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsUUFBUTtRQUNSLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsS0FBbUI7SUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQ2hDLEtBQUssRUFDTCxHQUFHLEVBQ0gsaURBQWlELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzlFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVVJMIGFsbG93LWxpc3QgcG9saWN5IGZvciB0aGUgd2ViLXNlYXJjaCBhZGQtb24uXG4gKlxuICogQSBjb25maWd1cmVkIGFsbG93LWxpc3QgcmVzdHJpY3RzIHdoaWNoIFVSTHMgdGhlIHRvb2xzIHdpbGwgc3VyZmFjZSBvclxuICogZmV0Y2guIEVhY2ggZW50cnkgaXMgYSBnbG9iIGNvbXBpbGVkIGJ5IGBAZGJ4LXRvb2xzL3BhdGhgJ3NcbiAqIHtAbGluayBtYXRjaC50b1BhdGhNYXRjaGVyfSAodGhlIHNhbWUgYE1pbmltYXRjaGAtYmFja2VkIG1hdGNoZXIgdGhlXG4gKiBwYWNrYWdlJ3MgZmlsZSBzY2FubmluZyB1c2VzKS4gQmVjYXVzZSB0aGF0IG1hdGNoZXIgdHJlYXRzIGAvYCBhcyBhXG4gKiBwYXRoLXNlZ21lbnQgYm91bmRhcnksIGVudHJpZXMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgcmlnaHQgc2xpY2Ugb2YgdGhlXG4gKiBVUkwgcmF0aGVyIHRoYW4gdGhlIHJhdyBgaHJlZmA6XG4gKlxuICogLSBBICoqaG9zdCoqIGVudHJ5IChubyBgL2AgYWZ0ZXIgdGhlIG9wdGlvbmFsIHNjaGVtZSwgZS5nLiBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIG9yIGAqLmRhdGFicmlja3MuY29tYCkgaXMgdGVzdGVkIGFnYWluc3QgdGhlIFVSTCdzIGBob3N0bmFtZWAuIEEgYmFyZVxuICogICBob3N0IHdpdGggbm8gd2lsZGNhcmQgYWxzbyBtYXRjaGVzIGl0cyBzdWJkb21haW5zLCBzbyBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIHBlcm1pdHMgYGRvY3MuZGF0YWJyaWNrcy5jb21gIC0gdGhlIGludHVpdGl2ZSByZWFkaW5nIG9mIGEgZG9tYWluXG4gKiAgIGFsbG93LWxpc3QuXG4gKiAtIEEgKipwYXRoKiogZW50cnkgKGNvbnRhaW5zIGEgYC9gLCBlLmcuIGBkb2NzLmV4YW1wbGUuY29tL2FwaS8qKmApIGlzXG4gKiAgIHRlc3RlZCBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChzY2hlbWUgYW5kIHF1ZXJ5IHN0cmlwcGVkKSwgc28gcGF0aFxuICogICBnbG9icyB3b3JrIHdpdGhvdXQgZmlnaHRpbmcgdGhlIGBodHRwczovL2AgcHJlZml4LlxuICpcbiAqIEVuZm9yY2VtZW50IGlzIGFzeW1tZXRyaWMgYnkgZGVzaWduIChzZWUgdGhlIG1vZHVsZSdzIHR3byBjb25zdW1lcnMpOlxuICogYHdlYl9zZWFyY2hgIHJlc3VsdHMgYXJlIFNJTEVOVExZIGZpbHRlcmVkIHRvIHRoZSBwZXJtaXR0ZWQgc2V0LCB3aGlsZSBhblxuICogZXhwbGljaXQgYHdlYl9mZXRjaGAgb2YgYSBkaXNhbGxvd2VkIFVSTCBpcyByZWZ1c2VkIHdpdGggYW4gZXJyb3IgLSB0aGVcbiAqIHNlYXJjaCBuZXZlciBsZWFrcyBhIFVSTCB0aGUgY2FsbGVyIHRoZW4gY2FuJ3QgZmV0Y2gsIGJ1dCBhIGRpcmVjdCBmZXRjaFxuICogb2YgYSBibG9ja2VkIFVSTCBpcyBhIHZpc2libGUsIGNvcnJlY3RhYmxlIG1pc3Rha2UgcmF0aGVyIHRoYW4gYSBzaWxlbnRcbiAqIGVtcHR5LlxuICpcbiAqIEFuIGVtcHR5IC8gYWJzZW50IGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyB0eXBlIFBhdGhNYXRjaGVyLCB0b1BhdGhNYXRjaGVyIH0gZnJvbSBcIkBkYngtdG9vbHMvcGF0aFwiO1xuaW1wb3J0IHsgcGFyc2VMaXN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqIEEgY29tcGlsZWQgVVJMIGFsbG93LWxpc3QuIEJ1aWxkIG9uZSB3aXRoIHtAbGluayB0b1VybEFsbG93TGlzdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFVybEFsbG93TGlzdCB7XG4gIC8qKiBUaGUgbm9ybWFsaXplZCBlbnRyaWVzIGJhY2tpbmcgdGhpcyBsaXN0IChmb3IgZGlhZ25vc3RpY3MpLiAqL1xuICByZWFkb25seSBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoZSBsaXN0IGFjdHVhbGx5IHJlc3RyaWN0cyBhbnl0aGluZyAoYGZhbHNlYCA9PSBwZXJtaXQgYWxsKS4gKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYHVybGAgaXMgcGVybWl0dGVkLiBBbiB1bnJlc3RyaWN0ZWQgbGlzdCBwZXJtaXRzIGV2ZXJ5dGhpbmcuICovXG4gIGFsbG93cyh1cmw6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKiBTdHJpcCBhIGxlYWRpbmcgYHNjaGVtZTovL2AgKG9yIGJhcmUgYHNjaGVtZTpgKSBmcm9tIGEgcGF0dGVybi4gKi9cbmZ1bmN0aW9uIHN0cmlwU2NoZW1lKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaSwgXCJcIikucmVwbGFjZSgvXlthLXpdW2EtejAtOSsuLV0qOi9pLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgb25lIHJhdyBhbGxvdy1saXN0IGVudHJ5OiB0cmltIGl0IGFuZCBkcm9wIGFueSBzY2hlbWUuIFRoZVxuICogc2NoZW1lIGlzIGlycmVsZXZhbnQgdG8gbWF0Y2hpbmcgKHdlIGNvbXBhcmUgYWdhaW5zdCBob3N0bmFtZSAvIGhvc3QrcGF0aCksXG4gKiBzbyBgaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL3hgIGFuZCBgZG9jcy5leGFtcGxlLmNvbS94YCBhcmUgZXF1aXZhbGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVVybFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmlwU2NoZW1lKHBhdHRlcm4udHJpbSgpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHJhdyBhbGxvdy1saXN0IGZyb20gY29uZmlnIChgc3RyaW5nW11gKSBvciBhbiBlbnYgdmFyIChhIENTViAvXG4gKiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcpIGludG8gYSBub3JtYWxpemVkLCBkZS1kdXBsaWNhdGVkIGVudHJ5IGxpc3QuXG4gKiBFbnRyaWVzIGFyZSB0cmltbWVkIGFuZCBzY2hlbWUtc3RyaXBwZWQ7IGVtcHRpZXMgYXJlIGRyb3BwZWQuIE1pcnJvcnMgdGhlXG4gKiBlbWFpbCBhZGQtb24ncyBgcGFyc2VBbGxvd2VkU2VuZGVyc2Agc28gdGhlIHR3byBwb2xpY2llcyByZWFkIHRoZWlyIGNvbmZpZ1xuICogaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbG93ZWRVcmxzKHJhdzogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwYXJzZUxpc3QocmF3LCBub3JtYWxpemVVcmxQYXR0ZXJuKTtcbn1cblxuLyoqIE9uZSBjb21waWxlZCBlbnRyeTogd2hpY2ggVVJMIHNsaWNlIGl0IHRlc3RzLCBhbmQgdGhlIG1hdGNoZXIgZm9yIGl0LiAqL1xuaW50ZXJmYWNlIENvbXBpbGVkUGF0dGVybiB7XG4gIHRhcmdldDogXCJob3N0bmFtZVwiIHwgXCJob3N0UGF0aFwiO1xuICBtYXRjaGVyOiBQYXRoTWF0Y2hlcjtcbn1cblxuLyoqIENvbXBpbGUgYSBzaW5nbGUgbm9ybWFsaXplZCBlbnRyeSBpbnRvIGEge0BsaW5rIENvbXBpbGVkUGF0dGVybn0uICovXG5mdW5jdGlvbiBjb21waWxlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpOiBDb21waWxlZFBhdHRlcm4ge1xuICBpZiAocGF0dGVybi5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAvLyBBIHBhdGggZW50cnkgbWF0Y2hlcyBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChubyBzY2hlbWUsIG5vIHF1ZXJ5KS5cbiAgICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdFBhdGhcIiwgbWF0Y2hlcjogdG9QYXRoTWF0Y2hlcihwYXR0ZXJuKSB9O1xuICB9XG4gIC8vIEEgaG9zdCBlbnRyeSBtYXRjaGVzIHRoZSBob3N0bmFtZS4gQSBiYXJlIGhvc3QgKG5vIHdpbGRjYXJkKSBhbHNvXG4gIC8vIHBlcm1pdHMgaXRzIHN1YmRvbWFpbnMgdmlhIGFuIGFkZGVkIGAqLjxob3N0PmAgYWx0ZXJuYXRpdmUuXG4gIGNvbnN0IGdsb2JzID0gcGF0dGVybi5pbmNsdWRlcyhcIipcIikgPyBbcGF0dGVybl0gOiBbcGF0dGVybiwgYCouJHtwYXR0ZXJufWBdO1xuICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdG5hbWVcIiwgbWF0Y2hlcjogdG9QYXRoTWF0Y2hlciguLi5nbG9icykgfTtcbn1cblxuLyoqIFRoZSBVUkwgc2xpY2VzIGEgY29tcGlsZWQgcGF0dGVybiBpcyB0ZXN0ZWQgYWdhaW5zdC4gKi9cbmZ1bmN0aW9uIHVybFRhcmdldHModXJsOiBzdHJpbmcpOiB7IGhvc3RuYW1lOiBzdHJpbmc7IGhvc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdG5hbWU6IHUuaG9zdG5hbWUsXG4gICAgICAvLyBEcm9wIGEgdHJhaWxpbmcgc2xhc2ggc28gYGV4YW1wbGUuY29tL2FwaWAgbWF0Y2hlcyBgZXhhbXBsZS5jb20vYXBpL2AuXG4gICAgICBob3N0UGF0aDogYCR7dS5ob3N0bmFtZX0ke3UucGF0aG5hbWV9YC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBub3JtYWxpemVkIGVudHJ5IGxpc3QgaW50byBhIHtAbGluayBVcmxBbGxvd0xpc3R9LiBBbiBlbXB0eSBsaXN0XG4gKiB5aWVsZHMgYSBwZXJtaXQtYWxsIGFsbG93LWxpc3Qgd2hvc2Uge0BsaW5rIFVybEFsbG93TGlzdC5hbGxvd3N9IGFsd2F5c1xuICogcmV0dXJucyBgdHJ1ZWAuIEEgVVJMIHRoYXQgY2FuJ3QgYmUgcGFyc2VkIGlzIG5ldmVyIHBlcm1pdHRlZCBieSBhXG4gKiByZXN0cmljdGVkIGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VybEFsbG93TGlzdChwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10pOiBVcmxBbGxvd0xpc3Qge1xuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcGF0dGVybnM6IFtdLCByZXN0cmljdGVkOiBmYWxzZSwgYWxsb3dzOiAoKSA9PiB0cnVlIH07XG4gIH1cbiAgY29uc3QgY29tcGlsZWQgPSBwYXR0ZXJucy5tYXAoY29tcGlsZVBhdHRlcm4pO1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm5zLFxuICAgIHJlc3RyaWN0ZWQ6IHRydWUsXG4gICAgYWxsb3dzOiAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB1cmxUYXJnZXRzKHVybCk7XG4gICAgICBpZiAoIXRhcmdldHMpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb21waWxlZC5zb21lKChjKSA9PiBjLm1hdGNoZXIodGFyZ2V0c1tjLnRhcmdldF0pKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRocm93IHdoZW4gYHVybGAgaXMgbm90IHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdC4gTm8tb3Agd2hlbiB0aGVcbiAqIGFsbG93LWxpc3QgaXMgdW5yZXN0cmljdGVkLiBUaGUgc2luZ2xlIGVuZm9yY2VtZW50IHBvaW50IGZvciB0aGVcbiAqIGB3ZWJfZmV0Y2hgIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVcmxBbGxvd2VkKHVybDogc3RyaW5nLCBhbGxvdzogVXJsQWxsb3dMaXN0KTogdm9pZCB7XG4gIGlmICghYWxsb3cuYWxsb3dzKHVybCkpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJ1cmxcIixcbiAgICAgIHVybCxcbiAgICAgIGBhIFVSTCBwZXJtaXR0ZWQgYnkgdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCAoJHthbGxvdy5wYXR0ZXJucy5qb2luKFwiLCBcIil9KWAsXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/lib/src/config.js
CHANGED
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
* @module
|
|
45
45
|
*/
|
|
46
46
|
import { ConfigurationError } from "@databricks/appkit";
|
|
47
|
-
import { configUtils } from "@dbx-tools/core";
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
47
|
+
import { configUtils, text, ENV_ONLY, boolean, positiveNumber, positiveInt } from "@dbx-tools/core";
|
|
48
|
+
import { DEFAULT_FUZZY_THRESHOLD } from "@dbx-tools/model";
|
|
49
|
+
import { parseRecord, isRecord, trimToNull } from "@dbx-tools/shared-core";
|
|
50
50
|
import { parseAllowedUrls, toUrlAllowList } from "./allowlist.js";
|
|
51
51
|
/** Dedicated override for the web-search endpoint id. */
|
|
52
52
|
export const MODEL_ENV = "WEB_SEARCH_MODEL";
|
|
@@ -139,10 +139,10 @@ export const WEB_SEARCH_CONFIG_SCHEMA = {
|
|
|
139
139
|
* silently leave the built-in tool specs in place, so it throws.
|
|
140
140
|
*/
|
|
141
141
|
function parseToolsEnv() {
|
|
142
|
-
const raw =
|
|
142
|
+
const raw = text("WEB_SEARCH_TOOLS", ENV_ONLY);
|
|
143
143
|
if (raw === undefined)
|
|
144
144
|
return {};
|
|
145
|
-
const parsed =
|
|
145
|
+
const parsed = parseRecord(raw);
|
|
146
146
|
if (!parsed) {
|
|
147
147
|
throw new ConfigurationError("WEB_SEARCH_TOOLS must be a JSON object mapping a provider family to its request fragment", { context: { envVar: "WEB_SEARCH_TOOLS" } });
|
|
148
148
|
}
|
|
@@ -150,13 +150,13 @@ function parseToolsEnv() {
|
|
|
150
150
|
}
|
|
151
151
|
/** Read the pinned endpoint id and record which source supplied it. */
|
|
152
152
|
function resolveModelPin(config) {
|
|
153
|
-
const fromConfig =
|
|
153
|
+
const fromConfig = trimToNull(config.model);
|
|
154
154
|
if (fromConfig !== null)
|
|
155
155
|
return { model: fromConfig, source: "config" };
|
|
156
|
-
const fromModelEnv =
|
|
156
|
+
const fromModelEnv = text(MODEL_ENV, ENV_ONLY);
|
|
157
157
|
if (fromModelEnv !== undefined)
|
|
158
158
|
return { model: fromModelEnv, source: MODEL_ENV };
|
|
159
|
-
const fromResourceEnv =
|
|
159
|
+
const fromResourceEnv = text(SERVING_ENDPOINT_ENV, ENV_ONLY);
|
|
160
160
|
if (fromResourceEnv !== undefined) {
|
|
161
161
|
return { model: fromResourceEnv, source: SERVING_ENDPOINT_ENV };
|
|
162
162
|
}
|
|
@@ -167,7 +167,7 @@ function resolveModelPin(config) {
|
|
|
167
167
|
* contradicts the allow-list entries it was given.
|
|
168
168
|
*/
|
|
169
169
|
function resolveUrlPolicy(configured, patterns) {
|
|
170
|
-
const raw = configured ??
|
|
170
|
+
const raw = configured ?? text("WEB_SEARCH_URL_POLICY", ENV_ONLY);
|
|
171
171
|
if (raw === undefined)
|
|
172
172
|
return patterns.length > 0 ? "allowlist" : "unrestricted";
|
|
173
173
|
if (raw !== "allowlist" && raw !== "unrestricted") {
|
|
@@ -192,7 +192,7 @@ export function toApprovalPolicy(gate) {
|
|
|
192
192
|
return { mode: "none" };
|
|
193
193
|
if (gate === true)
|
|
194
194
|
return { mode: "always" };
|
|
195
|
-
if (
|
|
195
|
+
if (isRecord(gate) && "mode" in gate) {
|
|
196
196
|
if (gate.mode === "urls") {
|
|
197
197
|
const patterns = parseAllowedUrls([...gate.patterns]);
|
|
198
198
|
return patterns.length > 0 ? { mode: "urls", patterns } : { mode: "none" };
|
|
@@ -215,21 +215,21 @@ export function toApprovalPolicy(gate) {
|
|
|
215
215
|
* {@link ConfigurationError} naming the field and the environment variable.
|
|
216
216
|
*/
|
|
217
217
|
export function resolveWebSearchConfig(config = {}) {
|
|
218
|
-
const patterns = parseAllowedUrls(config.allowedUrls ??
|
|
218
|
+
const patterns = parseAllowedUrls(config.allowedUrls ?? text("WEB_SEARCH_ALLOWED_URLS", ENV_ONLY));
|
|
219
219
|
const urlPolicy = resolveUrlPolicy(config.urlPolicy, patterns);
|
|
220
220
|
const { model, source } = resolveModelPin(config);
|
|
221
|
-
const fallbacks = configUtils.list(config.modelFallbacks, "WEB_SEARCH_MODEL_FALLBACKS", undefined,
|
|
221
|
+
const fallbacks = configUtils.list(config.modelFallbacks, "WEB_SEARCH_MODEL_FALLBACKS", undefined, ENV_ONLY);
|
|
222
222
|
return {
|
|
223
223
|
...(model ? { model } : {}),
|
|
224
224
|
modelSource: source,
|
|
225
225
|
modelFallbacks: fallbacks.length > 0 ? fallbacks : DEFAULT_MODEL_FALLBACKS,
|
|
226
226
|
webSearchTools: { ...parseToolsEnv(), ...(config.webSearchTools ?? {}) },
|
|
227
|
-
fuzzy:
|
|
228
|
-
fuzzyThreshold:
|
|
229
|
-
maxCitations:
|
|
230
|
-
fetchMaxLength:
|
|
231
|
-
timeoutMs:
|
|
232
|
-
scrapeFallback:
|
|
227
|
+
fuzzy: boolean(config.modelFuzzyMatch, "WEB_SEARCH_FUZZY", ENV_ONLY) ?? true,
|
|
228
|
+
fuzzyThreshold: positiveNumber(config.modelFuzzyThreshold, "WEB_SEARCH_FUZZY_THRESHOLD", DEFAULT_FUZZY_THRESHOLD, ENV_ONLY),
|
|
229
|
+
maxCitations: positiveInt(config.maxCitations, "WEB_SEARCH_MAX_CITATIONS", DEFAULT_MAX_CITATIONS, ENV_ONLY),
|
|
230
|
+
fetchMaxLength: positiveInt(config.fetchMaxLength, "WEB_SEARCH_FETCH_MAX_LENGTH", DEFAULT_FETCH_MAX_LENGTH, ENV_ONLY),
|
|
231
|
+
timeoutMs: positiveInt(config.timeoutMs, "WEB_SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, ENV_ONLY),
|
|
232
|
+
scrapeFallback: boolean(config.scrapeFallback, "WEB_SEARCH_SCRAPE_FALLBACK", ENV_ONLY) ?? true,
|
|
233
233
|
urlPolicy,
|
|
234
234
|
allowList: toUrlAllowList(urlPolicy === "allowlist" ? patterns : []),
|
|
235
235
|
approval: toApprovalPolicy(config.approval),
|
|
@@ -251,4 +251,4 @@ export function approvalMatches(gate, urls) {
|
|
|
251
251
|
const list = toUrlAllowList(policy.patterns);
|
|
252
252
|
return urls.some((url) => list.allows(url));
|
|
253
253
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBa0IsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCckYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUU1QywrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFLdkU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUU1RSw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRXhDLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUM7QUFFL0MsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQStHekMsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFnQjtJQUNuRCxJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRTtRQUNWLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxF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QUFJO1FBQ1gsU0FBUztRQUNULFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFtQyxFQUNuQyxJQUF1QjtJQUV2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgd2ViLXNlYXJjaCBwbHVnaW46IHRoZSB0eXBlZFxuICoge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZ30gKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlXG4gKiBKU09OIFNjaGVtYSB0aGUgbWFuaWZlc3QgcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlV2ViU2VhcmNoQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZ30gdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLlxuICpcbiAqIGB3ZWJfc2VhcmNoYCBydW5zIG9uIHRoZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbFxuICogKHNlZSBgcHJvdmlkZXIudHNgIC8gYHNlYXJjaC50c2ApLCBzbyB0aGUga2V5IGtub2IgaXMgd2hpY2ggd2ViLXNlYXJjaC1cbiAqIGNhcGFibGUgbW9kZWwgdG8gdXNlLiBJdCByZXNvbHZlcyBpbmRlcGVuZGVudGx5IG9mIHRoZSBjYWxsaW5nIGFnZW50J3MgY2hhdFxuICogbW9kZWw6IGBtb2RlbGAgKGEgbmFtZSwgbG9vc2UgbmFtZSwgb3IgY2FwYWJpbGl0eSBjbGFzcykgaXMgZnV6enktbWF0Y2hlZFxuICogYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZSwgYW5kIHdoZW4gbm90aGluZyBpcyBwaW5uZWQgdGhlXG4gKiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLm1vZGVsRmFsbGJhY2tzfSBvcmRlciAoR2VtaW5pLCB0aGVuIEdQVCwgdGhlbiBhXG4gKiByZXBvIGZsb29yKSBwaWNrcyB0aGUgZmlyc3Qgd2ViLXNlYXJjaC1jYXBhYmxlIGVuZHBvaW50IHRoYXQgZXhpc3RzLlxuICpcbiAqIFdoaWNoIGVuZHBvaW50IGlkIGlzIHVzZWQgZm9sbG93cyB0aGUgc3RhbmRhcmQgcHJlY2VkZW5jZSAtIGV4cGxpY2l0IHBsdWdpblxuICogY29uZmlnLCB0aGVuIGVudmlyb25tZW50LCB0aGVuIGEgZGVmYXVsdCAtIHdpdGggdHdvIGVudmlyb25tZW50IHNvdXJjZXM6XG4gKlxuICogICAxLiBgbW9kZWxgIGluIHBsdWdpbiBjb25maWc7XG4gKiAgIDIuIGBXRUJfU0VBUkNIX01PREVMYCwgdGhlIGRlZGljYXRlZCBvdmVycmlkZSwgc28gYSBkZXBsb3ltZW50IGNhbiBwb2ludFxuICogICAgICB3ZWIgc2VhcmNoIGF0IGEgZGlmZmVyZW50IGVuZHBvaW50IHRoYW4gdGhlIGFnZW50J3MgY2hhdCBtb2RlbDtcbiAqICAgMy4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCwgQXBwS2l0J3Mgc3RhbmRhcmQgbmFtZSBmb3IgYVxuICogICAgICBNb2RlbCBTZXJ2aW5nIGJpbmRpbmcsIGhvbm9yZWQgc28gdGhlIHJlc291cmNlIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdFxuICogICAgICB3aXJlcyB0aGlzIHBsdWdpbiB1cCBsaWtlIGFueSBvdGhlci4gQmVjYXVzZSB0aGF0IGJpbmRpbmcgaXMgc2hhcmVkXG4gKiAgICAgIHdpdGggd2hhdGV2ZXIgZWxzZSB0aGUgYXBwIHNlcnZlcywgaXQgaXMgdHJlYXRlZCBhcyBhIHByZWZlcmVuY2U6IGFuXG4gKiAgICAgIGVuZHBvaW50IHRoYXQgY2Fubm90IHJ1biB0aGUgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCBpcyBza2lwcGVkIGluXG4gKiAgICAgIGZhdm9yIG9mIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWcubW9kZWxGYWxsYmFja3N9IHJhdGhlciB0aGFuXG4gKiAgICAgIGZhaWxpbmcgdGhlIGNhbGwuIEEgcGluIGZyb20gKDEpIG9yICgyKSBpcyBleHBsaWNpdCBhbmQgRE9FUyBmYWlsO1xuICogICA0LiBvdGhlcndpc2UgdGhlIGZhbGxiYWNrIG9yZGVyLCByZXNvbHZlZCBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZS5cbiAqXG4gKiBXaGljaCBtb2RlbCB3aW5zIGlzIGRlY2lkZWQgbGF6aWx5LCBhdCBjYWxsIHRpbWUsIGFnYWluc3QgdGhlIGxpdmVcbiAqIGNhdGFsb2d1ZS4gUmVzb2x1dGlvbiBoZXJlIGlzIGVhZ2VyIGFib3V0IGV2ZXJ5dGhpbmcgZWxzZSBhbmQgZmFpbHMgbG91ZGx5XG4gKiBvbiBhIGNvbnRyYWRpY3Rpb246IGFuIHVucGFyc2VhYmxlIGBXRUJfU0VBUkNIX1RPT0xTYCwgYW4gdW5rbm93blxuICoge0BsaW5rIFVybFBvbGljeU1vZGV9LCBvciBhIFVSTCBwb2xpY3kgdGhhdCBkaXNhZ3JlZXMgd2l0aCB0aGUgYWxsb3ctbGlzdCBpdFxuICogd2FzIGdpdmVuLlxuICpcbiAqIEVudiBmYWxsYmFja3M6IGBXRUJfU0VBUkNIX01PREVMYCwgYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCxcbiAqIGBXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU2AsIGBXRUJfU0VBUkNIX1RPT0xTYCAoSlNPTiksXG4gKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgYFdFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTYCxcbiAqIGBXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNgLCBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCxcbiAqIGBXRUJfU0VBUkNIX1RJTUVPVVRfTVNgLCBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0tgLCBgV0VCX1NFQVJDSF9GVVpaWWAsXG4gKiBgV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTERgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNvbmZpZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbW9kZWxDYXRhbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGpzb24sIG9iamVjdCwgdHlwZSBPbmVPck1hbnksIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IHBhcnNlQWxsb3dlZFVybHMsIHRvVXJsQWxsb3dMaXN0LCB0eXBlIFVybEFsbG93TGlzdCB9IGZyb20gXCIuL2FsbG93bGlzdC50c1wiO1xuXG4vKipcbiAqIEEgVVJMLXBhdHRlcm4gZ2F0ZSBmb3IgcGVyLXRvb2wgYXBwcm92YWwuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsOyBhXG4gKiBwYXR0ZXJuIChvciBsaXN0IG9mIHBhdHRlcm5zLCBpbiB0aGUge0BsaW5rIE9uZU9yTWFueX0gc2hhcGUgdXNlZCBhY3Jvc3NcbiAqIHRoZSByZXBvKSBnYXRlcyBvbmx5IGNhbGxzIHdob3NlIFVSTCBtYXRjaGVzLiBQYXR0ZXJucyB1c2UgdGhlIHNhbWUgZ2xvYlxuICogc3ludGF4IGFzIHRoZSBhbGxvdy1saXN0IChzZWUgYGFsbG93bGlzdC50c2ApLiBPbWl0IC8gYGZhbHNlYCBmb3Igbm9cbiAqIGFwcHJvdmFsLiBOb3JtYWxpemVkIHRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0gYmVmb3JlIHVzZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxHYXRlID0gYm9vbGVhbiB8IE9uZU9yTWFueTxzdHJpbmc+IHwgc3RyaW5nO1xuXG4vKipcbiAqIFRoZSBub3JtYWxpemVkIGZvcm0gb2YgYW4ge0BsaW5rIEFwcHJvdmFsR2F0ZX06IHdoaWNoIGNhbGxzIHBhdXNlIGZvciBhXG4gKiBodW1hbi4gYFwibm9uZVwiYCBydW5zIGV2ZXJ5IGNhbGwgc3RyYWlnaHQgdGhyb3VnaCwgYFwiYWx3YXlzXCJgIGdhdGVzIGFsbCBvZlxuICogdGhlbSwgYW5kIGBcInVybHNcImAgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcyBvbmUgb2YgYHBhdHRlcm5zYC5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxQb2xpY3kgPVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJub25lXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJhbHdheXNcIiB9XG4gIHwgeyByZWFkb25seSBtb2RlOiBcInVybHNcIjsgcmVhZG9ubHkgcGF0dGVybnM6IHJlYWRvbmx5IHN0cmluZ1tdIH07XG5cbi8qKlxuICogV2hpY2ggVVJMcyB0aGUgdG9vbHMgbWF5IHJlYWNoLiBgXCJhbGxvd2xpc3RcImAgcGVybWl0cyBvbmx5IHRoZSBjb25maWd1cmVkXG4gKiBlbnRyaWVzOyBgXCJ1bnJlc3RyaWN0ZWRcImAgbmFtZXMgdGhlIHBlcm1pc3NpdmUgbW9kZSBleHBsaWNpdGx5LCBzbyBhblxuICogdW5yZXN0cmljdGVkIGRlcGxveW1lbnQgaXMgYSBzdGF0ZWQgY2hvaWNlIHZpc2libGUgaW4gdGhlIGJvb3QgbG9nIHJhdGhlclxuICogdGhhbiBhbiBlbXB0eSBsaXN0IG5vYm9keSBub3RpY2VkLlxuICovXG5leHBvcnQgdHlwZSBVcmxQb2xpY3lNb2RlID0gXCJ1bnJlc3RyaWN0ZWRcIiB8IFwiYWxsb3dsaXN0XCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSB3ZWItc2VhcmNoIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX0VOViA9IFwiV0VCX1NFQVJDSF9NT0RFTFwiO1xuXG4vKiogQXBwS2l0J3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQgbmFtZSBmb3IgYSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IGJpbmRpbmcuICovXG5leHBvcnQgY29uc3QgU0VSVklOR19FTkRQT0lOVF9FTlYgPSBcIkRBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FXCI7XG5cbi8qKiBXaGVyZSB0aGUgcGlubmVkIHdlYi1zZWFyY2ggZW5kcG9pbnQgaWQgY2FtZSBmcm9tLCBvciBgXCJub25lXCJgIHdoZW4gdW5waW5uZWQuICovXG5leHBvcnQgdHlwZSBNb2RlbFNvdXJjZSA9IFwiY29uZmlnXCIgfCB0eXBlb2YgTU9ERUxfRU5WIHwgdHlwZW9mIFNFUlZJTkdfRU5EUE9JTlRfRU5WIHwgXCJub25lXCI7XG5cbi8qKlxuICogRGVmYXVsdCB3ZWItc2VhcmNoIGZhbWlseSBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEVhY2ggcXVlcnkgc2VsZWN0cyB0aGUgaGlnaGVzdC1yYW5rZWQgZGVwbG95ZWQgbW9kZWwgaW4gdGhhdCBmYW1pbHlcbiAqIGFmdGVyIG1vZGVsLW93bmVkIHdlYi1zZWFyY2ggY2FwYWJpbGl0eSBmaWx0ZXJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX0ZBTExCQUNLUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXCJnZW1pbmlcIiwgXCJncHRcIl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBHUFQgcHJlZmVyZW5jZSB1c2VkIHdoZW4gbm8gY2FwYWJsZSBHZW1pbmkgaXMgYXZhaWxhYmxlLiBBY2NlcHRzIGFcbiAgICogRGF0YWJyaWNrcyBzZXJ2aW5nIGVuZHBvaW50IG5hbWUgb3IgbG9vc2UgZmFtaWx5IHNlYXJjaCBhbmQgZmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9NT0RFTGAsIHRoZW4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYC5cbiAgICovXG4gIG1vZGVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCB3ZWItc2VhcmNoIG1vZGVsIGNhbmRpZGF0ZXMgdHJpZWQgd2hlbiB7QGxpbmsgbW9kZWx9IGlzXG4gICAqIHVuc2V0LCBlYWNoIGZ1enp5LW1hdGNoZWQgYW5kIGNoZWNrZWQgZm9yIHdlYi1zZWFyY2ggc3VwcG9ydC4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NgIChjb21tYS9zcGFjZS1zZXBhcmF0ZWQpLCB0aGVuXG4gICAqIHtAbGluayBERUZBVUxUX01PREVMX0ZBTExCQUNLU30gKEdlbWluaSwgdGhlbiBHUFQpLlxuICAgKi9cbiAgbW9kZWxGYWxsYmFja3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgcmVxdWVzdGAgZnJhZ21lbnRcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMuICovXG4gIHdlYlNlYXJjaFRvb2xzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFdoZXRoZXIgdG8gZnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMuICovXG4gIGZ1enp5OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuICovXG4gIGZ1enp5VGhyZXNob2xkOiBudW1iZXI7XG4gIG1heENpdGF0aW9uczogbnVtYmVyO1xuICBmZXRjaE1heExlbmd0aDogbnVtYmVyO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gc2NyYXBlLWZhbGxiYWNrIHdoZW4gbm8gbmF0aXZlIHdlYi1zZWFyY2ggbW9kZWwgaXMgZGVwbG95ZWQuICovXG4gIHNjcmFwZUZhbGxiYWNrOiBib29sZWFuO1xuICAvKiogVGhlIG5hbWVkIFVSTCBwb2xpY3kgaW4gZm9yY2UuICovXG4gIHVybFBvbGljeTogVXJsUG9saWN5TW9kZTtcbiAgLyoqIENvbXBpbGVkIGFsbG93LWxpc3QgKHBlcm1pdC1hbGwgdW5kZXIgdGhlIGB1bnJlc3RyaWN0ZWRgIHBvbGljeSkuICovXG4gIGFsbG93TGlzdDogVXJsQWxsb3dMaXN0O1xuICAvKiogRGVmYXVsdCBwZXItdG9vbCBhcHByb3ZhbCBwb2xpY3kuICovXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFBvbGljeTtcbn1cblxuLyoqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAuICovXG5leHBvcnQgY29uc3QgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BOiBKU09OU2NoZW1hNyA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgcHJvcGVydGllczoge1xuICAgIG1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGVmYXVsdCB3ZWItc2VhcmNoIG1vZGVsIChlbmRwb2ludCBuYW1lLCBsb29zZSBuYW1lLCBvciBjbGFzcykuIEZ1enp5LW1hdGNoZWQuIEVudjogV0VCX1NFQVJDSF9NT0RFTCwgdGhlbiBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRS5cIixcbiAgICB9LFxuICAgIG1vZGVsRmFsbGJhY2tzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJPcmRlcmVkIHdlYi1zZWFyY2ggbW9kZWwgY2FuZGlkYXRlcyB3aGVuIGBtb2RlbGAgaXMgdW5zZXQgKEdlbWluaSwgdGhlbiBHUFQpLiBFbnY6IFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTLlwiLFxuICAgIH0sXG4gICAgd2ViU2VhcmNoVG9vbHM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1Byb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cyAob3BlbmFpIC0+IHtcInRvb2xzXCI6W3tcInR5cGVcIjpcIndlYl9zZWFyY2hcIn1dfSwgZ2VtaW5pIC0+IHtcImdvb2dsZV9zZWFyY2hcIjp7fX0pLiBFbnY6IFdFQl9TRUFSQ0hfVE9PTFMgKEpTT04pLicsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX0ZVWlpZKS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBhIGZ1enp5IG1vZGVsIG1hdGNoIGlzIGFjY2VwdGVkIChlbnY6IFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEKS5cIixcbiAgICB9LFxuICAgIG1heENpdGF0aW9uczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIGNpdGF0aW9ucyByZXR1cm5lZCAoZW52OiBXRUJfU0VBUkNIX01BWF9DSVRBVElPTlMpLlwiLFxuICAgIH0sXG4gICAgZmV0Y2hNYXhMZW5ndGg6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJIYXJkIGNhcCBvbiB3ZWJfZmV0Y2ggY29udGVudCBsZW5ndGggKGVudjogV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIKS5cIixcbiAgICB9LFxuICAgIHRpbWVvdXRNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCBpbiBtcyAoZW52OiBXRUJfU0VBUkNIX1RJTUVPVVRfTVMpLlwiLFxuICAgIH0sXG4gICAgc2NyYXBlRmFsbGJhY2s6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmFsbCBiYWNrIHRvIGEgRHVja0R1Y2tHbyBzY3JhcGUgd2hlbiBubyB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgaXMgZGVwbG95ZWQuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDSykuXCIsXG4gICAgfSxcbiAgICB1cmxQb2xpY3k6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJ1bnJlc3RyaWN0ZWRcIiwgXCJhbGxvd2xpc3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJXaGljaCBVUkxzIHRoZSB0b29scyBtYXkgcmVhY2guIERlZmF1bHRzIHRvIGFsbG93bGlzdCB3aGVuIGFsbG93ZWRVcmxzIGhhcyBlbnRyaWVzLCBlbHNlIHVucmVzdHJpY3RlZCAoZW52OiBXRUJfU0VBUkNIX1VSTF9QT0xJQ1kpLlwiLFxuICAgIH0sXG4gICAgYWxsb3dlZFVybHM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVVJMIGFsbG93LWxpc3Qgb2YgZ2xvYnMgLyBiYXJlIGhvc3RzIChlLmcuIFwiKi5kYXRhYnJpY2tzLmNvbVwiLCBcImRvY3MuZXhhbXBsZS5jb21cIikuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gV0VCX1NFQVJDSF9BTExPV0VEX1VSTFMuIEVtcHR5ID0gdW5yZXN0cmljdGVkLicsXG4gICAgfSxcbiAgICBhcHByb3ZhbDoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBcHByb3ZhbCBnYXRlIGZvciBib3RoIHRvb2xzOiB0cnVlIGdhdGVzIGV2ZXJ5IGNhbGwsIGEgZ2xvYiAob3IgbGlzdCBvZiBnbG9icykgZ2F0ZXMgb25seSBtYXRjaGluZyBVUkxzLCBvciBzdGF0ZSB0aGUgbW9kZSBkaXJlY3RseSBhcyB7XCJtb2RlXCI6XCJub25lXCJ8XCJhbHdheXNcInxcInVybHNcIn0uIERlZmF1bHQgbm9uZS4nLFxuICAgICAgb25lT2Y6IFtcbiAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtb2RlOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcIm5vbmVcIiwgXCJhbHdheXNcIiwgXCJ1cmxzXCJdIH0sXG4gICAgICAgICAgICBwYXR0ZXJuczogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcIm1vZGVcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBgV0VCX1NFQVJDSF9UT09MU2AgZW52IHZhciAoSlNPTiBvYmplY3QpLCBlbHNlIGB7fWAuIEEgdmFsdWUgdGhhdFxuICogaXMgc2V0IGJ1dCBub3QgYSBKU09OIG9iamVjdCBpcyBhIGRlcGxveW1lbnQgbWlzdGFrZSB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICogc2lsZW50bHkgbGVhdmUgdGhlIGJ1aWx0LWluIHRvb2wgc3BlY3MgaW4gcGxhY2UsIHNvIGl0IHRocm93cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VUb29sc0VudigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHJhdyA9IGNvbmZpZ1V0aWxzLnRleHQoXCJXRUJfU0VBUkNIX1RPT0xTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge307XG4gIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2VSZWNvcmQocmF3KTtcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgXCJXRUJfU0VBUkNIX1RPT0xTIG11c3QgYmUgYSBKU09OIG9iamVjdCBtYXBwaW5nIGEgcHJvdmlkZXIgZmFtaWx5IHRvIGl0cyByZXF1ZXN0IGZyYWdtZW50XCIsXG4gICAgICB7IGNvbnRleHQ6IHsgZW52VmFyOiBcIldFQl9TRUFSQ0hfVE9PTFNcIiB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG4vKiogUmVhZCB0aGUgcGlubmVkIGVuZHBvaW50IGlkIGFuZCByZWNvcmQgd2hpY2ggc291cmNlIHN1cHBsaWVkIGl0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsUGluKGNvbmZpZzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnKTogeyBtb2RlbD86IHN0cmluZzsgc291cmNlOiBNb2RlbFNvdXJjZSB9IHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29uZmlnLm1vZGVsKTtcbiAgaWYgKGZyb21Db25maWcgIT09IG51bGwpIHJldHVybiB7IG1vZGVsOiBmcm9tQ29uZmlnLCBzb3VyY2U6IFwiY29uZmlnXCIgfTtcbiAgY29uc3QgZnJvbU1vZGVsRW52ID0gY29uZmlnVXRpbHMudGV4dChNT0RFTF9FTlYsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKGZyb21Nb2RlbEVudiAhPT0gdW5kZWZpbmVkKSByZXR1cm4geyBtb2RlbDogZnJvbU1vZGVsRW52LCBzb3VyY2U6IE1PREVMX0VOViB9O1xuICBjb25zdCBmcm9tUmVzb3VyY2VFbnYgPSBjb25maWdVdGlscy50ZXh0KFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBjb25maWdVdGlscy5FTlZfT05MWSk7XG4gIGlmIChmcm9tUmVzb3VyY2VFbnYgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7IG1vZGVsOiBmcm9tUmVzb3VyY2VFbnYsIHNvdXJjZTogU0VSVklOR19FTkRQT0lOVF9FTlYgfTtcbiAgfVxuICByZXR1cm4geyBzb3VyY2U6IFwibm9uZVwiIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbmFtZWQge0BsaW5rIFVybFBvbGljeU1vZGV9LCBmYWlsaW5nIG9uIGEgc3RhdGVkIG1vZGUgdGhhdFxuICogY29udHJhZGljdHMgdGhlIGFsbG93LWxpc3QgZW50cmllcyBpdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVVcmxQb2xpY3koXG4gIGNvbmZpZ3VyZWQ6IFVybFBvbGljeU1vZGUgfCB1bmRlZmluZWQsXG4gIHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFVybFBvbGljeU1vZGUge1xuICBjb25zdCByYXcgPSBjb25maWd1cmVkID8/IGNvbmZpZ1V0aWxzLnRleHQoXCJXRUJfU0VBUkNIX1VSTF9QT0xJQ1lcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8gXCJhbGxvd2xpc3RcIiA6IFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgIT09IFwiYWxsb3dsaXN0XCIgJiYgcmF3ICE9PSBcInVucmVzdHJpY3RlZFwiKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgbXVzdCBiZSBcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCIgKGVudjogV0VCX1NFQVJDSF9VUkxfUE9MSUNZKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwidXJsUG9saWN5XCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX1VSTF9QT0xJQ1lcIiB9IH0sXG4gICAgKTtcbiAgfVxuICBpZiAocmF3ID09PSBcImFsbG93bGlzdFwiICYmIHBhdHRlcm5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwiYWxsb3dsaXN0XCIgbmVlZHMgYXQgbGVhc3Qgb25lIGVudHJ5IGluIGFsbG93ZWRVcmxzIChlbnY6IFdFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIiAmJiBwYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgXCJ1bnJlc3RyaWN0ZWRcIiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbGxvd2VkVXJscyBlbnRyaWVzOyBkcm9wIHRoZSBlbnRyaWVzIG9yIHNldCB1cmxQb2xpY3kgdG8gXCJhbGxvd2xpc3RcIicsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYW55IGFjY2VwdGVkIGFwcHJvdmFsIHNwZWxsaW5nIGludG8gYW4ge0BsaW5rIEFwcHJvdmFsUG9saWN5fS5cbiAqIEEgcGF0dGVybiBnYXRlIHdpdGggbm8gdXNhYmxlIHBhdHRlcm5zIGNvbGxhcHNlcyB0byBgXCJub25lXCJgIHJhdGhlciB0aGFuXG4gKiBnYXRpbmcgZXZlcnl0aGluZywgc28gYSBibGFuayBlbnYgdmFyIGNhbiBuZXZlciB3ZWRnZSB0aGUgdG9vbHMgYmVoaW5kIGFuXG4gKiBhcHByb3ZhbCBub2JvZHkgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXBwcm92YWxQb2xpY3koZ2F0ZTogQXBwcm92YWxHYXRlIHwgQXBwcm92YWxQb2xpY3kgfCB1bmRlZmluZWQpOiBBcHByb3ZhbFBvbGljeSB7XG4gIGlmIChnYXRlID09PSB1bmRlZmluZWQgfHwgZ2F0ZSA9PT0gZmFsc2UpIHJldHVybiB7IG1vZGU6IFwibm9uZVwiIH07XG4gIGlmIChnYXRlID09PSB0cnVlKSByZXR1cm4geyBtb2RlOiBcImFsd2F5c1wiIH07XG4gIGlmIChvYmplY3QuaXNSZWNvcmQoZ2F0ZSkgJiYgXCJtb2RlXCIgaW4gZ2F0ZSkge1xuICAgIGlmIChnYXRlLm1vZGUgPT09IFwidXJsc1wiKSB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHMoWy4uLmdhdGUucGF0dGVybnNdKTtcbiAgICAgIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbiAgICB9XG4gICAgaWYgKGdhdGUubW9kZSA9PT0gXCJhbHdheXNcIiB8fCBnYXRlLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4geyBtb2RlOiBnYXRlLm1vZGUgfTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdhcHByb3ZhbCBtb2RlIG11c3QgYmUgXCJub25lXCIsIFwiYWx3YXlzXCIgb3IgXCJ1cmxzXCInLCB7XG4gICAgICBjb250ZXh0OiB7IGZpZWxkOiBcImFwcHJvdmFsXCIgfSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHModHlwZW9mIGdhdGUgPT09IFwic3RyaW5nXCIgPyBnYXRlIDogWy4uLmdhdGVdKTtcbiAgcmV0dXJuIHBhdHRlcm5zLmxlbmd0aCA+IDAgPyB7IG1vZGU6IFwidXJsc1wiLCBwYXR0ZXJucyB9IDogeyBtb2RlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9LiBXaGljaCBtb2RlbCBpcyB1c2VkIHN0YXlzIGxhenkgLSBpdCBpc1xuICogcGlja2VkIGF0IGNhbGwgdGltZSBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZSAtIGJ1dCBldmVyeXRoaW5nIGVsc2UgaXNcbiAqIHNldHRsZWQgaGVyZSwgYW5kIGEgY29udHJhZGljdGlvbiAodW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhblxuICogdW5rbm93biBVUkwgcG9saWN5LCBhIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIGl0cyBhbGxvdy1saXN0KSB0aHJvd3MgYVxuICoge0BsaW5rIENvbmZpZ3VyYXRpb25FcnJvcn0gbmFtaW5nIHRoZSBmaWVsZCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyhcbiAgY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcgPSB7fSxcbik6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFxuICAgIGNvbmZpZy5hbGxvd2VkVXJscyA/PyBjb25maWdVdGlscy50ZXh0KFwiV0VCX1NFQVJDSF9BTExPV0VEX1VSTFNcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICApO1xuICBjb25zdCB1cmxQb2xpY3kgPSByZXNvbHZlVXJsUG9saWN5KGNvbmZpZy51cmxQb2xpY3ksIHBhdHRlcm5zKTtcbiAgY29uc3QgeyBtb2RlbCwgc291cmNlIH0gPSByZXNvbHZlTW9kZWxQaW4oY29uZmlnKTtcbiAgY29uc3QgZmFsbGJhY2tzID0gY29uZmlnVXRpbHMubGlzdChcbiAgICBjb25maWcubW9kZWxGYWxsYmFja3MsXG4gICAgXCJXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU1wiLFxuICAgIHVuZGVmaW5lZCxcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi4obW9kZWwgPyB7IG1vZGVsIH0gOiB7fSksXG4gICAgbW9kZWxTb3VyY2U6IHNvdXJjZSxcbiAgICBtb2RlbEZhbGxiYWNrczogZmFsbGJhY2tzLmxlbmd0aCA+IDAgPyBmYWxsYmFja3MgOiBERUZBVUxUX01PREVMX0ZBTExCQUNLUyxcbiAgICB3ZWJTZWFyY2hUb29sczogeyAuLi5wYXJzZVRvb2xzRW52KCksIC4uLihjb25maWcud2ViU2VhcmNoVG9vbHMgPz8ge30pIH0sXG4gICAgZnV6enk6XG4gICAgICBjb25maWdVdGlscy5ib29sZWFuKGNvbmZpZy5tb2RlbEZ1enp5TWF0Y2gsIFwiV0VCX1NFQVJDSF9GVVpaWVwiLCBjb25maWdVdGlscy5FTlZfT05MWSkgPz8gdHJ1ZSxcbiAgICBmdXp6eVRocmVzaG9sZDogY29uZmlnVXRpbHMucG9zaXRpdmVOdW1iZXIoXG4gICAgICBjb25maWcubW9kZWxGdXp6eVRocmVzaG9sZCxcbiAgICAgIFwiV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTERcIixcbiAgICAgIG1vZGVsQ2F0YWxvZy5ERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgbWF4Q2l0YXRpb25zOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5tYXhDaXRhdGlvbnMsXG4gICAgICBcIldFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OU1wiLFxuICAgICAgREVGQVVMVF9NQVhfQ0lUQVRJT05TLFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICBmZXRjaE1heExlbmd0aDogY29uZmlnVXRpbHMucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcuZmV0Y2hNYXhMZW5ndGgsXG4gICAgICBcIldFQl9TRUFSQ0hfRkVUQ0hfTUFYX0xFTkdUSFwiLFxuICAgICAgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RILFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICB0aW1lb3V0TXM6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnRpbWVvdXRNcyxcbiAgICAgIFwiV0VCX1NFQVJDSF9USU1FT1VUX01TXCIsXG4gICAgICBERUZBVUxUX1RJTUVPVVRfTVMsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIHNjcmFwZUZhbGxiYWNrOlxuICAgICAgY29uZmlnVXRpbHMuYm9vbGVhbihcbiAgICAgICAgY29uZmlnLnNjcmFwZUZhbGxiYWNrLFxuICAgICAgICBcIldFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLXCIsXG4gICAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICAgKSA/PyB0cnVlLFxuICAgIHVybFBvbGljeSxcbiAgICBhbGxvd0xpc3Q6IHRvVXJsQWxsb3dMaXN0KHVybFBvbGljeSA9PT0gXCJhbGxvd2xpc3RcIiA/IHBhdHRlcm5zIDogW10pLFxuICAgIGFwcHJvdmFsOiB0b0FwcHJvdmFsUG9saWN5KGNvbmZpZy5hcHByb3ZhbCksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhcHByb3ZhbCBnYXRlIGFnYWluc3QgYSBzZXQgb2YgY2FuZGlkYXRlIFVSTHMgaW50byBhIGNvbmNyZXRlXG4gKiBib29sZWFuOiBgXCJub25lXCJgIC8gYFwiYWx3YXlzXCJgIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaDsgYSBgXCJ1cmxzXCJgIHBvbGljeVxuICogZ2F0ZXMgd2hlbiBBTlkgY2FuZGlkYXRlIG1hdGNoZXMuIEVtcHR5IGNhbmRpZGF0ZXMgd2l0aCBhIHBhdHRlcm4gZ2F0ZVxuICogbmV2ZXIgbWF0Y2ggKG5vdGhpbmcgdG8gYXBwcm92ZSkuIFJldXNlcyB0aGUgYWxsb3ctbGlzdCBtYXRjaGVyIHNvIGFwcHJvdmFsXG4gKiBnbG9icyByZWFkIGV4YWN0bHkgbGlrZSBhbGxvdy1saXN0IGdsb2JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwcm92YWxNYXRjaGVzKFxuICBnYXRlOiBBcHByb3ZhbEdhdGUgfCBBcHByb3ZhbFBvbGljeSxcbiAgdXJsczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcG9saWN5ID0gdG9BcHByb3ZhbFBvbGljeShnYXRlKTtcbiAgaWYgKHBvbGljeS5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAocG9saWN5Lm1vZGUgPT09IFwiYWx3YXlzXCIpIHJldHVybiB0cnVlO1xuICBjb25zdCBsaXN0ID0gdG9VcmxBbGxvd0xpc3QocG9saWN5LnBhdHRlcm5zKTtcbiAgcmV0dXJuIHVybHMuc29tZSgodXJsKSA9PiBsaXN0LmFsbG93cyh1cmwpKTtcbn1cbiJdfQ==
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFrQixXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUE2QnJGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUM7QUFFNUMsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtDQUFrQyxDQUFDO0FBS3ZFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFNUUsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUV4QyxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDO0FBRS9DLG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUErR3pDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBZ0I7SUFDbkQsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCw4SUFBOEk7U0FDako7UUFDRCxjQUFjLEVBQUU7WUFDZCxJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDekIsV0FBVyxFQUNULGdIQUFnSDtTQUNuSDtRQUNELGNBQWMsRUFBRTtZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULDBMQUEwTDtTQUM3TDtRQUNELGVBQWUsRUFBRTtZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULGlHQUFpRztTQUNwRztRQUNELG1CQUFtQixFQUFFO1lBQ25CLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULHdHQUF3RztTQUMzRztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLGlFQUFpRTtTQUMvRTtRQUNELGNBQWMsRUFBRTtZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDBFQUEwRTtTQUN4RjtRQUNELFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLGlFQUFpRTtTQUMvRTtRQUNELGNBQWMsRUFBRTtZQUNkLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULGdJQUFnSTtTQUNuSTtRQUNELFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztZQUNuQyxXQUFXLEVBQ1QscUlBQXFJO1NBQ3hJO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3pCLFdBQVcsRUFDVCwrTEFBK0w7U0FDbE07UUFDRCxRQUFRLEVBQUU7WUFDUixXQUFXLEVBQ1QsdUxBQXVMO1lBQ3pMLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ25CLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDbEIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDNUM7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDMUQsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7cUJBQ3ZEO29CQUNELFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDbkI7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILFNBQVMsYUFBYTtJQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksa0JBQWtCLENBQzFCLDBGQUEwRixFQUMxRixFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQzVDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELHVFQUF1RTtBQUN2RSxTQUFTLGVBQWUsQ0FBQyxNQUE2QjtJQUNwRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLFlBQVksS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBcUMsRUFDckMsUUFBMkI7SUFFM0IsTUFBTSxHQUFHLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRSxJQUFJLEdBQUcsS0FBSyxTQUFTO1FBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDakYsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksa0JBQWtCLENBQzFCLDhFQUE4RSxFQUM5RSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEVBQUUsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksa0JBQWtCLENBQzFCLDhGQUE4RixFQUM5RixFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLEVBQUUsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEdBQUcsS0FBSyxjQUFjLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksa0JBQWtCLENBQzFCLHdIQUF3SCxFQUN4SCxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLEVBQUUsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUErQztJQUM5RSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUs7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2xFLElBQUksSUFBSSxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzdDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDN0UsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0UsTUFBTSxJQUFJLGtCQUFrQixDQUFDLGtEQUFrRCxFQUFFO1lBQy9FLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdFLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxTQUFnQyxFQUFFO0lBRWxDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUMvQixNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FDaEUsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FDaEMsTUFBTSxDQUFDLGNBQWMsRUFDckIsNEJBQTRCLEVBQzVCLFNBQVMsRUFDVCxRQUFRLENBQ1QsQ0FBQztJQUNGLE9BQU87UUFDTCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsV0FBVyxFQUFFLE1BQU07UUFDbkIsY0FBYyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUMxRSxjQUFjLEVBQUUsRUFBRSxHQUFHLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ3hFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJO1FBQzVFLGNBQWMsRUFBRSxjQUFjLENBQzVCLE1BQU0sQ0FBQyxtQkFBbUIsRUFDMUIsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2QixRQUFRLENBQ1Q7UUFDRCxZQUFZLEVBQUUsV0FBVyxDQUN2QixNQUFNLENBQUMsWUFBWSxFQUNuQiwwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLFFBQVEsQ0FDVDtRQUNELGNBQWMsRUFBRSxXQUFXLENBQ3pCLE1BQU0sQ0FBQyxjQUFjLEVBQ3JCLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsUUFBUSxDQUNUO1FBQ0QsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztRQUMvRixjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSTtRQUM5RixTQUFTO1FBQ1QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQW1DLEVBQ25DLElBQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB3ZWItc2VhcmNoIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcpLCB0aGVcbiAqIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIGl0LCBhbmQge0BsaW5rIHJlc29sdmVXZWJTZWFyY2hDb25maWd9XG4gKiB3aGljaCBsYXllcnMgdGhhdCBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnfSB0aGUgcnVudGltZSArIHRvb2xzIHJlYWQuXG4gKlxuICogYHdlYl9zZWFyY2hgIHJ1bnMgb24gdGhlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sXG4gKiAoc2VlIGBwcm92aWRlci50c2AgLyBgc2VhcmNoLnRzYCksIHNvIHRoZSBrZXkga25vYiBpcyB3aGljaCB3ZWItc2VhcmNoLVxuICogY2FwYWJsZSBtb2RlbCB0byB1c2UuIEl0IHJlc29sdmVzIGluZGVwZW5kZW50bHkgb2YgdGhlIGNhbGxpbmcgYWdlbnQncyBjaGF0XG4gKiBtb2RlbDogYG1vZGVsYCAoYSBuYW1lLCBsb29zZSBuYW1lLCBvciBjYXBhYmlsaXR5IGNsYXNzKSBpcyBmdXp6eS1tYXRjaGVkXG4gKiBhZ2FpbnN0IHRoZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlLCBhbmQgd2hlbiBub3RoaW5nIGlzIHBpbm5lZCB0aGVcbiAqIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWcubW9kZWxGYWxsYmFja3N9IG9yZGVyIChHZW1pbmksIHRoZW4gR1BULCB0aGVuIGFcbiAqIHJlcG8gZmxvb3IpIHBpY2tzIHRoZSBmaXJzdCB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnQgdGhhdCBleGlzdHMuXG4gKlxuICogV2hpY2ggZW5kcG9pbnQgaWQgaXMgdXNlZCBmb2xsb3dzIHRoZSBzdGFuZGFyZCBwcmVjZWRlbmNlIC0gZXhwbGljaXQgcGx1Z2luXG4gKiBjb25maWcsIHRoZW4gZW52aXJvbm1lbnQsIHRoZW4gYSBkZWZhdWx0IC0gd2l0aCB0d28gZW52aXJvbm1lbnQgc291cmNlczpcbiAqXG4gKiAgIDEuIGBtb2RlbGAgaW4gcGx1Z2luIGNvbmZpZztcbiAqICAgMi4gYFdFQl9TRUFSQ0hfTU9ERUxgLCB0aGUgZGVkaWNhdGVkIG92ZXJyaWRlLCBzbyBhIGRlcGxveW1lbnQgY2FuIHBvaW50XG4gKiAgICAgIHdlYiBzZWFyY2ggYXQgYSBkaWZmZXJlbnQgZW5kcG9pbnQgdGhhbiB0aGUgYWdlbnQncyBjaGF0IG1vZGVsO1xuICogICAzLiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLCBBcHBLaXQncyBzdGFuZGFyZCBuYW1lIGZvciBhXG4gKiAgICAgIE1vZGVsIFNlcnZpbmcgYmluZGluZywgaG9ub3JlZCBzbyB0aGUgcmVzb3VyY2UgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiAgICAgIHdpcmVzIHRoaXMgcGx1Z2luIHVwIGxpa2UgYW55IG90aGVyLiBCZWNhdXNlIHRoYXQgYmluZGluZyBpcyBzaGFyZWRcbiAqICAgICAgd2l0aCB3aGF0ZXZlciBlbHNlIHRoZSBhcHAgc2VydmVzLCBpdCBpcyB0cmVhdGVkIGFzIGEgcHJlZmVyZW5jZTogYW5cbiAqICAgICAgZW5kcG9pbnQgdGhhdCBjYW5ub3QgcnVuIHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sIGlzIHNraXBwZWQgaW5cbiAqICAgICAgZmF2b3Igb2Yge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZy5tb2RlbEZhbGxiYWNrc30gcmF0aGVyIHRoYW5cbiAqICAgICAgZmFpbGluZyB0aGUgY2FsbC4gQSBwaW4gZnJvbSAoMSkgb3IgKDIpIGlzIGV4cGxpY2l0IGFuZCBET0VTIGZhaWw7XG4gKiAgIDQuIG90aGVyd2lzZSB0aGUgZmFsbGJhY2sgb3JkZXIsIHJlc29sdmVkIGFnYWluc3QgdGhlIGxpdmUgY2F0YWxvZ3VlLlxuICpcbiAqIFdoaWNoIG1vZGVsIHdpbnMgaXMgZGVjaWRlZCBsYXppbHksIGF0IGNhbGwgdGltZSwgYWdhaW5zdCB0aGUgbGl2ZVxuICogY2F0YWxvZ3VlLiBSZXNvbHV0aW9uIGhlcmUgaXMgZWFnZXIgYWJvdXQgZXZlcnl0aGluZyBlbHNlIGFuZCBmYWlscyBsb3VkbHlcbiAqIG9uIGEgY29udHJhZGljdGlvbjogYW4gdW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhbiB1bmtub3duXG4gKiB7QGxpbmsgVXJsUG9saWN5TW9kZX0sIG9yIGEgVVJMIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBhbGxvdy1saXN0IGl0XG4gKiB3YXMgZ2l2ZW4uXG4gKlxuICogRW52IGZhbGxiYWNrczogYFdFQl9TRUFSQ0hfTU9ERUxgLCBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLFxuICogYFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTYCwgYFdFQl9TRUFSQ0hfVE9PTFNgIChKU09OKSxcbiAqIGBXRUJfU0VBUkNIX1VSTF9QT0xJQ1lgLCBgV0VCX1NFQVJDSF9BTExPV0VEX1VSTFNgLFxuICogYFdFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OU2AsIGBXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEhgLFxuICogYFdFQl9TRUFSQ0hfVElNRU9VVF9NU2AsIGBXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDS2AsIGBXRUJfU0VBUkNIX0ZVWlpZYCxcbiAqIGBXRUJfU0VBUkNIX0ZVWlpZX1RIUkVTSE9MRGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMsIHRleHQsIEVOVl9PTkxZLCBib29sZWFuLCBwb3NpdGl2ZU51bWJlciwgcG9zaXRpdmVJbnQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIE9uZU9yTWFueSwgcGFyc2VSZWNvcmQsIGlzUmVjb3JkLCB0cmltVG9OdWxsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IHBhcnNlQWxsb3dlZFVybHMsIHRvVXJsQWxsb3dMaXN0LCB0eXBlIFVybEFsbG93TGlzdCB9IGZyb20gXCIuL2FsbG93bGlzdC50c1wiO1xuXG4vKipcbiAqIEEgVVJMLXBhdHRlcm4gZ2F0ZSBmb3IgcGVyLXRvb2wgYXBwcm92YWwuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsOyBhXG4gKiBwYXR0ZXJuIChvciBsaXN0IG9mIHBhdHRlcm5zLCBpbiB0aGUge0BsaW5rIE9uZU9yTWFueX0gc2hhcGUgdXNlZCBhY3Jvc3NcbiAqIHRoZSByZXBvKSBnYXRlcyBvbmx5IGNhbGxzIHdob3NlIFVSTCBtYXRjaGVzLiBQYXR0ZXJucyB1c2UgdGhlIHNhbWUgZ2xvYlxuICogc3ludGF4IGFzIHRoZSBhbGxvdy1saXN0IChzZWUgYGFsbG93bGlzdC50c2ApLiBPbWl0IC8gYGZhbHNlYCBmb3Igbm9cbiAqIGFwcHJvdmFsLiBOb3JtYWxpemVkIHRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0gYmVmb3JlIHVzZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxHYXRlID0gYm9vbGVhbiB8IE9uZU9yTWFueTxzdHJpbmc+IHwgc3RyaW5nO1xuXG4vKipcbiAqIFRoZSBub3JtYWxpemVkIGZvcm0gb2YgYW4ge0BsaW5rIEFwcHJvdmFsR2F0ZX06IHdoaWNoIGNhbGxzIHBhdXNlIGZvciBhXG4gKiBodW1hbi4gYFwibm9uZVwiYCBydW5zIGV2ZXJ5IGNhbGwgc3RyYWlnaHQgdGhyb3VnaCwgYFwiYWx3YXlzXCJgIGdhdGVzIGFsbCBvZlxuICogdGhlbSwgYW5kIGBcInVybHNcImAgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcyBvbmUgb2YgYHBhdHRlcm5zYC5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxQb2xpY3kgPVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJub25lXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJhbHdheXNcIiB9XG4gIHwgeyByZWFkb25seSBtb2RlOiBcInVybHNcIjsgcmVhZG9ubHkgcGF0dGVybnM6IHJlYWRvbmx5IHN0cmluZ1tdIH07XG5cbi8qKlxuICogV2hpY2ggVVJMcyB0aGUgdG9vbHMgbWF5IHJlYWNoLiBgXCJhbGxvd2xpc3RcImAgcGVybWl0cyBvbmx5IHRoZSBjb25maWd1cmVkXG4gKiBlbnRyaWVzOyBgXCJ1bnJlc3RyaWN0ZWRcImAgbmFtZXMgdGhlIHBlcm1pc3NpdmUgbW9kZSBleHBsaWNpdGx5LCBzbyBhblxuICogdW5yZXN0cmljdGVkIGRlcGxveW1lbnQgaXMgYSBzdGF0ZWQgY2hvaWNlIHZpc2libGUgaW4gdGhlIGJvb3QgbG9nIHJhdGhlclxuICogdGhhbiBhbiBlbXB0eSBsaXN0IG5vYm9keSBub3RpY2VkLlxuICovXG5leHBvcnQgdHlwZSBVcmxQb2xpY3lNb2RlID0gXCJ1bnJlc3RyaWN0ZWRcIiB8IFwiYWxsb3dsaXN0XCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSB3ZWItc2VhcmNoIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX0VOViA9IFwiV0VCX1NFQVJDSF9NT0RFTFwiO1xuXG4vKiogQXBwS2l0J3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQgbmFtZSBmb3IgYSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IGJpbmRpbmcuICovXG5leHBvcnQgY29uc3QgU0VSVklOR19FTkRQT0lOVF9FTlYgPSBcIkRBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FXCI7XG5cbi8qKiBXaGVyZSB0aGUgcGlubmVkIHdlYi1zZWFyY2ggZW5kcG9pbnQgaWQgY2FtZSBmcm9tLCBvciBgXCJub25lXCJgIHdoZW4gdW5waW5uZWQuICovXG5leHBvcnQgdHlwZSBNb2RlbFNvdXJjZSA9IFwiY29uZmlnXCIgfCB0eXBlb2YgTU9ERUxfRU5WIHwgdHlwZW9mIFNFUlZJTkdfRU5EUE9JTlRfRU5WIHwgXCJub25lXCI7XG5cbi8qKlxuICogRGVmYXVsdCB3ZWItc2VhcmNoIGZhbWlseSBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEVhY2ggcXVlcnkgc2VsZWN0cyB0aGUgaGlnaGVzdC1yYW5rZWQgZGVwbG95ZWQgbW9kZWwgaW4gdGhhdCBmYW1pbHlcbiAqIGFmdGVyIG1vZGVsLW93bmVkIHdlYi1zZWFyY2ggY2FwYWJpbGl0eSBmaWx0ZXJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX0ZBTExCQUNLUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXCJnZW1pbmlcIiwgXCJncHRcIl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBHUFQgcHJlZmVyZW5jZSB1c2VkIHdoZW4gbm8gY2FwYWJsZSBHZW1pbmkgaXMgYXZhaWxhYmxlLiBBY2NlcHRzIGFcbiAgICogRGF0YWJyaWNrcyBzZXJ2aW5nIGVuZHBvaW50IG5hbWUgb3IgbG9vc2UgZmFtaWx5IHNlYXJjaCBhbmQgZmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9NT0RFTGAsIHRoZW4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYC5cbiAgICovXG4gIG1vZGVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCB3ZWItc2VhcmNoIG1vZGVsIGNhbmRpZGF0ZXMgdHJpZWQgd2hlbiB7QGxpbmsgbW9kZWx9IGlzXG4gICAqIHVuc2V0LCBlYWNoIGZ1enp5LW1hdGNoZWQgYW5kIGNoZWNrZWQgZm9yIHdlYi1zZWFyY2ggc3VwcG9ydC4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NgIChjb21tYS9zcGFjZS1zZXBhcmF0ZWQpLCB0aGVuXG4gICAqIHtAbGluayBERUZBVUxUX01PREVMX0ZBTExCQUNLU30gKEdlbWluaSwgdGhlbiBHUFQpLlxuICAgKi9cbiAgbW9kZWxGYWxsYmFja3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgcmVxdWVzdGAgZnJhZ21lbnRcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMuICovXG4gIHdlYlNlYXJjaFRvb2xzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFdoZXRoZXIgdG8gZnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMuICovXG4gIGZ1enp5OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuICovXG4gIGZ1enp5VGhyZXNob2xkOiBudW1iZXI7XG4gIG1heENpdGF0aW9uczogbnVtYmVyO1xuICBmZXRjaE1heExlbmd0aDogbnVtYmVyO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gc2NyYXBlLWZhbGxiYWNrIHdoZW4gbm8gbmF0aXZlIHdlYi1zZWFyY2ggbW9kZWwgaXMgZGVwbG95ZWQuICovXG4gIHNjcmFwZUZhbGxiYWNrOiBib29sZWFuO1xuICAvKiogVGhlIG5hbWVkIFVSTCBwb2xpY3kgaW4gZm9yY2UuICovXG4gIHVybFBvbGljeTogVXJsUG9saWN5TW9kZTtcbiAgLyoqIENvbXBpbGVkIGFsbG93LWxpc3QgKHBlcm1pdC1hbGwgdW5kZXIgdGhlIGB1bnJlc3RyaWN0ZWRgIHBvbGljeSkuICovXG4gIGFsbG93TGlzdDogVXJsQWxsb3dMaXN0O1xuICAvKiogRGVmYXVsdCBwZXItdG9vbCBhcHByb3ZhbCBwb2xpY3kuICovXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFBvbGljeTtcbn1cblxuLyoqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAuICovXG5leHBvcnQgY29uc3QgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BOiBKU09OU2NoZW1hNyA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgcHJvcGVydGllczoge1xuICAgIG1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGVmYXVsdCB3ZWItc2VhcmNoIG1vZGVsIChlbmRwb2ludCBuYW1lLCBsb29zZSBuYW1lLCBvciBjbGFzcykuIEZ1enp5LW1hdGNoZWQuIEVudjogV0VCX1NFQVJDSF9NT0RFTCwgdGhlbiBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRS5cIixcbiAgICB9LFxuICAgIG1vZGVsRmFsbGJhY2tzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJPcmRlcmVkIHdlYi1zZWFyY2ggbW9kZWwgY2FuZGlkYXRlcyB3aGVuIGBtb2RlbGAgaXMgdW5zZXQgKEdlbWluaSwgdGhlbiBHUFQpLiBFbnY6IFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTLlwiLFxuICAgIH0sXG4gICAgd2ViU2VhcmNoVG9vbHM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1Byb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cyAob3BlbmFpIC0+IHtcInRvb2xzXCI6W3tcInR5cGVcIjpcIndlYl9zZWFyY2hcIn1dfSwgZ2VtaW5pIC0+IHtcImdvb2dsZV9zZWFyY2hcIjp7fX0pLiBFbnY6IFdFQl9TRUFSQ0hfVE9PTFMgKEpTT04pLicsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX0ZVWlpZKS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBhIGZ1enp5IG1vZGVsIG1hdGNoIGlzIGFjY2VwdGVkIChlbnY6IFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEKS5cIixcbiAgICB9LFxuICAgIG1heENpdGF0aW9uczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIGNpdGF0aW9ucyByZXR1cm5lZCAoZW52OiBXRUJfU0VBUkNIX01BWF9DSVRBVElPTlMpLlwiLFxuICAgIH0sXG4gICAgZmV0Y2hNYXhMZW5ndGg6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJIYXJkIGNhcCBvbiB3ZWJfZmV0Y2ggY29udGVudCBsZW5ndGggKGVudjogV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIKS5cIixcbiAgICB9LFxuICAgIHRpbWVvdXRNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCBpbiBtcyAoZW52OiBXRUJfU0VBUkNIX1RJTUVPVVRfTVMpLlwiLFxuICAgIH0sXG4gICAgc2NyYXBlRmFsbGJhY2s6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmFsbCBiYWNrIHRvIGEgRHVja0R1Y2tHbyBzY3JhcGUgd2hlbiBubyB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgaXMgZGVwbG95ZWQuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDSykuXCIsXG4gICAgfSxcbiAgICB1cmxQb2xpY3k6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJ1bnJlc3RyaWN0ZWRcIiwgXCJhbGxvd2xpc3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJXaGljaCBVUkxzIHRoZSB0b29scyBtYXkgcmVhY2guIERlZmF1bHRzIHRvIGFsbG93bGlzdCB3aGVuIGFsbG93ZWRVcmxzIGhhcyBlbnRyaWVzLCBlbHNlIHVucmVzdHJpY3RlZCAoZW52OiBXRUJfU0VBUkNIX1VSTF9QT0xJQ1kpLlwiLFxuICAgIH0sXG4gICAgYWxsb3dlZFVybHM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVVJMIGFsbG93LWxpc3Qgb2YgZ2xvYnMgLyBiYXJlIGhvc3RzIChlLmcuIFwiKi5kYXRhYnJpY2tzLmNvbVwiLCBcImRvY3MuZXhhbXBsZS5jb21cIikuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gV0VCX1NFQVJDSF9BTExPV0VEX1VSTFMuIEVtcHR5ID0gdW5yZXN0cmljdGVkLicsXG4gICAgfSxcbiAgICBhcHByb3ZhbDoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBcHByb3ZhbCBnYXRlIGZvciBib3RoIHRvb2xzOiB0cnVlIGdhdGVzIGV2ZXJ5IGNhbGwsIGEgZ2xvYiAob3IgbGlzdCBvZiBnbG9icykgZ2F0ZXMgb25seSBtYXRjaGluZyBVUkxzLCBvciBzdGF0ZSB0aGUgbW9kZSBkaXJlY3RseSBhcyB7XCJtb2RlXCI6XCJub25lXCJ8XCJhbHdheXNcInxcInVybHNcIn0uIERlZmF1bHQgbm9uZS4nLFxuICAgICAgb25lT2Y6IFtcbiAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtb2RlOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcIm5vbmVcIiwgXCJhbHdheXNcIiwgXCJ1cmxzXCJdIH0sXG4gICAgICAgICAgICBwYXR0ZXJuczogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcIm1vZGVcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBgV0VCX1NFQVJDSF9UT09MU2AgZW52IHZhciAoSlNPTiBvYmplY3QpLCBlbHNlIGB7fWAuIEEgdmFsdWUgdGhhdFxuICogaXMgc2V0IGJ1dCBub3QgYSBKU09OIG9iamVjdCBpcyBhIGRlcGxveW1lbnQgbWlzdGFrZSB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICogc2lsZW50bHkgbGVhdmUgdGhlIGJ1aWx0LWluIHRvb2wgc3BlY3MgaW4gcGxhY2UsIHNvIGl0IHRocm93cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VUb29sc0VudigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHJhdyA9IHRleHQoXCJXRUJfU0VBUkNIX1RPT0xTXCIsIEVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge307XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjb3JkKHJhdyk7XG4gIGlmICghcGFyc2VkKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgIFwiV0VCX1NFQVJDSF9UT09MUyBtdXN0IGJlIGEgSlNPTiBvYmplY3QgbWFwcGluZyBhIHByb3ZpZGVyIGZhbWlseSB0byBpdHMgcmVxdWVzdCBmcmFnbWVudFwiLFxuICAgICAgeyBjb250ZXh0OiB7IGVudlZhcjogXCJXRUJfU0VBUkNIX1RPT0xTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuLyoqIFJlYWQgdGhlIHBpbm5lZCBlbmRwb2ludCBpZCBhbmQgcmVjb3JkIHdoaWNoIHNvdXJjZSBzdXBwbGllZCBpdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFBpbihjb25maWc6IFdlYlNlYXJjaFBsdWdpbkNvbmZpZyk6IHsgbW9kZWw/OiBzdHJpbmc7IHNvdXJjZTogTW9kZWxTb3VyY2UgfSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSB0cmltVG9OdWxsKGNvbmZpZy5tb2RlbCk7XG4gIGlmIChmcm9tQ29uZmlnICE9PSBudWxsKSByZXR1cm4geyBtb2RlbDogZnJvbUNvbmZpZywgc291cmNlOiBcImNvbmZpZ1wiIH07XG4gIGNvbnN0IGZyb21Nb2RlbEVudiA9IHRleHQoTU9ERUxfRU5WLCBFTlZfT05MWSk7XG4gIGlmIChmcm9tTW9kZWxFbnYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbW9kZWw6IGZyb21Nb2RlbEVudiwgc291cmNlOiBNT0RFTF9FTlYgfTtcbiAgY29uc3QgZnJvbVJlc291cmNlRW52ID0gdGV4dChTRVJWSU5HX0VORFBPSU5UX0VOViwgRU5WX09OTFkpO1xuICBpZiAoZnJvbVJlc291cmNlRW52ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBtb2RlbDogZnJvbVJlc291cmNlRW52LCBzb3VyY2U6IFNFUlZJTkdfRU5EUE9JTlRfRU5WIH07XG4gIH1cbiAgcmV0dXJuIHsgc291cmNlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIG5hbWVkIHtAbGluayBVcmxQb2xpY3lNb2RlfSwgZmFpbGluZyBvbiBhIHN0YXRlZCBtb2RlIHRoYXRcbiAqIGNvbnRyYWRpY3RzIHRoZSBhbGxvdy1saXN0IGVudHJpZXMgaXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVXJsUG9saWN5KFxuICBjb25maWd1cmVkOiBVcmxQb2xpY3lNb2RlIHwgdW5kZWZpbmVkLFxuICBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBVcmxQb2xpY3lNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyB0ZXh0KFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIsIEVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGF0dGVybnMubGVuZ3RoID4gMCA/IFwiYWxsb3dsaXN0XCIgOiBcInVucmVzdHJpY3RlZFwiO1xuICBpZiAocmF3ICE9PSBcImFsbG93bGlzdFwiICYmIHJhdyAhPT0gXCJ1bnJlc3RyaWN0ZWRcIikge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IG11c3QgYmUgXCJhbGxvd2xpc3RcIiBvciBcInVucmVzdHJpY3RlZFwiIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcInVybFBvbGljeVwiLCBlbnZWYXI6IFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJhbGxvd2xpc3RcIiAmJiBwYXR0ZXJucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgJ3VybFBvbGljeSBcImFsbG93bGlzdFwiIG5lZWRzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiBhbGxvd2VkVXJscyAoZW52OiBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUyknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIGlmIChyYXcgPT09IFwidW5yZXN0cmljdGVkXCIgJiYgcGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwidW5yZXN0cmljdGVkXCIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYWxsb3dlZFVybHMgZW50cmllczsgZHJvcCB0aGUgZW50cmllcyBvciBzZXQgdXJsUG9saWN5IHRvIFwiYWxsb3dsaXN0XCInLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFueSBhY2NlcHRlZCBhcHByb3ZhbCBzcGVsbGluZyBpbnRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0uXG4gKiBBIHBhdHRlcm4gZ2F0ZSB3aXRoIG5vIHVzYWJsZSBwYXR0ZXJucyBjb2xsYXBzZXMgdG8gYFwibm9uZVwiYCByYXRoZXIgdGhhblxuICogZ2F0aW5nIGV2ZXJ5dGhpbmcsIHNvIGEgYmxhbmsgZW52IHZhciBjYW4gbmV2ZXIgd2VkZ2UgdGhlIHRvb2xzIGJlaGluZCBhblxuICogYXBwcm92YWwgbm9ib2R5IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FwcHJvdmFsUG9saWN5KGdhdGU6IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5IHwgdW5kZWZpbmVkKTogQXBwcm92YWxQb2xpY3kge1xuICBpZiAoZ2F0ZSA9PT0gdW5kZWZpbmVkIHx8IGdhdGUgPT09IGZhbHNlKSByZXR1cm4geyBtb2RlOiBcIm5vbmVcIiB9O1xuICBpZiAoZ2F0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHsgbW9kZTogXCJhbHdheXNcIiB9O1xuICBpZiAoaXNSZWNvcmQoZ2F0ZSkgJiYgXCJtb2RlXCIgaW4gZ2F0ZSkge1xuICAgIGlmIChnYXRlLm1vZGUgPT09IFwidXJsc1wiKSB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHMoWy4uLmdhdGUucGF0dGVybnNdKTtcbiAgICAgIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbiAgICB9XG4gICAgaWYgKGdhdGUubW9kZSA9PT0gXCJhbHdheXNcIiB8fCBnYXRlLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4geyBtb2RlOiBnYXRlLm1vZGUgfTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdhcHByb3ZhbCBtb2RlIG11c3QgYmUgXCJub25lXCIsIFwiYWx3YXlzXCIgb3IgXCJ1cmxzXCInLCB7XG4gICAgICBjb250ZXh0OiB7IGZpZWxkOiBcImFwcHJvdmFsXCIgfSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHModHlwZW9mIGdhdGUgPT09IFwic3RyaW5nXCIgPyBnYXRlIDogWy4uLmdhdGVdKTtcbiAgcmV0dXJuIHBhdHRlcm5zLmxlbmd0aCA+IDAgPyB7IG1vZGU6IFwidXJsc1wiLCBwYXR0ZXJucyB9IDogeyBtb2RlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9LiBXaGljaCBtb2RlbCBpcyB1c2VkIHN0YXlzIGxhenkgLSBpdCBpc1xuICogcGlja2VkIGF0IGNhbGwgdGltZSBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZSAtIGJ1dCBldmVyeXRoaW5nIGVsc2UgaXNcbiAqIHNldHRsZWQgaGVyZSwgYW5kIGEgY29udHJhZGljdGlvbiAodW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhblxuICogdW5rbm93biBVUkwgcG9saWN5LCBhIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIGl0cyBhbGxvdy1saXN0KSB0aHJvd3MgYVxuICoge0BsaW5rIENvbmZpZ3VyYXRpb25FcnJvcn0gbmFtaW5nIHRoZSBmaWVsZCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyhcbiAgY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcgPSB7fSxcbik6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFxuICAgIGNvbmZpZy5hbGxvd2VkVXJscyA/PyB0ZXh0KFwiV0VCX1NFQVJDSF9BTExPV0VEX1VSTFNcIiwgRU5WX09OTFkpLFxuICApO1xuICBjb25zdCB1cmxQb2xpY3kgPSByZXNvbHZlVXJsUG9saWN5KGNvbmZpZy51cmxQb2xpY3ksIHBhdHRlcm5zKTtcbiAgY29uc3QgeyBtb2RlbCwgc291cmNlIH0gPSByZXNvbHZlTW9kZWxQaW4oY29uZmlnKTtcbiAgY29uc3QgZmFsbGJhY2tzID0gY29uZmlnVXRpbHMubGlzdChcbiAgICBjb25maWcubW9kZWxGYWxsYmFja3MsXG4gICAgXCJXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU1wiLFxuICAgIHVuZGVmaW5lZCxcbiAgICBFTlZfT05MWSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi4obW9kZWwgPyB7IG1vZGVsIH0gOiB7fSksXG4gICAgbW9kZWxTb3VyY2U6IHNvdXJjZSxcbiAgICBtb2RlbEZhbGxiYWNrczogZmFsbGJhY2tzLmxlbmd0aCA+IDAgPyBmYWxsYmFja3MgOiBERUZBVUxUX01PREVMX0ZBTExCQUNLUyxcbiAgICB3ZWJTZWFyY2hUb29sczogeyAuLi5wYXJzZVRvb2xzRW52KCksIC4uLihjb25maWcud2ViU2VhcmNoVG9vbHMgPz8ge30pIH0sXG4gICAgZnV6enk6IGJvb2xlYW4oY29uZmlnLm1vZGVsRnV6enlNYXRjaCwgXCJXRUJfU0VBUkNIX0ZVWlpZXCIsIEVOVl9PTkxZKSA/PyB0cnVlLFxuICAgIGZ1enp5VGhyZXNob2xkOiBwb3NpdGl2ZU51bWJlcihcbiAgICAgIGNvbmZpZy5tb2RlbEZ1enp5VGhyZXNob2xkLFxuICAgICAgXCJXRUJfU0VBUkNIX0ZVWlpZX1RIUkVTSE9MRFwiLFxuICAgICAgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsXG4gICAgICBFTlZfT05MWSxcbiAgICApLFxuICAgIG1heENpdGF0aW9uczogcG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgXCJXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNcIixcbiAgICAgIERFRkFVTFRfTUFYX0NJVEFUSU9OUyxcbiAgICAgIEVOVl9PTkxZLFxuICAgICksXG4gICAgZmV0Y2hNYXhMZW5ndGg6IHBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLmZldGNoTWF4TGVuZ3RoLFxuICAgICAgXCJXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEhcIixcbiAgICAgIERFRkFVTFRfRkVUQ0hfTUFYX0xFTkdUSCxcbiAgICAgIEVOVl9PTkxZLFxuICAgICksXG4gICAgdGltZW91dE1zOiBwb3NpdGl2ZUludChjb25maWcudGltZW91dE1zLCBcIldFQl9TRUFSQ0hfVElNRU9VVF9NU1wiLCBERUZBVUxUX1RJTUVPVVRfTVMsIEVOVl9PTkxZKSxcbiAgICBzY3JhcGVGYWxsYmFjazogYm9vbGVhbihjb25maWcuc2NyYXBlRmFsbGJhY2ssIFwiV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0tcIiwgRU5WX09OTFkpID8/IHRydWUsXG4gICAgdXJsUG9saWN5LFxuICAgIGFsbG93TGlzdDogdG9VcmxBbGxvd0xpc3QodXJsUG9saWN5ID09PSBcImFsbG93bGlzdFwiID8gcGF0dGVybnMgOiBbXSksXG4gICAgYXBwcm92YWw6IHRvQXBwcm92YWxQb2xpY3koY29uZmlnLmFwcHJvdmFsKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGFwcHJvdmFsIGdhdGUgYWdhaW5zdCBhIHNldCBvZiBjYW5kaWRhdGUgVVJMcyBpbnRvIGEgY29uY3JldGVcbiAqIGJvb2xlYW46IGBcIm5vbmVcImAgLyBgXCJhbHdheXNcImAgcGFzcyBzdHJhaWdodCB0aHJvdWdoOyBhIGBcInVybHNcImAgcG9saWN5XG4gKiBnYXRlcyB3aGVuIEFOWSBjYW5kaWRhdGUgbWF0Y2hlcy4gRW1wdHkgY2FuZGlkYXRlcyB3aXRoIGEgcGF0dGVybiBnYXRlXG4gKiBuZXZlciBtYXRjaCAobm90aGluZyB0byBhcHByb3ZlKS4gUmV1c2VzIHRoZSBhbGxvdy1saXN0IG1hdGNoZXIgc28gYXBwcm92YWxcbiAqIGdsb2JzIHJlYWQgZXhhY3RseSBsaWtlIGFsbG93LWxpc3QgZ2xvYnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3ZhbE1hdGNoZXMoXG4gIGdhdGU6IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5LFxuICB1cmxzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwb2xpY3kgPSB0b0FwcHJvdmFsUG9saWN5KGdhdGUpO1xuICBpZiAocG9saWN5Lm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChwb2xpY3kubW9kZSA9PT0gXCJhbHdheXNcIikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGxpc3QgPSB0b1VybEFsbG93TGlzdChwb2xpY3kucGF0dGVybnMpO1xuICByZXR1cm4gdXJscy5zb21lKCh1cmwpID0+IGxpc3QuYWxsb3dzKHVybCkpO1xufVxuIl19
|
package/lib/src/plugin.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { ResourceType, type ResourceRequirement } from "@databricks/appkit";
|
|
18
18
|
import { type ToolRegistry } from "@databricks/appkit/beta";
|
|
19
19
|
import { ToolRegistryPlugin } from "@dbx-tools/appkit";
|
|
20
|
-
import type { AgentToolExecutionContext } from "@dbx-tools/appkit
|
|
20
|
+
import type { AgentToolExecutionContext } from "@dbx-tools/appkit";
|
|
21
21
|
import { type WebSearchPluginConfig } from "./config.ts";
|
|
22
22
|
import { type WebAssetPageFetchRequest, type WebImageFetchRequest, type WebImageFetchResult } from "./fetch.ts";
|
|
23
23
|
import type { WebFetchRequest, WebFetchResult, WebSearchRequest, WebSearchResult } from "./schema.ts";
|