@pipeline-builder/pipeline-manager 3.4.109 → 3.4.111

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.
@@ -219,8 +219,8 @@ export async function runDeployWithRetry(spec, url, cwd, params, aiOpts, opts) {
219
219
  * from anywhere with kubectl access.) Sets exitCode on a step failure.
220
220
  */
221
221
  export async function runPostSteps(postSteps, skippedSteps, target, cwd, adminEnv, opts) {
222
- // ec2 with `--init auto`: the instance self-runs init-platform on first boot, so there's no
223
- // register/loads step to surface here — confirm it and point at the boot log.
222
+ // AWS targets with `--init auto`: the deploy self-runs init-platform, so there's no
223
+ // register/loads step to surface here — confirm it and point at where to watch.
224
224
  if (opts.autoInit && target === 'ec2') {
225
225
  printInfo('\n✓ Init mode: auto — the instance runs init-platform itself on first boot');
226
226
  printInfo(' (register admin + build bootstrap image + load plugins/compliance/samples).');
@@ -228,6 +228,11 @@ export async function runPostSteps(postSteps, skippedSteps, target, cwd, adminEn
228
228
  printInfo(' aws ssm start-session --target <InstanceId> # InstanceId stack output');
229
229
  printInfo(' sudo tail -f /var/log/user-data.log');
230
230
  }
231
+ else if (opts.autoInit && target === 'eks') {
232
+ printInfo('\n✓ Init mode: auto — setup.sh runs init-platform in its final phase');
233
+ printInfo(' (register admin + build bootstrap image + load plugins/compliance/samples,');
234
+ printInfo(' over a kubectl port-forward). Pass --init manual to run it yourself instead.');
235
+ }
231
236
  if (postSteps.length === 0)
232
237
  return;
233
238
  for (const s of skippedSteps)
@@ -522,10 +527,10 @@ export function provision(program) {
522
527
  emailFromName: options.emailFromName,
523
528
  alertEmail: options.alertEmail,
524
529
  noCreateSesIdentity: options.skipSesIdentity,
525
- // ec2's deploy self-inits on first boot, so we emit the load-bearing `--no-auto-init`
526
- // when the mode is NOT auto (manual/skip = "don't let the instance init itself").
527
- // `--auto-init` (a no-op reaffirm) is never emitted. Only ec2 has these flags in its
528
- // spec; other targets ignore the param.
530
+ // The AWS deploys self-init by default (ec2 on first boot, eks in setup.sh's final
531
+ // phase), so we emit the load-bearing `--no-auto-init` when the mode is NOT auto
532
+ // (manual/skip = "don't let the deploy init itself"). `--auto-init` (a no-op reaffirm)
533
+ // is never emitted. Only ec2/eks carry these flags in their spec; other targets ignore it.
529
534
  noAutoInit: !selfInit,
530
535
  };
531
536
  const aiOpts = { provider: options.aiProvider, model: options.model };
@@ -541,9 +546,9 @@ export function provision(program) {
541
546
  let willPromptLoads = !options.yes && !options.json && Boolean(process.stdin.isTTY) && !anyLoadFlag;
542
547
  const postStepFlags = {
543
548
  init: initEnabled,
544
- // selfInit (mode auto) drops the surfaced register step on ec2 in resolvePostSteps,
545
- // so a self-initializing EC2 deploy doesn't also print a manual register step. For
546
- // manual mode (or any non-ec2 target) the register step is surfaced.
549
+ // selfInit (mode auto) drops the surfaced register step on the AWS targets in
550
+ // resolvePostSteps, so a self-initializing ec2/eks deploy doesn't also print a manual
551
+ // register step. For manual mode (or local/minikube) the register step is surfaced.
547
552
  autoInit: selfInit,
548
553
  buildBootstrap: options.buildBootstrap === true || enabledLoadIds.includes('plugins'),
549
554
  smokeTest: options.withSmokeTest === true,
@@ -622,10 +627,10 @@ export function provision(program) {
622
627
  }
623
628
  else if (selfInit && target === 'eks' && !anyLoadFlag) {
624
629
  // `--init auto` on eks initializes like ec2: NO interactive picker — default to
625
- // loading ALL of plugins + compliance + samples (matching ec2's first-boot
626
- // LOAD_*=y). Unlike ec2, eks runs init via provision over a kubectl port-forward,
627
- // so the loads (and the sparse-clone folders they pull) ARE resolved here. Explicit
628
- // `--with-*` flags override this default; `--init manual` / `--init skip` opt out.
630
+ // loading ALL of plugins + compliance + samples (setup.sh's final phase hardcodes
631
+ // LOAD_*=y). setup.sh runs the loads itself (over a kubectl port-forward), but we
632
+ // still resolve them here so the sparse clone fetches the folders setup.sh builds
633
+ // from. Explicit `--with-*` flags override; `--init manual` / `--init skip` opt out.
629
634
  willPromptLoads = false;
630
635
  enabledLoadIds = LOAD_STEPS.map((s) => s.id);
631
636
  postStepFlags.buildBootstrap = options.buildBootstrap === true || enabledLoadIds.includes('plugins');
@@ -850,4 +855,4 @@ export function provision(program) {
850
855
  }
851
856
  });
852
857
  }
853
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUFxRjtZQUNyRix3RkFBd0Y7WUFDeEYsTUFBTSxZQUFZLEdBQUcsZUFBZSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwLCB0eXBlIEJvb3RzdHJhcFNwZWMgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBleGVjdXRpb25CbG9ja2VkLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBkZXJpdmVIZWFsdGhVcmwsIHdhaXRIZWFsdGh5LCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgY2hlY2tIb3N0UG9ydHMsIGRpc2NvdmVySG9zdFBvcnRzLCBzdGFja1J1bm5pbmcgfSBmcm9tICcuLi9hZ2VudC9wb3J0cy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzLCB0eXBlIFBvc3RTdGVwLCB0eXBlIFNraXBwZWRTdGVwIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdEF2YWlsYWJsZSwgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdGVhcmRvd25Db21tYW5kLFxuICB0eXBlIFRhcmdldElkLFxuICB0eXBlIFRhcmdldFNwZWMsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgVE9PTFNfRElSLCBmZXRjaFRvb2wsIGlzRmV0Y2hhYmxlLCB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdsb2NhbCc7XG4gIC8vIOKAplVOTEVTUyB0aGUgbG9jYWwgc3RhY2sgaXMgYWxyZWFkeSBydW5uaW5nOiB0aG9zZSBwb3J0cyBhcmUgaGVsZCBieSBZT1VSIE9XTlxuICAvLyBzdGFjaywgYW5kIGBkb2NrZXIgY29tcG9zZSB1cGAgbm8tb3BzIHRoZW0g4oCUIHRoaXMgaXMgZXhhY3RseSBob3cgeW91IHJlLXJ1biB0b1xuICAvLyBhZGQgbG9hZHMvb3B0aW9ucy4gRG9uJ3QgYmxvY2sgKHRoZSB3b3VsZC1iZSBjb25mbGljdCBpcyBhIHNlbGYtY29uZmxpY3QpLlxuICBpZiAoZmF0YWwgJiYgc3RhY2tSdW5uaW5nKHRhcmdldCwgY3dkLCBzcGVjKSkge1xuICAgIHByaW50V2FybmluZyhgXFxuJHt0YWtlbi5sZW5ndGh9IHBvcnQocykgYXJlIGhlbGQgYnkgeW91ciBhbHJlYWR5LXJ1bm5pbmcgJHtzcGVjLmxhYmVsfSBzdGFjayDigJQgcmUtcnVubmluZyBqdXN0IHJlc3VtZXMgaXQgKG5vIHJlYWwgY29uZmxpY3QpLCBzbyBjb250aW51aW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGxlYWQgPSBgJHt0YWtlbi5sZW5ndGh9IHJlcXVpcmVkIHBvcnQocykgYWxyZWFkeSBpbiB1c2U6ICR7dGFrZW4ubWFwKChjKSA9PiBjLnBvcnQpLmpvaW4oJywgJyl9YDtcbiAgKGZhdGFsID8gcHJpbnRFcnJvciA6IHByaW50V2FybmluZykoZmF0YWxcbiAgICA/IGBcXG4ke2xlYWR9IOKAlCB0aGUgZGVwbG95IGNhbid0IGJpbmQgdGhlbSBhbmQgd291bGQgZmFpbCBtaWQtd2F5LiBGcmVlIHRoZW0gYW5kIHJlLXJ1bjpgXG4gICAgOiBgXFxuJHtsZWFkfSDigJQgb24gbWluaWt1YmUgdGhlc2UgYXJlIHVzdWFsbHkgYSBwcmV2aW91cyBydW4ncyBwb3J0LWZvcndhcmRzIChzZXR1cC5zaCByZXN0YXJ0cyB0aGVtKS4gRnJlZSBhbnkgTk9OLW1pbmlrdWJlIGhvbGRlciBpZiB0aGUgZ2F0ZXdheSBzdGF5cyB1bnJlYWNoYWJsZTpgKTtcbiAgZm9yIChjb25zdCBjIG9mIHRha2VuKSBwcmludEluZm8oYCAg4oCiIHBvcnQgJHtjLnBvcnR9ICgke2Muc2VydmljZX0pIOKAlCBmaW5kIHRoZSBob2xkZXI6ICBsc29mIC1pIDoke2MucG9ydH1gKTtcbiAgaWYgKHRha2VuLnNvbWUoKGMpID0+IGMucG9ydCA9PT0gNTAwMCkpIHtcbiAgICBwcmludEluZm8oJyAgTm90ZTogb24gbWFjT1MsIHBvcnQgNTAwMCBpcyB1c3VhbGx5IEFpclBsYXkgUmVjZWl2ZXIg4oCUIFN5c3RlbSBTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgQWlyRHJvcCAmIEhhbmRvZmYg4oaSIEFpclBsYXkgUmVjZWl2ZXIgKG9mZikuJyk7XG4gIH1cbiAgcmV0dXJuICFmYXRhbDtcbn1cblxuLyoqXG4gKiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcsIGdhdGVkIEhBUkRFUiB0aGFuIGRlcGxveTpcbiAqIEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHRoZSBvcGVyYXRvciBtdXN0IFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZVxuICogYnlwYXNzZXMgZm9yIENJOyAtLXllcyBhbG9uZSBkb2VzIE5PVCkuIFRlcm1pbmFsOiBvd25zIGl0cyBvdXRwdXQgKyBleGl0Q29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlYXJkb3duKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IGNsdXN0ZXJOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGRvbWFpbj86IHN0cmluZzsgaG9zdGVkWm9uZUlkPzogc3RyaW5nOyBmb3JjZT86IGJvb2xlYW47IHllcz86IGJvb2xlYW47IGpzb24/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb21tYW5kOiBkb3duQ29tbWFuZCwgZGVzdHJ1Y3RpdmUgfSA9IHRlYXJkb3duQ29tbWFuZCh0YXJnZXQsIHtcbiAgICBzdGFja05hbWU6IG9wdHMuc3RhY2tOYW1lLFxuICAgIGNsdXN0ZXJOYW1lOiBvcHRzLmNsdXN0ZXJOYW1lLFxuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24sXG4gICAgLy8gZWtzIHRlYXJkb3duIChiaW4vc2h1dGRvd24uc2gpIGFsc28gY2xlYW5zIHVwIHRoZSBBQ00gY2VydCArIFJvdXRlIDUzIGFsaWFzIGZvclxuICAgIC8vIHRoZSBkb21haW4sIHNvIGZvcndhcmQgdGhlbSB3aGVuIHByZXNlbnQuXG4gICAgZG9tYWluOiBvcHRzLmRvbWFpbixcbiAgICBob3N0ZWRab25lSWQ6IG9wdHMuaG9zdGVkWm9uZUlkLFxuICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGFzc3VtZVllcyBmb3J3YXJkcyBhIG5hdGl2ZSBgLS15ZXNgIHRvIGFueVxuICAgIC8vIHNjcmlwdC1iYXNlZCB0ZWFyZG93biAoZWMyIGRlbGV0ZS1zdGFjayBoYXMgbm8gcHJvbXB0OyBla3Mgc2h1dGRvd24uc2ggc2tpcHMgaXRzIG93bikuXG4gICAgYXNzdW1lWWVzOiB0cnVlLFxuICB9KTtcbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdEZXN0cm95cyc6IHNwZWMuZGVzdHJveXMsICdTdG9wcyBjb3N0Jzogc3BlYy5jb3N0IH0pO1xuICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG4gIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSkge1xuICAgIC8vIEJpbmQgdGhlIGNvbmZpcm1hdGlvbiB0byB0aGUgcmVzb3VyY2UgYWN0dWFsbHkgZGVzdHJveWVkOiBhIGN1c3RvbSBuYW1lIChlYzJcbiAgICAvLyAtLXN0YWNrLW5hbWUgLyBla3MgLS1jbHVzdGVyLW5hbWUpIG11c3QgYmUgdHlwZWQgdmVyYmF0aW0gc28gYSB3cm9uZyBuYW1lIGNhbid0IGJlXG4gICAgLy8gY29uZmlybWVkIGJ5IGhhYml0OyBvdGhlcndpc2UgdGhlIHRhcmdldCBpZC5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSB0YXJnZXQgPT09ICdla3MnID8gb3B0cy5jbHVzdGVyTmFtZSA6IG9wdHMuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbmZpcm1Ub2tlbiA9IHJlc291cmNlTmFtZSA/PyB0YXJnZXQ7XG4gICAgY29uc3Qgbm91biA9IHRhcmdldCA9PT0gJ2VrcycgPyAob3B0cy5jbHVzdGVyTmFtZSA/ICdjbHVzdGVyIG5hbWUnIDogJ3RhcmdldCBpZCcpIDogKG9wdHMuc3RhY2tOYW1lID8gJ3N0YWNrIG5hbWUnIDogJ3RhcmdldCBpZCcpO1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgYXNrKGBcXG5UaGlzIGlzIElSUkVWRVJTSUJMRS4gVHlwZSBcIiR7Y29uZmlybVRva2VufVwiIHRvIGNvbmZpcm0gdGVhcmRvd246IGApO1xuICAgIGlmICh0b2tlbiAhPT0gY29uZmlybVRva2VuKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFRoYXQgZGlkbid0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0ICR7bm91bn0gdG8gY29uZmlybS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWRlc3RydWN0aXZlICYmICFvcHRzLmZvcmNlICYmICEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRlYXJkb3duIChzdG9wcyB0aGUgc3RhY2s7IG9uLWRpc2sgZGF0YSBwZXJzaXN0cyk/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKCdUZWFyaW5nIGRvd24nKTtcbiAgY29uc3QgeyBjb2RlOiBkb3duQ29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGRvd25Db21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gIGlmIChkb3duQ29kZSAhPT0gMCkge1xuICAgIHByaW50RXJyb3IoYFxcblRlYXJkb3duIGZhaWxlZCAoZXhpdCAke2Rvd25Db2RlfSkuIEluc3BlY3QgdGhlIHN0YWNrL2NvbnRhaW5lcnMgYW5kIHJldHJ5LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFN1Y2Nlc3MoJ1RlYXJkb3duIGNvbXBsZXRlLicpO1xufVxuXG4vKipcbiAqIFJ1biB0aGUgZGVwbG95IGNvbW1hbmQgKHJlYWwsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICsgY2FwdHVyZWQpIHdpdGggYVxuICogYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCwgc28gYSBmaXhlZFxuICogcmUtcnVuIHJlc3VtZXMgcmF0aGVyIHRoYW4gc3RhcnRpbmcgb3Zlci4gUmV0dXJucyB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBwbHVzIHRoZVxuICogKHBvc3NpYmx5IGZpeC1hZGp1c3RlZCkgcGFyYW1zLCB3aGljaCB0aGUgY2FsbGVyIG5lZWRzIGZvciBTRVMgZ3VpZGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5EZXBsb3lXaXRoUmV0cnkoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgY3dkOiBzdHJpbmcsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFpT3B0czogeyBwcm92aWRlcj86IHN0cmluZzsgbW9kZWw/OiBzdHJpbmcgfSxcbiAgb3B0czogeyByZXRyaWVzPzogc3RyaW5nOyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgc3VjY2VlZGVkOiBib29sZWFuOyBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+IHtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAxICsgTWF0aC5tYXgoMCwgcGFyc2VJbnQob3B0cy5yZXRyaWVzID8/ICcnLCAxMCkgfHwgMCk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIGVjMiB3aXRoIGAtLWluaXQgYXV0b2A6IHRoZSBpbnN0YW5jZSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSBvbiBmaXJzdCBib290LCBzbyB0aGVyZSdzIG5vXG4gIC8vIHJlZ2lzdGVyL2xvYWRzIHN0ZXAgdG8gc3VyZmFjZSBoZXJlIOKAlCBjb25maXJtIGl0IGFuZCBwb2ludCBhdCB0aGUgYm9vdCBsb2cuXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfVxuICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgcG9zdC1zdGVwICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gIGNvbnN0IGlzUmVtb3RlID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgKGlkID09PSAncmVnaXN0ZXInIHx8IGlkID09PSAnc3RvcmUtdG9rZW4nIHx8IGlkID09PSAnZXZlbnRzJyk7XG4gIGNvbnN0IHJ1bm5hYmxlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gIWlzUmVtb3RlKHMuaWQpKTtcbiAgY29uc3QgcmVtb3RlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gaXNSZW1vdGUocy5pZCkpO1xuICBpZiAocmVtb3RlLmxlbmd0aCA+IDApIHtcbiAgICBpZiAodGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgLy8gRUMyIHJ1bnMgdGhlIHBsYXRmb3JtIGFzIGEgZGVkaWNhdGVkIGBtaW5pa3ViZWAgdXNlciBpbnNpZGUgdGhlIGluc3RhbmNlOiB0aGVcbiAgICAgIC8vIGNsdXN0ZXIsIGl0cyBrdWJlY29uZmlnLCBhbmQgdGhlIGp3dC1zZWNyZXQgYWxsIGJlbG9uZyB0byB0aGF0IHVzZXIsIGFuZCB0aGVcbiAgICAgIC8vIHJlZ2lzdGVyIHN0ZXAgYnVpbGRzK3B1c2hlcyBpbWFnZXMgYWdhaW5zdCBpdC4gU28gaXQgTVVTVCBydW4gb24gdGhlIGJveCBhc1xuICAgICAgLy8gYG1pbmlrdWJlYCDigJQgcHJpbnQgdGhlIGV4YWN0IGxhbmRpbmcgc2VxdWVuY2UgcmF0aGVyIHRoYW4gYSBiYXJlIGNvbW1hbmQuXG4gICAgICBwcmludEluZm8oJ1xcbk5leHQg4oCUIGZpbmlzaCBzZXR1cCBPTiB0aGUgaW5zdGFuY2UgKGl0IGJ1aWxkcyBpbWFnZXMgKyByZWFkcyB0aGUgY2x1c3Rlciwgc28gaXQnKTtcbiAgICAgIHByaW50SW5mbygnY2Fubm90IHJ1biBmcm9tIGhlcmUpLiBMYW5kIG9uIHRoZSBib3gsIGJlY29tZSB0aGUgYG1pbmlrdWJlYCB1c2VyLCB0aGVuIHJ1biBpdDonKTtcbiAgICAgIHByaW50SW5mbygnICBhd3Mgc3NtIHN0YXJ0LXNlc3Npb24gLS10YXJnZXQgPEluc3RhbmNlSWQ+ICAgICAgIyBJbnN0YW5jZUlkIHN0YWNrIG91dHB1dCcpO1xuICAgICAgcHJpbnRJbmZvKCcgIHN1ZG8gLWl1IG1pbmlrdWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG93bnMgdGhlIGNsdXN0ZXIgKyBkb2NrZXInKTtcbiAgICAgIHByaW50SW5mbygnICBjZCAvb3B0L3BpcGVsaW5lL3BpcGVsaW5lLWJ1aWxkZXIgICAgICAgICAgICAgICAgIyB0aGUgZGVwbG95ZWQgY2hlY2tvdXQnKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZWtzOiBpbml0LXBsYXRmb3JtIHBvcnQtZm9yd2FyZHMgdG8gc3ZjL25naW54LCBzbyByZWdpc3RlciBydW5zIGZyb20gYW55d2hlcmUgd2l0aFxuICAgICAgLy8ga3ViZWN0bCBhY2Nlc3Mg4oCUIG5vIGluLVZQQyByZXF1aXJlbWVudCBhbmQgbm8gd2FpdGluZyBvbiB0aGUgQUxCL0ROUy4gKEEgLS13aXRoLWV2ZW50c1xuICAgICAgLy8gYnVuZGxlLCBpZiBwcmVzZW50LCBhZGRpdGlvbmFsbHkgbmVlZHMgQVdTIGNyZWRzICsgYSByZWdpc3RlcmVkIHBsYXRmb3JtLilcbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgcnVuIHdpdGgga3ViZWN0bCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIgKGluIHRoaXMgb3JkZXIpOicpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgIOKAoiAke3MubGFiZWx9IOKAlCAke3MuY29tbWFuZH1gKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJ1bm5hYmxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAvLyBXaGVuIHRoZSBsb2FkcyB3ZXJlIHBpY2tlZCBpbnRlcmFjdGl2ZWx5IChhdXRvUnVuKSwgdGhlIHVzZXIgYWxyZWFkeSBvcHRlZCBpbiDigJQgc2tpcFxuICAvLyB0aGUgcmVkdW5kYW50IHNlY29uZCBjb25maXJtLiBGbGFnLWRyaXZlbiAvIG5vbi1pbnRlcmFjdGl2ZSBydW5zIHN0aWxsIGdhdGUgaGVyZS5cbiAgaWYgKG9wdHMuYXV0b1J1biB8fCBhd2FpdCBjb25maXJtKGBcXG5SdW4gJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIG5vdz9gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICBpZiAob3B0cy5hdXRvUnVuKSBwcmludEluZm8oYFxcblJ1bm5pbmcgdGhlICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSB5b3Ugc2VsZWN0ZWTigKZgKTtcbiAgICBmb3IgKGNvbnN0IHMgb2YgcnVubmFibGUpIHtcbiAgICAgIHByaW50U2VjdGlvbihgUG9zdC1zdGVwOiAke3MubGFiZWx9YCk7XG4gICAgICAvLyByZWdpc3RlciAobG9jYWwvbWluaWt1YmUpIGxvZ3MgaW50byB0aGUgcGxhdGZvcm0sIHNvIGl0IG5lZWRzIHRoZSBhZG1pbiBjcmVkc1xuICAgICAgLy8gKFBMQVRGT1JNX0lERU5USUZJRVIgLyBQTEFURk9STV9QQVNTV09SRCkgb24gdG9wIG9mIGl0cyBzdGVwIGVudi5cbiAgICAgIGNvbnN0IG5lZWRzQ3JlZHMgPSBzLmlkID09PSAncmVnaXN0ZXInIHx8IHMuaWQgPT09ICdzdG9yZS10b2tlbic7XG4gICAgICBjb25zdCBlbnYgPSBuZWVkc0NyZWRzID8geyAuLi5zLmVudiwgLi4uYWRtaW5FbnYgfSA6IHMuZW52O1xuICAgICAgLy8gTG9hZHMvc21va2UgYXJlIG5vaXN5ICsgbm9uLWludGVyYWN0aXZlIOKGkiBydW4gUVVJRVQgKGNhcHR1cmUsIHNob3cgb25seSBvblxuICAgICAgLy8gZmFpbHVyZSkuIEV4Y2VwdGlvbjogYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzIHByb21wdHMsIHNvIGl0IG11c3Qgc3RyZWFtLlxuICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICBjb25zdCBxdWlldCA9ICFpbnRlcmFjdGl2ZVJlZ2lzdGVyO1xuICAgICAgaWYgKHF1aWV0KSBwcmludEluZm8oYCR7cy5jb21tYW5kfVxcbiAg4oCmcnVubmluZyAob3V0cHV0IHNob3duIG9ubHkgaWYgaXQgZmFpbHMpYCk7XG4gICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgcXVpZXQsIGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFyc2UtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gKHdoZW4gLS1yZXBvLCBvciBhY2NlcHRlZCB2aWEgdGhlIGludGVyYWN0aXZlXG4gKiBvZmZlciksIHJlcG9pbnQgY3dkIGludG8gaXQsIGFuZCB2ZXJpZnkgdGhlIGRlcGxveSBlbnRyeXBvaW50IGV4aXN0cy4gT3ducyB0aGVcbiAqIGN3ZC9ib290c3RyYXBwZWQgc3RhdGUuIFNldHMgZXhpdENvZGUgb24gYSBoYXJkIGZhaWx1cmUgKGNsb25lIGVycm9yIC8gbWlzc2luZ1xuICogZW50cnlwb2ludCksIG1hdGNoaW5nIHRoZSBvbGQgaW5saW5lIGJlaGF2aW9yOyBhIHBsYWluIGRlY2xpbmUgbGVhdmVzIGV4aXRDb2RlXG4gKiB1bnRvdWNoZWQuIFJldHVybnMgb2s6ZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgYWJvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBbmRMb2NhdGUoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgYm9vdHN0cmFwQ21kOiBzdHJpbmcgfCBudWxsLFxuICBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHN0YXJ0Q3dkOiBzdHJpbmcsXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IGN3ZDogc3RyaW5nOyBib290c3RyYXBwZWQ6IGJvb2xlYW47IG9rOiBib29sZWFuIH0+IHtcbiAgbGV0IGN3ZCA9IHN0YXJ0Q3dkO1xuICBsZXQgYm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gIC8vIFNoYXJlZCBieSBgLS1yZXBvYCBhbmQgdGhlIGludGVyYWN0aXZlIG9mZmVyLiBSZXBvaW50cyBjd2QgKyBzZXRzIGJvb3RzdHJhcHBlZDtcbiAgLy8gYGJvb3RzdHJhcHBlZGAgcmVjb3JkcyB3aGV0aGVyIHdlIGNyZWF0ZWQgdGhlIGNsb25lICh2cy4gYW4gZXhpc3RpbmcgY2hlY2tvdXQpIOKAlFxuICAvLyBvbmx5IHRoZW4gY2FuIHRoZSBjYWxsZXIgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2ggbG9hZCBmb2xkZXJzLlxuICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICBwcmludEluZm8oY21kKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgYm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICBwcmludFN1Y2Nlc3MoYFJlcG8gaXMgcmVhZHkg4oCUIGNvbnRpbnVpbmcgZnJvbSAke2N3ZH1gKTtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRocy5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgc3BhcnNlIGNsb25lIGlzIG1pc3NpbmcgJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoYXQgcmVmIG1heSBub3QgaGF2ZSB0aG9zZSBmb2xkZXJzLiBUcnkgYSBkaWZmZXJlbnQgLS1yZWYuYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gYC0tcmVwb2A6IGNsb25lIHVwIGZyb250IChtdXN0IHByZWNlZGUgdGhlIGVudHJ5cG9pbnQgY2hlY2spLlxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRJbmZvKGBcXG5Cb290c3RyYXAg4oaSIGNsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IChzcGFyc2UpLmApO1xuICAgIGlmICghKGF3YWl0IGNvbmZpcm0oJ0dvIGFoZWFkIHdpdGggdGhlIGNsb25lPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4gUmUtcnVuIHdoZW5ldmVyIHlvdVxcJ3JlIHJlYWR5LicpO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZCB3ZSBoYXZlbid0XG4gIC8vIGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSkgc28gYSBmcmVzaCBtYWNoaW5lIGNhblxuICAvLyBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdHMueWVzO1xuICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIG9wdC1pbiBsb2Fkcywgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNvIHdlIG9ubHkgYXNrIG9uY2UgdGhlIG9wZXJhdG9yXG4gKiBoYXMgYWdyZWVkIHRvIHByb2NlZWQpLiBQcm9tcHRzIHBlciBsb2FkLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWRcbiAqIGZvbGRlcnMgaW50byBhIGJvb3RzdHJhcHBlZCBzcGFyc2UgY2xvbmUsIHRoZW4gcmUtcmVzb2x2ZXMgdGhlIHBvc3QtaW5zdGFsbCBzdGVwc1xuICogd2l0aCB0aGUgc2VsZWN0aW9ucy4gUmV0dXJucyB0aGUgY2hvc2VuIGlkcyArIHRoZSByZWNvbXB1dGVkIHN0ZXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGJvb3RzdHJhcHBlZDogYm9vbGVhbixcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBwb3N0U3RlcEZsYWdzOiB7IGluaXQ6IGJvb2xlYW47IGF1dG9Jbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICcke2Jvb3RzdHJhcC5yZWZ9J2A7XG4gICAgICBwcmludEluZm8oYWRkQ21kKTtcbiAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGFkZENtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhlIG1hdGNoaW5nIGxvYWQgc3RlcChzKSBtYXkgZmFpbC4gUmUtcnVuIHdpdGggLS1yZXBvIHRvIHJlZnJlc2ggdGhlIGNsb25lLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgIHRhcmdldCxcbiAgICB1cmwsXG4gICAgcmVnaW9uLFxuICAgIGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sXG4gICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICBidWlsZEJvb3RzdHJhcDogcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCB8fCBjaG9zZW4uaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgfSk7XG4gIHJldHVybiB7IGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sIHN0ZXBzOiByZXNvbHZlZC5zdGVwcywgc2tpcHBlZDogcmVzb2x2ZWQuc2tpcHBlZCB9O1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKS4gSXQgcHJpbnRzIHRoZSBhc3NlbWJsZWQgcGxhblxuICogKHByZXJlcSBjaGVja3MsIE5MLWdvYWwgcGFyc2luZywgY29tbWFuZCBhc3NlbWJseSkgYW5kIHRoZW4gREVQTE9ZUywgZ2F0ZWQgYnlcbiAqIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChgLS15ZXNgIHRvIGF1dG8tYWNjZXB0OyBgLS1qc29uYCBpcyB0aGUgb25seSBub24tZXhlY3V0aW5nXG4gKiBtb2RlLCBwcmludGluZyB0aGUgcGxhbiBmb3IgdG9vbGluZykuIFdpdGggYC0tcmVwb2AgaXQgY2FuIGJvb3RzdHJhcCBhIGZyZXNoXG4gKiBtYWNoaW5lIGJ5IHNwYXJzZWx5IGNsb25pbmcgb25seSB0aGUgZGVwbG95IGZvbGRlcnMgdGhlIHNlbGVjdGVkIHRhcmdldCArXG4gKiBvcHRpb25zIG5lZWQsIHRoZW4gcnVucyBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIGFkbWluLCBvcHQtaW4gbG9hZHMsXG4gKiBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLiBgLS10ZWFyZG93bmAgcmVtb3ZlcyBhIGRlcGxveW1lbnQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ0FJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIHBsYXRmb3JtIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKTogZGVwbG95cyBpdCAoZ2F0ZWQgYnkgY29uZmlybWF0aW9uIHByb21wdHMpLCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0taG9zdGVkLXpvbmUtaWQgPGlkPicsICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWdoY3ItdG9rZW4gPHRva2VuPicsICdHaXRIdWIgUEFUIChyZWFkOnBhY2thZ2VzKSDigJQgbWFza2VkIGluIG91dHB1dCcpXG4gICAgLm9wdGlvbignLS1lbWFpbCcsICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknKVxuICAgIC5vcHRpb24oJy0tbm8tZW1haWwnLCAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCBvbiBBV1MpJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20gPGFkZHI+JywgJ1NFUyBGcm9tIGFkZHJlc3MnKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbS1uYW1lIDxuYW1lPicsICdTRVMgRnJvbSBkaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tYWxlcnQtZW1haWwgPGFkZHI+JywgJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycpXG4gICAgLm9wdGlvbignLS1za2lwLXNlcy1pZGVudGl0eScsICdTa2lwIFNFUyBpZGVudGl0eSBjcmVhdGlvbiAoZG9tYWluIGFscmVhZHkgdmVyaWZpZWQpJylcbiAgICAub3B0aW9uKCctLWFpLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgKGFudGhyb3BpY3xvcGVuYWl8Z29vZ2xlfHhhaXxiZWRyb2NrKScpXG4gICAgLm9wdGlvbignLS1tb2RlbCA8bW9kZWw+JywgJ0FJIG1vZGVsIGlkJylcbiAgICAub3B0aW9uKCctLWRpYWdub3NlIDxmaWxlPicsICdEaWFnbm9zZSBhIENsb3VkRm9ybWF0aW9uL2RlcGxveSBmYWlsdXJlIGZyb20gYSBmaWxlIChuZWVkcyBhbiBBSSBrZXkpJylcbiAgICAub3B0aW9uKCcteSwgLS15ZXMnLCAnQXV0by1hY2NlcHQgYWxsIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZXRyaWVzIDxuPicsICdBdXRvLWZpeCArIHJldHJ5IGF0dGVtcHRzIGFmdGVyIGEgZmFpbHVyZSAoZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQpJywgJzEnKVxuICAgIC5vcHRpb24oJy0tdGVhcmRvd24nLCAnVGVhciBkb3duIGFuIGV4aXN0aW5nIGRlcGxveW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUgKGdhdGVkOyBBV1MgdGFyZ2V0cyByZXF1aXJlIGEgdHlwZWQgY29uZmlybWF0aW9uKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tc3RhY2stbmFtZSA8bmFtZT4nLCAnQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSAoRUMyKSBmb3IgdGhlIGRlcGxveSBBTkQgdGVhcmRvd24g4oCUIGRlZmF1bHRzIHRvIHBpcGVsaW5lLWJ1aWxkZXIgKHNldCBpdCB0byBydW4gYSBzZWNvbmQgZW52aXJvbm1lbnQpJylcbiAgICAub3B0aW9uKCctLWNsdXN0ZXItbmFtZSA8bmFtZT4nLCAnRUtTIGNsdXN0ZXIgbmFtZSBmb3IgdGhlIGRlcGxveSBBTkQgdGVhcmRvd24g4oCUIGRlZmF1bHRzIHRvIHBpcGVsaW5lLWJ1aWxkZXInKVxuICAgIC5vcHRpb24oJy0tZm9yY2UnLCAnU2tpcCB0aGUgdGVhcmRvd24gdHlwZWQtY29uZmlybWF0aW9uIChEQU5HRVJPVVMg4oCUIGZvciBDSS9hdXRvbWF0aW9uIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1pbml0IDxtb2RlPicsICdQb3N0LWRlcGxveSBpbml0aWFsaXphdGlvbjogYXV0byAoREVGQVVMVCDigJQgcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzOyBvbiBlYzIgdGhlIGluc3RhbmNlIGRvZXMgaXQgaXRzZWxmIG9uIGZpcnN0IGJvb3QpLCBtYW51YWwgKGRvblxcJ3Qgc2VsZi1pbml0IOKAlCBzdXJmYWNlIHRoZSBzdGVwIGZvciB5b3UgdG8gcnVuLCBlLmcuIHRvIHNldCByZWFsIGFkbWluIGNyZWRzKSwgb3Igc2tpcCAoZG8gbm90aGluZykuIGxvY2FsL21pbmlrdWJlL2VrcyBydW4gaW5pdCB2aWEgcHJvdmlzaW9uIHVubGVzcyBza2lwLicpXG4gICAgLy8gRGVwcmVjYXRlZCBhbGlhc2VzIOKAlCBrZXB0IHdvcmtpbmcgZm9yIGJhY2stY29tcGF0OyAtLWluaXQgaXMgdGhlIGRvY3VtZW50ZWQgZm9ybS5cbiAgICAub3B0aW9uKCctLW5vLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgc2tpcCcpXG4gICAgLm9wdGlvbignLS1hdXRvLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgYXV0bycpXG4gICAgLm9wdGlvbignLS1uby1hdXRvLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgbWFudWFsJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHBsYW4gYXMgSlNPTiBhbmQgZXhpdCBXSVRIT1VUIHJ1bm5pbmcgKHRoZSBvbmx5IG5vbi1leGVjdXRpbmcgbW9kZSDigJQgZm9yIHRvb2xpbmcvQ0kgaW5zcGVjdGlvbiknLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUHJvdmlzaW9uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHNpbmdsZSBwb3N0LWRlcGxveSBpbml0IG1vZGUgKGF1dG98bWFudWFsfHNraXApIGZyb20gLS1pbml0IG9yIGl0c1xuICAgICAgICAvLyBkZXByZWNhdGVkIGFsaWFzZXMuIFR3byBpbnRlcm5hbCBzaWduYWxzIGRlcml2ZSBmcm9tIGl0OiB3aGV0aGVyIGluaXQgaGFwcGVucyBhdFxuICAgICAgICAvLyBhbGwsIGFuZCB3aGV0aGVyIHRoZSBERVBMT1kgc2VsZi1ydW5zIGl0ICh2cy4gd2Ugc3VyZmFjZSBpdCkuXG4gICAgICAgIGNvbnN0IGluaXRNb2RlID0gcmVzb2x2ZUluaXRNb2RlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoaW5pdE1vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBJbnZhbGlkIC0taW5pdCB2YWx1ZSAnJHtTdHJpbmcob3B0aW9ucy5pbml0KX0nLiBVc2Ugb25lIG9mOiAke0lOSVRfTU9ERVMuam9pbignIHwgJyl9LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0RW5hYmxlZCA9IGluaXRNb2RlICE9PSAnc2tpcCc7IC8vIHNraXAg4oaSIG5vIHJlZ2lzdGVyL2xvYWRzIGF0IGFsbFxuICAgICAgICBjb25zdCBzZWxmSW5pdCA9IGluaXRNb2RlID09PSAnYXV0byc7IC8vIGF1dG8g4oaSIHRoZSBkZXBsb3kgaW5pdGlhbGl6ZXMgaXRzZWxmXG5cbiAgICAgICAgLy8gMS4gQXNzZW1ibGUgcGFyYW1zIGZyb20gZXhwbGljaXQgZmxhZ3MgKGZsYWdzIGFsd2F5cyB3aW4gb3ZlciBOTCBwYXJzZSkuXG4gICAgICAgIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICBkb21haW46IG9wdGlvbnMuZG9tYWluLFxuICAgICAgICAgIGhvc3RlZFpvbmVJZDogb3B0aW9ucy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgZGVwbG95TW9kZTogb3B0aW9ucy5kZXBsb3lNb2RlLFxuICAgICAgICAgIGtleVBhaXI6IG9wdGlvbnMua2V5UGFpcixcbiAgICAgICAgICBpbnN0YW5jZVR5cGU6IG9wdGlvbnMuaW5zdGFuY2VUeXBlLFxuICAgICAgICAgIC8vIERlcGxveS10aW1lIHJlc291cmNlIGlkZW50aXR5OiBlYzIgZW1pdHMgLS1zdGFjay1uYW1lIChrZXkgc3RhY2tOYW1lKSwgZWtzIGVtaXRzXG4gICAgICAgICAgLy8gLS1jbHVzdGVyLW5hbWUgKGtleSBjbHVzdGVyTmFtZSkuIEJvdGggYWxzbyBkcml2ZSB0ZWFyZG93bi4gVW5kZWZpbmVkIOKGkiBkZWZhdWx0cy5cbiAgICAgICAgICBzdGFja05hbWU6IG9wdGlvbnMuc3RhY2tOYW1lLFxuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBvcHRpb25zLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIGdoY3JUb2tlbjogb3B0aW9ucy5naGNyVG9rZW4sXG4gICAgICAgICAgLy8gZW1haWwvbm9FbWFpbCBhcmUgY29lcmNlZCBBRlRFUiB0aGUgTkwgbWVyZ2UgYmVsb3cg4oCUIHBhcnNlR29hbCBjYW4gcmV0dXJuXG4gICAgICAgICAgLy8gYGVtYWlsYCwgc28gcHJlLWNvZXJjaW5nIGhlcmUgKG5ldmVyLXVuZGVmaW5lZCkgd291bGQgbGV0IHRoZSBtZXJnZSdzXG4gICAgICAgICAgLy8gYD09PSB1bmRlZmluZWRgIGd1YXJkIHNpbGVudGx5IGRyb3AgYW4gQUktcGFyc2VkIGVtYWlsIGNob2ljZS4gTGVmdCBvdXQgb2ZcbiAgICAgICAgICAvLyB0aGlzIGxpdGVyYWwgb24gcHVycG9zZTsgcmVzb2x2ZWQgYSBmZXcgbGluZXMgZG93bi5cbiAgICAgICAgICBlbWFpbEZyb206IG9wdGlvbnMuZW1haWxGcm9tLFxuICAgICAgICAgIGVtYWlsRnJvbU5hbWU6IG9wdGlvbnMuZW1haWxGcm9tTmFtZSxcbiAgICAgICAgICBhbGVydEVtYWlsOiBvcHRpb25zLmFsZXJ0RW1haWwsXG4gICAgICAgICAgbm9DcmVhdGVTZXNJZGVudGl0eTogb3B0aW9ucy5za2lwU2VzSWRlbnRpdHksXG4gICAgICAgICAgLy8gZWMyJ3MgZGVwbG95IHNlbGYtaW5pdHMgb24gZmlyc3QgYm9vdCwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGBcbiAgICAgICAgICAvLyB3aGVuIHRoZSBtb2RlIGlzIE5PVCBhdXRvIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBpbnN0YW5jZSBpbml0IGl0c2VsZlwiKS5cbiAgICAgICAgICAvLyBgLS1hdXRvLWluaXRgIChhIG5vLW9wIHJlYWZmaXJtKSBpcyBuZXZlciBlbWl0dGVkLiBPbmx5IGVjMiBoYXMgdGhlc2UgZmxhZ3MgaW4gaXRzXG4gICAgICAgICAgLy8gc3BlYzsgb3RoZXIgdGFyZ2V0cyBpZ25vcmUgdGhlIHBhcmFtLlxuICAgICAgICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gZWMyIGluIHJlc29sdmVQb3N0U3RlcHMsXG4gICAgICAgICAgLy8gc28gYSBzZWxmLWluaXRpYWxpemluZyBFQzIgZGVwbG95IGRvZXNuJ3QgYWxzbyBwcmludCBhIG1hbnVhbCByZWdpc3RlciBzdGVwLiBGb3JcbiAgICAgICAgICAvLyBtYW51YWwgbW9kZSAob3IgYW55IG5vbi1lYzIgdGFyZ2V0KSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIC0tZGlhZ25vc2UgaXMgYSByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlOiByZXR1cm4gd2hldGhlciBvciBub3QgYSB0YXJnZXQgd2FzXG4gICAgICAgICAgLy8gZ2l2ZW4sIHNvIGl0IG5ldmVyIGZhbGxzIHRocm91Z2ggaW50byBhIChwb3NzaWJseSAtLXllcykgZGVwbG95LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChtYXRjaGluZyBlYzIncyBmaXJzdC1ib290XG4gICAgICAgICAgLy8gTE9BRF8qPXkpLiBVbmxpa2UgZWMyLCBla3MgcnVucyBpbml0IHZpYSBwcm92aXNpb24gb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkLFxuICAgICAgICAgIC8vIHNvIHRoZSBsb2FkcyAoYW5kIHRoZSBzcGFyc2UtY2xvbmUgZm9sZGVycyB0aGV5IHB1bGwpIEFSRSByZXNvbHZlZCBoZXJlLiBFeHBsaWNpdFxuICAgICAgICAgIC8vIGAtLXdpdGgtKmAgZmxhZ3Mgb3ZlcnJpZGUgdGhpcyBkZWZhdWx0OyBgLS1pbml0IG1hbnVhbGAgLyBgLS1pbml0IHNraXBgIG9wdCBvdXQuXG4gICAgICAgICAgd2lsbFByb21wdExvYWRzID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBMT0FEX1NURVBTLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgICAgcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCA9IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtaW5pa3ViZS9sb2NhbCBrZWVwIHRoZSBpbnRlcmFjdGl2ZSBwaWNrZXIgKGxvY2FsLWRldjsgbm8gYC0taW5pdCBhdXRvYCBsb2FkIHBhcml0eSkuXG5cbiAgICAgICAgLy8gNC4gTmVlZCBhIHRhcmdldCB0byBhc3NlbWJsZSBhIHBsYW4uXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgTm8gdGFyZ2V0IHNwZWNpZmllZC4gUGFzcyAtLXRhcmdldCA8JHtUQVJHRVRfSURTLmpvaW4oJ3wnKX0+IG9yIGRlc2NyaWJlIHRoZSBnb2FsIHdpdGggLS1wcm9tcHQuYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BlYyA9IFRBUkdFVFNbdGFyZ2V0XTtcbiAgICAgICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAgICAgLy8gNGIuIFRlYXJkb3duIG1vZGUg4oCUIHRoZSBkZXN0cm95IGNvdW50ZXJwYXJ0IG9mIHByb3Zpc2lvbmluZyAoc2VlIHJ1blRlYXJkb3duKS5cbiAgICAgICAgaWYgKG9wdGlvbnMudGVhcmRvd24pIHtcbiAgICAgICAgICBhd2FpdCBydW5UZWFyZG93bihzcGVjLCB0YXJnZXQsIGN3ZCwgZXhlY3V0aW9uSWQsIG9wdGlvbnMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgcHJldmlvdXNseS1mZXRjaGVkIHNpbmdsZS1iaW5hcnkgdG9vbHMgKGUuZy4geXEpIHZpc2libGUgdG8gdGhlXG4gICAgICAgIC8vIHByZXJlcSBjaGVja3MgKyB0aGUgZGVwbG95IOKAlCB0aGV5IGxpdmUgaW4gdGhlIHRvb2xzIGNhY2hlLCBub3Qgb24gdGhlXG4gICAgICAgIC8vIHN5c3RlbSBQQVRILiAoQm90aCBgaGFzKClgIGFuZCB0aGUgZGVwbG95J3MgYGJhc2ggLWxjYCBpbmhlcml0IHRoaXMuKVxuICAgICAgICB3aXRoVG9vbHNPblBhdGgoKTtcbiAgICAgICAgLy8gSGFyZC1yZXF1aXJlIHBsdWdpbiBwcmVyZXFzIChlLmcuIHlxIG9uIG1pbmlrdWJlKSBvbmx5IHdoZW4gcGx1Z2lucyBpcyBFWFBMSUNJVExZXG4gICAgICAgIC8vIHNlbGVjdGVkIOKAlCBOT1Qgb24gdGhlIHdpbGxQcm9tcHRMb2FkcyBndWVzcywgd2hpY2ggd291bGQgYmxvY2svcHJvbXB0IGJlZm9yZSB0aGVcbiAgICAgICAgLy8gdXNlciBoYXMgZXZlbiBiZWVuIGFza2VkIHdoZXRoZXIgdGhleSB3YW50IHBsdWdpbnMuIElmIHRoZXkgcGljayBwbHVnaW5zIGluIHRoZVxuICAgICAgICAvLyBpbnRlcmFjdGl2ZSBwcm9tcHQsIHdlIHJlLWNoZWNrICsgb2ZmZXIgdG8gZmV0Y2ggcmlnaHQgYWZ0ZXIgdGhhdCBzZWxlY3Rpb24gKGJlbG93KS5cbiAgICAgICAgbGV0IHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgLy8gSW50ZXJhY3RpdmUgbG9hZHMgYXJlIGNob3NlbiBBRlRFUiB0aGUgY2xvbmUsIHNvIHRoZSBjbG9uZSBzdGF5cyBtaW5pbWFsIOKAlFxuICAgICAgICAvLyBlYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIGZldGNoZWQgdGhlbiB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gUmUtcmVzb2x2ZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHBvc3QtY2xvbmUgbG9hZCBwcm9tcHRzIChzZWUgYmVsb3cpIHdoZW4gdGhvc2UgcnVuIGludGVyYWN0aXZlbHkuXG4gICAgICAgIGxldCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uIGJlbG93KS5cbiAgICAgICAgcHJpbnRTZWN0aW9uKGBQcm92aXNpb24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Jlc3QgZm9yJzogc3BlYy5iZXN0Rm9yLCAnQ29zdCc6IHNwZWMuY29zdCB9KTtcblxuICAgICAgICBwcmludFNlY3Rpb24oJ1ByZXJlcXVpc2l0ZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHByZXJlcXMpIHByaW50SW5mbyhgJHtjLm9rID8gJ+KckycgOiAn4pyXJ30gJHtjLm5hbWV9IOKAlCAke2MuZGV0YWlsfWApO1xuICAgICAgICBpZiAoIXByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcykpIHByaW50V2FybmluZygnUmVzb2x2ZSB0aGUgZmFpbGluZyBwcmVyZXF1aXNpdGVzIGFib3ZlIGJlZm9yZSBkZXBsb3lpbmcuJyk7XG5cbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignTWlzc2luZyByZXF1aXJlZCBpbnB1dHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2luZykgcHJpbnRJbmZvKGAgIC0tJHttLmZsYWd9ICAoJHttLmRlc2NyaXB0aW9ufSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCAoc3BhcnNlIGdpdCBjbG9uZSwgcnVucyBmaXJzdCknKTtcbiAgICAgICAgICBwcmludEluZm8oYENsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSDihpIgJHtib290c3RyYXAud29ya2Rpcn07IGZvbGRlcnM6ICR7c3BhcnNlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICBwcmludEluZm8oYm9vdHN0cmFwQ21kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgICAgICAgcHJpbnRJbmZvKGNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCB8fCBza2lwcGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignUG9zdC1pbnN0YWxsIHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHBvc3RTdGVwcykgcHJpbnRJbmZvKGDigKIgJHtzLmxhYmVsfVxcbiAgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gR2F0ZWQgZXhlY3V0aW9uLiBDaGVjayBwcmVyZXFzIC8gcmVxdWlyZWQgaW5wdXRzIGZpcnN0IOKAlCB0aGlzIGFsc29cbiAgICAgICAgLy8gY2F0Y2hlcyBhIG1pc3NpbmcgYGdpdGAgd2hlbiBib290c3RyYXBwaW5nLlxuICAgICAgICBjb25zdCBibG9ja2VkID0gZXhlY3V0aW9uQmxvY2tlZChwcmVyZXFzLCBtaXNzaW5nKTtcbiAgICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBDYW4ndCBzdGFydCBqdXN0IHlldCDigJQgJHtibG9ja2VkfS4gUmVzb2x2ZSB0aGF0IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tbWl0IGdhdGUg4oCUIGNvbmZpcm0gQkVGT1JFIGFueSBzaWRlIGVmZmVjdCAoY2xvbmUsIC5lbnYsIGRlcGxveSkgc28gYSBcIk5vXCJcbiAgICAgICAgLy8gbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiBUaGUgcG9ydCBjaGVjayArIG9wdGlvbmFsIGxvYWRzICsgLmVudiBiZWxvdyBhcmUgcGFydCBvZlxuICAgICAgICAvLyBleGVjdXRpbmcgdGhlIGFncmVlZC10byBwbGFuLlxuICAgICAgICBpZiAoIShhd2FpdCBjb25maXJtKGBcXG5Qcm9jZWVkIHdpdGggcHJvdmlzaW9uaW5nICR7c3BlYy5sYWJlbH0/YCwgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3YS83Yi4gU3BhcnNlLWNsb25lIChpZiAtLXJlcG8gb3IgYWNjZXB0ZWQgaW50ZXJhY3RpdmVseSkgKyBsb2NhdGUgdGhlIGRlcGxveVxuICAgICAgICAvLyBlbnRyeXBvaW50LCByZXBvaW50aW5nIGN3ZCBpbnRvIHRoZSBjbG9uZS4gU2VlIGJvb3RzdHJhcEFuZExvY2F0ZS5cbiAgICAgICAgY29uc3QgbG9jYXRlZCA9IGF3YWl0IGJvb3RzdHJhcEFuZExvY2F0ZShzcGVjLCBib290c3RyYXAsIGJvb3RzdHJhcENtZCwgc3BhcnNlUGF0aHMsIGN3ZCwgb3B0aW9ucyk7XG4gICAgICAgIGN3ZCA9IGxvY2F0ZWQuY3dkO1xuICAgICAgICBjb25zdCBib290c3RyYXBwZWQgPSBsb2NhdGVkLmJvb3RzdHJhcHBlZDtcbiAgICAgICAgaWYgKCFsb2NhdGVkLm9rKSByZXR1cm47XG5cbiAgICAgICAgLy8gSG9zdC1wb3J0IHByZS1mbGlnaHQg4oCUIG5vdyB0aGF0IHRoZSBkZXBsb3kgc291cmNlIGlzIG9uIGRpc2sgKHBvc3QtY2xvbmUpLFxuICAgICAgICAvLyBkZXJpdmUgdGhlIHBvcnRzIGZyb20gaXQgKGNvbXBvc2UgLyBzZXR1cC5zaCkgYW5kIHN0b3Agb24gYSBmYXRhbCBjb25mbGljdFxuICAgICAgICAvLyBiZWZvcmUgZGVwbG95aW5nLiBTZWUgcHJlZmxpZ2h0UG9ydHMuXG4gICAgICAgIGlmICghKGF3YWl0IHByZWZsaWdodFBvcnRzKHNwZWMsIHRhcmdldCwgY3dkKSkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcHQtaW4gbG9hZHMg4oCUIG9mZmVyZWQgQUZURVIgdGhlIGNsb25lIChzZWUgcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseSk7IGl0XG4gICAgICAgIC8vIHByb21wdHMsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZCBmb2xkZXJzLCBhbmQgcmUtcmVzb2x2ZXMgdGhlXG4gICAgICAgIC8vIHBvc3QtaW5zdGFsbCBzdGVwcyB3aXRoIHRoZSBzZWxlY3Rpb25zLlxuICAgICAgICBpZiAod2lsbFByb21wdExvYWRzKSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBib290c3RyYXBwZWQsXG4gICAgICAgICAgICBib290c3RyYXAsXG4gICAgICAgICAgICBwb3N0U3RlcEZsYWdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBsb2FkZWQuZW5hYmxlZExvYWRJZHM7XG4gICAgICAgICAgcG9zdFN0ZXBzID0gbG9hZGVkLnN0ZXBzO1xuICAgICAgICAgIHNraXBwZWRTdGVwcyA9IGxvYWRlZC5za2lwcGVkO1xuICAgICAgICAgIC8vIE5vdyB0aGF0IHBsdWdpbnMgbWF5IGhhdmUgYmVlbiBwaWNrZWQsIHJlLWNoZWNrIHRoZSBwbHVnaW4tc3BlY2lmaWMgcHJlcmVxcyB3ZVxuICAgICAgICAgIC8vIGRlbGliZXJhdGVseSBkaWRuJ3QgaGFyZC1yZXF1aXJlIHVwIGZyb250IChlLmcuIHlxIGZvciBtaW5pa3ViZSBwbHVnaW4gYnVpbGRzKS5cbiAgICAgICAgICAvLyBPZmZlciB0byBmZXRjaCBhbnkgZmV0Y2hhYmxlIG9uZTsgd2FybiAoZG9uJ3QgYmxvY2sg4oCUIHRoZSBwbGF0Zm9ybSBzdGlsbCBkZXBsb3lzKVxuICAgICAgICAgIC8vIGlmIGl0IGNhbid0IGJlIHJlc29sdmVkLCBzbyB0aGUgbGF0ZXIgcGx1Z2luIGJ1aWxkIGRvZXNuJ3QgZmFpbCBvcGFxdWVseS5cbiAgICAgICAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSkge1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luUHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkdhcHMgPSBwbHVnaW5QcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiAhcHJlcmVxcy5zb21lKChwKSA9PiBwLm5hbWUgPT09IGMubmFtZSkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIHBsdWdpbkdhcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRmV0Y2hhYmxlKGMubmFtZSkgJiYgYXdhaXQgY29uZmlybShgXFxuJHtjLm5hbWV9IGlzIG5lZWRlZCB0byBidWlsZCBwbHVnaW5zIGJ1dCBpc24ndCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9P2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgICAgIHByaW50SW5mbyhgRmV0Y2hpbmcgJHtjLm5hbWV94oCmYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgYmVmb3JlIHRoZSBwbHVnaW4gYnVpbGQgcnVucy5gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmludFdhcm5pbmcoYCR7Yy5uYW1lfSBtaXNzaW5nIOKAlCB0aGUgcGx1Z2luIGxvYWQvYnVpbGQgc3RlcCBtYXkgZmFpbC4gJHtjLmRldGFpbH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbC9taW5pa3ViZSdzIHNldHVwLnNoIFJFUVVJUkVTIGEgYC5lbnZgIGFuZCBhYm9ydHMgd2l0aG91dCBpdCDigJQgY3JlYXRlXG4gICAgICAgIC8vIGl0IGZyb20gLmVudi5leGFtcGxlIHdpdGggZ2VuZXJhdGVkIHNlY3JldHMgc28gdGhlIGRlcGxveSBpcyBub24taW50ZXJhY3RpdmUuXG4gICAgICAgIC8vIGVjMiBhbmQgZWtzIGRvbid0IGhhdmUgcHJvdmlzaW9uIGdlbmVyYXRlIGEgbG9jYWwgYC5lbnZgOiBlYzIgYm9vdHN0cmFwcyBpdHNcbiAgICAgICAgLy8gc2VjcmV0cyBvbiB0aGUgaW5zdGFuY2UsIGFuZCBla3MncyBzZXR1cC5zaCBjcmVhdGVzIHRoZSBrOHMgc2VjcmV0cyBpdHNlbGZcbiAgICAgICAgLy8gKGEgZGVwbG95L2F3cy9la3MvLmVudi5leGFtcGxlICsgc2VjcmV0IHN0ZXAgaXMgYSBzZXR1cC5zaCBUT0RPKS5cbiAgICAgICAgaWYgKCh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSAmJiBlbnZGaWxlTWlzc2luZyhjd2QsIHNwZWMuZGlyKSkge1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IGNyZWF0ZUVudkZpbGUoY3dkLCBzcGVjLmRpcik7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvbnRpbnVpbmcgd2l0aG91dCAuZW52IOKAlCBzZXR1cC5zaCB3aWxsIGFib3J0IGlmIGl0IHN0YXlzIG1pc3NpbmcuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2VrcyB1bmxlc3MgdGhlIG9wZXJhdG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tZW1haWwuXG4gICAgICAgIGNvbnN0IHNlc1Byb3Zpc2lvbmVkID0gKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gICAgICAgICAgLy8gTWluaWt1YmUgcmVhY2hlcyB0aGUgZ2F0ZXdheSB2aWEgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCB0aGF0IHNldHVwLnNoXG4gICAgICAgICAgLy8gYmFja2dyb3VuZHMgYW5kIHRoYXQgY2FuIGRpZS9mYWlsIHRvIGJpbmQg4oCUIChyZSlzdGFydCBpdCBiZWZvcmUgcG9sbGluZ1xuICAgICAgICAgIC8vIHNvIHdlIGRvbid0IHNpdCBhdCB0aGUgZ2F0ZSBvbiBhIGRlYWQgZm9yd2FyZCB3aGlsZSB0aGUgcG9kcyBhcmUgZmluZS5cbiAgICAgICAgICBpZiAodGFyZ2V0ID09PSAnbWluaWt1YmUnKSB7XG4gICAgICAgICAgICBhd2FpdCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkodXJsLCB7IG9uSW5mbzogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgICAgICAgLy8gRnJlc2ggRUtTIGxlZ2l0aW1hdGVseSBuZWVkcyBsb25nZXIgdGhhbiB0aGUgMzAwcyBkZWZhdWx0OiBLYXJwZW50ZXIgcHJvdmlzaW9uc1xuICAgICAgICAgIC8vIG5vZGVzLCB+MTAgc2VydmljZXMgY29sZC1wdWxsIGltYWdlcywgdGhlIEFMQiBwcm92aXNpb25zICh+Mi0zIG1pbiksIGFuZCB0aGVcbiAgICAgICAgICAvLyBSb3V0ZSA1MyBhbGlhcyBwcm9wYWdhdGVzLiBHaXZlIGl0IDE1IG1pbiBiZWZvcmUgc3VyZmFjaW5nIHRoZSBub3QtcmVhY2hhYmxlIG5vdGUuXG4gICAgICAgICAgY29uc3QgaGVhbHRoVGltZW91dE1zID0gdGFyZ2V0ID09PSAnZWtzJyA/IDkwMF8wMDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IHRpbWVvdXRNczogaGVhbHRoVGltZW91dE1zLCBvblRpY2s6IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgLy8gR3JlZW4gb25seSB3aGVuIGZ1bGx5IHJlYWR5OyBhIFwiaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbmV2ZXIgY2FtZVwiIHByb2NlZWQtXG4gICAgICAgICAgLy8gYW55d2F5IHN0YXRlIGlzIGhlYWx0aHk6dHJ1ZSBidXQgZGVncmFkZWQg4oaSIHdhcm4gc28gaXQgZG9lc24ndCByZWFkIGFzIGRvbmUuXG4gICAgICAgICAgKGhlYWx0aC5oZWFsdGh5ICYmIGhlYWx0aC5yZWFkeSA/IHByaW50U3VjY2VzcyA6IHByaW50V2FybmluZykoYCR7aGVhbHRoLnVybH0g4oCUICR7aGVhbHRoLmRldGFpbH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdmLiBQb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyICsgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBldmVudHMsIGN1c3RvbSkuXG4gICAgICAgIC8vIFNlZSBydW5Qb3N0U3RlcHMg4oCUIGl0IHN1cmZhY2VzIHJlZ2lzdGVyICsgdGhlIGV2ZW50cyBidW5kbGUgYXMgbWFudWFsIGluLVZQQ1xuICAgICAgICAvLyBuZXh0LXN0ZXBzIG9uIEVDMi9FS1MgaW5zdGVhZCBvZiBhdXRvLXJ1bm5pbmcgKGFuZCBmYWlsaW5nKSB0aGVtIGxvY2FsbHkuXG4gICAgICAgIC8vIGF1dG9SdW4gKHNraXAgdGhlIHNlY29uZCBjb25maXJtKSBvbmx5IHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgUElDS0VEIGEgbG9hZCBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0IOKAlCBkZWNsaW5pbmcgZXZlcnkgbG9hZCBzaG91bGRuJ3Qgc2lsZW50bHkgcnVuIHJlZ2lzdGVyIHVucHJvbXB0ZWQuXG4gICAgICAgIGNvbnN0IGF1dG9SYW5Mb2FkcyA9IHdpbGxQcm9tcHRMb2FkcyAmJiBlbmFibGVkTG9hZElkcy5sZW5ndGggPiAwO1xuICAgICAgICBhd2FpdCBydW5Qb3N0U3RlcHMocG9zdFN0ZXBzLCBza2lwcGVkU3RlcHMsIHRhcmdldCwgY3dkLCBhZG1pbkVudiwgeyB5ZXM6IG9wdGlvbnMueWVzLCBhdXRvUnVuOiBhdXRvUmFuTG9hZHMsIGF1dG9Jbml0OiBwb3N0U3RlcEZsYWdzLmF1dG9Jbml0IH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
858
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELGdGQUFnRjtZQUNoRiwrRUFBK0U7WUFDL0UsNEVBQTRFO1lBQzVFLHFGQUFxRjtZQUNyRix3RkFBd0Y7WUFDeEYsTUFBTSxZQUFZLEdBQUcsZUFBZSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwLCB0eXBlIEJvb3RzdHJhcFNwZWMgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBleGVjdXRpb25CbG9ja2VkLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBkZXJpdmVIZWFsdGhVcmwsIHdhaXRIZWFsdGh5LCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgY2hlY2tIb3N0UG9ydHMsIGRpc2NvdmVySG9zdFBvcnRzLCBzdGFja1J1bm5pbmcgfSBmcm9tICcuLi9hZ2VudC9wb3J0cy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzLCB0eXBlIFBvc3RTdGVwLCB0eXBlIFNraXBwZWRTdGVwIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdEF2YWlsYWJsZSwgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdGVhcmRvd25Db21tYW5kLFxuICB0eXBlIFRhcmdldElkLFxuICB0eXBlIFRhcmdldFNwZWMsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgVE9PTFNfRElSLCBmZXRjaFRvb2wsIGlzRmV0Y2hhYmxlLCB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdsb2NhbCc7XG4gIC8vIOKAplVOTEVTUyB0aGUgbG9jYWwgc3RhY2sgaXMgYWxyZWFkeSBydW5uaW5nOiB0aG9zZSBwb3J0cyBhcmUgaGVsZCBieSBZT1VSIE9XTlxuICAvLyBzdGFjaywgYW5kIGBkb2NrZXIgY29tcG9zZSB1cGAgbm8tb3BzIHRoZW0g4oCUIHRoaXMgaXMgZXhhY3RseSBob3cgeW91IHJlLXJ1biB0b1xuICAvLyBhZGQgbG9hZHMvb3B0aW9ucy4gRG9uJ3QgYmxvY2sgKHRoZSB3b3VsZC1iZSBjb25mbGljdCBpcyBhIHNlbGYtY29uZmxpY3QpLlxuICBpZiAoZmF0YWwgJiYgc3RhY2tSdW5uaW5nKHRhcmdldCwgY3dkLCBzcGVjKSkge1xuICAgIHByaW50V2FybmluZyhgXFxuJHt0YWtlbi5sZW5ndGh9IHBvcnQocykgYXJlIGhlbGQgYnkgeW91ciBhbHJlYWR5LXJ1bm5pbmcgJHtzcGVjLmxhYmVsfSBzdGFjayDigJQgcmUtcnVubmluZyBqdXN0IHJlc3VtZXMgaXQgKG5vIHJlYWwgY29uZmxpY3QpLCBzbyBjb250aW51aW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGxlYWQgPSBgJHt0YWtlbi5sZW5ndGh9IHJlcXVpcmVkIHBvcnQocykgYWxyZWFkeSBpbiB1c2U6ICR7dGFrZW4ubWFwKChjKSA9PiBjLnBvcnQpLmpvaW4oJywgJyl9YDtcbiAgKGZhdGFsID8gcHJpbnRFcnJvciA6IHByaW50V2FybmluZykoZmF0YWxcbiAgICA/IGBcXG4ke2xlYWR9IOKAlCB0aGUgZGVwbG95IGNhbid0IGJpbmQgdGhlbSBhbmQgd291bGQgZmFpbCBtaWQtd2F5LiBGcmVlIHRoZW0gYW5kIHJlLXJ1bjpgXG4gICAgOiBgXFxuJHtsZWFkfSDigJQgb24gbWluaWt1YmUgdGhlc2UgYXJlIHVzdWFsbHkgYSBwcmV2aW91cyBydW4ncyBwb3J0LWZvcndhcmRzIChzZXR1cC5zaCByZXN0YXJ0cyB0aGVtKS4gRnJlZSBhbnkgTk9OLW1pbmlrdWJlIGhvbGRlciBpZiB0aGUgZ2F0ZXdheSBzdGF5cyB1bnJlYWNoYWJsZTpgKTtcbiAgZm9yIChjb25zdCBjIG9mIHRha2VuKSBwcmludEluZm8oYCAg4oCiIHBvcnQgJHtjLnBvcnR9ICgke2Muc2VydmljZX0pIOKAlCBmaW5kIHRoZSBob2xkZXI6ICBsc29mIC1pIDoke2MucG9ydH1gKTtcbiAgaWYgKHRha2VuLnNvbWUoKGMpID0+IGMucG9ydCA9PT0gNTAwMCkpIHtcbiAgICBwcmludEluZm8oJyAgTm90ZTogb24gbWFjT1MsIHBvcnQgNTAwMCBpcyB1c3VhbGx5IEFpclBsYXkgUmVjZWl2ZXIg4oCUIFN5c3RlbSBTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgQWlyRHJvcCAmIEhhbmRvZmYg4oaSIEFpclBsYXkgUmVjZWl2ZXIgKG9mZikuJyk7XG4gIH1cbiAgcmV0dXJuICFmYXRhbDtcbn1cblxuLyoqXG4gKiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcsIGdhdGVkIEhBUkRFUiB0aGFuIGRlcGxveTpcbiAqIEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHRoZSBvcGVyYXRvciBtdXN0IFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZVxuICogYnlwYXNzZXMgZm9yIENJOyAtLXllcyBhbG9uZSBkb2VzIE5PVCkuIFRlcm1pbmFsOiBvd25zIGl0cyBvdXRwdXQgKyBleGl0Q29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlYXJkb3duKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IGNsdXN0ZXJOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGRvbWFpbj86IHN0cmluZzsgaG9zdGVkWm9uZUlkPzogc3RyaW5nOyBmb3JjZT86IGJvb2xlYW47IHllcz86IGJvb2xlYW47IGpzb24/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb21tYW5kOiBkb3duQ29tbWFuZCwgZGVzdHJ1Y3RpdmUgfSA9IHRlYXJkb3duQ29tbWFuZCh0YXJnZXQsIHtcbiAgICBzdGFja05hbWU6IG9wdHMuc3RhY2tOYW1lLFxuICAgIGNsdXN0ZXJOYW1lOiBvcHRzLmNsdXN0ZXJOYW1lLFxuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24sXG4gICAgLy8gZWtzIHRlYXJkb3duIChiaW4vc2h1dGRvd24uc2gpIGFsc28gY2xlYW5zIHVwIHRoZSBBQ00gY2VydCArIFJvdXRlIDUzIGFsaWFzIGZvclxuICAgIC8vIHRoZSBkb21haW4sIHNvIGZvcndhcmQgdGhlbSB3aGVuIHByZXNlbnQuXG4gICAgZG9tYWluOiBvcHRzLmRvbWFpbixcbiAgICBob3N0ZWRab25lSWQ6IG9wdHMuaG9zdGVkWm9uZUlkLFxuICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGFzc3VtZVllcyBmb3J3YXJkcyBhIG5hdGl2ZSBgLS15ZXNgIHRvIGFueVxuICAgIC8vIHNjcmlwdC1iYXNlZCB0ZWFyZG93biAoZWMyIGRlbGV0ZS1zdGFjayBoYXMgbm8gcHJvbXB0OyBla3Mgc2h1dGRvd24uc2ggc2tpcHMgaXRzIG93bikuXG4gICAgYXNzdW1lWWVzOiB0cnVlLFxuICB9KTtcbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdEZXN0cm95cyc6IHNwZWMuZGVzdHJveXMsICdTdG9wcyBjb3N0Jzogc3BlYy5jb3N0IH0pO1xuICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG4gIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSkge1xuICAgIC8vIEJpbmQgdGhlIGNvbmZpcm1hdGlvbiB0byB0aGUgcmVzb3VyY2UgYWN0dWFsbHkgZGVzdHJveWVkOiBhIGN1c3RvbSBuYW1lIChlYzJcbiAgICAvLyAtLXN0YWNrLW5hbWUgLyBla3MgLS1jbHVzdGVyLW5hbWUpIG11c3QgYmUgdHlwZWQgdmVyYmF0aW0gc28gYSB3cm9uZyBuYW1lIGNhbid0IGJlXG4gICAgLy8gY29uZmlybWVkIGJ5IGhhYml0OyBvdGhlcndpc2UgdGhlIHRhcmdldCBpZC5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSB0YXJnZXQgPT09ICdla3MnID8gb3B0cy5jbHVzdGVyTmFtZSA6IG9wdHMuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbmZpcm1Ub2tlbiA9IHJlc291cmNlTmFtZSA/PyB0YXJnZXQ7XG4gICAgY29uc3Qgbm91biA9IHRhcmdldCA9PT0gJ2VrcycgPyAob3B0cy5jbHVzdGVyTmFtZSA/ICdjbHVzdGVyIG5hbWUnIDogJ3RhcmdldCBpZCcpIDogKG9wdHMuc3RhY2tOYW1lID8gJ3N0YWNrIG5hbWUnIDogJ3RhcmdldCBpZCcpO1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgYXNrKGBcXG5UaGlzIGlzIElSUkVWRVJTSUJMRS4gVHlwZSBcIiR7Y29uZmlybVRva2VufVwiIHRvIGNvbmZpcm0gdGVhcmRvd246IGApO1xuICAgIGlmICh0b2tlbiAhPT0gY29uZmlybVRva2VuKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFRoYXQgZGlkbid0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0ICR7bm91bn0gdG8gY29uZmlybS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWRlc3RydWN0aXZlICYmICFvcHRzLmZvcmNlICYmICEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRlYXJkb3duIChzdG9wcyB0aGUgc3RhY2s7IG9uLWRpc2sgZGF0YSBwZXJzaXN0cyk/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKCdUZWFyaW5nIGRvd24nKTtcbiAgY29uc3QgeyBjb2RlOiBkb3duQ29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGRvd25Db21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gIGlmIChkb3duQ29kZSAhPT0gMCkge1xuICAgIHByaW50RXJyb3IoYFxcblRlYXJkb3duIGZhaWxlZCAoZXhpdCAke2Rvd25Db2RlfSkuIEluc3BlY3QgdGhlIHN0YWNrL2NvbnRhaW5lcnMgYW5kIHJldHJ5LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFN1Y2Nlc3MoJ1RlYXJkb3duIGNvbXBsZXRlLicpO1xufVxuXG4vKipcbiAqIFJ1biB0aGUgZGVwbG95IGNvbW1hbmQgKHJlYWwsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICsgY2FwdHVyZWQpIHdpdGggYVxuICogYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCwgc28gYSBmaXhlZFxuICogcmUtcnVuIHJlc3VtZXMgcmF0aGVyIHRoYW4gc3RhcnRpbmcgb3Zlci4gUmV0dXJucyB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBwbHVzIHRoZVxuICogKHBvc3NpYmx5IGZpeC1hZGp1c3RlZCkgcGFyYW1zLCB3aGljaCB0aGUgY2FsbGVyIG5lZWRzIGZvciBTRVMgZ3VpZGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5EZXBsb3lXaXRoUmV0cnkoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgY3dkOiBzdHJpbmcsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFpT3B0czogeyBwcm92aWRlcj86IHN0cmluZzsgbW9kZWw/OiBzdHJpbmcgfSxcbiAgb3B0czogeyByZXRyaWVzPzogc3RyaW5nOyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgc3VjY2VlZGVkOiBib29sZWFuOyBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+IHtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAxICsgTWF0aC5tYXgoMCwgcGFyc2VJbnQob3B0cy5yZXRyaWVzID8/ICcnLCAxMCkgfHwgMCk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFXUyB0YXJnZXRzIHdpdGggYC0taW5pdCBhdXRvYDogdGhlIGRlcGxveSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgd2hlcmUgdG8gd2F0Y2guXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfSBlbHNlIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHNldHVwLnNoIHJ1bnMgaW5pdC1wbGF0Zm9ybSBpbiBpdHMgZmluYWwgcGhhc2UnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcywnKTtcbiAgICBwcmludEluZm8oJyAgb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKS4gUGFzcyAtLWluaXQgbWFudWFsIHRvIHJ1biBpdCB5b3Vyc2VsZiBpbnN0ZWFkLicpO1xuICB9XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQgPT09ICdzdG9yZS10b2tlbicgfHwgaWQgPT09ICdldmVudHMnKTtcbiAgY29uc3QgcnVubmFibGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiAhaXNSZW1vdGUocy5pZCkpO1xuICBjb25zdCByZW1vdGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiBpc1JlbW90ZShzLmlkKSk7XG4gIGlmIChyZW1vdGUubGVuZ3RoID4gMCkge1xuICAgIGlmICh0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAvLyBFQzIgcnVucyB0aGUgcGxhdGZvcm0gYXMgYSBkZWRpY2F0ZWQgYG1pbmlrdWJlYCB1c2VyIGluc2lkZSB0aGUgaW5zdGFuY2U6IHRoZVxuICAgICAgLy8gY2x1c3RlciwgaXRzIGt1YmVjb25maWcsIGFuZCB0aGUgand0LXNlY3JldCBhbGwgYmVsb25nIHRvIHRoYXQgdXNlciwgYW5kIHRoZVxuICAgICAgLy8gcmVnaXN0ZXIgc3RlcCBidWlsZHMrcHVzaGVzIGltYWdlcyBhZ2FpbnN0IGl0LiBTbyBpdCBNVVNUIHJ1biBvbiB0aGUgYm94IGFzXG4gICAgICAvLyBgbWluaWt1YmVgIOKAlCBwcmludCB0aGUgZXhhY3QgbGFuZGluZyBzZXF1ZW5jZSByYXRoZXIgdGhhbiBhIGJhcmUgY29tbWFuZC5cbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgZmluaXNoIHNldHVwIE9OIHRoZSBpbnN0YW5jZSAoaXQgYnVpbGRzIGltYWdlcyArIHJlYWRzIHRoZSBjbHVzdGVyLCBzbyBpdCcpO1xuICAgICAgcHJpbnRJbmZvKCdjYW5ub3QgcnVuIGZyb20gaGVyZSkuIExhbmQgb24gdGhlIGJveCwgYmVjb21lIHRoZSBgbWluaWt1YmVgIHVzZXIsIHRoZW4gcnVuIGl0OicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAgICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgICBwcmludEluZm8oJyAgc3VkbyAtaXUgbWluaWt1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3ducyB0aGUgY2x1c3RlciArIGRvY2tlcicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGNkIC9vcHQvcGlwZWxpbmUvcGlwZWxpbmUtYnVpbGRlciAgICAgICAgICAgICAgICAjIHRoZSBkZXBsb3llZCBjaGVja291dCcpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgICR7cy5jb21tYW5kfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBla3M6IGluaXQtcGxhdGZvcm0gcG9ydC1mb3J3YXJkcyB0byBzdmMvbmdpbngsIHNvIHJlZ2lzdGVyIHJ1bnMgZnJvbSBhbnl3aGVyZSB3aXRoXG4gICAgICAvLyBrdWJlY3RsIGFjY2VzcyDigJQgbm8gaW4tVlBDIHJlcXVpcmVtZW50IGFuZCBubyB3YWl0aW5nIG9uIHRoZSBBTEIvRE5TLiAoQSAtLXdpdGgtZXZlbnRzXG4gICAgICAvLyBidW5kbGUsIGlmIHByZXNlbnQsIGFkZGl0aW9uYWxseSBuZWVkcyBBV1MgY3JlZHMgKyBhIHJlZ2lzdGVyZWQgcGxhdGZvcm0uKVxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBydW4gd2l0aCBrdWJlY3RsIGFjY2VzcyB0byB0aGUgY2x1c3RlciAoaW4gdGhpcyBvcmRlcik6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICAgIH1cbiAgfVxuICBpZiAocnVubmFibGUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIC8vIFdoZW4gdGhlIGxvYWRzIHdlcmUgcGlja2VkIGludGVyYWN0aXZlbHkgKGF1dG9SdW4pLCB0aGUgdXNlciBhbHJlYWR5IG9wdGVkIGluIOKAlCBza2lwXG4gIC8vIHRoZSByZWR1bmRhbnQgc2Vjb25kIGNvbmZpcm0uIEZsYWctZHJpdmVuIC8gbm9uLWludGVyYWN0aXZlIHJ1bnMgc3RpbGwgZ2F0ZSBoZXJlLlxuICBpZiAob3B0cy5hdXRvUnVuIHx8IGF3YWl0IGNvbmZpcm0oYFxcblJ1biAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgbm93P2AsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgIGlmIChvcHRzLmF1dG9SdW4pIHByaW50SW5mbyhgXFxuUnVubmluZyB0aGUgJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIHlvdSBzZWxlY3RlZOKApmApO1xuICAgIGZvciAoY29uc3QgcyBvZiBydW5uYWJsZSkge1xuICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgIC8vIHJlZ2lzdGVyIChsb2NhbC9taW5pa3ViZSkgbG9ncyBpbnRvIHRoZSBwbGF0Zm9ybSwgc28gaXQgbmVlZHMgdGhlIGFkbWluIGNyZWRzXG4gICAgICAvLyAoUExBVEZPUk1fSURFTlRJRklFUiAvIFBMQVRGT1JNX1BBU1NXT1JEKSBvbiB0b3Agb2YgaXRzIHN0ZXAgZW52LlxuICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgIGNvbnN0IGVudiA9IG5lZWRzQ3JlZHMgPyB7IC4uLnMuZW52LCAuLi5hZG1pbkVudiB9IDogcy5lbnY7XG4gICAgICAvLyBMb2Fkcy9zbW9rZSBhcmUgbm9pc3kgKyBub24taW50ZXJhY3RpdmUg4oaSIHJ1biBRVUlFVCAoY2FwdHVyZSwgc2hvdyBvbmx5IG9uXG4gICAgICAvLyBmYWlsdXJlKS4gRXhjZXB0aW9uOiBhIHJlZ2lzdGVyIHdpdGggbm8gYWRtaW4gY3JlZHMgcHJvbXB0cywgc28gaXQgbXVzdCBzdHJlYW0uXG4gICAgICBjb25zdCBpbnRlcmFjdGl2ZVJlZ2lzdGVyID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyAmJiAhYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUjtcbiAgICAgIGNvbnN0IHF1aWV0ID0gIWludGVyYWN0aXZlUmVnaXN0ZXI7XG4gICAgICBpZiAocXVpZXQpIHByaW50SW5mbyhgJHtzLmNvbW1hbmR9XFxuICDigKZydW5uaW5nIChvdXRwdXQgc2hvd24gb25seSBpZiBpdCBmYWlscylgKTtcbiAgICAgIGVsc2UgcHJpbnRJbmZvKHMuY29tbWFuZCk7XG4gICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChzLmNvbW1hbmQsIGN3ZCwgeyBxdWlldCwgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGlmIChxdWlldCAmJiB0YWlsKSB7IHByaW50RXJyb3IoJ1xcbi0tLSBsYXN0IG91dHB1dCAtLS0nKTsgcHJpbnRJbmZvKHRhaWwpOyB9XG4gICAgICAgIHByaW50RXJyb3IoYFxcblBvc3Qtc3RlcCAnJHtzLmlkfScgZmFpbGVkIChleGl0ICR7Y29kZX0pLiBUaGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQ7IGZpeCBhbmQgcmUtcnVuIHRoZSBzdGVwIG1hbnVhbGx5LmApO1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmludFN1Y2Nlc3MoYCR7cy5pZH0g4pyTYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW50SW5mbygnXFxuU2tpcHBlZCBwb3N0LWluc3RhbGwgc3RlcHMuIFJ1biB0aGUgY29tbWFuZHMgYWJvdmUgbWFudWFsbHkgd2hlbiByZWFkeS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXJzZS1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyAod2hlbiAtLXJlcG8sIG9yIGFjY2VwdGVkIHZpYSB0aGUgaW50ZXJhY3RpdmVcbiAqIG9mZmVyKSwgcmVwb2ludCBjd2QgaW50byBpdCwgYW5kIHZlcmlmeSB0aGUgZGVwbG95IGVudHJ5cG9pbnQgZXhpc3RzLiBPd25zIHRoZVxuICogY3dkL2Jvb3RzdHJhcHBlZCBzdGF0ZS4gU2V0cyBleGl0Q29kZSBvbiBhIGhhcmQgZmFpbHVyZSAoY2xvbmUgZXJyb3IgLyBtaXNzaW5nXG4gKiBlbnRyeXBvaW50KSwgbWF0Y2hpbmcgdGhlIG9sZCBpbmxpbmUgYmVoYXZpb3I7IGEgcGxhaW4gZGVjbGluZSBsZWF2ZXMgZXhpdENvZGVcbiAqIHVudG91Y2hlZC4gUmV0dXJucyBvazpmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBhYm9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcEFuZExvY2F0ZShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBib290c3RyYXBDbWQ6IHN0cmluZyB8IG51bGwsXG4gIHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgc3RhcnRDd2Q6IHN0cmluZyxcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgY3dkOiBzdHJpbmc7IGJvb3RzdHJhcHBlZDogYm9vbGVhbjsgb2s6IGJvb2xlYW4gfT4ge1xuICBsZXQgY3dkID0gc3RhcnRDd2Q7XG4gIGxldCBib290c3RyYXBwZWQgPSBmYWxzZTtcbiAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIuIFJlcG9pbnRzIGN3ZCArIHNldHMgYm9vdHN0cmFwcGVkO1xuICAvLyBgYm9vdHN0cmFwcGVkYCByZWNvcmRzIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGUgY2xvbmUgKHZzLiBhbiBleGlzdGluZyBjaGVja291dCkg4oCUXG4gIC8vIG9ubHkgdGhlbiBjYW4gdGhlIGNhbGxlciBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaCBsb2FkIGZvbGRlcnMuXG4gIGNvbnN0IGJvb3RzdHJhcENsb25lID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IGNtZCA9IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKTtcbiAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCcpO1xuICAgIHByaW50SW5mbyhjbWQpO1xuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGNtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgY2xvbmUgZGlkbid0IGZpbmlzaCAoZXhpdCAke2NvZGV9KS4gRG91YmxlLWNoZWNrIHRoZSByZXBvIFVSTCAvIHJlZiAob3IgeW91ciBuZXR3b3JrKSBhbmQgZ2l2ZSBpdCBhbm90aGVyIGdvLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGN3ZCA9IHBhdGgucmVzb2x2ZShjd2QsIGJvb3RzdHJhcC53b3JrZGlyKTtcbiAgICBib290c3RyYXBwZWQgPSB0cnVlO1xuICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gIGlmIChib290c3RyYXBDbWQpIHtcbiAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gIH1cblxuICAvLyBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kIHdlIGhhdmVuJ3RcbiAgLy8gYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSBzbyBhIGZyZXNoIG1hY2hpbmUgY2FuXG4gIC8vIHByb2NlZWQgd2l0aG91dCByZS1ydW5uaW5nIHdpdGggLS1yZXBvLlxuICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlID0gQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhb3B0cy55ZXM7XG4gICAgaWYgKCFib290c3RyYXBDbWQgJiYgaW50ZXJhY3RpdmUgJiYgZ2l0QXZhaWxhYmxlKCkpIHtcbiAgICAgIHByaW50SW5mbyhgXFxuTG9va3MgbGlrZSB5b3UncmUgbm90IGluc2lkZSBhIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQsIHNvIHRoZSAke3NwZWMubGFiZWx9IGRlcGxveSBzY3JpcHRzIGFyZW4ndCBoZXJlIHlldC5gKTtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtKGBXYW50IG1lIHRvIHNwYXJzZS1jbG9uZSB0aGVtIGludG8gJHtib290c3RyYXAud29ya2Rpcn0gYW5kIGtlZXAgZ29pbmc/YCwgZmFsc2UpKSB7XG4gICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFxcbkkgY291bGRuJ3QgZmluZCAke3NwZWMuZGlyfS8ke3NwZWMuZW50cnlwb2ludH0gZnJvbSAke2N3ZH0uYCk7XG4gICAgICBwcmludEluZm8oJ1R3byBlYXN5IHdheXMgZm9yd2FyZDonKTtcbiAgICAgIHByaW50SW5mbygnICDigKIgY2QgaW50byB5b3VyIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQgYW5kIHJlLXJ1biwgb3InKTtcbiAgICAgIHByaW50SW5mbyhgICDigKIgYWRkIC0tcmVwbyBhbmQgSSdsbCBib290c3RyYXAgYSBmcmVzaCBzcGFyc2UgY2xvbmUgZm9yIHlvdSR7Z2l0QXZhaWxhYmxlKCkgPyAnLicgOiAnIChvbmNlIGdpdCBpcyBpbnN0YWxsZWQpLid9YCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiB0cnVlIH07XG59XG5cbi8qKlxuICogSW50ZXJhY3RpdmUgb3B0LWluIGxvYWRzLCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc28gd2Ugb25seSBhc2sgb25jZSB0aGUgb3BlcmF0b3JcbiAqIGhhcyBhZ3JlZWQgdG8gcHJvY2VlZCkuIFByb21wdHMgcGVyIGxvYWQsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZFxuICogZm9sZGVycyBpbnRvIGEgYm9vdHN0cmFwcGVkIHNwYXJzZSBjbG9uZSwgdGhlbiByZS1yZXNvbHZlcyB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzXG4gKiB3aXRoIHRoZSBzZWxlY3Rpb25zLiBSZXR1cm5zIHRoZSBjaG9zZW4gaWRzICsgdGhlIHJlY29tcHV0ZWQgc3RlcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBjd2Q6IHN0cmluZyxcbiAgYm9vdHN0cmFwcGVkOiBib29sZWFuLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIHBvc3RTdGVwRmxhZ3M6IHsgaW5pdDogYm9vbGVhbjsgYXV0b0luaXQ6IGJvb2xlYW47IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuOyBzbW9rZVRlc3Q6IGJvb2xlYW47IGV2ZW50czogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0sXG4pOiBQcm9taXNlPHsgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdOyBzdGVwczogUG9zdFN0ZXBbXTsgc2tpcHBlZDogU2tpcHBlZFN0ZXBbXSB9PiB7XG4gIGNvbnN0IHByb21wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcGx1Z2luczogJ0xvYWQgcGx1Z2lucz8nLFxuICAgIHNhbXBsZXM6ICdMb2FkIHNhbXBsZSBwaXBlbGluZXM/JyxcbiAgICBjb21wbGlhbmNlOiAnTG9hZCBjb21wbGlhbmNlIHJ1bGVzPycsXG4gIH07XG4gIHByaW50U2VjdGlvbignT3B0aW9uYWwgcG9zdC1pbnN0YWxsIGxvYWRzJyk7XG4gIGNvbnN0IGNob3Nlbjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoYXdhaXQgY29uZmlybShwcm9tcHRzW3MuaWRdID8/IGBMb2FkICR7cy5pZH0/YCwgZmFsc2UpKSBjaG9zZW4ucHVzaChzLmlkKTtcbiAgfVxuICAvLyBBZGRpdGl2ZSBzcGFyc2UgcmUtc3luYzogbWF0ZXJpYWxpemUgT05MWSB0aGUgcGlja2VkIGxvYWRzJyBmb2xkZXJzICh0aGUgcGFydGlhbFxuICAvLyBjbG9uZSBmZXRjaGVzIHRoZWlyIGJsb2JzIG9uIGRlbWFuZCkuIE9ubHkgd2hlbiB3ZSBjcmVhdGVkIGEgU1BBUlNFIGNsb25lIOKAlCBhXG4gIC8vIG5vcm1hbCBjaGVja291dCBhbHJlYWR5IGhhcyBldmVyeSBmb2xkZXIsIGFuZCB0aGUgZ2l0PDIuMjcgZnVsbC1jbG9uZSBmYWxsYmFja1xuICAvLyAoYm9vdHN0cmFwLmZ1bGwpIGlzIG5vbi1zcGFyc2UsIHdoZXJlIGBzcGFyc2UtY2hlY2tvdXQgYWRkYCB3b3VsZCBzd2l0Y2ggaXQgdG9cbiAgLy8gY29uZSBtb2RlIGFuZCBQUlVORSB0aGUgYWxyZWFkeS1tYXRlcmlhbGl6ZWQgZGVwbG95IGZvbGRlcnMuXG4gIGlmIChib290c3RyYXBwZWQgJiYgIWJvb3RzdHJhcC5mdWxsKSB7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBjaG9zZW4pLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgc2VsZWN0ZWQgbG9hZCBmb2xkZXJzJyk7XG4gICAgICBjb25zdCBhZGRDbWQgPSBgZ2l0IHNwYXJzZS1jaGVja291dCBhZGQgJHthYnNlbnQubWFwKChwKSA9PiBgJyR7cH0nYCkuam9pbignICcpfSAmJiBnaXQgY2hlY2tvdXQgJyR7Ym9vdHN0cmFwLnJlZn0nYDtcbiAgICAgIHByaW50SW5mbyhhZGRDbWQpO1xuICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoYWRkQ21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGUgbWF0Y2hpbmcgbG9hZCBzdGVwKHMpIG1heSBmYWlsLiBSZS1ydW4gd2l0aCAtLXJlcG8gdG8gcmVmcmVzaCB0aGUgY2xvbmUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgdGFyZ2V0LFxuICAgIHVybCxcbiAgICByZWdpb24sXG4gICAgZW5hYmxlZExvYWRJZHM6IGNob3NlbixcbiAgICAuLi5wb3N0U3RlcEZsYWdzLFxuICAgIGJ1aWxkQm9vdHN0cmFwOiBwb3N0U3RlcEZsYWdzLmJ1aWxkQm9vdHN0cmFwIHx8IGNob3Nlbi5pbmNsdWRlcygncGx1Z2lucycpLFxuICB9KTtcbiAgcmV0dXJuIHsgZW5hYmxlZExvYWRJZHM6IGNob3Nlbiwgc3RlcHM6IHJlc29sdmVkLnN0ZXBzLCBza2lwcGVkOiByZXNvbHZlZC5za2lwcGVkIH07XG59XG5cbi8qKlxuICogUmVkYWN0IHNlY3JldCBwYXJhbSB2YWx1ZXMgKGUuZy4gdGhlIGdoY3IgdG9rZW4pIGZyb20gY2FwdHVyZWQgZGVwbG95IG91dHB1dFxuICogYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIExMTSBmb3IgZGlhZ25vc2lzLiBUaGUgZGVwbG95IHJ1bnMgd2l0aCBzZWNyZXRzXG4gKiB1bm1hc2tlZCwgc28gYWx0aG91Z2ggdGhlIGN1cnJlbnQgc2NyaXB0cyBkb24ndCBlY2hvIHRoZW0sIHRoaXMga2VlcHMgYSBmdXR1cmVcbiAqIHNjcmlwdCdzIHN0cmF5IGVjaG8gKG9yIGEgdmVyYm9zZSBzdWItdG9vbCkgZnJvbSBjcm9zc2luZyB0aGUgdGhpcmQtcGFydHktTExNXG4gKiBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gcmVkYWN0U2VjcmV0cyh0ZXh0OiBzdHJpbmcsIHNwZWM6IFRhcmdldFNwZWMsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBpbnB1dCBvZiBbLi4uc3BlYy5yZXF1aXJlZCwgLi4uc3BlYy5vcHRpb25hbF0pIHtcbiAgICBpZiAoIWlucHV0LnNlY3JldCkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbaW5wdXQua2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPj0gNCkgb3V0ID0gb3V0LnNwbGl0KHZhbHVlKS5qb2luKCcqKionKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHByb3Zpc2lvbmAgY29tbWFuZCDigJQgYW4gQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgUGlwZWxpbmVcbiAqIEJ1aWxkZXIgUExBVEZPUk0gKGxvY2FsL21pbmlrdWJlL0VDMi9FS1MpLiBJdCBwcmludHMgdGhlIGFzc2VtYmxlZCBwbGFuXG4gKiAocHJlcmVxIGNoZWNrcywgTkwtZ29hbCBwYXJzaW5nLCBjb21tYW5kIGFzc2VtYmx5KSBhbmQgdGhlbiBERVBMT1lTLCBnYXRlZCBieVxuICogY29uZmlybWF0aW9uIHByb21wdHMgKGAtLXllc2AgdG8gYXV0by1hY2NlcHQ7IGAtLWpzb25gIGlzIHRoZSBvbmx5IG5vbi1leGVjdXRpbmdcbiAqIG1vZGUsIHByaW50aW5nIHRoZSBwbGFuIGZvciB0b29saW5nKS4gV2l0aCBgLS1yZXBvYCBpdCBjYW4gYm9vdHN0cmFwIGEgZnJlc2hcbiAqIG1hY2hpbmUgYnkgc3BhcnNlbHkgY2xvbmluZyBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICtcbiAqIG9wdGlvbnMgbmVlZCwgdGhlbiBydW5zIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgYWRtaW4sIG9wdC1pbiBsb2FkcyxcbiAqIHNtb2tlIHRlc3QsIGN1c3RvbSBjb21tYW5kcykuIGAtLXRlYXJkb3duYCByZW1vdmVzIGEgZGVwbG95bWVudCBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgcGxhdGZvcm0gKGxvY2FsL21pbmlrdWJlL0VDMi9FS1MpOiBkZXBsb3lzIGl0IChnYXRlZCBieSBjb25maXJtYXRpb24gcHJvbXB0cyksIG9yIC0tdGVhcmRvd24gdG8gcmVtb3ZlJylcbiAgICAub3B0aW9uKCctdCwgLS10YXJnZXQgPHRhcmdldD4nLCBgRGVwbG95IHRhcmdldDogJHtUQVJHRVRfSURTLmpvaW4oJyB8ICcpfWApXG4gICAgLm9wdGlvbignLXAsIC0tcHJvbXB0IDx0ZXh0PicsICdOYXR1cmFsLWxhbmd1YWdlIGdvYWwgKHBhcnNlZCBpbnRvIHBhcmFtcyB3aGVuIGFuIEFJIGtleSBpcyBzZXQpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1kb21haW4gPGRvbWFpbj4nLCAnRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1ob3N0ZWQtem9uZS1pZCA8aWQ+JywgJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0tZGVwbG95LW1vZGUgPG1vZGU+JywgJ3B1YmxpYyB8IHByaXZhdGUgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWtleS1wYWlyIDxuYW1lPicsICdFQzIga2V5IHBhaXIgKEVDMiknKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAnRUMyIGluc3RhbmNlIHR5cGUgKEVDMiknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChFQzIpIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlciAoc2V0IGl0IHRvIHJ1biBhIHNlY29uZCBlbnZpcm9ubWVudCknKVxuICAgIC5vcHRpb24oJy0tY2x1c3Rlci1uYW1lIDxuYW1lPicsICdFS1MgY2x1c3RlciBuYW1lIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlcicpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWluaXQgPG1vZGU+JywgJ1Bvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uOiBhdXRvIChERUZBVUxUIOKAlCByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXM7IG9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdCksIG1hbnVhbCAoZG9uXFwndCBzZWxmLWluaXQg4oCUIHN1cmZhY2UgdGhlIHN0ZXAgZm9yIHlvdSB0byBydW4sIGUuZy4gdG8gc2V0IHJlYWwgYWRtaW4gY3JlZHMpLCBvciBza2lwIChkbyBub3RoaW5nKS4gbG9jYWwvbWluaWt1YmUvZWtzIHJ1biBpbml0IHZpYSBwcm92aXNpb24gdW5sZXNzIHNraXAuJylcbiAgICAvLyBEZXByZWNhdGVkIGFsaWFzZXMg4oCUIGtlcHQgd29ya2luZyBmb3IgYmFjay1jb21wYXQ7IC0taW5pdCBpcyB0aGUgZG9jdW1lbnRlZCBmb3JtLlxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBza2lwJylcbiAgICAub3B0aW9uKCctLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBhdXRvJylcbiAgICAub3B0aW9uKCctLW5vLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBtYW51YWwnKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgcGxhbiBhcyBKU09OIGFuZCBleGl0IFdJVEhPVVQgcnVubmluZyAodGhlIG9ubHkgbm9uLWV4ZWN1dGluZyBtb2RlIOKAlCBmb3IgdG9vbGluZy9DSSBpbnNwZWN0aW9uKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc2luZ2xlIHBvc3QtZGVwbG95IGluaXQgbW9kZSAoYXV0b3xtYW51YWx8c2tpcCkgZnJvbSAtLWluaXQgb3IgaXRzXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgYWxpYXNlcy4gVHdvIGludGVybmFsIHNpZ25hbHMgZGVyaXZlIGZyb20gaXQ6IHdoZXRoZXIgaW5pdCBoYXBwZW5zIGF0XG4gICAgICAgIC8vIGFsbCwgYW5kIHdoZXRoZXIgdGhlIERFUExPWSBzZWxmLXJ1bnMgaXQgKHZzLiB3ZSBzdXJmYWNlIGl0KS5cbiAgICAgICAgY29uc3QgaW5pdE1vZGUgPSByZXNvbHZlSW5pdE1vZGUob3B0aW9ucyk7XG4gICAgICAgIGlmIChpbml0TW9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYEludmFsaWQgLS1pbml0IHZhbHVlICcke1N0cmluZyhvcHRpb25zLmluaXQpfScuIFVzZSBvbmUgb2Y6ICR7SU5JVF9NT0RFUy5qb2luKCcgfCAnKX0uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRFbmFibGVkID0gaW5pdE1vZGUgIT09ICdza2lwJzsgLy8gc2tpcCDihpIgbm8gcmVnaXN0ZXIvbG9hZHMgYXQgYWxsXG4gICAgICAgIGNvbnN0IHNlbGZJbml0ID0gaW5pdE1vZGUgPT09ICdhdXRvJzsgLy8gYXV0byDihpIgdGhlIGRlcGxveSBpbml0aWFsaXplcyBpdHNlbGZcblxuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgLy8gRGVwbG95LXRpbWUgcmVzb3VyY2UgaWRlbnRpdHk6IGVjMiBlbWl0cyAtLXN0YWNrLW5hbWUgKGtleSBzdGFja05hbWUpLCBla3MgZW1pdHNcbiAgICAgICAgICAvLyAtLWNsdXN0ZXItbmFtZSAoa2V5IGNsdXN0ZXJOYW1lKS4gQm90aCBhbHNvIGRyaXZlIHRlYXJkb3duLiBVbmRlZmluZWQg4oaSIGRlZmF1bHRzLlxuICAgICAgICAgIHN0YWNrTmFtZTogb3B0aW9ucy5zdGFja05hbWUsXG4gICAgICAgICAgY2x1c3Rlck5hbWU6IG9wdGlvbnMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBlbWFpbC9ub0VtYWlsIGFyZSBjb2VyY2VkIEFGVEVSIHRoZSBOTCBtZXJnZSBiZWxvdyDigJQgcGFyc2VHb2FsIGNhbiByZXR1cm5cbiAgICAgICAgICAvLyBgZW1haWxgLCBzbyBwcmUtY29lcmNpbmcgaGVyZSAobmV2ZXItdW5kZWZpbmVkKSB3b3VsZCBsZXQgdGhlIG1lcmdlJ3NcbiAgICAgICAgICAvLyBgPT09IHVuZGVmaW5lZGAgZ3VhcmQgc2lsZW50bHkgZHJvcCBhbiBBSS1wYXJzZWQgZW1haWwgY2hvaWNlLiBMZWZ0IG91dCBvZlxuICAgICAgICAgIC8vIHRoaXMgbGl0ZXJhbCBvbiBwdXJwb3NlOyByZXNvbHZlZCBhIGZldyBsaW5lcyBkb3duLlxuICAgICAgICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgICAgICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgICAgICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICAgICAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAgICAgICAvLyBUaGUgQVdTIGRlcGxveXMgc2VsZi1pbml0IGJ5IGRlZmF1bHQgKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbFxuICAgICAgICAgIC8vIHBoYXNlKSwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGAgd2hlbiB0aGUgbW9kZSBpcyBOT1QgYXV0b1xuICAgICAgICAgIC8vIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBkZXBsb3kgaW5pdCBpdHNlbGZcIikuIGAtLWF1dG8taW5pdGAgKGEgbm8tb3AgcmVhZmZpcm0pXG4gICAgICAgICAgLy8gaXMgbmV2ZXIgZW1pdHRlZC4gT25seSBlYzIvZWtzIGNhcnJ5IHRoZXNlIGZsYWdzIGluIHRoZWlyIHNwZWM7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgICAgICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gdGhlIEFXUyB0YXJnZXRzIGluXG4gICAgICAgICAgLy8gcmVzb2x2ZVBvc3RTdGVwcywgc28gYSBzZWxmLWluaXRpYWxpemluZyBlYzIvZWtzIGRlcGxveSBkb2Vzbid0IGFsc28gcHJpbnQgYSBtYW51YWxcbiAgICAgICAgICAvLyByZWdpc3RlciBzdGVwLiBGb3IgbWFudWFsIG1vZGUgKG9yIGxvY2FsL21pbmlrdWJlKSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIC0tZGlhZ25vc2UgaXMgYSByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlOiByZXR1cm4gd2hldGhlciBvciBub3QgYSB0YXJnZXQgd2FzXG4gICAgICAgICAgLy8gZ2l2ZW4sIHNvIGl0IG5ldmVyIGZhbGxzIHRocm91Z2ggaW50byBhIChwb3NzaWJseSAtLXllcykgZGVwbG95LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChzZXR1cC5zaCdzIGZpbmFsIHBoYXNlIGhhcmRjb2Rlc1xuICAgICAgICAgIC8vIExPQURfKj15KS4gc2V0dXAuc2ggcnVucyB0aGUgbG9hZHMgaXRzZWxmIChvdmVyIGEga3ViZWN0bCBwb3J0LWZvcndhcmQpLCBidXQgd2VcbiAgICAgICAgICAvLyBzdGlsbCByZXNvbHZlIHRoZW0gaGVyZSBzbyB0aGUgc3BhcnNlIGNsb25lIGZldGNoZXMgdGhlIGZvbGRlcnMgc2V0dXAuc2ggYnVpbGRzXG4gICAgICAgICAgLy8gZnJvbS4gRXhwbGljaXQgYC0td2l0aC0qYCBmbGFncyBvdmVycmlkZTsgYC0taW5pdCBtYW51YWxgIC8gYC0taW5pdCBza2lwYCBvcHQgb3V0LlxuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAgIHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgPSBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluaWt1YmUvbG9jYWwga2VlcCB0aGUgaW50ZXJhY3RpdmUgcGlja2VyIChsb2NhbC1kZXY7IG5vIGAtLWluaXQgYXV0b2AgbG9hZCBwYXJpdHkpLlxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIC8vIEhhcmQtcmVxdWlyZSBwbHVnaW4gcHJlcmVxcyAoZS5nLiB5cSBvbiBtaW5pa3ViZSkgb25seSB3aGVuIHBsdWdpbnMgaXMgRVhQTElDSVRMWVxuICAgICAgICAvLyBzZWxlY3RlZCDigJQgTk9UIG9uIHRoZSB3aWxsUHJvbXB0TG9hZHMgZ3Vlc3MsIHdoaWNoIHdvdWxkIGJsb2NrL3Byb21wdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIHVzZXIgaGFzIGV2ZW4gYmVlbiBhc2tlZCB3aGV0aGVyIHRoZXkgd2FudCBwbHVnaW5zLiBJZiB0aGV5IHBpY2sgcGx1Z2lucyBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0LCB3ZSByZS1jaGVjayArIG9mZmVyIHRvIGZldGNoIHJpZ2h0IGFmdGVyIHRoYXQgc2VsZWN0aW9uIChiZWxvdykuXG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIC8vIEludGVyYWN0aXZlIGxvYWRzIGFyZSBjaG9zZW4gQUZURVIgdGhlIGNsb25lLCBzbyB0aGUgY2xvbmUgc3RheXMgbWluaW1hbCDigJRcbiAgICAgICAgLy8gZWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyBmZXRjaGVkIHRoZW4gdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICBjb25zdCBzcGFyc2VQYXRocyA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgZW5hYmxlZExvYWRJZHMpO1xuICAgICAgICBjb25zdCBib290c3RyYXAgPSByZXNvbHZlQm9vdHN0cmFwKFxuICAgICAgICAgIHsgcmVwbzogdHlwZW9mIG9wdGlvbnMucmVwbyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcG8gOiB1bmRlZmluZWQsIHJlZjogb3B0aW9ucy5yZWYsIHdvcmtkaXI6IG9wdGlvbnMud29ya2RpciwgZnVsbDogIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSB9LFxuICAgICAgICAgIHNwYXJzZVBhdGhzLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib290c3RyYXBDbWQgPSB3YW50Qm9vdHN0cmFwID8gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApIDogbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIFJlLXJlc29sdmVkXG4gICAgICAgIC8vIGFmdGVyIHRoZSBwb3N0LWNsb25lIGxvYWQgcHJvbXB0cyAoc2VlIGJlbG93KSB3aGVuIHRob3NlIHJ1biBpbnRlcmFjdGl2ZWx5LlxuICAgICAgICBsZXQgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbiBiZWxvdykuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBbnkgbWlzc2luZyByZXF1aXJlZCBwcmVyZXEgdGhhdCdzIGEgc2luZ2xlIHN0YXRpYyBiaW5hcnkgKGUuZy4geXEpXG4gICAgICAgIC8vIGNhbiBiZSBmZXRjaGVkIGludG8gdGhlIHRvb2xzIGNhY2hlIGluc3RlYWQgb2YgYSBzeXN0ZW0gaW5zdGFsbCDigJQgbm9cbiAgICAgICAgLy8gYnJldy9hcHQuIE9mZmVyIGl0LCB0aGVuIHJlLWNoZWNrICh0aGUgY2FjaGUgZGlyIGlzIGFscmVhZHkgb24gUEFUSCkuXG4gICAgICAgIGNvbnN0IGZldGNoYWJsZSA9IHByZXJlcXMuZmlsdGVyKChjKSA9PiAhYy5vayAmJiBjLnJlcXVpcmVkICYmIGlzRmV0Y2hhYmxlKGMubmFtZSkpO1xuICAgICAgICBpZiAoZmV0Y2hhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBuYW1lcyA9IGZldGNoYWJsZS5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtuYW1lc30gbm90IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIG9mZmljaWFsIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0gKG5vIHN5c3RlbSBpbnN0YWxsKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBmZXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgICAgICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgbWFudWFsbHkgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgICAvLyBOb3cgdGhhdCBwbHVnaW5zIG1heSBoYXZlIGJlZW4gcGlja2VkLCByZS1jaGVjayB0aGUgcGx1Z2luLXNwZWNpZmljIHByZXJlcXMgd2VcbiAgICAgICAgICAvLyBkZWxpYmVyYXRlbHkgZGlkbid0IGhhcmQtcmVxdWlyZSB1cCBmcm9udCAoZS5nLiB5cSBmb3IgbWluaWt1YmUgcGx1Z2luIGJ1aWxkcykuXG4gICAgICAgICAgLy8gT2ZmZXIgdG8gZmV0Y2ggYW55IGZldGNoYWJsZSBvbmU7IHdhcm4gKGRvbid0IGJsb2NrIOKAlCB0aGUgcGxhdGZvcm0gc3RpbGwgZGVwbG95cylcbiAgICAgICAgICAvLyBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCwgc28gdGhlIGxhdGVyIHBsdWdpbiBidWlsZCBkb2Vzbid0IGZhaWwgb3BhcXVlbHkuXG4gICAgICAgICAgaWYgKGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5HYXBzID0gcGx1Z2luUHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgIXByZXJlcXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBjLm5hbWUpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBwbHVnaW5HYXBzKSB7XG4gICAgICAgICAgICAgIGlmIChpc0ZldGNoYWJsZShjLm5hbWUpICYmIGF3YWl0IGNvbmZpcm0oYFxcbiR7Yy5uYW1lfSBpcyBuZWVkZWQgdG8gYnVpbGQgcGx1Z2lucyBidXQgaXNuJ3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IGJlZm9yZSB0aGUgcGx1Z2luIGJ1aWxkIHJ1bnMuYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGAke2MubmFtZX0gbWlzc2luZyDigJQgdGhlIHBsdWdpbiBsb2FkL2J1aWxkIHN0ZXAgbWF5IGZhaWwuICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9jYWwvbWluaWt1YmUncyBzZXR1cC5zaCBSRVFVSVJFUyBhIGAuZW52YCBhbmQgYWJvcnRzIHdpdGhvdXQgaXQg4oCUIGNyZWF0ZVxuICAgICAgICAvLyBpdCBmcm9tIC5lbnYuZXhhbXBsZSB3aXRoIGdlbmVyYXRlZCBzZWNyZXRzIHNvIHRoZSBkZXBsb3kgaXMgbm9uLWludGVyYWN0aXZlLlxuICAgICAgICAvLyBlYzIgYW5kIGVrcyBkb24ndCBoYXZlIHByb3Zpc2lvbiBnZW5lcmF0ZSBhIGxvY2FsIGAuZW52YDogZWMyIGJvb3RzdHJhcHMgaXRzXG4gICAgICAgIC8vIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLCBhbmQgZWtzJ3Mgc2V0dXAuc2ggY3JlYXRlcyB0aGUgazhzIHNlY3JldHMgaXRzZWxmXG4gICAgICAgIC8vIChhIGRlcGxveS9hd3MvZWtzLy5lbnYuZXhhbXBsZSArIHNlY3JldCBzdGVwIGlzIGEgc2V0dXAuc2ggVE9ETykuXG4gICAgICAgIGlmICgodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgJiYgZW52RmlsZU1pc3NpbmcoY3dkLCBzcGVjLmRpcikpIHtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtzcGVjLmRpcn0vLmVudiBub3QgZm91bmQg4oCUIGNyZWF0ZSBpdCBmcm9tIC5lbnYuZXhhbXBsZSAoZ2VuZXJhdGVzIHNlY3JldHM7IGVkaXQgbGF0ZXIgZm9yIG9wdGlvbmFsIGludGVncmF0aW9ucyBsaWtlIE9BdXRoKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBjcmVhdGVFbnZGaWxlKGN3ZCwgc3BlYy5kaXIpO1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKGBDcmVhdGVkICR7c3BlYy5kaXJ9Ly5lbnYg4oCUICR7bn0gc2VjcmV0KHMpIGdlbmVyYXRlZC5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdDb250aW51aW5nIHdpdGhvdXQgLmVudiDigJQgc2V0dXAuc2ggd2lsbCBhYm9ydCBpZiBpdCBzdGF5cyBtaXNzaW5nLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA3Yy4gUnVuIHRoZSBkZXBsb3kgd2l0aCBhIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIChzZWUgcnVuRGVwbG95V2l0aFJldHJ5KS5cbiAgICAgICAgY29uc3QgeyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9ID0gYXdhaXQgcnVuRGVwbG95V2l0aFJldHJ5KHNwZWMsIHVybCwgY3dkLCBwYXJhbXMsIGFpT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9la3MgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2VrcycpICYmIHJ1blBhcmFtcy5ub0VtYWlsICE9PSB0cnVlO1xuICAgICAgICBpZiAoc2VzUHJvdmlzaW9uZWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1NFUyDigJQgbmV4dCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzZXNQb3N0RGVwbG95R3VpZGFuY2UoKSkgcHJpbnRJbmZvKGDigKIgJHtsaW5lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2UuIFZlcmlmeSBoZWFsdGggKENSRUFURV9DT01QTEVURSAhPSBzZXJ2aW5nKS5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignVmVyaWZ5aW5nIGhlYWx0aCcpO1xuICAgICAgICAgIC8vIE1pbmlrdWJlIHJlYWNoZXMgdGhlIGdhdGV3YXkgdmlhIGEga3ViZWN0bCBwb3J0LWZvcndhcmQgdGhhdCBzZXR1cC5zaFxuICAgICAgICAgIC8vIGJhY2tncm91bmRzIGFuZCB0aGF0IGNhbiBkaWUvZmFpbCB0byBiaW5kIOKAlCAocmUpc3RhcnQgaXQgYmVmb3JlIHBvbGxpbmdcbiAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBzaXQgYXQgdGhlIGdhdGUgb24gYSBkZWFkIGZvcndhcmQgd2hpbGUgdGhlIHBvZHMgYXJlIGZpbmUuXG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgICAgICAgICAgYXdhaXQgZW5zdXJlTWluaWt1YmVHYXRld2F5KHVybCwgeyBvbkluZm86IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50SW5mbyhgUG9sbGluZyAke3VybH0vaGVhbHRoIOKApmApO1xuICAgICAgICAgIC8vIEZyZXNoIEVLUyBsZWdpdGltYXRlbHkgbmVlZHMgbG9uZ2VyIHRoYW4gdGhlIDMwMHMgZGVmYXVsdDogS2FycGVudGVyIHByb3Zpc2lvbnNcbiAgICAgICAgICAvLyBub2RlcywgfjEwIHNlcnZpY2VzIGNvbGQtcHVsbCBpbWFnZXMsIHRoZSBBTEIgcHJvdmlzaW9ucyAofjItMyBtaW4pLCBhbmQgdGhlXG4gICAgICAgICAgLy8gUm91dGUgNTMgYWxpYXMgcHJvcGFnYXRlcy4gR2l2ZSBpdCAxNSBtaW4gYmVmb3JlIHN1cmZhY2luZyB0aGUgbm90LXJlYWNoYWJsZSBub3RlLlxuICAgICAgICAgIGNvbnN0IGhlYWx0aFRpbWVvdXRNcyA9IHRhcmdldCA9PT0gJ2VrcycgPyA5MDBfMDAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGhlYWx0aCA9IGF3YWl0IHdhaXRIZWFsdGh5KHVybCwgeyB0aW1lb3V0TXM6IGhlYWx0aFRpbWVvdXRNcywgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAgICAgICAgIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSAmJiBoZWFsdGgucmVhZHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRUtTIGluc3RlYWQgb2YgYXV0by1ydW5uaW5nIChhbmQgZmFpbGluZykgdGhlbSBsb2NhbGx5LlxuICAgICAgICAvLyBhdXRvUnVuIChza2lwIHRoZSBzZWNvbmQgY29uZmlybSkgb25seSB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IFBJQ0tFRCBhIGxvYWQgaW4gdGhlXG4gICAgICAgIC8vIGludGVyYWN0aXZlIHByb21wdCDigJQgZGVjbGluaW5nIGV2ZXJ5IGxvYWQgc2hvdWxkbid0IHNpbGVudGx5IHJ1biByZWdpc3RlciB1bnByb21wdGVkLlxuICAgICAgICBjb25zdCBhdXRvUmFuTG9hZHMgPSB3aWxsUHJvbXB0TG9hZHMgJiYgZW5hYmxlZExvYWRJZHMubGVuZ3RoID4gMDtcbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogYXV0b1JhbkxvYWRzLCBhdXRvSW5pdDogcG9zdFN0ZXBGbGFncy5hdXRvSW5pdCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAwD1B,OAAO,CAAC,WAAW;IA+Cb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7G,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5F,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWpG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3F,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK9E,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnG,SAAS,IAAI,MAAM;IACnB,UAAU,IAAI,MAAM;IACpB,eAAe,IAAI,OAAO;IAE1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAezB"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAwD1B,OAAO,CAAC,WAAW;IAkDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7G,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5F,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWpG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3F,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK9E,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnG,SAAS,IAAI,MAAM;IACnB,UAAU,IAAI,MAAM;IACpB,eAAe,IAAI,OAAO;IAE1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAezB"}