@dbx-tools/auth 0.9.51 → 0.9.58

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/README.md CHANGED
@@ -5,8 +5,9 @@ Node.js and Bun.
5
5
 
6
6
  The package resolves profile configuration, selects PAT, M2M, CLI U2M, App
7
7
  service-principal, or App OBO authentication, and coordinates token acquisition
8
- in process memory. It does not own workspace HTTP APIs or construct Databricks
9
- SDK clients.
8
+ in process memory. Generated Python bindings can also accept authentication from
9
+ the shared Python runtime. The Node package does not own workspace HTTP APIs or
10
+ construct Databricks SDK clients.
10
11
 
11
12
  ## Features
12
13
 
@@ -14,9 +15,11 @@ SDK clients.
14
15
  - Secret-free configured profile enumeration.
15
16
  - CLI-backed U2M token and login commands.
16
17
  - Direct PAT, M2M, App service-principal, and request-scoped App OBO tokens.
18
+ - Automatic Python SDK runtime authentication for empty binding options.
17
19
  - Check-lock-recheck token acquisition and explicit token refresh.
18
20
  - Authentication headers with the resolved workspace ID when available.
19
- - No SDK, generic HTTP client, executable installer, or persistent token cache.
21
+ - No JavaScript SDK, generic HTTP client, executable installer, or persistent
22
+ token cache.
20
23
 
21
24
  CLI-backed U2M requires an available `databricks` executable or an explicit
22
25
  `DATABRICKS_CLI_PATH`. The Databricks CLI remains responsible for its own login
@@ -39,6 +42,11 @@ const profiles = profile.listProfiles();
39
42
  `{ login: false }` to token or authentication acquisition to disable
40
43
  interactive login. Pass `{ refresh: true }` to bypass a reusable cached token.
41
44
 
45
+ When this package runs through a generated Python binding in a Databricks
46
+ notebook or Job, `createAuthClient()` with no profile or credential options uses
47
+ the Python SDK's default `WorkspaceClient`. Explicit options continue through
48
+ the normal profile, PAT, M2M, CLI, or App paths.
49
+
42
50
  Browser and UI code should import auth-type values, target values, profile
43
51
  summaries, profile selections, and client-configuration schemas from
44
52
  `@dbx-tools/shared-auth`.
package/index.ts CHANGED
@@ -3,12 +3,14 @@
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/auth";
6
- export const PACKAGE_VERSION = "0.9.51";
6
+ export const PACKAGE_VERSION = "0.9.58";
7
7
  export * as bindings from "./src/bindings.ts";
8
8
  export * as client from "./src/client.ts";
9
9
  export * as config from "./src/config.ts";
10
10
  export * as profile from "./src/profile.ts";
11
+ export * as runtimeAuth from "./src/runtime-auth.ts";
11
12
  export type { AccessToken, TokenOptions, AuthClient, DatabricksAuthDependencies } from "./src/client.ts";
12
13
  export { AuthOptionsSchema, DatabricksAuthOptionsSchema, AUTH_DEFAULTS, DEFAULT_CLIENT_ID, DEFAULT_CONFIG_FILE, DEFAULT_ACCESS_TOKEN_HEADER, WORKSPACE_ID_HEADER } from "./src/config.ts";
13
14
  export type { AuthOptions, DatabricksAuthOptions } from "./src/config.ts";
14
15
  export type { ListProfilesOptions } from "./src/profile.ts";
16
+ export type { DatabricksRuntimeAuthClient } from "./src/runtime-auth.ts";
package/lib/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/auth";
2
- export declare const PACKAGE_VERSION = "0.9.51";
2
+ export declare const PACKAGE_VERSION = "0.9.58";
3
3
  export * as bindings from "./src/bindings.ts";
4
4
  export * as client from "./src/client.ts";
5
5
  export * as config from "./src/config.ts";
6
6
  export * as profile from "./src/profile.ts";
7
+ export * as runtimeAuth from "./src/runtime-auth.ts";
7
8
  export type { AccessToken, TokenOptions, AuthClient, DatabricksAuthDependencies } from "./src/client.ts";
8
9
  export { AuthOptionsSchema, DatabricksAuthOptionsSchema, AUTH_DEFAULTS, DEFAULT_CLIENT_ID, DEFAULT_CONFIG_FILE, DEFAULT_ACCESS_TOKEN_HEADER, WORKSPACE_ID_HEADER } from "./src/config.ts";
9
10
  export type { AuthOptions, DatabricksAuthOptions } from "./src/config.ts";
10
11
  export type { ListProfilesOptions } from "./src/profile.ts";
12
+ export type { DatabricksRuntimeAuthClient } from "./src/runtime-auth.ts";
package/lib/index.js CHANGED
@@ -2,10 +2,11 @@
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/auth";
5
- export const PACKAGE_VERSION = "0.9.51";
5
+ export const PACKAGE_VERSION = "0.9.58";
6
6
  export * as bindings from "./src/bindings.js";
7
7
  export * as client from "./src/client.js";
8
8
  export * as config from "./src/config.js";
9
9
  export * as profile from "./src/profile.js";
10
+ export * as runtimeAuth from "./src/runtime-auth.js";
10
11
  export { AuthOptionsSchema, DatabricksAuthOptionsSchema, AUTH_DEFAULTS, DEFAULT_CLIENT_ID, DEFAULT_CONFIG_FILE, DEFAULT_ACCESS_TOKEN_HEADER, WORKSPACE_ID_HEADER } from "./src/config.js";
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hdXRoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNTFcIjtcbmV4cG9ydCAqIGFzIGJpbmRpbmdzIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBwcm9maWxlIGZyb20gXCIuL3NyYy9wcm9maWxlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFjY2Vzc1Rva2VuLCBUb2tlbk9wdGlvbnMsIEF1dGhDbGllbnQsIERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0IHsgQXV0aE9wdGlvbnNTY2hlbWEsIERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYSwgQVVUSF9ERUZBVUxUUywgREVGQVVMVF9DTElFTlRfSUQsIERFRkFVTFRfQ09ORklHX0ZJTEUsIERFRkFVTFRfQUNDRVNTX1RPS0VOX0hFQURFUiwgV09SS1NQQUNFX0lEX0hFQURFUiB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aE9wdGlvbnMsIERhdGFicmlja3NBdXRoT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGlzdFByb2ZpbGVzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9wcm9maWxlLnRzXCI7XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2F1dGhcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS41OFwiO1xuZXhwb3J0ICogYXMgYmluZGluZ3MgZnJvbSBcIi4vc3JjL2JpbmRpbmdzLnRzXCI7XG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIHByb2ZpbGUgZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIHJ1bnRpbWVBdXRoIGZyb20gXCIuL3NyYy9ydW50aW1lLWF1dGgudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWNjZXNzVG9rZW4sIFRva2VuT3B0aW9ucywgQXV0aENsaWVudCwgRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBBdXRoT3B0aW9uc1NjaGVtYSwgRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLCBBVVRIX0RFRkFVTFRTLCBERUZBVUxUX0NMSUVOVF9JRCwgREVGQVVMVF9DT05GSUdfRklMRSwgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLCBXT1JLU1BBQ0VfSURfSEVBREVSIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoT3B0aW9ucywgRGF0YWJyaWNrc0F1dGhPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBMaXN0UHJvZmlsZXNPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1J1bnRpbWVBdXRoQ2xpZW50IH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUtYXV0aC50c1wiO1xuIl19
@@ -70,15 +70,25 @@ export function parseDatabricksConfig(source) {
70
70
  if (!name.trim() || !object.isRecord(value)) {
71
71
  throw new AuthError("config", "Databricks configuration values must belong to a profile");
72
72
  }
73
- const section = new Map();
74
- for (const [key, entry] of Object.entries(value)) {
75
- if (entry === undefined || entry === null)
76
- continue;
73
+ _appendConfigSections(config, [name.trim()], value);
74
+ }
75
+ return config;
76
+ }
77
+ function _appendConfigSections(config, path, value) {
78
+ const section = new Map();
79
+ let nested = false;
80
+ for (const [key, entry] of Object.entries(value)) {
81
+ if (object.isRecord(entry)) {
82
+ nested = true;
83
+ _appendConfigSections(config, [...path, key], entry);
84
+ }
85
+ else if (entry !== undefined && entry !== null) {
77
86
  section.set(key.trim().toLowerCase(), String(entry).trim());
78
87
  }
79
- config.set(name.trim(), section);
80
88
  }
81
- return config;
89
+ if (section.size || !nested) {
90
+ config.set(path.join("."), section);
91
+ }
82
92
  }
83
93
  export function loadRawProfile(config, name) {
84
94
  const section = config?.get(name);
@@ -300,16 +310,22 @@ export function listDatabricksProfiles(configFile, refresh = false, environment
300
310
  /** Resolve options, environment, request headers, and configuration into credentials. */
301
311
  export function resolveDatabricksProfile(options, environment = process.env) {
302
312
  const inApp = environmentUtils.isDatabricksAppEnv({ ...environment });
303
- const environmentProfile = stringUtils.trimToUndefined(environment.DATABRICKS_CONFIG_PROFILE);
304
- const explicitProfile = Boolean(stringUtils.trimToUndefined(options.profile) ?? environmentProfile);
305
- const requestToken = requestOboToken(options.requestHeaders, options.accessTokenHeader);
306
- const explicitAuthType = options.authType ??
307
- (!inApp && !explicitProfile ? parseAuthType(environment.DATABRICKS_AUTH_TYPE) : undefined);
313
+ const configPath = resolveConfigFile(options.configFile, environment);
314
+ const config = loadConfig(options.configFile, false, environment);
315
+ const optionProfile = stringUtils.trimToUndefined(options.profile);
316
+ const configuredEnvironmentProfile = stringUtils.trimToUndefined(environment.DATABRICKS_CONFIG_PROFILE);
317
+ const environmentProfile = configuredEnvironmentProfile && config?.has(configuredEnvironmentProfile)
318
+ ? configuredEnvironmentProfile
319
+ : undefined;
308
320
  const appServicePrincipal = [
309
321
  environment.DATABRICKS_HOST,
310
322
  environment.DATABRICKS_CLIENT_ID,
311
323
  environment.DATABRICKS_CLIENT_SECRET,
312
324
  ].every((value) => Boolean(stringUtils.trimToUndefined(value)));
325
+ const explicitProfile = Boolean(optionProfile ?? environmentProfile);
326
+ const requestToken = requestOboToken(options.requestHeaders, options.accessTokenHeader);
327
+ const explicitAuthType = options.authType ??
328
+ (!inApp && !explicitProfile ? parseAuthType(environment.DATABRICKS_AUTH_TYPE) : undefined);
313
329
  const selectedAuthType = !inApp || explicitProfile || explicitAuthType
314
330
  ? explicitAuthType
315
331
  : requestToken
@@ -320,9 +336,7 @@ export function resolveDatabricksProfile(options, environment = process.env) {
320
336
  const appAuth = selectedAuthType === AuthType.AppOnBehalfOf ||
321
337
  selectedAuthType === AuthType.AppServicePrincipal;
322
338
  const ignoreAmbientCredentials = explicitProfile && !appAuth;
323
- const configPath = resolveConfigFile(options.configFile, environment);
324
- const config = loadConfig(options.configFile, false, environment);
325
- const requestedName = stringUtils.trimToUndefined(options.profile) ?? environmentProfile;
339
+ const requestedName = optionProfile ?? environmentProfile;
326
340
  const profileName = resolveProfileName(requestedName, explicitProfile, config, options.preferUserToMachine ?? true);
327
341
  const ambientCredentials = [
328
342
  options.accessToken,
@@ -333,9 +347,10 @@ export function resolveDatabricksProfile(options, environment = process.env) {
333
347
  environment.DATABRICKS_CLIENT_SECRET,
334
348
  ].some((value) => Boolean(stringUtils.trimToUndefined(value)));
335
349
  const selectedProfile = explicitProfile || (!ambientCredentials && config?.has(profileName)) ? profileName : undefined;
336
- const configured = loadRawProfile(config, profileName);
350
+ const configured = selectedProfile ? loadRawProfile(config, profileName) : {};
351
+ const credentialName = selectedProfile ?? "ambient";
337
352
  const ambient = (name) => ignoreAmbientCredentials ? undefined : stringUtils.trimToUndefined(environment[name]);
338
- const host = normalizeHost(options.host ?? ambient("DATABRICKS_HOST") ?? configured.host, profileName);
353
+ const host = normalizeHost(options.host ?? ambient("DATABRICKS_HOST") ?? configured.host, credentialName);
339
354
  const accountId = stringUtils.trimToUndefined(options.accountId) ??
340
355
  ambient("DATABRICKS_ACCOUNT_ID") ??
341
356
  stringUtils.trimToUndefined(configured.accountId);
@@ -360,7 +375,7 @@ export function resolveDatabricksProfile(options, environment = process.env) {
360
375
  const clientId = authType === AuthType.DatabricksCli
361
376
  ? (clientIdValue ?? DEFAULT_CLIENT_ID)
362
377
  : authType === AuthType.OAuthM2M || authType === AuthType.AppServicePrincipal
363
- ? (clientIdValue ?? missing(profileName, "client_id"))
378
+ ? (clientIdValue ?? missing(credentialName, "client_id"))
364
379
  : (clientIdValue ?? "");
365
380
  const scopes = options.scopes?.length
366
381
  ? stringUtils.parseList(options.scopes)
@@ -371,9 +386,9 @@ export function resolveDatabricksProfile(options, environment = process.env) {
371
386
  stringUtils.trimToUndefined(configured.groupId);
372
387
  const principal = authType === AuthType.OAuthM2M || authType === AuthType.AppServicePrincipal
373
388
  ? clientId
374
- : profileName;
389
+ : credentialName;
375
390
  const cacheKey = credentialCacheKey({
376
- name: profileName,
391
+ name: credentialName,
377
392
  host,
378
393
  accountId,
379
394
  workspaceId,
@@ -384,7 +399,7 @@ export function resolveDatabricksProfile(options, environment = process.env) {
384
399
  accessToken,
385
400
  });
386
401
  logger.debug("resolved Databricks profile", {
387
- profile: profileName,
402
+ profile: credentialName,
388
403
  host,
389
404
  authType,
390
405
  target,
@@ -398,7 +413,7 @@ export function resolveDatabricksProfile(options, environment = process.env) {
398
413
  configPath,
399
414
  });
400
415
  return {
401
- name: profileName,
416
+ name: credentialName,
402
417
  ...(selectedProfile ? { selectedProfile } : {}),
403
418
  host,
404
419
  ...(accountId ? { accountId } : {}),
@@ -440,4 +455,4 @@ function credentialCacheKey(profile) {
440
455
  const digest = createHash("sha256").update(identity).digest("hex");
441
456
  return `${profile.name}-${profile.authType === AuthType.AppServicePrincipal ? "app-sp" : "oauth-m2m"}-${digest}`;
442
457
  }
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3Byb2ZpbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19wcm9maWxlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssV0FBVyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUVMLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQWlCL0MsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFB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LENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7YUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxRQUFRLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLGFBQWE7UUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ2xGLE1BQU0sUUFBUSxHQUFHO1FBQ2YsT0FBTyxDQUFDLElBQUk7UUFDWixPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7UUFDdkIsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxRQUFRO1FBQ2hCLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTtRQUNyQixhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDeEMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksTUFBTSxFQUFFLENBQUM7QUFDbkgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvY29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFicmlja3NQcm9maWxlU3VtbWFyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1hdXRoL3Byb2ZpbGVcIjtcbmltcG9ydCAqIGFzIGVudmlyb25tZW50VXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvZW52aXJvbm1lbnQtdXRpbHNcIjtcbmltcG9ydCAqIGFzIG9iamVjdCBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9vYmplY3RcIjtcbmltcG9ydCAqIGFzIHN0cmluZ1V0aWxzIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL3N0cmluZy11dGlsc1wiO1xuaW1wb3J0IHsgdHJpbVRvVW5kZWZpbmVkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvc3RyaW5nLXV0aWxzXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZUluaSB9IGZyb20gXCJpbmlcIjtcblxuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSBcIi4vX2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgYXV0aExvZ2dlciB9IGZyb20gXCIuL19sb2dnaW5nLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFicmlja3NQcm9maWxlIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5pbXBvcnQge1xuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLFxuICBERUZBVUxUX0NMSUVOVF9JRCxcbiAgREVGQVVMVF9DT05GSUdfRklMRSxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGF1dGhMb2dnZXIoXCJwcm9maWxlLXNlbGVjdGlvblwiKTtcbmNvbnN0IGNvbmZpZ0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEluaUNvbmZpZyB8IEVycm9yIHwgdW5kZWZpbmVkPigpO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU0VDVElPTiA9IFwiX19zZXR0aW5nc19fXCI7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj47XG5leHBvcnQgdHlwZSBJbmlDb25maWcgPSBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PjtcblxuZXhwb3J0IGludGVyZmFjZSBSYXdQcm9maWxlIHtcbiAgaG9zdD86IHN0cmluZztcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICB3b3Jrc3BhY2VJZD86IHN0cmluZztcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIGdyb3VwSWQ/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZztcbiAgYXV0aFR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBzZWxlY3RlZCBEYXRhYnJpY2tzIGNvbmZpZ3VyYXRpb24gcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZmlnRmlsZShcbiAgZXhwbGljaXQ/OiBzdHJpbmcsXG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VsZWN0ZWQgPVxuICAgIHRyaW1Ub1VuZGVmaW5lZChleHBsaWNpdCkgPz9cbiAgICB0cmltVG9VbmRlZmluZWQoZW52aXJvbm1lbnQuREFUQUJSSUNLU19DT05GSUdfRklMRSkgPz9cbiAgICBERUZBVUxUX0NPTkZJR19GSUxFO1xuICBjb25zdCBleHBhbmRlZCA9XG4gICAgc2VsZWN0ZWQgPT09IFwiflwiXG4gICAgICA/IGhvbWVkaXIoKVxuICAgICAgOiBzZWxlY3RlZC5zdGFydHNXaXRoKFwifi9cIilcbiAgICAgICAgPyByZXNvbHZlKGhvbWVkaXIoKSwgc2VsZWN0ZWQuc2xpY2UoMikpXG4gICAgICAgIDogc2VsZWN0ZWQ7XG4gIHJldHVybiBpc0Fic29sdXRlKGV4cGFuZGVkKSA/IGV4cGFuZGVkIDogcmVzb2x2ZShleHBhbmRlZCk7XG59XG5cbi8qKiBMb2FkIGFuZCBjYWNoZSB0aGUgc2VsZWN0ZWQgRGF0YWJyaWNrcyBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoXG4gIGNvbmZpZ0ZpbGU/OiBzdHJpbmcsXG4gIHJlZnJlc2ggPSBmYWxzZSxcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYsXG4pOiBJbmlDb25maWcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZUNvbmZpZ0ZpbGUoY29uZmlnRmlsZSwgZW52aXJvbm1lbnQpO1xuICBpZiAocmVmcmVzaCkgY29uZmlnQ2FjaGUuZGVsZXRlKHBhdGgpO1xuICBpZiAoY29uZmlnQ2FjaGUuaGFzKHBhdGgpKSB7XG4gICAgY29uc3QgY2FjaGVkID0gY29uZmlnQ2FjaGUuZ2V0KHBhdGgpO1xuICAgIGlmIChjYWNoZWQgaW5zdGFuY2VvZiBFcnJvcikgdGhyb3cgY2FjaGVkO1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cbiAgaWYgKCFleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgY29uZmlnQ2FjaGUuc2V0KHBhdGgsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHBhcnNlRGF0YWJyaWNrc0NvbmZpZyhyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpKTtcbiAgICBjb25maWdDYWNoZS5zZXQocGF0aCwgY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGNvbnN0IGVycm9yID1cbiAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVzZSA6IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgYENvdWxkIG5vdCByZWFkICR7cGF0aH1gLCB7IGNhdXNlIH0pO1xuICAgIGNvbmZpZ0NhY2hlLnNldChwYXRoLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqIEludmFsaWRhdGUgY2FjaGVkIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgYW4gZXh0ZXJuYWwgd3JpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gaW52YWxpZGF0ZUNvbmZpZ0ZpbGUoY29uZmlnRmlsZT86IHN0cmluZyk6IHZvaWQge1xuICBjb25maWdDYWNoZS5kZWxldGUocmVzb2x2ZUNvbmZpZ0ZpbGUoY29uZmlnRmlsZSkpO1xufVxuXG4vKiogUGFyc2UgRGF0YWJyaWNrcyBJTkkgdGV4dCB0aHJvdWdoIHRoZSBtYWludGFpbmVkIGBpbmlgIHBhY2thZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRhYnJpY2tzQ29uZmlnKHNvdXJjZTogc3RyaW5nKTogSW5pQ29uZmlnIHtcbiAgbGV0IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gcGFyc2VJbmkoc291cmNlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiRGF0YWJyaWNrcyBjb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCBJTklcIiwgeyBjYXVzZSB9KTtcbiAgfVxuICBjb25zdCBjb25maWc6IEluaUNvbmZpZyA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICBpZiAoIW5hbWUudHJpbSgpIHx8ICFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiRGF0YWJyaWNrcyBjb25maWd1cmF0aW9uIHZhbHVlcyBtdXN0IGJlbG9uZyB0byBhIHByb2ZpbGVcIik7XG4gICAgfVxuICAgIGNvbnN0IHNlY3Rpb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQgfHwgZW50cnkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgc2VjdGlvbi5zZXQoa2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBTdHJpbmcoZW50cnkpLnRyaW0oKSk7XG4gICAgfVxuICAgIGNvbmZpZy5zZXQobmFtZS50cmltKCksIHNlY3Rpb24pO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmF3UHJvZmlsZShjb25maWc6IEluaUNvbmZpZyB8IHVuZGVmaW5lZCwgbmFtZTogc3RyaW5nKTogUmF3UHJvZmlsZSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBjb25maWc/LmdldChuYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBob3N0OiBzZWN0aW9uPy5nZXQoXCJob3N0XCIpLFxuICAgIGFjY291bnRJZDogc2VjdGlvbj8uZ2V0KFwiYWNjb3VudF9pZFwiKSxcbiAgICB3b3Jrc3BhY2VJZDogc2VjdGlvbj8uZ2V0KFwid29ya3NwYWNlX2lkXCIpLFxuICAgIGNsaWVudElkOiBzZWN0aW9uPy5nZXQoXCJjbGllbnRfaWRcIiksXG4gICAgY2xpZW50U2VjcmV0OiBzZWN0aW9uPy5nZXQoXCJjbGllbnRfc2VjcmV0XCIpLFxuICAgIGFjY2Vzc1Rva2VuOiBzZWN0aW9uPy5nZXQoXCJ0b2tlblwiKSxcbiAgICBncm91cElkOiBzZWN0aW9uPy5nZXQoXCJncm91cF9pZFwiKSxcbiAgICBzY29wZXM6IHNlY3Rpb24/LmdldChcInNjb3Blc1wiKSxcbiAgICBhdXRoVHlwZTogdHJpbVRvVW5kZWZpbmVkKHNlY3Rpb24/LmdldChcImF1dGhfdHlwZVwiKSk/LnRvTG93ZXJDYXNlKCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHJvZmlsZU5hbWUoXG4gIHJlcXVlc3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBleHBsaWNpdDogYm9vbGVhbixcbiAgY29uZmlnOiBJbmlDb25maWcgfCB1bmRlZmluZWQsXG4gIHByZWZlclVzZXJUb01hY2hpbmU6IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBsZXQgc2VsZWN0ZWQgPSByZXF1ZXN0ZWQ7XG4gIGxldCBzb3VyY2UgPSByZXF1ZXN0ZWQgPyBcInJlcXVlc3RlZFwiIDogdW5kZWZpbmVkO1xuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgc2VsZWN0ZWQgPSB0cmltVG9VbmRlZmluZWQoY29uZmlnPy5nZXQoU0VUVElOR1NfU0VDVElPTik/LmdldChcImRlZmF1bHRfcHJvZmlsZVwiKSk7XG4gICAgaWYgKHNlbGVjdGVkKSBzb3VyY2UgPSBcInNldHRpbmdzLWRlZmF1bHRcIjtcbiAgfVxuICBpZiAoIXNlbGVjdGVkICYmIGNvbmZpZz8uaGFzKFwiREVGQVVMVFwiKSkge1xuICAgIHNlbGVjdGVkID0gXCJERUZBVUxUXCI7XG4gICAgc291cmNlID0gXCJkZWZhdWx0LXNlY3Rpb25cIjtcbiAgfVxuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBbLi4uKGNvbmZpZz8ua2V5cygpID8/IFtdKV0uZmlsdGVyKChuYW1lKSA9PiBuYW1lICE9PSBTRVRUSU5HU19TRUNUSU9OKTtcbiAgICBpZiAocHJvZmlsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBzZWxlY3RlZCA9IHByb2ZpbGVzWzBdO1xuICAgICAgc291cmNlID0gXCJzb2xlLXByb2ZpbGVcIjtcbiAgICB9XG4gIH1cbiAgaWYgKCFzZWxlY3RlZCkge1xuICAgIHNlbGVjdGVkID0gXCJERUZBVUxUXCI7XG4gICAgc291cmNlID0gXCJmYWxsYmFja1wiO1xuICB9XG4gIGlmIChzZWxlY3RlZCA9PT0gU0VUVElOR1NfU0VDVElPTikge1xuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgYCR7U0VUVElOR1NfU0VDVElPTn0gaXMgcmVzZXJ2ZWRgKTtcbiAgfVxuICBpZiAoZXhwbGljaXQgfHwgIXByZWZlclVzZXJUb01hY2hpbmUgfHwgIWNvbmZpZykge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIERhdGFicmlja3MgcHJvZmlsZVwiLCB7XG4gICAgICBwcm9maWxlOiBzZWxlY3RlZCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGV4cGxpY2l0LFxuICAgICAgcHJlZmVyVXNlclRvTWFjaGluZSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cbiAgY29uc3QgY3VycmVudCA9IGxvYWRSYXdQcm9maWxlKGNvbmZpZywgc2VsZWN0ZWQpO1xuICBpZiAoIWlzTTJtUHJvZmlsZShjdXJyZW50KSB8fCAhY3VycmVudC5ob3N0KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgRGF0YWJyaWNrcyBwcm9maWxlXCIsIHtcbiAgICAgIHByb2ZpbGU6IHNlbGVjdGVkLFxuICAgICAgc291cmNlLFxuICAgICAgZXhwbGljaXQsXG4gICAgICBwcmVmZXJVc2VyVG9NYWNoaW5lLFxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbmZpZy5rZXlzKCldLmZpbHRlcigobmFtZSkgPT4ge1xuICAgIGlmIChuYW1lID09PSBzZWxlY3RlZCB8fCBuYW1lID09PSBTRVRUSU5HU19TRUNUSU9OKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gbG9hZFJhd1Byb2ZpbGUoY29uZmlnLCBuYW1lKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlLmF1dGhUeXBlID09PSBcImRhdGFicmlja3MtY2xpXCIgJiYgc2FtZVRhcmdldChjdXJyZW50LCBjYW5kaWRhdGUpO1xuICB9KTtcbiAgY29uc3QgcHJlZmVycmVkID0gbWF0Y2hlcy5sZW5ndGggPT09IDEgPyBtYXRjaGVzWzBdISA6IHNlbGVjdGVkO1xuICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBEYXRhYnJpY2tzIHByb2ZpbGVcIiwge1xuICAgIHByb2ZpbGU6IHByZWZlcnJlZCxcbiAgICBzb3VyY2U6IHByZWZlcnJlZCA9PT0gc2VsZWN0ZWQgPyBzb3VyY2UgOiBcIm1hdGNoaW5nLWNsaS1wcm9maWxlXCIsXG4gICAgb3JpZ2luYWxQcm9maWxlOiBwcmVmZXJyZWQgPT09IHNlbGVjdGVkID8gdW5kZWZpbmVkIDogc2VsZWN0ZWQsXG4gICAgZXhwbGljaXQsXG4gICAgcHJlZmVyVXNlclRvTWFjaGluZSxcbiAgICBtYXRjaGluZ0NsaVByb2ZpbGVzOiBtYXRjaGVzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiBwcmVmZXJyZWQ7XG59XG5cbi8qKiBOb3JtYWxpemUgRGF0YWJyaWNrcyBob3N0cyBhbmQgcmVxdWlyZSBUTFMgb3V0c2lkZSBsb29wYmFjayBkZXZlbG9wbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIb3N0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHByb2ZpbGUgPSBcIkRFRkFVTFRcIik6IHN0cmluZyB7XG4gIGNvbnN0IHNlbGVjdGVkID0gdHJpbVRvVW5kZWZpbmVkKHZhbHVlKTtcbiAgaWYgKCFzZWxlY3RlZCkgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBgUHJvZmlsZSAke3Byb2ZpbGV9IGhhcyBubyBob3N0YCk7XG4gIGNvbnN0IHdpdGhTY2hlbWUgPSAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHNlbGVjdGVkKSA/IHNlbGVjdGVkIDogYGh0dHBzOi8vJHtzZWxlY3RlZH1gO1xuICBsZXQgdXJsOiBVUkw7XG4gIHRyeSB7XG4gICAgdXJsID0gbmV3IFVSTCh3aXRoU2NoZW1lKTtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIGBQcm9maWxlICR7cHJvZmlsZX0gaGFzIGFuIGludmFsaWQgaG9zdGAsIHsgY2F1c2UgfSk7XG4gIH1cbiAgaWYgKHVybC5wcm90b2NvbCAhPT0gXCJodHRwczpcIiAmJiB1cmwuaG9zdG5hbWUgIT09IFwibG9jYWxob3N0XCIgJiYgdXJsLmhvc3RuYW1lICE9PSBcIjEyNy4wLjAuMVwiKSB7XG4gICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBcIkRhdGFicmlja3MgaG9zdCBtdXN0IHVzZSBIVFRQU1wiKTtcbiAgfVxuICByZXR1cm4gdXJsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF1dGhUeXBlKFxuICBhdXRoVHlwZTogQXV0aFR5cGUgfCB1bmRlZmluZWQsXG4gIGNsaWVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGNsaWVudFNlY3JldDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogQXV0aFR5cGUge1xuICBzd2l0Y2ggKGF1dGhUeXBlKSB7XG4gICAgY2FzZSBBdXRoVHlwZS5EYXRhYnJpY2tzQ2xpOlxuICAgICAgcmV0dXJuIEF1dGhUeXBlLkRhdGFicmlja3NDbGk7XG4gICAgY2FzZSBBdXRoVHlwZS5PQXV0aE0yTTpcbiAgICAgIGlmICghY2xpZW50SWQgfHwgIWNsaWVudFNlY3JldCkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwib2F1dGgtbTJtIHJlcXVpcmVzIGNsaWVudF9pZCBhbmQgY2xpZW50X3NlY3JldFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBBdXRoVHlwZS5PQXV0aE0yTTtcbiAgICBjYXNlIEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW46XG4gICAgICBpZiAoIWFjY2Vzc1Rva2VuKSB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwicGF0IHJlcXVpcmVzIHRva2VuXCIpO1xuICAgICAgcmV0dXJuIEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW47XG4gICAgY2FzZSBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mOlxuICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiYXBwX29ibyByZXF1aXJlcyB0aGUgY29uZmlndXJlZCBhY2Nlc3MgdG9rZW4gaGVhZGVyXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEF1dGhUeXBlLkFwcE9uQmVoYWxmT2Y7XG4gICAgY2FzZSBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsOlxuICAgICAgaWYgKCFjbGllbnRJZCB8fCAhY2xpZW50U2VjcmV0KSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJhcHBfc3AgcmVxdWlyZXMgY2xpZW50IGlkIGFuZCBzZWNyZXRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbDtcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIGlmIChjbGllbnRJZCAmJiBjbGllbnRTZWNyZXQpIHJldHVybiBBdXRoVHlwZS5PQXV0aE0yTTtcbiAgICAgIGlmIChjbGllbnRTZWNyZXQpIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJvYXV0aC1tMm0gY2xpZW50X3NlY3JldCByZXF1aXJlcyBjbGllbnRfaWRcIik7XG4gICAgICByZXR1cm4gYWNjZXNzVG9rZW4gPyBBdXRoVHlwZS5QZXJzb25hbEFjY2Vzc1Rva2VuIDogQXV0aFR5cGUuRGF0YWJyaWNrc0NsaTtcbiAgfVxufVxuXG4vKiogUGFyc2Ugb25lIGV4dGVybmFsIGF1dGgtdHlwZSB2YWx1ZSBpbnRvIHRoZSBjYW5vbmljYWwgZW51bS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUF1dGhUeXBlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBBdXRoVHlwZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlbGVjdGVkID0gdHJpbVRvVW5kZWZpbmVkKHZhbHVlKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChPYmplY3QudmFsdWVzKEF1dGhUeXBlKS5pbmNsdWRlcyhzZWxlY3RlZCBhcyBBdXRoVHlwZSkpIHJldHVybiBzZWxlY3RlZCBhcyBBdXRoVHlwZTtcbiAgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBgQXV0aGVudGljYXRpb24gdHlwZSAke3NlbGVjdGVkfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0T2JvVG9rZW4oXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBoZWFkZXJOYW1lID0gREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhoZWFkZXJzID8/IHt9KS5maW5kKFxuICAgIChbbmFtZV0pID0+IG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpLFxuICApO1xuICBjb25zdCB2YWx1ZSA9IHRyaW1Ub1VuZGVmaW5lZChlbnRyeT8uWzFdKTtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKSAhPT0gREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IFtzY2hlbWUsIC4uLnBhcnRzXSA9IHZhbHVlLnNwbGl0KC9cXHMrLyk7XG4gIHJldHVybiBzY2hlbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiYmVhcmVyXCIgPyB0cmltVG9VbmRlZmluZWQocGFydHMuam9pbihcIiBcIikpIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJUYXJnZXQoaG9zdDogc3RyaW5nIHwgdW5kZWZpbmVkLCBhY2NvdW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRhcmdldEtpbmQge1xuICBpZiAoYWNjb3VudElkICYmIGhvc3QpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG5ldyBVUkwobm9ybWFsaXplSG9zdChob3N0KSkuaG9zdG5hbWUgPT09IFwiYWNjb3VudHMuY2xvdWQuZGF0YWJyaWNrcy5jb21cIikge1xuICAgICAgICByZXR1cm4gVGFyZ2V0S2luZC5BY2NvdW50O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gVGFyZ2V0S2luZC5Xb3Jrc3BhY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRhcmdldCh2YWx1ZTogc3RyaW5nKTogVGFyZ2V0S2luZCB7XG4gIHN3aXRjaCAodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlIFRhcmdldEtpbmQuV29ya3NwYWNlOlxuICAgICAgcmV0dXJuIFRhcmdldEtpbmQuV29ya3NwYWNlO1xuICAgIGNhc2UgVGFyZ2V0S2luZC5BY2NvdW50OlxuICAgICAgcmV0dXJuIFRhcmdldEtpbmQuQWNjb3VudDtcbiAgICBjYXNlIFRhcmdldEtpbmQuVW5pZmllZDpcbiAgICAgIHJldHVybiBUYXJnZXRLaW5kLlVuaWZpZWQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJUYXJnZXQgbXVzdCBiZSB3b3Jrc3BhY2UsIGFjY291bnQsIG9yIHVuaWZpZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pc3NpbmcocHJvZmlsZTogc3RyaW5nLCBmaWVsZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIGBQcm9maWxlICR7cHJvZmlsZX0gcmVxdWlyZXMgJHtmaWVsZH1gKTtcbn1cblxuZnVuY3Rpb24gc2FtZVRhcmdldChsZWZ0OiBSYXdQcm9maWxlLCByaWdodDogUmF3UHJvZmlsZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGlmIChub3JtYWxpemVIb3N0KGxlZnQuaG9zdCkgIT09IG5vcm1hbGl6ZUhvc3QocmlnaHQuaG9zdCkpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgKCFsZWZ0LmFjY291bnRJZCB8fCBsZWZ0LmFjY291bnRJZCA9PT0gcmlnaHQuYWNjb3VudElkKSAmJlxuICAgICghbGVmdC53b3Jrc3BhY2VJZCB8fCBsZWZ0LndvcmtzcGFjZUlkID09PSByaWdodC53b3Jrc3BhY2VJZClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNNMm1Qcm9maWxlKHByb2ZpbGU6IFJhd1Byb2ZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwcm9maWxlLmF1dGhUeXBlID09PSBBdXRoVHlwZS5PQXV0aE0yTSB8fFxuICAgICghcHJvZmlsZS5hdXRoVHlwZSAmJiBCb29sZWFuKHByb2ZpbGUuY2xpZW50SWQgJiYgcHJvZmlsZS5jbGllbnRTZWNyZXQpKVxuICApO1xufVxuXG4vKiogRW51bWVyYXRlIHNlY3JldC1mcmVlIHByb2ZpbGUgbWV0YWRhdGEgZnJvbSBjYWNoZWQgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0RGF0YWJyaWNrc1Byb2ZpbGVzKFxuICBjb25maWdGaWxlPzogc3RyaW5nLFxuICByZWZyZXNoID0gZmFsc2UsXG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52LFxuKTogRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5W10ge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZUNvbmZpZ0ZpbGUoY29uZmlnRmlsZSwgZW52aXJvbm1lbnQpO1xuICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKGNvbmZpZ0ZpbGUsIHJlZnJlc2gsIGVudmlyb25tZW50KTtcbiAgaWYgKCFjb25maWcpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJsaXN0ZWQgRGF0YWJyaWNrcyBwcm9maWxlc1wiLCB7IHBhdGgsIHJlZnJlc2gsIGNvdW50OiAwIH0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBwcm9maWxlcyA9IFsuLi5jb25maWcua2V5cygpXVxuICAgIC5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IFNFVFRJTkdTX1NFQ1RJT04pXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgcHJvZmlsZSA9IGxvYWRSYXdQcm9maWxlKGNvbmZpZywgbmFtZSk7XG4gICAgICBjb25zdCBob3N0ID0gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHByb2ZpbGUuaG9zdCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocHJvZmlsZS5hY2NvdW50SWQpO1xuICAgICAgY29uc3Qgd29ya3NwYWNlSWQgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocHJvZmlsZS53b3Jrc3BhY2VJZCk7XG4gICAgICBjb25zdCBhdXRoVHlwZSA9IHJlc29sdmVBdXRoVHlwZShcbiAgICAgICAgcGFyc2VBdXRoVHlwZShwcm9maWxlLmF1dGhUeXBlKSxcbiAgICAgICAgcHJvZmlsZS5jbGllbnRJZCxcbiAgICAgICAgcHJvZmlsZS5jbGllbnRTZWNyZXQsXG4gICAgICAgIHByb2ZpbGUuYWNjZXNzVG9rZW4sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgLi4uKGhvc3QgPyB7IGhvc3QgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFjY291bnRJZCA/IHsgYWNjb3VudElkIH0gOiB7fSksXG4gICAgICAgIC4uLih3b3Jrc3BhY2VJZCA/IHsgd29ya3NwYWNlSWQgfSA6IHt9KSxcbiAgICAgICAgdGFyZ2V0OiBpbmZlclRhcmdldChob3N0LCBhY2NvdW50SWQpLFxuICAgICAgICBhdXRoVHlwZSxcbiAgICAgICAgcHJpbmNpcGFsOlxuICAgICAgICAgIGF1dGhUeXBlID09PSBBdXRoVHlwZS5PQXV0aE0yTSB8fCBhdXRoVHlwZSA9PT0gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbFxuICAgICAgICAgICAgPyAoc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHByb2ZpbGUuY2xpZW50SWQpID8/IG5hbWUpXG4gICAgICAgICAgICA6IG5hbWUsXG4gICAgICB9O1xuICAgIH0pXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0Lm5hbWUubG9jYWxlQ29tcGFyZShyaWdodC5uYW1lKSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImxpc3RlZCBEYXRhYnJpY2tzIHByb2ZpbGVzXCIsIHsgcGF0aCwgcmVmcmVzaCwgY291bnQ6IHByb2ZpbGVzLmxlbmd0aCB9KTtcbiAgcmV0dXJuIHByb2ZpbGVzO1xufVxuXG4vKiogUmVzb2x2ZSBvcHRpb25zLCBlbnZpcm9ubWVudCwgcmVxdWVzdCBoZWFkZXJzLCBhbmQgY29uZmlndXJhdGlvbiBpbnRvIGNyZWRlbnRpYWxzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEYXRhYnJpY2tzUHJvZmlsZShcbiAgb3B0aW9uczogRGF0YWJyaWNrc0F1dGhPcHRpb25zLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudixcbik6IERhdGFicmlja3NQcm9maWxlIHtcbiAgY29uc3QgaW5BcHAgPSBlbnZpcm9ubWVudFV0aWxzLmlzRGF0YWJyaWNrc0FwcEVudih7IC4uLmVudmlyb25tZW50IH0pO1xuICBjb25zdCBlbnZpcm9ubWVudFByb2ZpbGUgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoZW52aXJvbm1lbnQuREFUQUJSSUNLU19DT05GSUdfUFJPRklMRSk7XG4gIGNvbnN0IGV4cGxpY2l0UHJvZmlsZSA9IEJvb2xlYW4oXG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKG9wdGlvbnMucHJvZmlsZSkgPz8gZW52aXJvbm1lbnRQcm9maWxlLFxuICApO1xuICBjb25zdCByZXF1ZXN0VG9rZW4gPSByZXF1ZXN0T2JvVG9rZW4ob3B0aW9ucy5yZXF1ZXN0SGVhZGVycywgb3B0aW9ucy5hY2Nlc3NUb2tlbkhlYWRlcik7XG4gIGNvbnN0IGV4cGxpY2l0QXV0aFR5cGUgPVxuICAgIG9wdGlvbnMuYXV0aFR5cGUgPz9cbiAgICAoIWluQXBwICYmICFleHBsaWNpdFByb2ZpbGUgPyBwYXJzZUF1dGhUeXBlKGVudmlyb25tZW50LkRBVEFCUklDS1NfQVVUSF9UWVBFKSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGFwcFNlcnZpY2VQcmluY2lwYWwgPSBbXG4gICAgZW52aXJvbm1lbnQuREFUQUJSSUNLU19IT1NULFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX0lELFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX1NFQ1JFVCxcbiAgXS5ldmVyeSgodmFsdWUpID0+IEJvb2xlYW4oc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHZhbHVlKSkpO1xuICBjb25zdCBzZWxlY3RlZEF1dGhUeXBlID1cbiAgICAhaW5BcHAgfHwgZXhwbGljaXRQcm9maWxlIHx8IGV4cGxpY2l0QXV0aFR5cGVcbiAgICAgID8gZXhwbGljaXRBdXRoVHlwZVxuICAgICAgOiByZXF1ZXN0VG9rZW5cbiAgICAgICAgPyBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mXG4gICAgICAgIDogYXBwU2VydmljZVByaW5jaXBhbFxuICAgICAgICAgID8gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbFxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhcHBBdXRoID1cbiAgICBzZWxlY3RlZEF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mIHx8XG4gICAgc2VsZWN0ZWRBdXRoVHlwZSA9PT0gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbDtcbiAgY29uc3QgaWdub3JlQW1iaWVudENyZWRlbnRpYWxzID0gZXhwbGljaXRQcm9maWxlICYmICFhcHBBdXRoO1xuICBjb25zdCBjb25maWdQYXRoID0gcmVzb2x2ZUNvbmZpZ0ZpbGUob3B0aW9ucy5jb25maWdGaWxlLCBlbnZpcm9ubWVudCk7XG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcob3B0aW9ucy5jb25maWdGaWxlLCBmYWxzZSwgZW52aXJvbm1lbnQpO1xuICBjb25zdCByZXF1ZXN0ZWROYW1lID0gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKG9wdGlvbnMucHJvZmlsZSkgPz8gZW52aXJvbm1lbnRQcm9maWxlO1xuICBjb25zdCBwcm9maWxlTmFtZSA9IHJlc29sdmVQcm9maWxlTmFtZShcbiAgICByZXF1ZXN0ZWROYW1lLFxuICAgIGV4cGxpY2l0UHJvZmlsZSxcbiAgICBjb25maWcsXG4gICAgb3B0aW9ucy5wcmVmZXJVc2VyVG9NYWNoaW5lID8/IHRydWUsXG4gICk7XG4gIGNvbnN0IGFtYmllbnRDcmVkZW50aWFscyA9IFtcbiAgICBvcHRpb25zLmFjY2Vzc1Rva2VuLFxuICAgIG9wdGlvbnMuY2xpZW50SWQsXG4gICAgb3B0aW9ucy5jbGllbnRTZWNyZXQsXG4gICAgZW52aXJvbm1lbnQuREFUQUJSSUNLU19UT0tFTixcbiAgICBlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX0NMSUVOVF9JRCxcbiAgICBlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX0NMSUVOVF9TRUNSRVQsXG4gIF0uc29tZSgodmFsdWUpID0+IEJvb2xlYW4oc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHZhbHVlKSkpO1xuICBjb25zdCBzZWxlY3RlZFByb2ZpbGUgPVxuICAgIGV4cGxpY2l0UHJvZmlsZSB8fCAoIWFtYmllbnRDcmVkZW50aWFscyAmJiBjb25maWc/Lmhhcyhwcm9maWxlTmFtZSkpID8gcHJvZmlsZU5hbWUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBsb2FkUmF3UHJvZmlsZShjb25maWcsIHByb2ZpbGVOYW1lKTtcbiAgY29uc3QgYW1iaWVudCA9IChuYW1lOiBrZXlvZiBOb2RlSlMuUHJvY2Vzc0Vudik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PlxuICAgIGlnbm9yZUFtYmllbnRDcmVkZW50aWFscyA/IHVuZGVmaW5lZCA6IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChlbnZpcm9ubWVudFtuYW1lXSk7XG4gIGNvbnN0IGhvc3QgPSBub3JtYWxpemVIb3N0KFxuICAgIG9wdGlvbnMuaG9zdCA/PyBhbWJpZW50KFwiREFUQUJSSUNLU19IT1NUXCIpID8/IGNvbmZpZ3VyZWQuaG9zdCxcbiAgICBwcm9maWxlTmFtZSxcbiAgKTtcbiAgY29uc3QgYWNjb3VudElkID1cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy5hY2NvdW50SWQpID8/XG4gICAgYW1iaWVudChcIkRBVEFCUklDS1NfQUNDT1VOVF9JRFwiKSA/P1xuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChjb25maWd1cmVkLmFjY291bnRJZCk7XG4gIGNvbnN0IHdvcmtzcGFjZUlkID1cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy53b3Jrc3BhY2VJZCkgPz9cbiAgICBhbWJpZW50KFwiREFUQUJSSUNLU19XT1JLU1BBQ0VfSURcIikgPz9cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoY29uZmlndXJlZC53b3Jrc3BhY2VJZCk7XG4gIGNvbnN0IGNsaWVudElkVmFsdWUgPVxuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChvcHRpb25zLmNsaWVudElkKSA/P1xuICAgIGFtYmllbnQoXCJEQVRBQlJJQ0tTX0NMSUVOVF9JRFwiKSA/P1xuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChjb25maWd1cmVkLmNsaWVudElkKTtcbiAgY29uc3QgY2xpZW50U2VjcmV0ID1cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy5jbGllbnRTZWNyZXQpID8/XG4gICAgYW1iaWVudChcIkRBVEFCUklDS1NfQ0xJRU5UX1NFQ1JFVFwiKSA/P1xuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChjb25maWd1cmVkLmNsaWVudFNlY3JldCk7XG4gIGNvbnN0IGFjY2Vzc1Rva2VuID1cbiAgICBzZWxlY3RlZEF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mXG4gICAgICA/IHJlcXVlc3RUb2tlblxuICAgICAgOiAoc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKG9wdGlvbnMuYWNjZXNzVG9rZW4pID8/XG4gICAgICAgIGFtYmllbnQoXCJEQVRBQlJJQ0tTX1RPS0VOXCIpID8/XG4gICAgICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChjb25maWd1cmVkLmFjY2Vzc1Rva2VuKSk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRBdXRoVHlwZSA9XG4gICAgc2VsZWN0ZWRBdXRoVHlwZSA/P1xuICAgIHBhcnNlQXV0aFR5cGUoYW1iaWVudChcIkRBVEFCUklDS1NfQVVUSF9UWVBFXCIpKSA/P1xuICAgIHBhcnNlQXV0aFR5cGUoY29uZmlndXJlZC5hdXRoVHlwZSk7XG4gIGNvbnN0IGF1dGhUeXBlID0gcmVzb2x2ZUF1dGhUeXBlKGNvbmZpZ3VyZWRBdXRoVHlwZSwgY2xpZW50SWRWYWx1ZSwgY2xpZW50U2VjcmV0LCBhY2Nlc3NUb2tlbik7XG4gIGNvbnN0IGNsaWVudElkID1cbiAgICBhdXRoVHlwZSA9PT0gQXV0aFR5cGUuRGF0YWJyaWNrc0NsaVxuICAgICAgPyAoY2xpZW50SWRWYWx1ZSA/PyBERUZBVUxUX0NMSUVOVF9JRClcbiAgICAgIDogYXV0aFR5cGUgPT09IEF1dGhUeXBlLk9BdXRoTTJNIHx8IGF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsXG4gICAgICAgID8gKGNsaWVudElkVmFsdWUgPz8gbWlzc2luZyhwcm9maWxlTmFtZSwgXCJjbGllbnRfaWRcIikpXG4gICAgICAgIDogKGNsaWVudElkVmFsdWUgPz8gXCJcIik7XG4gIGNvbnN0IHNjb3BlcyA9IG9wdGlvbnMuc2NvcGVzPy5sZW5ndGhcbiAgICA/IHN0cmluZ1V0aWxzLnBhcnNlTGlzdChvcHRpb25zLnNjb3BlcylcbiAgICA6IHN0cmluZ1V0aWxzLnBhcnNlTGlzdChjb25maWd1cmVkLnNjb3Blcz8uc3BsaXQoXCIsXCIpID8/IFtcImFsbC1hcGlzXCJdKTtcbiAgY29uc3QgdGFyZ2V0ID0gb3B0aW9ucy50YXJnZXQgPyBwYXJzZVRhcmdldChvcHRpb25zLnRhcmdldCkgOiBpbmZlclRhcmdldChob3N0LCBhY2NvdW50SWQpO1xuICBjb25zdCBncm91cElkID1cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy5ncm91cElkKSA/P1xuICAgIGFtYmllbnQoXCJEQVRBQlJJQ0tTX0dST1VQX0lEXCIpID8/XG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGNvbmZpZ3VyZWQuZ3JvdXBJZCk7XG4gIGNvbnN0IHByaW5jaXBhbCA9XG4gICAgYXV0aFR5cGUgPT09IEF1dGhUeXBlLk9BdXRoTTJNIHx8IGF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsXG4gICAgICA/IGNsaWVudElkXG4gICAgICA6IHByb2ZpbGVOYW1lO1xuICBjb25zdCBjYWNoZUtleSA9IGNyZWRlbnRpYWxDYWNoZUtleSh7XG4gICAgbmFtZTogcHJvZmlsZU5hbWUsXG4gICAgaG9zdCxcbiAgICBhY2NvdW50SWQsXG4gICAgd29ya3NwYWNlSWQsXG4gICAgY2xpZW50SWQsXG4gICAgZ3JvdXBJZCxcbiAgICBzY29wZXMsXG4gICAgYXV0aFR5cGUsXG4gICAgYWNjZXNzVG9rZW4sXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBEYXRhYnJpY2tzIHByb2ZpbGVcIiwge1xuICAgIHByb2ZpbGU6IHByb2ZpbGVOYW1lLFxuICAgIGhvc3QsXG4gICAgYXV0aFR5cGUsXG4gICAgdGFyZ2V0LFxuICAgIGluQXBwLFxuICAgIGV4cGxpY2l0UHJvZmlsZSxcbiAgICBjb25maWd1cmVkQXV0aFR5cGU6IGNvbmZpZ3VyZWRBdXRoVHlwZSA/PyBcImF1dG9tYXRpY1wiLFxuICAgIGhhc0FjY291bnRJZDogQm9vbGVhbihhY2NvdW50SWQpLFxuICAgIGhhc1dvcmtzcGFjZUlkOiBCb29sZWFuKHdvcmtzcGFjZUlkKSxcbiAgICBoYXNHcm91cElkOiBCb29sZWFuKGdyb3VwSWQpLFxuICAgIHNjb3BlQ291bnQ6IHNjb3Blcy5sZW5ndGgsXG4gICAgY29uZmlnUGF0aCxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogcHJvZmlsZU5hbWUsXG4gICAgLi4uKHNlbGVjdGVkUHJvZmlsZSA/IHsgc2VsZWN0ZWRQcm9maWxlIH0gOiB7fSksXG4gICAgaG9zdCxcbiAgICAuLi4oYWNjb3VudElkID8geyBhY2NvdW50SWQgfSA6IHt9KSxcbiAgICAuLi4od29ya3NwYWNlSWQgPyB7IHdvcmtzcGFjZUlkIH0gOiB7fSksXG4gICAgY2xpZW50SWQsXG4gICAgLi4uKGdyb3VwSWQgPyB7IGdyb3VwSWQgfSA6IHt9KSxcbiAgICBzY29wZXMsXG4gICAgdGFyZ2V0LFxuICAgIGF1dGhUeXBlLFxuICAgIC4uLihjbGllbnRTZWNyZXQgPyB7IGNsaWVudFNlY3JldCB9IDoge30pLFxuICAgIC4uLihhY2Nlc3NUb2tlbiA/IHsgYWNjZXNzVG9rZW4gfSA6IHt9KSxcbiAgICBjYWNoZUtleSxcbiAgICBwcmluY2lwYWwsXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgT0F1dGggc2NvcGVzIGZvciBtYWNoaW5lIGNyZWRlbnRpYWxzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hY2hpbmVTY29wZXMoc2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnBhcnNlTGlzdChzY29wZXMubGVuZ3RoID8gc2NvcGVzIDogW1wiYWxsLWFwaXNcIl0pLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gY3JlZGVudGlhbENhY2hlS2V5KFxuICBwcm9maWxlOiBQaWNrPFxuICAgIERhdGFicmlja3NQcm9maWxlLFxuICAgIHwgXCJuYW1lXCJcbiAgICB8IFwiaG9zdFwiXG4gICAgfCBcImFjY291bnRJZFwiXG4gICAgfCBcIndvcmtzcGFjZUlkXCJcbiAgICB8IFwiY2xpZW50SWRcIlxuICAgIHwgXCJncm91cElkXCJcbiAgICB8IFwic2NvcGVzXCJcbiAgICB8IFwiYXV0aFR5cGVcIlxuICAgIHwgXCJhY2Nlc3NUb2tlblwiXG4gID4sXG4pOiBzdHJpbmcge1xuICBpZiAocHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuRGF0YWJyaWNrc0NsaSkgcmV0dXJuIHByb2ZpbGUubmFtZTtcbiAgaWYgKHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW4pIHtcbiAgICBjb25zdCBkaWdlc3QgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAudXBkYXRlKHByb2ZpbGUuYWNjZXNzVG9rZW4gPz8gXCJcIilcbiAgICAgIC5kaWdlc3QoXCJoZXhcIik7XG4gICAgcmV0dXJuIGAke3Byb2ZpbGUubmFtZX0tcGF0LSR7ZGlnZXN0fWA7XG4gIH1cbiAgaWYgKHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcE9uQmVoYWxmT2YpIHJldHVybiBgJHtwcm9maWxlLm5hbWV9LWFwcC1vYm9gO1xuICBjb25zdCBpZGVudGl0eSA9IFtcbiAgICBwcm9maWxlLmhvc3QsXG4gICAgcHJvZmlsZS5hY2NvdW50SWQgPz8gXCJcIixcbiAgICBwcm9maWxlLndvcmtzcGFjZUlkID8/IFwiXCIsXG4gICAgcHJvZmlsZS5jbGllbnRJZCxcbiAgICBwcm9maWxlLmdyb3VwSWQgPz8gXCJcIixcbiAgICBtYWNoaW5lU2NvcGVzKHByb2ZpbGUuc2NvcGVzKS5qb2luKFwiIFwiKSxcbiAgXS5qb2luKFwiXFwwXCIpO1xuICBjb25zdCBkaWdlc3QgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpZGVudGl0eSkuZGlnZXN0KFwiaGV4XCIpO1xuICByZXR1cm4gYCR7cHJvZmlsZS5uYW1lfS0ke3Byb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWwgPyBcImFwcC1zcFwiIDogXCJvYXV0aC1tMm1cIn0tJHtkaWdlc3R9YDtcbn1cbiJdfQ==
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3Byb2ZpbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19wcm9maWxlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssV0FBVyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUVMLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQWlCL0MsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFB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QUc7UUFDZixPQUFPLENBQUMsSUFBSTtRQUNaLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtRQUN2QixPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFDekIsT0FBTyxDQUFDLFFBQVE7UUFDaEIsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO1FBQ3JCLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUN4QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNuSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IHsgQXV0aFR5cGUsIFRhcmdldEtpbmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aC9jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvcHJvZmlsZVwiO1xuaW1wb3J0ICogYXMgZW52aXJvbm1lbnRVdGlscyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9lbnZpcm9ubWVudC11dGlsc1wiO1xuaW1wb3J0ICogYXMgb2JqZWN0IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL29iamVjdFwiO1xuaW1wb3J0ICogYXMgc3RyaW5nVXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvc3RyaW5nLXV0aWxzXCI7XG5pbXBvcnQgeyB0cmltVG9VbmRlZmluZWQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9zdHJpbmctdXRpbHNcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlSW5pIH0gZnJvbSBcImluaVwiO1xuXG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tIFwiLi9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBhdXRoTG9nZ2VyIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGUgfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgRGF0YWJyaWNrc0F1dGhPcHRpb25zLFxuICBERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVIsXG4gIERFRkFVTFRfQ0xJRU5UX0lELFxuICBERUZBVUxUX0NPTkZJR19GSUxFLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gYXV0aExvZ2dlcihcInByb2ZpbGUtc2VsZWN0aW9uXCIpO1xuY29uc3QgY29uZmlnQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgSW5pQ29uZmlnIHwgRXJyb3IgfCB1bmRlZmluZWQ+KCk7XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HU19TRUNUSU9OID0gXCJfX3NldHRpbmdzX19cIjtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+PjtcbmV4cG9ydCB0eXBlIEluaUNvbmZpZyA9IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhd1Byb2ZpbGUge1xuICBob3N0Pzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgZ3JvdXBJZD86IHN0cmluZztcbiAgc2NvcGVzPzogc3RyaW5nO1xuICBhdXRoVHlwZT86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmUgdGhlIHNlbGVjdGVkIERhdGFicmlja3MgY29uZmlndXJhdGlvbiBwYXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb25maWdGaWxlKFxuICBleHBsaWNpdD86IHN0cmluZyxcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYsXG4pOiBzdHJpbmcge1xuICBjb25zdCBzZWxlY3RlZCA9XG4gICAgdHJpbVRvVW5kZWZpbmVkKGV4cGxpY2l0KSA/P1xuICAgIHRyaW1Ub1VuZGVmaW5lZChlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX0NPTkZJR19GSUxFKSA/P1xuICAgIERFRkFVTFRfQ09ORklHX0ZJTEU7XG4gIGNvbnN0IGV4cGFuZGVkID1cbiAgICBzZWxlY3RlZCA9PT0gXCJ+XCJcbiAgICAgID8gaG9tZWRpcigpXG4gICAgICA6IHNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ+L1wiKVxuICAgICAgICA/IHJlc29sdmUoaG9tZWRpcigpLCBzZWxlY3RlZC5zbGljZSgyKSlcbiAgICAgICAgOiBzZWxlY3RlZDtcbiAgcmV0dXJuIGlzQWJzb2x1dGUoZXhwYW5kZWQpID8gZXhwYW5kZWQgOiByZXNvbHZlKGV4cGFuZGVkKTtcbn1cblxuLyoqIExvYWQgYW5kIGNhY2hlIHRoZSBzZWxlY3RlZCBEYXRhYnJpY2tzIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZyhcbiAgY29uZmlnRmlsZT86IHN0cmluZyxcbiAgcmVmcmVzaCA9IGZhbHNlLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudixcbik6IEluaUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSByZXNvbHZlQ29uZmlnRmlsZShjb25maWdGaWxlLCBlbnZpcm9ubWVudCk7XG4gIGlmIChyZWZyZXNoKSBjb25maWdDYWNoZS5kZWxldGUocGF0aCk7XG4gIGlmIChjb25maWdDYWNoZS5oYXMocGF0aCkpIHtcbiAgICBjb25zdCBjYWNoZWQgPSBjb25maWdDYWNoZS5nZXQocGF0aCk7XG4gICAgaWYgKGNhY2hlZCBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBjYWNoZWQ7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBpZiAoIWV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICBjb25maWdDYWNoZS5zZXQocGF0aCwgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gcGFyc2VEYXRhYnJpY2tzQ29uZmlnKHJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIikpO1xuICAgIGNvbmZpZ0NhY2hlLnNldChwYXRoLCBjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgY29uc3QgZXJyb3IgPVxuICAgICAgY2F1c2UgaW5zdGFuY2VvZiBFcnJvciA/IGNhdXNlIDogbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBgQ291bGQgbm90IHJlYWQgJHtwYXRofWAsIHsgY2F1c2UgfSk7XG4gICAgY29uZmlnQ2FjaGUuc2V0KHBhdGgsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKiogSW52YWxpZGF0ZSBjYWNoZWQgY29uZmlndXJhdGlvbiBhZnRlciBhbiBleHRlcm5hbCB3cml0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlQ29uZmlnRmlsZShjb25maWdGaWxlPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbmZpZ0NhY2hlLmRlbGV0ZShyZXNvbHZlQ29uZmlnRmlsZShjb25maWdGaWxlKSk7XG59XG5cbi8qKiBQYXJzZSBEYXRhYnJpY2tzIElOSSB0ZXh0IHRocm91Z2ggdGhlIG1haW50YWluZWQgYGluaWAgcGFja2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGFicmlja3NDb25maWcoc291cmNlOiBzdHJpbmcpOiBJbmlDb25maWcge1xuICBsZXQgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBwYXJzZUluaShzb3VyY2UpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJEYXRhYnJpY2tzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIElOSVwiLCB7IGNhdXNlIH0pO1xuICB9XG4gIGNvbnN0IGNvbmZpZzogSW5pQ29uZmlnID0gbmV3IE1hcCgpO1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkKSkge1xuICAgIGlmICghbmFtZS50cmltKCkgfHwgIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJEYXRhYnJpY2tzIGNvbmZpZ3VyYXRpb24gdmFsdWVzIG11c3QgYmVsb25nIHRvIGEgcHJvZmlsZVwiKTtcbiAgICB9XG4gICAgX2FwcGVuZENvbmZpZ1NlY3Rpb25zKGNvbmZpZywgW25hbWUudHJpbSgpXSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIF9hcHBlbmRDb25maWdTZWN0aW9ucyhcbiAgY29uZmlnOiBJbmlDb25maWcsXG4gIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGxldCBuZXN0ZWQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgaWYgKG9iamVjdC5pc1JlY29yZChlbnRyeSkpIHtcbiAgICAgIG5lc3RlZCA9IHRydWU7XG4gICAgICBfYXBwZW5kQ29uZmlnU2VjdGlvbnMoY29uZmlnLCBbLi4ucGF0aCwga2V5XSwgZW50cnkpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeSAhPT0gbnVsbCkge1xuICAgICAgc2VjdGlvbi5zZXQoa2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBTdHJpbmcoZW50cnkpLnRyaW0oKSk7XG4gICAgfVxuICB9XG4gIGlmIChzZWN0aW9uLnNpemUgfHwgIW5lc3RlZCkge1xuICAgIGNvbmZpZy5zZXQocGF0aC5qb2luKFwiLlwiKSwgc2VjdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSYXdQcm9maWxlKGNvbmZpZzogSW5pQ29uZmlnIHwgdW5kZWZpbmVkLCBuYW1lOiBzdHJpbmcpOiBSYXdQcm9maWxlIHtcbiAgY29uc3Qgc2VjdGlvbiA9IGNvbmZpZz8uZ2V0KG5hbWUpO1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHNlY3Rpb24/LmdldChcImhvc3RcIiksXG4gICAgYWNjb3VudElkOiBzZWN0aW9uPy5nZXQoXCJhY2NvdW50X2lkXCIpLFxuICAgIHdvcmtzcGFjZUlkOiBzZWN0aW9uPy5nZXQoXCJ3b3Jrc3BhY2VfaWRcIiksXG4gICAgY2xpZW50SWQ6IHNlY3Rpb24/LmdldChcImNsaWVudF9pZFwiKSxcbiAgICBjbGllbnRTZWNyZXQ6IHNlY3Rpb24/LmdldChcImNsaWVudF9zZWNyZXRcIiksXG4gICAgYWNjZXNzVG9rZW46IHNlY3Rpb24/LmdldChcInRva2VuXCIpLFxuICAgIGdyb3VwSWQ6IHNlY3Rpb24/LmdldChcImdyb3VwX2lkXCIpLFxuICAgIHNjb3Blczogc2VjdGlvbj8uZ2V0KFwic2NvcGVzXCIpLFxuICAgIGF1dGhUeXBlOiB0cmltVG9VbmRlZmluZWQoc2VjdGlvbj8uZ2V0KFwiYXV0aF90eXBlXCIpKT8udG9Mb3dlckNhc2UoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQcm9maWxlTmFtZShcbiAgcmVxdWVzdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGV4cGxpY2l0OiBib29sZWFuLFxuICBjb25maWc6IEluaUNvbmZpZyB8IHVuZGVmaW5lZCxcbiAgcHJlZmVyVXNlclRvTWFjaGluZTogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGxldCBzZWxlY3RlZCA9IHJlcXVlc3RlZDtcbiAgbGV0IHNvdXJjZSA9IHJlcXVlc3RlZCA/IFwicmVxdWVzdGVkXCIgOiB1bmRlZmluZWQ7XG4gIGlmICghc2VsZWN0ZWQpIHtcbiAgICBzZWxlY3RlZCA9IHRyaW1Ub1VuZGVmaW5lZChjb25maWc/LmdldChTRVRUSU5HU19TRUNUSU9OKT8uZ2V0KFwiZGVmYXVsdF9wcm9maWxlXCIpKTtcbiAgICBpZiAoc2VsZWN0ZWQpIHNvdXJjZSA9IFwic2V0dGluZ3MtZGVmYXVsdFwiO1xuICB9XG4gIGlmICghc2VsZWN0ZWQgJiYgY29uZmlnPy5oYXMoXCJERUZBVUxUXCIpKSB7XG4gICAgc2VsZWN0ZWQgPSBcIkRFRkFVTFRcIjtcbiAgICBzb3VyY2UgPSBcImRlZmF1bHQtc2VjdGlvblwiO1xuICB9XG4gIGlmICghc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBwcm9maWxlcyA9IFsuLi4oY29uZmlnPy5rZXlzKCkgPz8gW10pXS5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IFNFVFRJTkdTX1NFQ1RJT04pO1xuICAgIGlmIChwcm9maWxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNlbGVjdGVkID0gcHJvZmlsZXNbMF07XG4gICAgICBzb3VyY2UgPSBcInNvbGUtcHJvZmlsZVwiO1xuICAgIH1cbiAgfVxuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgc2VsZWN0ZWQgPSBcIkRFRkFVTFRcIjtcbiAgICBzb3VyY2UgPSBcImZhbGxiYWNrXCI7XG4gIH1cbiAgaWYgKHNlbGVjdGVkID09PSBTRVRUSU5HU19TRUNUSU9OKSB7XG4gICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBgJHtTRVRUSU5HU19TRUNUSU9OfSBpcyByZXNlcnZlZGApO1xuICB9XG4gIGlmIChleHBsaWNpdCB8fCAhcHJlZmVyVXNlclRvTWFjaGluZSB8fCAhY29uZmlnKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgRGF0YWJyaWNrcyBwcm9maWxlXCIsIHtcbiAgICAgIHByb2ZpbGU6IHNlbGVjdGVkLFxuICAgICAgc291cmNlLFxuICAgICAgZXhwbGljaXQsXG4gICAgICBwcmVmZXJVc2VyVG9NYWNoaW5lLFxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuICBjb25zdCBjdXJyZW50ID0gbG9hZFJhd1Byb2ZpbGUoY29uZmlnLCBzZWxlY3RlZCk7XG4gIGlmICghaXNNMm1Qcm9maWxlKGN1cnJlbnQpIHx8ICFjdXJyZW50Lmhvc3QpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBEYXRhYnJpY2tzIHByb2ZpbGVcIiwge1xuICAgICAgcHJvZmlsZTogc2VsZWN0ZWQsXG4gICAgICBzb3VyY2UsXG4gICAgICBleHBsaWNpdCxcbiAgICAgIHByZWZlclVzZXJUb01hY2hpbmUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29uZmlnLmtleXMoKV0uZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IHNlbGVjdGVkIHx8IG5hbWUgPT09IFNFVFRJTkdTX1NFQ1RJT04pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBsb2FkUmF3UHJvZmlsZShjb25maWcsIG5hbWUpO1xuICAgIHJldHVybiBjYW5kaWRhdGUuYXV0aFR5cGUgPT09IFwiZGF0YWJyaWNrcy1jbGlcIiAmJiBzYW1lVGFyZ2V0KGN1cnJlbnQsIGNhbmRpZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBwcmVmZXJyZWQgPSBtYXRjaGVzLmxlbmd0aCA9PT0gMSA/IG1hdGNoZXNbMF0hIDogc2VsZWN0ZWQ7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIERhdGFicmlja3MgcHJvZmlsZVwiLCB7XG4gICAgcHJvZmlsZTogcHJlZmVycmVkLFxuICAgIHNvdXJjZTogcHJlZmVycmVkID09PSBzZWxlY3RlZCA/IHNvdXJjZSA6IFwibWF0Y2hpbmctY2xpLXByb2ZpbGVcIixcbiAgICBvcmlnaW5hbFByb2ZpbGU6IHByZWZlcnJlZCA9PT0gc2VsZWN0ZWQgPyB1bmRlZmluZWQgOiBzZWxlY3RlZCxcbiAgICBleHBsaWNpdCxcbiAgICBwcmVmZXJVc2VyVG9NYWNoaW5lLFxuICAgIG1hdGNoaW5nQ2xpUHJvZmlsZXM6IG1hdGNoZXMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHByZWZlcnJlZDtcbn1cblxuLyoqIE5vcm1hbGl6ZSBEYXRhYnJpY2tzIGhvc3RzIGFuZCByZXF1aXJlIFRMUyBvdXRzaWRlIGxvb3BiYWNrIGRldmVsb3BtZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhvc3QodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcHJvZmlsZSA9IFwiREVGQVVMVFwiKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSB0cmltVG9VbmRlZmluZWQodmFsdWUpO1xuICBpZiAoIXNlbGVjdGVkKSB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIGBQcm9maWxlICR7cHJvZmlsZX0gaGFzIG5vIGhvc3RgKTtcbiAgY29uc3Qgd2l0aFNjaGVtZSA9IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3Qoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiBgaHR0cHM6Ly8ke3NlbGVjdGVkfWA7XG4gIGxldCB1cmw6IFVSTDtcbiAgdHJ5IHtcbiAgICB1cmwgPSBuZXcgVVJMKHdpdGhTY2hlbWUpO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgYFByb2ZpbGUgJHtwcm9maWxlfSBoYXMgYW4gaW52YWxpZCBob3N0YCwgeyBjYXVzZSB9KTtcbiAgfVxuICBpZiAodXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiICYmIHVybC5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIiAmJiB1cmwuaG9zdG5hbWUgIT09IFwiMTI3LjAuMC4xXCIpIHtcbiAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiRGF0YWJyaWNrcyBob3N0IG11c3QgdXNlIEhUVFBTXCIpO1xuICB9XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXV0aFR5cGUoXG4gIGF1dGhUeXBlOiBBdXRoVHlwZSB8IHVuZGVmaW5lZCxcbiAgY2xpZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBBdXRoVHlwZSB7XG4gIHN3aXRjaCAoYXV0aFR5cGUpIHtcbiAgICBjYXNlIEF1dGhUeXBlLkRhdGFicmlja3NDbGk6XG4gICAgICByZXR1cm4gQXV0aFR5cGUuRGF0YWJyaWNrc0NsaTtcbiAgICBjYXNlIEF1dGhUeXBlLk9BdXRoTTJNOlxuICAgICAgaWYgKCFjbGllbnRJZCB8fCAhY2xpZW50U2VjcmV0KSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJvYXV0aC1tMm0gcmVxdWlyZXMgY2xpZW50X2lkIGFuZCBjbGllbnRfc2VjcmV0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEF1dGhUeXBlLk9BdXRoTTJNO1xuICAgIGNhc2UgQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlbjpcbiAgICAgIGlmICghYWNjZXNzVG9rZW4pIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJwYXQgcmVxdWlyZXMgdG9rZW5cIik7XG4gICAgICByZXR1cm4gQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlbjtcbiAgICBjYXNlIEF1dGhUeXBlLkFwcE9uQmVoYWxmT2Y6XG4gICAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJhcHBfb2JvIHJlcXVpcmVzIHRoZSBjb25maWd1cmVkIGFjY2VzcyB0b2tlbiBoZWFkZXJcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gQXV0aFR5cGUuQXBwT25CZWhhbGZPZjtcbiAgICBjYXNlIEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWw6XG4gICAgICBpZiAoIWNsaWVudElkIHx8ICFjbGllbnRTZWNyZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBcImFwcF9zcCByZXF1aXJlcyBjbGllbnQgaWQgYW5kIHNlY3JldFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgaWYgKGNsaWVudElkICYmIGNsaWVudFNlY3JldCkgcmV0dXJuIEF1dGhUeXBlLk9BdXRoTTJNO1xuICAgICAgaWYgKGNsaWVudFNlY3JldCkgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBcIm9hdXRoLW0ybSBjbGllbnRfc2VjcmV0IHJlcXVpcmVzIGNsaWVudF9pZFwiKTtcbiAgICAgIHJldHVybiBhY2Nlc3NUb2tlbiA/IEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW4gOiBBdXRoVHlwZS5EYXRhYnJpY2tzQ2xpO1xuICB9XG59XG5cbi8qKiBQYXJzZSBvbmUgZXh0ZXJuYWwgYXV0aC10eXBlIHZhbHVlIGludG8gdGhlIGNhbm9uaWNhbCBlbnVtLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXV0aFR5cGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IEF1dGhUeXBlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSB0cmltVG9VbmRlZmluZWQodmFsdWUpPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKE9iamVjdC52YWx1ZXMoQXV0aFR5cGUpLmluY2x1ZGVzKHNlbGVjdGVkIGFzIEF1dGhUeXBlKSkgcmV0dXJuIHNlbGVjdGVkIGFzIEF1dGhUeXBlO1xuICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIGBBdXRoZW50aWNhdGlvbiB0eXBlICR7c2VsZWN0ZWR9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RPYm9Ub2tlbihcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGhlYWRlck5hbWUgPSBERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVIsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyeSA9IE9iamVjdC5lbnRyaWVzKGhlYWRlcnMgPz8ge30pLmZpbmQoXG4gICAgKFtuYW1lXSkgPT4gbmFtZS50b0xvd2VyQ2FzZSgpID09PSBoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCksXG4gICk7XG4gIGNvbnN0IHZhbHVlID0gdHJpbVRvVW5kZWZpbmVkKGVudHJ5Py5bMV0pO1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVIpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgW3NjaGVtZSwgLi4ucGFydHNdID0gdmFsdWUuc3BsaXQoL1xccysvKTtcbiAgcmV0dXJuIHNjaGVtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJiZWFyZXJcIiA/IHRyaW1Ub1VuZGVmaW5lZChwYXJ0cy5qb2luKFwiIFwiKSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclRhcmdldChob3N0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFjY291bnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGFyZ2V0S2luZCB7XG4gIGlmIChhY2NvdW50SWQgJiYgaG9zdCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobmV3IFVSTChub3JtYWxpemVIb3N0KGhvc3QpKS5ob3N0bmFtZSA9PT0gXCJhY2NvdW50cy5jbG91ZC5kYXRhYnJpY2tzLmNvbVwiKSB7XG4gICAgICAgIHJldHVybiBUYXJnZXRLaW5kLkFjY291bnQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBUYXJnZXRLaW5kLldvcmtzcGFjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFyZ2V0KHZhbHVlOiBzdHJpbmcpOiBUYXJnZXRLaW5kIHtcbiAgc3dpdGNoICh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgVGFyZ2V0S2luZC5Xb3Jrc3BhY2U6XG4gICAgICByZXR1cm4gVGFyZ2V0S2luZC5Xb3Jrc3BhY2U7XG4gICAgY2FzZSBUYXJnZXRLaW5kLkFjY291bnQ6XG4gICAgICByZXR1cm4gVGFyZ2V0S2luZC5BY2NvdW50O1xuICAgIGNhc2UgVGFyZ2V0S2luZC5VbmlmaWVkOlxuICAgICAgcmV0dXJuIFRhcmdldEtpbmQuVW5pZmllZDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBcIlRhcmdldCBtdXN0IGJlIHdvcmtzcGFjZSwgYWNjb3VudCwgb3IgdW5pZmllZFwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlzc2luZyhwcm9maWxlOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgYFByb2ZpbGUgJHtwcm9maWxlfSByZXF1aXJlcyAke2ZpZWxkfWApO1xufVxuXG5mdW5jdGlvbiBzYW1lVGFyZ2V0KGxlZnQ6IFJhd1Byb2ZpbGUsIHJpZ2h0OiBSYXdQcm9maWxlKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgaWYgKG5vcm1hbGl6ZUhvc3QobGVmdC5ob3N0KSAhPT0gbm9ybWFsaXplSG9zdChyaWdodC5ob3N0KSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAoIWxlZnQuYWNjb3VudElkIHx8IGxlZnQuYWNjb3VudElkID09PSByaWdodC5hY2NvdW50SWQpICYmXG4gICAgKCFsZWZ0LndvcmtzcGFjZUlkIHx8IGxlZnQud29ya3NwYWNlSWQgPT09IHJpZ2h0LndvcmtzcGFjZUlkKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc00ybVByb2ZpbGUocHJvZmlsZTogUmF3UHJvZmlsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLk9BdXRoTTJNIHx8XG4gICAgKCFwcm9maWxlLmF1dGhUeXBlICYmIEJvb2xlYW4ocHJvZmlsZS5jbGllbnRJZCAmJiBwcm9maWxlLmNsaWVudFNlY3JldCkpXG4gICk7XG59XG5cbi8qKiBFbnVtZXJhdGUgc2VjcmV0LWZyZWUgcHJvZmlsZSBtZXRhZGF0YSBmcm9tIGNhY2hlZCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3REYXRhYnJpY2tzUHJvZmlsZXMoXG4gIGNvbmZpZ0ZpbGU/OiBzdHJpbmcsXG4gIHJlZnJlc2ggPSBmYWxzZSxcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYsXG4pOiBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnlbXSB7XG4gIGNvbnN0IHBhdGggPSByZXNvbHZlQ29uZmlnRmlsZShjb25maWdGaWxlLCBlbnZpcm9ubWVudCk7XG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoY29uZmlnRmlsZSwgcmVmcmVzaCwgZW52aXJvbm1lbnQpO1xuICBpZiAoIWNvbmZpZykge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxpc3RlZCBEYXRhYnJpY2tzIHByb2ZpbGVzXCIsIHsgcGF0aCwgcmVmcmVzaCwgY291bnQ6IDAgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHByb2ZpbGVzID0gWy4uLmNvbmZpZy5rZXlzKCldXG4gICAgLmZpbHRlcigobmFtZSkgPT4gbmFtZSAhPT0gU0VUVElOR1NfU0VDVElPTilcbiAgICAubWFwKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCBwcm9maWxlID0gbG9hZFJhd1Byb2ZpbGUoY29uZmlnLCBuYW1lKTtcbiAgICAgIGNvbnN0IGhvc3QgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocHJvZmlsZS5ob3N0KTtcbiAgICAgIGNvbnN0IGFjY291bnRJZCA9IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChwcm9maWxlLmFjY291bnRJZCk7XG4gICAgICBjb25zdCB3b3Jrc3BhY2VJZCA9IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChwcm9maWxlLndvcmtzcGFjZUlkKTtcbiAgICAgIGNvbnN0IGF1dGhUeXBlID0gcmVzb2x2ZUF1dGhUeXBlKFxuICAgICAgICBwYXJzZUF1dGhUeXBlKHByb2ZpbGUuYXV0aFR5cGUpLFxuICAgICAgICBwcm9maWxlLmNsaWVudElkLFxuICAgICAgICBwcm9maWxlLmNsaWVudFNlY3JldCxcbiAgICAgICAgcHJvZmlsZS5hY2Nlc3NUb2tlbixcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICAuLi4oaG9zdCA/IHsgaG9zdCB9IDoge30pLFxuICAgICAgICAuLi4oYWNjb3VudElkID8geyBhY2NvdW50SWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHdvcmtzcGFjZUlkID8geyB3b3Jrc3BhY2VJZCB9IDoge30pLFxuICAgICAgICB0YXJnZXQ6IGluZmVyVGFyZ2V0KGhvc3QsIGFjY291bnRJZCksXG4gICAgICAgIGF1dGhUeXBlLFxuICAgICAgICBwcmluY2lwYWw6XG4gICAgICAgICAgYXV0aFR5cGUgPT09IEF1dGhUeXBlLk9BdXRoTTJNIHx8IGF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsXG4gICAgICAgICAgICA/IChzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocHJvZmlsZS5jbGllbnRJZCkgPz8gbmFtZSlcbiAgICAgICAgICAgIDogbmFtZSxcbiAgICAgIH07XG4gICAgfSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubmFtZS5sb2NhbGVDb21wYXJlKHJpZ2h0Lm5hbWUpKTtcbiAgbG9nZ2VyLmRlYnVnKFwibGlzdGVkIERhdGFicmlja3MgcHJvZmlsZXNcIiwgeyBwYXRoLCByZWZyZXNoLCBjb3VudDogcHJvZmlsZXMubGVuZ3RoIH0pO1xuICByZXR1cm4gcHJvZmlsZXM7XG59XG5cbi8qKiBSZXNvbHZlIG9wdGlvbnMsIGVudmlyb25tZW50LCByZXF1ZXN0IGhlYWRlcnMsIGFuZCBjb25maWd1cmF0aW9uIGludG8gY3JlZGVudGlhbHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURhdGFicmlja3NQcm9maWxlKFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMsXG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52LFxuKTogRGF0YWJyaWNrc1Byb2ZpbGUge1xuICBjb25zdCBpbkFwcCA9IGVudmlyb25tZW50VXRpbHMuaXNEYXRhYnJpY2tzQXBwRW52KHsgLi4uZW52aXJvbm1lbnQgfSk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSByZXNvbHZlQ29uZmlnRmlsZShvcHRpb25zLmNvbmZpZ0ZpbGUsIGVudmlyb25tZW50KTtcbiAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZyhvcHRpb25zLmNvbmZpZ0ZpbGUsIGZhbHNlLCBlbnZpcm9ubWVudCk7XG4gIGNvbnN0IG9wdGlvblByb2ZpbGUgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy5wcm9maWxlKTtcbiAgY29uc3QgY29uZmlndXJlZEVudmlyb25tZW50UHJvZmlsZSA9IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChcbiAgICBlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFLFxuICApO1xuICBjb25zdCBlbnZpcm9ubWVudFByb2ZpbGUgPVxuICAgIGNvbmZpZ3VyZWRFbnZpcm9ubWVudFByb2ZpbGUgJiYgY29uZmlnPy5oYXMoY29uZmlndXJlZEVudmlyb25tZW50UHJvZmlsZSlcbiAgICAgID8gY29uZmlndXJlZEVudmlyb25tZW50UHJvZmlsZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFwcFNlcnZpY2VQcmluY2lwYWwgPSBbXG4gICAgZW52aXJvbm1lbnQuREFUQUJSSUNLU19IT1NULFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX0lELFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX1NFQ1JFVCxcbiAgXS5ldmVyeSgodmFsdWUpID0+IEJvb2xlYW4oc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHZhbHVlKSkpO1xuICBjb25zdCBleHBsaWNpdFByb2ZpbGUgPSBCb29sZWFuKG9wdGlvblByb2ZpbGUgPz8gZW52aXJvbm1lbnRQcm9maWxlKTtcbiAgY29uc3QgcmVxdWVzdFRva2VuID0gcmVxdWVzdE9ib1Rva2VuKG9wdGlvbnMucmVxdWVzdEhlYWRlcnMsIG9wdGlvbnMuYWNjZXNzVG9rZW5IZWFkZXIpO1xuICBjb25zdCBleHBsaWNpdEF1dGhUeXBlID1cbiAgICBvcHRpb25zLmF1dGhUeXBlID8/XG4gICAgKCFpbkFwcCAmJiAhZXhwbGljaXRQcm9maWxlID8gcGFyc2VBdXRoVHlwZShlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX0FVVEhfVFlQRSkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBzZWxlY3RlZEF1dGhUeXBlID1cbiAgICAhaW5BcHAgfHwgZXhwbGljaXRQcm9maWxlIHx8IGV4cGxpY2l0QXV0aFR5cGVcbiAgICAgID8gZXhwbGljaXRBdXRoVHlwZVxuICAgICAgOiByZXF1ZXN0VG9rZW5cbiAgICAgICAgPyBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mXG4gICAgICAgIDogYXBwU2VydmljZVByaW5jaXBhbFxuICAgICAgICAgID8gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbFxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhcHBBdXRoID1cbiAgICBzZWxlY3RlZEF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mIHx8XG4gICAgc2VsZWN0ZWRBdXRoVHlwZSA9PT0gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbDtcbiAgY29uc3QgaWdub3JlQW1iaWVudENyZWRlbnRpYWxzID0gZXhwbGljaXRQcm9maWxlICYmICFhcHBBdXRoO1xuICBjb25zdCByZXF1ZXN0ZWROYW1lID0gb3B0aW9uUHJvZmlsZSA/PyBlbnZpcm9ubWVudFByb2ZpbGU7XG4gIGNvbnN0IHByb2ZpbGVOYW1lID0gcmVzb2x2ZVByb2ZpbGVOYW1lKFxuICAgIHJlcXVlc3RlZE5hbWUsXG4gICAgZXhwbGljaXRQcm9maWxlLFxuICAgIGNvbmZpZyxcbiAgICBvcHRpb25zLnByZWZlclVzZXJUb01hY2hpbmUgPz8gdHJ1ZSxcbiAgKTtcbiAgY29uc3QgYW1iaWVudENyZWRlbnRpYWxzID0gW1xuICAgIG9wdGlvbnMuYWNjZXNzVG9rZW4sXG4gICAgb3B0aW9ucy5jbGllbnRJZCxcbiAgICBvcHRpb25zLmNsaWVudFNlY3JldCxcbiAgICBlbnZpcm9ubWVudC5EQVRBQlJJQ0tTX1RPS0VOLFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX0lELFxuICAgIGVudmlyb25tZW50LkRBVEFCUklDS1NfQ0xJRU5UX1NFQ1JFVCxcbiAgXS5zb21lKCh2YWx1ZSkgPT4gQm9vbGVhbihzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQodmFsdWUpKSk7XG4gIGNvbnN0IHNlbGVjdGVkUHJvZmlsZSA9XG4gICAgZXhwbGljaXRQcm9maWxlIHx8ICghYW1iaWVudENyZWRlbnRpYWxzICYmIGNvbmZpZz8uaGFzKHByb2ZpbGVOYW1lKSkgPyBwcm9maWxlTmFtZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29uZmlndXJlZCA9IHNlbGVjdGVkUHJvZmlsZSA/IGxvYWRSYXdQcm9maWxlKGNvbmZpZywgcHJvZmlsZU5hbWUpIDoge307XG4gIGNvbnN0IGNyZWRlbnRpYWxOYW1lID0gc2VsZWN0ZWRQcm9maWxlID8/IFwiYW1iaWVudFwiO1xuICBjb25zdCBhbWJpZW50ID0gKG5hbWU6IGtleW9mIE5vZGVKUy5Qcm9jZXNzRW52KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gICAgaWdub3JlQW1iaWVudENyZWRlbnRpYWxzID8gdW5kZWZpbmVkIDogc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVudmlyb25tZW50W25hbWVdKTtcbiAgY29uc3QgaG9zdCA9IG5vcm1hbGl6ZUhvc3QoXG4gICAgb3B0aW9ucy5ob3N0ID8/IGFtYmllbnQoXCJEQVRBQlJJQ0tTX0hPU1RcIikgPz8gY29uZmlndXJlZC5ob3N0LFxuICAgIGNyZWRlbnRpYWxOYW1lLFxuICApO1xuICBjb25zdCBhY2NvdW50SWQgPVxuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChvcHRpb25zLmFjY291bnRJZCkgPz9cbiAgICBhbWJpZW50KFwiREFUQUJSSUNLU19BQ0NPVU5UX0lEXCIpID8/XG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGNvbmZpZ3VyZWQuYWNjb3VudElkKTtcbiAgY29uc3Qgd29ya3NwYWNlSWQgPVxuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChvcHRpb25zLndvcmtzcGFjZUlkKSA/P1xuICAgIGFtYmllbnQoXCJEQVRBQlJJQ0tTX1dPUktTUEFDRV9JRFwiKSA/P1xuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChjb25maWd1cmVkLndvcmtzcGFjZUlkKTtcbiAgY29uc3QgY2xpZW50SWRWYWx1ZSA9XG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKG9wdGlvbnMuY2xpZW50SWQpID8/XG4gICAgYW1iaWVudChcIkRBVEFCUklDS1NfQ0xJRU5UX0lEXCIpID8/XG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGNvbmZpZ3VyZWQuY2xpZW50SWQpO1xuICBjb25zdCBjbGllbnRTZWNyZXQgPVxuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChvcHRpb25zLmNsaWVudFNlY3JldCkgPz9cbiAgICBhbWJpZW50KFwiREFUQUJSSUNLU19DTElFTlRfU0VDUkVUXCIpID8/XG4gICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGNvbmZpZ3VyZWQuY2xpZW50U2VjcmV0KTtcbiAgY29uc3QgYWNjZXNzVG9rZW4gPVxuICAgIHNlbGVjdGVkQXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcE9uQmVoYWxmT2ZcbiAgICAgID8gcmVxdWVzdFRva2VuXG4gICAgICA6IChzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQob3B0aW9ucy5hY2Nlc3NUb2tlbikgPz9cbiAgICAgICAgYW1iaWVudChcIkRBVEFCUklDS1NfVE9LRU5cIikgPz9cbiAgICAgICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGNvbmZpZ3VyZWQuYWNjZXNzVG9rZW4pKTtcbiAgY29uc3QgY29uZmlndXJlZEF1dGhUeXBlID1cbiAgICBzZWxlY3RlZEF1dGhUeXBlID8/XG4gICAgcGFyc2VBdXRoVHlwZShhbWJpZW50KFwiREFUQUJSSUNLU19BVVRIX1RZUEVcIikpID8/XG4gICAgcGFyc2VBdXRoVHlwZShjb25maWd1cmVkLmF1dGhUeXBlKTtcbiAgY29uc3QgYXV0aFR5cGUgPSByZXNvbHZlQXV0aFR5cGUoY29uZmlndXJlZEF1dGhUeXBlLCBjbGllbnRJZFZhbHVlLCBjbGllbnRTZWNyZXQsIGFjY2Vzc1Rva2VuKTtcbiAgY29uc3QgY2xpZW50SWQgPVxuICAgIGF1dGhUeXBlID09PSBBdXRoVHlwZS5EYXRhYnJpY2tzQ2xpXG4gICAgICA/IChjbGllbnRJZFZhbHVlID8/IERFRkFVTFRfQ0xJRU5UX0lEKVxuICAgICAgOiBhdXRoVHlwZSA9PT0gQXV0aFR5cGUuT0F1dGhNMk0gfHwgYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWxcbiAgICAgICAgPyAoY2xpZW50SWRWYWx1ZSA/PyBtaXNzaW5nKGNyZWRlbnRpYWxOYW1lLCBcImNsaWVudF9pZFwiKSlcbiAgICAgICAgOiAoY2xpZW50SWRWYWx1ZSA/PyBcIlwiKTtcbiAgY29uc3Qgc2NvcGVzID0gb3B0aW9ucy5zY29wZXM/Lmxlbmd0aFxuICAgID8gc3RyaW5nVXRpbHMucGFyc2VMaXN0KG9wdGlvbnMuc2NvcGVzKVxuICAgIDogc3RyaW5nVXRpbHMucGFyc2VMaXN0KGNvbmZpZ3VyZWQuc2NvcGVzPy5zcGxpdChcIixcIikgPz8gW1wiYWxsLWFwaXNcIl0pO1xuICBjb25zdCB0YXJnZXQgPSBvcHRpb25zLnRhcmdldCA/IHBhcnNlVGFyZ2V0KG9wdGlvbnMudGFyZ2V0KSA6IGluZmVyVGFyZ2V0KGhvc3QsIGFjY291bnRJZCk7XG4gIGNvbnN0IGdyb3VwSWQgPVxuICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChvcHRpb25zLmdyb3VwSWQpID8/XG4gICAgYW1iaWVudChcIkRBVEFCUklDS1NfR1JPVVBfSURcIikgPz9cbiAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoY29uZmlndXJlZC5ncm91cElkKTtcbiAgY29uc3QgcHJpbmNpcGFsID1cbiAgICBhdXRoVHlwZSA9PT0gQXV0aFR5cGUuT0F1dGhNMk0gfHwgYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWxcbiAgICAgID8gY2xpZW50SWRcbiAgICAgIDogY3JlZGVudGlhbE5hbWU7XG4gIGNvbnN0IGNhY2hlS2V5ID0gY3JlZGVudGlhbENhY2hlS2V5KHtcbiAgICBuYW1lOiBjcmVkZW50aWFsTmFtZSxcbiAgICBob3N0LFxuICAgIGFjY291bnRJZCxcbiAgICB3b3Jrc3BhY2VJZCxcbiAgICBjbGllbnRJZCxcbiAgICBncm91cElkLFxuICAgIHNjb3BlcyxcbiAgICBhdXRoVHlwZSxcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIERhdGFicmlja3MgcHJvZmlsZVwiLCB7XG4gICAgcHJvZmlsZTogY3JlZGVudGlhbE5hbWUsXG4gICAgaG9zdCxcbiAgICBhdXRoVHlwZSxcbiAgICB0YXJnZXQsXG4gICAgaW5BcHAsXG4gICAgZXhwbGljaXRQcm9maWxlLFxuICAgIGNvbmZpZ3VyZWRBdXRoVHlwZTogY29uZmlndXJlZEF1dGhUeXBlID8/IFwiYXV0b21hdGljXCIsXG4gICAgaGFzQWNjb3VudElkOiBCb29sZWFuKGFjY291bnRJZCksXG4gICAgaGFzV29ya3NwYWNlSWQ6IEJvb2xlYW4od29ya3NwYWNlSWQpLFxuICAgIGhhc0dyb3VwSWQ6IEJvb2xlYW4oZ3JvdXBJZCksXG4gICAgc2NvcGVDb3VudDogc2NvcGVzLmxlbmd0aCxcbiAgICBjb25maWdQYXRoLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBjcmVkZW50aWFsTmFtZSxcbiAgICAuLi4oc2VsZWN0ZWRQcm9maWxlID8geyBzZWxlY3RlZFByb2ZpbGUgfSA6IHt9KSxcbiAgICBob3N0LFxuICAgIC4uLihhY2NvdW50SWQgPyB7IGFjY291bnRJZCB9IDoge30pLFxuICAgIC4uLih3b3Jrc3BhY2VJZCA/IHsgd29ya3NwYWNlSWQgfSA6IHt9KSxcbiAgICBjbGllbnRJZCxcbiAgICAuLi4oZ3JvdXBJZCA/IHsgZ3JvdXBJZCB9IDoge30pLFxuICAgIHNjb3BlcyxcbiAgICB0YXJnZXQsXG4gICAgYXV0aFR5cGUsXG4gICAgLi4uKGNsaWVudFNlY3JldCA/IHsgY2xpZW50U2VjcmV0IH0gOiB7fSksXG4gICAgLi4uKGFjY2Vzc1Rva2VuID8geyBhY2Nlc3NUb2tlbiB9IDoge30pLFxuICAgIGNhY2hlS2V5LFxuICAgIHByaW5jaXBhbCxcbiAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBPQXV0aCBzY29wZXMgZm9yIG1hY2hpbmUgY3JlZGVudGlhbHMuICovXG5leHBvcnQgZnVuY3Rpb24gbWFjaGluZVNjb3BlcyhzY29wZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gc3RyaW5nVXRpbHMucGFyc2VMaXN0KHNjb3Blcy5sZW5ndGggPyBzY29wZXMgOiBbXCJhbGwtYXBpc1wiXSkuc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjcmVkZW50aWFsQ2FjaGVLZXkoXG4gIHByb2ZpbGU6IFBpY2s8XG4gICAgRGF0YWJyaWNrc1Byb2ZpbGUsXG4gICAgfCBcIm5hbWVcIlxuICAgIHwgXCJob3N0XCJcbiAgICB8IFwiYWNjb3VudElkXCJcbiAgICB8IFwid29ya3NwYWNlSWRcIlxuICAgIHwgXCJjbGllbnRJZFwiXG4gICAgfCBcImdyb3VwSWRcIlxuICAgIHwgXCJzY29wZXNcIlxuICAgIHwgXCJhdXRoVHlwZVwiXG4gICAgfCBcImFjY2Vzc1Rva2VuXCJcbiAgPixcbik6IHN0cmluZyB7XG4gIGlmIChwcm9maWxlLmF1dGhUeXBlID09PSBBdXRoVHlwZS5EYXRhYnJpY2tzQ2xpKSByZXR1cm4gcHJvZmlsZS5uYW1lO1xuICBpZiAocHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlbikge1xuICAgIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgIC51cGRhdGUocHJvZmlsZS5hY2Nlc3NUb2tlbiA/PyBcIlwiKVxuICAgICAgLmRpZ2VzdChcImhleFwiKTtcbiAgICByZXR1cm4gYCR7cHJvZmlsZS5uYW1lfS1wYXQtJHtkaWdlc3R9YDtcbiAgfVxuICBpZiAocHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuQXBwT25CZWhhbGZPZikgcmV0dXJuIGAke3Byb2ZpbGUubmFtZX0tYXBwLW9ib2A7XG4gIGNvbnN0IGlkZW50aXR5ID0gW1xuICAgIHByb2ZpbGUuaG9zdCxcbiAgICBwcm9maWxlLmFjY291bnRJZCA/PyBcIlwiLFxuICAgIHByb2ZpbGUud29ya3NwYWNlSWQgPz8gXCJcIixcbiAgICBwcm9maWxlLmNsaWVudElkLFxuICAgIHByb2ZpbGUuZ3JvdXBJZCA/PyBcIlwiLFxuICAgIG1hY2hpbmVTY29wZXMocHJvZmlsZS5zY29wZXMpLmpvaW4oXCIgXCIpLFxuICBdLmpvaW4oXCJcXDBcIik7XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGlkZW50aXR5KS5kaWdlc3QoXCJoZXhcIik7XG4gIHJldHVybiBgJHtwcm9maWxlLm5hbWV9LSR7cHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuQXBwU2VydmljZVByaW5jaXBhbCA/IFwiYXBwLXNwXCIgOiBcIm9hdXRoLW0ybVwifS0ke2RpZ2VzdH1gO1xufVxuIl19
package/lib/src/client.js CHANGED
@@ -8,6 +8,7 @@ import { machineScopes, resolveConfigFile, resolveDatabricksProfile } from "./_p
8
8
  import { DatabricksServicePrincipalProvider } from "./_service-principal.js";
9
9
  import { MemoryCredentialStore } from "./_storage.js";
10
10
  import { AUTH_DEFAULTS, DEFAULT_ACCESS_TOKEN_HEADER, WORKSPACE_ID_HEADER, } from "./config.js";
11
+ import { _databricksRuntimeAuthClient, createDatabricksRuntimeAuthClient } from "./runtime-auth.js";
11
12
  const logger = authLogger("databricks");
12
13
  /** Default Databricks auth facade over the provider-neutral lifecycle. */
13
14
  class DefaultAuthClient {
@@ -81,6 +82,16 @@ class DefaultAuthClient {
81
82
  }
82
83
  /** Create a Databricks authentication client. */
83
84
  export async function createAuthClient(options = {}, dependencies = {}) {
85
+ if (usesDefaultCredentialSource(options)) {
86
+ const runtime = await _databricksRuntimeAuthClient();
87
+ if (runtime) {
88
+ logger.debug("selected Databricks Python runtime authentication", {
89
+ host: runtime.host,
90
+ hasWorkspaceId: Boolean(runtime.workspaceId),
91
+ });
92
+ return createDatabricksRuntimeAuthClient(runtime, options);
93
+ }
94
+ }
84
95
  return createResolvedAuth(options, dependencies);
85
96
  }
86
97
  /** Resolve a Databricks profile and create its token lifecycle. */
@@ -220,4 +231,7 @@ function cliEnvironment(profile, configFile) {
220
231
  function stringValue(value) {
221
232
  return typeof value === "string" && value.trim() ? value : undefined;
222
233
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRELE9BQU8sRUFDTCxhQUFhLEVBRWIsMkJBQTJCLEVBQzNCLG1CQUFtQixHQUNwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFnQ3hDLDBFQUEwRTtBQUMxRSxNQUFNLGlCQUFpQjtJQVVGO0lBQ0E7SUFDQTtJQVhWLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQVM7SUFDYixTQUFTLENBQVU7SUFDbkIsV0FBVyxDQUFVO0lBQ3JCLE1BQU0sQ0FBYTtJQUNuQixRQUFRLENBQVc7SUFDbkIsU0FBUyxDQUFTO0lBRTNCLFlBQ21CLFlBQStCLEVBQy9CLE1BQXVCLEVBQ3ZCLFlBQW9CO1FBRnBCLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtR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RUFBRSxLQUFLO2dCQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBWTthQUN2QztZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhYnJpY2tzQXV0aENsaWVudEluZm8gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aC9jbGllbnRcIjtcbmltcG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvY29uZmlnXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzQ2xpUHJvdmlkZXIsIHJlc29sdmVEYXRhYnJpY2tzQ2xpIH0gZnJvbSBcIi4vX2RhdGFicmlja3MtY2xpLnRzXCI7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tIFwiLi9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBwdWJsaWNUb2tlbiwgVG9rZW5MaWZlY3ljbGUgfSBmcm9tIFwiLi9fbGlmZWN5Y2xlLnRzXCI7XG5pbXBvcnQgeyBhdXRoTG9nZ2VyLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NQZXJzb25hbEFjY2Vzc1Rva2VuUHJvdmlkZXIgfSBmcm9tIFwiLi9fcGVyc29uYWwtYWNjZXNzLXRva2VuLnRzXCI7XG5pbXBvcnQgeyBtYWNoaW5lU2NvcGVzLCByZXNvbHZlQ29uZmlnRmlsZSwgcmVzb2x2ZURhdGFicmlja3NQcm9maWxlIH0gZnJvbSBcIi4vX3Byb2ZpbGUtY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzU2VydmljZVByaW5jaXBhbFByb3ZpZGVyIH0gZnJvbSBcIi4vX3NlcnZpY2UtcHJpbmNpcGFsLnRzXCI7XG5pbXBvcnQgeyBNZW1vcnlDcmVkZW50aWFsU3RvcmUgfSBmcm9tIFwiLi9fc3RvcmFnZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYnJpY2tzUHJvZmlsZSwgdHlwZSBUb2tlbiwgdHlwZSBUb2tlblByb3ZpZGVyIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5pbXBvcnQge1xuICBBVVRIX0RFRkFVTFRTLFxuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLFxuICBXT1JLU1BBQ0VfSURfSEVBREVSLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gYXV0aExvZ2dlcihcImRhdGFicmlja3NcIik7XG5cbi8qKiBQdWJsaWMgY3JlZGVudGlhbCByZXN1bHQgd2l0aCBubyByZWZyZXNoIHRva2VuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICBleHBpcnk/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKiBUb2tlbiBhY3F1aXNpdGlvbiBjb250cm9scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5PcHRpb25zIHtcbiAgLyoqIFBlcm1pdCBpbnRlcmFjdGl2ZSBDTEkgbG9naW4gd2hlbiByZXF1aXJlZC4gKi9cbiAgbG9naW4/OiBib29sZWFuO1xuICAvKiogQnlwYXNzIGEgcmV1c2FibGUgY2FjaGVkIHRva2VuIGFuZCByZWZyZXNoIGl0LiAqL1xuICByZWZyZXNoPzogYm9vbGVhbjtcbn1cblxuLyoqIFdvcmtzcGFjZUNsaWVudC1zaGFwZWQgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbiBmYWNhZGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDbGllbnQgZXh0ZW5kcyBEYXRhYnJpY2tzQXV0aENsaWVudEluZm8ge1xuICB0b2tlbihvcHRpb25zPzogVG9rZW5PcHRpb25zKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIGhlYWRlcnMob3B0aW9ucz86IFRva2VuT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKiogSW5qZWN0YWJsZSBob3N0IGNhcGFiaWxpdGllcyBmb3IgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMge1xuICBlbnZpcm9ubWVudD86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuICBmZXRjaD86IHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoO1xuICByZXNvbHZlQ2xpPzogKCkgPT4gUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG4vKiogRGVmYXVsdCBEYXRhYnJpY2tzIGF1dGggZmFjYWRlIG92ZXIgdGhlIHByb3ZpZGVyLW5ldXRyYWwgbGlmZWN5Y2xlLiAqL1xuY2xhc3MgRGVmYXVsdEF1dGhDbGllbnQgaW1wbGVtZW50cyBBdXRoQ2xpZW50IHtcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ6IFRhcmdldEtpbmQ7XG4gIHJlYWRvbmx5IGF1dGhUeXBlOiBBdXRoVHlwZTtcbiAgcmVhZG9ubHkgcHJpbmNpcGFsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlVmFsdWU6IERhdGFicmlja3NQcm9maWxlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50PzogVG9rZW5MaWZlY3ljbGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0VG9rZW4/OiBUb2tlbixcbiAgKSB7XG4gICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZVZhbHVlLnNlbGVjdGVkUHJvZmlsZTtcbiAgICB0aGlzLmhvc3QgPSBwcm9maWxlVmFsdWUuaG9zdDtcbiAgICB0aGlzLmFjY291bnRJZCA9IHByb2ZpbGVWYWx1ZS5hY2NvdW50SWQ7XG4gICAgdGhpcy53b3Jrc3BhY2VJZCA9IHByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZDtcbiAgICB0aGlzLnRhcmdldCA9IHByb2ZpbGVWYWx1ZS50YXJnZXQ7XG4gICAgdGhpcy5hdXRoVHlwZSA9IHByb2ZpbGVWYWx1ZS5hdXRoVHlwZTtcbiAgICB0aGlzLnByaW5jaXBhbCA9IHByb2ZpbGVWYWx1ZS5wcmluY2lwYWw7XG4gIH1cblxuICB0b2tlbihvcHRpb25zOiBUb2tlbk9wdGlvbnMgPSB7fSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkRhdGFicmlja3MgdG9rZW4gcmVxdWVzdGVkXCIsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgbG9naW46IG9wdGlvbnMubG9naW4gPz8gXCJhdXRvXCIsXG4gICAgICByZWZyZXNoOiBvcHRpb25zLnJlZnJlc2ggPz8gZmFsc2UsXG4gICAgICBzb3VyY2U6IHRoaXMucmVxdWVzdFRva2VuID8gXCJyZXF1ZXN0XCIgOiBcImxpZmVjeWNsZVwiLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnJlcXVlc3RUb2tlbikgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwdWJsaWNUb2tlbih0aGlzLnJlcXVlc3RUb2tlbikpO1xuICAgIHJldHVybiBvcHRpb25zLnJlZnJlc2hcbiAgICAgID8gdGhpcy5yZXF1aXJlZENsaWVudCgpLmZvcmNlUmVmcmVzaChvcHRpb25zLmxvZ2luID8/IHRydWUpXG4gICAgICA6IHRoaXMucmVxdWlyZWRDbGllbnQoKS50b2tlbldpdGhMb2dpbihvcHRpb25zLmxvZ2luKTtcbiAgfVxuXG4gIGFzeW5jIGhlYWRlcnMob3B0aW9uczogVG9rZW5PcHRpb25zID0ge30pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMudG9rZW4ob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgIFtERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVJdOiBgJHt0b2tlbi50b2tlblR5cGV9ICR7dG9rZW4uYWNjZXNzVG9rZW59YCxcbiAgICAgIC4uLih0aGlzLnByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZFxuICAgICAgICA/IHsgW1dPUktTUEFDRV9JRF9IRUFERVJdOiB0aGlzLnByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZCB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gICAgbG9nZ2VyLmRlYnVnKFwiZ2VuZXJhdGVkIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gaGVhZGVyc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgIGhlYWRlck5hbWVzOiBPYmplY3Qua2V5cyhoZWFkZXJzKSxcbiAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKHRva2VuKSxcbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJEYXRhYnJpY2tzIGxvZ291dCByZXF1ZXN0ZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudD8ubG9nb3V0KCkgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVkQ2xpZW50KCk6IFRva2VuTGlmZWN5Y2xlIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50KSB0aHJvdyBuZXcgQXV0aEVycm9yKFwib2F1dGhcIiwgXCJBdXRoZW50aWNhdGlvbiBsaWZlY3ljbGUgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGVWYWx1ZS5uYW1lLFxuICAgICAgaG9zdDogdGhpcy5wcm9maWxlVmFsdWUuaG9zdCxcbiAgICAgIGF1dGhUeXBlOiB0aGlzLnByb2ZpbGVWYWx1ZS5hdXRoVHlwZSxcbiAgICAgIGhhc1dvcmtzcGFjZUlkOiBCb29sZWFuKHRoaXMucHJvZmlsZVZhbHVlLndvcmtzcGFjZUlkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBDcmVhdGUgYSBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIGNsaWVudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBdXRoQ2xpZW50KFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMgPSB7fSxcbiAgZGVwZW5kZW5jaWVzOiBEYXRhYnJpY2tzQXV0aERlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxBdXRoQ2xpZW50PiB7XG4gIHJldHVybiBjcmVhdGVSZXNvbHZlZEF1dGgob3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbn1cblxuLyoqIFJlc29sdmUgYSBEYXRhYnJpY2tzIHByb2ZpbGUgYW5kIGNyZWF0ZSBpdHMgdG9rZW4gbGlmZWN5Y2xlLiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZWRBdXRoKFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMsXG4gIGRlcGVuZGVuY2llczogRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMsXG4pOiBQcm9taXNlPERlZmF1bHRBdXRoQ2xpZW50PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZGVwZW5kZW5jaWVzLmVudmlyb25tZW50ID8/IHByb2Nlc3MuZW52O1xuICBjb25zdCBwcm9maWxlID0gcmVzb2x2ZURhdGFicmlja3NQcm9maWxlKG9wdGlvbnMsIGVudmlyb25tZW50KTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRpbmcgRGF0YWJyaWNrcyBhdXRoXCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgIGF1dGhUeXBlOiBwcm9maWxlLmF1dGhUeXBlLFxuICB9KTtcbiAgaWYgKHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcE9uQmVoYWxmT2YpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVkIHJlcXVlc3Qtc2NvcGVkIEFwcCBPQk8gYXV0aGVudGljYXRpb25cIiwge1xuICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgICAgaGFzV29ya3NwYWNlSWQ6IEJvb2xlYW4ocHJvZmlsZS53b3Jrc3BhY2VJZCksXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0QXV0aENsaWVudChwcm9maWxlLCB1bmRlZmluZWQsIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBwcm9maWxlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHRva2VuVHlwZTogXCJCZWFyZXJcIixcbiAgICAgIHNjb3BlczogWy4uLnByb2ZpbGUuc2NvcGVzXSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRm9yKHByb2ZpbGUsIG9wdGlvbnMsIGRlcGVuZGVuY2llcyk7XG4gIGNvbnN0IHN0b3JlID0gbmV3IE1lbW9yeUNyZWRlbnRpYWxTdG9yZSgpO1xuICBjb25zdCBjbGllbnQgPSBuZXcgVG9rZW5MaWZlY3ljbGUocHJvZmlsZS5jYWNoZUtleSwgcHJvdmlkZXIsIHN0b3JlLCB7XG4gICAgLi4uQVVUSF9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLmF1dGgsXG4gIH0pO1xuICBjb25zdCBhdXRoID0gbmV3IERlZmF1bHRBdXRoQ2xpZW50KHByb2ZpbGUsIGNsaWVudCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZWQgYXV0aGVudGljYXRpb24gbGlmZWN5Y2xlXCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgIGF1dGhUeXBlOiBwcm9maWxlLmF1dGhUeXBlLFxuICB9KTtcbiAgcmV0dXJuIGF1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb3ZpZGVyRm9yKFxuICBwcm9maWxlOiBEYXRhYnJpY2tzUHJvZmlsZSxcbiAgb3B0aW9uczogRGF0YWJyaWNrc0F1dGhPcHRpb25zLFxuICBkZXBlbmRlbmNpZXM6IERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxUb2tlblByb3ZpZGVyPiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZGVwZW5kZW5jaWVzLmVudmlyb25tZW50ID8/IHByb2Nlc3MuZW52O1xuICBzd2l0Y2ggKHByb2ZpbGUuYXV0aFR5cGUpIHtcbiAgICBjYXNlIEF1dGhUeXBlLkRhdGFicmlja3NDbGk6IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIERhdGFicmlja3MgQ0xJIHByb3ZpZGVyXCIsIHsgcHJvZmlsZTogcHJvZmlsZS5uYW1lIH0pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzQ2xpUHJvdmlkZXIoXG4gICAgICAgIHByb2ZpbGUubmFtZSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBkZXBlbmRlbmNpZXMucmVzb2x2ZUNsaSA/IGRlcGVuZGVuY2llcy5yZXNvbHZlQ2xpKCkgOiByZXNvbHZlRGF0YWJyaWNrc0NsaShlbnZpcm9ubWVudCksXG4gICAgICAgIGNsaUVudmlyb25tZW50KHByb2ZpbGUsIHJlc29sdmVDb25maWdGaWxlKG9wdGlvbnMuY29uZmlnRmlsZSwgZW52aXJvbm1lbnQpKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlbjpcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiBwcm92aWRlclwiLCB7IHByb2ZpbGU6IHByb2ZpbGUubmFtZSB9KTtcbiAgICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc1BlcnNvbmFsQWNjZXNzVG9rZW5Qcm92aWRlcihwcm9maWxlLmFjY2Vzc1Rva2VuISk7XG4gICAgY2FzZSBBdXRoVHlwZS5PQXV0aE0yTTpcbiAgICBjYXNlIEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWw6IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHNlcnZpY2UtcHJpbmNpcGFsIHByb3ZpZGVyXCIsIHtcbiAgICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgICBhdXRoVHlwZTogcHJvZmlsZS5hdXRoVHlwZSxcbiAgICAgICAgdGFyZ2V0OiBwcm9maWxlLnRhcmdldCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgcmVzb2x2ZU9BdXRoRW5kcG9pbnRzKHByb2ZpbGUsIGRlcGVuZGVuY2llcy5mZXRjaCk7XG4gICAgICByZXR1cm4gbmV3IERhdGFicmlja3NTZXJ2aWNlUHJpbmNpcGFsUHJvdmlkZXIoe1xuICAgICAgICB0b2tlbkVuZHBvaW50OiBlbmRwb2ludHMudG9rZW5FbmRwb2ludCxcbiAgICAgICAgY2xpZW50SWQ6IHByb2ZpbGUuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvZmlsZS5jbGllbnRTZWNyZXQhLFxuICAgICAgICBzY29wZXM6IG1hY2hpbmVTY29wZXMocHJvZmlsZS5zY29wZXMpLFxuICAgICAgICAuLi4ocHJvZmlsZS5ncm91cElkID8geyBncm91cElkOiBwcm9maWxlLmdyb3VwSWQgfSA6IHt9KSxcbiAgICAgICAgYWxsb3dJbnNlY3VyZVJlcXVlc3RzOiBpc0xvb3BiYWNrSHR0cChwcm9maWxlLmhvc3QpLFxuICAgICAgICBmZXRjaDogZGVwZW5kZW5jaWVzLmZldGNoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgQXV0aFR5cGUuQXBwT25CZWhhbGZPZjpcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJBcHAgT0JPIHRva2VucyBkbyBub3QgdXNlIGEgdG9rZW4gcHJvdmlkZXJcIik7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEF1dGhvcml6YXRpb25TZXJ2ZXIge1xuICB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPQXV0aEVuZHBvaW50cyhcbiAgcHJvZmlsZTogRGF0YWJyaWNrc1Byb2ZpbGUsXG4gIGZldGNoZXI6IHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoID0gZ2xvYmFsVGhpcy5mZXRjaCxcbik6IFByb21pc2U8QXV0aG9yaXphdGlvblNlcnZlcj4ge1xuICBjb25zdCBob3N0ID0gcHJvZmlsZS5ob3N0LnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgaWYgKHByb2ZpbGUudGFyZ2V0ID09PSBUYXJnZXRLaW5kLkFjY291bnQpIHtcbiAgICBpZiAoIXByb2ZpbGUuYWNjb3VudElkKSB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiQWNjb3VudCB0YXJnZXQgcmVxdWlyZXMgYWNjb3VudF9pZFwiKTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSB7XG4gICAgICB0b2tlbkVuZHBvaW50OiBgJHtob3N0fS9vaWRjL2FjY291bnRzLyR7cHJvZmlsZS5hY2NvdW50SWR9L3YxL3Rva2VuYCxcbiAgICB9O1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIGFjY291bnQgT0F1dGggZW5kcG9pbnRcIiwge1xuICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgdG9rZW5PcmlnaW46IG5ldyBVUkwoZW5kcG9pbnRzLnRva2VuRW5kcG9pbnQpLm9yaWdpbixcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xuICB9XG4gIGNvbnN0IGRpc2NvdmVyeSA9XG4gICAgcHJvZmlsZS50YXJnZXQgPT09IFRhcmdldEtpbmQuVW5pZmllZFxuICAgICAgPyBgJHtob3N0fS9vaWRjL2FjY291bnRzLyR7cmVxdWlyZWRBY2NvdW50SWQocHJvZmlsZSl9Ly53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyYFxuICAgICAgOiBgJHtob3N0fS9vaWRjLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyYDtcbiAgbG9nZ2VyLmRlYnVnKFwicmVxdWVzdGluZyBPQXV0aCBkaXNjb3ZlcnlcIiwge1xuICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICB0YXJnZXQ6IHByb2ZpbGUudGFyZ2V0LFxuICAgIGRpc2NvdmVyeSxcbiAgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hlcihkaXNjb3ZlcnksIHsgcmVkaXJlY3Q6IFwibWFudWFsXCIgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlY2VpdmVkIE9BdXRoIGRpc2NvdmVyeSByZXNwb25zZVwiLCB7XG4gICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICB9KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcIm9hdXRoXCIsIGBPQXV0aCBpcyBub3Qgc3VwcG9ydGVkIGF0ICR7ZGlzY292ZXJ5fWApO1xuICB9XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwib2F1dGhcIiwgYE9BdXRoIGRpc2NvdmVyeSByZXR1cm5lZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHRva2VuRW5kcG9pbnQgPSBzdHJpbmdWYWx1ZSh2YWx1ZS50b2tlbl9lbmRwb2ludCk7XG4gIGlmICghdG9rZW5FbmRwb2ludCkgdGhyb3cgbmV3IEF1dGhFcnJvcihcIm9hdXRoXCIsIFwiT0F1dGggZGlzY292ZXJ5IHJlc3BvbnNlIGlzIGluY29tcGxldGVcIik7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIE9BdXRoIHRva2VuIGVuZHBvaW50XCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgdG9rZW5PcmlnaW46IG5ldyBVUkwodG9rZW5FbmRwb2ludCkub3JpZ2luLFxuICB9KTtcbiAgcmV0dXJuIHsgdG9rZW5FbmRwb2ludCB9O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZEFjY291bnRJZChwcm9maWxlOiBEYXRhYnJpY2tzUHJvZmlsZSk6IHN0cmluZyB7XG4gIGlmICghcHJvZmlsZS5hY2NvdW50SWQpIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJVbmlmaWVkIHRhcmdldCByZXF1aXJlcyBhY2NvdW50X2lkXCIpO1xuICByZXR1cm4gcHJvZmlsZS5hY2NvdW50SWQ7XG59XG5cbmZ1bmN0aW9uIGlzTG9vcGJhY2tIdHRwKGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhvc3QpO1xuICByZXR1cm4gdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgJiYgW1wiMTI3LjAuMC4xXCIsIFwibG9jYWxob3N0XCJdLmluY2x1ZGVzKHVybC5ob3N0bmFtZSk7XG59XG5cbmZ1bmN0aW9uIGNsaUVudmlyb25tZW50KHByb2ZpbGU6IERhdGFicmlja3NQcm9maWxlLCBjb25maWdGaWxlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBEQVRBQlJJQ0tTX0NPTkZJR19GSUxFOiBjb25maWdGaWxlLFxuICAgIERBVEFCUklDS1NfQ09ORklHX1BST0ZJTEU6IHByb2ZpbGUubmFtZSxcbiAgICBEQVRBQlJJQ0tTX0hPU1Q6IHByb2ZpbGUuaG9zdCxcbiAgICAuLi4ocHJvZmlsZS5hY2NvdW50SWQgPyB7IERBVEFCUklDS1NfQUNDT1VOVF9JRDogcHJvZmlsZS5hY2NvdW50SWQgfSA6IHt9KSxcbiAgICAuLi4ocHJvZmlsZS53b3Jrc3BhY2VJZCA/IHsgREFUQUJSSUNLU19XT1JLU1BBQ0VfSUQ6IHByb2ZpbGUud29ya3NwYWNlSWQgfSA6IHt9KSxcbiAgICAuLi4ocHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlblxuICAgICAgPyB7XG4gICAgICAgICAgREFUQUJSSUNLU19BVVRIX1RZUEU6IFwicGF0XCIsXG4gICAgICAgICAgREFUQUJSSUNLU19UT0tFTjogcHJvZmlsZS5hY2Nlc3NUb2tlbiEsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdHJpbmdWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG4iXX0=
234
+ function usesDefaultCredentialSource(options) {
235
+ return Object.values(options).every((value) => value === undefined);
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRELE9BQU8sRUFDTCxhQUFhLEVBRWIsMkJBQTJCLEVBQzNCLG1CQUFtQixHQUNwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFnQ3hDLDBFQUEwRTtBQUMxRSxNQUFNLGlCQUFpQjtJQVVGO0lBQ0E7SUFDQTtJQVhWLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQVM7SUFDYixTQUFTLENBQVU7SUFDbkIsV0FBVyxDQUFVO0lBQ3JCLE1BQU0sQ0FBYTtJQUNuQixRQUFRLENBQVc7SUFDbkIsU0FBUyxDQUFTO0lBRTNCLFlBQ21CLFlB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LFVBQVU7UUFDbEMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDdkMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxtQkFBbUI7WUFDbkQsQ0FBQyxDQUFDO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxXQUFZO2FBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUFDLE9BQThCO0lBQ2pFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhYnJpY2tzQXV0aENsaWVudEluZm8gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aC9jbGllbnRcIjtcbmltcG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvY29uZmlnXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzQ2xpUHJvdmlkZXIsIHJlc29sdmVEYXRhYnJpY2tzQ2xpIH0gZnJvbSBcIi4vX2RhdGFicmlja3MtY2xpLnRzXCI7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tIFwiLi9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBwdWJsaWNUb2tlbiwgVG9rZW5MaWZlY3ljbGUgfSBmcm9tIFwiLi9fbGlmZWN5Y2xlLnRzXCI7XG5pbXBvcnQgeyBhdXRoTG9nZ2VyLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NQZXJzb25hbEFjY2Vzc1Rva2VuUHJvdmlkZXIgfSBmcm9tIFwiLi9fcGVyc29uYWwtYWNjZXNzLXRva2VuLnRzXCI7XG5pbXBvcnQgeyBtYWNoaW5lU2NvcGVzLCByZXNvbHZlQ29uZmlnRmlsZSwgcmVzb2x2ZURhdGFicmlja3NQcm9maWxlIH0gZnJvbSBcIi4vX3Byb2ZpbGUtY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzU2VydmljZVByaW5jaXBhbFByb3ZpZGVyIH0gZnJvbSBcIi4vX3NlcnZpY2UtcHJpbmNpcGFsLnRzXCI7XG5pbXBvcnQgeyBNZW1vcnlDcmVkZW50aWFsU3RvcmUgfSBmcm9tIFwiLi9fc3RvcmFnZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYnJpY2tzUHJvZmlsZSwgdHlwZSBUb2tlbiwgdHlwZSBUb2tlblByb3ZpZGVyIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5pbXBvcnQge1xuICBBVVRIX0RFRkFVTFRTLFxuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLFxuICBXT1JLU1BBQ0VfSURfSEVBREVSLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IF9kYXRhYnJpY2tzUnVudGltZUF1dGhDbGllbnQsIGNyZWF0ZURhdGFicmlja3NSdW50aW1lQXV0aENsaWVudCB9IGZyb20gXCIuL3J1bnRpbWUtYXV0aC50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBhdXRoTG9nZ2VyKFwiZGF0YWJyaWNrc1wiKTtcblxuLyoqIFB1YmxpYyBjcmVkZW50aWFsIHJlc3VsdCB3aXRoIG5vIHJlZnJlc2ggdG9rZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc1Rva2VuIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgdG9rZW5UeXBlOiBzdHJpbmc7XG4gIGV4cGlyeT86IHN0cmluZztcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFRva2VuIGFjcXVpc2l0aW9uIGNvbnRyb2xzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbk9wdGlvbnMge1xuICAvKiogUGVybWl0IGludGVyYWN0aXZlIENMSSBsb2dpbiB3aGVuIHJlcXVpcmVkLiAqL1xuICBsb2dpbj86IGJvb2xlYW47XG4gIC8qKiBCeXBhc3MgYSByZXVzYWJsZSBjYWNoZWQgdG9rZW4gYW5kIHJlZnJlc2ggaXQuICovXG4gIHJlZnJlc2g/OiBib29sZWFuO1xufVxuXG4vKiogV29ya3NwYWNlQ2xpZW50LXNoYXBlZCBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIGZhY2FkZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENsaWVudCBleHRlbmRzIERhdGFicmlja3NBdXRoQ2xpZW50SW5mbyB7XG4gIHRva2VuKG9wdGlvbnM/OiBUb2tlbk9wdGlvbnMpOiBQcm9taXNlPEFjY2Vzc1Rva2VuPjtcbiAgaGVhZGVycyhvcHRpb25zPzogVG9rZW5PcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgbG9nb3V0KCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBJbmplY3RhYmxlIGhvc3QgY2FwYWJpbGl0aWVzIGZvciBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzQXV0aERlcGVuZGVuY2llcyB7XG4gIGVudmlyb25tZW50PzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj47XG4gIGZldGNoPzogdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG4gIHJlc29sdmVDbGk/OiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKiBEZWZhdWx0IERhdGFicmlja3MgYXV0aCBmYWNhZGUgb3ZlciB0aGUgcHJvdmlkZXItbmV1dHJhbCBsaWZlY3ljbGUuICovXG5jbGFzcyBEZWZhdWx0QXV0aENsaWVudCBpbXBsZW1lbnRzIEF1dGhDbGllbnQge1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldDogVGFyZ2V0S2luZDtcbiAgcmVhZG9ubHkgYXV0aFR5cGU6IEF1dGhUeXBlO1xuICByZWFkb25seSBwcmluY2lwYWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVWYWx1ZTogRGF0YWJyaWNrc1Byb2ZpbGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ/OiBUb2tlbkxpZmVjeWNsZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RUb2tlbj86IFRva2VuLFxuICApIHtcbiAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlVmFsdWUuc2VsZWN0ZWRQcm9maWxlO1xuICAgIHRoaXMuaG9zdCA9IHByb2ZpbGVWYWx1ZS5ob3N0O1xuICAgIHRoaXMuYWNjb3VudElkID0gcHJvZmlsZVZhbHVlLmFjY291bnRJZDtcbiAgICB0aGlzLndvcmtzcGFjZUlkID0gcHJvZmlsZVZhbHVlLndvcmtzcGFjZUlkO1xuICAgIHRoaXMudGFyZ2V0ID0gcHJvZmlsZVZhbHVlLnRhcmdldDtcbiAgICB0aGlzLmF1dGhUeXBlID0gcHJvZmlsZVZhbHVlLmF1dGhUeXBlO1xuICAgIHRoaXMucHJpbmNpcGFsID0gcHJvZmlsZVZhbHVlLnByaW5jaXBhbDtcbiAgfVxuXG4gIHRva2VuKG9wdGlvbnM6IFRva2VuT3B0aW9ucyA9IHt9KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiRGF0YWJyaWNrcyB0b2tlbiByZXF1ZXN0ZWRcIiwge1xuICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICBsb2dpbjogb3B0aW9ucy5sb2dpbiA/PyBcImF1dG9cIixcbiAgICAgIHJlZnJlc2g6IG9wdGlvbnMucmVmcmVzaCA/PyBmYWxzZSxcbiAgICAgIHNvdXJjZTogdGhpcy5yZXF1ZXN0VG9rZW4gPyBcInJlcXVlc3RcIiA6IFwibGlmZWN5Y2xlXCIsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMucmVxdWVzdFRva2VuKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHB1YmxpY1Rva2VuKHRoaXMucmVxdWVzdFRva2VuKSk7XG4gICAgcmV0dXJuIG9wdGlvbnMucmVmcmVzaFxuICAgICAgPyB0aGlzLnJlcXVpcmVkQ2xpZW50KCkuZm9yY2VSZWZyZXNoKG9wdGlvbnMubG9naW4gPz8gdHJ1ZSlcbiAgICAgIDogdGhpcy5yZXF1aXJlZENsaWVudCgpLnRva2VuV2l0aExvZ2luKG9wdGlvbnMubG9naW4pO1xuICB9XG5cbiAgYXN5bmMgaGVhZGVycyhvcHRpb25zOiBUb2tlbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy50b2tlbihvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgW0RFRkFVTFRfQUNDRVNTX1RPS0VOX0hFQURFUl06IGAke3Rva2VuLnRva2VuVHlwZX0gJHt0b2tlbi5hY2Nlc3NUb2tlbn1gLFxuICAgICAgLi4uKHRoaXMucHJvZmlsZVZhbHVlLndvcmtzcGFjZUlkXG4gICAgICAgID8geyBbV09SS1NQQUNFX0lEX0hFQURFUl06IHRoaXMucHJvZmlsZVZhbHVlLndvcmtzcGFjZUlkIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXCJnZW5lcmF0ZWQgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbiBoZWFkZXJzXCIsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgaGVhZGVyTmFtZXM6IE9iamVjdC5rZXlzKGhlYWRlcnMpLFxuICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEodG9rZW4pLFxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkRhdGFicmlja3MgbG9nb3V0IHJlcXVlc3RlZFwiLCB0aGlzLmNvbnRleHQoKSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50Py5sb2dvdXQoKSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZWRDbGllbnQoKTogVG9rZW5MaWZlY3ljbGUge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBcIkF1dGhlbnRpY2F0aW9uIGxpZmVjeWNsZSBpcyBub3QgYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY29udGV4dCgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZVZhbHVlLm5hbWUsXG4gICAgICBob3N0OiB0aGlzLnByb2ZpbGVWYWx1ZS5ob3N0LFxuICAgICAgYXV0aFR5cGU6IHRoaXMucHJvZmlsZVZhbHVlLmF1dGhUeXBlLFxuICAgICAgaGFzV29ya3NwYWNlSWQ6IEJvb2xlYW4odGhpcy5wcm9maWxlVmFsdWUud29ya3NwYWNlSWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqIENyZWF0ZSBhIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gY2xpZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF1dGhDbGllbnQoXG4gIG9wdGlvbnM6IERhdGFicmlja3NBdXRoT3B0aW9ucyA9IHt9LFxuICBkZXBlbmRlbmNpZXM6IERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPEF1dGhDbGllbnQ+IHtcbiAgaWYgKHVzZXNEZWZhdWx0Q3JlZGVudGlhbFNvdXJjZShvcHRpb25zKSkge1xuICAgIGNvbnN0IHJ1bnRpbWUgPSBhd2FpdCBfZGF0YWJyaWNrc1J1bnRpbWVBdXRoQ2xpZW50KCk7XG4gICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIERhdGFicmlja3MgUHl0aG9uIHJ1bnRpbWUgYXV0aGVudGljYXRpb25cIiwge1xuICAgICAgICBob3N0OiBydW50aW1lLmhvc3QsXG4gICAgICAgIGhhc1dvcmtzcGFjZUlkOiBCb29sZWFuKHJ1bnRpbWUud29ya3NwYWNlSWQpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY3JlYXRlRGF0YWJyaWNrc1J1bnRpbWVBdXRoQ2xpZW50KHJ1bnRpbWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlUmVzb2x2ZWRBdXRoKG9wdGlvbnMsIGRlcGVuZGVuY2llcyk7XG59XG5cbi8qKiBSZXNvbHZlIGEgRGF0YWJyaWNrcyBwcm9maWxlIGFuZCBjcmVhdGUgaXRzIHRva2VuIGxpZmVjeWNsZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVkQXV0aChcbiAgb3B0aW9uczogRGF0YWJyaWNrc0F1dGhPcHRpb25zLFxuICBkZXBlbmRlbmNpZXM6IERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxEZWZhdWx0QXV0aENsaWVudD4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGRlcGVuZGVuY2llcy5lbnZpcm9ubWVudCA/PyBwcm9jZXNzLmVudjtcbiAgY29uc3QgcHJvZmlsZSA9IHJlc29sdmVEYXRhYnJpY2tzUHJvZmlsZShvcHRpb25zLCBlbnZpcm9ubWVudCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0aW5nIERhdGFicmlja3MgYXV0aFwiLCB7XG4gICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgIGhvc3Q6IHByb2ZpbGUuaG9zdCxcbiAgICBhdXRoVHlwZTogcHJvZmlsZS5hdXRoVHlwZSxcbiAgfSk7XG4gIGlmIChwcm9maWxlLmF1dGhUeXBlID09PSBBdXRoVHlwZS5BcHBPbkJlaGFsZk9mKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlZCByZXF1ZXN0LXNjb3BlZCBBcHAgT0JPIGF1dGhlbnRpY2F0aW9uXCIsIHtcbiAgICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICAgIGhvc3Q6IHByb2ZpbGUuaG9zdCxcbiAgICAgIGhhc1dvcmtzcGFjZUlkOiBCb29sZWFuKHByb2ZpbGUud29ya3NwYWNlSWQpLFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgRGVmYXVsdEF1dGhDbGllbnQocHJvZmlsZSwgdW5kZWZpbmVkLCB7XG4gICAgICBhY2Nlc3NUb2tlbjogcHJvZmlsZS5hY2Nlc3NUb2tlbiEsXG4gICAgICB0b2tlblR5cGU6IFwiQmVhcmVyXCIsXG4gICAgICBzY29wZXM6IFsuLi5wcm9maWxlLnNjb3Blc10sXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZvcihwcm9maWxlLCBvcHRpb25zLCBkZXBlbmRlbmNpZXMpO1xuICBjb25zdCBzdG9yZSA9IG5ldyBNZW1vcnlDcmVkZW50aWFsU3RvcmUoKTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IFRva2VuTGlmZWN5Y2xlKHByb2ZpbGUuY2FjaGVLZXksIHByb3ZpZGVyLCBzdG9yZSwge1xuICAgIC4uLkFVVEhfREVGQVVMVFMsXG4gICAgLi4ub3B0aW9ucy5hdXRoLFxuICB9KTtcbiAgY29uc3QgYXV0aCA9IG5ldyBEZWZhdWx0QXV0aENsaWVudChwcm9maWxlLCBjbGllbnQpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVkIGF1dGhlbnRpY2F0aW9uIGxpZmVjeWNsZVwiLCB7XG4gICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgIGhvc3Q6IHByb2ZpbGUuaG9zdCxcbiAgICBhdXRoVHlwZTogcHJvZmlsZS5hdXRoVHlwZSxcbiAgfSk7XG4gIHJldHVybiBhdXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm92aWRlckZvcihcbiAgcHJvZmlsZTogRGF0YWJyaWNrc1Byb2ZpbGUsXG4gIG9wdGlvbnM6IERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgZGVwZW5kZW5jaWVzOiBEYXRhYnJpY2tzQXV0aERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8VG9rZW5Qcm92aWRlcj4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGRlcGVuZGVuY2llcy5lbnZpcm9ubWVudCA/PyBwcm9jZXNzLmVudjtcbiAgc3dpdGNoIChwcm9maWxlLmF1dGhUeXBlKSB7XG4gICAgY2FzZSBBdXRoVHlwZS5EYXRhYnJpY2tzQ2xpOiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBEYXRhYnJpY2tzIENMSSBwcm92aWRlclwiLCB7IHByb2ZpbGU6IHByb2ZpbGUubmFtZSB9KTtcbiAgICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc0NsaVByb3ZpZGVyKFxuICAgICAgICBwcm9maWxlLm5hbWUsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLnJlc29sdmVDbGkgPyBkZXBlbmRlbmNpZXMucmVzb2x2ZUNsaSgpIDogcmVzb2x2ZURhdGFicmlja3NDbGkoZW52aXJvbm1lbnQpLFxuICAgICAgICBjbGlFbnZpcm9ubWVudChwcm9maWxlLCByZXNvbHZlQ29uZmlnRmlsZShvcHRpb25zLmNvbmZpZ0ZpbGUsIGVudmlyb25tZW50KSksXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW46XG4gICAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBwZXJzb25hbCBhY2Nlc3MgdG9rZW4gcHJvdmlkZXJcIiwgeyBwcm9maWxlOiBwcm9maWxlLm5hbWUgfSk7XG4gICAgICByZXR1cm4gbmV3IERhdGFicmlja3NQZXJzb25hbEFjY2Vzc1Rva2VuUHJvdmlkZXIocHJvZmlsZS5hY2Nlc3NUb2tlbiEpO1xuICAgIGNhc2UgQXV0aFR5cGUuT0F1dGhNMk06XG4gICAgY2FzZSBBdXRoVHlwZS5BcHBTZXJ2aWNlUHJpbmNpcGFsOiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBzZXJ2aWNlLXByaW5jaXBhbCBwcm92aWRlclwiLCB7XG4gICAgICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICAgICAgYXV0aFR5cGU6IHByb2ZpbGUuYXV0aFR5cGUsXG4gICAgICAgIHRhcmdldDogcHJvZmlsZS50YXJnZXQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IHJlc29sdmVPQXV0aEVuZHBvaW50cyhwcm9maWxlLCBkZXBlbmRlbmNpZXMuZmV0Y2gpO1xuICAgICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzU2VydmljZVByaW5jaXBhbFByb3ZpZGVyKHtcbiAgICAgICAgdG9rZW5FbmRwb2ludDogZW5kcG9pbnRzLnRva2VuRW5kcG9pbnQsXG4gICAgICAgIGNsaWVudElkOiBwcm9maWxlLmNsaWVudElkLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IHByb2ZpbGUuY2xpZW50U2VjcmV0ISxcbiAgICAgICAgc2NvcGVzOiBtYWNoaW5lU2NvcGVzKHByb2ZpbGUuc2NvcGVzKSxcbiAgICAgICAgLi4uKHByb2ZpbGUuZ3JvdXBJZCA/IHsgZ3JvdXBJZDogcHJvZmlsZS5ncm91cElkIH0gOiB7fSksXG4gICAgICAgIGFsbG93SW5zZWN1cmVSZXF1ZXN0czogaXNMb29wYmFja0h0dHAocHJvZmlsZS5ob3N0KSxcbiAgICAgICAgZmV0Y2g6IGRlcGVuZGVuY2llcy5mZXRjaCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIEF1dGhUeXBlLkFwcE9uQmVoYWxmT2Y6XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiQXBwIE9CTyB0b2tlbnMgZG8gbm90IHVzZSBhIHRva2VuIHByb3ZpZGVyXCIpO1xuICB9XG59XG5cbmludGVyZmFjZSBBdXRob3JpemF0aW9uU2VydmVyIHtcbiAgdG9rZW5FbmRwb2ludDogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlT0F1dGhFbmRwb2ludHMoXG4gIHByb2ZpbGU6IERhdGFicmlja3NQcm9maWxlLFxuICBmZXRjaGVyOiB0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaCA9IGdsb2JhbFRoaXMuZmV0Y2gsXG4pOiBQcm9taXNlPEF1dGhvcml6YXRpb25TZXJ2ZXI+IHtcbiAgY29uc3QgaG9zdCA9IHByb2ZpbGUuaG9zdC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gIGlmIChwcm9maWxlLnRhcmdldCA9PT0gVGFyZ2V0S2luZC5BY2NvdW50KSB7XG4gICAgaWYgKCFwcm9maWxlLmFjY291bnRJZCkgdGhyb3cgbmV3IEF1dGhFcnJvcihcImNvbmZpZ1wiLCBcIkFjY291bnQgdGFyZ2V0IHJlcXVpcmVzIGFjY291bnRfaWRcIik7XG4gICAgY29uc3QgZW5kcG9pbnRzID0ge1xuICAgICAgdG9rZW5FbmRwb2ludDogYCR7aG9zdH0vb2lkYy9hY2NvdW50cy8ke3Byb2ZpbGUuYWNjb3VudElkfS92MS90b2tlbmAsXG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBhY2NvdW50IE9BdXRoIGVuZHBvaW50XCIsIHtcbiAgICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICAgIHRva2VuT3JpZ2luOiBuZXcgVVJMKGVuZHBvaW50cy50b2tlbkVuZHBvaW50KS5vcmlnaW4sXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50cztcbiAgfVxuICBjb25zdCBkaXNjb3ZlcnkgPVxuICAgIHByb2ZpbGUudGFyZ2V0ID09PSBUYXJnZXRLaW5kLlVuaWZpZWRcbiAgICAgID8gYCR7aG9zdH0vb2lkYy9hY2NvdW50cy8ke3JlcXVpcmVkQWNjb3VudElkKHByb2ZpbGUpfS8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlcmBcbiAgICAgIDogYCR7aG9zdH0vb2lkYy8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlcmA7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlcXVlc3RpbmcgT0F1dGggZGlzY292ZXJ5XCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgdGFyZ2V0OiBwcm9maWxlLnRhcmdldCxcbiAgICBkaXNjb3ZlcnksXG4gIH0pO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoZXIoZGlzY292ZXJ5LCB7IHJlZGlyZWN0OiBcIm1hbnVhbFwiIH0pO1xuICBsb2dnZXIuZGVidWcoXCJyZWNlaXZlZCBPQXV0aCBkaXNjb3ZlcnkgcmVzcG9uc2VcIiwge1xuICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgfSk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBgT0F1dGggaXMgbm90IHN1cHBvcnRlZCBhdCAke2Rpc2NvdmVyeX1gKTtcbiAgfVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcIm9hdXRoXCIsIGBPQXV0aCBkaXNjb3ZlcnkgcmV0dXJuZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB0b2tlbkVuZHBvaW50ID0gc3RyaW5nVmFsdWUodmFsdWUudG9rZW5fZW5kcG9pbnQpO1xuICBpZiAoIXRva2VuRW5kcG9pbnQpIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBcIk9BdXRoIGRpc2NvdmVyeSByZXNwb25zZSBpcyBpbmNvbXBsZXRlXCIpO1xuICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBPQXV0aCB0b2tlbiBlbmRwb2ludFwiLCB7XG4gICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgIHRva2VuT3JpZ2luOiBuZXcgVVJMKHRva2VuRW5kcG9pbnQpLm9yaWdpbixcbiAgfSk7XG4gIHJldHVybiB7IHRva2VuRW5kcG9pbnQgfTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZWRBY2NvdW50SWQocHJvZmlsZTogRGF0YWJyaWNrc1Byb2ZpbGUpOiBzdHJpbmcge1xuICBpZiAoIXByb2ZpbGUuYWNjb3VudElkKSB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiVW5pZmllZCB0YXJnZXQgcmVxdWlyZXMgYWNjb3VudF9pZFwiKTtcbiAgcmV0dXJuIHByb2ZpbGUuYWNjb3VudElkO1xufVxuXG5mdW5jdGlvbiBpc0xvb3BiYWNrSHR0cChob3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChob3N0KTtcbiAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiICYmIFtcIjEyNy4wLjAuMVwiLCBcImxvY2FsaG9zdFwiXS5pbmNsdWRlcyh1cmwuaG9zdG5hbWUpO1xufVxuXG5mdW5jdGlvbiBjbGlFbnZpcm9ubWVudChwcm9maWxlOiBEYXRhYnJpY2tzUHJvZmlsZSwgY29uZmlnRmlsZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgREFUQUJSSUNLU19DT05GSUdfRklMRTogY29uZmlnRmlsZSxcbiAgICBEQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFOiBwcm9maWxlLm5hbWUsXG4gICAgREFUQUJSSUNLU19IT1NUOiBwcm9maWxlLmhvc3QsXG4gICAgLi4uKHByb2ZpbGUuYWNjb3VudElkID8geyBEQVRBQlJJQ0tTX0FDQ09VTlRfSUQ6IHByb2ZpbGUuYWNjb3VudElkIH0gOiB7fSksXG4gICAgLi4uKHByb2ZpbGUud29ya3NwYWNlSWQgPyB7IERBVEFCUklDS1NfV09SS1NQQUNFX0lEOiBwcm9maWxlLndvcmtzcGFjZUlkIH0gOiB7fSksXG4gICAgLi4uKHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLlBlcnNvbmFsQWNjZXNzVG9rZW5cbiAgICAgID8ge1xuICAgICAgICAgIERBVEFCUklDS1NfQVVUSF9UWVBFOiBcInBhdFwiLFxuICAgICAgICAgIERBVEFCUklDS1NfVE9LRU46IHByb2ZpbGUuYWNjZXNzVG9rZW4hLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB1c2VzRGVmYXVsdENyZWRlbnRpYWxTb3VyY2Uob3B0aW9uczogRGF0YWJyaWNrc0F1dGhPcHRpb25zKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKG9wdGlvbnMpLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCk7XG59XG4iXX0=