@dbx-tools/appkit 0.9.154 → 0.9.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/index.ts +18 -13
  2. package/lib/index.d.ts +18 -13
  3. package/lib/index.js +19 -12
  4. package/lib/src/appkit.js +6 -6
  5. package/lib/src/brand-context.js +3 -3
  6. package/lib/src/cache-storage.d.ts +1 -1
  7. package/lib/src/cache-storage.js +6 -6
  8. package/lib/src/databricks.js +3 -3
  9. package/lib/src/files-cache.js +9 -9
  10. package/lib/src/identity.d.ts +0 -14
  11. package/lib/src/identity.js +9 -23
  12. package/lib/src/interceptor.js +3 -3
  13. package/lib/src/lakebase-resolver.d.ts +1 -1
  14. package/lib/src/lakebase-resolver.js +16 -17
  15. package/lib/src/migration.js +6 -6
  16. package/lib/src/openapi-tool.js +5 -5
  17. package/lib/src/plugin-execution.d.ts +2 -2
  18. package/lib/src/plugin-execution.js +4 -4
  19. package/lib/src/provision.d.ts +2 -2
  20. package/lib/src/provision.js +4 -4
  21. package/lib/src/request-tags.js +2 -2
  22. package/lib/src/telemetry.js +4 -4
  23. package/lib/tsconfig.tsbuildinfo +1 -1
  24. package/package.json +10 -178
  25. package/src/appkit.ts +5 -5
  26. package/src/brand-context.ts +2 -2
  27. package/src/cache-storage.ts +5 -5
  28. package/src/databricks.ts +2 -2
  29. package/src/files-cache.ts +8 -8
  30. package/src/identity.ts +16 -25
  31. package/src/interceptor.ts +2 -2
  32. package/src/lakebase-resolver.ts +27 -34
  33. package/src/migration.ts +11 -5
  34. package/src/openapi-tool.ts +4 -4
  35. package/src/plugin-execution.ts +4 -4
  36. package/src/provision.ts +4 -4
  37. package/src/request-tags.ts +1 -1
  38. package/src/telemetry.ts +3 -3
  39. package/lib/src/bundle.d.ts +0 -33
  40. package/lib/src/bundle.js +0 -38
  41. package/lib/src/pgaddress.d.ts +0 -20
  42. package/lib/src/pgaddress.js +0 -21
  43. package/src/bundle.ts +0 -57
  44. package/src/pgaddress.ts +0 -42
package/index.ts CHANGED
@@ -3,19 +3,16 @@
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";
6
- export const PACKAGE_VERSION = "0.9.154";
6
+ export const PACKAGE_VERSION = "0.9.158";
7
7
  export * as appkit from "./src/appkit.ts";
8
8
  export * as brandContext from "./src/brand-context.ts";
9
- export * as bundle from "./src/bundle.ts";
10
9
  export * as cacheStorage from "./src/cache-storage.ts";
11
10
  export * as databricks from "./src/databricks.ts";
12
- export * as filesCache from "./src/files-cache.ts";
13
11
  export * as identity from "./src/identity.ts";
14
12
  export * as interceptor from "./src/interceptor.ts";
15
13
  export * as lakebaseResolver from "./src/lakebase-resolver.ts";
16
14
  export * as migration from "./src/migration.ts";
17
15
  export * as openapiTool from "./src/openapi-tool.ts";
18
- export * as pgaddress from "./src/pgaddress.ts";
19
16
  export * as pluginExecution from "./src/plugin-execution.ts";
20
17
  export * as pluginRegistry from "./src/plugin-registry.ts";
21
18
  export * as provision from "./src/provision.ts";
@@ -24,28 +21,36 @@ export * as telemetry from "./src/telemetry.ts";
24
21
  export * as toolOperations from "./src/tool-operations.ts";
25
22
  export * as toolProvider from "./src/tool-provider.ts";
26
23
  export * as toolkitEntries from "./src/toolkit-entries.ts";
24
+ export { autoConfigure, createApp, tryGetExecutionContext, ensureInitialized } from "./src/appkit.ts";
27
25
  export type { AutoConfigureMode, CreateAppConfig, ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
28
- export { bundleAppResourceSchema, flattenAppYamlEnv, flattenAppEnv, getBundlePath } from "./src/bundle.ts";
29
- export type { BundleValidateJson, ConfigFile, ConfigMapValue, ConfigSource, ResolveConfigValueOptions } from "./src/bundle.ts";
30
- export { AppKitCacheStorage } from "./src/cache-storage.ts";
26
+ export { loadBrandContext, getBrandContext } from "./src/brand-context.ts";
27
+ export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.ts";
31
28
  export type { AppKitCacheStorageOptions, PersistentStorageBase } from "./src/cache-storage.ts";
29
+ export { toContext } from "./src/databricks.ts";
32
30
  export type { ContextLike } from "./src/databricks.ts";
33
- export { FilesCacheManager, FilesCachePlugin } from "./src/files-cache.ts";
31
+ export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.ts";
34
32
  export type { FilesCachePluginConfig, FilesCacheScope, FilesCacheSourceIdentity, FilesCacheExports } from "./src/files-cache.ts";
35
- export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.ts";
33
+ export { IDENTITY_MODES, DEFAULT_IDENTITY_MODE, resolveIdentityMode, requestAccessToken, requestUserId, requestUserEmail, useServicePrincipal, installAsUserDevelopmentPatch } from "./src/identity.ts";
36
34
  export type { IdentityMode, HeaderBearing } from "./src/identity.ts";
37
- export { LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.ts";
35
+ export { createInterceptorContext, LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.ts";
38
36
  export type { LifecycleEvent, LifecycleHandler, ResolvedAppEnv, InterceptorContext, Interceptor, InterceptorRuntime } from "./src/interceptor.ts";
37
+ export { captureServicePrincipalPool, parsePort, parseSslMode, nextPollDelay, pollDelay, readLakebaseInputs, resolveLakebaseConnection, applyLakebaseToEnv, applyLakebaseEnv } from "./src/lakebase-resolver.ts";
39
38
  export type { LakebaseResolverInputs, LakebaseConnection } from "./src/lakebase-resolver.ts";
39
+ export { isOwnershipMigrationError, handleOwnershipMigrationError } from "./src/migration.ts";
40
40
  export type { OwnershipMigrationErrorOptions } from "./src/migration.ts";
41
+ export { openApiTools } from "./src/openapi-tool.ts";
41
42
  export type { OpenApiHttpMethod, OpenApiTool, OpenApiToolsOptions } from "./src/openapi-tool.ts";
42
- export { SSL_MODES } from "./src/pgaddress.ts";
43
- export type { SslMode, ParsedAddress, LakebaseConnectionInputs } from "./src/pgaddress.ts";
43
+ export { runPluginExecution } from "./src/plugin-execution.ts";
44
44
  export type { RunPluginExecutionOptions } from "./src/plugin-execution.ts";
45
+ export { data, instance, require } from "./src/plugin-registry.ts";
45
46
  export type { PluginContextLike } from "./src/plugin-registry.ts";
47
+ export { cacheGrantStatements, provisionCacheSchema } from "./src/provision.ts";
48
+ export { injectRequestTag, injectRequestTags, getRequestTags } from "./src/request-tags.ts";
46
49
  export type { RequestTagValue } from "./src/request-tags.ts";
47
- export { USER_TRACE_ATTRIBUTE } from "./src/telemetry.ts";
50
+ export { USER_TRACE_ATTRIBUTE, excludeHttpTelemetryRequest, excludeUnparentedOutgoingHttpTelemetry, stampHttpTraceUser, configureNativeHttpTelemetry, bindNativeTelemetryProvider, registerNativeSpanProcessor, deferredNativeTracerProvider } from "./src/telemetry.ts";
48
51
  export type { NativeHttpTelemetryOptions } from "./src/telemetry.ts";
52
+ export { defineOperations, toolRegistryFromOperations } from "./src/tool-operations.ts";
49
53
  export type { AppKitToolMeta, AppKitOperationSchemaMeta, AppKitOperation } from "./src/tool-operations.ts";
50
54
  export { ToolRegistryPlugin } from "./src/tool-provider.ts";
51
55
  export type { AgentToolProgressOptions, AgentToolExecutionContext } from "./src/tool-provider.ts";
56
+ export { name, entries } from "./src/toolkit-entries.ts";
package/lib/index.d.ts CHANGED
@@ -1,17 +1,14 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
2
- export declare const PACKAGE_VERSION = "0.9.154";
2
+ export declare const PACKAGE_VERSION = "0.9.158";
3
3
  export * as appkit from "./src/appkit.ts";
4
4
  export * as brandContext from "./src/brand-context.ts";
5
- export * as bundle from "./src/bundle.ts";
6
5
  export * as cacheStorage from "./src/cache-storage.ts";
7
6
  export * as databricks from "./src/databricks.ts";
8
- export * as filesCache from "./src/files-cache.ts";
9
7
  export * as identity from "./src/identity.ts";
10
8
  export * as interceptor from "./src/interceptor.ts";
11
9
  export * as lakebaseResolver from "./src/lakebase-resolver.ts";
12
10
  export * as migration from "./src/migration.ts";
13
11
  export * as openapiTool from "./src/openapi-tool.ts";
14
- export * as pgaddress from "./src/pgaddress.ts";
15
12
  export * as pluginExecution from "./src/plugin-execution.ts";
16
13
  export * as pluginRegistry from "./src/plugin-registry.ts";
17
14
  export * as provision from "./src/provision.ts";
@@ -20,28 +17,36 @@ export * as telemetry from "./src/telemetry.ts";
20
17
  export * as toolOperations from "./src/tool-operations.ts";
21
18
  export * as toolProvider from "./src/tool-provider.ts";
22
19
  export * as toolkitEntries from "./src/toolkit-entries.ts";
20
+ export { autoConfigure, createApp, tryGetExecutionContext, ensureInitialized } from "./src/appkit.ts";
23
21
  export type { AutoConfigureMode, CreateAppConfig, ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
24
- export { bundleAppResourceSchema, flattenAppYamlEnv, flattenAppEnv, getBundlePath } from "./src/bundle.ts";
25
- export type { BundleValidateJson, ConfigFile, ConfigMapValue, ConfigSource, ResolveConfigValueOptions } from "./src/bundle.ts";
26
- export { AppKitCacheStorage } from "./src/cache-storage.ts";
22
+ export { loadBrandContext, getBrandContext } from "./src/brand-context.ts";
23
+ export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.ts";
27
24
  export type { AppKitCacheStorageOptions, PersistentStorageBase } from "./src/cache-storage.ts";
25
+ export { toContext } from "./src/databricks.ts";
28
26
  export type { ContextLike } from "./src/databricks.ts";
29
- export { FilesCacheManager, FilesCachePlugin } from "./src/files-cache.ts";
27
+ export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.ts";
30
28
  export type { FilesCachePluginConfig, FilesCacheScope, FilesCacheSourceIdentity, FilesCacheExports } from "./src/files-cache.ts";
31
- export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.ts";
29
+ export { IDENTITY_MODES, DEFAULT_IDENTITY_MODE, resolveIdentityMode, requestAccessToken, requestUserId, requestUserEmail, useServicePrincipal, installAsUserDevelopmentPatch } from "./src/identity.ts";
32
30
  export type { IdentityMode, HeaderBearing } from "./src/identity.ts";
33
- export { LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.ts";
31
+ export { createInterceptorContext, LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.ts";
34
32
  export type { LifecycleEvent, LifecycleHandler, ResolvedAppEnv, InterceptorContext, Interceptor, InterceptorRuntime } from "./src/interceptor.ts";
33
+ export { captureServicePrincipalPool, parsePort, parseSslMode, nextPollDelay, pollDelay, readLakebaseInputs, resolveLakebaseConnection, applyLakebaseToEnv, applyLakebaseEnv } from "./src/lakebase-resolver.ts";
35
34
  export type { LakebaseResolverInputs, LakebaseConnection } from "./src/lakebase-resolver.ts";
35
+ export { isOwnershipMigrationError, handleOwnershipMigrationError } from "./src/migration.ts";
36
36
  export type { OwnershipMigrationErrorOptions } from "./src/migration.ts";
37
+ export { openApiTools } from "./src/openapi-tool.ts";
37
38
  export type { OpenApiHttpMethod, OpenApiTool, OpenApiToolsOptions } from "./src/openapi-tool.ts";
38
- export { SSL_MODES } from "./src/pgaddress.ts";
39
- export type { SslMode, ParsedAddress, LakebaseConnectionInputs } from "./src/pgaddress.ts";
39
+ export { runPluginExecution } from "./src/plugin-execution.ts";
40
40
  export type { RunPluginExecutionOptions } from "./src/plugin-execution.ts";
41
+ export { data, instance, require } from "./src/plugin-registry.ts";
41
42
  export type { PluginContextLike } from "./src/plugin-registry.ts";
43
+ export { cacheGrantStatements, provisionCacheSchema } from "./src/provision.ts";
44
+ export { injectRequestTag, injectRequestTags, getRequestTags } from "./src/request-tags.ts";
42
45
  export type { RequestTagValue } from "./src/request-tags.ts";
43
- export { USER_TRACE_ATTRIBUTE } from "./src/telemetry.ts";
46
+ export { USER_TRACE_ATTRIBUTE, excludeHttpTelemetryRequest, excludeUnparentedOutgoingHttpTelemetry, stampHttpTraceUser, configureNativeHttpTelemetry, bindNativeTelemetryProvider, registerNativeSpanProcessor, deferredNativeTracerProvider } from "./src/telemetry.ts";
44
47
  export type { NativeHttpTelemetryOptions } from "./src/telemetry.ts";
48
+ export { defineOperations, toolRegistryFromOperations } from "./src/tool-operations.ts";
45
49
  export type { AppKitToolMeta, AppKitOperationSchemaMeta, AppKitOperation } from "./src/tool-operations.ts";
46
50
  export { ToolRegistryPlugin } from "./src/tool-provider.ts";
47
51
  export type { AgentToolProgressOptions, AgentToolExecutionContext } from "./src/tool-provider.ts";
52
+ export { name, entries } from "./src/toolkit-entries.ts";
package/lib/index.js CHANGED
@@ -2,19 +2,16 @@
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";
5
- export const PACKAGE_VERSION = "0.9.154";
5
+ export const PACKAGE_VERSION = "0.9.158";
6
6
  export * as appkit from "./src/appkit.js";
7
7
  export * as brandContext from "./src/brand-context.js";
8
- export * as bundle from "./src/bundle.js";
9
8
  export * as cacheStorage from "./src/cache-storage.js";
10
9
  export * as databricks from "./src/databricks.js";
11
- export * as filesCache from "./src/files-cache.js";
12
10
  export * as identity from "./src/identity.js";
13
11
  export * as interceptor from "./src/interceptor.js";
14
12
  export * as lakebaseResolver from "./src/lakebase-resolver.js";
15
13
  export * as migration from "./src/migration.js";
16
14
  export * as openapiTool from "./src/openapi-tool.js";
17
- export * as pgaddress from "./src/pgaddress.js";
18
15
  export * as pluginExecution from "./src/plugin-execution.js";
19
16
  export * as pluginRegistry from "./src/plugin-registry.js";
20
17
  export * as provision from "./src/provision.js";
@@ -23,12 +20,22 @@ export * as telemetry from "./src/telemetry.js";
23
20
  export * as toolOperations from "./src/tool-operations.js";
24
21
  export * as toolProvider from "./src/tool-provider.js";
25
22
  export * as toolkitEntries from "./src/toolkit-entries.js";
26
- export { bundleAppResourceSchema, flattenAppYamlEnv, flattenAppEnv, getBundlePath } from "./src/bundle.js";
27
- export { AppKitCacheStorage } from "./src/cache-storage.js";
28
- export { FilesCacheManager, FilesCachePlugin } from "./src/files-cache.js";
29
- export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.js";
30
- export { LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.js";
31
- export { SSL_MODES } from "./src/pgaddress.js";
32
- export { USER_TRACE_ATTRIBUTE } from "./src/telemetry.js";
23
+ export { autoConfigure, createApp, tryGetExecutionContext, ensureInitialized } from "./src/appkit.js";
24
+ export { loadBrandContext, getBrandContext } from "./src/brand-context.js";
25
+ export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.js";
26
+ export { toContext } from "./src/databricks.js";
27
+ export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.js";
28
+ export { IDENTITY_MODES, DEFAULT_IDENTITY_MODE, resolveIdentityMode, requestAccessToken, requestUserId, requestUserEmail, useServicePrincipal, installAsUserDevelopmentPatch } from "./src/identity.js";
29
+ export { createInterceptorContext, LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.js";
30
+ export { captureServicePrincipalPool, parsePort, parseSslMode, nextPollDelay, pollDelay, readLakebaseInputs, resolveLakebaseConnection, applyLakebaseToEnv, applyLakebaseEnv } from "./src/lakebase-resolver.js";
31
+ export { isOwnershipMigrationError, handleOwnershipMigrationError } from "./src/migration.js";
32
+ export { openApiTools } from "./src/openapi-tool.js";
33
+ export { runPluginExecution } from "./src/plugin-execution.js";
34
+ export { data, instance, require } from "./src/plugin-registry.js";
35
+ export { cacheGrantStatements, provisionCacheSchema } from "./src/provision.js";
36
+ export { injectRequestTag, injectRequestTags, getRequestTags } from "./src/request-tags.js";
37
+ export { USER_TRACE_ATTRIBUTE, excludeHttpTelemetryRequest, excludeUnparentedOutgoingHttpTelemetry, stampHttpTraceUser, configureNativeHttpTelemetry, bindNativeTelemetryProvider, registerNativeSpanProcessor, deferredNativeTracerProvider } from "./src/telemetry.js";
38
+ export { defineOperations, toolRegistryFromOperations } from "./src/tool-operations.js";
33
39
  export { ToolRegistryPlugin } from "./src/tool-provider.js";
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsSSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXRcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNTRcIjtcbmV4cG9ydCAqIGFzIGFwcGtpdCBmcm9tIFwiLi9zcmMvYXBwa2l0LnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZENvbnRleHQgZnJvbSBcIi4vc3JjL2JyYW5kLWNvbnRleHQudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjYWNoZVN0b3JhZ2UgZnJvbSBcIi4vc3JjL2NhY2hlLXN0b3JhZ2UudHNcIjtcbmV4cG9ydCAqIGFzIGRhdGFicmlja3MgZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzQ2FjaGUgZnJvbSBcIi4vc3JjL2ZpbGVzLWNhY2hlLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIGludGVyY2VwdG9yIGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VSZXNvbHZlciBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIG1pZ3JhdGlvbiBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwZ2FkZHJlc3MgZnJvbSBcIi4vc3JjL3BnYWRkcmVzcy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luRXhlY3V0aW9uIGZyb20gXCIuL3NyYy9wbHVnaW4tZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW5SZWdpc3RyeSBmcm9tIFwiLi9zcmMvcGx1Z2luLXJlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgKiBhcyBwcm92aXNpb24gZnJvbSBcIi4vc3JjL3Byb3Zpc2lvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVxdWVzdFRhZ3MgZnJvbSBcIi4vc3JjL3JlcXVlc3QtdGFncy50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRvb2xPcGVyYXRpb25zIGZyb20gXCIuL3NyYy90b29sLW9wZXJhdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIHRvb2xQcm92aWRlciBmcm9tIFwiLi9zcmMvdG9vbC1wcm92aWRlci50c1wiO1xuZXhwb3J0ICogYXMgdG9vbGtpdEVudHJpZXMgZnJvbSBcIi4vc3JjL3Rvb2xraXQtZW50cmllcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB7IGJ1bmRsZUFwcFJlc291cmNlU2NoZW1hLCBmbGF0dGVuQXBwWWFtbEVudiwgZmxhdHRlbkFwcEVudiwgZ2V0QnVuZGxlUGF0aCB9IGZyb20gXCIuL3NyYy9idW5kbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVuZGxlVmFsaWRhdGVKc29uLCBDb25maWdGaWxlLCBDb25maWdNYXBWYWx1ZSwgQ29uZmlnU291cmNlLCBSZXNvbHZlQ29uZmlnVmFsdWVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2J1bmRsZS50c1wiO1xuZXhwb3J0IHsgQXBwS2l0Q2FjaGVTdG9yYWdlIH0gZnJvbSBcIi4vc3JjL2NhY2hlLXN0b3JhZ2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXBwS2l0Q2FjaGVTdG9yYWdlT3B0aW9ucywgUGVyc2lzdGVudFN0b3JhZ2VCYXNlIH0gZnJvbSBcIi4vc3JjL2NhY2hlLXN0b3JhZ2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29udGV4dExpa2UgfSBmcm9tIFwiLi9zcmMvZGF0YWJyaWNrcy50c1wiO1xuZXhwb3J0IHsgRmlsZXNDYWNoZU1hbmFnZXIsIEZpbGVzQ2FjaGVQbHVnaW4gfSBmcm9tIFwiLi9zcmMvZmlsZXMtY2FjaGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZXNDYWNoZVBsdWdpbkNvbmZpZywgRmlsZXNDYWNoZVNjb3BlLCBGaWxlc0NhY2hlU291cmNlSWRlbnRpdHksIEZpbGVzQ2FjaGVFeHBvcnRzIH0gZnJvbSBcIi4vc3JjL2ZpbGVzLWNhY2hlLnRzXCI7XG5leHBvcnQgeyBBQ0NFU1NfVE9LRU5fSEVBREVSLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIsIElERU5USVRZX01PREVTLCBERUZBVUxUX0lERU5USVRZX01PREUgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgSWRlbnRpdHlNb2RlLCBIZWFkZXJCZWFyaW5nIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgeyBMaWZlY3ljbGVCcmlkZ2VQbHVnaW4sIGxpZmVjeWNsZUJyaWRnZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlciwgUmVzb2x2ZWRBcHBFbnYsIEludGVyY2VwdG9yQ29udGV4dCwgSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yUnVudGltZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVJlc29sdmVySW5wdXRzLCBMYWtlYmFzZUNvbm5lY3Rpb24gfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgT3duZXJzaGlwTWlncmF0aW9uRXJyb3JPcHRpb25zIH0gZnJvbSBcIi4vc3JjL21pZ3JhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBPcGVuQXBpSHR0cE1ldGhvZCwgT3BlbkFwaVRvb2wsIE9wZW5BcGlUb29sc09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgeyBTU0xfTU9ERVMgfSBmcm9tIFwiLi9zcmMvcGdhZGRyZXNzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNzbE1vZGUsIFBhcnNlZEFkZHJlc3MsIExha2ViYXNlQ29ubmVjdGlvbklucHV0cyB9IGZyb20gXCIuL3NyYy9wZ2FkZHJlc3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgUnVuUGx1Z2luRXhlY3V0aW9uT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9wbHVnaW4tZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFBsdWdpbkNvbnRleHRMaWtlIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi1yZWdpc3RyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXF1ZXN0VGFnVmFsdWUgfSBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgeyBVU0VSX1RSQUNFX0FUVFJJQlVURSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTmF0aXZlSHR0cFRlbGVtZXRyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcEtpdFRvb2xNZXRhLCBBcHBLaXRPcGVyYXRpb25TY2hlbWFNZXRhLCBBcHBLaXRPcGVyYXRpb24gfSBmcm9tIFwiLi9zcmMvdG9vbC1vcGVyYXRpb25zLnRzXCI7XG5leHBvcnQgeyBUb29sUmVnaXN0cnlQbHVnaW4gfSBmcm9tIFwiLi9zcmMvdG9vbC1wcm92aWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZ2VudFRvb2xQcm9ncmVzc09wdGlvbnMsIEFnZW50VG9vbEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zcmMvdG9vbC1wcm92aWRlci50c1wiO1xuIl19
40
+ export { name, entries } from "./src/toolkit-entries.js";
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3SSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeE0sT0FBTyxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqTixPQUFPLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxzQ0FBc0MsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpRLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE1OFwiO1xuZXhwb3J0ICogYXMgYXBwa2l0IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kQ29udGV4dCBmcm9tIFwiLi9zcmMvYnJhbmQtY29udGV4dC50c1wiO1xuZXhwb3J0ICogYXMgY2FjaGVTdG9yYWdlIGZyb20gXCIuL3NyYy9jYWNoZS1zdG9yYWdlLnRzXCI7XG5leHBvcnQgKiBhcyBkYXRhYnJpY2tzIGZyb20gXCIuL3NyYy9kYXRhYnJpY2tzLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIGludGVyY2VwdG9yIGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VSZXNvbHZlciBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIG1pZ3JhdGlvbiBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW5FeGVjdXRpb24gZnJvbSBcIi4vc3JjL3BsdWdpbi1leGVjdXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpblJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9wbHVnaW4tcmVnaXN0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHByb3Zpc2lvbiBmcm9tIFwiLi9zcmMvcHJvdmlzaW9uLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0VGFncyBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgKiBhcyB0ZWxlbWV0cnkgZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbE9wZXJhdGlvbnMgZnJvbSBcIi4vc3JjL3Rvb2wtb3BlcmF0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdG9vbFByb3ZpZGVyIGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sa2l0RW50cmllcyBmcm9tIFwiLi9zcmMvdG9vbGtpdC1lbnRyaWVzLnRzXCI7XG5leHBvcnQgeyBhdXRvQ29uZmlndXJlLCBjcmVhdGVBcHAsIHRyeUdldEV4ZWN1dGlvbkNvbnRleHQsIGVuc3VyZUluaXRpYWxpemVkIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB7IGxvYWRCcmFuZENvbnRleHQsIGdldEJyYW5kQ29udGV4dCB9IGZyb20gXCIuL3NyYy9icmFuZC1jb250ZXh0LnRzXCI7XG5leHBvcnQgeyBBcHBLaXRDYWNoZVN0b3JhZ2UsIGxvYWRQZXJzaXN0ZW50U3RvcmFnZSwgc29mdGVuSW5pdGlhbGl6ZSwgcHJvYmVTdG9yYWdlLCBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zLCBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHsgdG9Db250ZXh0IH0gZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29udGV4dExpa2UgfSBmcm9tIFwiLi9zcmMvZGF0YWJyaWNrcy50c1wiO1xuZXhwb3J0IHsgRmlsZXNDYWNoZU1hbmFnZXIsIEZpbGVzQ2FjaGVQbHVnaW4sIGZpbGVzQ2FjaGUgfSBmcm9tIFwiLi9zcmMvZmlsZXMtY2FjaGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZXNDYWNoZVBsdWdpbkNvbmZpZywgRmlsZXNDYWNoZVNjb3BlLCBGaWxlc0NhY2hlU291cmNlSWRlbnRpdHksIEZpbGVzQ2FjaGVFeHBvcnRzIH0gZnJvbSBcIi4vc3JjL2ZpbGVzLWNhY2hlLnRzXCI7XG5leHBvcnQgeyBJREVOVElUWV9NT0RFUywgREVGQVVMVF9JREVOVElUWV9NT0RFLCByZXNvbHZlSWRlbnRpdHlNb2RlLCByZXF1ZXN0QWNjZXNzVG9rZW4sIHJlcXVlc3RVc2VySWQsIHJlcXVlc3RVc2VyRW1haWwsIHVzZVNlcnZpY2VQcmluY2lwYWwsIGluc3RhbGxBc1VzZXJEZXZlbG9wbWVudFBhdGNoIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IElkZW50aXR5TW9kZSwgSGVhZGVyQmVhcmluZyB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHsgY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0LCBMaWZlY3ljbGVCcmlkZ2VQbHVnaW4sIGxpZmVjeWNsZUJyaWRnZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlciwgUmVzb2x2ZWRBcHBFbnYsIEludGVyY2VwdG9yQ29udGV4dCwgSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yUnVudGltZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHsgY2FwdHVyZVNlcnZpY2VQcmluY2lwYWxQb29sLCBwYXJzZVBvcnQsIHBhcnNlU3NsTW9kZSwgbmV4dFBvbGxEZWxheSwgcG9sbERlbGF5LCByZWFkTGFrZWJhc2VJbnB1dHMsIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24sIGFwcGx5TGFrZWJhc2VUb0VudiwgYXBwbHlMYWtlYmFzZUVudiB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVJlc29sdmVySW5wdXRzLCBMYWtlYmFzZUNvbm5lY3Rpb24gfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IGlzT3duZXJzaGlwTWlncmF0aW9uRXJyb3IsIGhhbmRsZU93bmVyc2hpcE1pZ3JhdGlvbkVycm9yIH0gZnJvbSBcIi4vc3JjL21pZ3JhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBPd25lcnNoaXBNaWdyYXRpb25FcnJvck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgeyBvcGVuQXBpVG9vbHMgfSBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IE9wZW5BcGlIdHRwTWV0aG9kLCBPcGVuQXBpVG9vbCwgT3BlbkFwaVRvb2xzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vcGVuYXBpLXRvb2wudHNcIjtcbmV4cG9ydCB7IHJ1blBsdWdpbkV4ZWN1dGlvbiB9IGZyb20gXCIuL3NyYy9wbHVnaW4tZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJ1blBsdWdpbkV4ZWN1dGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLWV4ZWN1dGlvbi50c1wiO1xuZXhwb3J0IHsgZGF0YSwgaW5zdGFuY2UsIHJlcXVpcmUgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLXJlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFBsdWdpbkNvbnRleHRMaWtlIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi1yZWdpc3RyeS50c1wiO1xuZXhwb3J0IHsgY2FjaGVHcmFudFN0YXRlbWVudHMsIHByb3Zpc2lvbkNhY2hlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3Byb3Zpc2lvbi50c1wiO1xuZXhwb3J0IHsgaW5qZWN0UmVxdWVzdFRhZywgaW5qZWN0UmVxdWVzdFRhZ3MsIGdldFJlcXVlc3RUYWdzIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtdGFncy50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXF1ZXN0VGFnVmFsdWUgfSBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgeyBVU0VSX1RSQUNFX0FUVFJJQlVURSwgZXhjbHVkZUh0dHBUZWxlbWV0cnlSZXF1ZXN0LCBleGNsdWRlVW5wYXJlbnRlZE91dGdvaW5nSHR0cFRlbGVtZXRyeSwgc3RhbXBIdHRwVHJhY2VVc2VyLCBjb25maWd1cmVOYXRpdmVIdHRwVGVsZW1ldHJ5LCBiaW5kTmF0aXZlVGVsZW1ldHJ5UHJvdmlkZXIsIHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvciwgZGVmZXJyZWROYXRpdmVUcmFjZXJQcm92aWRlciB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTmF0aXZlSHR0cFRlbGVtZXRyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgeyBkZWZpbmVPcGVyYXRpb25zLCB0b29sUmVnaXN0cnlGcm9tT3BlcmF0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLW9wZXJhdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXBwS2l0VG9vbE1ldGEsIEFwcEtpdE9wZXJhdGlvblNjaGVtYU1ldGEsIEFwcEtpdE9wZXJhdGlvbiB9IGZyb20gXCIuL3NyYy90b29sLW9wZXJhdGlvbnMudHNcIjtcbmV4cG9ydCB7IFRvb2xSZWdpc3RyeVBsdWdpbiB9IGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFnZW50VG9vbFByb2dyZXNzT3B0aW9ucywgQWdlbnRUb29sRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgeyBuYW1lLCBlbnRyaWVzIH0gZnJvbSBcIi4vc3JjL3Rvb2xraXQtZW50cmllcy50c1wiO1xuIl19
package/lib/src/appkit.js CHANGED
@@ -27,8 +27,8 @@
27
27
  * @module
28
28
  */
29
29
  import { createApp as appkitCreateApp, getExecutionContext, InitializationError, } from "@databricks/appkit";
30
- import { profile as authProfile } from "@dbx-tools/auth";
31
- import { asyncUtils, log } from "@dbx-tools/shared-core";
30
+ import { resolveProfile } from "@dbx-tools/auth";
31
+ import { log, tieAbortSignal } from "@dbx-tools/shared-core";
32
32
  import { resolveAutoConfigurePolicy } from "./_auto-configure.js";
33
33
  import { loadBrandContext } from "./brand-context.js";
34
34
  import { createAppKitCacheStorage } from "./cache-storage.js";
@@ -90,8 +90,8 @@ export async function autoConfigure(config, signal) {
90
90
  return undefined;
91
91
  }
92
92
  const controller = new AbortController();
93
- asyncUtils.tieAbortSignal(controller, signal);
94
- asyncUtils.tieAbortSignal(controller, AbortSignal.timeout(AUTO_CONFIGURE_TIMEOUT_MS));
93
+ tieAbortSignal(controller, signal);
94
+ tieAbortSignal(controller, AbortSignal.timeout(AUTO_CONFIGURE_TIMEOUT_MS));
95
95
  logger.debug("autoConfigure: resolve lakebase", {
96
96
  provision: policy.provision,
97
97
  mode: policy.mode,
@@ -146,7 +146,7 @@ async function autoConfigureLakebase(provision, signal, bundleProfile) {
146
146
  }
147
147
  function applyDefaultProfile() {
148
148
  const configured = process.env.DATABRICKS_CONFIG_PROFILE?.trim();
149
- const resolved = authProfile.resolveProfile(configured ? { profile: configured } : {});
149
+ const resolved = resolveProfile(configured ? { profile: configured } : {});
150
150
  if (!resolved) {
151
151
  delete process.env.DATABRICKS_CONFIG_PROFILE;
152
152
  return undefined;
@@ -325,4 +325,4 @@ export async function ensureInitialized() {
325
325
  await createApp({ plugins: [], autoConfigure: false });
326
326
  logger.debug("ensureInitialized: bare AppKit initialization complete");
327
327
  }
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwa2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUNMLFNBQVMsSUFBSSxlQUFlLEVBQzVCLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QixPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCx3QkFBd0IsRUFHeEIsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBOENwQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFFbkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBRTlDLFNBQVMsVUFBVSxDQUNqQixNQUFzQyxF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QUFtQixFQUFFLENBQUM7UUFDbEMsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQjtJQUNyQyxJQUFJLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdkQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDM0QsTUFBTSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcnVudGltZSBnbHVlOiB0aGUgYXV0by1jb25maWd1cmluZyBgY3JlYXRlQXBwYCBkcm9wLWluLCBwbHVzIHRoZVxuICogcGVyLXJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgaGVscGVycyBhbmQgdHlwZXMgZGVyaXZlZCBmcm9tIGl0LlxuICpcbiAqIGBjcmVhdGVBcHBgIHJ1bnMgZGJ4LXRvb2xzIGF1dG8tY29uZmlndXJhdGlvbiwgdGhlbiBkZWxlZ2F0ZXMgdG8gQXBwS2l0J3Mgb3duXG4gKiBgY3JlYXRlQXBwYCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhbmQgdGhlIHNhbWUgdHlwZWQgcGx1Z2luLWV4cG9ydCBtYXAuXG4gKiBEcm9wIGl0IGluIGFzIGEgb25lLWZvci1vbmUgcmVwbGFjZW1lbnQ6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGxha2ViYXNlLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuY3JlYXRlQXBwKHsgcGx1Z2luczogW3NlcnZlcigpLCBsYWtlYmFzZSgpXSB9KTtcbiAqIGBgYFxuICpcbiAqIEF1dG8tY29uZmlndXJhdGlvbiBydW5zIEJFRk9SRSBkZWxlZ2F0aW5nIHNvIHBsdWdpbnMgc2VlIGEgZnVsbHkgcG9wdWxhdGVkXG4gKiBgcHJvY2Vzcy5lbnZgIGR1cmluZyB0aGVpciBzeW5jaHJvbm91cyBgc2V0dXAoKWAuIExha2ViYXNlIFBvc3RncmVzIHJlc29sdXRpb25cbiAqIHJ1bnMgd2hlbiBhIG5hdGl2ZSBgbGFrZWJhc2VgIG9yIGBkYXRhYmFzZWAgcGx1Z2luIGlzIHByZXNlbnQsIG9yIHdoZW5cbiAqIHtAbGluayBBdXRvQ29uZmlndXJlTW9kZX0gaXMgc2V0IGV4cGxpY2l0bHkgb24gdGhlIGNvbmZpZyBvYmplY3QuXG4gKlxuICogYGdldEV4ZWN1dGlvbkNvbnRleHQoKWAgaXMgQXBwS2l0J3Mgb3duIGFjY2Vzc29yIGZvciB0aGUgT0JPLXNjb3BlZCB3b3Jrc3BhY2VcbiAqIGNsaWVudCArIHJlcXVlc3QgbWV0YWRhdGE7IHRoZSB3cmFwcGVycyBoZXJlIG1ha2UgaXQgc2FmZSB0byBjYWxsIG91dHNpZGUgYVxuICogcmVxdWVzdCBzY29wZSAoe0BsaW5rIHRyeUdldEV4ZWN1dGlvbkNvbnRleHR9KSBhbmQgdG8gbGF6aWx5IGJvb3QgYSBiYXJlIGFwcFxuICogKHtAbGluayBlbnN1cmVJbml0aWFsaXplZH0pLCBhbmQgcmUtZXhwb3J0IHRoZSBkZXJpdmVkIHR5cGVzIHNvIGFkZC1vblxuICogcGFja2FnZXMgY2FuIHR5cGUgYSBjb250ZXh0IC8gY2xpZW50IHdpdGhvdXQgcmUtZGVyaXZpbmcgdGhlbSBpbmxpbmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZUFwcCBhcyBhcHBraXRDcmVhdGVBcHAsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIEluaXRpYWxpemF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbi8vIEFwcEtpdCdzIHJvb3QgYmFycmVsIHJlLWV4cG9ydHMgYFBsdWdpbkRhdGFgIGJ1dCBub3QgYFBsdWdpbk1hcGA7IHRoZSBwYWNrYWdlXG4vLyBwdWJsaXNoZXMgdGhpcyBzdWJwYXRoIGZvciBleGFjdGx5IHRoYXQgdHlwZS5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFwIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9kaXN0L3NoYXJlZC9zcmMvcGx1Z2luXCI7XG5pbXBvcnQgeyBwcm9maWxlIGFzIGF1dGhQcm9maWxlIH0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aFwiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZUF1dG9Db25maWd1cmVQb2xpY3kgfSBmcm9tIFwiLi9fYXV0by1jb25maWd1cmUudHNcIjtcbmltcG9ydCB7IGxvYWRCcmFuZENvbnRleHQgfSBmcm9tIFwiLi9icmFuZC1jb250ZXh0LnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2UgfSBmcm9tIFwiLi9jYWNoZS1zdG9yYWdlLnRzXCI7XG5pbXBvcnQgeyBpbnN0YWxsQXNVc2VyRGV2ZWxvcG1lbnRQYXRjaCB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVJbnRlcmNlcHRvckNvbnRleHQsXG4gIHR5cGUgSW50ZXJjZXB0b3IsXG4gIHR5cGUgSW50ZXJjZXB0b3JSdW50aW1lLFxuICBsaWZlY3ljbGVCcmlkZ2UsXG4gIHR5cGUgUmVzb2x2ZWRBcHBFbnYsXG59IGZyb20gXCIuL2ludGVyY2VwdG9yLnRzXCI7XG5pbXBvcnQgeyBhcHBseUxha2ViYXNlRW52LCB0eXBlIExha2ViYXNlQ29ubmVjdGlvbiB9IGZyb20gXCIuL2xha2ViYXNlLXJlc29sdmVyLnRzXCI7XG5pbXBvcnQgeyBwcm92aXNpb25DYWNoZVNjaGVtYSB9IGZyb20gXCIuL3Byb3Zpc2lvbi50c1wiO1xuaW1wb3J0IHtcbiAgYmluZE5hdGl2ZVRlbGVtZXRyeVByb3ZpZGVyLFxuICBjb25maWd1cmVOYXRpdmVIdHRwVGVsZW1ldHJ5LFxuICBzdGFtcEh0dHBUcmFjZVVzZXIsXG59IGZyb20gXCIuL3RlbGVtZXRyeS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0XCIpO1xuXG50eXBlIEFwcEtpdENyZWF0ZUFwcENvbmZpZyA9IE5vbk51bGxhYmxlPFBhcmFtZXRlcnM8dHlwZW9mIGFwcGtpdENyZWF0ZUFwcD5bMF0+O1xudHlwZSBBcHBLaXRQbHVnaW5zID0gTm9uTnVsbGFibGU8QXBwS2l0Q3JlYXRlQXBwQ29uZmlnW1wicGx1Z2luc1wiXT47XG5cbi8qKlxuICogV2hhdCBhdXRvLWNvbmZpZ3VyYXRpb24gZG9lcyBiZWZvcmUgQXBwS2l0IGJvb3RzLlxuICpcbiAqIC0gYFwicHJvdmlzaW9uXCJgOiByZXNvbHZlIHRoZSBMYWtlYmFzZSBjb25uZWN0aW9uIGludG8gYHByb2Nlc3MuZW52YCwgdGhlblxuICogICBncmFudCB0aGUgQXBwS2l0IGNhY2hlIHNjaGVtYSB0byB0aGUgY29ubmVjdGluZyByb2xlLlxuICogLSBgXCJlbnZcImA6IHJlc29sdmUgdGhlIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byBgcHJvY2Vzcy5lbnZgIG9ubHkuXG4gKlxuICogT21pdCBpdCB0byByZXNvbHZlIGRhdGFiYXNlIGVudmlyb25tZW50IHdoZW4gYSBuYXRpdmUgYGxha2ViYXNlYCBvclxuICogYGRhdGFiYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC4gSW1wbGljaXQgY2FjaGUtc2NoZW1hIGdyYW50cyByZW1haW4gZ2F0ZWQgb25cbiAqIGBsYWtlYmFzZWA7IGBkYXRhYmFzZWAgb3ducyBpdHMgb3duIHBvb2wgYW5kIGRvZXMgbm90IGJyb2FkZW4gZ3JhbnRzLiBTZXQgdGhlXG4gKiBtb2RlIGV4cGxpY2l0bHkgdG8gcnVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsdWdpbiBsaXN0LCBvciBwYXNzIGBmYWxzZWAgdG8gc2tpcFxuICogYXV0by1jb25maWd1cmF0aW9uIGVudGlyZWx5LlxuICpcbiAqIFNldCBpdCBFWFBMSUNJVExZIG9uIGFuIGFwcCB0aGF0IGhhcyBubyBgbGFrZWJhc2UoKWAgcGx1Z2luIGJ1dCBzdGlsbCB3YW50c1xuICogQXBwS2l0J3MgUEVSU0lTVEVOVCBjYWNoZS4gQXBwS2l0IHBpY2tzIExha2ViYXNlIGZvciBgQ2FjaGVNYW5hZ2VyYCBvbmx5IHdoZW5cbiAqIGBjcmVhdGVMYWtlYmFzZVBvb2woKWAgY2FuIGJ1aWxkIGEgcG9vbCwgYW5kIHRoYXQgcmVhZHMgYExBS0VCQVNFX0VORFBPSU5UYCAvXG4gKiBgUEdIT1NUYCAvIGBQR0RBVEFCQVNFYCBzdHJhaWdodCBmcm9tIGBwcm9jZXNzLmVudmAgLSBzbyB3aXRob3V0IHRoaXMgc3RlcCB0aGVcbiAqIGNhY2hlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gaW4tbWVtb3J5LCBhbmQgYW55dGhpbmcgaXQgaG9sZHMgKGEgc2Vzc2lvblxuICogc2lnbmluZyBrZXksIGEgb25lLXRpbWUgY29kZSkgaXMgbG9zdCBvbiByZXN0YXJ0LiBgXCJlbnZcImAgaXMgdGhlIHJpZ2h0IG1vZGVcbiAqIHRoZXJlOiB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBvbiB0aGUgY2FjaGUgc2NoZW1hIGFueXdheS5cbiAqL1xuZXhwb3J0IHR5cGUgQXV0b0NvbmZpZ3VyZU1vZGUgPSBcImVudlwiIHwgXCJwcm92aXNpb25cIjtcblxuLyoqIEFwcEtpdCdzIGBjcmVhdGVBcHBgIGNvbmZpZyBwbHVzIHRoZSBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uIHN3aXRjaC4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcENvbmZpZzxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucyA9IEFwcEtpdFBsdWdpbnM+ID0gT21pdDxcbiAgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnLFxuICBcInBsdWdpbnNcIiB8IFwib25QbHVnaW5zUmVhZHlcIlxuPiAmIHtcbiAgcGx1Z2lucz86IFQ7XG4gIG9uUGx1Z2luc1JlYWR5PzogKGFwcGtpdDogUGx1Z2luTWFwPFQ+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEF1dG8tY29uZmlndXJhdGlvbiB0byBydW4gYmVmb3JlIEFwcEtpdCBib290cy4gRGVmYXVsdHMgdG8gYFwicHJvdmlzaW9uXCJgLiAqL1xuICBhdXRvQ29uZmlndXJlPzogQXV0b0NvbmZpZ3VyZU1vZGUgfCBmYWxzZTtcbiAgLyoqXG4gICAqIE9uZSBvciBtYW55IHtAbGluayBJbnRlcmNlcHRvcn1zIGhhbmRlZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBvbmNlXG4gICAqIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgY29tcHV0ZWQgdGhlIGVudi4gRWFjaCByZWNlaXZlcyB0aGUgcmVzb2x2ZWQgZW52LCBhblxuICAgKiBBcHBLaXQgbGlmZWN5Y2xlIGhvb2suIFNlZSBgLi9pbnRlcmNlcHRvcmAuIFRoZSB0dW5uZWwgaXMgdGhlIHByaW1hcnlcbiAgICogY29uc3VtZXIuXG4gICAqL1xuICBpbnRlcmNlcHRvcj86IEludGVyY2VwdG9yIHwgSW50ZXJjZXB0b3JbXTtcbn07XG5cbmNvbnN0IExBS0VCQVNFX1BMVUdJTiA9IFwibGFrZWJhc2VcIjtcblxuLyoqXG4gKiBVcHBlciBib3VuZCBvbiBib290LXRpbWUgYXV0by1jb25maWd1cmF0aW9uLiBJdCBydW5zIGFzIHRoZSBzZXJ2aWNlIHByaW5jaXBhbFxuICogYmVmb3JlIGFueSBwbHVnaW4gaXMgY29uc3RydWN0ZWQsIHNvIGl0IHNpdHMgb3V0c2lkZSBBcHBLaXQncyBpbnRlcmNlcHRvclxuICogY2hhaW4gYW5kIGluaGVyaXRzIG5vIHRpbWVvdXQsIHJldHJ5LCBvciB0ZWxlbWV0cnkgZnJvbSBpdC4gVGhlIGJ1ZGdldCBjb3ZlcnNcbiAqIHRoZSByZXNvbHZlcidzIG93biB3b3JzdCBjYXNlIChjcmVhdGUgYSBwcm9qZWN0LCB0aGVuIHdhaXQgZm9yIGl0cyBlbmRwb2ludClcbiAqIHBsdXMgdGhlIGNhY2hlLXNjaGVtYSBncmFudHMuXG4gKi9cbmNvbnN0IEFVVE9fQ09ORklHVVJFX1RJTUVPVVRfTVMgPSAxMSAqIDYwXzAwMDtcblxuZnVuY3Rpb24gdXNlc1BsdWdpbjxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucz4oXG4gIGNvbmZpZzogQ3JlYXRlQXBwQ29uZmlnPFQ+IHwgdW5kZWZpbmVkLFxuICBuYW1lOiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oY29uZmlnPy5wbHVnaW5zPy5zb21lKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSkpO1xufVxuXG4vKiogUGx1Z2luIG5hbWVzIGZvciBib290IGxvZ3MgKG9yZGVyIHByZXNlcnZlZCkuICovXG5mdW5jdGlvbiBwbHVnaW5OYW1lcyhjb25maWc6IENyZWF0ZUFwcENvbmZpZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIChjb25maWc/LnBsdWdpbnMgPz8gW10pLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpO1xufVxuXG4vKipcbiAqIFJ1biBlbmFibGVkIGF1dG8tY29uZmlndXJhdGlvbiBzdGVwcyB3aXRob3V0IGNhbGxpbmcgQXBwS2l0J3MgYGNyZWF0ZUFwcGAuXG4gKlxuICogTGFrZWJhc2UgUG9zdGdyZXMgcmVzb2x2ZXMgd2hlbiB7QGxpbmsgQ3JlYXRlQXBwQ29uZmlnLmF1dG9Db25maWd1cmV9IGlzIHNldFxuICogZXhwbGljaXRseSBvciBhIG5hdGl2ZSBgbGFrZWJhc2VgL2BkYXRhYmFzZWAgcGx1Z2luIGlzIGxpc3RlZCBpblxuICogYGNvbmZpZy5wbHVnaW5zYC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgcmVzb2x1dGlvbjsgaXQgaXMgY29tYmluZWQgd2l0aCBhblxuICogaW50ZXJuYWwgYm9vdCB0aW1lb3V0IGVpdGhlciB3YXkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIC8vIFBvcHVsYXRlIFBHSE9TVCAvIFBHREFUQUJBU0UgLyBMQUtFQkFTRV9FTkRQT0lOVCB3aXRob3V0IGJvb3RpbmcgQXBwS2l0LlxuICogYXdhaXQgYXBwa2l0LmF1dG9Db25maWd1cmUoeyBhdXRvQ29uZmlndXJlOiBcImVudlwiIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZTxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucz4oXG4gIGNvbmZpZz86IENyZWF0ZUFwcENvbmZpZzxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBidW5kbGVQcm9maWxlID0gYXBwbHlEZWZhdWx0UHJvZmlsZSgpO1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luTmFtZXMoY29uZmlnKTtcbiAgY29uc3QgcG9saWN5ID0gcmVzb2x2ZUF1dG9Db25maWd1cmVQb2xpY3kocGx1Z2lucywgY29uZmlnPy5hdXRvQ29uZmlndXJlKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogc3RhcnRcIiwge1xuICAgIC4uLnBvbGljeSxcbiAgICBwbHVnaW5zLFxuICAgIHRpbWVvdXRNczogQVVUT19DT05GSUdVUkVfVElNRU9VVF9NUyxcbiAgICBjYWxsZXJTaWduYWw6IEJvb2xlYW4oc2lnbmFsKSxcbiAgfSk7XG5cbiAgaWYgKCFwb2xpY3kuc2hvdWxkUmVzb2x2ZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmU6IHNraXBcIiwgeyAuLi5wb2xpY3ksIHBsdWdpbnMgfSk7XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICBhdXRvQ29uZmlndXJlOiBwb2xpY3kubW9kZSxcbiAgICAgIGxha2ViYXNlUGx1Z2luUHJlc2VudDogcG9saWN5Lmxha2ViYXNlUGx1Z2luUHJlc2VudCxcbiAgICAgIGRhdGFiYXNlUGx1Z2luUHJlc2VudDogcG9saWN5LmRhdGFiYXNlUGx1Z2luUHJlc2VudCxcbiAgICAgIHByb3Zpc2lvbmVkOiBmYWxzZSxcbiAgICAgIHNraXBwZWRSZWFzb246IHBvbGljeS5za2lwcGVkUmVhc29uLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBhc3luY1V0aWxzLnRpZUFib3J0U2lnbmFsKGNvbnRyb2xsZXIsIHNpZ25hbCk7XG4gIGFzeW5jVXRpbHMudGllQWJvcnRTaWduYWwoY29udHJvbGxlciwgQWJvcnRTaWduYWwudGltZW91dChBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TKSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogcmVzb2x2ZSBsYWtlYmFzZVwiLCB7XG4gICAgcHJvdmlzaW9uOiBwb2xpY3kucHJvdmlzaW9uLFxuICAgIG1vZGU6IHBvbGljeS5tb2RlLFxuICB9KTtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBhdXRvQ29uZmlndXJlTGFrZWJhc2UocG9saWN5LnByb3Zpc2lvbiwgY29udHJvbGxlci5zaWduYWwsIGJ1bmRsZVByb2ZpbGUpO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiBkb25lXCIsIHtcbiAgICBtb2RlOiBwb2xpY3kubW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5sYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgZGF0YWJhc2VQbHVnaW5QcmVzZW50OiBwb2xpY3kuZGF0YWJhc2VQbHVnaW5QcmVzZW50LFxuICAgIHByb3Zpc2lvbmVkOiBwb2xpY3kucHJvdmlzaW9uLFxuICAgIC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksXG4gIH0pO1xuICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICBhdXRvQ29uZmlndXJlOiBwb2xpY3kubW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5sYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgZGF0YWJhc2VQbHVnaW5QcmVzZW50OiBwb2xpY3kuZGF0YWJhc2VQbHVnaW5QcmVzZW50LFxuICAgIHByb3Zpc2lvbmVkOiBwb2xpY3kucHJvdmlzaW9uLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbiBpbmZvLCB3cml0ZSB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvXG4gKiBgcHJvY2Vzcy5lbnZgLCBhbmQgcmV0dXJuIHRoZSByZWNvcmQuIFVzZWQgYnkge0BsaW5rIGF1dG9Db25maWd1cmV9OyBjYWxsXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZUVudn0gZGlyZWN0bHkgd2hlbiBmaW5lciBjb250cm9sIGlzIG5lZWRlZCAoYSBkaWZmZXJlbnRcbiAqIGBhdXRvQ3JlYXRlYCBwb2xpY3ksIG9yIGEgY2FsbGVyIHRoYXQgd2FudHMgdGhlIGVudiB3aXRob3V0IGJvb3RpbmcgQXBwS2l0KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZUxha2ViYXNlKFxuICBwcm92aXNpb246IGJvb2xlYW4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4gIGJ1bmRsZVByb2ZpbGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbj4ge1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGFwcGx5TGFrZWJhc2VFbnZcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZWQsIHVzZXIgfSA9IGF3YWl0IGFwcGx5TGFrZWJhc2VFbnYoeyBidW5kbGVQcm9maWxlIH0sIHNpZ25hbCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmVMYWtlYmFzZTogZW52IGFwcGxpZWRcIiwge1xuICAgIC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksXG4gICAgdXNlcixcbiAgICBlbnY6IHtcbiAgICAgIExBS0VCQVNFX0VORFBPSU5UOiBwcm9jZXNzLmVudi5MQUtFQkFTRV9FTkRQT0lOVCxcbiAgICAgIFBHSE9TVDogcHJvY2Vzcy5lbnYuUEdIT1NULFxuICAgICAgUEdQT1JUOiBwcm9jZXNzLmVudi5QR1BPUlQsXG4gICAgICBQR0RBVEFCQVNFOiBwcm9jZXNzLmVudi5QR0RBVEFCQVNFLFxuICAgICAgUEdVU0VSOiBwcm9jZXNzLmVudi5QR1VTRVIsXG4gICAgICBQR1NTTE1PREU6IHByb2Nlc3MuZW52LlBHU1NMTU9ERSxcbiAgICB9LFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oXCJlbnYgdXBkYXRlZFwiLCB7IC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksIHVzZXIgfSk7XG4gIGlmIChwcm92aXNpb24pIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHByb3Zpc2lvbkNhY2hlU2NoZW1hXCIsIHsgdXNlciB9KTtcbiAgICBhd2FpdCBwcm92aXNpb25DYWNoZVNjaGVtYSh1c2VyLCBsb2dnZXIpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmVMYWtlYmFzZTogcHJvdmlzaW9uQ2FjaGVTY2hlbWEgZG9uZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHNraXAgcHJvdmlzaW9uIChtb2RlPWVudilcIik7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiBhcHBseURlZmF1bHRQcm9maWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFPy50cmltKCk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXV0aFByb2ZpbGUucmVzb2x2ZVByb2ZpbGUoY29uZmlndXJlZCA/IHsgcHJvZmlsZTogY29uZmlndXJlZCB9IDoge30pO1xuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkRBVEFCUklDS1NfQ09ORklHX1BST0ZJTEU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFID0gcmVzb2x2ZWQubmFtZTtcbiAgcmV0dXJuIHJlc29sdmVkLm5hbWU7XG59XG5cbi8qKiBXaGV0aGVyIGBjcmVhdGVBcHBgIHNob3VsZCBpbmplY3QgdGhlIGRlZmF1bHQgbWVtb3J5LWZpcnN0IGNhY2hlIHN0b3JhZ2UuICovXG5mdW5jdGlvbiBzaG91bGRJbmplY3RDYWNoZVN0b3JhZ2UoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgY29uc3QgY2FjaGUgPSBjb25maWc/LmNhY2hlO1xuICBpZiAoY2FjaGU/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjYWNoZT8uc3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVkYWN0TGFrZWJhc2VDb25uZWN0aW9uKHJlc29sdmVkOiBMYWtlYmFzZUNvbm5lY3Rpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcHJvamVjdDogcmVzb2x2ZWQucHJvamVjdCxcbiAgICBicmFuY2g6IHJlc29sdmVkLmJyYW5jaCxcbiAgICBlbmRwb2ludDogcmVzb2x2ZWQuZW5kcG9pbnQsXG4gICAgZGF0YWJhc2U6IHJlc29sdmVkLmRhdGFiYXNlLFxuICAgIGhvc3Q6IHJlc29sdmVkLmhvc3QsXG4gICAgcG9ydDogcmVzb2x2ZWQucG9ydCxcbiAgICBzc2xNb2RlOiByZXNvbHZlZC5zc2xNb2RlLFxuICB9O1xufVxuXG4vKiogQnVpbGQgdGhlIHtAbGluayBSZXNvbHZlZEFwcEVudn0gaW50ZXJjZXB0b3JzIHJlYWQsIGZyb20gdGhlIGF1dG8tY29uZmlnIHJlc3VsdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVkQXBwRW52KGxha2ViYXNlOiBMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQpOiBSZXNvbHZlZEFwcEVudiB7XG4gIHJldHVybiB7XG4gICAgLi4uKGxha2ViYXNlID8geyBsYWtlYmFzZSB9IDoge30pLFxuICAgIC4uLihwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0hPU1QgPyB7IGRhdGFicmlja3NIb3N0OiBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0hPU1QgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSB0aGUgYGludGVyY2VwdG9yPzogSW50ZXJjZXB0b3IgfCBJbnRlcmNlcHRvcltdYCBvcHRpb24gdG8gYW4gYXJyYXkuICovXG5mdW5jdGlvbiBpbnRlcmNlcHRvckxpc3QoaW50ZXJjZXB0b3I6IENyZWF0ZUFwcENvbmZpZ1tcImludGVyY2VwdG9yXCJdKTogSW50ZXJjZXB0b3JbXSB7XG4gIGlmICghaW50ZXJjZXB0b3IpIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3IpID8gaW50ZXJjZXB0b3IgOiBbaW50ZXJjZXB0b3JdO1xufVxuXG4vKipcbiAqIEF1dG8tY29uZmlndXJpbmcgZHJvcC1pbiBmb3IgQXBwS2l0J3MgYGNyZWF0ZUFwcGA6IHNhbWUgY29uZmlnLCBzYW1lIHR5cGVkXG4gKiBwbHVnaW4tZXhwb3J0IG1hcCwgd2l0aCB7QGxpbmsgYXV0b0NvbmZpZ3VyZX0gcnVuIGZpcnN0LlxuICpcbiAqIFdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5pbnRlcmNlcHRvcn1zIGFyZSBnaXZlbiwgZWFjaCBpcyBpbnZva2VkIHdpdGggYW5cbiAqIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHR9IEFGVEVSIGF1dG8tY29uZmlndXJhdGlvbiBjb21wdXRlcyB0aGUgZW52IGFuZCBCRUZPUkVcbiAqIEFwcEtpdCBib290cyAtIHNvIGFuIGludGVyY2VwdG9yIGNhbiByZWFkIHRoZSByZXNvbHZlZCBjb25uZWN0aW9uLCByZWdpc3RlclxuICogbGlmZWN5Y2xlIGhhbmRsZXJzLCBhbmQgc3RhcnQgYXV4aWxpYXJ5IHdvcmsuIEEgaGlkZGVuIHtAbGluayBsaWZlY3ljbGVCcmlkZ2V9XG4gKiBwbHVnaW4gaXMgaW5qZWN0ZWQgc28gdGhvc2UgYG9uTGlmZWN5Y2xlYCBoYW5kbGVycyBmaXJlIG9uIHRoZSBnZW51aW5lIEFwcEtpdFxuICogZXZlbnRzOyBpdCBoYXMgbm8gZXhwb3J0cywgc28gdGhlIHJldHVybmVkIHtAbGluayBQbHVnaW5NYXB9IGlzIHVuY2hhbmdlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbGFrZWJhc2UsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGNvbnN0IGFwcCA9IGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoeyBwbHVnaW5zOiBbc2VydmVyKCksIGxha2ViYXNlKCldIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwPFQgZXh0ZW5kcyBBcHBLaXRQbHVnaW5zPihcbiAgY29uZmlnPzogQ3JlYXRlQXBwQ29uZmlnPFQ+LFxuKTogUHJvbWlzZTxQbHVnaW5NYXA8VD4+IHtcbiAgaW5zdGFsbEFzVXNlckRldmVsb3BtZW50UGF0Y2goKTtcbiAgYXdhaXQgY29uZmlndXJlTmF0aXZlSHR0cFRlbGVtZXRyeSh7IHNwYW5Ib29rOiBzdGFtcEh0dHBUcmFjZVVzZXIgfSk7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW5OYW1lcyhjb25maWcpO1xuICBjb25zdCBpbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRvckxpc3QoY29uZmlnPy5pbnRlcmNlcHRvcik7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogc3RhcnRcIiwge1xuICAgIHBsdWdpbnMsXG4gICAgcGx1Z2luQ291bnQ6IHBsdWdpbnMubGVuZ3RoLFxuICAgIGludGVyY2VwdG9yQ291bnQ6IGludGVyY2VwdG9ycy5sZW5ndGgsXG4gICAgYXV0b0NvbmZpZ3VyZTogY29uZmlnPy5hdXRvQ29uZmlndXJlID8/IFwiKGRlZmF1bHQpXCIsXG4gICAgaGFzT25QbHVnaW5zUmVhZHk6IHR5cGVvZiBjb25maWc/Lm9uUGx1Z2luc1JlYWR5ID09PSBcImZ1bmN0aW9uXCIsXG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogYXV0b0NvbmZpZ3VyZVwiKTtcbiAgY29uc3QgYnJhbmRDb250ZXh0ID0gYXdhaXQgbG9hZEJyYW5kQ29udGV4dCgpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGJyYW5kIGNvbnRleHQgbG9hZGVkXCIsIHsgbmFtZTogYnJhbmRDb250ZXh0Lm5hbWUgfSk7XG4gIGNvbnN0IGxha2ViYXNlID0gYXdhaXQgYXV0b0NvbmZpZ3VyZShjb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmUgcmV0dXJuZWRcIiwge1xuICAgIGxha2ViYXNlOiBsYWtlYmFzZSA/IHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihsYWtlYmFzZSkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGFwcENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIGRlbGV0ZSBhcHBDb25maWcuYXV0b0NvbmZpZ3VyZTtcbiAgZGVsZXRlIGFwcENvbmZpZy5pbnRlcmNlcHRvcjtcbiAgY29uc3Qgb25QbHVnaW5zUmVhZHkgPSBhcHBDb25maWcub25QbHVnaW5zUmVhZHk7XG4gIGFwcENvbmZpZy5vblBsdWdpbnNSZWFkeSA9IGFzeW5jIChhcHApID0+IHtcbiAgICBjb25zdCBib3VuZCA9IGF3YWl0IGJpbmROYXRpdmVUZWxlbWV0cnlQcm92aWRlcigpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogbmF0aXZlIHRlbGVtZXRyeSBwcm92aWRlciBiaW5kaW5nXCIsIHsgYm91bmQgfSk7XG4gICAgYXdhaXQgb25QbHVnaW5zUmVhZHk/LihhcHApO1xuICB9O1xuXG4gIGlmIChzaG91bGRJbmplY3RDYWNoZVN0b3JhZ2UoY29uZmlnKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW5qZWN0IG1lbW9yeS1maXJzdCBjYWNoZSBzdG9yYWdlXCIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2Uoe1xuICAgICAgY2FjaGU6IGNvbmZpZz8uY2FjaGUsXG4gICAgICBwcmVmZXJMYWtlYmFzZTogQm9vbGVhbihsYWtlYmFzZSkgfHwgdXNlc1BsdWdpbihjb25maWcsIExBS0VCQVNFX1BMVUdJTiksXG4gICAgfSk7XG4gICAgYXBwQ29uZmlnLmNhY2hlID0geyAuLi5jb25maWc/LmNhY2hlLCBzdG9yYWdlIH07XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBtZW1vcnktZmlyc3QgY2FjaGUgc3RvcmFnZSByZWFkeVwiLCB7XG4gICAgICBwZXJzaXN0ZW50OiBzdG9yYWdlLmlzUGVyc2lzdGVudCgpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IG5vIGludGVyY2VwdG9yczsgZGVsZWdhdGluZyB0byBBcHBLaXQgY3JlYXRlQXBwXCIsIHtcbiAgICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwa2l0Q3JlYXRlQXBwPFQ+KGFwcENvbmZpZyk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICAgIGV4cG9ydEtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCA/PyB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbXB1dGVkIGVudiwgcnVuIGVhY2ggaW50ZXJjZXB0b3IgKHRoZXkgcmVnaXN0ZXJcbiAgLy8gbGlmZWN5Y2xlIGhhbmRsZXJzICsgYmluZCBwcm9jZXNzZXMpLCB0aGVuIGluamVjdCB0aGUgYnJpZGdlIHRoYXQgcmVsYXlzIHRoZVxuICAvLyBSRUFMIEFwcEtpdCBsaWZlY3ljbGUgaW50byBgcnVudGltZS5lbWl0TGlmZWN5Y2xlYCBkdXJpbmcgaXRzIGBzZXR1cCgpYC5cbiAgY29uc3QgZW52ID0gcmVzb2x2ZWRBcHBFbnYobGFrZWJhc2UpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGludGVyY2VwdG9yIGNvbnRleHRcIiwge1xuICAgIGhhc0xha2ViYXNlOiBCb29sZWFuKGVudi5sYWtlYmFzZSksXG4gICAgZGF0YWJyaWNrc0hvc3Q6IGVudi5kYXRhYnJpY2tzSG9zdCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICB9KTtcbiAgY29uc3QgcnVudGltZTogSW50ZXJjZXB0b3JSdW50aW1lID0gY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0KGVudik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJjZXB0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBydW4gaW50ZXJjZXB0b3JcIiwgeyBpbmRleDogaSwgb2Y6IGludGVyY2VwdG9ycy5sZW5ndGggfSk7XG4gICAgYXdhaXQgaW50ZXJjZXB0b3JzW2ldIShydW50aW1lLmNvbnRleHQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW50ZXJjZXB0b3IgZG9uZVwiLCB7IGluZGV4OiBpIH0pO1xuICB9XG4gIC8vIEFwcGVuZCB0aGUgYnJpZGdlIHRvIHRoZSBwbHVnaW5zIHR1cGxlLiBJdCBpcyBoaWRkZW4gYW5kIGV4cG9ydHMgbm90aGluZywgc29cbiAgLy8gdGhlIHJldHVybmVkIG1hcCBzdGlsbCBtYXRjaGVzIGBQbHVnaW5NYXA8VD5gOyB0aGUgY2FzdCAodGhyb3VnaCBgdW5rbm93bmApIGlzXG4gIC8vIG9ubHkgYmVjYXVzZSBhcHBlbmRpbmcgd2lkZW5zIHRoZSB0dXBsZSB0eXBlIGJleW9uZCBgVGAuXG4gIGFwcENvbmZpZy5wbHVnaW5zID0gWy4uLihhcHBDb25maWcucGx1Z2lucyA/PyBbXSksIGxpZmVjeWNsZUJyaWRnZSh7IHJ1bnRpbWUgfSldIGFzIHVua25vd24gYXMgVDtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBsaWZlY3ljbGUgYnJpZGdlIGluamVjdGVkOyBkZWxlZ2F0aW5nIHRvIEFwcEtpdCBjcmVhdGVBcHBcIiwge1xuICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBraXRDcmVhdGVBcHA8VD4oYXBwQ29uZmlnKTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICBleHBvcnRLZXlzOiBPYmplY3Qua2V5cyhyZXN1bHQgPz8ge30pLFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgQXBwS2l0IHBlci1yZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IHJldHVybmVkIGJ5IGBnZXRFeGVjdXRpb25Db250ZXh0KClgXG4gKiAtIHRoZSBPQk8tc2NvcGVkIHdvcmtzcGFjZSBjbGllbnQgcGx1cyB0aGUgc3Vycm91bmRpbmcgcmVxdWVzdCBtZXRhZGF0YS5cbiAqIERlcml2ZWQgZnJvbSBBcHBLaXQncyBvd24gcmV0dXJuIHR5cGUgc28gaXQgdHJhY2tzIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiwgYW5kXG4gKiByZS1leHBvcnRlZCBoZXJlIHNvIGFkZC1vbiBwYWNrYWdlcyBjYW4gdHlwZSBhIGNvbnRleHQgcGFyYW1ldGVyIHdpdGhvdXQgZWFjaFxuICogcmUtZGVyaXZpbmcgdGhlIHNhbWUgYFJldHVyblR5cGU8dHlwZW9mIGdldEV4ZWN1dGlvbkNvbnRleHQ+YCBpbmxpbmUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkNvbnRleHRMaWtlID0gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD47XG5cbi8qKlxuICogVGhlIGF1dGgtc2NvcGVkIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudCBjYXJyaWVkIG9uIGFuXG4gKiBgRXhlY3V0aW9uQ29udGV4dExpa2VgIChgZ2V0RXhlY3V0aW9uQ29udGV4dCgpLmNsaWVudGApLiBUeXBlZCBzdHJ1Y3R1cmFsbHlcbiAqIG9mZiBBcHBLaXQgc28gY29uc3VtZXJzIGRvbid0IHRha2UgYSBkaXJlY3QgYEBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxgXG4gKiBkZXBlbmRlbmN5IC0gdGhlIGRlcCBmbG93cyBpbiB0cmFuc2l0aXZlbHkgdGhyb3VnaCBgQGRhdGFicmlja3MvYXBwa2l0YC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ2xpZW50TGlrZSA9IEV4ZWN1dGlvbkNvbnRleHRMaWtlW1wiY2xpZW50XCJdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IEFwcEtpdCBleGVjdXRpb24gY29udGV4dCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBBcHBLaXQgaXNuJ3RcbiAqIGluaXRpYWxpemVkIChvdXRzaWRlIGEgcmVxdWVzdCBzY29wZSkuIFN3YWxsb3dzIEFwcEtpdCdzXG4gKiB7QGxpbmsgSW5pdGlhbGl6YXRpb25FcnJvcn07IGFueSBvdGhlciBlcnJvciBwcm9wYWdhdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqXG4gKiAvLyBPQk8tc2NvcGVkIGluc2lkZSBhIHJlcXVlc3QsIHNlcnZpY2UgcHJpbmNpcGFsIGZyb20gYSBDTEkgb3Igc2NyaXB0LlxuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpOiBFeGVjdXRpb25Db250ZXh0TGlrZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmIChjdHg/LmNsaWVudCkge1xuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBJbml0aWFsaXphdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIGJhcmUgQXBwS2l0IGFwcCAobm8gcGx1Z2lucykgd2hlbiBub25lIGlzIHJ1bm5pbmcgeWV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAqIGNvbnN0IGNsaWVudCA9IGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudDtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBib290aW5nIGJhcmUgQXBwS2l0IGFwcFwiKTtcbiAgYXdhaXQgY3JlYXRlQXBwKHsgcGx1Z2luczogW10sIGF1dG9Db25maWd1cmU6IGZhbHNlIH0pO1xuICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogYmFyZSBBcHBLaXQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcIik7XG59XG4iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwa2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUNMLFNBQVMsSUFBSSxlQUFlLEVBQzVCLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLHdCQUF3QixFQUd4QixlQUFlLEdBRWhCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUEyQixNQUFNLHdCQUF3QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLGtCQUFrQixHQUNuQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUE4Q3BDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUVuQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFFOUMsU0FBUyxVQUFVLENBQ2pCLE1BQXNDLEVBQ3RDLElBQVk7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LEVBQUUsQ0FBQztZQUNoQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBydW50aW1lIGdsdWU6IHRoZSBhdXRvLWNvbmZpZ3VyaW5nIGBjcmVhdGVBcHBgIGRyb3AtaW4sIHBsdXMgdGhlXG4gKiBwZXItcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCBoZWxwZXJzIGFuZCB0eXBlcyBkZXJpdmVkIGZyb20gaXQuXG4gKlxuICogYGNyZWF0ZUFwcGAgcnVucyBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uLCB0aGVuIGRlbGVnYXRlcyB0byBBcHBLaXQncyBvd25cbiAqIGBjcmVhdGVBcHBgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFuZCB0aGUgc2FtZSB0eXBlZCBwbHVnaW4tZXhwb3J0IG1hcC5cbiAqIERyb3AgaXQgaW4gYXMgYSBvbmUtZm9yLW9uZSByZXBsYWNlbWVudDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbGFrZWJhc2UsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoeyBwbHVnaW5zOiBbc2VydmVyKCksIGxha2ViYXNlKCldIH0pO1xuICogYGBgXG4gKlxuICogQXV0by1jb25maWd1cmF0aW9uIHJ1bnMgQkVGT1JFIGRlbGVnYXRpbmcgc28gcGx1Z2lucyBzZWUgYSBmdWxseSBwb3B1bGF0ZWRcbiAqIGBwcm9jZXNzLmVudmAgZHVyaW5nIHRoZWlyIHN5bmNocm9ub3VzIGBzZXR1cCgpYC4gTGFrZWJhc2UgUG9zdGdyZXMgcmVzb2x1dGlvblxuICogcnVucyB3aGVuIGEgbmF0aXZlIGBsYWtlYmFzZWAgb3IgYGRhdGFiYXNlYCBwbHVnaW4gaXMgcHJlc2VudCwgb3Igd2hlblxuICoge0BsaW5rIEF1dG9Db25maWd1cmVNb2RlfSBpcyBzZXQgZXhwbGljaXRseSBvbiB0aGUgY29uZmlnIG9iamVjdC5cbiAqXG4gKiBgZ2V0RXhlY3V0aW9uQ29udGV4dCgpYCBpcyBBcHBLaXQncyBvd24gYWNjZXNzb3IgZm9yIHRoZSBPQk8tc2NvcGVkIHdvcmtzcGFjZVxuICogY2xpZW50ICsgcmVxdWVzdCBtZXRhZGF0YTsgdGhlIHdyYXBwZXJzIGhlcmUgbWFrZSBpdCBzYWZlIHRvIGNhbGwgb3V0c2lkZSBhXG4gKiByZXF1ZXN0IHNjb3BlICh7QGxpbmsgdHJ5R2V0RXhlY3V0aW9uQ29udGV4dH0pIGFuZCB0byBsYXppbHkgYm9vdCBhIGJhcmUgYXBwXG4gKiAoe0BsaW5rIGVuc3VyZUluaXRpYWxpemVkfSksIGFuZCByZS1leHBvcnQgdGhlIGRlcml2ZWQgdHlwZXMgc28gYWRkLW9uXG4gKiBwYWNrYWdlcyBjYW4gdHlwZSBhIGNvbnRleHQgLyBjbGllbnQgd2l0aG91dCByZS1kZXJpdmluZyB0aGVtIGlubGluZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgY3JlYXRlQXBwIGFzIGFwcGtpdENyZWF0ZUFwcCxcbiAgZ2V0RXhlY3V0aW9uQ29udGV4dCxcbiAgSW5pdGlhbGl6YXRpb25FcnJvcixcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuLy8gQXBwS2l0J3Mgcm9vdCBiYXJyZWwgcmUtZXhwb3J0cyBgUGx1Z2luRGF0YWAgYnV0IG5vdCBgUGx1Z2luTWFwYDsgdGhlIHBhY2thZ2Vcbi8vIHB1Ymxpc2hlcyB0aGlzIHN1YnBhdGggZm9yIGV4YWN0bHkgdGhhdCB0eXBlLlxuaW1wb3J0IHR5cGUgeyBQbHVnaW5NYXAgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2Rpc3Qvc2hhcmVkL3NyYy9wbHVnaW5cIjtcbmltcG9ydCB7IHJlc29sdmVQcm9maWxlIH0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aFwiO1xuaW1wb3J0IHsgbG9nLCB0aWVBYm9ydFNpZ25hbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7IHJlc29sdmVBdXRvQ29uZmlndXJlUG9saWN5IH0gZnJvbSBcIi4vX2F1dG8tY29uZmlndXJlLnRzXCI7XG5pbXBvcnQgeyBsb2FkQnJhbmRDb250ZXh0IH0gZnJvbSBcIi4vYnJhbmQtY29udGV4dC50c1wiO1xuaW1wb3J0IHsgY3JlYXRlQXBwS2l0Q2FjaGVTdG9yYWdlIH0gZnJvbSBcIi4vY2FjaGUtc3RvcmFnZS50c1wiO1xuaW1wb3J0IHsgaW5zdGFsbEFzVXNlckRldmVsb3BtZW50UGF0Y2ggfSBmcm9tIFwiLi9pZGVudGl0eS50c1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0LFxuICB0eXBlIEludGVyY2VwdG9yLFxuICB0eXBlIEludGVyY2VwdG9yUnVudGltZSxcbiAgbGlmZWN5Y2xlQnJpZGdlLFxuICB0eXBlIFJlc29sdmVkQXBwRW52LFxufSBmcm9tIFwiLi9pbnRlcmNlcHRvci50c1wiO1xuaW1wb3J0IHsgYXBwbHlMYWtlYmFzZUVudiwgdHlwZSBMYWtlYmFzZUNvbm5lY3Rpb24gfSBmcm9tIFwiLi9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2FjaGVTY2hlbWEgfSBmcm9tIFwiLi9wcm92aXNpb24udHNcIjtcbmltcG9ydCB7XG4gIGJpbmROYXRpdmVUZWxlbWV0cnlQcm92aWRlcixcbiAgY29uZmlndXJlTmF0aXZlSHR0cFRlbGVtZXRyeSxcbiAgc3RhbXBIdHRwVHJhY2VVc2VyLFxufSBmcm9tIFwiLi90ZWxlbWV0cnkudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdFwiKTtcblxudHlwZSBBcHBLaXRDcmVhdGVBcHBDb25maWcgPSBOb25OdWxsYWJsZTxQYXJhbWV0ZXJzPHR5cGVvZiBhcHBraXRDcmVhdGVBcHA+WzBdPjtcbnR5cGUgQXBwS2l0UGx1Z2lucyA9IE5vbk51bGxhYmxlPEFwcEtpdENyZWF0ZUFwcENvbmZpZ1tcInBsdWdpbnNcIl0+O1xuXG4vKipcbiAqIFdoYXQgYXV0by1jb25maWd1cmF0aW9uIGRvZXMgYmVmb3JlIEFwcEtpdCBib290cy5cbiAqXG4gKiAtIGBcInByb3Zpc2lvblwiYDogcmVzb2x2ZSB0aGUgTGFrZWJhc2UgY29ubmVjdGlvbiBpbnRvIGBwcm9jZXNzLmVudmAsIHRoZW5cbiAqICAgZ3JhbnQgdGhlIEFwcEtpdCBjYWNoZSBzY2hlbWEgdG8gdGhlIGNvbm5lY3Rpbmcgcm9sZS5cbiAqIC0gYFwiZW52XCJgOiByZXNvbHZlIHRoZSBMYWtlYmFzZSBjb25uZWN0aW9uIGludG8gYHByb2Nlc3MuZW52YCBvbmx5LlxuICpcbiAqIE9taXQgaXQgdG8gcmVzb2x2ZSBkYXRhYmFzZSBlbnZpcm9ubWVudCB3aGVuIGEgbmF0aXZlIGBsYWtlYmFzZWAgb3JcbiAqIGBkYXRhYmFzZWAgcGx1Z2luIGlzIHJlZ2lzdGVyZWQuIEltcGxpY2l0IGNhY2hlLXNjaGVtYSBncmFudHMgcmVtYWluIGdhdGVkIG9uXG4gKiBgbGFrZWJhc2VgOyBgZGF0YWJhc2VgIG93bnMgaXRzIG93biBwb29sIGFuZCBkb2VzIG5vdCBicm9hZGVuIGdyYW50cy4gU2V0IHRoZVxuICogbW9kZSBleHBsaWNpdGx5IHRvIHJ1biByZWdhcmRsZXNzIG9mIHRoZSBwbHVnaW4gbGlzdCwgb3IgcGFzcyBgZmFsc2VgIHRvIHNraXBcbiAqIGF1dG8tY29uZmlndXJhdGlvbiBlbnRpcmVseS5cbiAqXG4gKiBTZXQgaXQgRVhQTElDSVRMWSBvbiBhbiBhcHAgdGhhdCBoYXMgbm8gYGxha2ViYXNlKClgIHBsdWdpbiBidXQgc3RpbGwgd2FudHNcbiAqIEFwcEtpdCdzIFBFUlNJU1RFTlQgY2FjaGUuIEFwcEtpdCBwaWNrcyBMYWtlYmFzZSBmb3IgYENhY2hlTWFuYWdlcmAgb25seSB3aGVuXG4gKiBgY3JlYXRlTGFrZWJhc2VQb29sKClgIGNhbiBidWlsZCBhIHBvb2wsIGFuZCB0aGF0IHJlYWRzIGBMQUtFQkFTRV9FTkRQT0lOVGAgL1xuICogYFBHSE9TVGAgLyBgUEdEQVRBQkFTRWAgc3RyYWlnaHQgZnJvbSBgcHJvY2Vzcy5lbnZgIC0gc28gd2l0aG91dCB0aGlzIHN0ZXAgdGhlXG4gKiBjYWNoZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGluLW1lbW9yeSwgYW5kIGFueXRoaW5nIGl0IGhvbGRzIChhIHNlc3Npb25cbiAqIHNpZ25pbmcga2V5LCBhIG9uZS10aW1lIGNvZGUpIGlzIGxvc3Qgb24gcmVzdGFydC4gYFwiZW52XCJgIGlzIHRoZSByaWdodCBtb2RlXG4gKiB0aGVyZTogdGhlIGFwcCBTUCBjYW5ub3QgZ3JhbnQgb24gdGhlIGNhY2hlIHNjaGVtYSBhbnl3YXkuXG4gKi9cbmV4cG9ydCB0eXBlIEF1dG9Db25maWd1cmVNb2RlID0gXCJlbnZcIiB8IFwicHJvdmlzaW9uXCI7XG5cbi8qKiBBcHBLaXQncyBgY3JlYXRlQXBwYCBjb25maWcgcGx1cyB0aGUgZGJ4LXRvb2xzIGF1dG8tY29uZmlndXJhdGlvbiBzd2l0Y2guICovXG5leHBvcnQgdHlwZSBDcmVhdGVBcHBDb25maWc8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnMgPSBBcHBLaXRQbHVnaW5zPiA9IE9taXQ8XG4gIEFwcEtpdENyZWF0ZUFwcENvbmZpZyxcbiAgXCJwbHVnaW5zXCIgfCBcIm9uUGx1Z2luc1JlYWR5XCJcbj4gJiB7XG4gIHBsdWdpbnM/OiBUO1xuICBvblBsdWdpbnNSZWFkeT86IChhcHBraXQ6IFBsdWdpbk1hcDxUPikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIC8qKiBBdXRvLWNvbmZpZ3VyYXRpb24gdG8gcnVuIGJlZm9yZSBBcHBLaXQgYm9vdHMuIERlZmF1bHRzIHRvIGBcInByb3Zpc2lvblwiYC4gKi9cbiAgYXV0b0NvbmZpZ3VyZT86IEF1dG9Db25maWd1cmVNb2RlIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBPbmUgb3IgbWFueSB7QGxpbmsgSW50ZXJjZXB0b3J9cyBoYW5kZWQgYW4ge0BsaW5rIEludGVyY2VwdG9yQ29udGV4dH0gb25jZVxuICAgKiBhdXRvLWNvbmZpZ3VyYXRpb24gaGFzIGNvbXB1dGVkIHRoZSBlbnYuIEVhY2ggcmVjZWl2ZXMgdGhlIHJlc29sdmVkIGVudiwgYW5cbiAgICogQXBwS2l0IGxpZmVjeWNsZSBob29rLiBTZWUgYC4vaW50ZXJjZXB0b3JgLiBUaGUgdHVubmVsIGlzIHRoZSBwcmltYXJ5XG4gICAqIGNvbnN1bWVyLlxuICAgKi9cbiAgaW50ZXJjZXB0b3I/OiBJbnRlcmNlcHRvciB8IEludGVyY2VwdG9yW107XG59O1xuXG5jb25zdCBMQUtFQkFTRV9QTFVHSU4gPSBcImxha2ViYXNlXCI7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgb24gYm9vdC10aW1lIGF1dG8tY29uZmlndXJhdGlvbi4gSXQgcnVucyBhcyB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAqIGJlZm9yZSBhbnkgcGx1Z2luIGlzIGNvbnN0cnVjdGVkLCBzbyBpdCBzaXRzIG91dHNpZGUgQXBwS2l0J3MgaW50ZXJjZXB0b3JcbiAqIGNoYWluIGFuZCBpbmhlcml0cyBubyB0aW1lb3V0LCByZXRyeSwgb3IgdGVsZW1ldHJ5IGZyb20gaXQuIFRoZSBidWRnZXQgY292ZXJzXG4gKiB0aGUgcmVzb2x2ZXIncyBvd24gd29yc3QgY2FzZSAoY3JlYXRlIGEgcHJvamVjdCwgdGhlbiB3YWl0IGZvciBpdHMgZW5kcG9pbnQpXG4gKiBwbHVzIHRoZSBjYWNoZS1zY2hlbWEgZ3JhbnRzLlxuICovXG5jb25zdCBBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TID0gMTEgKiA2MF8wMDA7XG5cbmZ1bmN0aW9uIHVzZXNQbHVnaW48VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc6IENyZWF0ZUFwcENvbmZpZzxUPiB8IHVuZGVmaW5lZCxcbiAgbmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvbmZpZz8ucGx1Z2lucz8uc29tZSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpKTtcbn1cblxuLyoqIFBsdWdpbiBuYW1lcyBmb3IgYm9vdCBsb2dzIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xuZnVuY3Rpb24gcGx1Z2luTmFtZXMoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoY29uZmlnPy5wbHVnaW5zID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcbn1cblxuLyoqXG4gKiBSdW4gZW5hYmxlZCBhdXRvLWNvbmZpZ3VyYXRpb24gc3RlcHMgd2l0aG91dCBjYWxsaW5nIEFwcEtpdCdzIGBjcmVhdGVBcHBgLlxuICpcbiAqIExha2ViYXNlIFBvc3RncmVzIHJlc29sdmVzIHdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5hdXRvQ29uZmlndXJlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb3IgYSBuYXRpdmUgYGxha2ViYXNlYC9gZGF0YWJhc2VgIHBsdWdpbiBpcyBsaXN0ZWQgaW5cbiAqIGBjb25maWcucGx1Z2luc2AuIGBzaWduYWxgIGNhbmNlbHMgdGhlIHJlc29sdXRpb247IGl0IGlzIGNvbWJpbmVkIHdpdGggYW5cbiAqIGludGVybmFsIGJvb3QgdGltZW91dCBlaXRoZXIgd2F5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiAvLyBQb3B1bGF0ZSBQR0hPU1QgLyBQR0RBVEFCQVNFIC8gTEFLRUJBU0VfRU5EUE9JTlQgd2l0aG91dCBib290aW5nIEFwcEtpdC5cbiAqIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9Db25maWd1cmU8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgYnVuZGxlUHJvZmlsZSA9IGFwcGx5RGVmYXVsdFByb2ZpbGUoKTtcbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbk5hbWVzKGNvbmZpZyk7XG4gIGNvbnN0IHBvbGljeSA9IHJlc29sdmVBdXRvQ29uZmlndXJlUG9saWN5KHBsdWdpbnMsIGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmU6IHN0YXJ0XCIsIHtcbiAgICAuLi5wb2xpY3ksXG4gICAgcGx1Z2lucyxcbiAgICB0aW1lb3V0TXM6IEFVVE9fQ09ORklHVVJFX1RJTUVPVVRfTVMsXG4gICAgY2FsbGVyU2lnbmFsOiBCb29sZWFuKHNpZ25hbCksXG4gIH0pO1xuXG4gIGlmICghcG9saWN5LnNob3VsZFJlc29sdmUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiBza2lwXCIsIHsgLi4ucG9saWN5LCBwbHVnaW5zIH0pO1xuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgYXV0b0NvbmZpZ3VyZTogcG9saWN5Lm1vZGUsXG4gICAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5sYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgICBkYXRhYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5kYXRhYmFzZVBsdWdpblByZXNlbnQsXG4gICAgICBwcm92aXNpb25lZDogZmFsc2UsXG4gICAgICBza2lwcGVkUmVhc29uOiBwb2xpY3kuc2tpcHBlZFJlYXNvbixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgdGllQWJvcnRTaWduYWwoY29udHJvbGxlciwgc2lnbmFsKTtcbiAgdGllQWJvcnRTaWduYWwoY29udHJvbGxlciwgQWJvcnRTaWduYWwudGltZW91dChBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TKSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogcmVzb2x2ZSBsYWtlYmFzZVwiLCB7XG4gICAgcHJvdmlzaW9uOiBwb2xpY3kucHJvdmlzaW9uLFxuICAgIG1vZGU6IHBvbGljeS5tb2RlLFxuICB9KTtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBhdXRvQ29uZmlndXJlTGFrZWJhc2UocG9saWN5LnByb3Zpc2lvbiwgY29udHJvbGxlci5zaWduYWwsIGJ1bmRsZVByb2ZpbGUpO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiBkb25lXCIsIHtcbiAgICBtb2RlOiBwb2xpY3kubW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5sYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgZGF0YWJhc2VQbHVnaW5QcmVzZW50OiBwb2xpY3kuZGF0YWJhc2VQbHVnaW5QcmVzZW50LFxuICAgIHByb3Zpc2lvbmVkOiBwb2xpY3kucHJvdmlzaW9uLFxuICAgIC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksXG4gIH0pO1xuICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICBhdXRvQ29uZmlndXJlOiBwb2xpY3kubW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQ6IHBvbGljeS5sYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgZGF0YWJhc2VQbHVnaW5QcmVzZW50OiBwb2xpY3kuZGF0YWJhc2VQbHVnaW5QcmVzZW50LFxuICAgIHByb3Zpc2lvbmVkOiBwb2xpY3kucHJvdmlzaW9uLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbiBpbmZvLCB3cml0ZSB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvXG4gKiBgcHJvY2Vzcy5lbnZgLCBhbmQgcmV0dXJuIHRoZSByZWNvcmQuIFVzZWQgYnkge0BsaW5rIGF1dG9Db25maWd1cmV9OyBjYWxsXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZUVudn0gZGlyZWN0bHkgd2hlbiBmaW5lciBjb250cm9sIGlzIG5lZWRlZCAoYSBkaWZmZXJlbnRcbiAqIGBhdXRvQ3JlYXRlYCBwb2xpY3ksIG9yIGEgY2FsbGVyIHRoYXQgd2FudHMgdGhlIGVudiB3aXRob3V0IGJvb3RpbmcgQXBwS2l0KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZUxha2ViYXNlKFxuICBwcm92aXNpb246IGJvb2xlYW4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4gIGJ1bmRsZVByb2ZpbGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbj4ge1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGFwcGx5TGFrZWJhc2VFbnZcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZWQsIHVzZXIgfSA9IGF3YWl0IGFwcGx5TGFrZWJhc2VFbnYoeyBidW5kbGVQcm9maWxlIH0sIHNpZ25hbCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmVMYWtlYmFzZTogZW52IGFwcGxpZWRcIiwge1xuICAgIC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksXG4gICAgdXNlcixcbiAgICBlbnY6IHtcbiAgICAgIExBS0VCQVNFX0VORFBPSU5UOiBwcm9jZXNzLmVudi5MQUtFQkFTRV9FTkRQT0lOVCxcbiAgICAgIFBHSE9TVDogcHJvY2Vzcy5lbnYuUEdIT1NULFxuICAgICAgUEdQT1JUOiBwcm9jZXNzLmVudi5QR1BPUlQsXG4gICAgICBQR0RBVEFCQVNFOiBwcm9jZXNzLmVudi5QR0RBVEFCQVNFLFxuICAgICAgUEdVU0VSOiBwcm9jZXNzLmVudi5QR1VTRVIsXG4gICAgICBQR1NTTE1PREU6IHByb2Nlc3MuZW52LlBHU1NMTU9ERSxcbiAgICB9LFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oXCJlbnYgdXBkYXRlZFwiLCB7IC4uLnJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZCksIHVzZXIgfSk7XG4gIGlmIChwcm92aXNpb24pIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHByb3Zpc2lvbkNhY2hlU2NoZW1hXCIsIHsgdXNlciB9KTtcbiAgICBhd2FpdCBwcm92aXNpb25DYWNoZVNjaGVtYSh1c2VyLCBsb2dnZXIpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmVMYWtlYmFzZTogcHJvdmlzaW9uQ2FjaGVTY2hlbWEgZG9uZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHNraXAgcHJvdmlzaW9uIChtb2RlPWVudilcIik7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiBhcHBseURlZmF1bHRQcm9maWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFPy50cmltKCk7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVByb2ZpbGUoY29uZmlndXJlZCA/IHsgcHJvZmlsZTogY29uZmlndXJlZCB9IDoge30pO1xuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkRBVEFCUklDS1NfQ09ORklHX1BST0ZJTEU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFID0gcmVzb2x2ZWQubmFtZTtcbiAgcmV0dXJuIHJlc29sdmVkLm5hbWU7XG59XG5cbi8qKiBXaGV0aGVyIGBjcmVhdGVBcHBgIHNob3VsZCBpbmplY3QgdGhlIGRlZmF1bHQgbWVtb3J5LWZpcnN0IGNhY2hlIHN0b3JhZ2UuICovXG5mdW5jdGlvbiBzaG91bGRJbmplY3RDYWNoZVN0b3JhZ2UoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgY29uc3QgY2FjaGUgPSBjb25maWc/LmNhY2hlO1xuICBpZiAoY2FjaGU/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjYWNoZT8uc3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVkYWN0TGFrZWJhc2VDb25uZWN0aW9uKHJlc29sdmVkOiBMYWtlYmFzZUNvbm5lY3Rpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcHJvamVjdDogcmVzb2x2ZWQucHJvamVjdCxcbiAgICBicmFuY2g6IHJlc29sdmVkLmJyYW5jaCxcbiAgICBlbmRwb2ludDogcmVzb2x2ZWQuZW5kcG9pbnQsXG4gICAgZGF0YWJhc2U6IHJlc29sdmVkLmRhdGFiYXNlLFxuICAgIGhvc3Q6IHJlc29sdmVkLmhvc3QsXG4gICAgcG9ydDogcmVzb2x2ZWQucG9ydCxcbiAgICBzc2xNb2RlOiByZXNvbHZlZC5zc2xNb2RlLFxuICB9O1xufVxuXG4vKiogQnVpbGQgdGhlIHtAbGluayBSZXNvbHZlZEFwcEVudn0gaW50ZXJjZXB0b3JzIHJlYWQsIGZyb20gdGhlIGF1dG8tY29uZmlnIHJlc3VsdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVkQXBwRW52KGxha2ViYXNlOiBMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQpOiBSZXNvbHZlZEFwcEVudiB7XG4gIHJldHVybiB7XG4gICAgLi4uKGxha2ViYXNlID8geyBsYWtlYmFzZSB9IDoge30pLFxuICAgIC4uLihwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0hPU1QgPyB7IGRhdGFicmlja3NIb3N0OiBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0hPU1QgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSB0aGUgYGludGVyY2VwdG9yPzogSW50ZXJjZXB0b3IgfCBJbnRlcmNlcHRvcltdYCBvcHRpb24gdG8gYW4gYXJyYXkuICovXG5mdW5jdGlvbiBpbnRlcmNlcHRvckxpc3QoaW50ZXJjZXB0b3I6IENyZWF0ZUFwcENvbmZpZ1tcImludGVyY2VwdG9yXCJdKTogSW50ZXJjZXB0b3JbXSB7XG4gIGlmICghaW50ZXJjZXB0b3IpIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3IpID8gaW50ZXJjZXB0b3IgOiBbaW50ZXJjZXB0b3JdO1xufVxuXG4vKipcbiAqIEF1dG8tY29uZmlndXJpbmcgZHJvcC1pbiBmb3IgQXBwS2l0J3MgYGNyZWF0ZUFwcGA6IHNhbWUgY29uZmlnLCBzYW1lIHR5cGVkXG4gKiBwbHVnaW4tZXhwb3J0IG1hcCwgd2l0aCB7QGxpbmsgYXV0b0NvbmZpZ3VyZX0gcnVuIGZpcnN0LlxuICpcbiAqIFdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5pbnRlcmNlcHRvcn1zIGFyZSBnaXZlbiwgZWFjaCBpcyBpbnZva2VkIHdpdGggYW5cbiAqIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHR9IEFGVEVSIGF1dG8tY29uZmlndXJhdGlvbiBjb21wdXRlcyB0aGUgZW52IGFuZCBCRUZPUkVcbiAqIEFwcEtpdCBib290cyAtIHNvIGFuIGludGVyY2VwdG9yIGNhbiByZWFkIHRoZSByZXNvbHZlZCBjb25uZWN0aW9uLCByZWdpc3RlclxuICogbGlmZWN5Y2xlIGhhbmRsZXJzLCBhbmQgc3RhcnQgYXV4aWxpYXJ5IHdvcmsuIEEgaGlkZGVuIHtAbGluayBsaWZlY3ljbGVCcmlkZ2V9XG4gKiBwbHVnaW4gaXMgaW5qZWN0ZWQgc28gdGhvc2UgYG9uTGlmZWN5Y2xlYCBoYW5kbGVycyBmaXJlIG9uIHRoZSBnZW51aW5lIEFwcEtpdFxuICogZXZlbnRzOyBpdCBoYXMgbm8gZXhwb3J0cywgc28gdGhlIHJldHVybmVkIHtAbGluayBQbHVnaW5NYXB9IGlzIHVuY2hhbmdlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbGFrZWJhc2UsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGNvbnN0IGFwcCA9IGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoeyBwbHVnaW5zOiBbc2VydmVyKCksIGxha2ViYXNlKCldIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwPFQgZXh0ZW5kcyBBcHBLaXRQbHVnaW5zPihcbiAgY29uZmlnPzogQ3JlYXRlQXBwQ29uZmlnPFQ+LFxuKTogUHJvbWlzZTxQbHVnaW5NYXA8VD4+IHtcbiAgaW5zdGFsbEFzVXNlckRldmVsb3BtZW50UGF0Y2goKTtcbiAgYXdhaXQgY29uZmlndXJlTmF0aXZlSHR0cFRlbGVtZXRyeSh7IHNwYW5Ib29rOiBzdGFtcEh0dHBUcmFjZVVzZXIgfSk7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW5OYW1lcyhjb25maWcpO1xuICBjb25zdCBpbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRvckxpc3QoY29uZmlnPy5pbnRlcmNlcHRvcik7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogc3RhcnRcIiwge1xuICAgIHBsdWdpbnMsXG4gICAgcGx1Z2luQ291bnQ6IHBsdWdpbnMubGVuZ3RoLFxuICAgIGludGVyY2VwdG9yQ291bnQ6IGludGVyY2VwdG9ycy5sZW5ndGgsXG4gICAgYXV0b0NvbmZpZ3VyZTogY29uZmlnPy5hdXRvQ29uZmlndXJlID8/IFwiKGRlZmF1bHQpXCIsXG4gICAgaGFzT25QbHVnaW5zUmVhZHk6IHR5cGVvZiBjb25maWc/Lm9uUGx1Z2luc1JlYWR5ID09PSBcImZ1bmN0aW9uXCIsXG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogYXV0b0NvbmZpZ3VyZVwiKTtcbiAgY29uc3QgYnJhbmRDb250ZXh0ID0gYXdhaXQgbG9hZEJyYW5kQ29udGV4dCgpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGJyYW5kIGNvbnRleHQgbG9hZGVkXCIsIHsgbmFtZTogYnJhbmRDb250ZXh0Lm5hbWUgfSk7XG4gIGNvbnN0IGxha2ViYXNlID0gYXdhaXQgYXV0b0NvbmZpZ3VyZShjb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmUgcmV0dXJuZWRcIiwge1xuICAgIGxha2ViYXNlOiBsYWtlYmFzZSA/IHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihsYWtlYmFzZSkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGFwcENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIGRlbGV0ZSBhcHBDb25maWcuYXV0b0NvbmZpZ3VyZTtcbiAgZGVsZXRlIGFwcENvbmZpZy5pbnRlcmNlcHRvcjtcbiAgY29uc3Qgb25QbHVnaW5zUmVhZHkgPSBhcHBDb25maWcub25QbHVnaW5zUmVhZHk7XG4gIGFwcENvbmZpZy5vblBsdWdpbnNSZWFkeSA9IGFzeW5jIChhcHApID0+IHtcbiAgICBjb25zdCBib3VuZCA9IGF3YWl0IGJpbmROYXRpdmVUZWxlbWV0cnlQcm92aWRlcigpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogbmF0aXZlIHRlbGVtZXRyeSBwcm92aWRlciBiaW5kaW5nXCIsIHsgYm91bmQgfSk7XG4gICAgYXdhaXQgb25QbHVnaW5zUmVhZHk/LihhcHApO1xuICB9O1xuXG4gIGlmIChzaG91bGRJbmplY3RDYWNoZVN0b3JhZ2UoY29uZmlnKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW5qZWN0IG1lbW9yeS1maXJzdCBjYWNoZSBzdG9yYWdlXCIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2Uoe1xuICAgICAgY2FjaGU6IGNvbmZpZz8uY2FjaGUsXG4gICAgICBwcmVmZXJMYWtlYmFzZTogQm9vbGVhbihsYWtlYmFzZSkgfHwgdXNlc1BsdWdpbihjb25maWcsIExBS0VCQVNFX1BMVUdJTiksXG4gICAgfSk7XG4gICAgYXBwQ29uZmlnLmNhY2hlID0geyAuLi5jb25maWc/LmNhY2hlLCBzdG9yYWdlIH07XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBtZW1vcnktZmlyc3QgY2FjaGUgc3RvcmFnZSByZWFkeVwiLCB7XG4gICAgICBwZXJzaXN0ZW50OiBzdG9yYWdlLmlzUGVyc2lzdGVudCgpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IG5vIGludGVyY2VwdG9yczsgZGVsZWdhdGluZyB0byBBcHBLaXQgY3JlYXRlQXBwXCIsIHtcbiAgICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwa2l0Q3JlYXRlQXBwPFQ+KGFwcENvbmZpZyk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICAgIGV4cG9ydEtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCA/PyB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbXB1dGVkIGVudiwgcnVuIGVhY2ggaW50ZXJjZXB0b3IgKHRoZXkgcmVnaXN0ZXJcbiAgLy8gbGlmZWN5Y2xlIGhhbmRsZXJzICsgYmluZCBwcm9jZXNzZXMpLCB0aGVuIGluamVjdCB0aGUgYnJpZGdlIHRoYXQgcmVsYXlzIHRoZVxuICAvLyBSRUFMIEFwcEtpdCBsaWZlY3ljbGUgaW50byBgcnVudGltZS5lbWl0TGlmZWN5Y2xlYCBkdXJpbmcgaXRzIGBzZXR1cCgpYC5cbiAgY29uc3QgZW52ID0gcmVzb2x2ZWRBcHBFbnYobGFrZWJhc2UpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGludGVyY2VwdG9yIGNvbnRleHRcIiwge1xuICAgIGhhc0xha2ViYXNlOiBCb29sZWFuKGVudi5sYWtlYmFzZSksXG4gICAgZGF0YWJyaWNrc0hvc3Q6IGVudi5kYXRhYnJpY2tzSG9zdCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICB9KTtcbiAgY29uc3QgcnVudGltZTogSW50ZXJjZXB0b3JSdW50aW1lID0gY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0KGVudik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJjZXB0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBydW4gaW50ZXJjZXB0b3JcIiwgeyBpbmRleDogaSwgb2Y6IGludGVyY2VwdG9ycy5sZW5ndGggfSk7XG4gICAgYXdhaXQgaW50ZXJjZXB0b3JzW2ldIShydW50aW1lLmNvbnRleHQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW50ZXJjZXB0b3IgZG9uZVwiLCB7IGluZGV4OiBpIH0pO1xuICB9XG4gIC8vIEFwcGVuZCB0aGUgYnJpZGdlIHRvIHRoZSBwbHVnaW5zIHR1cGxlLiBJdCBpcyBoaWRkZW4gYW5kIGV4cG9ydHMgbm90aGluZywgc29cbiAgLy8gdGhlIHJldHVybmVkIG1hcCBzdGlsbCBtYXRjaGVzIGBQbHVnaW5NYXA8VD5gOyB0aGUgY2FzdCAodGhyb3VnaCBgdW5rbm93bmApIGlzXG4gIC8vIG9ubHkgYmVjYXVzZSBhcHBlbmRpbmcgd2lkZW5zIHRoZSB0dXBsZSB0eXBlIGJleW9uZCBgVGAuXG4gIGFwcENvbmZpZy5wbHVnaW5zID0gWy4uLihhcHBDb25maWcucGx1Z2lucyA/PyBbXSksIGxpZmVjeWNsZUJyaWRnZSh7IHJ1bnRpbWUgfSldIGFzIHVua25vd24gYXMgVDtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBsaWZlY3ljbGUgYnJpZGdlIGluamVjdGVkOyBkZWxlZ2F0aW5nIHRvIEFwcEtpdCBjcmVhdGVBcHBcIiwge1xuICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBraXRDcmVhdGVBcHA8VD4oYXBwQ29uZmlnKTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICBleHBvcnRLZXlzOiBPYmplY3Qua2V5cyhyZXN1bHQgPz8ge30pLFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgQXBwS2l0IHBlci1yZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IHJldHVybmVkIGJ5IGBnZXRFeGVjdXRpb25Db250ZXh0KClgXG4gKiAtIHRoZSBPQk8tc2NvcGVkIHdvcmtzcGFjZSBjbGllbnQgcGx1cyB0aGUgc3Vycm91bmRpbmcgcmVxdWVzdCBtZXRhZGF0YS5cbiAqIERlcml2ZWQgZnJvbSBBcHBLaXQncyBvd24gcmV0dXJuIHR5cGUgc28gaXQgdHJhY2tzIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiwgYW5kXG4gKiByZS1leHBvcnRlZCBoZXJlIHNvIGFkZC1vbiBwYWNrYWdlcyBjYW4gdHlwZSBhIGNvbnRleHQgcGFyYW1ldGVyIHdpdGhvdXQgZWFjaFxuICogcmUtZGVyaXZpbmcgdGhlIHNhbWUgYFJldHVyblR5cGU8dHlwZW9mIGdldEV4ZWN1dGlvbkNvbnRleHQ+YCBpbmxpbmUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkNvbnRleHRMaWtlID0gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD47XG5cbi8qKlxuICogVGhlIGF1dGgtc2NvcGVkIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudCBjYXJyaWVkIG9uIGFuXG4gKiBgRXhlY3V0aW9uQ29udGV4dExpa2VgIChgZ2V0RXhlY3V0aW9uQ29udGV4dCgpLmNsaWVudGApLiBUeXBlZCBzdHJ1Y3R1cmFsbHlcbiAqIG9mZiBBcHBLaXQgc28gY29uc3VtZXJzIGRvbid0IHRha2UgYSBkaXJlY3QgYEBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxgXG4gKiBkZXBlbmRlbmN5IC0gdGhlIGRlcCBmbG93cyBpbiB0cmFuc2l0aXZlbHkgdGhyb3VnaCBgQGRhdGFicmlja3MvYXBwa2l0YC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ2xpZW50TGlrZSA9IEV4ZWN1dGlvbkNvbnRleHRMaWtlW1wiY2xpZW50XCJdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IEFwcEtpdCBleGVjdXRpb24gY29udGV4dCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBBcHBLaXQgaXNuJ3RcbiAqIGluaXRpYWxpemVkIChvdXRzaWRlIGEgcmVxdWVzdCBzY29wZSkuIFN3YWxsb3dzIEFwcEtpdCdzXG4gKiB7QGxpbmsgSW5pdGlhbGl6YXRpb25FcnJvcn07IGFueSBvdGhlciBlcnJvciBwcm9wYWdhdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqXG4gKiAvLyBPQk8tc2NvcGVkIGluc2lkZSBhIHJlcXVlc3QsIHNlcnZpY2UgcHJpbmNpcGFsIGZyb20gYSBDTEkgb3Igc2NyaXB0LlxuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpOiBFeGVjdXRpb25Db250ZXh0TGlrZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmIChjdHg/LmNsaWVudCkge1xuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBJbml0aWFsaXphdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIGJhcmUgQXBwS2l0IGFwcCAobm8gcGx1Z2lucykgd2hlbiBub25lIGlzIHJ1bm5pbmcgeWV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAqIGNvbnN0IGNsaWVudCA9IGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudDtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBib290aW5nIGJhcmUgQXBwS2l0IGFwcFwiKTtcbiAgYXdhaXQgY3JlYXRlQXBwKHsgcGx1Z2luczogW10sIGF1dG9Db25maWd1cmU6IGZhbHNlIH0pO1xuICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogYmFyZSBBcHBLaXQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcIik7XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { brandFiles } from "@dbx-tools/core";
2
- import { brandUtils } from "@dbx-tools/shared-core";
3
- let activeBrandContext = brandUtils.defaultBrandContext;
2
+ import { defaultBrandContext } from "@dbx-tools/shared-core";
3
+ let activeBrandContext = defaultBrandContext;
4
4
  /** Load and activate the brand context found from the supplied directory. */
5
5
  export async function loadBrandContext(cwd = process.cwd()) {
6
6
  activeBrandContext = await brandFiles.loadBrandContext(cwd);
@@ -10,4 +10,4 @@ export async function loadBrandContext(cwd = process.cwd()) {
10
10
  export function getBrandContext() {
11
11
  return activeBrandContext;
12
12
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9icmFuZC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBRXZFLElBQUksa0JBQWtCLEdBQWlCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztBQUV0RSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDaEUsa0JBQWtCLEdBQUcsTUFBTSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJyYW5kRmlsZXMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBicmFuZFV0aWxzLCB0eXBlIEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmxldCBhY3RpdmVCcmFuZENvbnRleHQ6IEJyYW5kQ29udGV4dCA9IGJyYW5kVXRpbHMuZGVmYXVsdEJyYW5kQ29udGV4dDtcblxuLyoqIExvYWQgYW5kIGFjdGl2YXRlIHRoZSBicmFuZCBjb250ZXh0IGZvdW5kIGZyb20gdGhlIHN1cHBsaWVkIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnJhbmRDb250ZXh0KGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8QnJhbmRDb250ZXh0PiB7XG4gIGFjdGl2ZUJyYW5kQ29udGV4dCA9IGF3YWl0IGJyYW5kRmlsZXMubG9hZEJyYW5kQ29udGV4dChjd2QpO1xuICByZXR1cm4gYWN0aXZlQnJhbmRDb250ZXh0O1xufVxuXG4vKiogUmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJyYW5kIGNvbnRleHQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJhbmRDb250ZXh0KCk6IEJyYW5kQ29udGV4dCB7XG4gIHJldHVybiBhY3RpdmVCcmFuZENvbnRleHQ7XG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9icmFuZC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEYsSUFBSSxrQkFBa0IsR0FBaUIsbUJBQW1CLENBQUM7QUFFM0QsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBYyxPQUFPLENBQUMsR0FBRyxFQUFFO0lBQ2hFLGtCQUFrQixHQUFHLE1BQU0sVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicmFuZEZpbGVzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBCcmFuZENvbnRleHQsIGRlZmF1bHRCcmFuZENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5sZXQgYWN0aXZlQnJhbmRDb250ZXh0OiBCcmFuZENvbnRleHQgPSBkZWZhdWx0QnJhbmRDb250ZXh0O1xuXG4vKiogTG9hZCBhbmQgYWN0aXZhdGUgdGhlIGJyYW5kIGNvbnRleHQgZm91bmQgZnJvbSB0aGUgc3VwcGxpZWQgZGlyZWN0b3J5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRCcmFuZENvbnRleHQoY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTxCcmFuZENvbnRleHQ+IHtcbiAgYWN0aXZlQnJhbmRDb250ZXh0ID0gYXdhaXQgYnJhbmRGaWxlcy5sb2FkQnJhbmRDb250ZXh0KGN3ZCk7XG4gIHJldHVybiBhY3RpdmVCcmFuZENvbnRleHQ7XG59XG5cbi8qKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmQgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmFuZENvbnRleHQoKTogQnJhbmRDb250ZXh0IHtcbiAgcmV0dXJuIGFjdGl2ZUJyYW5kQ29udGV4dDtcbn1cbiJdfQ==
@@ -14,7 +14,7 @@
14
14
  * @module
15
15
  */
16
16
  import { createLakebasePool, type CacheConfig } from "@databricks/appkit";
17
- import { createCache } from "@dbx-tools/cache/cache";
17
+ import { createCache } from "@dbx-tools/cache";
18
18
  type LakebasePool = ReturnType<typeof createLakebasePool>;
19
19
  type CacheStorage = NonNullable<CacheConfig["storage"]>;
20
20
  interface CacheEntry<T = unknown> {