@fjall/util 0.88.1 → 0.88.4

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.
@@ -17,19 +17,14 @@ export type ProviderAccount = {
17
17
  environment: string;
18
18
  managed?: boolean;
19
19
  };
20
- export type OidcConnection = {
21
- roleArn: string;
22
- externalId: string;
23
- };
24
20
  export type Profile = {
25
- type: "iam" | "sso" | "oidc";
21
+ type: "sso" | "oidc";
26
22
  region: string;
27
23
  ssoAccountId?: string;
28
24
  ssoRoleName?: string;
29
25
  ssoSession?: string;
30
26
  oidcRoleArn?: string;
31
27
  oidcProviderArn?: string;
32
- credentialSource?: string;
33
28
  roleArn?: string;
34
29
  roleSessionName?: string;
35
30
  };
@@ -58,15 +53,8 @@ type RootConfig = {
58
53
  organisationName?: string;
59
54
  organisationEmail?: string;
60
55
  oidcIssuerUrl?: string;
61
- oidcConnections?: {
62
- [accountId: string]: OidcConnection;
63
- };
64
56
  rootOidcRoleArn?: string;
65
57
  };
66
- type CostAllocationTags = {
67
- TagKey: string;
68
- Status: string;
69
- };
70
58
  /**
71
59
  * Config class for loading and saving fjall-config.json file
72
60
  */
@@ -83,8 +71,7 @@ export type OrgLevelConfig = {
83
71
  export declare class Config {
84
72
  rootConfig: RootConfig;
85
73
  existingAccountsConfig: Account[];
86
- costAllocationTagsConfig: CostAllocationTags[];
87
- constructor(rootConfig?: RootConfig, existingAccountsConfig?: Account[], costAllocationTagsConfig?: CostAllocationTags[]);
74
+ constructor(rootConfig?: RootConfig, existingAccountsConfig?: Account[]);
88
75
  isDevelopment(): boolean;
89
76
  /**
90
77
  * Find the fjall config directory by walking up the directory tree
@@ -142,13 +129,6 @@ export declare class Config {
142
129
  getSecondaryRegions(): string[] | undefined;
143
130
  getDisasterRecoveryRegion(): string | undefined;
144
131
  getAllRegions(): string[];
145
- /**
146
- * Sets the cost allocation tags list. This should be called by AccountService
147
- * after it fetches the tags from AWS Cost Explorer.
148
- * @param tags List of cost allocation tags
149
- */
150
- setCostAllocationTagsList(tags: CostAllocationTags[]): void;
151
- getCostAllocationTags(): CostAllocationTags[];
152
132
  /**
153
133
  * Get the fjall config directory path
154
134
  * @returns The path to the fjall config directory or null if not found
@@ -187,7 +167,5 @@ export declare class Config {
187
167
  setOrganisationEmail(email: string): void;
188
168
  getOidcIssuerUrl(): string | undefined;
189
169
  setOidcIssuerUrl(url: string): void;
190
- getOidcConnection(accountId: string): OidcConnection | undefined;
191
- setOidcConnection(accountId: string, connection: OidcConnection): void;
192
170
  setOrgLevelConfig(config: OrgLevelConfig): void;
193
171
  }
@@ -21,6 +21,7 @@ const ServiceConfigSchema = zod_1.z
21
21
  id: zod_1.z.string(),
22
22
  type: zod_1.z.string().optional(),
23
23
  version: zod_1.z.number().optional(),
24
+ // passthrough: service options are arbitrary key-value pairs defined by each service type
24
25
  options: zod_1.z.object({}).passthrough().optional(),
25
26
  dockerConfig: DockerConfigSchema.optional(),
26
27
  apiApplicationId: zod_1.z.string().optional()
@@ -36,14 +37,13 @@ const ProviderAccountSchema = zod_1.z
36
37
  .strict();
37
38
  const ProfileSchema = zod_1.z
38
39
  .object({
39
- type: zod_1.z.enum(["iam", "sso", "oidc"]),
40
+ type: zod_1.z.enum(["sso", "oidc"]),
40
41
  region: zod_1.z.string(),
41
42
  ssoAccountId: zod_1.z.string().optional(),
42
43
  ssoRoleName: zod_1.z.string().optional(),
43
44
  ssoSession: zod_1.z.string().optional(),
44
45
  oidcRoleArn: zod_1.z.string().optional(),
45
46
  oidcProviderArn: zod_1.z.string().optional(),
46
- credentialSource: zod_1.z.string().optional(),
47
47
  roleArn: zod_1.z.string().optional(),
48
48
  roleSessionName: zod_1.z.string().optional()
49
49
  })
@@ -54,12 +54,6 @@ const SSOSessionSchema = zod_1.z
54
54
  ssoStartUrl: zod_1.z.string()
55
55
  })
56
56
  .strict();
57
- const OidcConnectionSchema = zod_1.z
58
- .object({
59
- roleArn: zod_1.z.string(),
60
- externalId: zod_1.z.string()
61
- })
62
- .strict();
63
57
  const RootConfigSchema = zod_1.z
64
58
  .object({
65
59
  version: zod_1.z.number().optional(),
@@ -76,16 +70,9 @@ const RootConfigSchema = zod_1.z
76
70
  organisationName: zod_1.z.string().optional(),
77
71
  organisationEmail: zod_1.z.string().optional(),
78
72
  oidcIssuerUrl: zod_1.z.string().optional(),
79
- oidcConnections: zod_1.z.record(zod_1.z.string(), OidcConnectionSchema).optional(),
80
73
  rootOidcRoleArn: zod_1.z.string().optional()
81
74
  })
82
75
  .strict();
83
- const CostAllocationTagsSchema = zod_1.z
84
- .object({
85
- TagKey: zod_1.z.string(),
86
- Status: zod_1.z.string()
87
- })
88
- .strict();
89
76
  const AccountSchema = zod_1.z
90
77
  .object({
91
78
  Id: zod_1.z.string().optional(),
@@ -97,20 +84,20 @@ const AccountSchema = zod_1.z
97
84
  // z.coerce.date() handles both Date objects (from AWS SDK) and ISO 8601 strings (from JSON parsing)
98
85
  JoinedTimestamp: zod_1.z.coerce.date().optional()
99
86
  })
87
+ // passthrough: AWS SDK Account objects may contain additional properties not in our schema
100
88
  .passthrough();
101
89
  /**
102
90
  * The current base-version of any newly created config file
103
91
  */
104
92
  const BASE_CONFIG_VERSION = 0.1;
105
93
  class Config {
106
- constructor(rootConfig, existingAccountsConfig, costAllocationTagsConfig) {
94
+ constructor(rootConfig, existingAccountsConfig) {
107
95
  this.rootConfig = rootConfig ?? {
108
96
  version: BASE_CONFIG_VERSION,
109
97
  services: {},
110
98
  providerAccounts: []
111
99
  };
112
100
  this.existingAccountsConfig = existingAccountsConfig ?? [];
113
- this.costAllocationTagsConfig = costAllocationTagsConfig ?? [];
114
101
  }
115
102
  isDevelopment() {
116
103
  return !!this.rootConfig?.development;
@@ -149,6 +136,7 @@ class Config {
149
136
  return fs.readFileSync(configFile, { encoding: "utf8" });
150
137
  }
151
138
  catch {
139
+ // File not accessible or not readable — caller handles null
152
140
  return null;
153
141
  }
154
142
  }
@@ -165,11 +153,9 @@ class Config {
165
153
  }
166
154
  const rootConfigJson = Config.loadConfigFile(path.join(configDir, "fjall-config.json"));
167
155
  const existingAccountJson = Config.loadConfigFile(path.join(configDir, "accounts-config.json"));
168
- const costAllocationTagsJson = Config.loadConfigFile(path.join(configDir, "cost-allocation-tags-config.json"));
169
156
  // Parse each config file separately to identify which one fails
170
157
  let rootConfig;
171
158
  let existingAccountsConfig;
172
- let costAllocationTagsConfig;
173
159
  // 1. Parse root config (fjall-config.json)
174
160
  if (rootConfigJson) {
175
161
  try {
@@ -189,17 +175,7 @@ class Config {
189
175
  throw Config.formatZodError(err, "accounts-config.json");
190
176
  }
191
177
  }
192
- // 3. Parse cost allocation tags config
193
- if (costAllocationTagsJson) {
194
- try {
195
- const raw = JSON.parse(costAllocationTagsJson);
196
- costAllocationTagsConfig = zod_1.z.array(CostAllocationTagsSchema).parse(raw);
197
- }
198
- catch (err) {
199
- throw Config.formatZodError(err, "cost-allocation-tags-config.json");
200
- }
201
- }
202
- return new Config(rootConfig, existingAccountsConfig, costAllocationTagsConfig);
178
+ return new Config(rootConfig, existingAccountsConfig);
203
179
  }
204
180
  /**
205
181
  * Format a Zod error into a readable error message
@@ -229,8 +205,6 @@ class Config {
229
205
  });
230
206
  const existingAccountsJsonString = JSON.stringify(this.existingAccountsConfig, null, 2);
231
207
  fs.writeFileSync(path.join(configDir, "accounts-config.json"), existingAccountsJsonString, { mode: 0o600 });
232
- const costAllocationTagsJsonString = JSON.stringify(this.costAllocationTagsConfig, null, 2);
233
- fs.writeFileSync(path.join(configDir, "cost-allocation-tags-config.json"), costAllocationTagsJsonString, { mode: 0o600 });
234
208
  }
235
209
  /**
236
210
  * Add a new service to the config file
@@ -317,17 +291,6 @@ class Config {
317
291
  }
318
292
  return regions;
319
293
  }
320
- /**
321
- * Sets the cost allocation tags list. This should be called by AccountService
322
- * after it fetches the tags from AWS Cost Explorer.
323
- * @param tags List of cost allocation tags
324
- */
325
- setCostAllocationTagsList(tags) {
326
- this.costAllocationTagsConfig = tags;
327
- }
328
- getCostAllocationTags() {
329
- return this.costAllocationTagsConfig;
330
- }
331
294
  /**
332
295
  * Get the fjall config directory path
333
296
  * @returns The path to the fjall config directory or null if not found
@@ -435,15 +398,6 @@ class Config {
435
398
  setOidcIssuerUrl(url) {
436
399
  this.rootConfig.oidcIssuerUrl = url;
437
400
  }
438
- getOidcConnection(accountId) {
439
- return this.rootConfig.oidcConnections?.[accountId];
440
- }
441
- setOidcConnection(accountId, connection) {
442
- if (!this.rootConfig.oidcConnections) {
443
- this.rootConfig.oidcConnections = {};
444
- }
445
- this.rootConfig.oidcConnections[accountId] = connection;
446
- }
447
401
  setOrgLevelConfig(config) {
448
402
  if (config.primaryRegion !== undefined) {
449
403
  this.rootConfig.primaryRegion = config.primaryRegion;
@@ -466,4 +420,4 @@ class Config {
466
420
  }
467
421
  }
468
422
  exports.Config = Config;
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUl4Qjs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQTJFbkMsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsT0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUMxQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUMzQyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0scUJBQXFCLEdBQUcsT0FBQztLQUM1QixNQUFNLENBQUM7SUFDTixFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNkLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxPQUFDLENB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QyxHQUFHLFVBQVUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBc0I7UUFDdEMsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbmRELHdCQW1kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuZXhwb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBmb3Igc2VhcmNoaW5nIHVwIHRoZSBkaXJlY3RvcnkgdHJlZSBmb3IgY29uZmlnIGZpbGVzLlxuICogUHJldmVudHMgaW5maW5pdGUgbG9vcHMgd2hlbiB0cmF2ZXJzaW5nIGRpcmVjdG9yaWVzLlxuICovXG5jb25zdCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuXG5leHBvcnQgdHlwZSBTZXJ2aWNlQ29uZmlnID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBvcHRpb25zPzogb2JqZWN0O1xuICBkb2NrZXJDb25maWc/OiB7XG4gICAgZG9ja2VyZmlsZVBhdGg6IHN0cmluZztcbiAgICBjb250YWluZXJQb3J0OiBudW1iZXI7XG4gIH07XG4gIGFwaUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7IC8vIEZqYWxsIEFQSSBhcHBsaWNhdGlvbiBJRFxufTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJBY2NvdW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG1hbmFnZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgT2lkY0Nvbm5lY3Rpb24gPSB7XG4gIHJvbGVBcm46IHN0cmluZztcbiAgZXh0ZXJuYWxJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZmlsZSA9IHtcbiAgdHlwZTogXCJpYW1cIiB8IFwic3NvXCIgfCBcIm9pZGNcIjtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIC8vIFNTTyBwcm9maWxlc1xuICBzc29BY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHNzb1JvbGVOYW1lPzogc3RyaW5nO1xuICBzc29TZXNzaW9uPzogc3RyaW5nO1xuICAvLyBPSURDIHByb2ZpbGVzIChDSS9DRCBhbmQgRmphbGwtaXNzdWVkKVxuICBvaWRjUm9sZUFybj86IHN0cmluZztcbiAgb2lkY1Byb3ZpZGVyQXJuPzogc3RyaW5nO1xuICAvLyBSb2xlIGFzc3VtcHRpb24gKHVzZWQgaW4gQVdTIGNvbmZpZyBmaWxlIGdlbmVyYXRpb24pXG4gIGNyZWRlbnRpYWxTb3VyY2U/OiBzdHJpbmc7XG4gIHJvbGVBcm4/OiBzdHJpbmc7XG4gIHJvbGVTZXNzaW9uTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNTT1Nlc3Npb24gPSB7XG4gIHNzb1JlZ2lvbjogc3RyaW5nO1xuICBzc29TdGFydFVybDogc3RyaW5nO1xufTtcblxudHlwZSBSb290Q29uZmlnID0ge1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBkZXZlbG9wbWVudD86IGJvb2xlYW47XG4gIHNlcnZpY2VzPzogeyBba2V5OiBzdHJpbmddOiBTZXJ2aWNlQ29uZmlnIH07XG4gIHByb3ZpZGVyQWNjb3VudHM/OiBQcm92aWRlckFjY291bnRbXTtcbiAgcHJpbWFyeVJlZ2lvbj86IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uPzogc3RyaW5nO1xuICAvLyBQcm9maWxlIG1hbmFnZW1lbnRcbiAgY3VycmVudFByb2ZpbGU/OiBzdHJpbmc7XG4gIHByb2ZpbGVzPzogeyBba2V5OiBzdHJpbmddOiBQcm9maWxlIH07XG4gIHNzb1Nlc3Npb25zPzogeyBba2V5OiBzdHJpbmddOiBTU09TZXNzaW9uIH07XG4gIC8vIE9yZ2FuaXNhdGlvbiBpZGVudGl0eSAoZnJvbSBGamFsbCBBUEkpXG4gIG9yZ2FuaXNhdGlvbklkPzogc3RyaW5nO1xuICBvcmdhbmlzYXRpb25OYW1lPzogc3RyaW5nO1xuICBvcmdhbmlzYXRpb25FbWFpbD86IHN0cmluZztcbiAgLy8gT0lEQyBjb25maWd1cmF0aW9uXG5cbiAgb2lkY0lzc3VlclVybD86IHN0cmluZztcbiAgb2lkY0Nvbm5lY3Rpb25zPzogeyBbYWNjb3VudElkOiBzdHJpbmddOiBPaWRjQ29ubmVjdGlvbiB9O1xuICByb290T2lkY1JvbGVBcm4/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvc3RBbGxvY2F0aW9uVGFncyA9IHtcbiAgVGFnS2V5OiBzdHJpbmc7XG4gIFN0YXR1czogc3RyaW5nO1xufTtcblxuLy8gWm9kIHNjaGVtYXMgZm9yIHZhbGlkYXRpb25cbmNvbnN0IERvY2tlckNvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZG9ja2VyZmlsZVBhdGg6IHouc3RyaW5nKCksXG4gICAgY29udGFpbmVyUG9ydDogei5udW1iZXIoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNlcnZpY2VDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB2ZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgb3B0aW9uczogei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkub3B0aW9uYWwoKSxcbiAgICBkb2NrZXJDb25maWc6IERvY2tlckNvbmZpZ1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIGFwaUFwcGxpY2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFByb3ZpZGVyQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBtYW5hZ2VkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUHJvZmlsZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFtcImlhbVwiLCBcInNzb1wiLCBcIm9pZGNcIl0pLFxuICAgIHJlZ2lvbjogei5zdHJpbmcoKSxcbiAgICBzc29BY2NvdW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzc29Sb2xlTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNzb1Nlc3Npb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG9pZGNQcm92aWRlckFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNyZWRlbnRpYWxTb3VyY2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByb2xlQXJuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcm9sZVNlc3Npb25OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTU09TZXNzaW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzc29SZWdpb246IHouc3RyaW5nKCksXG4gICAgc3NvU3RhcnRVcmw6IHouc3RyaW5nKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBPaWRjQ29ubmVjdGlvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcm9sZUFybjogei5zdHJpbmcoKSxcbiAgICBleHRlcm5hbElkOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUm9vdENvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGRldmVsb3BtZW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHNlcnZpY2VzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTZXJ2aWNlQ29uZmlnU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByb3ZpZGVyQWNjb3VudHM6IHouYXJyYXkoUHJvdmlkZXJBY2NvdW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByaW1hcnlSZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzZWNvbmRhcnlSZWdpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGN1cnJlbnRQcm9maWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcHJvZmlsZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIFByb2ZpbGVTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgc3NvU2Vzc2lvbnM6IHoucmVjb3JkKHouc3RyaW5nKCksIFNTT1Nlc3Npb25TY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgb3JnYW5pc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvcmdhbmlzYXRpb25OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3JnYW5pc2F0aW9uRW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAgIG9pZGNJc3N1ZXJVcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjQ29ubmVjdGlvbnM6IHoucmVjb3JkKHouc3RyaW5nKCksIE9pZGNDb25uZWN0aW9uU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHJvb3RPaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBUYWdLZXk6IHouc3RyaW5nKCksXG4gICAgU3RhdHVzOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBFbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBTdGF0dXM6IHouZW51bShbXCJBQ1RJVkVcIiwgXCJTVVNQRU5ERURcIiwgXCJQRU5ESU5HX0NMT1NVUkVcIl0pLm9wdGlvbmFsKCksXG4gICAgSm9pbmVkTWV0aG9kOiB6LmVudW0oW1wiSU5WSVRFRFwiLCBcIkNSRUFURURcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gei5jb2VyY2UuZGF0ZSgpIGhhbmRsZXMgYm90aCBEYXRlIG9iamVjdHMgKGZyb20gQVdTIFNESykgYW5kIElTTyA4NjAxIHN0cmluZ3MgKGZyb20gSlNPTiBwYXJzaW5nKVxuICAgIEpvaW5lZFRpbWVzdGFtcDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKCk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgYmFzZS12ZXJzaW9uIG9mIGFueSBuZXdseSBjcmVhdGVkIGNvbmZpZyBmaWxlXG4gKi9cbmNvbnN0IEJBU0VfQ09ORklHX1ZFUlNJT04gPSAwLjE7XG5cbi8qKlxuICogQ29uZmlnIGNsYXNzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgZmphbGwtY29uZmlnLmpzb24gZmlsZVxuICovXG5leHBvcnQgdHlwZSBPcmdMZXZlbENvbmZpZyA9IHtcbiAgcHJpbWFyeVJlZ2lvbj86IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uPzogc3RyaW5nO1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHNzb1Nlc3Npb25zPzogeyBba2V5OiBzdHJpbmddOiBTU09TZXNzaW9uIH07XG4gIHJvb3RPaWRjUm9sZUFybj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBleGlzdGluZ0FjY291bnRzQ29uZmlnOiBBY2NvdW50W107XG4gIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZzogQ29zdEFsbG9jYXRpb25UYWdzW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcm9vdENvbmZpZz86IFJvb3RDb25maWcsXG4gICAgZXhpc3RpbmdBY2NvdW50c0NvbmZpZz86IEFjY291bnRbXSxcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3NDb25maWc/OiBDb3N0QWxsb2NhdGlvblRhZ3NbXVxuICApIHtcbiAgICB0aGlzLnJvb3RDb25maWcgPSByb290Q29uZmlnID8/IHtcbiAgICAgIHZlcnNpb246IEJBU0VfQ09ORklHX1ZFUlNJT04sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBwcm92aWRlckFjY291bnRzOiBbXVxuICAgIH07XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA/PyBbXTtcbiAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA/PyBbXTtcbiAgfVxuXG4gIGlzRGV2ZWxvcG1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb290Q29uZmlnPy5kZXZlbG9wbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IGJ5IHdhbGtpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmaW5kQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ09ORklHX1NFQVJDSF9NQVhfREVQVEg7IGkrKykge1xuICAgICAgY29uc3QgZmphbGxEaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oZmphbGxEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmamFsbERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyZWN0Q29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyZWN0Q29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIGJyZWFrO1xuICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqIEBwYXJhbSBjb25maWdGaWxlIC0gUGF0aCB0byB0aGUgY29uZmlnIGZpbGVcbiAgICogQHJldHVybnMgQ29uZmlnIGFzIEpTT04gc3RyaW5nIG9yIE5VTEwgaWYgbm8gY29uZmlnIGZpbGUgYWNjZXNzaWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGZzLmFjY2Vzc1N5bmMoY29uZmlnRmlsZSwgZnMuY29uc3RhbnRzLlJfT0sgfCBmcy5jb25zdGFudHMuV19PSyk7XG4gICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGUsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMgTG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiBjb25maWcgZmlsZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGZhaWxzIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZygpOiBDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCk7XG4gICAgaWYgKCFjb25maWdEaXIpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdENvbmZpZ0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0FjY291bnRKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICk7XG4gICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzSnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIilcbiAgICApO1xuXG4gICAgLy8gUGFyc2UgZWFjaCBjb25maWcgZmlsZSBzZXBhcmF0ZWx5IHRvIGlkZW50aWZ5IHdoaWNoIG9uZSBmYWlsc1xuICAgIGxldCByb290Q29uZmlnOiBSb290Q29uZmlnIHwgdW5kZWZpbmVkO1xuICAgIGxldCBleGlzdGluZ0FjY291bnRzQ29uZmlnOiBBY2NvdW50W10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZzogQ29zdEFsbG9jYXRpb25UYWdzW10gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyAxLiBQYXJzZSByb290IGNvbmZpZyAoZmphbGwtY29uZmlnLmpzb24pXG4gICAgaWYgKHJvb3RDb25maWdKc29uKSB7XG4gICAgICB0cnkge1xuICAgICAgICByb290Q29uZmlnID0gUm9vdENvbmZpZ1NjaGVtYS5wYXJzZShKU09OLnBhcnNlKHJvb3RDb25maWdKc29uKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBQYXJzZSBhY2NvdW50cyBjb25maWcgKGFjY291bnRzLWNvbmZpZy5qc29uKVxuICAgIGlmIChleGlzdGluZ0FjY291bnRKc29uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBKU09OLnBhcnNlKGV4aXN0aW5nQWNjb3VudEpzb24pO1xuICAgICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnID0gei5hcnJheShBY2NvdW50U2NoZW1hKS5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IENvbmZpZy5mb3JtYXRab2RFcnJvcihlcnIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUGFyc2UgY29zdCBhbGxvY2F0aW9uIHRhZ3MgY29uZmlnXG4gICAgaWYgKGNvc3RBbGxvY2F0aW9uVGFnc0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoY29zdEFsbG9jYXRpb25UYWdzSnNvbik7XG4gICAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IHouYXJyYXkoQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hKS5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IENvbmZpZy5mb3JtYXRab2RFcnJvcihlcnIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb25maWcoXG4gICAgICByb290Q29uZmlnLFxuICAgICAgZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgWm9kIGVycm9yIGludG8gYSByZWFkYWJsZSBlcnJvciBtZXNzYWdlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmb3JtYXRab2RFcnJvcihlcnI6IHVua25vd24sIGZpbGVOYW1lOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IgJiYgZXJyLmlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc3N1ZURldGFpbHMgPSBlcnIuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfTogJHtpc3N1ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiOyBcIik7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7aXNzdWVEZXRhaWxzfWApO1xuICAgIH1cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIGJ1dCByZXBsYWNlIG5ld2xpbmVzIHRvIGtlZXAgaXQgb24gb25lIGxpbmVcbiAgICBjb25zdCByYXdNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSByYXdNZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikuc3Vic3RyaW5nKDAsIDUwMCk7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpLFxuICAgICAgcm9vdEpzb25TdHJpbmcsXG4gICAgICB7XG4gICAgICAgIG1vZGU6IDBvNjAwXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcsXG4gICAgICBudWxsLFxuICAgICAgMlxuICAgICk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIiksXG4gICAgICBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZyxcbiAgICAgIHsgbW9kZTogMG82MDAgfVxuICAgICk7XG5cbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKSxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmcsXG4gICAgICB7IG1vZGU6IDBvNjAwIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzZXJ2aWNlIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcGFyYW0gc2VydmljZUtleSBOYW1lL2tleSBvZiB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gY29uZmlnIFNlcnZpY2UgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBhZGRTZXJ2aWNlKHNlcnZpY2VLZXk6IHN0cmluZywgY29uZmlnOiBTZXJ2aWNlQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSA9IGNvbmZpZztcbiAgfVxuXG4gIGdldFNlcnZpY2VDb25maWcoc2VydmljZUtleTogc3RyaW5nKTogU2VydmljZUNvbmZpZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldIHx8IG51bGw7XG4gIH1cblxuICBhZGRQcm92aWRlckFjY291bnQoYWNjb3VudDogUHJvdmlkZXJBY2NvdW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cylcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gW107XG5cbiAgICAvLyBlbnN1cmUgYWNjb3VudCBuYW1lIGlzIGFsd2F5cyBsb3dlcmNhc2VcbiAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLnB1c2goYWNjb3VudCk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWU6IHN0cmluZyk6IFByb3ZpZGVyQWNjb3VudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PlxuICAgICAgICBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnRCeUlkKGFjY291bnRJZDogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuaWQgPT09IGFjY291bnRJZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByb3ZpZGVyIGFjY291bnQgYnkgZW52aXJvbm1lbnQgdHlwZVxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHR5cGUgKGUuZy4sICdwbGF0Zm9ybScsICdzdGFnaW5nJywgJ3Byb2R1Y3Rpb24nKVxuICAgKiBAcmV0dXJucyBUaGUgcHJvdmlkZXIgYWNjb3VudCB3aXRoIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0QWNjb3VudEJ5RW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IFByb3ZpZGVyQWNjb3VudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LmVudmlyb25tZW50ID09PSBlbnZpcm9ubWVudFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhpc3RpbmcgYWNjb3VudHMgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIGFjY291bnRzIGZyb20gQVdTLlxuICAgKiBAcGFyYW0gYWNjb3VudHMgTGlzdCBvZiBBV1MgYWNjb3VudHMgZnJvbSBPcmdhbml6YXRpb25zIEFQSVxuICAgKi9cbiAgc2V0RXhpc3RpbmdBY2NvdW50c0xpc3QoYWNjb3VudHM6IEFjY291bnRbXSk6IHZvaWQge1xuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGFjY291bnRzO1xuICB9XG5cbiAgZ2V0RXhpc3RpbmdBY2NvdW50cygpOiBBY2NvdW50W10ge1xuICAgIHJldHVybiB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWc7XG4gIH1cblxuICBzZXRQcmltYXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBzZXRTZWNvbmRhcnlSZWdpb25zKHJlZ2lvbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgPSByZWdpb25zO1xuICB9XG5cbiAgc2V0RGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbihyZWdpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgZ2V0UHJpbWFyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldFNlY29uZGFyeVJlZ2lvbnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucztcbiAgfVxuXG4gIGdldERpc2FzdGVyUmVjb3ZlcnlSZWdpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb247XG4gIH1cblxuICBnZXRBbGxSZWdpb25zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZWdpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uKSB7XG4gICAgICByZWdpb25zLnB1c2godGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucykge1xuICAgICAgcmVnaW9ucy5wdXNoKC4uLnRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJlxuICAgICAgIXJlZ2lvbnMuaW5jbHVkZXModGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24pXG4gICAgKSB7XG4gICAgICByZWdpb25zLnB1c2godGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24pO1xuICAgIH1cblxuICAgIHJldHVybiByZWdpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvc3QgYWxsb2NhdGlvbiB0YWdzIGxpc3QuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBieSBBY2NvdW50U2VydmljZVxuICAgKiBhZnRlciBpdCBmZXRjaGVzIHRoZSB0YWdzIGZyb20gQVdTIENvc3QgRXhwbG9yZXIuXG4gICAqIEBwYXJhbSB0YWdzIExpc3Qgb2YgY29zdCBhbGxvY2F0aW9uIHRhZ3NcbiAgICovXG4gIHNldENvc3RBbGxvY2F0aW9uVGFnc0xpc3QodGFnczogQ29zdEFsbG9jYXRpb25UYWdzW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IHRhZ3M7XG4gIH1cblxuICBnZXRDb3N0QWxsb2NhdGlvblRhZ3MoKTogQ29zdEFsbG9jYXRpb25UYWdzW10ge1xuICAgIHJldHVybiB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGdldENvbmZpZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9maWxlIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwcm9maWxlIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBwcm9maWxlIGlzIHNldFxuICAgKi9cbiAgZ2V0Q3VycmVudFByb2ZpbGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgcHJvZmlsZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb2ZpbGUgdG8gc2V0IGFzIGN1cnJlbnRcbiAgICovXG4gIHNldEN1cnJlbnRQcm9maWxlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcHJvZmlsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBUaGUgcHJvZmlsZSBjb25maWd1cmF0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRQcm9maWxlKG5hbWU6IHN0cmluZyk6IFByb2ZpbGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG4gIH1cblxuICBnZXRBbGxQcm9maWxlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyk7XG4gIH1cblxuICBhZGRQcm9maWxlKG5hbWU6IHN0cmluZywgcHJvZmlsZTogUHJvZmlsZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdID0gcHJvZmlsZTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdO1xuXG4gICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgY3VycmVudCBwcm9maWxlLCBjbGVhciBpdFxuICAgIGlmICh0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGUgPT09IG5hbWUpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnZXRTU09TZXNzaW9uKG5hbWU6IHN0cmluZyk6IFNTT1Nlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV07XG4gIH1cblxuICBhZGRTU09TZXNzaW9uKG5hbWU6IHN0cmluZywgc2Vzc2lvbjogU1NPU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zW25hbWVdID0gc2Vzc2lvbjtcbiAgfVxuXG4gIGdldE9yZ0xldmVsQ29uZmlnKCk6IE9yZ0xldmVsQ29uZmlnIHtcbiAgICAvLyBEZXJpdmUgcm9vdE9pZGNSb2xlQXJuIGZyb20gdGhlIHJvb3QgYWNjb3VudCdzIE9JREMgcHJvZmlsZSBpZiBhdmFpbGFibGUsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBleHBsaWNpdGx5IHN0b3JlZCBmaWVsZCAoc2V0IGR1cmluZyBjb25maWcgcHVsbClcbiAgICBjb25zdCByb290QWNjb3VudCA9IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzPy5maW5kKFxuICAgICAgKGEpID0+IGEuZW52aXJvbm1lbnQgPT09IFwicm9vdFwiXG4gICAgKTtcbiAgICBjb25zdCByb290UHJvZmlsZU5hbWUgPSByb290QWNjb3VudD8ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJvb3RQcm9maWxlID0gcm9vdFByb2ZpbGVOYW1lXG4gICAgICA/IHRoaXMucm9vdENvbmZpZy5wcm9maWxlcz8uW3Jvb3RQcm9maWxlTmFtZV1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlcml2ZWRSb2xlQXJuID1cbiAgICAgIHJvb3RQcm9maWxlPy50eXBlID09PSBcIm9pZGNcIiA/IHJvb3RQcm9maWxlLm9pZGNSb2xlQXJuIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByaW1hcnlSZWdpb246IHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uLFxuICAgICAgc2Vjb25kYXJ5UmVnaW9uczogdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMsXG4gICAgICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uOiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbixcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLFxuICAgICAgc3NvU2Vzc2lvbnM6IHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyxcbiAgICAgIHJvb3RPaWRjUm9sZUFybjogZGVyaXZlZFJvbGVBcm4gPz8gdGhpcy5yb290Q29uZmlnLnJvb3RPaWRjUm9sZUFyblxuICAgIH07XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uSWQ7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25JZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbklkID0gaWQ7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vcmdhbmlzYXRpb25OYW1lO1xuICB9XG5cbiAgc2V0T3JnYW5pc2F0aW9uTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25FbWFpbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uRW1haWw7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25FbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbkVtYWlsID0gZW1haWw7XG4gIH1cblxuICBnZXRPaWRjSXNzdWVyVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsO1xuICB9XG5cbiAgc2V0T2lkY0lzc3VlclVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsID0gdXJsO1xuICB9XG5cbiAgZ2V0T2lkY0Nvbm5lY3Rpb24oYWNjb3VudElkOiBzdHJpbmcpOiBPaWRjQ29ubmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vaWRjQ29ubmVjdGlvbnM/LlthY2NvdW50SWRdO1xuICB9XG5cbiAgc2V0T2lkY0Nvbm5lY3Rpb24oYWNjb3VudElkOiBzdHJpbmcsIGNvbm5lY3Rpb246IE9pZGNDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcub2lkY0Nvbm5lY3Rpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcub2lkY0Nvbm5lY3Rpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMucm9vdENvbmZpZy5vaWRjQ29ubmVjdGlvbnNbYWNjb3VudElkXSA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBzZXRPcmdMZXZlbENvbmZpZyhjb25maWc6IE9yZ0xldmVsQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKGNvbmZpZy5wcmltYXJ5UmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uID0gY29uZmlnLnByaW1hcnlSZWdpb247XG4gICAgfVxuICAgIGlmIChjb25maWcuc2Vjb25kYXJ5UmVnaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyA9IGNvbmZpZy5zZWNvbmRhcnlSZWdpb25zO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wcm92aWRlckFjY291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gY29uZmlnLnByb3ZpZGVyQWNjb3VudHM7XG4gICAgfVxuICAgIGlmIChjb25maWcuc3NvU2Vzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zID0gY29uZmlnLnNzb1Nlc3Npb25zO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJvb3RPaWRjUm9sZUFybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucm9vdE9pZGNSb2xlQXJuID0gY29uZmlnLnJvb3RPaWRjUm9sZUFybjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUl4Qjs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQStEbkMsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsT0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUMxQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QiwwRkFBMEY7SUFDMUYsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsZ0JBQWdCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN4QyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLHFCQUFxQixHQUFHLE9BQUM7S0FDNUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN2QixPQUFP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Q0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6WkQsd0JBeVpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5leHBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcblxuLyoqXG4gKiBNYXhpbXVtIGRlcHRoIGZvciBzZWFyY2hpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlIGZvciBjb25maWcgZmlsZXMuXG4gKiBQcmV2ZW50cyBpbmZpbml0ZSBsb29wcyB3aGVuIHRyYXZlcnNpbmcgZGlyZWN0b3JpZXMuXG4gKi9cbmNvbnN0IENPTkZJR19TRUFSQ0hfTUFYX0RFUFRIID0gMTA7XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VDb25maWcgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIG9wdGlvbnM/OiBvYmplY3Q7XG4gIGRvY2tlckNvbmZpZz86IHtcbiAgICBkb2NrZXJmaWxlUGF0aDogc3RyaW5nO1xuICAgIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbiAgfTtcbiAgYXBpQXBwbGljYXRpb25JZD86IHN0cmluZzsgLy8gRmphbGwgQVBJIGFwcGxpY2F0aW9uIElEXG59O1xuXG5leHBvcnQgdHlwZSBQcm92aWRlckFjY291bnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbWFuYWdlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBQcm9maWxlID0ge1xuICB0eXBlOiBcInNzb1wiIHwgXCJvaWRjXCI7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICAvLyBTU08gcHJvZmlsZXNcbiAgc3NvQWNjb3VudElkPzogc3RyaW5nO1xuICBzc29Sb2xlTmFtZT86IHN0cmluZztcbiAgc3NvU2Vzc2lvbj86IHN0cmluZztcbiAgLy8gT0lEQyBwcm9maWxlcyAoQ0kvQ0QgYW5kIEZqYWxsLWlzc3VlZClcbiAgb2lkY1JvbGVBcm4/OiBzdHJpbmc7XG4gIG9pZGNQcm92aWRlckFybj86IHN0cmluZztcbiAgLy8gUm9sZSBhc3N1bXB0aW9uICh1c2VkIGluIEFXUyBjb25maWcgZmlsZSBnZW5lcmF0aW9uKVxuICByb2xlQXJuPzogc3RyaW5nO1xuICByb2xlU2Vzc2lvbk5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTU09TZXNzaW9uID0ge1xuICBzc29SZWdpb246IHN0cmluZztcbiAgc3NvU3RhcnRVcmw6IHN0cmluZztcbn07XG5cbnR5cGUgUm9vdENvbmZpZyA9IHtcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuICBzZXJ2aWNlcz86IHsgW2tleTogc3RyaW5nXTogU2VydmljZUNvbmZpZyB9O1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHByaW1hcnlSZWdpb24/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbj86IHN0cmluZztcbiAgLy8gUHJvZmlsZSBtYW5hZ2VtZW50XG4gIGN1cnJlbnRQcm9maWxlPzogc3RyaW5nO1xuICBwcm9maWxlcz86IHsgW2tleTogc3RyaW5nXTogUHJvZmlsZSB9O1xuICBzc29TZXNzaW9ucz86IHsgW2tleTogc3RyaW5nXTogU1NPU2Vzc2lvbiB9O1xuICAvLyBPcmdhbmlzYXRpb24gaWRlbnRpdHkgKGZyb20gRmphbGwgQVBJKVxuICBvcmdhbmlzYXRpb25JZD86IHN0cmluZztcbiAgb3JnYW5pc2F0aW9uTmFtZT86IHN0cmluZztcbiAgb3JnYW5pc2F0aW9uRW1haWw/OiBzdHJpbmc7XG4gIC8vIE9JREMgY29uZmlndXJhdGlvblxuXG4gIG9pZGNJc3N1ZXJVcmw/OiBzdHJpbmc7XG4gIHJvb3RPaWRjUm9sZUFybj86IHN0cmluZztcbn07XG5cbi8vIFpvZCBzY2hlbWFzIGZvciB2YWxpZGF0aW9uXG5jb25zdCBEb2NrZXJDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRvY2tlcmZpbGVQYXRoOiB6LnN0cmluZygpLFxuICAgIGNvbnRhaW5lclBvcnQ6IHoubnVtYmVyKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZXJ2aWNlQ29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICB0eXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIC8vIHBhc3N0aHJvdWdoOiBzZXJ2aWNlIG9wdGlvbnMgYXJlIGFyYml0cmFyeSBrZXktdmFsdWUgcGFpcnMgZGVmaW5lZCBieSBlYWNoIHNlcnZpY2UgdHlwZVxuICAgIG9wdGlvbnM6IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpLm9wdGlvbmFsKCksXG4gICAgZG9ja2VyQ29uZmlnOiBEb2NrZXJDb25maWdTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBhcGlBcHBsaWNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBQcm92aWRlckFjY291bnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbWFuYWdlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFByb2ZpbGVTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouZW51bShbXCJzc29cIiwgXCJvaWRjXCJdKSxcbiAgICByZWdpb246IHouc3RyaW5nKCksXG4gICAgc3NvQWNjb3VudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3NvUm9sZU5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzc29TZXNzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb2lkY1JvbGVBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjUHJvdmlkZXJBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByb2xlQXJuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcm9sZVNlc3Npb25OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTU09TZXNzaW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzc29SZWdpb246IHouc3RyaW5nKCksXG4gICAgc3NvU3RhcnRVcmw6IHouc3RyaW5nKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBSb290Q29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB2ZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgZGV2ZWxvcG1lbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgc2VydmljZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIFNlcnZpY2VDb25maWdTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgcHJvdmlkZXJBY2NvdW50czogei5hcnJheShQcm92aWRlckFjY291bnRTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgcHJpbWFyeVJlZ2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNlY29uZGFyeVJlZ2lvbnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY3VycmVudFByb2ZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBwcm9maWxlczogei5yZWNvcmQoei5zdHJpbmcoKSwgUHJvZmlsZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBzc29TZXNzaW9uczogei5yZWNvcmQoei5zdHJpbmcoKSwgU1NPU2Vzc2lvblNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBvcmdhbmlzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG9yZ2FuaXNhdGlvbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvcmdhbmlzYXRpb25FbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gICAgb2lkY0lzc3VlclVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJvb3RPaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBFbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBTdGF0dXM6IHouZW51bShbXCJBQ1RJVkVcIiwgXCJTVVNQRU5ERURcIiwgXCJQRU5ESU5HX0NMT1NVUkVcIl0pLm9wdGlvbmFsKCksXG4gICAgSm9pbmVkTWV0aG9kOiB6LmVudW0oW1wiSU5WSVRFRFwiLCBcIkNSRUFURURcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gei5jb2VyY2UuZGF0ZSgpIGhhbmRsZXMgYm90aCBEYXRlIG9iamVjdHMgKGZyb20gQVdTIFNESykgYW5kIElTTyA4NjAxIHN0cmluZ3MgKGZyb20gSlNPTiBwYXJzaW5nKVxuICAgIEpvaW5lZFRpbWVzdGFtcDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLy8gcGFzc3Rocm91Z2g6IEFXUyBTREsgQWNjb3VudCBvYmplY3RzIG1heSBjb250YWluIGFkZGl0aW9uYWwgcHJvcGVydGllcyBub3QgaW4gb3VyIHNjaGVtYVxuICAucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBiYXNlLXZlcnNpb24gb2YgYW55IG5ld2x5IGNyZWF0ZWQgY29uZmlnIGZpbGVcbiAqL1xuY29uc3QgQkFTRV9DT05GSUdfVkVSU0lPTiA9IDAuMTtcblxuLyoqXG4gKiBDb25maWcgY2xhc3MgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyBmamFsbC1jb25maWcuanNvbiBmaWxlXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ0xldmVsQ29uZmlnID0ge1xuICBwcmltYXJ5UmVnaW9uPzogc3RyaW5nO1xuICBzZWNvbmRhcnlSZWdpb25zPzogc3RyaW5nW107XG4gIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24/OiBzdHJpbmc7XG4gIHByb3ZpZGVyQWNjb3VudHM/OiBQcm92aWRlckFjY291bnRbXTtcbiAgc3NvU2Vzc2lvbnM/OiB7IFtrZXk6IHN0cmluZ106IFNTT1Nlc3Npb24gfTtcbiAgcm9vdE9pZGNSb2xlQXJuPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcblxuICBjb25zdHJ1Y3Rvcihyb290Q29uZmlnPzogUm9vdENvbmZpZywgZXhpc3RpbmdBY2NvdW50c0NvbmZpZz86IEFjY291bnRbXSkge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWcgPz8ge1xuICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRzQ29uZmlnID8/IFtdO1xuICB9XG5cbiAgaXNEZXZlbG9wbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvb3RDb25maWc/LmRldmVsb3BtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgYnkgd2Fsa2luZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWVcbiAgICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3Rvcnkgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSDsgaSsrKSB7XG4gICAgICBjb25zdCBmamFsbERpciA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsXCIpO1xuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihmamFsbERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGZqYWxsRGlyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJlY3RDb25maWdGaWxlID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhkaXJlY3RDb25maWdGaWxlKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlnIGZpbGUgaW50byBtZW1vcnkgYXMgYSByYXcgSlNPTiBzdHJpbmdcbiAgICogQHBhcmFtIGNvbmZpZ0ZpbGUgLSBQYXRoIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcmV0dXJucyBDb25maWcgYXMgSlNPTiBzdHJpbmcgb3IgTlVMTCBpZiBubyBjb25maWcgZmlsZSBhY2Nlc3NpYmxlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIG5vdCBhY2Nlc3NpYmxlIG9yIG5vdCByZWFkYWJsZSDigJQgY2FsbGVyIGhhbmRsZXMgbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMgTG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiBjb25maWcgZmlsZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGZhaWxzIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZygpOiBDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCk7XG4gICAgaWYgKCFjb25maWdEaXIpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdENvbmZpZ0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0FjY291bnRKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICk7XG5cbiAgICAvLyBQYXJzZSBlYWNoIGNvbmZpZyBmaWxlIHNlcGFyYXRlbHkgdG8gaWRlbnRpZnkgd2hpY2ggb25lIGZhaWxzXG4gICAgbGV0IHJvb3RDb25maWc6IFJvb3RDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXSB8IHVuZGVmaW5lZDtcblxuICAgIC8vIDEuIFBhcnNlIHJvb3QgY29uZmlnIChmamFsbC1jb25maWcuanNvbilcbiAgICBpZiAocm9vdENvbmZpZ0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3RDb25maWcgPSBSb290Q29uZmlnU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBDb25maWcuZm9ybWF0Wm9kRXJyb3IoZXJyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFBhcnNlIGFjY291bnRzIGNvbmZpZyAoYWNjb3VudHMtY29uZmlnLmpzb24pXG4gICAgaWYgKGV4aXN0aW5nQWNjb3VudEpzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoZXhpc3RpbmdBY2NvdW50SnNvbik7XG4gICAgICAgIGV4aXN0aW5nQWNjb3VudHNDb25maWcgPSB6LmFycmF5KEFjY291bnRTY2hlbWEpLnBhcnNlKHJhdyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbmZpZyhyb290Q29uZmlnLCBleGlzdGluZ0FjY291bnRzQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBab2QgZXJyb3IgaW50byBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZvcm1hdFpvZEVycm9yKGVycjogdW5rbm93biwgZmlsZU5hbWU6IHN0cmluZyk6IEVycm9yIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvciAmJiBlcnIuaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGlzc3VlRGV0YWlscyA9IGVyci5pc3N1ZXNcbiAgICAgICAgLm1hcCgoaXNzdWUpID0+IGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9OiAke2lzc3VlLm1lc3NhZ2V9YClcbiAgICAgICAgLmpvaW4oXCI7IFwiKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSAke2ZpbGVOYW1lfTogJHtpc3N1ZURldGFpbHN9YCk7XG4gICAgfVxuICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZXJyb3IgbWVzc2FnZSwgYnV0IHJlcGxhY2UgbmV3bGluZXMgdG8ga2VlcCBpdCBvbiBvbmUgbGluZVxuICAgIGNvbnN0IHJhd01lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgY29uc3QgbWVzc2FnZSA9IHJhd01lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5zdWJzdHJpbmcoMCwgNTAwKTtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGNvbmZpZ3VyYXRpb24gdG8gZmlsZVxuICAgKi9cbiAgc2F2ZUNvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdEaXIgPVxuICAgICAgQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKSB8fCBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJmamFsbFwiKTtcblxuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgZnMubWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCByb290SnNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdENvbmZpZywgbnVsbCwgMik7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIiksXG4gICAgICByb290SnNvblN0cmluZyxcbiAgICAgIHtcbiAgICAgICAgbW9kZTogMG82MDBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKSxcbiAgICAgIGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nLFxuICAgICAgeyBtb2RlOiAwbzYwMCB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgc2VydmljZSB0byB0aGUgY29uZmlnIGZpbGVcbiAgICogQHBhcmFtIHNlcnZpY2VLZXkgTmFtZS9rZXkgb2YgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtIGNvbmZpZyBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKi9cbiAgYWRkU2VydmljZShzZXJ2aWNlS2V5OiBzdHJpbmcsIGNvbmZpZzogU2VydmljZUNvbmZpZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzKSB0aGlzLnJvb3RDb25maWcuc2VydmljZXMgPSB7fTtcbiAgICB0aGlzLnJvb3RDb25maWcuc2VydmljZXNbc2VydmljZUtleV0gPSBjb25maWc7XG4gIH1cblxuICBnZXRTZXJ2aWNlQ29uZmlnKHNlcnZpY2VLZXk6IHN0cmluZyk6IFNlcnZpY2VDb25maWcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSB8fCBudWxsO1xuICB9XG5cbiAgYWRkUHJvdmlkZXJBY2NvdW50KGFjY291bnQ6IFByb3ZpZGVyQWNjb3VudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpXG4gICAgICB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cyA9IFtdO1xuXG4gICAgLy8gZW5zdXJlIGFjY291bnQgbmFtZSBpcyBhbHdheXMgbG93ZXJjYXNlXG4gICAgYWNjb3VudC5uYW1lID0gYWNjb3VudC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cbiAgICB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5wdXNoKGFjY291bnQpO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJBY2NvdW50KGFjY291bnROYW1lOiBzdHJpbmcpOiBQcm92aWRlckFjY291bnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT5cbiAgICAgICAgYWNjb3VudC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJBY2NvdW50QnlJZChhY2NvdW50SWQ6IHN0cmluZyk6IFByb3ZpZGVyQWNjb3VudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LmlkID09PSBhY2NvdW50SWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcm92aWRlciBhY2NvdW50IGJ5IGVudmlyb25tZW50IHR5cGVcbiAgICogQHBhcmFtIGVudmlyb25tZW50IFRoZSBlbnZpcm9ubWVudCB0eXBlIChlLmcuLCAncGxhdGZvcm0nLCAnc3RhZ2luZycsICdwcm9kdWN0aW9uJylcbiAgICogQHJldHVybnMgVGhlIHByb3ZpZGVyIGFjY291bnQgd2l0aCB0aGUgc3BlY2lmaWVkIGVudmlyb25tZW50IG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFjY291bnRCeUVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBQcm92aWRlckFjY291bnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGV4aXN0aW5nIGFjY291bnRzIGxpc3QuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBieSBBY2NvdW50U2VydmljZVxuICAgKiBhZnRlciBpdCBmZXRjaGVzIHRoZSBhY2NvdW50cyBmcm9tIEFXUy5cbiAgICogQHBhcmFtIGFjY291bnRzIExpc3Qgb2YgQVdTIGFjY291bnRzIGZyb20gT3JnYW5pemF0aW9ucyBBUElcbiAgICovXG4gIHNldEV4aXN0aW5nQWNjb3VudHNMaXN0KGFjY291bnRzOiBBY2NvdW50W10pOiB2b2lkIHtcbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBhY2NvdW50cztcbiAgfVxuXG4gIGdldEV4aXN0aW5nQWNjb3VudHMoKTogQWNjb3VudFtdIHtcbiAgICByZXR1cm4gdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnO1xuICB9XG5cbiAgc2V0UHJpbWFyeVJlZ2lvbihyZWdpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgc2V0U2Vjb25kYXJ5UmVnaW9ucyhyZWdpb25zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zID0gcmVnaW9ucztcbiAgfVxuXG4gIHNldERpc2FzdGVyUmVjb3ZlcnlSZWdpb24ocmVnaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIGdldFByaW1hcnlSZWdpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb247XG4gIH1cblxuICBnZXRTZWNvbmRhcnlSZWdpb25zKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnM7XG4gIH1cblxuICBnZXREaXNhc3RlclJlY292ZXJ5UmVnaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uO1xuICB9XG5cbiAgZ2V0QWxsUmVnaW9ucygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVnaW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbikge1xuICAgICAgcmVnaW9ucy5wdXNoKHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMpIHtcbiAgICAgIHJlZ2lvbnMucHVzaCguLi50aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gJiZcbiAgICAgICFyZWdpb25zLmluY2x1ZGVzKHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uKVxuICAgICkge1xuICAgICAgcmVnaW9ucy5wdXNoKHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnaW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGdldENvbmZpZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9maWxlIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwcm9maWxlIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBwcm9maWxlIGlzIHNldFxuICAgKi9cbiAgZ2V0Q3VycmVudFByb2ZpbGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgcHJvZmlsZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb2ZpbGUgdG8gc2V0IGFzIGN1cnJlbnRcbiAgICovXG4gIHNldEN1cnJlbnRQcm9maWxlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcHJvZmlsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBUaGUgcHJvZmlsZSBjb25maWd1cmF0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRQcm9maWxlKG5hbWU6IHN0cmluZyk6IFByb2ZpbGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG4gIH1cblxuICBnZXRBbGxQcm9maWxlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyk7XG4gIH1cblxuICBhZGRQcm9maWxlKG5hbWU6IHN0cmluZywgcHJvZmlsZTogUHJvZmlsZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdID0gcHJvZmlsZTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdO1xuXG4gICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgY3VycmVudCBwcm9maWxlLCBjbGVhciBpdFxuICAgIGlmICh0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGUgPT09IG5hbWUpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnZXRTU09TZXNzaW9uKG5hbWU6IHN0cmluZyk6IFNTT1Nlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV07XG4gIH1cblxuICBhZGRTU09TZXNzaW9uKG5hbWU6IHN0cmluZywgc2Vzc2lvbjogU1NPU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zW25hbWVdID0gc2Vzc2lvbjtcbiAgfVxuXG4gIGdldE9yZ0xldmVsQ29uZmlnKCk6IE9yZ0xldmVsQ29uZmlnIHtcbiAgICAvLyBEZXJpdmUgcm9vdE9pZGNSb2xlQXJuIGZyb20gdGhlIHJvb3QgYWNjb3VudCdzIE9JREMgcHJvZmlsZSBpZiBhdmFpbGFibGUsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBleHBsaWNpdGx5IHN0b3JlZCBmaWVsZCAoc2V0IGR1cmluZyBjb25maWcgcHVsbClcbiAgICBjb25zdCByb290QWNjb3VudCA9IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzPy5maW5kKFxuICAgICAgKGEpID0+IGEuZW52aXJvbm1lbnQgPT09IFwicm9vdFwiXG4gICAgKTtcbiAgICBjb25zdCByb290UHJvZmlsZU5hbWUgPSByb290QWNjb3VudD8ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJvb3RQcm9maWxlID0gcm9vdFByb2ZpbGVOYW1lXG4gICAgICA/IHRoaXMucm9vdENvbmZpZy5wcm9maWxlcz8uW3Jvb3RQcm9maWxlTmFtZV1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlcml2ZWRSb2xlQXJuID1cbiAgICAgIHJvb3RQcm9maWxlPy50eXBlID09PSBcIm9pZGNcIiA/IHJvb3RQcm9maWxlLm9pZGNSb2xlQXJuIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByaW1hcnlSZWdpb246IHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uLFxuICAgICAgc2Vjb25kYXJ5UmVnaW9uczogdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMsXG4gICAgICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uOiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbixcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLFxuICAgICAgc3NvU2Vzc2lvbnM6IHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyxcbiAgICAgIHJvb3RPaWRjUm9sZUFybjogZGVyaXZlZFJvbGVBcm4gPz8gdGhpcy5yb290Q29uZmlnLnJvb3RPaWRjUm9sZUFyblxuICAgIH07XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uSWQ7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25JZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbklkID0gaWQ7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vcmdhbmlzYXRpb25OYW1lO1xuICB9XG5cbiAgc2V0T3JnYW5pc2F0aW9uTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25FbWFpbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uRW1haWw7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25FbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbkVtYWlsID0gZW1haWw7XG4gIH1cblxuICBnZXRPaWRjSXNzdWVyVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsO1xuICB9XG5cbiAgc2V0T2lkY0lzc3VlclVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsID0gdXJsO1xuICB9XG5cbiAgc2V0T3JnTGV2ZWxDb25maWcoY29uZmlnOiBPcmdMZXZlbENvbmZpZyk6IHZvaWQge1xuICAgIGlmIChjb25maWcucHJpbWFyeVJlZ2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbiA9IGNvbmZpZy5wcmltYXJ5UmVnaW9uO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgPSBjb25maWcuc2Vjb25kYXJ5UmVnaW9ucztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uID0gY29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb247XG4gICAgfVxuICAgIGlmIChjb25maWcucHJvdmlkZXJBY2NvdW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cyA9IGNvbmZpZy5wcm92aWRlckFjY291bnRzO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNzb1Nlc3Npb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyA9IGNvbmZpZy5zc29TZXNzaW9ucztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5yb290T2lkY1JvbGVBcm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLnJvb3RPaWRjUm9sZUFybiA9IGNvbmZpZy5yb290T2lkY1JvbGVBcm47XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/util",
3
- "version": "0.88.1",
3
+ "version": "0.88.4",
4
4
  "description": "Common utility methods",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,11 +20,11 @@
20
20
  "devDependencies": {
21
21
  "@types/node": "^22.13.10",
22
22
  "prettier": "^3.2.5",
23
- "tsc-watch": "^6.0.0",
23
+ "tsc-watch": "^7.0.0",
24
24
  "typescript": "^5.8.2"
25
25
  },
26
26
  "dependencies": {
27
- "@aws-sdk/client-organizations": "^3.709.0",
27
+ "@aws-sdk/client-organizations": "^3.997.0",
28
28
  "zod": "^4.3.6"
29
29
  },
30
30
  "overrides": {
@@ -33,5 +33,5 @@
33
33
  "engines": {
34
34
  "node": ">=18.0.0"
35
35
  },
36
- "gitHead": "0c0785e2908bff823b0630a4fa896748384c265f"
36
+ "gitHead": "bae02efe8e447ef008c7bc3eef3398ded4872f42"
37
37
  }