@pagopa/dx-cli 0.24.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +14 -0
  2. package/bin/index.js +13 -3
  3. package/dist/adapters/azure/cloud-account-service.js +169 -92
  4. package/dist/adapters/azure/locations.d.ts +5 -1
  5. package/dist/adapters/azure/locations.js +1 -1
  6. package/dist/adapters/azure-monitor/instrumentation.d.ts +26 -0
  7. package/dist/adapters/azure-monitor/instrumentation.js +84 -0
  8. package/dist/adapters/azure-monitor/telemetry.d.ts +19 -0
  9. package/dist/adapters/azure-monitor/telemetry.js +28 -0
  10. package/dist/adapters/commander/commands/add.d.ts +32 -7
  11. package/dist/adapters/commander/commands/add.js +197 -15
  12. package/dist/adapters/commander/commands/doctor.js +4 -1
  13. package/dist/adapters/commander/commands/init.js +64 -15
  14. package/dist/adapters/github/github-repo.js +20 -2
  15. package/dist/adapters/octokit/index.d.ts +12 -0
  16. package/dist/adapters/octokit/index.js +26 -2
  17. package/dist/adapters/plop/actions/setup-pnpm.js +5 -1
  18. package/dist/adapters/plop/actions/sync-repository-environments.d.ts +15 -0
  19. package/dist/adapters/plop/actions/sync-repository-environments.js +98 -0
  20. package/dist/adapters/plop/generators/environment/actions.js +4 -1
  21. package/dist/adapters/plop/generators/environment/index.d.ts +3 -3
  22. package/dist/adapters/plop/generators/environment/index.js +6 -3
  23. package/dist/adapters/plop/generators/environment/prompts.d.ts +38 -0
  24. package/dist/adapters/plop/generators/environment/prompts.js +236 -91
  25. package/dist/adapters/plop/index.d.ts +3 -3
  26. package/dist/adapters/plop/index.js +5 -5
  27. package/dist/domain/authorization.js +4 -4
  28. package/dist/domain/environment.d.ts +6 -1
  29. package/dist/domain/environment.js +1 -1
  30. package/dist/index.js +132 -8
  31. package/package.json +24 -16
  32. package/templates/environment/workflow/_release-terraform-apply-bootstrapper-{{env.name}}.yaml.hbs +145 -2
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import chalk from "chalk";
11
11
  import { Command } from "commander";
12
+ import process from "node:process";
12
13
  import { runDoctor } from "../../../domain/doctor.js";
13
14
  import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
14
15
  const formatCheck = (check) => check.isValid
@@ -28,6 +29,8 @@ export const makeDoctorCommand = (dependencies, config, env) => new Command()
28
29
  const presenter = createCommandPresenter(outputMode);
29
30
  const result = await runDoctor(dependencies, config);
30
31
  reportDoctorResult(presenter, outputMode)(result);
32
+ // Use process.exitCode instead of process.exit() so that the finally
33
+ // block in runCli() can flush telemetry before the process terminates.
31
34
  process.exitCode = result.hasErrors ? 1 : 0;
32
35
  });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9kb2N0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXNCLEVBQVUsRUFBRSxDQUNyRCxLQUFLLENBQUMsT0FBTztJQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFM0MsTUFBTSxrQkFBa0IsR0FDdEIsQ0FBQyxTQUEyQixFQUFFLFVBQTJCLEVBQUUsRUFBRSxDQUM3RCxDQUFDLE1BQW9CLEVBQVEsRUFBRTtJQUM3QixTQUFTLENBQUMsWUFBWSxDQUNwQixVQUFVLEtBQUssTUFBTTtRQUNuQixDQUFDLENBQUMsTUFBTTtRQUNSLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQzlDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixZQUEwQixFQUMxQixNQUFjLEVBQ2QsR0FBVyxFQUNGLEVBQUUsQ0FDWCxJQUFJLE9BQU8sRUFBRTtLQUNWLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDZCxXQUFXLENBQ1YsK0RBQStELENBQ2hFO0tBQ0EsTUFBTSxDQUFDLEtBQUs7SUFDWCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBaUIsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXJELGtCQUFrQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsRCxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZG9jdG9yYCBDb21tYW5kZXIgY29tbWFuZC5cbiAqXG4gKiBWZXJpZmllcyB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhbmQgcm91dGVzIHRoZSBvdXRjb21lIHRocm91Z2ggdGhlIHNoYXJlZFxuICogQ29tbWFuZFByZXNlbnRlciBwb3J0LiBKU09OIG1vZGUgZW1pdHMgdGhlIHN0cnVjdHVyZWQgcmVzdWx0OyB0ZXh0IG1vZGUgZW1pdHNcbiAqIGEgaHVtYW4tcmVhZGFibGUgcGVyLWNoZWNrIHN1bW1hcnkuIFRoZSBleGl0IGNvZGUgcmVmbGVjdHMgd2hldGhlciBhbnkgY2hlY2tcbiAqIGZhaWxlZCwgbWlycm9yaW5nIHRoZSBsaW50ZXIgY29udmVudGlvbiAoYSBzdWNjZXNzZnVsIHJ1biBjYW4gc3RpbGwgcmVwb3J0XG4gKiBwcm9ibGVtcykuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdG9yUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kb2N0b3IuanNcIjtcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkNoZWNrIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi92YWxpZGF0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBydW5Eb2N0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RvY3Rvci5qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29tbWFuZFByZXNlbnRlcixcbiAgcmVzb2x2ZU91dHB1dE1vZGUsXG59IGZyb20gXCIuLi9wcmVzZW50ZXJzL2luZGV4LmpzXCI7XG5cbmNvbnN0IGZvcm1hdENoZWNrID0gKGNoZWNrOiBWYWxpZGF0aW9uQ2hlY2spOiBzdHJpbmcgPT5cbiAgY2hlY2suaXNWYWxpZFxuICAgID8gY2hhbGsuZ3JlZW4oYOKchSAke2NoZWNrLnN1Y2Nlc3NNZXNzYWdlfWApXG4gICAgOiBjaGFsay5yZWQoYOKdjCAke2NoZWNrLmVycm9yTWVzc2FnZX1gKTtcblxuY29uc3QgcmVwb3J0RG9jdG9yUmVzdWx0ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogRG9jdG9yUmVzdWx0KTogdm9pZCA9PiB7XG4gICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChcbiAgICAgIG91dHB1dE1vZGUgPT09IFwianNvblwiXG4gICAgICAgID8gcmVzdWx0XG4gICAgICAgIDogcmVzdWx0LmNoZWNrcy5tYXAoZm9ybWF0Q2hlY2spLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG1ha2VEb2N0b3JDb21tYW5kID0gKFxuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY2llcyxcbiAgY29uZmlnOiBDb25maWcsXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJkb2N0b3JcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIlZlcmlmeSB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhY2NvcmRpbmcgdG8gdGhlIERldkV4IGd1aWRlbGluZXNcIixcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Eb2N0b3IoZGVwZW5kZW5jaWVzLCBjb25maWcpO1xuXG4gICAgICByZXBvcnREb2N0b3JSZXN1bHQocHJlc2VudGVyLCBvdXRwdXRNb2RlKShyZXN1bHQpO1xuXG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzdWx0Lmhhc0Vycm9ycyA/IDEgOiAwO1xuICAgIH0pO1xuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9kb2N0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFVbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFzQixFQUFVLEVBQUUsQ0FDckQsS0FBSyxDQUFDLE9BQU87SUFDWCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBRTNDLE1BQU0sa0JBQWtCLEdBQ3RCLENBQUMsU0FBMkIsRUFBRSxVQUEyQixFQUFFLEVBQUUsQ0FDN0QsQ0FBQyxNQUFvQixFQUFRLEVBQUU7SUFDN0IsU0FBUyxDQUFDLFlBQVksQ0FDcEIsVUFBVSxLQUFLLE1BQU07UUFDbkIsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLEdBQVcsRUFDRixFQUFFLENBQ1gsSUFBSSxPQUFPLEVBQUU7S0FDVixJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ2QsV0FBVyxDQUNWLCtEQUErRCxDQUNoRTtLQUNBLE1BQU0sQ0FBQyxLQUFLO0lBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQWlCLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVyRCxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEQscUVBQXFFO0lBQ3JFLHVFQUF1RTtJQUN2RSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZG9jdG9yYCBDb21tYW5kZXIgY29tbWFuZC5cbiAqXG4gKiBWZXJpZmllcyB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhbmQgcm91dGVzIHRoZSBvdXRjb21lIHRocm91Z2ggdGhlIHNoYXJlZFxuICogQ29tbWFuZFByZXNlbnRlciBwb3J0LiBKU09OIG1vZGUgZW1pdHMgdGhlIHN0cnVjdHVyZWQgcmVzdWx0OyB0ZXh0IG1vZGUgZW1pdHNcbiAqIGEgaHVtYW4tcmVhZGFibGUgcGVyLWNoZWNrIHN1bW1hcnkuIFRoZSBleGl0IGNvZGUgcmVmbGVjdHMgd2hldGhlciBhbnkgY2hlY2tcbiAqIGZhaWxlZCwgbWlycm9yaW5nIHRoZSBsaW50ZXIgY29udmVudGlvbiAoYSBzdWNjZXNzZnVsIHJ1biBjYW4gc3RpbGwgcmVwb3J0XG4gKiBwcm9ibGVtcykuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdG9yUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kb2N0b3IuanNcIjtcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkNoZWNrIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi92YWxpZGF0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBydW5Eb2N0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RvY3Rvci5qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29tbWFuZFByZXNlbnRlcixcbiAgcmVzb2x2ZU91dHB1dE1vZGUsXG59IGZyb20gXCIuLi9wcmVzZW50ZXJzL2luZGV4LmpzXCI7XG5cbmNvbnN0IGZvcm1hdENoZWNrID0gKGNoZWNrOiBWYWxpZGF0aW9uQ2hlY2spOiBzdHJpbmcgPT5cbiAgY2hlY2suaXNWYWxpZFxuICAgID8gY2hhbGsuZ3JlZW4oYOKchSAke2NoZWNrLnN1Y2Nlc3NNZXNzYWdlfWApXG4gICAgOiBjaGFsay5yZWQoYOKdjCAke2NoZWNrLmVycm9yTWVzc2FnZX1gKTtcblxuY29uc3QgcmVwb3J0RG9jdG9yUmVzdWx0ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogRG9jdG9yUmVzdWx0KTogdm9pZCA9PiB7XG4gICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChcbiAgICAgIG91dHB1dE1vZGUgPT09IFwianNvblwiXG4gICAgICAgID8gcmVzdWx0XG4gICAgICAgIDogcmVzdWx0LmNoZWNrcy5tYXAoZm9ybWF0Q2hlY2spLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG1ha2VEb2N0b3JDb21tYW5kID0gKFxuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY2llcyxcbiAgY29uZmlnOiBDb25maWcsXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJkb2N0b3JcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIlZlcmlmeSB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhY2NvcmRpbmcgdG8gdGhlIERldkV4IGd1aWRlbGluZXNcIixcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Eb2N0b3IoZGVwZW5kZW5jaWVzLCBjb25maWcpO1xuXG4gICAgICByZXBvcnREb2N0b3JSZXN1bHQocHJlc2VudGVyLCBvdXRwdXRNb2RlKShyZXN1bHQpO1xuXG4gICAgICAvLyBVc2UgcHJvY2Vzcy5leGl0Q29kZSBpbnN0ZWFkIG9mIHByb2Nlc3MuZXhpdCgpIHNvIHRoYXQgdGhlIGZpbmFsbHlcbiAgICAgIC8vIGJsb2NrIGluIHJ1bkNsaSgpIGNhbiBmbHVzaCB0ZWxlbWV0cnkgYmVmb3JlIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzdWx0Lmhhc0Vycm9ycyA/IDEgOiAwO1xuICAgIH0pO1xuIl19
@@ -10,6 +10,7 @@ import { Repository, } from "../../../domain/github.js";
10
10
  import { tf$ } from "../../execa/terraform.js";
11
11
  import { collectMonorepoPayload, getPlopInstance, runMonorepoActions, } from "../../plop/index.js";
12
12
  import { asError, reportCommandError } from "../command-errors.js";
13
+ import { toErrorMessage } from "../error-reporting.js";
13
14
  import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
14
15
  const isGitHubRepoCreationSkipped = (input) => "gitHubRepoCreationSkipped" in input;
15
16
  const trackStep = (presenter, name, task, mapError) => ResultAsync.fromPromise(presenter.trackStep(name, task), mapError);
@@ -57,16 +58,39 @@ const azureAccountSchema = z.object({
57
58
  name: z.string().min(1),
58
59
  }),
59
60
  });
61
+ const AZ_LOGIN_REQUIRED_MESSAGE = "Please log in to Azure CLI using `az login` before running this command.";
62
+ const mapAzAccessError = (cause) => new Error(toErrorMessage(cause), { cause });
63
+ const parseAzureAccountOutput = (stdout) => {
64
+ let parsedOutput;
65
+ try {
66
+ parsedOutput = JSON.parse(stdout);
67
+ }
68
+ catch (cause) {
69
+ throw new Error("Azure CLI returned invalid account JSON.", { cause });
70
+ }
71
+ const result = azureAccountSchema.safeParse(parsedOutput);
72
+ if (!result.success) {
73
+ throw new Error("Azure CLI returned an unexpected account payload.", {
74
+ cause: result.error,
75
+ });
76
+ }
77
+ return result.data.user.name;
78
+ };
60
79
  const ensureAzLogin = async () => {
61
- const { stdout } = await tf$ `az account show`;
80
+ const { stdout } = await tf$ `az account show`.catch((cause) => {
81
+ throw asError(AZ_LOGIN_REQUIRED_MESSAGE)(cause);
82
+ });
62
83
  // `az account show` reads the cached CLI context, but `az group list`
63
84
  // fails when the current session token has expired.
64
- await tf$ `az group list`;
65
- const parsed = JSON.parse(stdout);
66
- const { user } = azureAccountSchema.parse(parsed);
67
- return user.name;
85
+ await tf$ `az group list`.catch((cause) => {
86
+ throw mapAzAccessError(cause);
87
+ });
88
+ return parseAzureAccountOutput(stdout);
68
89
  };
69
- const trackAzLogin = (presenter) => trackStep(presenter, "Checking Azure login status...", ensureAzLogin, asError("Please log in to Azure CLI using `az login` before running this command."));
90
+ const mapAzLoginCheckError = (cause) => cause instanceof Error
91
+ ? cause
92
+ : new Error("Failed to check Azure CLI login status.", { cause });
93
+ const trackAzLogin = (presenter) => trackStep(presenter, "Checking Azure login status...", ensureAzLogin, mapAzLoginCheckError);
70
94
  // TODO(CES-1810): Make these checks concurrent to speed up the preconditions check phase
71
95
  export const runInitPreconditions = (presenter) => trackTerraformCliIsInstalled(presenter).andThen(() => trackCorepackIsInstalled(presenter));
72
96
  // TODO(CES-1810): Make these checks concurrent to speed up the preconditions check phase
@@ -105,22 +129,47 @@ export const getMonorepoInitialAnswers = ({ description, name, owner, publish, }
105
129
  }
106
130
  return initialAnswers;
107
131
  };
132
+ const formatTerraformRepositoryCreationFailureDetails = (cause) => {
133
+ const details = cause instanceof ExecaError
134
+ ? [cause.shortMessage, cause.stderr]
135
+ : [toErrorMessage(cause)];
136
+ return details
137
+ .filter((detail) => typeof detail === "string" && detail.trim().length > 0)
138
+ .map((detail) => detail.trim())
139
+ .join("\n");
140
+ };
141
+ const mapTerraformRepositoryCreationError = (step) => (cause) => {
142
+ const details = formatTerraformRepositoryCreationFailureDetails(cause);
143
+ const message = [
144
+ `Terraform ${step} failed while creating the GitHub repository.`,
145
+ details,
146
+ ]
147
+ .filter(Boolean)
148
+ .join("\n");
149
+ return new Error(message, { cause });
150
+ };
108
151
  const createRemoteRepositoryWithPresenter = (presenter) => ({ repoName, repoOwner, }) => {
109
152
  const logger = getLogger(["dx-cli", "init"]);
110
153
  const repo$ = tf$({ cwd: path.resolve("infra", "repository") });
111
- const applyTerraform = async () => {
154
+ const runTerraformRepositoryCreationStep = async (step, executeStep) => {
112
155
  try {
113
- await repo$ `terraform init`;
114
- await repo$ `terraform apply -auto-approve`;
156
+ await executeStep();
115
157
  }
116
- catch (error) {
117
- if (error instanceof ExecaError) {
118
- logger.error(error.shortMessage);
119
- }
158
+ catch (cause) {
159
+ const error = mapTerraformRepositoryCreationError(step)(cause);
160
+ logger.error(error.message);
120
161
  throw error;
121
162
  }
122
163
  };
123
- return trackStep(presenter, "Creating GitHub repository...", applyTerraform, asError("Failed to create GitHub repository.")).map(() => new Repository(repoName, repoOwner));
164
+ const applyTerraform = async () => {
165
+ const initializeRepositoryTerraform = () => repo$ `terraform init`;
166
+ const applyRepositoryTerraform = () => repo$ `terraform apply -auto-approve`;
167
+ await runTerraformRepositoryCreationStep("init", initializeRepositoryTerraform);
168
+ await runTerraformRepositoryCreationStep("apply", applyRepositoryTerraform);
169
+ };
170
+ return trackStep(presenter, "Creating GitHub repository...", applyTerraform, (cause) => cause instanceof Error
171
+ ? cause
172
+ : asError("Failed to create GitHub repository.")(cause)).map(() => new Repository(repoName, repoOwner));
124
173
  };
125
174
  /**
126
175
  * Exit code returned by `git remote add` when a remote with the requested name
@@ -274,4 +323,4 @@ export const makeInitCommand = (requireGitHubAuth, env) => new Command()
274
323
  })))
275
324
  .match(reportSummary(presenter, outputMode), reportCommandError(this, presenter, outputMode));
276
325
  });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU94QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLHdCQUF3QixDQUFDO0FBY2hDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDbEMsS0FBbUIsRUFDdUIsRUFBRSxDQUM1QywyQkFBMkIsSUFBSSxLQUFLLENBQUM7QUFzQnZDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLFNBQTJCLEVBQzNCLElBQVksRUFDWixJQUFzQixFQUN0QixRQUErQixFQUNaLEVBQUUs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QUFFLFVBQVUsQ0FBQyxDQUNoRCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgJCwgRXhlY2FFcnJvciB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IGlucXVpcmVyIGZyb20gXCJpbnF1aXJlclwiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViU2VydmljZSxcbiAgUHVsbFJlcXVlc3QsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyB0ZiQgfSBmcm9tIFwiLi4vLi4vZXhlY2EvdGVycmFmb3JtLmpzXCI7XG5pbXBvcnQgeyBQYXlsb2FkIGFzIE1vbm9yZXBvUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9wbG9wL2dlbmVyYXRvcnMvbW9ub3JlcG8vaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3RNb25vcmVwb1BheWxvYWQsXG4gIGdldFBsb3BJbnN0YW5jZSxcbiAgcnVuTW9ub3JlcG9BY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgZW5zdXJlQXpMb2dpbiA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgdGYkYGF6IGFjY291bnQgc2hvd2A7XG4gIC8vIGBheiBhY2NvdW50IHNob3dgIHJlYWRzIHRoZSBjYWNoZWQgQ0xJIGNvbnRleHQsIGJ1dCBgYXogZ3JvdXAgbGlzdGBcbiAgLy8gZmFpbHMgd2hlbiB0aGUgY3VycmVudCBzZXNzaW9uIHRva2VuIGhhcyBleHBpcmVkLlxuICBhd2FpdCB0ZiRgYXogZ3JvdXAgbGlzdGA7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgY29uc3QgeyB1c2VyIH0gPSBhenVyZUFjY291bnRTY2hlbWEucGFyc2UocGFyc2VkKTtcbiAgcmV0dXJuIHVzZXIubmFtZTtcbn07XG5cbmNvbnN0IHRyYWNrQXpMb2dpbiA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBBenVyZSBsb2dpbiBzdGF0dXMuLi5cIixcbiAgICBlbnN1cmVBekxvZ2luLFxuICAgIGFzRXJyb3IoXG4gICAgICBcIlBsZWFzZSBsb2cgaW4gdG8gQXp1cmUgQ0xJIHVzaW5nIGBheiBsb2dpbmAgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kLlwiLFxuICAgICksXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbmNvbnN0IGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgKHtcbiAgICByZXBvTmFtZSxcbiAgICByZXBvT3duZXIsXG4gIH06IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnksIEVycm9yPiA9PiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcImluaXRcIl0pO1xuICAgIGNvbnN0IHJlcG8kID0gdGYkKHsgY3dkOiBwYXRoLnJlc29sdmUoXCJpbmZyYVwiLCBcInJlcG9zaXRvcnlcIikgfSk7XG4gICAgY29uc3QgYXBwbHlUZXJyYWZvcm0gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICAgIGF3YWl0IHJlcG8kYHRlcnJhZm9ybSBhcHBseSAtYXV0by1hcHByb3ZlYDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3Iuc2hvcnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNyZWF0aW5nIEdpdEh1YiByZXBvc2l0b3J5Li4uXCIsXG4gICAgICBhcHBseVRlcnJhZm9ybSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiByZXBvc2l0b3J5LlwiKSxcbiAgICApLm1hcCgoKSA9PiBuZXcgUmVwb3NpdG9yeShyZXBvTmFtZSwgcmVwb093bmVyKSk7XG4gIH07XG4vKipcbiAqIEV4aXQgY29kZSByZXR1cm5lZCBieSBgZ2l0IHJlbW90ZSBhZGRgIHdoZW4gYSByZW1vdGUgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWVcbiAqIGFscmVhZHkgZXhpc3RzLiBgZ2l0IHJlbW90ZWAgZG9jdW1lbnRzIHRoaXMgZGVkaWNhdGVkIHN0YXR1cyBjb2RlLCBzbyB3ZSBjYW5cbiAqIHR1cm4gaXQgaW50byBhY3Rpb25hYmxlIGd1aWRhbmNlIGluc3RlYWQgb2YgYSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZW1vdGUjX2V4aXRfc3RhdHVzXG4gKi9cbmNvbnN0IEdJVF9SRU1PVEVfQUxSRUFEWV9FWElTVFNfRVhJVF9DT0RFID0gMztcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgZmFpbHVyZSBvZiB0aGUgZ2l0IHJlbW90ZSBzZXR1cCBzdGVwIGludG8gYW4gYWN0aW9uYWJsZSBlcnJvci5cbiAqXG4gKiBXaGVuIGBnaXQgcmVtb3RlIGFkZCBvcmlnaW5gIGV4aXRzIHdpdGggY29kZSAzIHRoZSByZW1vdGUgYWxyZWFkeSBleGlzdHMsXG4gKiB3aGljaCBpcyBhIHJlY292ZXJhYmxlIHNpdHVhdGlvbjogdGhlIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgaG93IHRvIGZpeCBpdC5cbiAqIFRoZSBvcmlnaW5hbCBFeGVjYUVycm9yIGlzIHByZXNlcnZlZCBhcyBgY2F1c2VgIHNvIGAtLXZlcmJvc2VgIHN0aWxsIHN1cmZhY2VzXG4gKiB0aGUgZXhpdCBjb2RlIGFuZCBnaXQncyBvd24gc3RkZXJyLlxuICovXG5leHBvcnQgY29uc3QgbWFwR2l0UmVtb3RlQWRkRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmIChcbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IgJiZcbiAgICBjYXVzZS5leGl0Q29kZSA9PT0gR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIFwiQSBnaXQgcmVtb3RlIG5hbWVkICdvcmlnaW4nIGFscmVhZHkgZXhpc3RzLiBSZW1vdmUgaXQgd2l0aCBgZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luYCBhbmQgcnVuIHRoZSBjb21tYW5kIGFnYWluLCBvciBzdGFydCBmcm9tIGEgY2xlYW4gZGlyZWN0b3J5LlwiLFxuICAgICAgeyBjYXVzZSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBcIkZhaWxlZCB0byBzZXQgdXAgdGhlIGxvY2FsIGdpdCByZXBvc2l0b3J5IGFuZCBpdHMgJ29yaWdpbicgcmVtb3RlLlwiLFxuICAgIHsgY2F1c2UgfSxcbiAgKTtcbn07XG5cbmNvbnN0IGluaXRpYWxpemVHaXRSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5KSA9PiB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IFwiZmVhdHVyZXMvc2NhZmZvbGQtd29ya3NwYWNlXCI7XG4gICAgY29uc3QgZ2l0JCA9ICQoe1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgLy8gYGdpdCByZW1vdGUgYWRkYCBpcyB0cmFja2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcHVzaCBzbyBpdHMgZG9jdW1lbnRlZFxuICAgIC8vIGV4aXQgY29kZXMgKGUuZy4gMyA9IHJlbW90ZSBhbHJlYWR5IGV4aXN0cykgc3VyZmFjZSBhIHNwZWNpZmljLCBhY3Rpb25hYmxlXG4gICAgLy8gbWVzc2FnZSBpbnN0ZWFkIG9mIGJlaW5nIG1pc3JlcG9ydGVkIGFzIGEgcHVzaCBmYWlsdXJlLlxuICAgIGNvbnN0IGNvbmZpZ3VyZVJlbW90ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGluaXRgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gJHtyZXBvc2l0b3J5Lm9yaWdpbn1gO1xuICAgIH07XG4gICAgY29uc3QgcHVzaFRvT3JpZ2luID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgZmV0Y2ggb3JpZ2luIG1haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY2hlY2tvdXQgLWIgJHticmFuY2hOYW1lfWA7XG4gICAgICAvLyBUZXJyYWZvcm0gY3JlYXRlcyBgbWFpbmAgd2l0aCBhbiBpbml0aWFsIFJFQURNRSBjb21taXQuXG4gICAgICAvLyBSZXNldCB0byBgb3JpZ2luL21haW5gIHNvIHRoaXMgYnJhbmNoIGlzIGJhc2VkIG9uIHRoZSByZW1vdGUgZGVmYXVsdCBicmFuY2gsXG4gICAgICAvLyB3aGlsZSBrZWVwaW5nIHRoZSBzY2FmZm9sZGVkIGxvY2FsIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIGEgY2xlYW4gUFIgZGlmZi5cbiAgICAgIGF3YWl0IGdpdCRgZ2l0IHJlc2V0IG9yaWdpbi9tYWluYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGFkZCAuYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGNvbW1pdCAtLW5vLWdwZy1zaWduIC1tIFwiU2NhZmZvbGQgd29ya3NwYWNlXCJgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcHVzaCAtdSBvcmlnaW4gJHticmFuY2hOYW1lfWA7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDb25maWd1cmluZyB0aGUgZ2l0IHJlbW90ZS4uLlwiLFxuICAgICAgY29uZmlndXJlUmVtb3RlLFxuICAgICAgbWFwR2l0UmVtb3RlQWRkRXJyb3IsXG4gICAgKVxuICAgICAgLmFuZFRoZW4oKCkgPT5cbiAgICAgICAgdHJhY2tTdGVwKFxuICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICBcIlB1c2hpbmcgY29kZSB0byBHaXRIdWIuLi5cIixcbiAgICAgICAgICBwdXNoVG9PcmlnaW4sXG4gICAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBwdXNoIGNvZGUgdG8gR2l0SHViLlwiKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKCkgPT4gKHsgYnJhbmNoTmFtZSwgcmVwb3NpdG9yeSB9KSk7XG4gIH07XG5cbmNvbnN0IGNyZWF0ZVB1bGxSZXF1ZXN0V2l0aFByZXNlbnRlciA9XG4gICh7IGdpdEh1YlNlcnZpY2UsIHByZXNlbnRlciB9OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHtcbiAgICBicmFuY2hOYW1lLFxuICAgIHJlcG9zaXRvcnksXG4gIH06IExvY2FsV29ya3NwYWNlKTogUmVzdWx0QXN5bmM8UHVsbFJlcXVlc3QgfCB1bmRlZmluZWQsIEVycm9yPiA9PlxuICAgIHRyYWNrU3RlcChcbiAgICAgIHByZXNlbnRlcixcbiAgICAgIFwiQ3JlYXRpbmcgUHVsbCBSZXF1ZXN0Li4uXCIsXG4gICAgICAoKSA9PlxuICAgICAgICBnaXRIdWJTZXJ2aWNlLmNyZWF0ZVB1bGxSZXF1ZXN0KHtcbiAgICAgICAgICBiYXNlOiBcIm1haW5cIixcbiAgICAgICAgICBib2R5OiBcIlRoaXMgUFIgY29udGFpbnMgdGhlIHNjYWZmb2xkZWQgbW9ub3JlcG8gc3RydWN0dXJlLlwiLFxuICAgICAgICAgIGhlYWQ6IGJyYW5jaE5hbWUsXG4gICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnkub3duZXIsXG4gICAgICAgICAgcmVwbzogcmVwb3NpdG9yeS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlNjYWZmb2xkIHJlcG9zaXRvcnlcIixcbiAgICAgICAgfSksXG4gICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBQdWxsIFJlcXVlc3QuXCIpLFxuICAgIClcbiAgICAgIC8vIElmIFBSIGNyZWF0aW9uIGZhaWxzLCBkb24ndCBibG9jayB0aGUgd29ya2Zsb3dcbiAgICAgIC5vckVsc2UoKCkgPT4gb2tBc3luYyh1bmRlZmluZWQpKTtcblxuY29uc3QgaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIgPVxuICAoY29udGV4dDogSW5pdEFjdGlvbkNvbnRleHQpID0+XG4gIChwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5UHVsbFJlcXVlc3QsIEVycm9yPiA9PlxuICAgIGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKShwYXlsb2FkKVxuICAgICAgLmFuZFRoZW4oaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKSlcbiAgICAgIC5hbmRUaGVuKChsb2NhbFdvcmtzcGFjZSkgPT5cbiAgICAgICAgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyKGNvbnRleHQpKGxvY2FsV29ya3NwYWNlKS5tYXAoKHByKSA9PiAoe1xuICAgICAgICAgIHByLFxuICAgICAgICAgIHJlcG9zaXRvcnk6IGxvY2FsV29ya3NwYWNlLnJlcG9zaXRvcnksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbmNvbnN0IGhhbmRsZUdlbmVyYXRvckVycm9yID0gKGVycjogdW5rbm93bikgPT4ge1xuICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZHgtY2xpXCIsIFwiaW5pdFwiXSk7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcIkZhaWxlZCB0byBydW4gdGhlIGdlbmVyYXRvclwiLCB7IGNhdXNlOiBlcnIgfSk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdoZXRoZXIgdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSBzaG91bGQgYmUgcHVibGlzaGVkIHRvIEdpdEh1Yi5cbiAqXG4gKiBXaGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyIChlLmcuIHRoZSB1c2VyIHBhc3NlZCBgLS1wdWJsaXNoYFxuICogb24gdGhlIGNvbW1hbmQgbGluZSksIHRoYXQgdmFsdWUgaXMgdXNlZCBhcy1pcyBhbmQgbm8gcHJvbXB0IGlzIHNob3duLiBXaGVuXG4gKiB0aGUgcHJlZmVyZW5jZSBpcyBsZWZ0IHVuZGVmaW5lZCAoZmxhZyBvbWl0dGVkKSwgdGhlIHVzZXIgaXMgYXNrZWRcbiAqIGludGVyYWN0aXZlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtR2l0SHViUmVwb0NyZWF0aW9uID0gKFxuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQsXG4gIHB1Ymxpc2hQcmVmZXJlbmNlPzogYm9vbGVhbixcbik6IFJlc3VsdEFzeW5jPGJvb2xlYW4sIEVycm9yPiA9PlxuICAvLyBBIHByZWZlcmVuY2UgcHJvdmlkZWQgdXAtZnJvbnQgKHZpYSBgLS1wdWJsaXNoYCkgc2tpcHMgdGhlIGludGVyYWN0aXZlIHByb21wdC5cbiAgcHVibGlzaFByZWZlcmVuY2UgIT09IHVuZGVmaW5lZFxuICAgID8gb2tBc3luYyhwdWJsaXNoUHJlZmVyZW5jZSlcbiAgICA6IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfR0lUSFVCX1BVQkxJU0hfQ09ORklSTUFUSU9OLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgcHJvamVjdCBpcyBjcmVhdGVkIG9uICR7Y2hhbGsuZ3JlZW4ocGF5bG9hZC5yZXBvTmFtZSl9LiBXb3VsZCB5b3UgbGlrZSB0byBwdWJsaXNoIGl0IHRvIEdpdEh1YiBhdCAke2NoYWxrLmdyZWVuKGAke3BheWxvYWQucmVwb093bmVyfS8ke3BheWxvYWQucmVwb05hbWV9YCl9IG5vdz9gLFxuICAgICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICB9KSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7IGNhdXNlIH0pLFxuICAgICAgKS5hbmRUaGVuKChhbnN3ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkQW5zd2VyID0gelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY29uZmlybTogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2FmZVBhcnNlKGFuc3dlcik7XG4gICAgICAgIGlmICghcGFyc2VkQW5zd2VyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJJbnZhbGlkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7XG4gICAgICAgICAgICAgIGNhdXNlOiBwYXJzZWRBbnN3ZXIuZXJyb3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9rQXN5bmMocGFyc2VkQW5zd2VyLmRhdGEuY29uZmlybSk7XG4gICAgICB9KTtcblxuY29uc3QgcnVuSW5pdEFjdGlvbiA9ICh7XG4gIGdpdEh1YlNlcnZpY2UsXG4gIGluaXRpYWxBbnN3ZXJzID0ge30sXG4gIHByZXNlbnRlcixcbn06IEluaXRBY3Rpb25Db250ZXh0KTogUmVzdWx0QXN5bmM8U3VtbWFyeUlucHV0LCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IHB1Ymxpc2hUb0dpdEh1YiwgLi4ubW9ub3JlcG9Jbml0aWFsQW5zd2VycyB9ID0gaW5pdGlhbEFuc3dlcnM7XG5cbiAgcmV0dXJuIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJJbml0aWFsaXppbmcgd29ya3NwYWNlIGdlbmVyYXRvci4uLlwiLFxuICAgIGdldFBsb3BJbnN0YW5jZSxcbiAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxvcFwiKSxcbiAgKVxuICAgIC5hbmRUaGVuKChwbG9wKSA9PlxuICAgICAgLy8gVGhlIHByb21wdCBwaGFzZSBtdXN0IHJ1biBvdXRzaWRlIHRyYWNrU3RlcDogaW4gdGV4dCBtb2RlIHRyYWNrU3RlcFxuICAgICAgLy8gcmVuZGVycyBhIHNwaW5uZXIgdGhhdCBvY2N1cGllcyB0aGUgVFRZIGFuZCBoaWRlcyB0aGUgcHJvbXB0cy5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UsIG1vbm9yZXBvSW5pdGlhbEFuc3dlcnMpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKCh7IGdlbmVyYXRvciwgcGF5bG9hZCB9KSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiU2NhZmZvbGRpbmcgd29ya3NwYWNlLi4uXCIsXG4gICAgICAgICgpID0+IHJ1bk1vbm9yZXBvQWN0aW9ucyhnZW5lcmF0b3IsIHBheWxvYWQpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUZWUoKHBheWxvYWQpID0+IHtcbiAgICAgIHByb2Nlc3MuY2hkaXIocGF5bG9hZC5yZXBvTmFtZSk7XG4gICAgfSlcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24ocGF5bG9hZCwgcHVibGlzaFRvR2l0SHViKS5hbmRUaGVuPFxuICAgICAgICBTdW1tYXJ5SW5wdXQsXG4gICAgICAgIEVycm9yXG4gICAgICA+KChjb25maXJtZWQpID0+XG4gICAgICAgIGNvbmZpcm1lZFxuICAgICAgICAgID8gaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoe1xuICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICB9KShwYXlsb2FkKVxuICAgICAgICAgIDogb2tBc3luYyh7IGdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQ6IHRydWUsIHBheWxvYWQgfSksXG4gICAgICApLFxuICAgICk7XG59O1xuXG5jb25zdCByZXBvcnRTdW1tYXJ5ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogU3VtbWFyeUlucHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dE1vZGUgPT09IFwianNvblwiKSB7XG4gICAgICBwcmVzZW50ZXIucmVwb3J0UmVzdWx0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlTdW1tYXJ5KHJlc3VsdCk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgbWFrZUluaXRDb21tYW5kID0gKFxuICByZXF1aXJlR2l0SHViQXV0aDogR2l0SHViQXV0aEZhY3RvcnksXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJpbml0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiSW5pdGlhbGl6ZSBhIG5ldyBEWCB3b3Jrc3BhY2VcIilcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLW5hbWUgPG5hbWU+XCIsIFwiUmVwb3NpdG9yeSBuYW1lXCIpKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tb3duZXIgPG93bmVyPlwiLFxuICAgICAgICBcIkdpdEh1YiBvcmdhbml6YXRpb24gb3IgdXNlciB0aGF0IHdpbGwgb3duIHRoZSByZXBvc2l0b3J5XCIsXG4gICAgICApLFxuICAgIClcbiAgICAuYWRkT3B0aW9uKFxuICAgICAgbmV3IE9wdGlvbihcIi0tZGVzY3JpcHRpb24gPGRlc2NyaXB0aW9uPlwiLCBcIlJlcG9zaXRvcnkgZGVzY3JpcHRpb25cIiksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tcHVibGlzaFwiLFxuICAgICAgICBcIlB1Ymxpc2ggdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSB0byBHaXRIdWIgd2l0aG91dCBwcm9tcHRpbmdcIixcbiAgICAgICkuZGVmYXVsdCh1bmRlZmluZWQpLFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiB1bmtub3duKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBhd2FpdCBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBwYXJzZUluaXRDb21tYW5kT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICBjYXVzZSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgICA6IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpbml0IGNvbW1hbmQgb3B0aW9uc1wiLCB7IGNhdXNlIH0pLFxuICAgICAgKVxuICAgICAgICAuYW5kVGhlbigoaW5pdE9wdGlvbnMpID0+XG4gICAgICAgICAgcnVuSW5pdFByZWNvbmRpdGlvbnMocHJlc2VudGVyKVxuICAgICAgICAgICAgLmFuZFRoZW4oKCkgPT4gcmVxdWlyZUdpdEh1YkF1dGgoKSlcbiAgICAgICAgICAgIC5hbmRUaGVuKChhdXRoKSA9PlxuICAgICAgICAgICAgICBydW5Jbml0QWN0aW9uKHtcbiAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlOiBhdXRoLmdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgICAgaW5pdGlhbEFuc3dlcnM6IGdldE1vbm9yZXBvSW5pdGlhbEFuc3dlcnMoaW5pdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5tYXRjaChcbiAgICAgICAgICByZXBvcnRTdW1tYXJ5KHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICAgcmVwb3J0Q29tbWFuZEVycm9yKHRoaXMsIHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICk7XG4gICAgfSk7XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU94QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsTUFBTSx3QkFBd0IsQ0FBQztBQWNoQyxNQUFNLDJCQUEyQixHQUFHLENBQ2xDLEtBQW1CLEVBQ3VCLEVBQUUsQ0FDNUMsMkJBQTJCLElBQUksS0FBSyxDQUFDO0FBc0J2QyxNQUFNLFNBQVMsR0FBRyxDQUNoQixTQUEyQixF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QUFJLEVBQUUsRUFBRSxDQUNoQixhQUFhLENBQUM7UUFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7UUFDakMsY0FBYyxFQUFFLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUN0RCxTQUFTO0tBQ1YsQ0FBQyxDQUNILENBQ0o7U0FDQSxLQUFLLENBQ0osYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFDcEMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDaEQsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7ICQsIEV4ZWNhRXJyb3IgfSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpRW52IH0gZnJvbSBcIi4uL2Vudi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxPcHRpb25zIH0gZnJvbSBcIi4uL2dsb2JhbC1vcHRpb25zLmpzXCI7XG5cbmltcG9ydCB7IEdpdEh1YkF1dGhGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YlNlcnZpY2UsXG4gIFB1bGxSZXF1ZXN0LFxuICBSZXBvc2l0b3J5LFxufSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2dpdGh1Yi5qc1wiO1xuaW1wb3J0IHsgdGYkIH0gZnJvbSBcIi4uLy4uL2V4ZWNhL3RlcnJhZm9ybS5qc1wiO1xuaW1wb3J0IHsgUGF5bG9hZCBhcyBNb25vcmVwb1BheWxvYWQgfSBmcm9tIFwiLi4vLi4vcGxvcC9nZW5lcmF0b3JzL21vbm9yZXBvL2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkLFxuICBnZXRQbG9wSW5zdGFuY2UsXG4gIHJ1bk1vbm9yZXBvQWN0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL3Bsb3AvaW5kZXguanNcIjtcbmltcG9ydCB7IGFzRXJyb3IsIHJlcG9ydENvbW1hbmRFcnJvciB9IGZyb20gXCIuLi9jb21tYW5kLWVycm9ycy5qc1wiO1xuaW1wb3J0IHsgdG9FcnJvck1lc3NhZ2UgfSBmcm9tIFwiLi4vZXJyb3ItcmVwb3J0aW5nLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgQVpfTE9HSU5fUkVRVUlSRURfTUVTU0FHRSA9XG4gIFwiUGxlYXNlIGxvZyBpbiB0byBBenVyZSBDTEkgdXNpbmcgYGF6IGxvZ2luYCBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCI7XG5cbmNvbnN0IG1hcEF6QWNjZXNzRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PlxuICBuZXcgRXJyb3IodG9FcnJvck1lc3NhZ2UoY2F1c2UpLCB7IGNhdXNlIH0pO1xuXG5jb25zdCBwYXJzZUF6dXJlQWNjb3VudE91dHB1dCA9IChzdGRvdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBwYXJzZWRPdXRwdXQ6IHVua25vd247XG5cbiAgdHJ5IHtcbiAgICBwYXJzZWRPdXRwdXQgPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXp1cmUgQ0xJIHJldHVybmVkIGludmFsaWQgYWNjb3VudCBKU09OLlwiLCB7IGNhdXNlIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXp1cmVBY2NvdW50U2NoZW1hLnNhZmVQYXJzZShwYXJzZWRPdXRwdXQpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXp1cmUgQ0xJIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgYWNjb3VudCBwYXlsb2FkLlwiLCB7XG4gICAgICBjYXVzZTogcmVzdWx0LmVycm9yLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5kYXRhLnVzZXIubmFtZTtcbn07XG5cbmNvbnN0IGVuc3VyZUF6TG9naW4gPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHRmJGBheiBhY2NvdW50IHNob3dgLmNhdGNoKChjYXVzZTogdW5rbm93bikgPT4ge1xuICAgIHRocm93IGFzRXJyb3IoQVpfTE9HSU5fUkVRVUlSRURfTUVTU0FHRSkoY2F1c2UpO1xuICB9KTtcbiAgLy8gYGF6IGFjY291bnQgc2hvd2AgcmVhZHMgdGhlIGNhY2hlZCBDTEkgY29udGV4dCwgYnV0IGBheiBncm91cCBsaXN0YFxuICAvLyBmYWlscyB3aGVuIHRoZSBjdXJyZW50IHNlc3Npb24gdG9rZW4gaGFzIGV4cGlyZWQuXG4gIGF3YWl0IHRmJGBheiBncm91cCBsaXN0YC5jYXRjaCgoY2F1c2U6IHVua25vd24pID0+IHtcbiAgICB0aHJvdyBtYXBBekFjY2Vzc0Vycm9yKGNhdXNlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlQXp1cmVBY2NvdW50T3V0cHV0KHN0ZG91dCk7XG59O1xuXG5jb25zdCBtYXBBekxvZ2luQ2hlY2tFcnJvciA9IChjYXVzZTogdW5rbm93bik6IEVycm9yID0+XG4gIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICA/IGNhdXNlXG4gICAgOiBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY2hlY2sgQXp1cmUgQ0xJIGxvZ2luIHN0YXR1cy5cIiwgeyBjYXVzZSB9KTtcblxuY29uc3QgdHJhY2tBekxvZ2luID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIEF6dXJlIGxvZ2luIHN0YXR1cy4uLlwiLFxuICAgIGVuc3VyZUF6TG9naW4sXG4gICAgbWFwQXpMb2dpbkNoZWNrRXJyb3IsXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbnR5cGUgVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uU3RlcCA9IFwiYXBwbHlcIiB8IFwiaW5pdFwiO1xuXG5jb25zdCBmb3JtYXRUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25GYWlsdXJlRGV0YWlscyA9IChcbiAgY2F1c2U6IHVua25vd24sXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkZXRhaWxzID1cbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3JcbiAgICAgID8gW2NhdXNlLnNob3J0TWVzc2FnZSwgY2F1c2Uuc3RkZXJyXVxuICAgICAgOiBbdG9FcnJvck1lc3NhZ2UoY2F1c2UpXTtcblxuICByZXR1cm4gZGV0YWlsc1xuICAgIC5maWx0ZXIoXG4gICAgICAoZGV0YWlsKTogZGV0YWlsIGlzIHN0cmluZyA9PlxuICAgICAgICB0eXBlb2YgZGV0YWlsID09PSBcInN0cmluZ1wiICYmIGRldGFpbC50cmltKCkubGVuZ3RoID4gMCxcbiAgICApXG4gICAgLm1hcCgoZGV0YWlsKSA9PiBkZXRhaWwudHJpbSgpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufTtcblxuY29uc3QgbWFwVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uRXJyb3IgPVxuICAoc3RlcDogVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uU3RlcCkgPT5cbiAgKGNhdXNlOiB1bmtub3duKTogRXJyb3IgPT4ge1xuICAgIGNvbnN0IGRldGFpbHMgPSBmb3JtYXRUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25GYWlsdXJlRGV0YWlscyhjYXVzZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IFtcbiAgICAgIGBUZXJyYWZvcm0gJHtzdGVwfSBmYWlsZWQgd2hpbGUgY3JlYXRpbmcgdGhlIEdpdEh1YiByZXBvc2l0b3J5LmAsXG4gICAgICBkZXRhaWxzLFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgcmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICB9O1xuXG5jb25zdCBjcmVhdGVSZW1vdGVSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gICh7XG4gICAgcmVwb05hbWUsXG4gICAgcmVwb093bmVyLFxuICB9OiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5LCBFcnJvcj4gPT4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJpbml0XCJdKTtcbiAgICBjb25zdCByZXBvJCA9IHRmJCh7IGN3ZDogcGF0aC5yZXNvbHZlKFwiaW5mcmFcIiwgXCJyZXBvc2l0b3J5XCIpIH0pO1xuICAgIGNvbnN0IHJ1blRlcnJhZm9ybVJlcG9zaXRvcnlDcmVhdGlvblN0ZXAgPSBhc3luYyAoXG4gICAgICBzdGVwOiBUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25TdGVwLFxuICAgICAgZXhlY3V0ZVN0ZXA6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjdXRlU3RlcCgpO1xuICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYXBUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25FcnJvcihzdGVwKShjYXVzZSk7XG4gICAgICAgIGxvZ2dlci5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5VGVycmFmb3JtID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZVJlcG9zaXRvcnlUZXJyYWZvcm0gPSAoKSA9PiByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICBjb25zdCBhcHBseVJlcG9zaXRvcnlUZXJyYWZvcm0gPSAoKSA9PlxuICAgICAgICByZXBvJGB0ZXJyYWZvcm0gYXBwbHkgLWF1dG8tYXBwcm92ZWA7XG5cbiAgICAgIGF3YWl0IHJ1blRlcnJhZm9ybVJlcG9zaXRvcnlDcmVhdGlvblN0ZXAoXG4gICAgICAgIFwiaW5pdFwiLFxuICAgICAgICBpbml0aWFsaXplUmVwb3NpdG9yeVRlcnJhZm9ybSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBydW5UZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25TdGVwKFxuICAgICAgICBcImFwcGx5XCIsXG4gICAgICAgIGFwcGx5UmVwb3NpdG9yeVRlcnJhZm9ybSxcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDcmVhdGluZyBHaXRIdWIgcmVwb3NpdG9yeS4uLlwiLFxuICAgICAgYXBwbHlUZXJyYWZvcm0sXG4gICAgICAoY2F1c2UpID0+XG4gICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgOiBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBHaXRIdWIgcmVwb3NpdG9yeS5cIikoY2F1c2UpLFxuICAgICkubWFwKCgpID0+IG5ldyBSZXBvc2l0b3J5KHJlcG9OYW1lLCByZXBvT3duZXIpKTtcbiAgfTtcbi8qKlxuICogRXhpdCBjb2RlIHJldHVybmVkIGJ5IGBnaXQgcmVtb3RlIGFkZGAgd2hlbiBhIHJlbW90ZSB3aXRoIHRoZSByZXF1ZXN0ZWQgbmFtZVxuICogYWxyZWFkeSBleGlzdHMuIGBnaXQgcmVtb3RlYCBkb2N1bWVudHMgdGhpcyBkZWRpY2F0ZWQgc3RhdHVzIGNvZGUsIHNvIHdlIGNhblxuICogdHVybiBpdCBpbnRvIGFjdGlvbmFibGUgZ3VpZGFuY2UgaW5zdGVhZCBvZiBhIGdlbmVyaWMgZmFpbHVyZSBtZXNzYWdlLlxuICpcbiAqIFNlZSBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LXJlbW90ZSNfZXhpdF9zdGF0dXNcbiAqL1xuY29uc3QgR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREUgPSAzO1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBmYWlsdXJlIG9mIHRoZSBnaXQgcmVtb3RlIHNldHVwIHN0ZXAgaW50byBhbiBhY3Rpb25hYmxlIGVycm9yLlxuICpcbiAqIFdoZW4gYGdpdCByZW1vdGUgYWRkIG9yaWdpbmAgZXhpdHMgd2l0aCBjb2RlIDMgdGhlIHJlbW90ZSBhbHJlYWR5IGV4aXN0cyxcbiAqIHdoaWNoIGlzIGEgcmVjb3ZlcmFibGUgc2l0dWF0aW9uOiB0aGUgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciBob3cgdG8gZml4IGl0LlxuICogVGhlIG9yaWdpbmFsIEV4ZWNhRXJyb3IgaXMgcHJlc2VydmVkIGFzIGBjYXVzZWAgc28gYC0tdmVyYm9zZWAgc3RpbGwgc3VyZmFjZXNcbiAqIHRoZSBleGl0IGNvZGUgYW5kIGdpdCdzIG93biBzdGRlcnIuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBHaXRSZW1vdGVBZGRFcnJvciA9IChjYXVzZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKFxuICAgIGNhdXNlIGluc3RhbmNlb2YgRXhlY2FFcnJvciAmJlxuICAgIGNhdXNlLmV4aXRDb2RlID09PSBHSVRfUkVNT1RFX0FMUkVBRFlfRVhJU1RTX0VYSVRfQ09ERVxuICApIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgXCJBIGdpdCByZW1vdGUgbmFtZWQgJ29yaWdpbicgYWxyZWFkeSBleGlzdHMuIFJlbW92ZSBpdCB3aXRoIGBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW5gIGFuZCBydW4gdGhlIGNvbW1hbmQgYWdhaW4sIG9yIHN0YXJ0IGZyb20gYSBjbGVhbiBkaXJlY3RvcnkuXCIsXG4gICAgICB7IGNhdXNlIH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIFwiRmFpbGVkIHRvIHNldCB1cCB0aGUgbG9jYWwgZ2l0IHJlcG9zaXRvcnkgYW5kIGl0cyAnb3JpZ2luJyByZW1vdGUuXCIsXG4gICAgeyBjYXVzZSB9LFxuICApO1xufTtcblxuY29uc3QgaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT4gKHJlcG9zaXRvcnk6IFJlcG9zaXRvcnkpID0+IHtcbiAgICBjb25zdCBicmFuY2hOYW1lID0gXCJmZWF0dXJlcy9zY2FmZm9sZC13b3Jrc3BhY2VcIjtcbiAgICBjb25zdCBnaXQkID0gJCh7XG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICB9KTtcbiAgICAvLyBgZ2l0IHJlbW90ZSBhZGRgIGlzIHRyYWNrZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBwdXNoIHNvIGl0cyBkb2N1bWVudGVkXG4gICAgLy8gZXhpdCBjb2RlcyAoZS5nLiAzID0gcmVtb3RlIGFscmVhZHkgZXhpc3RzKSBzdXJmYWNlIGEgc3BlY2lmaWMsIGFjdGlvbmFibGVcbiAgICAvLyBtZXNzYWdlIGluc3RlYWQgb2YgYmVpbmcgbWlzcmVwb3J0ZWQgYXMgYSBwdXNoIGZhaWx1cmUuXG4gICAgY29uc3QgY29uZmlndXJlUmVtb3RlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgaW5pdGA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCByZW1vdGUgYWRkIG9yaWdpbiAke3JlcG9zaXRvcnkub3JpZ2lufWA7XG4gICAgfTtcbiAgICBjb25zdCBwdXNoVG9PcmlnaW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBmZXRjaCBvcmlnaW4gbWFpbmA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBjaGVja291dCAtYiAke2JyYW5jaE5hbWV9YDtcbiAgICAgIC8vIFRlcnJhZm9ybSBjcmVhdGVzIGBtYWluYCB3aXRoIGFuIGluaXRpYWwgUkVBRE1FIGNvbW1pdC5cbiAgICAgIC8vIFJlc2V0IHRvIGBvcmlnaW4vbWFpbmAgc28gdGhpcyBicmFuY2ggaXMgYmFzZWQgb24gdGhlIHJlbW90ZSBkZWZhdWx0IGJyYW5jaCxcbiAgICAgIC8vIHdoaWxlIGtlZXBpbmcgdGhlIHNjYWZmb2xkZWQgbG9jYWwgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmb3IgYSBjbGVhbiBQUiBkaWZmLlxuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVzZXQgb3JpZ2luL21haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgYWRkIC5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY29tbWl0IC0tbm8tZ3BnLXNpZ24gLW0gXCJTY2FmZm9sZCB3b3Jrc3BhY2VcImA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBwdXNoIC11IG9yaWdpbiAke2JyYW5jaE5hbWV9YDtcbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNvbmZpZ3VyaW5nIHRoZSBnaXQgcmVtb3RlLi4uXCIsXG4gICAgICBjb25maWd1cmVSZW1vdGUsXG4gICAgICBtYXBHaXRSZW1vdGVBZGRFcnJvcixcbiAgICApXG4gICAgICAuYW5kVGhlbigoKSA9PlxuICAgICAgICB0cmFja1N0ZXAoXG4gICAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICAgIFwiUHVzaGluZyBjb2RlIHRvIEdpdEh1Yi4uLlwiLFxuICAgICAgICAgIHB1c2hUb09yaWdpbixcbiAgICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIHB1c2ggY29kZSB0byBHaXRIdWIuXCIpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLm1hcCgoKSA9PiAoeyBicmFuY2hOYW1lLCByZXBvc2l0b3J5IH0pKTtcbiAgfTtcblxuY29uc3QgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyID1cbiAgKHsgZ2l0SHViU2VydmljZSwgcHJlc2VudGVyIH06IEluaXRBY3Rpb25Db250ZXh0KSA9PlxuICAoe1xuICAgIGJyYW5jaE5hbWUsXG4gICAgcmVwb3NpdG9yeSxcbiAgfTogTG9jYWxXb3Jrc3BhY2UpOiBSZXN1bHRBc3luYzxQdWxsUmVxdWVzdCB8IHVuZGVmaW5lZCwgRXJyb3I+ID0+XG4gICAgdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDcmVhdGluZyBQdWxsIFJlcXVlc3QuLi5cIixcbiAgICAgICgpID0+XG4gICAgICAgIGdpdEh1YlNlcnZpY2UuY3JlYXRlUHVsbFJlcXVlc3Qoe1xuICAgICAgICAgIGJhc2U6IFwibWFpblwiLFxuICAgICAgICAgIGJvZHk6IFwiVGhpcyBQUiBjb250YWlucyB0aGUgc2NhZmZvbGRlZCBtb25vcmVwbyBzdHJ1Y3R1cmUuXCIsXG4gICAgICAgICAgaGVhZDogYnJhbmNoTmFtZSxcbiAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeS5vd25lcixcbiAgICAgICAgICByZXBvOiByZXBvc2l0b3J5Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IFwiU2NhZmZvbGQgcmVwb3NpdG9yeVwiLFxuICAgICAgICB9KSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFB1bGwgUmVxdWVzdC5cIiksXG4gICAgKVxuICAgICAgLy8gSWYgUFIgY3JlYXRpb24gZmFpbHMsIGRvbid0IGJsb2NrIHRoZSB3b3JrZmxvd1xuICAgICAgLm9yRWxzZSgoKSA9PiBva0FzeW5jKHVuZGVmaW5lZCkpO1xuXG5jb25zdCBoYW5kbGVOZXdHaXRIdWJSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChjb250ZXh0OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHBheWxvYWQ6IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnlQdWxsUmVxdWVzdCwgRXJyb3I+ID0+XG4gICAgY3JlYXRlUmVtb3RlUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoY29udGV4dC5wcmVzZW50ZXIpKHBheWxvYWQpXG4gICAgICAuYW5kVGhlbihpbml0aWFsaXplR2l0UmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoY29udGV4dC5wcmVzZW50ZXIpKVxuICAgICAgLmFuZFRoZW4oKGxvY2FsV29ya3NwYWNlKSA9PlxuICAgICAgICBjcmVhdGVQdWxsUmVxdWVzdFdpdGhQcmVzZW50ZXIoY29udGV4dCkobG9jYWxXb3Jrc3BhY2UpLm1hcCgocHIpID0+ICh7XG4gICAgICAgICAgcHIsXG4gICAgICAgICAgcmVwb3NpdG9yeTogbG9jYWxXb3Jrc3BhY2UucmVwb3NpdG9yeSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcblxuY29uc3QgaGFuZGxlR2VuZXJhdG9yRXJyb3IgPSAoZXJyOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJpbml0XCJdKTtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJ1biB0aGUgZ2VuZXJhdG9yXCIsIHsgY2F1c2U6IGVyciB9KTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hldGhlciB0aGUgc2NhZmZvbGRlZCByZXBvc2l0b3J5IHNob3VsZCBiZSBwdWJsaXNoZWQgdG8gR2l0SHViLlxuICpcbiAqIFdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIgKGUuZy4gdGhlIHVzZXIgcGFzc2VkIGAtLXB1Ymxpc2hgXG4gKiBvbiB0aGUgY29tbWFuZCBsaW5lKSwgdGhhdCB2YWx1ZSBpcyB1c2VkIGFzLWlzIGFuZCBubyBwcm9tcHQgaXMgc2hvd24uIFdoZW5cbiAqIHRoZSBwcmVmZXJlbmNlIGlzIGxlZnQgdW5kZWZpbmVkIChmbGFnIG9taXR0ZWQpLCB0aGUgdXNlciBpcyBhc2tlZFxuICogaW50ZXJhY3RpdmVseS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24gPSAoXG4gIHBheWxvYWQ6IE1vbm9yZXBvUGF5bG9hZCxcbiAgcHVibGlzaFByZWZlcmVuY2U/OiBib29sZWFuLFxuKTogUmVzdWx0QXN5bmM8Ym9vbGVhbiwgRXJyb3I+ID0+XG4gIC8vIEEgcHJlZmVyZW5jZSBwcm92aWRlZCB1cC1mcm9udCAodmlhIGAtLXB1Ymxpc2hgKSBza2lwcyB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0LlxuICBwdWJsaXNoUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBva0FzeW5jKHB1Ymxpc2hQcmVmZXJlbmNlKVxuICAgIDogUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgZGVmYXVsdDogREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04sXG4gICAgICAgICAgbWVzc2FnZTogYFRoZSBwcm9qZWN0IGlzIGNyZWF0ZWQgb24gJHtjaGFsay5ncmVlbihwYXlsb2FkLnJlcG9OYW1lKX0uIFdvdWxkIHlvdSBsaWtlIHRvIHB1Ymxpc2ggaXQgdG8gR2l0SHViIGF0ICR7Y2hhbGsuZ3JlZW4oYCR7cGF5bG9hZC5yZXBvT3duZXJ9LyR7cGF5bG9hZC5yZXBvTmFtZX1gKX0gbm93P2AsXG4gICAgICAgICAgbmFtZTogXCJjb25maXJtXCIsXG4gICAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgIH0pLFxuICAgICAgICAoY2F1c2UpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlYWQgR2l0SHViIHB1Ymxpc2ggY29uZmlybWF0aW9uXCIsIHsgY2F1c2UgfSksXG4gICAgICApLmFuZFRoZW4oKGFuc3dlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRBbnN3ZXIgPSB6XG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICBjb25maXJtOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zYWZlUGFyc2UoYW5zd2VyKTtcbiAgICAgICAgaWYgKCFwYXJzZWRBbnN3ZXIuc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICAgIG5ldyBFcnJvcihcIkludmFsaWQgR2l0SHViIHB1Ymxpc2ggY29uZmlybWF0aW9uXCIsIHtcbiAgICAgICAgICAgICAgY2F1c2U6IHBhcnNlZEFuc3dlci5lcnJvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2tBc3luYyhwYXJzZWRBbnN3ZXIuZGF0YS5jb25maXJtKTtcbiAgICAgIH0pO1xuXG5jb25zdCBydW5Jbml0QWN0aW9uID0gKHtcbiAgZ2l0SHViU2VydmljZSxcbiAgaW5pdGlhbEFuc3dlcnMgPSB7fSxcbiAgcHJlc2VudGVyLFxufTogSW5pdEFjdGlvbkNvbnRleHQpOiBSZXN1bHRBc3luYzxTdW1tYXJ5SW5wdXQsIEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgcHVibGlzaFRvR2l0SHViLCAuLi5tb25vcmVwb0luaXRpYWxBbnN3ZXJzIH0gPSBpbml0aWFsQW5zd2VycztcblxuICByZXR1cm4gdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkluaXRpYWxpemluZyB3b3Jrc3BhY2UgZ2VuZXJhdG9yLi4uXCIsXG4gICAgZ2V0UGxvcEluc3RhbmNlLFxuICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbG9wXCIpLFxuICApXG4gICAgLmFuZFRoZW4oKHBsb3ApID0+XG4gICAgICAvLyBUaGUgcHJvbXB0IHBoYXNlIG11c3QgcnVuIG91dHNpZGUgdHJhY2tTdGVwOiBpbiB0ZXh0IG1vZGUgdHJhY2tTdGVwXG4gICAgICAvLyByZW5kZXJzIGEgc3Bpbm5lciB0aGF0IG9jY3VwaWVzIHRoZSBUVFkgYW5kIGhpZGVzIHRoZSBwcm9tcHRzLlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGNvbGxlY3RNb25vcmVwb1BheWxvYWQocGxvcCwgZ2l0SHViU2VydmljZSwgbW9ub3JlcG9Jbml0aWFsQW5zd2VycyksXG4gICAgICAgIGhhbmRsZUdlbmVyYXRvckVycm9yLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHsgZ2VuZXJhdG9yLCBwYXlsb2FkIH0pID0+XG4gICAgICB0cmFja1N0ZXAoXG4gICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgXCJTY2FmZm9sZGluZyB3b3Jrc3BhY2UuLi5cIixcbiAgICAgICAgKCkgPT4gcnVuTW9ub3JlcG9BY3Rpb25zKGdlbmVyYXRvciwgcGF5bG9hZCksXG4gICAgICAgIGhhbmRsZUdlbmVyYXRvckVycm9yLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRlZSgocGF5bG9hZCkgPT4ge1xuICAgICAgcHJvY2Vzcy5jaGRpcihwYXlsb2FkLnJlcG9OYW1lKTtcbiAgICB9KVxuICAgIC5hbmRUaGVuKChwYXlsb2FkKSA9PlxuICAgICAgY29uZmlybUdpdEh1YlJlcG9DcmVhdGlvbihwYXlsb2FkLCBwdWJsaXNoVG9HaXRIdWIpLmFuZFRoZW48XG4gICAgICAgIFN1bW1hcnlJbnB1dCxcbiAgICAgICAgRXJyb3JcbiAgICAgID4oKGNvbmZpcm1lZCkgPT5cbiAgICAgICAgY29uZmlybWVkXG4gICAgICAgICAgPyBoYW5kbGVOZXdHaXRIdWJSZXBvc2l0b3J5V2l0aFByZXNlbnRlcih7XG4gICAgICAgICAgICAgIGdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgIH0pKHBheWxvYWQpXG4gICAgICAgICAgOiBva0FzeW5jKHsgZ2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZDogdHJ1ZSwgcGF5bG9hZCB9KSxcbiAgICAgICksXG4gICAgKTtcbn07XG5cbmNvbnN0IHJlcG9ydFN1bW1hcnkgPVxuICAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLCBvdXRwdXRNb2RlOiBcImpzb25cIiB8IFwidGV4dFwiKSA9PlxuICAocmVzdWx0OiBTdW1tYXJ5SW5wdXQpID0+IHtcbiAgICBpZiAob3V0cHV0TW9kZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIHByZXNlbnRlci5yZXBvcnRSZXN1bHQocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheVN1bW1hcnkocmVzdWx0KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBtYWtlSW5pdENvbW1hbmQgPSAoXG4gIHJlcXVpcmVHaXRIdWJBdXRoOiBHaXRIdWJBdXRoRmFjdG9yeSxcbiAgZW52OiBDbGlFbnYsXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImluaXRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbml0aWFsaXplIGEgbmV3IERYIHdvcmtzcGFjZVwiKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tbmFtZSA8bmFtZT5cIiwgXCJSZXBvc2l0b3J5IG5hbWVcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1vd25lciA8b3duZXI+XCIsXG4gICAgICAgIFwiR2l0SHViIG9yZ2FuaXphdGlvbiBvciB1c2VyIHRoYXQgd2lsbCBvd24gdGhlIHJlcG9zaXRvcnlcIixcbiAgICAgICksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFwiLS1kZXNjcmlwdGlvbiA8ZGVzY3JpcHRpb24+XCIsIFwiUmVwb3NpdG9yeSBkZXNjcmlwdGlvblwiKSxcbiAgICApXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1wdWJsaXNoXCIsXG4gICAgICAgIFwiUHVibGlzaCB0aGUgc2NhZmZvbGRlZCByZXBvc2l0b3J5IHRvIEdpdEh1YiB3aXRob3V0IHByb21wdGluZ1wiLFxuICAgICAgKS5kZWZhdWx0KHVuZGVmaW5lZCksXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSB0aGlzLm9wdHNXaXRoR2xvYmFsczxHbG9iYWxPcHRpb25zPigpO1xuICAgICAgY29uc3Qgb3V0cHV0TW9kZSA9IHJlc29sdmVPdXRwdXRNb2RlKGVudiwgb3V0cHV0KTtcbiAgICAgIGNvbnN0IHByZXNlbnRlciA9IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIob3V0cHV0TW9kZSk7XG5cbiAgICAgIGF3YWl0IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zKG9wdGlvbnMpKSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gY2F1c2VcbiAgICAgICAgICAgIDogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGluaXQgY29tbWFuZCBvcHRpb25zXCIsIHsgY2F1c2UgfSksXG4gICAgICApXG4gICAgICAgIC5hbmRUaGVuKChpbml0T3B0aW9ucykgPT5cbiAgICAgICAgICBydW5Jbml0UHJlY29uZGl0aW9ucyhwcmVzZW50ZXIpXG4gICAgICAgICAgICAuYW5kVGhlbigoKSA9PiByZXF1aXJlR2l0SHViQXV0aCgpKVxuICAgICAgICAgICAgLmFuZFRoZW4oKGF1dGgpID0+XG4gICAgICAgICAgICAgIHJ1bkluaXRBY3Rpb24oe1xuICAgICAgICAgICAgICAgIGdpdEh1YlNlcnZpY2U6IGF1dGguZ2l0SHViU2VydmljZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsQW5zd2VyczogZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2Vycyhpbml0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLm1hdGNoKFxuICAgICAgICAgIHJlcG9ydFN1bW1hcnkocHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgICByZXBvcnRDb21tYW5kRXJyb3IodGhpcywgcHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgKTtcbiAgICB9KTtcbiJdfQ==
@@ -2,8 +2,18 @@ import { $ } from "execa";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { githubRepoSchema } from "../../domain/github-repo.js";
4
4
  export const getGithubRepo = async () => {
5
- const result = await $ `git config --get remote.origin.url`;
5
+ const result = await readGitRemoteOriginUrl();
6
6
  const repoUrl = result.stdout.trim();
7
+ const stderr = (result.stderr ?? "").trim();
8
+ const isMissingOriginRemote = result.exitCode === 1 && repoUrl === "" && stderr === "";
9
+ // `git config --get` exits 1 with no output when the key is unset: there is
10
+ // simply no origin remote, which is a valid "not in a repo we manage" state.
11
+ if (isMissingOriginRemote) {
12
+ return undefined;
13
+ }
14
+ if (result.exitCode !== 0) {
15
+ throw new Error(stderr === "" ? "Failed to read git remote origin URL" : stderr, { cause: result });
16
+ }
7
17
  if (repoUrl === "") {
8
18
  return undefined;
9
19
  }
@@ -29,4 +39,12 @@ export const getGithubRepo = async () => {
29
39
  repo,
30
40
  });
31
41
  };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLXJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvZ2l0aHViL2dpdGh1Yi1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFxQyxFQUFFO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFBLG9DQUFvQyxDQUFDO0lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFckMsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksSUFBWSxDQUFDO0lBRWpCLGtEQUFrRDtJQUNsRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLDRDQUE0QyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUNsRCxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNOLHdEQUF3RDtRQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUNWLEdBQUcsQ0FBQyxNQUFNLEVBQ1Ysb0JBQW9CLEVBQ3BCLHdDQUF3QyxDQUN6QyxDQUFDO1FBQ0YsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELEtBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLO1FBQ0wsSUFBSTtLQUNMLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICQgfSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tIFwibm9kZTphc3NlcnQvc3RyaWN0XCI7XG5cbmltcG9ydCB7IGdpdGh1YlJlcG9TY2hlbWEgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJSZXBvIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9naXRodWItcmVwby5qc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0R2l0aHViUmVwbyA9IGFzeW5jICgpOiBQcm9taXNlPEdpdEh1YlJlcG8gfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJGBnaXQgY29uZmlnIC0tZ2V0IHJlbW90ZS5vcmlnaW4udXJsYDtcbiAgY29uc3QgcmVwb1VybCA9IHJlc3VsdC5zdGRvdXQudHJpbSgpO1xuXG4gIGlmIChyZXBvVXJsID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBvd25lcjogc3RyaW5nO1xuICBsZXQgcmVwbzogc3RyaW5nO1xuXG4gIC8vIEhhbmRsZSBTU0ggVVJMcyAoZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQpXG4gIGlmIChyZXBvVXJsLnN0YXJ0c1dpdGgoXCJnaXRAZ2l0aHViLmNvbTpcIikpIHtcbiAgICBjb25zdCBzc2hQYXR0ZXJuID0gL15naXRAZ2l0aHViXFwuY29tOihbXi9dKylcXC8oLis/KSg/OlxcLmdpdCk/JC87XG4gICAgY29uc3QgbWF0Y2ggPSByZXBvVXJsLm1hdGNoKHNzaFBhdHRlcm4pO1xuICAgIGFzc2VydC5vayhtYXRjaCwgXCJJbnZhbGlkIEdpdEh1YiBTU0ggVVJMIGZvcm1hdFwiKTtcbiAgICBbLCBvd25lciwgcmVwb10gPSBtYXRjaDtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgSFRUUFMgVVJMcyAoaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8uZ2l0KVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVwb1VybCk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgdXJsLm9yaWdpbixcbiAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tXCIsXG4gICAgICBcIk9ubHkgR2l0SHViIHJlcG9zaXRvcmllcyBhcmUgc3VwcG9ydGVkXCIsXG4gICAgKTtcbiAgICBjb25zdCBbLCB1cmxPd25lciwgdXJsUmVwb10gPSB1cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpO1xuICAgIG93bmVyID0gdXJsT3duZXI7XG4gICAgcmVwbyA9IHVybFJlcG8ucmVwbGFjZSgvXFwuZ2l0JC8sIFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIGdpdGh1YlJlcG9TY2hlbWEucGFyc2Uoe1xuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gIH0pO1xufTtcbiJdfQ==
42
+ const readGitRemoteOriginUrl = async () => {
43
+ try {
44
+ return await $({ reject: false }) `git config --get remote.origin.url`;
45
+ }
46
+ catch (error) {
47
+ throw new Error("Failed to read git remote origin URL", { cause: error });
48
+ }
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLXJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvZ2l0aHViL2dpdGh1Yi1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFxQyxFQUFFO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxNQUFNLHFCQUFxQixHQUN6QixNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUM7SUFFM0QsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQy9ELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLElBQVksQ0FBQztJQUVqQixrREFBa0Q7SUFDbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQztRQUNoRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDbEQsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztTQUFNLENBQUM7UUFDTix3REFBd0Q7UUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FDVixHQUFHLENBQUMsTUFBTSxFQUNWLG9CQUFvQixFQUNwQix3Q0FBd0MsQ0FDekMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDNUIsS0FBSztRQUNMLElBQUk7S0FDTCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3hDLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQSxvQ0FBb0MsQ0FBQztJQUN4RSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJCB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gXCJub2RlOmFzc2VydC9zdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2l0aHViUmVwb1NjaGVtYSB9IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLXJlcG8uanNcIjtcbmltcG9ydCB7IEdpdEh1YlJlcG8gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRHaXRodWJSZXBvID0gYXN5bmMgKCk6IFByb21pc2U8R2l0SHViUmVwbyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkR2l0UmVtb3RlT3JpZ2luVXJsKCk7XG4gIGNvbnN0IHJlcG9VcmwgPSByZXN1bHQuc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3Qgc3RkZXJyID0gKHJlc3VsdC5zdGRlcnIgPz8gXCJcIikudHJpbSgpO1xuICBjb25zdCBpc01pc3NpbmdPcmlnaW5SZW1vdGUgPVxuICAgIHJlc3VsdC5leGl0Q29kZSA9PT0gMSAmJiByZXBvVXJsID09PSBcIlwiICYmIHN0ZGVyciA9PT0gXCJcIjtcblxuICAvLyBgZ2l0IGNvbmZpZyAtLWdldGAgZXhpdHMgMSB3aXRoIG5vIG91dHB1dCB3aGVuIHRoZSBrZXkgaXMgdW5zZXQ6IHRoZXJlIGlzXG4gIC8vIHNpbXBseSBubyBvcmlnaW4gcmVtb3RlLCB3aGljaCBpcyBhIHZhbGlkIFwibm90IGluIGEgcmVwbyB3ZSBtYW5hZ2VcIiBzdGF0ZS5cbiAgaWYgKGlzTWlzc2luZ09yaWdpblJlbW90ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgc3RkZXJyID09PSBcIlwiID8gXCJGYWlsZWQgdG8gcmVhZCBnaXQgcmVtb3RlIG9yaWdpbiBVUkxcIiA6IHN0ZGVycixcbiAgICAgIHsgY2F1c2U6IHJlc3VsdCB9LFxuICAgICk7XG4gIH1cblxuICBpZiAocmVwb1VybCA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgb3duZXI6IHN0cmluZztcbiAgbGV0IHJlcG86IHN0cmluZztcblxuICAvLyBIYW5kbGUgU1NIIFVSTHMgKGdpdEBnaXRodWIuY29tOm93bmVyL3JlcG8uZ2l0KVxuICBpZiAocmVwb1VybC5zdGFydHNXaXRoKFwiZ2l0QGdpdGh1Yi5jb206XCIpKSB7XG4gICAgY29uc3Qgc3NoUGF0dGVybiA9IC9eZ2l0QGdpdGh1YlxcLmNvbTooW14vXSspXFwvKC4rPykoPzpcXC5naXQpPyQvO1xuICAgIGNvbnN0IG1hdGNoID0gcmVwb1VybC5tYXRjaChzc2hQYXR0ZXJuKTtcbiAgICBhc3NlcnQub2sobWF0Y2gsIFwiSW52YWxpZCBHaXRIdWIgU1NIIFVSTCBmb3JtYXRcIik7XG4gICAgWywgb3duZXIsIHJlcG9dID0gbWF0Y2g7XG4gIH0gZWxzZSB7XG4gICAgLy8gSGFuZGxlIEhUVFBTIFVSTHMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vd25lci9yZXBvLmdpdClcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcG9VcmwpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHVybC5vcmlnaW4sXG4gICAgICBcImh0dHBzOi8vZ2l0aHViLmNvbVwiLFxuICAgICAgXCJPbmx5IEdpdEh1YiByZXBvc2l0b3JpZXMgYXJlIHN1cHBvcnRlZFwiLFxuICAgICk7XG4gICAgY29uc3QgWywgdXJsT3duZXIsIHVybFJlcG9dID0gdXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBvd25lciA9IHVybE93bmVyO1xuICAgIHJlcG8gPSB1cmxSZXBvLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKTtcbiAgfVxuXG4gIHJldHVybiBnaXRodWJSZXBvU2NoZW1hLnBhcnNlKHtcbiAgICBvd25lcixcbiAgICByZXBvLFxuICB9KTtcbn07XG5cbmNvbnN0IHJlYWRHaXRSZW1vdGVPcmlnaW5VcmwgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0ICQoeyByZWplY3Q6IGZhbHNlIH0pYGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmxgO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIGdpdCByZW1vdGUgb3JpZ2luIFVSTFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufTtcbiJdfQ==
@@ -24,6 +24,18 @@ export declare class OctokitGitHubService implements GitHubService {
24
24
  updateFile(params: UpdateFileParams): Promise<void>;
25
25
  }
26
26
  export declare const getGitHubPAT: () => Promise<string | undefined>;
27
+ /**
28
+ * Returns true when the authenticated user is an active member of the PagoPA
29
+ * GitHub organization.
30
+ *
31
+ * Fails closed: any error (network failure, missing `read:org` scope, 403/404)
32
+ * resolves to `false` so telemetry stays disabled when membership cannot be
33
+ * confirmed.
34
+ *
35
+ * @param octokit injectable client, primarily for testing; defaults to a client
36
+ * authenticated with the supplied token.
37
+ */
38
+ export declare const isPagopaOrgMember: (token: string, octokit?: Octokit) => Promise<boolean>;
27
39
  export declare const fetchLatestTag: ({ client, owner, repo }: GitHubReleaseParam) => ResultAsync<import("semver").SemVer | null, Error>;
28
40
  export declare const fetchLatestRelease: ({ client, owner, repo, }: GitHubReleaseParam) => ResultAsync<import("semver").SemVer | null, Error>;
29
41
  export {};
@@ -1,7 +1,7 @@
1
1
  import { $ } from "execa";
2
2
  import sodium from "libsodium-wrappers";
3
3
  import { ResultAsync } from "neverthrow";
4
- import { RequestError } from "octokit";
4
+ import { Octokit, RequestError } from "octokit";
5
5
  import semverParse from "semver/functions/parse.js";
6
6
  import semverSort from "semver/functions/sort.js";
7
7
  import { FileNotFoundError, PullRequest, Repository, RepositoryNotFoundError, } from "../../domain/github.js";
@@ -157,6 +157,30 @@ export const getGitHubPAT = async () => {
157
157
  }
158
158
  return undefined;
159
159
  };
160
+ /** GitHub organization whose members are allowed to emit CLI telemetry. */
161
+ const PAGOPA_ORG = "pagopa";
162
+ /**
163
+ * Returns true when the authenticated user is an active member of the PagoPA
164
+ * GitHub organization.
165
+ *
166
+ * Fails closed: any error (network failure, missing `read:org` scope, 403/404)
167
+ * resolves to `false` so telemetry stays disabled when membership cannot be
168
+ * confirmed.
169
+ *
170
+ * @param octokit injectable client, primarily for testing; defaults to a client
171
+ * authenticated with the supplied token.
172
+ */
173
+ export const isPagopaOrgMember = async (token, octokit = new Octokit({ auth: token })) => {
174
+ try {
175
+ const { data } = await octokit.rest.orgs.getMembershipForAuthenticatedUser({
176
+ org: PAGOPA_ORG,
177
+ });
178
+ return data.state === "active";
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ };
160
184
  export const fetchLatestTag = ({ client, owner, repo }) => ResultAsync.fromPromise(
161
185
  // Get repository tags
162
186
  client.request("GET /repos/{owner}/{repo}/tags", {
@@ -176,4 +200,4 @@ client.request("GET /repos/{owner}/{repo}/releases/latest", {
176
200
  owner,
177
201
  repo,
178
202
  }), () => new Error(`Failed to fetch latest release for ${owner}/${repo}`)).map(({ data }) => semverParse(data.tag_name));
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvb2N0b2tpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoRCxPQUFPLFdBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRCxPQUFPLEVBSUwsaUJBQWlCLEVBR2pCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsdUJBQXVCLEdBRXhCLE1BQU0sd0JBQXdCLENBQUM7QUFRaEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixRQUFRLENBQUM7SUFFVCxZQUFZLE9BQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQTBCO1FBQzNDLElBQUksQ0FBQztZQUNILG1DQUFtQztZQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDNUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixHQUFHLEVBQUUsU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUM5QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBRUgsd0JBQXdCO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDckMsS0FBSyxFQUFFLE1BQU0sQ0FB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QUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFO0lBQzFELEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgc29kaXVtIGZyb20gXCJsaWJzb2RpdW0td3JhcHBlcnNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IE9jdG9raXQsIFJlcXVlc3RFcnJvciB9IGZyb20gXCJvY3Rva2l0XCI7XG5pbXBvcnQgc2VtdmVyUGFyc2UgZnJvbSBcInNlbXZlci9mdW5jdGlvbnMvcGFyc2UuanNcIjtcbmltcG9ydCBzZW12ZXJTb3J0IGZyb20gXCJzZW12ZXIvZnVuY3Rpb25zL3NvcnQuanNcIjtcblxuaW1wb3J0IHtcbiAgQ3JlYXRlQnJhbmNoUGFyYW1zLFxuICBDcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0UGFyYW1zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIEdldEZpbGVDb250ZW50UGFyYW1zLFxuICBHaXRIdWJTZXJ2aWNlLFxuICBQdWxsUmVxdWVzdCxcbiAgUmVwb3NpdG9yeSxcbiAgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3IsXG4gIFVwZGF0ZUZpbGVQYXJhbXMsXG59IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5cbnR5cGUgR2l0SHViUmVsZWFzZVBhcmFtID0ge1xuICBjbGllbnQ6IE9jdG9raXQ7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBPY3Rva2l0R2l0SHViU2VydmljZSBpbXBsZW1lbnRzIEdpdEh1YlNlcnZpY2Uge1xuICAjb2N0b2tpdDtcblxuICBjb25zdHJ1Y3RvcihvY3Rva2l0OiBPY3Rva2l0KSB7XG4gICAgdGhpcy4jb2N0b2tpdCA9IG9jdG9raXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCcmFuY2gocGFyYW1zOiBDcmVhdGVCcmFuY2hQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBTSEEgb2YgdGhlIHNvdXJjZSBicmFuY2hcbiAgICAgIGNvbnN0IHsgZGF0YTogcmVmRGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5nZXRSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGBoZWFkcy8ke3BhcmFtcy5mcm9tUmVmfWAsXG4gICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IGJyYW5jaFxuICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5jcmVhdGVSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGByZWZzL2hlYWRzLyR7cGFyYW1zLmJyYW5jaE5hbWV9YCxcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHNoYTogcmVmRGF0YS5vYmplY3Quc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBicmFuY2g6ICR7cGFyYW1zLmJyYW5jaE5hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0KFxuICAgIHBhcmFtczogQ3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldFBhcmFtcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdpdEh1YiByZXF1aXJlcyBlbnZpcm9ubWVudCBzZWNyZXRzIHRvIGJlIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGxpYnNvZGl1bS5cbiAgICAgIGF3YWl0IHNvZGl1bS5yZWFkeTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZXhpc3RzIGJlZm9yZSByZXNvbHZpbmcgaXRzIHB1YmxpYyBrZXkgYW5kIHN0b3Jpbmcgc2VjcmV0cy5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVxdWVzdChcbiAgICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICAgICAge1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogcHVibGljS2V5RGF0YSB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmFjdGlvbnMuZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXkoe1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gc29kaXVtLmZyb21fYmFzZTY0KFxuICAgICAgICBwdWJsaWNLZXlEYXRhLmtleSxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZWNyZXRCeXRlcyA9IHNvZGl1bS5mcm9tX3N0cmluZyhwYXJhbXMuc2VjcmV0VmFsdWUpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkQnl0ZXMgPSBzb2RpdW0uY3J5cHRvX2JveF9zZWFsKFxuICAgICAgICBzZWNyZXRCeXRlcyxcbiAgICAgICAgcHVibGljS2V5Qnl0ZXMsXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVmFsdWUgPSBzb2RpdW0udG9fYmFzZTY0KFxuICAgICAgICBlbmNyeXB0ZWRCeXRlcyxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5hY3Rpb25zLmNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQoe1xuICAgICAgICBlbmNyeXB0ZWRfdmFsdWU6IGVuY3J5cHRlZFZhbHVlLFxuICAgICAgICBlbnZpcm9ubWVudF9uYW1lOiBwYXJhbXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICBrZXlfaWQ6IHB1YmxpY0tleURhdGEua2V5X2lkLFxuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2VjcmV0X25hbWU6IHBhcmFtcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgb3IgdXBkYXRlIHNlY3JldCAke3BhcmFtcy5zZWNyZXROYW1lfSBpbiBlbnZpcm9ubWVudCAke3BhcmFtcy5lbnZpcm9ubWVudE5hbWV9YCxcbiAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHVsbFJlcXVlc3QocGFyYW1zOiB7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmc7XG4gICAgb3duZXI6IHN0cmluZztcbiAgICByZXBvOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8UHVsbFJlcXVlc3Q+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucHVsbHMuY3JlYXRlKHtcbiAgICAgICAgYmFzZTogcGFyYW1zLmJhc2UsXG4gICAgICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICAgICAgICBoZWFkOiBwYXJhbXMuaGVhZCxcbiAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHVsbFJlcXVlc3QoZGF0YS5odG1sX3VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgcHVsbCByZXF1ZXN0IGluICR7cGFyYW1zLm93bmVyfS8ke3BhcmFtcy5yZXBvfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVDb250ZW50KHBhcmFtczogR2V0RmlsZUNvbnRlbnRQYXJhbXMpOiBQcm9taXNlPEZpbGVDb250ZW50PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LnJlcG9zLmdldENvbnRlbnQoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICAgICAgcmVmOiBwYXJhbXMucmVmLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHaXRIdWIgQVBJIHJldHVybnMgYW4gYXJyYXkgZm9yIGRpcmVjdG9yaWVzLCBzaW5nbGUgb2JqZWN0IGZvciBmaWxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS50eXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXJhbXMucGF0aH0gaXMgbm90IGEgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgY29udGVudCwgc2hhOiBkYXRhLnNoYSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhcmFtcy5wYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQ6ICR7cGFyYW1zLnBhdGh9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSZXBvc2l0b3J5KG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVwb3NpdG9yeT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5yZXBvcy5nZXQoe1xuICAgICAgICBvd25lcixcbiAgICAgICAgcmVwbzogbmFtZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSZXBvc2l0b3J5KGRhdGEubmFtZSwgZGF0YS5vd25lci5sb2dpbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3Iob3duZXIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAke293bmVyfS8ke25hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHBhcmFtczogVXBkYXRlRmlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucmVwb3MuY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHMoe1xuICAgICAgICBicmFuY2g6IHBhcmFtcy5icmFuY2gsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHBhcmFtcy5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gICAgICAgIG93bmVyOiBwYXJhbXMub3duZXIsXG4gICAgICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2hhOiBwYXJhbXMuc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBmaWxlOiAke3BhcmFtcy5wYXRofWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZvbGxvdyB0aGUgc2FtZSBvcmRlciBvZiBwcmVjZWRlbmNlIG9mIGdoIGNsaVxuLy8gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9tYW51YWwvZ2hfaGVscF9lbnZpcm9ubWVudFxuZXhwb3J0IGNvbnN0IGdldEdpdEh1YlBBVCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuR0hfVE9LRU4pIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0hfVE9LRU47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTikge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJCh7IHJlamVjdDogZmFsc2UgfSlgZ2ggYXV0aCB0b2tlbmA7XG4gIGlmICghcmVzdWx0LmZhaWxlZCAmJiByZXN1bHQuZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFRhZyA9ICh7IGNsaWVudCwgb3duZXIsIHJlcG8gfTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSB0YWdzXG4gICAgY2xpZW50LnJlcXVlc3QoXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwge1xuICAgICAgb3duZXIsXG4gICAgICByZXBvLFxuICAgIH0pLFxuICAgICgpID0+IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRhZ3MgZm9yICR7b3duZXJ9LyR7cmVwb31gKSxcbiAgKVxuICAgIC5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpKVxuICAgIC8vIEZpbHRlciBvdXQgdGFncyB0aGF0IGFyZSBub3QgdmFsaWQgc2VtdmVyXG4gICAgLm1hcCgodGFncykgPT5cbiAgICAgIHRhZ3MubWFwKCh0YWcpID0+IHNlbXZlclBhcnNlKHRhZykpLmZpbHRlcigodGFnKSA9PiB0YWcgIT09IG51bGwpLFxuICAgIClcbiAgICAvLyBTb3J0IHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgLm1hcChzZW12ZXJTb3J0KVxuICAgIC8vIEdldCB0aGUgbGF0ZXN0IHRhZ1xuICAgIC5tYXAoKHRhZ3MpID0+IHRhZ3MucG9wKCkgPz8gbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFJlbGVhc2UgPSAoe1xuICBjbGllbnQsXG4gIG93bmVyLFxuICByZXBvLFxufTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgdGhlIGxhdGVzdCByZWxlYXNlIGZvciBhIHJlcG9zaXRvcnlcbiAgICBjbGllbnQucmVxdWVzdChcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCIsIHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICB9KSxcbiAgICAoKSA9PiBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsYXRlc3QgcmVsZWFzZSBmb3IgJHtvd25lcn0vJHtyZXBvfWApLFxuICApLm1hcCgoeyBkYXRhIH0pID0+IHNlbXZlclBhcnNlKGRhdGEudGFnX25hbWUpKTtcbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvb2N0b2tpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEQsT0FBTyxXQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsT0FBTyxFQUlMLGlCQUFpQixFQUdqQixXQUFXLEVBQ1gsVUFBVSxFQUNWLHVCQUF1QixHQUV4QixNQUFNLHdCQUF3QixDQUFDO0FBUWhDLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsUUFBUSxDQUFDO0lBRVQsWUFBWSxPQUFnQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUEwQjtRQUMzQyxJQUFJLENBQUM7WUFDSCxtQ0FBbUM7WUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQzVELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsR0FBRyxFQUFFLFNBQVMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDOUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ2xCLENBQUMsQ0FBQztZQUVILHdCQUF3QjtZQUN4QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsR0FBRyxFQUFFLGNBQWMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDdEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHO2FBQ3hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUMvRCxLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLCtCQUErQixDQUNuQyxNQUE2QztRQUU3QyxJQUFJLENBQUM7WUFDSCxrRkFBa0Y7WUFDbEYsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBRW5CLDRGQUE0RjtZQUM1RixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUN6QiwyREFBMkQsRUFDM0Q7Z0JBQ0UsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGVBQWU7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ2xCLENBQ0YsQ0FBQztZQUVGLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQzNCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2dCQUN2RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDeEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBRUwsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFDakIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQ2hDLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUMzQyxXQUFXLEVBQ1gsY0FBYyxDQUNmLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNyQyxjQUFjLEVBQ2QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQ2hDLENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztnQkFDL0QsZUFBZSxFQUFFLGNBQWM7Z0JBQy9CLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxlQUFlO2dCQUN4QyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07Z0JBQzVCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVU7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLHFDQUFxQyxNQUFNLENBQUMsVUFBVSxtQkFBbUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUNqRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDakIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BT3ZCO1FBQ0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDckQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzthQUNwQixDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxFQUNqRTtnQkFDRSxLQUFLLEVBQUUsS0FBSzthQUNiLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUE0QjtRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN6RCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO2dCQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTthQUNsQixDQUFDLENBQUM7WUFFSCx1RUFBdUU7WUFDdkUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQzdDLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ2xELEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixLQUFLLElBQUksSUFBSSxFQUFFLEVBQUU7Z0JBQzdELEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDO2dCQUN4RCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUN2RCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsZ0RBQWdEO0FBQ2hELG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFpQyxFQUFFO0lBQ2xFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQSxlQUFlLENBQUM7SUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDcEMsS0FBYSxFQUNiLFVBQW1CLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQzdCLEVBQUU7SUFDcEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUM7WUFDekUsR0FBRyxFQUFFLFVBQVU7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBc0IsRUFBRSxFQUFFLENBQzVFLFdBQVcsQ0FBQyxXQUFXO0FBQ3JCLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFO0lBQy9DLEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDN0Q7S0FDRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsNENBQTRDO0tBQzNDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQ2xFO0lBQ0QsK0JBQStCO0tBQzlCLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDaEIscUJBQXFCO0tBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsRUFDakMsTUFBTSxFQUNOLEtBQUssRUFDTCxJQUFJLEdBQ2UsRUFBRSxFQUFFLENBQ3ZCLFdBQVcsQ0FBQyxXQUFXO0FBQ3JCLDBDQUEwQztBQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFO0lBQzFELEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgc29kaXVtIGZyb20gXCJsaWJzb2RpdW0td3JhcHBlcnNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IE9jdG9raXQsIFJlcXVlc3RFcnJvciB9IGZyb20gXCJvY3Rva2l0XCI7XG5pbXBvcnQgc2VtdmVyUGFyc2UgZnJvbSBcInNlbXZlci9mdW5jdGlvbnMvcGFyc2UuanNcIjtcbmltcG9ydCBzZW12ZXJTb3J0IGZyb20gXCJzZW12ZXIvZnVuY3Rpb25zL3NvcnQuanNcIjtcblxuaW1wb3J0IHtcbiAgQ3JlYXRlQnJhbmNoUGFyYW1zLFxuICBDcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0UGFyYW1zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIEdldEZpbGVDb250ZW50UGFyYW1zLFxuICBHaXRIdWJTZXJ2aWNlLFxuICBQdWxsUmVxdWVzdCxcbiAgUmVwb3NpdG9yeSxcbiAgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3IsXG4gIFVwZGF0ZUZpbGVQYXJhbXMsXG59IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5cbnR5cGUgR2l0SHViUmVsZWFzZVBhcmFtID0ge1xuICBjbGllbnQ6IE9jdG9raXQ7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBPY3Rva2l0R2l0SHViU2VydmljZSBpbXBsZW1lbnRzIEdpdEh1YlNlcnZpY2Uge1xuICAjb2N0b2tpdDtcblxuICBjb25zdHJ1Y3RvcihvY3Rva2l0OiBPY3Rva2l0KSB7XG4gICAgdGhpcy4jb2N0b2tpdCA9IG9jdG9raXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCcmFuY2gocGFyYW1zOiBDcmVhdGVCcmFuY2hQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBTSEEgb2YgdGhlIHNvdXJjZSBicmFuY2hcbiAgICAgIGNvbnN0IHsgZGF0YTogcmVmRGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5nZXRSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGBoZWFkcy8ke3BhcmFtcy5mcm9tUmVmfWAsXG4gICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IGJyYW5jaFxuICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5jcmVhdGVSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGByZWZzL2hlYWRzLyR7cGFyYW1zLmJyYW5jaE5hbWV9YCxcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHNoYTogcmVmRGF0YS5vYmplY3Quc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBicmFuY2g6ICR7cGFyYW1zLmJyYW5jaE5hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0KFxuICAgIHBhcmFtczogQ3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldFBhcmFtcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdpdEh1YiByZXF1aXJlcyBlbnZpcm9ubWVudCBzZWNyZXRzIHRvIGJlIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGxpYnNvZGl1bS5cbiAgICAgIGF3YWl0IHNvZGl1bS5yZWFkeTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZXhpc3RzIGJlZm9yZSByZXNvbHZpbmcgaXRzIHB1YmxpYyBrZXkgYW5kIHN0b3Jpbmcgc2VjcmV0cy5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVxdWVzdChcbiAgICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICAgICAge1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogcHVibGljS2V5RGF0YSB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmFjdGlvbnMuZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXkoe1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gc29kaXVtLmZyb21fYmFzZTY0KFxuICAgICAgICBwdWJsaWNLZXlEYXRhLmtleSxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZWNyZXRCeXRlcyA9IHNvZGl1bS5mcm9tX3N0cmluZyhwYXJhbXMuc2VjcmV0VmFsdWUpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkQnl0ZXMgPSBzb2RpdW0uY3J5cHRvX2JveF9zZWFsKFxuICAgICAgICBzZWNyZXRCeXRlcyxcbiAgICAgICAgcHVibGljS2V5Qnl0ZXMsXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVmFsdWUgPSBzb2RpdW0udG9fYmFzZTY0KFxuICAgICAgICBlbmNyeXB0ZWRCeXRlcyxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5hY3Rpb25zLmNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQoe1xuICAgICAgICBlbmNyeXB0ZWRfdmFsdWU6IGVuY3J5cHRlZFZhbHVlLFxuICAgICAgICBlbnZpcm9ubWVudF9uYW1lOiBwYXJhbXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICBrZXlfaWQ6IHB1YmxpY0tleURhdGEua2V5X2lkLFxuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2VjcmV0X25hbWU6IHBhcmFtcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgb3IgdXBkYXRlIHNlY3JldCAke3BhcmFtcy5zZWNyZXROYW1lfSBpbiBlbnZpcm9ubWVudCAke3BhcmFtcy5lbnZpcm9ubWVudE5hbWV9YCxcbiAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHVsbFJlcXVlc3QocGFyYW1zOiB7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmc7XG4gICAgb3duZXI6IHN0cmluZztcbiAgICByZXBvOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8UHVsbFJlcXVlc3Q+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucHVsbHMuY3JlYXRlKHtcbiAgICAgICAgYmFzZTogcGFyYW1zLmJhc2UsXG4gICAgICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICAgICAgICBoZWFkOiBwYXJhbXMuaGVhZCxcbiAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHVsbFJlcXVlc3QoZGF0YS5odG1sX3VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgcHVsbCByZXF1ZXN0IGluICR7cGFyYW1zLm93bmVyfS8ke3BhcmFtcy5yZXBvfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVDb250ZW50KHBhcmFtczogR2V0RmlsZUNvbnRlbnRQYXJhbXMpOiBQcm9taXNlPEZpbGVDb250ZW50PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LnJlcG9zLmdldENvbnRlbnQoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICAgICAgcmVmOiBwYXJhbXMucmVmLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHaXRIdWIgQVBJIHJldHVybnMgYW4gYXJyYXkgZm9yIGRpcmVjdG9yaWVzLCBzaW5nbGUgb2JqZWN0IGZvciBmaWxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS50eXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXJhbXMucGF0aH0gaXMgbm90IGEgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgY29udGVudCwgc2hhOiBkYXRhLnNoYSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhcmFtcy5wYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQ6ICR7cGFyYW1zLnBhdGh9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSZXBvc2l0b3J5KG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVwb3NpdG9yeT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5yZXBvcy5nZXQoe1xuICAgICAgICBvd25lcixcbiAgICAgICAgcmVwbzogbmFtZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSZXBvc2l0b3J5KGRhdGEubmFtZSwgZGF0YS5vd25lci5sb2dpbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3Iob3duZXIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAke293bmVyfS8ke25hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHBhcmFtczogVXBkYXRlRmlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucmVwb3MuY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHMoe1xuICAgICAgICBicmFuY2g6IHBhcmFtcy5icmFuY2gsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHBhcmFtcy5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gICAgICAgIG93bmVyOiBwYXJhbXMub3duZXIsXG4gICAgICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2hhOiBwYXJhbXMuc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBmaWxlOiAke3BhcmFtcy5wYXRofWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZvbGxvdyB0aGUgc2FtZSBvcmRlciBvZiBwcmVjZWRlbmNlIG9mIGdoIGNsaVxuLy8gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9tYW51YWwvZ2hfaGVscF9lbnZpcm9ubWVudFxuZXhwb3J0IGNvbnN0IGdldEdpdEh1YlBBVCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuR0hfVE9LRU4pIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0hfVE9LRU47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTikge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJCh7IHJlamVjdDogZmFsc2UgfSlgZ2ggYXV0aCB0b2tlbmA7XG4gIGlmICghcmVzdWx0LmZhaWxlZCAmJiByZXN1bHQuZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBHaXRIdWIgb3JnYW5pemF0aW9uIHdob3NlIG1lbWJlcnMgYXJlIGFsbG93ZWQgdG8gZW1pdCBDTEkgdGVsZW1ldHJ5LiAqL1xuY29uc3QgUEFHT1BBX09SRyA9IFwicGFnb3BhXCI7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBhbiBhY3RpdmUgbWVtYmVyIG9mIHRoZSBQYWdvUEFcbiAqIEdpdEh1YiBvcmdhbml6YXRpb24uXG4gKlxuICogRmFpbHMgY2xvc2VkOiBhbnkgZXJyb3IgKG5ldHdvcmsgZmFpbHVyZSwgbWlzc2luZyBgcmVhZDpvcmdgIHNjb3BlLCA0MDMvNDA0KVxuICogcmVzb2x2ZXMgdG8gYGZhbHNlYCBzbyB0ZWxlbWV0cnkgc3RheXMgZGlzYWJsZWQgd2hlbiBtZW1iZXJzaGlwIGNhbm5vdCBiZVxuICogY29uZmlybWVkLlxuICpcbiAqIEBwYXJhbSBvY3Rva2l0IGluamVjdGFibGUgY2xpZW50LCBwcmltYXJpbHkgZm9yIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGEgY2xpZW50XG4gKiBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHN1cHBsaWVkIHRva2VuLlxuICovXG5leHBvcnQgY29uc3QgaXNQYWdvcGFPcmdNZW1iZXIgPSBhc3luYyAoXG4gIHRva2VuOiBzdHJpbmcsXG4gIG9jdG9raXQ6IE9jdG9raXQgPSBuZXcgT2N0b2tpdCh7IGF1dGg6IHRva2VuIH0pLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBvY3Rva2l0LnJlc3Qub3Jncy5nZXRNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXIoe1xuICAgICAgb3JnOiBQQUdPUEFfT1JHLFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhLnN0YXRlID09PSBcImFjdGl2ZVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFRhZyA9ICh7IGNsaWVudCwgb3duZXIsIHJlcG8gfTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSB0YWdzXG4gICAgY2xpZW50LnJlcXVlc3QoXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwge1xuICAgICAgb3duZXIsXG4gICAgICByZXBvLFxuICAgIH0pLFxuICAgICgpID0+IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRhZ3MgZm9yICR7b3duZXJ9LyR7cmVwb31gKSxcbiAgKVxuICAgIC5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpKVxuICAgIC8vIEZpbHRlciBvdXQgdGFncyB0aGF0IGFyZSBub3QgdmFsaWQgc2VtdmVyXG4gICAgLm1hcCgodGFncykgPT5cbiAgICAgIHRhZ3MubWFwKCh0YWcpID0+IHNlbXZlclBhcnNlKHRhZykpLmZpbHRlcigodGFnKSA9PiB0YWcgIT09IG51bGwpLFxuICAgIClcbiAgICAvLyBTb3J0IHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgLm1hcChzZW12ZXJTb3J0KVxuICAgIC8vIEdldCB0aGUgbGF0ZXN0IHRhZ1xuICAgIC5tYXAoKHRhZ3MpID0+IHRhZ3MucG9wKCkgPz8gbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFJlbGVhc2UgPSAoe1xuICBjbGllbnQsXG4gIG93bmVyLFxuICByZXBvLFxufTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgdGhlIGxhdGVzdCByZWxlYXNlIGZvciBhIHJlcG9zaXRvcnlcbiAgICBjbGllbnQucmVxdWVzdChcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCIsIHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICB9KSxcbiAgICAoKSA9PiBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsYXRlc3QgcmVsZWFzZSBmb3IgJHtvd25lcn0vJHtyZXBvfWApLFxuICApLm1hcCgoeyBkYXRhIH0pID0+IHNlbXZlclBhcnNlKGRhdGEudGFnX25hbWUpKTtcbiJdfQ==
@@ -11,6 +11,10 @@ export default function (plop) {
11
11
  // We filter them out here.
12
12
  const env = Object.fromEntries(Object.entries(process.env)
13
13
  .filter(([key]) => !key.startsWith("npm_config_"))
14
+ // Strip Node.js debugger env vars so child processes don't try to
15
+ // attach to the VS Code debugger and hang/fail.
16
+ .filter(([key]) => key !== "NODE_OPTIONS")
17
+ .filter(([key]) => !key.startsWith("VSCODE_INSPECTOR"))
14
18
  // Disable corepack download prompt
15
19
  .concat([["COREPACK_ENABLE_DOWNLOAD_PROMPT", "0"]]));
16
20
  const $ = $_({
@@ -27,4 +31,4 @@ export default function (plop) {
27
31
  return "Monorepo bootstrapped";
28
32
  });
29
33
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtcG5wbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9wbG9wL2FjdGlvbnMvc2V0dXAtcG5wbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxPQUFPLFdBQVcsSUFBaUI7SUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzdDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCwyQkFBMkI7UUFDM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxtQ0FBbUM7YUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWCxHQUFHO1lBQ0gsR0FBRztZQUNILFNBQVMsRUFBRSxLQUFLLEVBQUUsc0NBQXNDO1NBQ3pELENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxpRkFBaUY7UUFDakYsTUFBTSxDQUFDLENBQUEscUJBQXFCLG9CQUFvQixFQUFFLENBQUM7UUFDbkQsTUFBTSxDQUFDLENBQUEsaUVBQWlFLENBQUM7UUFDekUsTUFBTSxDQUFDLENBQUEsZ0VBQWdFLENBQUM7UUFDeEUsTUFBTSxDQUFDLENBQUEsbUZBQW1GLENBQUM7UUFDM0YsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkIGFzICRfIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgeyB0eXBlIE5vZGVQbG9wQVBJIH0gZnJvbSBcIm5vZGUtcGxvcFwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgeyBwYXlsb2FkU2NoZW1hIH0gZnJvbSBcIi4uL2dlbmVyYXRvcnMvbW9ub3JlcG8vcHJvbXB0cy5qc1wiO1xuXG5jb25zdCBwbnBtQm9vdHN0cmFwVmVyc2lvbiA9IFwiMTBcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3A6IE5vZGVQbG9wQVBJKSB7XG4gIHBsb3Auc2V0QWN0aW9uVHlwZShcInNldHVwUG5wbVwiLCBhc3luYyAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgcmVwb05hbWUgfSA9IHBheWxvYWRTY2hlbWEucGFyc2UoZGF0YSk7XG4gICAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHJlcG9OYW1lKTtcbiAgICAvLyBJZiB0aGlzIGdlbmVyYXRvciBpcyBzdGFydGVkIGJ5IGEgbnBtIHNjcmlwdCwgaXQgd2lsbCBpbmhlcml0IHNvbWVcbiAgICAvLyBjb25maWcgdmFyaWFibGVzIHRoYXQgd2lsbCBpbnRlcmZlcmUgd2l0aCBwbnBtIGNvbW1hbmRzLlxuICAgIC8vIFdlIGZpbHRlciB0aGVtIG91dCBoZXJlLlxuICAgIGNvbnN0IGVudiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByb2Nlc3MuZW52KVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIWtleS5zdGFydHNXaXRoKFwibnBtX2NvbmZpZ19cIikpXG4gICAgICAgIC8vIERpc2FibGUgY29yZXBhY2sgZG93bmxvYWQgcHJvbXB0XG4gICAgICAgIC5jb25jYXQoW1tcIkNPUkVQQUNLX0VOQUJMRV9ET1dOTE9BRF9QUk9NUFRcIiwgXCIwXCJdXSksXG4gICAgKTtcbiAgICBjb25zdCAkID0gJF8oe1xuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgZXh0ZW5kRW52OiBmYWxzZSwgLy8gRG9uJ3QgaW5jbHVkZSBwcm9jZXNzLmVudiB2YXJpYWJsZXNcbiAgICB9KTtcbiAgICAvLyBLZWVwIHRoZSBib290c3RyYXAgb24gcG5wbSAxMCBzbyBgbnggaW5pdGAgd29ya3Mgd2l0aG91dCB0aGUgcG5wbSAxMVxuICAgIC8vIGJ1aWxkLWFwcHJvdmFsIHNldHRpbmdzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGxlYWsgaW50byB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlLlxuICAgIGF3YWl0ICRgY29yZXBhY2sgdXNlIHBucG1AJHtwbnBtQm9vdHN0cmFwVmVyc2lvbn1gO1xuICAgIGF3YWl0ICRgbnB4IC0teWVzIG54QGxhdGVzdCBpbml0IC0taW50ZXJhY3RpdmU9ZmFsc2UgLS1haUFnZW50cz1jb3BpbG90YDtcbiAgICBhd2FpdCAkYHBucG0gLXcgYWRkIC1EIEBkZXZjb250YWluZXJzL2NsaSBAbngvanMgQG54L2VzbGludCBAbngvdml0ZXN0YDtcbiAgICBhd2FpdCAkYHBucG0gZGV2Y29udGFpbmVyIHRlbXBsYXRlcyBhcHBseSAtdCBnaGNyLmlvL3BhZ29wYS9kZXZjb250YWluZXItdGVtcGxhdGVzL25vZGU6MWA7XG4gICAgcmV0dXJuIFwiTW9ub3JlcG8gYm9vdHN0cmFwcGVkXCI7XG4gIH0pO1xufVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtcG5wbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9wbG9wL2FjdGlvbnMvc2V0dXAtcG5wbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxPQUFPLFdBQVcsSUFBaUI7SUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzdDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCwyQkFBMkI7UUFDM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxrRUFBa0U7WUFDbEUsZ0RBQWdEO2FBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUM7YUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdkQsbUNBQW1DO2FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsR0FBRztZQUNILEdBQUc7WUFDSCxTQUFTLEVBQUUsS0FBSyxFQUFFLHNDQUFzQztTQUN6RCxDQUFDLENBQUM7UUFDSCx1RUFBdUU7UUFDdkUsaUZBQWlGO1FBQ2pGLE1BQU0sQ0FBQyxDQUFBLHFCQUFxQixvQkFBb0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxDQUFBLGlFQUFpRSxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxDQUFBLGdFQUFnRSxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxDQUFBLG1GQUFtRixDQUFDO1FBQzNGLE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJCBhcyAkXyB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IHsgdHlwZSBOb2RlUGxvcEFQSSB9IGZyb20gXCJub2RlLXBsb3BcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IHsgcGF5bG9hZFNjaGVtYSB9IGZyb20gXCIuLi9nZW5lcmF0b3JzL21vbm9yZXBvL3Byb21wdHMuanNcIjtcblxuY29uc3QgcG5wbUJvb3RzdHJhcFZlcnNpb24gPSBcIjEwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG9wOiBOb2RlUGxvcEFQSSkge1xuICBwbG9wLnNldEFjdGlvblR5cGUoXCJzZXR1cFBucG1cIiwgYXN5bmMgKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHJlcG9OYW1lIH0gPSBwYXlsb2FkU2NoZW1hLnBhcnNlKGRhdGEpO1xuICAgIGNvbnN0IGN3ZCA9IHBhdGgucmVzb2x2ZShyZXBvTmFtZSk7XG4gICAgLy8gSWYgdGhpcyBnZW5lcmF0b3IgaXMgc3RhcnRlZCBieSBhIG5wbSBzY3JpcHQsIGl0IHdpbGwgaW5oZXJpdCBzb21lXG4gICAgLy8gY29uZmlnIHZhcmlhYmxlcyB0aGF0IHdpbGwgaW50ZXJmZXJlIHdpdGggcG5wbSBjb21tYW5kcy5cbiAgICAvLyBXZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS5cbiAgICBjb25zdCBlbnYgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwcm9jZXNzLmVudilcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICFrZXkuc3RhcnRzV2l0aChcIm5wbV9jb25maWdfXCIpKVxuICAgICAgICAvLyBTdHJpcCBOb2RlLmpzIGRlYnVnZ2VyIGVudiB2YXJzIHNvIGNoaWxkIHByb2Nlc3NlcyBkb24ndCB0cnkgdG9cbiAgICAgICAgLy8gYXR0YWNoIHRvIHRoZSBWUyBDb2RlIGRlYnVnZ2VyIGFuZCBoYW5nL2ZhaWwuXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09IFwiTk9ERV9PUFRJT05TXCIpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJWU0NPREVfSU5TUEVDVE9SXCIpKVxuICAgICAgICAvLyBEaXNhYmxlIGNvcmVwYWNrIGRvd25sb2FkIHByb21wdFxuICAgICAgICAuY29uY2F0KFtbXCJDT1JFUEFDS19FTkFCTEVfRE9XTkxPQURfUFJPTVBUXCIsIFwiMFwiXV0pLFxuICAgICk7XG4gICAgY29uc3QgJCA9ICRfKHtcbiAgICAgIGN3ZCxcbiAgICAgIGVudixcbiAgICAgIGV4dGVuZEVudjogZmFsc2UsIC8vIERvbid0IGluY2x1ZGUgcHJvY2Vzcy5lbnYgdmFyaWFibGVzXG4gICAgfSk7XG4gICAgLy8gS2VlcCB0aGUgYm9vdHN0cmFwIG9uIHBucG0gMTAgc28gYG54IGluaXRgIHdvcmtzIHdpdGhvdXQgdGhlIHBucG0gMTFcbiAgICAvLyBidWlsZC1hcHByb3ZhbCBzZXR0aW5ncyB0aGF0IHdvdWxkIG90aGVyd2lzZSBsZWFrIGludG8gdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZS5cbiAgICBhd2FpdCAkYGNvcmVwYWNrIHVzZSBwbnBtQCR7cG5wbUJvb3RzdHJhcFZlcnNpb259YDtcbiAgICBhd2FpdCAkYG5weCAtLXllcyBueEBsYXRlc3QgaW5pdCAtLWludGVyYWN0aXZlPWZhbHNlIC0tYWlBZ2VudHM9Y29waWxvdGA7XG4gICAgYXdhaXQgJGBwbnBtIC13IGFkZCAtRCBAZGV2Y29udGFpbmVycy9jbGkgQG54L2pzIEBueC9lc2xpbnQgQG54L3ZpdGVzdGA7XG4gICAgYXdhaXQgJGBwbnBtIGRldmNvbnRhaW5lciB0ZW1wbGF0ZXMgYXBwbHkgLXQgZ2hjci5pby9wYWdvcGEvZGV2Y29udGFpbmVyLXRlbXBsYXRlcy9ub2RlOjFgO1xuICAgIHJldHVybiBcIk1vbm9yZXBvIGJvb3RzdHJhcHBlZFwiO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Updates infra/repository/main.tf and applies it so GitHub.com repository
3
+ * environments exist before deployment scaffolding continues.
4
+ *
5
+ * The repository Terraform module remains the source of truth for GitHub
6
+ * environments, including protection rules and reviewers. This action only
7
+ * changes the module's `repository.environments` input, then runs Terraform from
8
+ * infra/repository to create or update the environments on GitHub.
9
+ */
10
+ import { type NodePlopAPI } from "node-plop";
11
+ import type { Environment } from "../../../domain/environment.js";
12
+ import { type Payload } from "../generators/environment/prompts.js";
13
+ export declare const syncRepositoryTerraformEnvironments: (content: string, environmentName: Environment["name"]) => string;
14
+ export declare const syncRepositoryEnvironments: (payload: Payload) => Promise<void>;
15
+ export default function (plop: NodePlopAPI): void;