@pipeline-builder/pipeline-manager 4.1.28 → 4.1.30

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.
@@ -105,19 +105,152 @@ function buildCreatePayload(options, props) {
105
105
  };
106
106
  if (options.visibility)
107
107
  payload.visibility = options.visibility;
108
- if (options.default !== undefined)
109
- payload.isDefault = options.default;
110
108
  if (options.active !== undefined)
111
109
  payload.isActive = options.active;
112
110
  return payload;
113
111
  }
114
- /** Print the request that would be sent, for `--dry-run`. */
115
- function printDryRun(options, payload) {
112
+ /** Whether an API error is the 409 a taken (project, organization) slot returns. */
113
+ function conflictStatus(error) {
114
+ const res = error?.response;
115
+ return res?.status === 409;
116
+ }
117
+ /**
118
+ * Print the structure the config will build. This is the part a reviewer signs
119
+ * off on — stage order, the plugin VERSIONS each step resolves to, which stages
120
+ * deploy where, and whether the pipeline assumes a caller-supplied IAM role.
121
+ */
122
+ function printPreview(preview) {
123
+ console.log('');
124
+ printSection('Dry Run - What This Would Build');
125
+ if (preview.stages.length === 0) {
126
+ printWarning('No stages declared — this pipeline would build nothing.');
127
+ }
128
+ for (const [i, stage] of preview.stages.entries()) {
129
+ const deploy = stage.environment ? ` ${cyan(`→ deploys to ${stage.environment}`)}` : '';
130
+ console.log(` ${bold(`${i + 1}. ${stage.stageName}`)} ${dim(`(${stage.codePipelineStage})`)}${deploy}`);
131
+ if (stage.steps.length === 0)
132
+ console.log(` ${dim('(no steps)')}`);
133
+ for (const step of stage.steps) {
134
+ // `latest` is called out because an unpinned plugin resolves to whatever is
135
+ // newest at synth — the difference a reviewer most needs to see.
136
+ const version = step.version === 'latest' ? `${step.version} (unpinned)` : step.version;
137
+ console.log(` ${dim('•')} ${step.plugin}@${version}${step.position === 'post' ? dim(' [post]') : ''}`);
138
+ }
139
+ }
140
+ printInfo('IAM', preview.iam.callerSupplied
141
+ ? { role: `${preview.iam.roleType} — caller-supplied${preview.iam.roleRef ? `: ${preview.iam.roleRef}` : ''}` }
142
+ : { role: `${preview.iam.roleType} (platform-managed)` });
143
+ if (preview.iam.callerSupplied) {
144
+ printWarning('This pipeline assumes a role the config names, so its permissions are whatever that role already holds.');
145
+ }
146
+ }
147
+ /** Print what an update would CHANGE, for a slot that is already occupied. */
148
+ function printDiff(diff) {
149
+ console.log('');
150
+ printSection('Dry Run - What Would Change');
151
+ if (diff.unchanged) {
152
+ printInfo('No structural change — stages, plugins and IAM are identical to the stored configuration');
153
+ return;
154
+ }
155
+ const rows = {};
156
+ if (diff.stagesAdded.length)
157
+ rows['Stages added'] = diff.stagesAdded.join(', ');
158
+ if (diff.stagesRemoved.length)
159
+ rows['Stages removed'] = diff.stagesRemoved.join(', ');
160
+ if (diff.stagesChanged.length)
161
+ rows['Stages changed'] = diff.stagesChanged.join(', ');
162
+ if (diff.pluginsAdded.length)
163
+ rows['Plugins added'] = diff.pluginsAdded.join(', ');
164
+ if (diff.pluginsRemoved.length)
165
+ rows['Plugins removed'] = diff.pluginsRemoved.join(', ');
166
+ printKeyValue(rows);
167
+ if (diff.iamChanged) {
168
+ printWarning(`IAM role changes: ${diff.iamChanged.from.roleType} → ${diff.iamChanged.to.roleType}`);
169
+ }
170
+ }
171
+ /**
172
+ * `--dry-run`: ask the server to run every create-time check and print the result.
173
+ *
174
+ * This used to print the request body and a green "✓ Validation complete", having
175
+ * validated nothing server-side — so a config that a compliance rule, a plugin
176
+ * contract or an exhausted quota would reject reported success. Nothing about a
177
+ * payload echo is a validation.
178
+ *
179
+ * THROWS when the config is invalid, so `--dry-run` exits non-zero and a CI step
180
+ * that runs it fails instead of passing on a printed error.
181
+ */
182
+ async function runDryRun(options, payload, client) {
183
+ const config = client.getConfig();
116
184
  console.log('');
117
185
  printSection('Dry Run - Request Preview');
118
186
  console.log(JSON.stringify(payload, null, 2));
119
187
  console.log('');
120
- printSuccess('✓ Validation complete - no pipeline created (dry run mode)');
188
+ printSection('Dry Run - Server Validation');
189
+ const spinner = ora('Validating against templates, plugin contracts, compliance and quota...').start();
190
+ let report;
191
+ try {
192
+ const res = await client.post(`${config.api.pipelineUrl}/validate`, payload);
193
+ report = (res.data ?? res);
194
+ spinner.stop();
195
+ }
196
+ catch (error) {
197
+ spinner.fail('Validation could not be performed');
198
+ throw error;
199
+ }
200
+ if (report.normalized) {
201
+ printInfo('Normalized identity', {
202
+ project: report.normalized.project,
203
+ organization: report.normalized.organization,
204
+ pipelineName: report.normalized.pipelineName,
205
+ visibility: report.normalized.visibility,
206
+ });
207
+ }
208
+ if (report.quota) {
209
+ printInfo('Pipeline quota', report.quota.unlimited
210
+ ? { limit: 'unlimited' }
211
+ : { used: report.quota.used, limit: report.quota.limit, remaining: report.quota.remaining });
212
+ }
213
+ // A taken slot is the one dry-run finding that is NOT a config problem: the
214
+ // config is valid and the create would still 409, because one pipeline per
215
+ // (project, organization) is a uniqueness rule, not a validation rule. Saying so
216
+ // here is the whole point of asking the server — a CI dry-run that passes and
217
+ // then 409s on the real create has told nobody anything. The server's message
218
+ // names `?upsert=true`; a CLI user has `--upsert`.
219
+ if (report.slot?.taken) {
220
+ const existing = report.slot.pipelineName ?? report.slot.pipelineId ?? 'an existing pipeline';
221
+ if (options.upsert) {
222
+ printInfo(`This project/organization already has ${existing} — --upsert would overwrite it`);
223
+ }
224
+ else {
225
+ printWarning(`This project/organization already has ${existing}, so creating would fail with a 409. `
226
+ + 'Re-run with --upsert to overwrite it, or edit the existing one.');
227
+ }
228
+ }
229
+ else if (report.slot?.deleted) {
230
+ printInfo('A deleted pipeline holds this project/organization — creating will reuse the slot');
231
+ }
232
+ if (report.preview)
233
+ printPreview(report.preview);
234
+ if (report.diff)
235
+ printDiff(report.diff);
236
+ if (report.deploys && report.deploys.length > 0) {
237
+ printInfo('DORA deploy attribution', Object.fromEntries(report.deploys.map((d) => [d.stage, `${d.environment}${d.inferred ? ' (inferred)' : ''}`])));
238
+ }
239
+ else {
240
+ printWarning('No stage declares an environment — this pipeline produces no DORA deploy signal.');
241
+ }
242
+ for (const w of report.warnings ?? [])
243
+ printWarning(`[${w.stage}] ${w.message}`);
244
+ console.log('');
245
+ if (!report.valid) {
246
+ for (const problem of report.problems ?? []) {
247
+ printError(`[${problem.stage}] ${problem.message}`);
248
+ }
249
+ // Non-zero exit: a dry run that found real problems must be RED. Printing them
250
+ // and returning 0 is how a broken config reaches a pipeline.
251
+ throw new ValidationError(`Pipeline configuration is not valid (${report.problems?.length ?? 0} problem(s)) — nothing was created`, 'props');
252
+ }
253
+ printSuccess('✓ Configuration is valid - no pipeline created (dry run mode)');
121
254
  console.log('');
122
255
  if (options.deploy) {
123
256
  printInfo('With --deploy, the pipeline would be deployed via CDK after creation', {
@@ -226,14 +359,16 @@ export function createPipeline(program) {
226
359
  .option('-o, --organization <organization>', 'Organization name (falls back to value in props file)')
227
360
  .option('-n, --name <name>', 'Pipeline name')
228
361
  .option('-a, --visibility <rung>', 'Sharing rung (private|org|public). Pipelines default to org — a team asset is visible to the team.', 'org')
229
- .option('--default', 'Set as default pipeline', false)
362
+ // No `--default`: `pipeline_project_org_unique` allows one pipeline per
363
+ // (project, organization, org), so the created row IS its slot's default.
230
364
  .option('--active', 'Set pipeline as active', true)
231
365
  .option('--no-active', 'Create the pipeline as inactive')
366
+ .option('--upsert', 'Overwrite an existing pipeline for the same project/organization (otherwise a taken slot is a 409)', false)
232
367
  // --deploy: after creating the record, run the same CDK deploy + ARN
233
368
  // registration as `pipeline deploy --id` (shared runDeploy). The flags
234
369
  // below apply only with --deploy.
235
370
  .option('--deploy', 'Deploy the pipeline with AWS CDK immediately after creating it', false)
236
- .option('--require-approval <approval>', 'Deploy approval level: never|any-change|broadening (with --deploy)', 'never')
371
+ .option('--require-approval <approval>', 'Deploy approval level: never|any-change|broadening. Defaults to `broadening`: a deploy that widens IAM stops for confirmation. Pass `never` for unattended runs. (with --deploy)', 'broadening')
237
372
  .option('--output <dir>', 'CDK output directory (with --deploy)', 'cdk.out')
238
373
  .option('--store-tokens', 'Deploy auth via AWS Secrets Manager token (with --deploy; requires PLATFORM_SECRET_NAME)', false))))
239
374
  .option('--dry-run', 'Validate inputs without creating pipeline', false)
@@ -248,8 +383,8 @@ export function createPipeline(program) {
248
383
  'Organization': options.organization || '(from props file)',
249
384
  'Name': options.name || '(not set)',
250
385
  'Visibility': options.visibility,
251
- 'Default Pipeline': options.default ? 'Yes' : 'No',
252
386
  'Active': options.active ? 'Yes' : 'No',
387
+ 'Overwrite Existing': options.upsert ? 'Yes (--upsert)' : 'No',
253
388
  'Deploy After Create': options.deploy ? `Yes (profile: ${options.profile || 'default'})` : 'No',
254
389
  'Properties File': options.file,
255
390
  'SSL Verification': options.verifySsl === false ? 'Disabled' : 'Enabled',
@@ -259,13 +394,14 @@ export function createPipeline(program) {
259
394
  printSslWarning(options.verifySsl);
260
395
  const props = readPropsFile(options.file);
261
396
  const payload = buildCreatePayload(options, props);
397
+ // Created before the dry-run branch: --dry-run now calls the server, so it
398
+ // needs the same authenticated client the create does.
399
+ const client = createAuthenticatedClient(options);
400
+ const config = client.getConfig();
262
401
  if (options.dryRun) {
263
- printDryRun(options, payload);
402
+ await runDryRun(options, payload, client);
264
403
  return;
265
404
  }
266
- // Create authenticated API client
267
- const client = createAuthenticatedClient(options);
268
- const config = client.getConfig();
269
405
  // Create pipeline
270
406
  console.log('');
271
407
  printSection('Creating Pipeline');
@@ -274,12 +410,17 @@ export function createPipeline(program) {
274
410
  let requestDuration;
275
411
  try {
276
412
  const requestStart = Date.now();
277
- rawResponse = await client.post(config.api.pipelineUrl, payload);
413
+ rawResponse = await client.post(options.upsert ? `${config.api.pipelineUrl}?upsert=true` : config.api.pipelineUrl, payload);
278
414
  requestDuration = Date.now() - requestStart;
279
- spinner.succeed('Pipeline created');
415
+ spinner.succeed(options.upsert ? 'Pipeline created or updated' : 'Pipeline created');
280
416
  }
281
417
  catch (error) {
282
418
  spinner.fail('Pipeline creation failed');
419
+ // A 409 means the (project, organization) slot is taken. The server's
420
+ // message names `?upsert=true`; translate it to the flag a CLI user has.
421
+ if (conflictStatus(error) && !options.upsert) {
422
+ printWarning('That project/organization already has a pipeline. Re-run with --upsert to overwrite it, or edit the existing one.');
423
+ }
283
424
  throw error;
284
425
  }
285
426
  const pipeline = extractSingleResponse(rawResponse, 'pipeline', 'id');
@@ -321,4 +462,4 @@ export function createPipeline(program) {
321
462
  }
322
463
  });
323
464
  }
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7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QUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXO29CQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztvQkFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUN2QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0RmlsZVNpemUsIEZJTEVfU0laRV9MSU1JVFMsIGRlZmF1bHRQaXBlbGluZU5hbWUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBpcGVsaW5lUmVzcG9uc2UsIHR5cGUgQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0LCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFNzbE9wdGlvbnMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBlbnN1cmVPdXRwdXREaXJlY3RvcnksIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVsYXhUbHNGb3JDbGkgfSBmcm9tICcuLi91dGlscy90bHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGRpbSwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKiBQYXJzZWQgYHBpcGVsaW5lIGNyZWF0ZWAgZmxhZ3MuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGlwZWxpbmVPcHRpb25zIHtcbiAgZmlsZTogc3RyaW5nO1xuICBwcm9qZWN0Pzogc3RyaW5nO1xuICBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZpc2liaWxpdHk/OiBDcmVhdGVQaXBlbGluZVJlcXVlc3RbJ3Zpc2liaWxpdHknXTtcbiAgZGVmYXVsdD86IGJvb2xlYW47XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRlcGxveT86IGJvb2xlYW47XG4gIHJlcXVpcmVBcHByb3ZhbDogc3RyaW5nO1xuICBvdXRwdXQ6IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB2ZXJpZnlTc2w/OiBib29sZWFuO1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG59XG5cbi8qKiBWYWxpZGF0ZSB0aGUgcHJvcHMgZmlsZSAoZXhpc3RzLCBzaXplIGNhcCkgYW5kIHBhcnNlIGl0IGFzIGEgSlNPTiBvYmplY3QuICovXG5mdW5jdGlvbiByZWFkUHJvcHNGaWxlKGZpbGU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IGZpbGUgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gLCAnZmlsZScpO1xuICB9XG5cbiAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZUV4dCAhPT0gJy5qc29uJykge1xuICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC5qc29uJywgeyBleHRlbnNpb246IGZpbGVFeHQgfSk7XG4gIH1cblxuICBjb25zdCBmaWxlU3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKTtcbiAgaWYgKGZpbGVTdGF0cy5zaXplID4gRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUykge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBpcyB0b28gbGFyZ2UnLCB7XG4gICAgICBzaXplOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICBsaW1pdDogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUyksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcsICdmaWxlJyk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0ZpbGUgUGF0aCc6IGZpbGUsXG4gICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludEluZm8oJ1JlYWRpbmcgcGlwZWxpbmUgcHJvcGVydGllcy4uLicpO1xuXG4gIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAgcHJvcHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBKU09OIGluIHByb3BlcnRpZXMgZmlsZScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG4gIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICB9KTtcbiAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgY3JlYXRlIHJlcXVlc3QuIFByb2plY3QgJiBvcmdhbml6YXRpb24gcHJlZmVyIHRoZSBDTEkgZmxhZ3MgYW5kXG4gKiBmYWxsIGJhY2sgdG8gdmFsdWVzIGVtYmVkZGVkIGluIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBheWxvYWQob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDcmVhdGVQaXBlbGluZVJlcXVlc3Qge1xuICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gIH1cbiAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgcHJvcHMsXG4gIH07XG4gIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIHBheWxvYWQudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcbiAgaWYgKG9wdGlvbnMuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLmlzRGVmYXVsdCA9IG9wdGlvbnMuZGVmYXVsdDtcbiAgaWYgKG9wdGlvbnMuYWN0aXZlICE9PSB1bmRlZmluZWQpIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8qKiBQcmludCB0aGUgcmVxdWVzdCB0aGF0IHdvdWxkIGJlIHNlbnQsIGZvciBgLS1kcnktcnVuYC4gKi9cbmZ1bmN0aW9uIHByaW50RHJ5UnVuKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucywgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0KTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ+KckyBWYWxpZGF0aW9uIGNvbXBsZXRlIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgIHByaW50SW5mbygnV2l0aCAtLWRlcGxveSwgdGhlIHBpcGVsaW5lIHdvdWxkIGJlIGRlcGxveWVkIHZpYSBDREsgYWZ0ZXIgY3JlYXRpb24nLCB7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgJyhkZWZhdWx0KScsXG4gICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8ICcoZGVmYXVsdCknLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICB9KTtcbiAgfVxuICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xufVxuXG4vKiogUHJpbnQgdGhlIGNyZWF0ZWQgcGlwZWxpbmUgYW5kIHNhdmUgaXQgdG8gYC4vb3V0cHV0L3BpcGVsaW5lLTxpZD4uanNvbmAuICovXG5mdW5jdGlvbiByZXBvcnRDcmVhdGVkUGlwZWxpbmUocGlwZWxpbmU6IFBpcGVsaW5lLCBleGVjdXRpb25JZDogc3RyaW5nLCByZXF1ZXN0RHVyYXRpb246IG51bWJlciwgc3RhcnRUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ+KckyBQaXBlbGluZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgJ1Zpc2liaWxpdHknOiBwaXBlbGluZS52aXNpYmlsaXR5IHx8ICdvcmcnLFxuICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAnUHJvcGVydGllcyc6IHBpcGVsaW5lLnByb3BzID8gYCR7T2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aH0ga2V5c2AgOiAnKG5vdCByZXR1cm5lZCknLFxuICB9KTtcblxuICBpZiAocGlwZWxpbmUuY3JlYXRlZEF0KSB7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50S2V5VmFsdWUoeyAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCB9KTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICdSZXF1ZXN0IER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24ocmVxdWVzdER1cmF0aW9uKSxcbiAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gJy4vb3V0cHV0JztcbiAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dERpcik7XG4gIGNvbnN0IG91dHB1dEZpbGUgPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBgcGlwZWxpbmUtJHtwaXBlbGluZS5pZH0uanNvbmApO1xuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHBpcGVsaW5lLCBudWxsLCAyKSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGRldGFpbHMgc2F2ZWQgdG8gZmlsZScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnT3V0cHV0IEZpbGUnOiBvdXRwdXRGaWxlLFxuICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmcy5zdGF0U3luYyhvdXRwdXRGaWxlKS5zaXplKSxcbiAgfSk7XG59XG5cbi8qKlxuICogYC0tZGVwbG95YDogcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk4gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3lcbiAqIC0taWRgLiBUaGUgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlOiBpZiB0aGUgZGVwbG95IGZhaWxzIGl0XG4gKiBpcyBLRVBUIGFuZCB0aGUgZXhhY3QgcmV0cnkgaXMgc3VyZmFjZWQgcmF0aGVyIHRoYW4gcm9sbGVkIGJhY2sgKG5ldmVyXG4gKiBmYWxzZS1ncmVlbikuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNyZWF0ZWRQaXBlbGluZShcbiAgb3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgdHJ5IHtcbiAgICAvLyBEZXBsb3kgdG91Y2hlcyB0aGUgQVdTIFNESyArIHRoZSBDREsgc3ludGggc3VicHJvY2VzczsgcmVsYXggVExTIHRoZVxuICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG4gICAgLy8gVGhlIGFzeW5jIGNsaWVudCBhZGRzIC0tc3RvcmUtdG9rZW5zIChTZWNyZXRzIE1hbmFnZXIpIHN1cHBvcnQgYW5kXG4gICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICBjb25zdCBkZXBsb3lDbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgY29uc3QgZGVwbG95Q29uZmlnID0gZGVwbG95Q2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgIC8vIHJlZ2lzdHJ5IGhvc3QgaXMgYmFrZWQgRVhBQ1RMWSBhcyBgZGVwbG95IC0taWRgIGRvZXMg4oCUIG5vIGRyaWZ0LlxuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMoZGVwbG95Q2xpZW50LCBwaXBlbGluZUlkKTtcbiAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICBwcm9wc1dpdGhJZHM6IGZldGNoZWQucHJvcHNXaXRoSWRzLFxuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgZGVidWcsXG4gICAgICBleGVjdXRpb25JZCxcbiAgICAgIHBsYXRmb3JtQ2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICBwbGF0Zm9ybVBpcGVsaW5lVXJsOiBkZXBsb3lDb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGRlcGxveUVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZGVwbG95RXJyb3IpLFxuICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmVJZH1gLFxuICAgIH0pO1xuICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAvLyByZXRhaW5lZCDigJQgcmUtcnVuIHRoZSBkZXBsb3kgd2l0aCB0aGUgY29tbWFuZCBhYm92ZS5cbiAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLXZpc2liaWxpdHkgPHJ1bmc+JywgJ1NoYXJpbmcgcnVuZyAocHJpdmF0ZXxvcmd8cHVibGljKS4gUGlwZWxpbmVzIGRlZmF1bHQgdG8gb3JnIOKAlCBhIHRlYW0gYXNzZXQgaXMgdmlzaWJsZSB0byB0aGUgdGVhbS4nLCAnb3JnJylcbiAgICAgICAgLm9wdGlvbignLS1kZWZhdWx0JywgJ1NldCBhcyBkZWZhdWx0IHBpcGVsaW5lJywgZmFsc2UpXG4gICAgICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgICAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdDcmVhdGUgdGhlIHBpcGVsaW5lIGFzIGluYWN0aXZlJylcbiAgICAgICAgLy8gLS1kZXBsb3k6IGFmdGVyIGNyZWF0aW5nIHRoZSByZWNvcmQsIHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOXG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95IC0taWRgIChzaGFyZWQgcnVuRGVwbG95KS4gVGhlIGZsYWdzXG4gICAgICAgIC8vIGJlbG93IGFwcGx5IG9ubHkgd2l0aCAtLWRlcGxveS5cbiAgICAgICAgLm9wdGlvbignLS1kZXBsb3knLCAnRGVwbG95IHRoZSBwaXBlbGluZSB3aXRoIEFXUyBDREsgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgaXQnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcgKHdpdGggLS1kZXBsb3kpJywgJ25ldmVyJylcbiAgICAgICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnkgKHdpdGggLS1kZXBsb3kpJywgJ2Nkay5vdXQnKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdEZXBsb3kgYXV0aCB2aWEgQVdTIFNlY3JldHMgTWFuYWdlciB0b2tlbiAod2l0aCAtLWRlcGxveTsgcmVxdWlyZXMgUExBVEZPUk1fU0VDUkVUX05BTUUpJywgZmFsc2UpKSxcbiAgICApLFxuICApXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGlucHV0cyB3aXRob3V0IGNyZWF0aW5nIHBpcGVsaW5lJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ3JlYXRlIFBpcGVsaW5lJywgJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ0NvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1Byb2plY3QnOiBvcHRpb25zLnByb2plY3QgfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnTmFtZSc6IG9wdGlvbnMubmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnVmlzaWJpbGl0eSc6IG9wdGlvbnMudmlzaWJpbGl0eSxcbiAgICAgICAgICAnRGVmYXVsdCBQaXBlbGluZSc6IG9wdGlvbnMuZGVmYXVsdCA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQWN0aXZlJzogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0RlcGxveSBBZnRlciBDcmVhdGUnOiBvcHRpb25zLmRlcGxveSA/IGBZZXMgKHByb2ZpbGU6ICR7b3B0aW9ucy5wcm9maWxlIHx8ICdkZWZhdWx0J30pYCA6ICdObycsXG4gICAgICAgICAgJ1Byb3BlcnRpZXMgRmlsZSc6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAnU1NMIFZlcmlmaWNhdGlvbic6IG9wdGlvbnMudmVyaWZ5U3NsID09PSBmYWxzZSA/ICdEaXNhYmxlZCcgOiAnRW5hYmxlZCcsXG4gICAgICAgICAgJ0RyeSBSdW4nOiBvcHRpb25zLmRyeVJ1biA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIGNvbnN0IHByb3BzID0gcmVhZFByb3BzRmlsZShvcHRpb25zLmZpbGUpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYnVpbGRDcmVhdGVQYXlsb2FkKG9wdGlvbnMsIHByb3BzKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICBwcmludERyeVJ1bihvcHRpb25zLCBwYXlsb2FkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYXV0aGVudGljYXRlZCBBUEkgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcblxuICAgICAgICAvLyBDcmVhdGUgcGlwZWxpbmVcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG5cbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ3JlYXRpbmcgcGlwZWxpbmUuLi4nKS5zdGFydCgpO1xuICAgICAgICBsZXQgcmF3UmVzcG9uc2U6IFBpcGVsaW5lUmVzcG9uc2U7XG4gICAgICAgIGxldCByZXF1ZXN0RHVyYXRpb246IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHJhd1Jlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8UGlwZWxpbmVSZXNwb25zZT4oXG4gICAgICAgICAgICBjb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnQ7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQaXBlbGluZSBjcmVhdGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdQaXBlbGluZSBjcmVhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihyYXdSZXNwb25zZSwgJ3BpcGVsaW5lJywgJ2lkJyk7XG5cbiAgICAgICAgaWYgKCFwaXBlbGluZT8uaWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIHBpcGVsaW5lIHJlc3BvbnNlJywge1xuICAgICAgICAgICAgcmVzcG9uc2VLZXlzOiByYXdSZXNwb25zZSA/IE9iamVjdC5rZXlzKHJhd1Jlc3BvbnNlKSA6ICcobnVsbCknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgY3JlYXRpb24gZmFpbGVkIC0gbm8gdmFsaWQgcGlwZWxpbmUgZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0Q3JlYXRlZFBpcGVsaW5lKHBpcGVsaW5lLCBleGVjdXRpb25JZCwgcmVxdWVzdER1cmF0aW9uLCBzdGFydFRpbWUpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgICAgICAgIGF3YWl0IGRlcGxveUNyZWF0ZWRQaXBlbGluZShvcHRpb25zLCBwaXBlbGluZS5pZCwgZXhlY3V0aW9uSWQsIHByb2dyYW0ub3B0cygpLmRlYnVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5leHQgc3RlcHNcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ05leHQgU3RlcHMnKTtcbiAgICAgICAgY29uc29sZS5sb2coZGltKCdZb3UgY2FuIG5vdzonKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBEZXBsb3k6ICR7Ym9sZChgZGVwbG95IC0taWQgJHtwaXBlbGluZS5pZH1gKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBWaWV3OiAke2JvbGQoYGdldC1waXBlbGluZSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IEFQSTogJHtjb25maWcuYXBpLmJhc2VVcmx9JHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lLmlkfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdjcmVhdGUtcGlwZWxpbmUnLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwcm9qZWN0OiBvcHRpb25zLnByb2plY3QsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59Il19
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7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Q0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVztvQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtvQkFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7b0JBQzVCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDdkI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGZvcm1hdEZpbGVTaXplLCBGSUxFX1NJWkVfTElNSVRTLCBkZWZhdWx0UGlwZWxpbmVOYW1lIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQaXBlbGluZVJlc3BvbnNlLCB0eXBlIENyZWF0ZVBpcGVsaW5lUmVxdWVzdCwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50LCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhTc2xPcHRpb25zLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZW5zdXJlT3V0cHV0RGlyZWN0b3J5LCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBkaW0sIGdyZWVuIH0gPSBwaWNvO1xuXG4vKiogUGFyc2VkIGBwaXBlbGluZSBjcmVhdGVgIGZsYWdzLiAqL1xuaW50ZXJmYWNlIENyZWF0ZVBpcGVsaW5lT3B0aW9ucyB7XG4gIGZpbGU6IHN0cmluZztcbiAgcHJvamVjdD86IHN0cmluZztcbiAgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2aXNpYmlsaXR5PzogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0Wyd2aXNpYmlsaXR5J107XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIHVwc2VydD86IGJvb2xlYW47XG4gIGRlcGxveT86IGJvb2xlYW47XG4gIHJlcXVpcmVBcHByb3ZhbDogc3RyaW5nO1xuICBvdXRwdXQ6IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB2ZXJpZnlTc2w/OiBib29sZWFuO1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG59XG5cbi8qKiBWYWxpZGF0ZSB0aGUgcHJvcHMgZmlsZSAoZXhpc3RzLCBzaXplIGNhcCkgYW5kIHBhcnNlIGl0IGFzIGEgSlNPTiBvYmplY3QuICovXG5mdW5jdGlvbiByZWFkUHJvcHNGaWxlKGZpbGU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IGZpbGUgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gLCAnZmlsZScpO1xuICB9XG5cbiAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZUV4dCAhPT0gJy5qc29uJykge1xuICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC5qc29uJywgeyBleHRlbnNpb246IGZpbGVFeHQgfSk7XG4gIH1cblxuICBjb25zdCBmaWxlU3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKTtcbiAgaWYgKGZpbGVTdGF0cy5zaXplID4gRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUykge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBpcyB0b28gbGFyZ2UnLCB7XG4gICAgICBzaXplOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICBsaW1pdDogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUyksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcsICdmaWxlJyk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0ZpbGUgUGF0aCc6IGZpbGUsXG4gICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludEluZm8oJ1JlYWRpbmcgcGlwZWxpbmUgcHJvcGVydGllcy4uLicpO1xuXG4gIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAgcHJvcHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBKU09OIGluIHByb3BlcnRpZXMgZmlsZScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG4gIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICB9KTtcbiAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgY3JlYXRlIHJlcXVlc3QuIFByb2plY3QgJiBvcmdhbml6YXRpb24gcHJlZmVyIHRoZSBDTEkgZmxhZ3MgYW5kXG4gKiBmYWxsIGJhY2sgdG8gdmFsdWVzIGVtYmVkZGVkIGluIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBheWxvYWQob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDcmVhdGVQaXBlbGluZVJlcXVlc3Qge1xuICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gIH1cbiAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgcHJvcHMsXG4gIH07XG4gIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIHBheWxvYWQudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcbiAgaWYgKG9wdGlvbnMuYWN0aXZlICE9PSB1bmRlZmluZWQpIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8qKiBXaGV0aGVyIGFuIEFQSSBlcnJvciBpcyB0aGUgNDA5IGEgdGFrZW4gKHByb2plY3QsIG9yZ2FuaXphdGlvbikgc2xvdCByZXR1cm5zLiAqL1xuZnVuY3Rpb24gY29uZmxpY3RTdGF0dXMoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgcmVzID0gKGVycm9yIGFzIHsgcmVzcG9uc2U/OiB7IHN0YXR1cz86IG51bWJlciB9IH0gfCBudWxsKT8ucmVzcG9uc2U7XG4gIHJldHVybiByZXM/LnN0YXR1cyA9PT0gNDA5O1xufVxuXG4vKiogT25lIHJlYXNvbiBhIGNyZWF0ZSB3b3VsZCBiZSByZWZ1c2VkLCBhcyBgUE9TVCAvcGlwZWxpbmVzL3ZhbGlkYXRlYCByZXBvcnRzIGl0LiAqL1xuaW50ZXJmYWNlIFZhbGlkYXRpb25Qcm9ibGVtIHtcbiAgc3RhZ2U6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogVGhlIHN0YWdlL3BsdWdpbi9JQU0gcHJvamVjdGlvbiB0aGUgc2VydmVyIGRlcml2ZXMgZnJvbSB0aGUgY29uZmlnLiAqL1xuaW50ZXJmYWNlIFN0cnVjdHVyZVByZXZpZXcge1xuICBzdGFnZXM6IEFycmF5PHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBjb2RlUGlwZWxpbmVTdGFnZTogc3RyaW5nO1xuICAgIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAgIHN0ZXBzOiBBcnJheTx7IHBsdWdpbjogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmc7IHBvc2l0aW9uOiBzdHJpbmcgfT47XG4gIH0+O1xuICBpYW06IHsgcm9sZVR5cGU6IHN0cmluZzsgY2FsbGVyU3VwcGxpZWQ6IGJvb2xlYW47IHJvbGVSZWY/OiBzdHJpbmcgfTtcbiAgcGx1Z2luczogc3RyaW5nW107XG59XG5cbi8qKiBXaGF0IGFuIHVwZGF0ZSB3b3VsZCBjaGFuZ2UsIHJlbGF0aXZlIHRvIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gKi9cbmludGVyZmFjZSBTdHJ1Y3R1cmVEaWZmIHtcbiAgc3RhZ2VzQWRkZWQ6IHN0cmluZ1tdO1xuICBzdGFnZXNSZW1vdmVkOiBzdHJpbmdbXTtcbiAgc3RhZ2VzQ2hhbmdlZDogc3RyaW5nW107XG4gIHBsdWdpbnNBZGRlZDogc3RyaW5nW107XG4gIHBsdWdpbnNSZW1vdmVkOiBzdHJpbmdbXTtcbiAgaWFtQ2hhbmdlZD86IHsgZnJvbTogeyByb2xlVHlwZTogc3RyaW5nIH07IHRvOiB7IHJvbGVUeXBlOiBzdHJpbmcgfSB9O1xuICB1bmNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgdmFsaWRhdGUgZW5kcG9pbnQncyByZXBvcnQuICovXG5pbnRlcmZhY2UgVmFsaWRhdGVSZXBvcnQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgcHJvYmxlbXM6IFZhbGlkYXRpb25Qcm9ibGVtW107XG4gIHdhcm5pbmdzOiBWYWxpZGF0aW9uUHJvYmxlbVtdO1xuICBub3JtYWxpemVkPzogeyBwcm9qZWN0OiBzdHJpbmc7IG9yZ2FuaXphdGlvbjogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZzsgdmlzaWJpbGl0eTogc3RyaW5nIH07XG4gIHNsb3Q/OiB7IHRha2VuOiBib29sZWFuOyBwaXBlbGluZUlkPzogc3RyaW5nOyBwaXBlbGluZU5hbWU/OiBzdHJpbmc7IGRlbGV0ZWQ/OiBib29sZWFuIH07XG4gIGRlcGxveXM/OiBBcnJheTx7IHN0YWdlOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IGluZmVycmVkOiBib29sZWFuIH0+O1xuICBkZXBsb3lzVGFnPzogc3RyaW5nO1xuICBxdW90YT86IHsgdXNlZDogbnVtYmVyOyBsaW1pdDogbnVtYmVyOyByZW1haW5pbmc6IG51bWJlcjsgdW5saW1pdGVkOiBib29sZWFuOyByZXNldEF0OiBzdHJpbmcgfTtcbiAgcHJldmlldz86IFN0cnVjdHVyZVByZXZpZXc7XG4gIGRpZmY/OiBTdHJ1Y3R1cmVEaWZmO1xufVxuXG4vKipcbiAqIFByaW50IHRoZSBzdHJ1Y3R1cmUgdGhlIGNvbmZpZyB3aWxsIGJ1aWxkLiBUaGlzIGlzIHRoZSBwYXJ0IGEgcmV2aWV3ZXIgc2lnbnNcbiAqIG9mZiBvbiDigJQgc3RhZ2Ugb3JkZXIsIHRoZSBwbHVnaW4gVkVSU0lPTlMgZWFjaCBzdGVwIHJlc29sdmVzIHRvLCB3aGljaCBzdGFnZXNcbiAqIGRlcGxveSB3aGVyZSwgYW5kIHdoZXRoZXIgdGhlIHBpcGVsaW5lIGFzc3VtZXMgYSBjYWxsZXItc3VwcGxpZWQgSUFNIHJvbGUuXG4gKi9cbmZ1bmN0aW9uIHByaW50UHJldmlldyhwcmV2aWV3OiBTdHJ1Y3R1cmVQcmV2aWV3KTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gV2hhdCBUaGlzIFdvdWxkIEJ1aWxkJyk7XG4gIGlmIChwcmV2aWV3LnN0YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHN0YWdlcyBkZWNsYXJlZCDigJQgdGhpcyBwaXBlbGluZSB3b3VsZCBidWlsZCBub3RoaW5nLicpO1xuICB9XG4gIGZvciAoY29uc3QgW2ksIHN0YWdlXSBvZiBwcmV2aWV3LnN0YWdlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZXBsb3kgPSBzdGFnZS5lbnZpcm9ubWVudCA/IGAgJHtjeWFuKGDihpIgZGVwbG95cyB0byAke3N0YWdlLmVudmlyb25tZW50fWApfWAgOiAnJztcbiAgICBjb25zb2xlLmxvZyhgICAke2JvbGQoYCR7aSArIDF9LiAke3N0YWdlLnN0YWdlTmFtZX1gKX0gJHtkaW0oYCgke3N0YWdlLmNvZGVQaXBlbGluZVN0YWdlfSlgKX0ke2RlcGxveX1gKTtcbiAgICBpZiAoc3RhZ2Uuc3RlcHMubGVuZ3RoID09PSAwKSBjb25zb2xlLmxvZyhgICAgICAke2RpbSgnKG5vIHN0ZXBzKScpfWApO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGFnZS5zdGVwcykge1xuICAgICAgLy8gYGxhdGVzdGAgaXMgY2FsbGVkIG91dCBiZWNhdXNlIGFuIHVucGlubmVkIHBsdWdpbiByZXNvbHZlcyB0byB3aGF0ZXZlciBpc1xuICAgICAgLy8gbmV3ZXN0IGF0IHN5bnRoIOKAlCB0aGUgZGlmZmVyZW5jZSBhIHJldmlld2VyIG1vc3QgbmVlZHMgdG8gc2VlLlxuICAgICAgY29uc3QgdmVyc2lvbiA9IHN0ZXAudmVyc2lvbiA9PT0gJ2xhdGVzdCcgPyBgJHtzdGVwLnZlcnNpb259ICh1bnBpbm5lZClgIDogc3RlcC52ZXJzaW9uO1xuICAgICAgY29uc29sZS5sb2coYCAgICAgJHtkaW0oJ+KAoicpfSAke3N0ZXAucGx1Z2lufUAke3ZlcnNpb259JHtzdGVwLnBvc2l0aW9uID09PSAncG9zdCcgPyBkaW0oJyBbcG9zdF0nKSA6ICcnfWApO1xuICAgIH1cbiAgfVxuICBwcmludEluZm8oJ0lBTScsIHByZXZpZXcuaWFtLmNhbGxlclN1cHBsaWVkXG4gICAgPyB7IHJvbGU6IGAke3ByZXZpZXcuaWFtLnJvbGVUeXBlfSDigJQgY2FsbGVyLXN1cHBsaWVkJHtwcmV2aWV3LmlhbS5yb2xlUmVmID8gYDogJHtwcmV2aWV3LmlhbS5yb2xlUmVmfWAgOiAnJ31gIH1cbiAgICA6IHsgcm9sZTogYCR7cHJldmlldy5pYW0ucm9sZVR5cGV9IChwbGF0Zm9ybS1tYW5hZ2VkKWAgfSk7XG4gIGlmIChwcmV2aWV3LmlhbS5jYWxsZXJTdXBwbGllZCkge1xuICAgIHByaW50V2FybmluZygnVGhpcyBwaXBlbGluZSBhc3N1bWVzIGEgcm9sZSB0aGUgY29uZmlnIG5hbWVzLCBzbyBpdHMgcGVybWlzc2lvbnMgYXJlIHdoYXRldmVyIHRoYXQgcm9sZSBhbHJlYWR5IGhvbGRzLicpO1xuICB9XG59XG5cbi8qKiBQcmludCB3aGF0IGFuIHVwZGF0ZSB3b3VsZCBDSEFOR0UsIGZvciBhIHNsb3QgdGhhdCBpcyBhbHJlYWR5IG9jY3VwaWVkLiAqL1xuZnVuY3Rpb24gcHJpbnREaWZmKGRpZmY6IFN0cnVjdHVyZURpZmYpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBXaGF0IFdvdWxkIENoYW5nZScpO1xuICBpZiAoZGlmZi51bmNoYW5nZWQpIHtcbiAgICBwcmludEluZm8oJ05vIHN0cnVjdHVyYWwgY2hhbmdlIOKAlCBzdGFnZXMsIHBsdWdpbnMgYW5kIElBTSBhcmUgaWRlbnRpY2FsIHRvIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByb3dzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChkaWZmLnN0YWdlc0FkZGVkLmxlbmd0aCkgcm93c1snU3RhZ2VzIGFkZGVkJ10gPSBkaWZmLnN0YWdlc0FkZGVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnN0YWdlc1JlbW92ZWQubGVuZ3RoKSByb3dzWydTdGFnZXMgcmVtb3ZlZCddID0gZGlmZi5zdGFnZXNSZW1vdmVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnN0YWdlc0NoYW5nZWQubGVuZ3RoKSByb3dzWydTdGFnZXMgY2hhbmdlZCddID0gZGlmZi5zdGFnZXNDaGFuZ2VkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnBsdWdpbnNBZGRlZC5sZW5ndGgpIHJvd3NbJ1BsdWdpbnMgYWRkZWQnXSA9IGRpZmYucGx1Z2luc0FkZGVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnBsdWdpbnNSZW1vdmVkLmxlbmd0aCkgcm93c1snUGx1Z2lucyByZW1vdmVkJ10gPSBkaWZmLnBsdWdpbnNSZW1vdmVkLmpvaW4oJywgJyk7XG4gIHByaW50S2V5VmFsdWUocm93cyk7XG4gIGlmIChkaWZmLmlhbUNoYW5nZWQpIHtcbiAgICBwcmludFdhcm5pbmcoYElBTSByb2xlIGNoYW5nZXM6ICR7ZGlmZi5pYW1DaGFuZ2VkLmZyb20ucm9sZVR5cGV9IOKGkiAke2RpZmYuaWFtQ2hhbmdlZC50by5yb2xlVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIGAtLWRyeS1ydW5gOiBhc2sgdGhlIHNlcnZlciB0byBydW4gZXZlcnkgY3JlYXRlLXRpbWUgY2hlY2sgYW5kIHByaW50IHRoZSByZXN1bHQuXG4gKlxuICogVGhpcyB1c2VkIHRvIHByaW50IHRoZSByZXF1ZXN0IGJvZHkgYW5kIGEgZ3JlZW4gXCLinJMgVmFsaWRhdGlvbiBjb21wbGV0ZVwiLCBoYXZpbmdcbiAqIHZhbGlkYXRlZCBub3RoaW5nIHNlcnZlci1zaWRlIOKAlCBzbyBhIGNvbmZpZyB0aGF0IGEgY29tcGxpYW5jZSBydWxlLCBhIHBsdWdpblxuICogY29udHJhY3Qgb3IgYW4gZXhoYXVzdGVkIHF1b3RhIHdvdWxkIHJlamVjdCByZXBvcnRlZCBzdWNjZXNzLiBOb3RoaW5nIGFib3V0IGFcbiAqIHBheWxvYWQgZWNobyBpcyBhIHZhbGlkYXRpb24uXG4gKlxuICogVEhST1dTIHdoZW4gdGhlIGNvbmZpZyBpcyBpbnZhbGlkLCBzbyBgLS1kcnktcnVuYCBleGl0cyBub24temVybyBhbmQgYSBDSSBzdGVwXG4gKiB0aGF0IHJ1bnMgaXQgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIG9uIGEgcHJpbnRlZCBlcnJvci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuRHJ5UnVuKFxuICBvcHRpb25zOiBDcmVhdGVQaXBlbGluZU9wdGlvbnMsXG4gIHBheWxvYWQ6IENyZWF0ZVBpcGVsaW5lUmVxdWVzdCxcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFNlcnZlciBWYWxpZGF0aW9uJyk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1ZhbGlkYXRpbmcgYWdhaW5zdCB0ZW1wbGF0ZXMsIHBsdWdpbiBjb250cmFjdHMsIGNvbXBsaWFuY2UgYW5kIHF1b3RhLi4uJykuc3RhcnQoKTtcbiAgbGV0IHJlcG9ydDogVmFsaWRhdGVSZXBvcnQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnBvc3Q8eyBkYXRhPzogVmFsaWRhdGVSZXBvcnQgfSAmIFZhbGlkYXRlUmVwb3J0PihcbiAgICAgIGAke2NvbmZpZy5hcGkucGlwZWxpbmVVcmx9L3ZhbGlkYXRlYCwgcGF5bG9hZCxcbiAgICApO1xuICAgIHJlcG9ydCA9IChyZXMuZGF0YSA/PyByZXMpIGFzIFZhbGlkYXRlUmVwb3J0O1xuICAgIHNwaW5uZXIuc3RvcCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnVmFsaWRhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkJyk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBpZiAocmVwb3J0Lm5vcm1hbGl6ZWQpIHtcbiAgICBwcmludEluZm8oJ05vcm1hbGl6ZWQgaWRlbnRpdHknLCB7XG4gICAgICBwcm9qZWN0OiByZXBvcnQubm9ybWFsaXplZC5wcm9qZWN0LFxuICAgICAgb3JnYW5pemF0aW9uOiByZXBvcnQubm9ybWFsaXplZC5vcmdhbml6YXRpb24sXG4gICAgICBwaXBlbGluZU5hbWU6IHJlcG9ydC5ub3JtYWxpemVkLnBpcGVsaW5lTmFtZSxcbiAgICAgIHZpc2liaWxpdHk6IHJlcG9ydC5ub3JtYWxpemVkLnZpc2liaWxpdHksXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJlcG9ydC5xdW90YSkge1xuICAgIHByaW50SW5mbygnUGlwZWxpbmUgcXVvdGEnLCByZXBvcnQucXVvdGEudW5saW1pdGVkXG4gICAgICA/IHsgbGltaXQ6ICd1bmxpbWl0ZWQnIH1cbiAgICAgIDogeyB1c2VkOiByZXBvcnQucXVvdGEudXNlZCwgbGltaXQ6IHJlcG9ydC5xdW90YS5saW1pdCwgcmVtYWluaW5nOiByZXBvcnQucXVvdGEucmVtYWluaW5nIH0pO1xuICB9XG4gIC8vIEEgdGFrZW4gc2xvdCBpcyB0aGUgb25lIGRyeS1ydW4gZmluZGluZyB0aGF0IGlzIE5PVCBhIGNvbmZpZyBwcm9ibGVtOiB0aGVcbiAgLy8gY29uZmlnIGlzIHZhbGlkIGFuZCB0aGUgY3JlYXRlIHdvdWxkIHN0aWxsIDQwOSwgYmVjYXVzZSBvbmUgcGlwZWxpbmUgcGVyXG4gIC8vIChwcm9qZWN0LCBvcmdhbml6YXRpb24pIGlzIGEgdW5pcXVlbmVzcyBydWxlLCBub3QgYSB2YWxpZGF0aW9uIHJ1bGUuIFNheWluZyBzb1xuICAvLyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBhc2tpbmcgdGhlIHNlcnZlciDigJQgYSBDSSBkcnktcnVuIHRoYXQgcGFzc2VzIGFuZFxuICAvLyB0aGVuIDQwOXMgb24gdGhlIHJlYWwgY3JlYXRlIGhhcyB0b2xkIG5vYm9keSBhbnl0aGluZy4gVGhlIHNlcnZlcidzIG1lc3NhZ2VcbiAgLy8gbmFtZXMgYD91cHNlcnQ9dHJ1ZWA7IGEgQ0xJIHVzZXIgaGFzIGAtLXVwc2VydGAuXG4gIGlmIChyZXBvcnQuc2xvdD8udGFrZW4pIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHJlcG9ydC5zbG90LnBpcGVsaW5lTmFtZSA/PyByZXBvcnQuc2xvdC5waXBlbGluZUlkID8/ICdhbiBleGlzdGluZyBwaXBlbGluZSc7XG4gICAgaWYgKG9wdGlvbnMudXBzZXJ0KSB7XG4gICAgICBwcmludEluZm8oYFRoaXMgcHJvamVjdC9vcmdhbml6YXRpb24gYWxyZWFkeSBoYXMgJHtleGlzdGluZ30g4oCUIC0tdXBzZXJ0IHdvdWxkIG92ZXJ3cml0ZSBpdGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgIGBUaGlzIHByb2plY3Qvb3JnYW5pemF0aW9uIGFscmVhZHkgaGFzICR7ZXhpc3Rpbmd9LCBzbyBjcmVhdGluZyB3b3VsZCBmYWlsIHdpdGggYSA0MDkuIGBcbiAgICAgICAgKyAnUmUtcnVuIHdpdGggLS11cHNlcnQgdG8gb3ZlcndyaXRlIGl0LCBvciBlZGl0IHRoZSBleGlzdGluZyBvbmUuJyxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcG9ydC5zbG90Py5kZWxldGVkKSB7XG4gICAgcHJpbnRJbmZvKCdBIGRlbGV0ZWQgcGlwZWxpbmUgaG9sZHMgdGhpcyBwcm9qZWN0L29yZ2FuaXphdGlvbiDigJQgY3JlYXRpbmcgd2lsbCByZXVzZSB0aGUgc2xvdCcpO1xuICB9XG4gIGlmIChyZXBvcnQucHJldmlldykgcHJpbnRQcmV2aWV3KHJlcG9ydC5wcmV2aWV3KTtcbiAgaWYgKHJlcG9ydC5kaWZmKSBwcmludERpZmYocmVwb3J0LmRpZmYpO1xuXG4gIGlmIChyZXBvcnQuZGVwbG95cyAmJiByZXBvcnQuZGVwbG95cy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRJbmZvKCdET1JBIGRlcGxveSBhdHRyaWJ1dGlvbicsIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIHJlcG9ydC5kZXBsb3lzLm1hcCgoZCkgPT4gW2Quc3RhZ2UsIGAke2QuZW52aXJvbm1lbnR9JHtkLmluZmVycmVkID8gJyAoaW5mZXJyZWQpJyA6ICcnfWBdKSxcbiAgICApKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHN0YWdlIGRlY2xhcmVzIGFuIGVudmlyb25tZW50IOKAlCB0aGlzIHBpcGVsaW5lIHByb2R1Y2VzIG5vIERPUkEgZGVwbG95IHNpZ25hbC4nKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdyBvZiByZXBvcnQud2FybmluZ3MgPz8gW10pIHByaW50V2FybmluZyhgWyR7dy5zdGFnZX1dICR7dy5tZXNzYWdlfWApO1xuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgaWYgKCFyZXBvcnQudmFsaWQpIHtcbiAgICBmb3IgKGNvbnN0IHByb2JsZW0gb2YgcmVwb3J0LnByb2JsZW1zID8/IFtdKSB7XG4gICAgICBwcmludEVycm9yKGBbJHtwcm9ibGVtLnN0YWdlfV0gJHtwcm9ibGVtLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIC8vIE5vbi16ZXJvIGV4aXQ6IGEgZHJ5IHJ1biB0aGF0IGZvdW5kIHJlYWwgcHJvYmxlbXMgbXVzdCBiZSBSRUQuIFByaW50aW5nIHRoZW1cbiAgICAvLyBhbmQgcmV0dXJuaW5nIDAgaXMgaG93IGEgYnJva2VuIGNvbmZpZyByZWFjaGVzIGEgcGlwZWxpbmUuXG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBQaXBlbGluZSBjb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCAoJHtyZXBvcnQucHJvYmxlbXM/Lmxlbmd0aCA/PyAwfSBwcm9ibGVtKHMpKSDigJQgbm90aGluZyB3YXMgY3JlYXRlZGAsXG4gICAgICAncHJvcHMnLFxuICAgICk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ+KckyBDb25maWd1cmF0aW9uIGlzIHZhbGlkIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgIHByaW50SW5mbygnV2l0aCAtLWRlcGxveSwgdGhlIHBpcGVsaW5lIHdvdWxkIGJlIGRlcGxveWVkIHZpYSBDREsgYWZ0ZXIgY3JlYXRpb24nLCB7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgJyhkZWZhdWx0KScsXG4gICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8ICcoZGVmYXVsdCknLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICB9KTtcbiAgfVxuICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xufVxuXG4vKiogUHJpbnQgdGhlIGNyZWF0ZWQgcGlwZWxpbmUgYW5kIHNhdmUgaXQgdG8gYC4vb3V0cHV0L3BpcGVsaW5lLTxpZD4uanNvbmAuICovXG5mdW5jdGlvbiByZXBvcnRDcmVhdGVkUGlwZWxpbmUocGlwZWxpbmU6IFBpcGVsaW5lLCBleGVjdXRpb25JZDogc3RyaW5nLCByZXF1ZXN0RHVyYXRpb246IG51bWJlciwgc3RhcnRUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ+KckyBQaXBlbGluZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgJ1Zpc2liaWxpdHknOiBwaXBlbGluZS52aXNpYmlsaXR5IHx8ICdvcmcnLFxuICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAnUHJvcGVydGllcyc6IHBpcGVsaW5lLnByb3BzID8gYCR7T2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aH0ga2V5c2AgOiAnKG5vdCByZXR1cm5lZCknLFxuICB9KTtcblxuICBpZiAocGlwZWxpbmUuY3JlYXRlZEF0KSB7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50S2V5VmFsdWUoeyAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCB9KTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICdSZXF1ZXN0IER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24ocmVxdWVzdER1cmF0aW9uKSxcbiAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gJy4vb3V0cHV0JztcbiAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dERpcik7XG4gIGNvbnN0IG91dHB1dEZpbGUgPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBgcGlwZWxpbmUtJHtwaXBlbGluZS5pZH0uanNvbmApO1xuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHBpcGVsaW5lLCBudWxsLCAyKSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGRldGFpbHMgc2F2ZWQgdG8gZmlsZScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnT3V0cHV0IEZpbGUnOiBvdXRwdXRGaWxlLFxuICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmcy5zdGF0U3luYyhvdXRwdXRGaWxlKS5zaXplKSxcbiAgfSk7XG59XG5cbi8qKlxuICogYC0tZGVwbG95YDogcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk4gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3lcbiAqIC0taWRgLiBUaGUgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlOiBpZiB0aGUgZGVwbG95IGZhaWxzIGl0XG4gKiBpcyBLRVBUIGFuZCB0aGUgZXhhY3QgcmV0cnkgaXMgc3VyZmFjZWQgcmF0aGVyIHRoYW4gcm9sbGVkIGJhY2sgKG5ldmVyXG4gKiBmYWxzZS1ncmVlbikuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNyZWF0ZWRQaXBlbGluZShcbiAgb3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgdHJ5IHtcbiAgICAvLyBEZXBsb3kgdG91Y2hlcyB0aGUgQVdTIFNESyArIHRoZSBDREsgc3ludGggc3VicHJvY2VzczsgcmVsYXggVExTIHRoZVxuICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG4gICAgLy8gVGhlIGFzeW5jIGNsaWVudCBhZGRzIC0tc3RvcmUtdG9rZW5zIChTZWNyZXRzIE1hbmFnZXIpIHN1cHBvcnQgYW5kXG4gICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICBjb25zdCBkZXBsb3lDbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgY29uc3QgZGVwbG95Q29uZmlnID0gZGVwbG95Q2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgIC8vIHJlZ2lzdHJ5IGhvc3QgaXMgYmFrZWQgRVhBQ1RMWSBhcyBgZGVwbG95IC0taWRgIGRvZXMg4oCUIG5vIGRyaWZ0LlxuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMoZGVwbG95Q2xpZW50LCBwaXBlbGluZUlkKTtcbiAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICBwcm9wc1dpdGhJZHM6IGZldGNoZWQucHJvcHNXaXRoSWRzLFxuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgZGVidWcsXG4gICAgICBleGVjdXRpb25JZCxcbiAgICAgIHBsYXRmb3JtQ2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICBwbGF0Zm9ybVBpcGVsaW5lVXJsOiBkZXBsb3lDb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGRlcGxveUVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZGVwbG95RXJyb3IpLFxuICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmVJZH1gLFxuICAgIH0pO1xuICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAvLyByZXRhaW5lZCDigJQgcmUtcnVuIHRoZSBkZXBsb3kgd2l0aCB0aGUgY29tbWFuZCBhYm92ZS5cbiAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLXZpc2liaWxpdHkgPHJ1bmc+JywgJ1NoYXJpbmcgcnVuZyAocHJpdmF0ZXxvcmd8cHVibGljKS4gUGlwZWxpbmVzIGRlZmF1bHQgdG8gb3JnIOKAlCBhIHRlYW0gYXNzZXQgaXMgdmlzaWJsZSB0byB0aGUgdGVhbS4nLCAnb3JnJylcbiAgICAgICAgLy8gTm8gYC0tZGVmYXVsdGA6IGBwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWVgIGFsbG93cyBvbmUgcGlwZWxpbmUgcGVyXG4gICAgICAgIC8vIChwcm9qZWN0LCBvcmdhbml6YXRpb24sIG9yZyksIHNvIHRoZSBjcmVhdGVkIHJvdyBJUyBpdHMgc2xvdCdzIGRlZmF1bHQuXG4gICAgICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgICAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdDcmVhdGUgdGhlIHBpcGVsaW5lIGFzIGluYWN0aXZlJylcbiAgICAgICAgLm9wdGlvbignLS11cHNlcnQnLCAnT3ZlcndyaXRlIGFuIGV4aXN0aW5nIHBpcGVsaW5lIGZvciB0aGUgc2FtZSBwcm9qZWN0L29yZ2FuaXphdGlvbiAob3RoZXJ3aXNlIGEgdGFrZW4gc2xvdCBpcyBhIDQwOSknLCBmYWxzZSlcbiAgICAgICAgLy8gLS1kZXBsb3k6IGFmdGVyIGNyZWF0aW5nIHRoZSByZWNvcmQsIHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOXG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95IC0taWRgIChzaGFyZWQgcnVuRGVwbG95KS4gVGhlIGZsYWdzXG4gICAgICAgIC8vIGJlbG93IGFwcGx5IG9ubHkgd2l0aCAtLWRlcGxveS5cbiAgICAgICAgLm9wdGlvbignLS1kZXBsb3knLCAnRGVwbG95IHRoZSBwaXBlbGluZSB3aXRoIEFXUyBDREsgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgaXQnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLiAod2l0aCAtLWRlcGxveSknLCAnYnJvYWRlbmluZycpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5ICh3aXRoIC0tZGVwbG95KScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnRGVwbG95IGF1dGggdmlhIEFXUyBTZWNyZXRzIE1hbmFnZXIgdG9rZW4gKHdpdGggLS1kZXBsb3k7IHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FKScsIGZhbHNlKSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdWYWxpZGF0ZSBpbnB1dHMgd2l0aG91dCBjcmVhdGluZyBwaXBlbGluZScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NyZWF0ZSBQaXBlbGluZScsICdDcmVhdGluZyBQaXBlbGluZScpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBEaXNwbGF5IHBhcmFtZXRlcnNcbiAgICAgICAgcHJpbnRJbmZvKCdDb25maWd1cmF0aW9uJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQcm9qZWN0Jzogb3B0aW9ucy5wcm9qZWN0IHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IG9wdGlvbnMub3JnYW5pemF0aW9uIHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ05hbWUnOiBvcHRpb25zLm5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICAgJ1Zpc2liaWxpdHknOiBvcHRpb25zLnZpc2liaWxpdHksXG4gICAgICAgICAgJ0FjdGl2ZSc6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdPdmVyd3JpdGUgRXhpc3RpbmcnOiBvcHRpb25zLnVwc2VydCA/ICdZZXMgKC0tdXBzZXJ0KScgOiAnTm8nLFxuICAgICAgICAgICdEZXBsb3kgQWZ0ZXIgQ3JlYXRlJzogb3B0aW9ucy5kZXBsb3kgPyBgWWVzIChwcm9maWxlOiAke29wdGlvbnMucHJvZmlsZSB8fCAnZGVmYXVsdCd9KWAgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzIEZpbGUnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ1NTTCBWZXJpZmljYXRpb24nOiBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyAnRGlzYWJsZWQnIDogJ0VuYWJsZWQnLFxuICAgICAgICAgICdEcnkgUnVuJzogb3B0aW9ucy5kcnlSdW4gPyAnWWVzJyA6ICdObycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHJlYWRQcm9wc0ZpbGUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkQ3JlYXRlUGF5bG9hZChvcHRpb25zLCBwcm9wcyk7XG5cbiAgICAgICAgLy8gQ3JlYXRlZCBiZWZvcmUgdGhlIGRyeS1ydW4gYnJhbmNoOiAtLWRyeS1ydW4gbm93IGNhbGxzIHRoZSBzZXJ2ZXIsIHNvIGl0XG4gICAgICAgIC8vIG5lZWRzIHRoZSBzYW1lIGF1dGhlbnRpY2F0ZWQgY2xpZW50IHRoZSBjcmVhdGUgZG9lcy5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGF3YWl0IHJ1bkRyeVJ1bihvcHRpb25zLCBwYXlsb2FkLCBjbGllbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQ3JlYXRpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDcmVhdGluZyBwaXBlbGluZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCByYXdSZXNwb25zZTogUGlwZWxpbmVSZXNwb25zZTtcbiAgICAgICAgbGV0IHJlcXVlc3REdXJhdGlvbjogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgcmF3UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0ID8gYCR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0/dXBzZXJ0PXRydWVgIDogY29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXF1ZXN0RHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0O1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChvcHRpb25zLnVwc2VydCA/ICdQaXBlbGluZSBjcmVhdGVkIG9yIHVwZGF0ZWQnIDogJ1BpcGVsaW5lIGNyZWF0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIC8vIEEgNDA5IG1lYW5zIHRoZSAocHJvamVjdCwgb3JnYW5pemF0aW9uKSBzbG90IGlzIHRha2VuLiBUaGUgc2VydmVyJ3NcbiAgICAgICAgICAvLyBtZXNzYWdlIG5hbWVzIGA/dXBzZXJ0PXRydWVgOyB0cmFuc2xhdGUgaXQgdG8gdGhlIGZsYWcgYSBDTEkgdXNlciBoYXMuXG4gICAgICAgICAgaWYgKGNvbmZsaWN0U3RhdHVzKGVycm9yKSAmJiAhb3B0aW9ucy51cHNlcnQpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnVGhhdCBwcm9qZWN0L29yZ2FuaXphdGlvbiBhbHJlYWR5IGhhcyBhIHBpcGVsaW5lLiBSZS1ydW4gd2l0aCAtLXVwc2VydCB0byBvdmVyd3JpdGUgaXQsIG9yIGVkaXQgdGhlIGV4aXN0aW5nIG9uZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmF3UmVzcG9uc2UsICdwaXBlbGluZScsICdpZCcpO1xuXG4gICAgICAgIGlmICghcGlwZWxpbmU/LmlkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwaXBlbGluZSByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCAtIG5vIHZhbGlkIHBpcGVsaW5lIGRhdGEgcmVjZWl2ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydENyZWF0ZWRQaXBlbGluZShwaXBlbGluZSwgZXhlY3V0aW9uSWQsIHJlcXVlc3REdXJhdGlvbiwgc3RhcnRUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBhd2FpdCBkZXBsb3lDcmVhdGVkUGlwZWxpbmUob3B0aW9ucywgcGlwZWxpbmUuaWQsIGV4ZWN1dGlvbklkLCBwcm9ncmFtLm9wdHMoKS5kZWJ1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdOZXh0IFN0ZXBzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRpbSgnWW91IGNhbiBub3c6JykpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gRGVwbG95OiAke2JvbGQoYGRlcGxveSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gVmlldzogJHtib2xkKGBnZXQtcGlwZWxpbmUgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBBUEk6ICR7Y29uZmlnLmFwaS5iYXNlVXJsfSR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0vJHtwaXBlbGluZS5pZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnY3JlYXRlLXBpcGVsaW5lJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufSJdfQ==
@@ -29,7 +29,7 @@ export function deploy(program) {
29
29
  .description('Deploy pipeline by ID using AWS CDK, or --local-spec to deploy a local pipeline.json without the platform')
30
30
  .option('-i, --id <id>', 'Pipeline ID (fetches config from the platform)')
31
31
  .option('--local-spec <path>', 'Path to a local pipeline.json — deploys without contacting the platform (no auth, no compliance, no plugin lookup)'))
32
- .option('--require-approval <approval>', 'Approval level: never|any-change|broadening', 'never')
32
+ .option('--require-approval <approval>', 'Deploy approval level: never|any-change|broadening. Defaults to `broadening`: a deploy that widens IAM stops for confirmation. Pass `never` for unattended runs.', 'broadening')
33
33
  .option('--output <dir>', 'CDK output directory', 'cdk.out')
34
34
  .option('--store-tokens', 'Authenticate using token from AWS Secrets Manager (requires PLATFORM_SECRET_NAME env var)', false)))
35
35
  .option('--show-resolved', 'Print the resolved pipeline config (with {{ ... }} templates expanded) and exit without deploying', false)
@@ -154,4 +154,4 @@ export function deploy(program) {
154
154
  }
155
155
  });
156
156
  }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUE0QyxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFBaUIsQ0FBQyxPQUFPO1NBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDJHQUEyRyxDQUFDO1NBQ3hILE1BQU0sQ0FBQyxlQUFlLEVBQUUsZ0RBQWdELENBQUM7U0FDekUsTUFBTSxD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SUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzLCBwcmludFJlc29sdmVkT3JFeGl0IH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCknKSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnQXBwcm92YWwgbGV2ZWw6IG5ldmVyfGFueS1jaGFuZ2V8YnJvYWRlbmluZycsICduZXZlcicpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5JywgJ2Nkay5vdXQnKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdBdXRoZW50aWNhdGUgdXNpbmcgdG9rZW4gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyIChyZXF1aXJlcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyKScsIGZhbHNlKSxcbiAgICApLFxuICApXG4gICAgLm9wdGlvbignLS1zaG93LXJlc29sdmVkJywgJ1ByaW50IHRoZSByZXNvbHZlZCBwaXBlbGluZSBjb25maWcgKHdpdGgge3sgLi4uIH19IHRlbXBsYXRlcyBleHBhbmRlZCkgYW5kIGV4aXQgd2l0aG91dCBkZXBsb3lpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUGlwZWxpbmUgRGVwbG95Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSBpbnB1dCBzb3VyY2VzIOKAlCB2YWxpZGF0ZWQgSU5TSURFIHRoZSB0cnkgc28gZmFpbHVyZXMgcm91dGVcbiAgICAgICAgLy8gdGhyb3VnaCBoYW5kbGVFcnJvciAoY29uc2lzdGVudCBleGl0IGNvZGUvZm9ybWF0KSBsaWtlIGV2ZXJ5IG90aGVyIGNvbW1hbmQuXG4gICAgICAgIGlmICghb3B0aW9ucy5pZCAmJiAhb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciAtLWlkIDxwaXBlbGluZS1pZD4gb3IgLS1sb2NhbC1zcGVjIDxwYXRoPiBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmlkICYmIG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLWlkIGFuZCAtLWxvY2FsLXNwZWMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXVkaXRMb2coJ2RlcGxveScsIHsgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQsIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcblxuICAgICAgICBwcmludEluZm8oJ0RlcGxveW1lbnQgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBpZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICBhd3NQcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gcHJvY2Vzcy5lbnYgc28gQ0RLIGNvbnN0cnVjdHMgKExhbWJkYSwgQ29kZUJ1aWxkKSBpbmhlcml0IGl0LFxuICAgICAgICAvLyBidXQgcmVmdXNlIGluIHByb2R1Y3Rpb24gKHNlZSByZWxheFRsc0ZvckNsaSkg4oCUIHRoZSBmbGFnIGRpc2FibGVzIGNlcnRcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgQUxMIG91dGJvdW5kIFRMUywgaW5jbHVkaW5nIHRoZSBBV1MgU0RLLlxuICAgICAgICByZWxheFRsc0ZvckNsaShvcHRpb25zLnZlcmlmeVNzbCwgcHJpbnRXYXJuaW5nKTtcblxuICAgICAgICAvLyBMb2NhbC10b29sIHByZXJlcXVpc2l0ZXMgKGNkayArIGVzYnVpbGQvcG5wbSkgYXJlIHZlcmlmaWVkIHVwIGZyb250IGJ5XG4gICAgICAgIC8vIHRoZSBDTEkncyBwcmVBY3Rpb24gaG9vaywgc28gYnkgaGVyZSB0aGV5J3JlIGd1YXJhbnRlZWQgcHJlc2VudC5cblxuICAgICAgICBsZXQgcGlwZWxpbmU6IFBpcGVsaW5lO1xuICAgICAgICBsZXQgcHJvcHNXaXRoSWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gUmVtb3RlLW1vZGUgcmVnaXN0cnktcG9zdCBoYW5kbGVzIOKAlCBudWxsIGluIC0tbG9jYWwtc3BlYyBtb2RlLlxuICAgICAgICBsZXQgcGxhdGZvcm1DbGllbnQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jPj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwbGF0Zm9ybUNvbmZpZzogUGxhdGZvcm1EZXBsb3lDb25maWcgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgLy8gLS1sb2NhbC1zcGVjOiByZWFkIHBpcGVsaW5lLmpzb24gZnJvbSBkaXNrOyBubyBwbGF0Zm9ybSBjb250YWN0LlxuICAgICAgICAgIC8vIENvbXBsaWFuY2UgLyBxdW90YSAvIHBsdWdpbi1sb29rdXAgZmVhdHVyZXMgYWxsIHJlcXVpcmUgdGhlIHBsYXRmb3JtIOKAlFxuICAgICAgICAgIC8vIHRoaXMgbW9kZSBpcyBmb3IgYWlyLWdhcHBlZCBvciBzaW1wbGUgc3RhbmRhbG9uZSBDREsgZGVwbG95bWVudHMuXG4gICAgICAgICAgY29uc3QgYWJzUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmxvY2FsU3BlYyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdMb2FkaW5nIGxvY2FsIHBpcGVsaW5lIHNwZWMnLCB7IHBhdGg6IGFic1BhdGggfSk7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIHNwZWMgZmlsZSBub3QgZm91bmQ6ICR7YWJzUGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGFic1BhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBQYXJ0aWFsPFBpcGVsaW5lPiAmIHsgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICAgICAgICAgIGlmICghcGFyc2VkLnByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIHNwZWMgZmlsZSBpcyBtaXNzaW5nIHJlcXVpcmVkICdwcm9wcycgZmllbGQ6ICR7YWJzUGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGlwZWxpbmUgPSB7XG4gICAgICAgICAgICBpZDogcGFyc2VkLmlkID8/ICdsb2NhbCcsXG4gICAgICAgICAgICBwcm9qZWN0OiBwYXJzZWQucHJvamVjdCA/PyAnbG9jYWwtcHJvamVjdCcsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IHBhcnNlZC5vcmdhbml6YXRpb24gPz8gJ2xvY2FsLW9yZycsXG4gICAgICAgICAgICBvcmdJZDogcGFyc2VkLm9yZ0lkLFxuICAgICAgICAgICAgaXNEZWZhdWx0OiBwYXJzZWQuaXNEZWZhdWx0ID8/IGZhbHNlLFxuICAgICAgICAgICAgaXNBY3RpdmU6IHBhcnNlZC5pc0FjdGl2ZSA/PyB0cnVlLFxuICAgICAgICAgICAgcHJvcHM6IHBhcnNlZC5wcm9wcyxcbiAgICAgICAgICB9IGFzIFBpcGVsaW5lO1xuICAgICAgICAgIHByaW50U3VjY2VzcygnTG9jYWwgc3BlYyBsb2FkZWQnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIFNvdXJjZTogYWJzUGF0aCxcbiAgICAgICAgICAgIFByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSB7XG4gICAgICAgICAgICAuLi5waXBlbGluZS5wcm9wcyxcbiAgICAgICAgICAgIC4uLihwaXBlbGluZS5vcmdJZCAmJiB7IG9yZ0lkOiBwaXBlbGluZS5vcmdJZCB9KSxcbiAgICAgICAgICAgIHBpcGVsaW5lSWQ6IHBpcGVsaW5lLmlkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVtb3RlIHBhdGg6IGZldGNoIGNvbmZpZyBmcm9tIHBsYXRmb3JtIEFQSS4gZmV0Y2hQaXBlbGluZVByb3BzIGRvZXNcbiAgICAgICAgICAvLyB0aGUgZmV0Y2ggKyBwbHVnaW4gcHJlLXJlc29sdXRpb24gKyByZWdpc3RyeSBwdWxsLWhvc3QgYmFrZSDigJQgc2hhcmVkXG4gICAgICAgICAgLy8gdmVyYmF0aW0gd2l0aCBgc3ludGhgIHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgICAgcGxhdGZvcm1DbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgcGxhdGZvcm1Db25maWcgPSBwbGF0Zm9ybUNsaWVudC5nZXRDb25maWcoKSBhcyBQbGF0Zm9ybURlcGxveUNvbmZpZztcblxuICAgICAgICAgIHByaW50SW5mbygnRmV0Y2hpbmcgcGlwZWxpbmUgY29uZmlndXJhdGlvbicsIHsgaWQ6IG9wdGlvbnMuaWQgfSk7XG4gICAgICAgICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGZldGNoUGlwZWxpbmVQcm9wcyhwbGF0Zm9ybUNsaWVudCwgb3B0aW9ucy5pZCk7XG4gICAgICAgICAgcGlwZWxpbmUgPSBmZXRjaGVkLnBpcGVsaW5lO1xuICAgICAgICAgIHByb3BzV2l0aElkcyA9IGZldGNoZWQucHJvcHNXaXRoSWRzO1xuXG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBjb25maWd1cmF0aW9uIHJldHJpZXZlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0lEJzogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgICAnUHJvamVjdCc6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgJ0lzIERlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQsXG4gICAgICAgICAgICAnSXMgQWN0aXZlJzogcGlwZWxpbmUuaXNBY3RpdmUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLXNob3ctcmVzb2x2ZWQ6IHByaW50IHJlc29sdmVkIGNvbmZpZyBhbmQgZXhpdCAobm8gQ0RLIGRlcGxveSlcbiAgICAgICAgaWYgKChvcHRpb25zIGFzIHsgc2hvd1Jlc29sdmVkPzogYm9vbGVhbiB9KS5zaG93UmVzb2x2ZWQpIHtcbiAgICAgICAgICBhd2FpdCBwcmludFJlc29sdmVkT3JFeGl0KHByb3BzV2l0aElkcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcHMgNeKAkzkgKGVuY29kZSBwcm9wcyDihpIgY2RrIGRlcGxveSDihpIgcmVnaXN0ZXIgQVJOKSBhcmUgc2hhcmVkIHdpdGhcbiAgICAgICAgLy8gYHBpcGVsaW5lIGNyZWF0ZSAtLWRlcGxveWAgdmlhIHJ1bkRlcGxveSBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgICAgIHBpcGVsaW5lLFxuICAgICAgICAgIHByb3BzV2l0aElkcyxcbiAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50LFxuICAgICAgICAgIHBsYXRmb3JtUGlwZWxpbmVVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkucGlwZWxpbmVVcmwsXG4gICAgICAgICAgcGxhdGZvcm1CYXNlVXJsOiBwbGF0Zm9ybUNvbmZpZz8uYXBpLmJhc2VVcmwsXG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnZGVwbG95JyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUE0QyxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFBaUIsQ0FBQyxPQUFPO1NBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDJHQUEyRyxDQUFDO1NBQ3hILE1BQU0sQ0FBQyxlQUFlLEVBQUUsZ0RBQWdELENBQUM7U0FDekUsTUFBTSxD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SUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzLCBwcmludFJlc29sdmVkT3JFeGl0IH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCknKSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLicsICdicm9hZGVuaW5nJylcbiAgICAgICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnknLCAnY2RrLm91dCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpLFxuICAgICksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IGRlcGxveWluZycsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQaXBlbGluZSBEZXBsb3knKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gTXV0dWFsbHkgZXhjbHVzaXZlIGlucHV0IHNvdXJjZXMg4oCUIHZhbGlkYXRlZCBJTlNJREUgdGhlIHRyeSBzbyBmYWlsdXJlcyByb3V0ZVxuICAgICAgICAvLyB0aHJvdWdoIGhhbmRsZUVycm9yIChjb25zaXN0ZW50IGV4aXQgY29kZS9mb3JtYXQpIGxpa2UgZXZlcnkgb3RoZXIgY29tbWFuZC5cbiAgICAgICAgaWYgKCFvcHRpb25zLmlkICYmICFvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIC0taWQgPHBpcGVsaW5lLWlkPiBvciAtLWxvY2FsLXNwZWMgPHBhdGg+IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaWQgJiYgb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0taWQgYW5kIC0tbG9jYWwtc3BlYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdWRpdExvZygnZGVwbG95JywgeyBleGVjdXRpb25JZCwgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuXG4gICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgIGF3c1Byb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBwcm9jZXNzLmVudiBzbyBDREsgY29uc3RydWN0cyAoTGFtYmRhLCBDb2RlQnVpbGQpIGluaGVyaXQgaXQsXG4gICAgICAgIC8vIGJ1dCByZWZ1c2UgaW4gcHJvZHVjdGlvbiAoc2VlIHJlbGF4VGxzRm9yQ2xpKSDigJQgdGhlIGZsYWcgZGlzYWJsZXMgY2VydFxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBBTEwgb3V0Ym91bmQgVExTLCBpbmNsdWRpbmcgdGhlIEFXUyBTREsuXG4gICAgICAgIHJlbGF4VGxzRm9yQ2xpKG9wdGlvbnMudmVyaWZ5U3NsLCBwcmludFdhcm5pbmcpO1xuXG4gICAgICAgIC8vIExvY2FsLXRvb2wgcHJlcmVxdWlzaXRlcyAoY2RrICsgZXNidWlsZC9wbnBtKSBhcmUgdmVyaWZpZWQgdXAgZnJvbnQgYnlcbiAgICAgICAgLy8gdGhlIENMSSdzIHByZUFjdGlvbiBob29rLCBzbyBieSBoZXJlIHRoZXkncmUgZ3VhcmFudGVlZCBwcmVzZW50LlxuXG4gICAgICAgIGxldCBwaXBlbGluZTogUGlwZWxpbmU7XG4gICAgICAgIGxldCBwcm9wc1dpdGhJZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAvLyBSZW1vdGUtbW9kZSByZWdpc3RyeS1wb3N0IGhhbmRsZXMg4oCUIG51bGwgaW4gLS1sb2NhbC1zcGVjIG1vZGUuXG4gICAgICAgIGxldCBwbGF0Zm9ybUNsaWVudDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmM+PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybURlcGxveUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICAvLyAtLWxvY2FsLXNwZWM6IHJlYWQgcGlwZWxpbmUuanNvbiBmcm9tIGRpc2s7IG5vIHBsYXRmb3JtIGNvbnRhY3QuXG4gICAgICAgICAgLy8gQ29tcGxpYW5jZSAvIHF1b3RhIC8gcGx1Z2luLWxvb2t1cCBmZWF0dXJlcyBhbGwgcmVxdWlyZSB0aGUgcGxhdGZvcm0g4oCUXG4gICAgICAgICAgLy8gdGhpcyBtb2RlIGlzIGZvciBhaXItZ2FwcGVkIG9yIHNpbXBsZSBzdGFuZGFsb25lIENESyBkZXBsb3ltZW50cy5cbiAgICAgICAgICBjb25zdCBhYnNQYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMubG9jYWxTcGVjKTtcbiAgICAgICAgICBwcmludEluZm8oJ0xvYWRpbmcgbG9jYWwgcGlwZWxpbmUgc3BlYycsIHsgcGF0aDogYWJzUGF0aCB9KTtcbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIG5vdCBmb3VuZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoYWJzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIFBhcnRpYWw8UGlwZWxpbmU+ICYgeyBwcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gICAgICAgICAgaWYgKCFwYXJzZWQucHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3Byb3BzJyBmaWVsZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwaXBlbGluZSA9IHtcbiAgICAgICAgICAgIGlkOiBwYXJzZWQuaWQgPz8gJ2xvY2FsJyxcbiAgICAgICAgICAgIHByb2plY3Q6IHBhcnNlZC5wcm9qZWN0ID8/ICdsb2NhbC1wcm9qZWN0JyxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogcGFyc2VkLm9yZ2FuaXphdGlvbiA/PyAnbG9jYWwtb3JnJyxcbiAgICAgICAgICAgIG9yZ0lkOiBwYXJzZWQub3JnSWQsXG4gICAgICAgICAgICBpc0RlZmF1bHQ6IHBhcnNlZC5pc0RlZmF1bHQgPz8gZmFsc2UsXG4gICAgICAgICAgICBpc0FjdGl2ZTogcGFyc2VkLmlzQWN0aXZlID8/IHRydWUsXG4gICAgICAgICAgICBwcm9wczogcGFyc2VkLnByb3BzLFxuICAgICAgICAgIH0gYXMgUGlwZWxpbmU7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdMb2NhbCBzcGVjIGxvYWRlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgU291cmNlOiBhYnNQYXRoLFxuICAgICAgICAgICAgUHJvamVjdDogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbjogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb3BzV2l0aElkcyA9IHtcbiAgICAgICAgICAgIC4uLnBpcGVsaW5lLnByb3BzLFxuICAgICAgICAgICAgLi4uKHBpcGVsaW5lLm9yZ0lkICYmIHsgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkIH0pLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZW1vdGUgcGF0aDogZmV0Y2ggY29uZmlnIGZyb20gcGxhdGZvcm0gQVBJLiBmZXRjaFBpcGVsaW5lUHJvcHMgZG9lc1xuICAgICAgICAgIC8vIHRoZSBmZXRjaCArIHBsdWdpbiBwcmUtcmVzb2x1dGlvbiArIHJlZ2lzdHJ5IHB1bGwtaG9zdCBiYWtlIOKAlCBzaGFyZWRcbiAgICAgICAgICAvLyB2ZXJiYXRpbSB3aXRoIGBzeW50aGAgc28gdGhlIHR3byBuZXZlciBkcmlmdC5cbiAgICAgICAgICBwbGF0Zm9ybUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBwbGF0Zm9ybUNvbmZpZyA9IHBsYXRmb3JtQ2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuXG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZSBjb25maWd1cmF0aW9uJywgeyBpZDogb3B0aW9ucy5pZCB9KTtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKHBsYXRmb3JtQ2xpZW50LCBvcHRpb25zLmlkKTtcbiAgICAgICAgICBwaXBlbGluZSA9IGZldGNoZWQucGlwZWxpbmU7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0gZmV0Y2hlZC5wcm9wc1dpdGhJZHM7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function report(program: Command): void;
3
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsS7C"}