@pipeline-builder/pipeline-manager 3.4.161 → 3.4.162

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 (52) hide show
  1. package/README.md +10 -10
  2. package/dist/agent/post-steps.js +3 -3
  3. package/dist/boilerplate.js +2 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +103 -51
  6. package/dist/commands/audit-stacks.d.ts +2 -2
  7. package/dist/commands/audit-stacks.js +4 -4
  8. package/dist/commands/audit-tokens.d.ts +2 -2
  9. package/dist/commands/audit-tokens.js +5 -5
  10. package/dist/commands/create-pat.d.ts +27 -0
  11. package/dist/commands/create-pat.d.ts.map +1 -0
  12. package/dist/commands/create-pat.js +209 -0
  13. package/dist/commands/create-pipeline.js +2 -2
  14. package/dist/commands/deploy.d.ts +2 -2
  15. package/dist/commands/deploy.js +4 -4
  16. package/dist/commands/get-pipeline.d.ts +3 -3
  17. package/dist/commands/get-pipeline.js +5 -5
  18. package/dist/commands/get-plugin.d.ts +3 -3
  19. package/dist/commands/get-plugin.js +5 -5
  20. package/dist/commands/list-pipelines.d.ts +5 -5
  21. package/dist/commands/list-pipelines.js +7 -7
  22. package/dist/commands/list-plugins.d.ts +5 -5
  23. package/dist/commands/list-plugins.js +7 -7
  24. package/dist/commands/login.d.ts +5 -5
  25. package/dist/commands/login.js +8 -8
  26. package/dist/commands/new-plugin.d.ts +12 -0
  27. package/dist/commands/new-plugin.d.ts.map +1 -0
  28. package/dist/commands/new-plugin.js +129 -0
  29. package/dist/commands/org-export.d.ts +3 -3
  30. package/dist/commands/org-export.js +5 -5
  31. package/dist/commands/register.d.ts +2 -2
  32. package/dist/commands/register.js +3 -3
  33. package/dist/commands/store-token.d.ts +8 -8
  34. package/dist/commands/store-token.js +11 -11
  35. package/dist/commands/synth.d.ts +3 -3
  36. package/dist/commands/synth.js +4 -4
  37. package/dist/commands/upload-plugin.d.ts +4 -4
  38. package/dist/commands/upload-plugin.d.ts.map +1 -1
  39. package/dist/commands/upload-plugin.js +9 -8
  40. package/dist/commands/validate-plugin.d.ts +12 -0
  41. package/dist/commands/validate-plugin.d.ts.map +1 -0
  42. package/dist/commands/validate-plugin.js +175 -0
  43. package/dist/commands/validate-templates.d.ts +3 -3
  44. package/dist/commands/validate-templates.js +5 -5
  45. package/dist/lambda/token-renew-handler.js +4 -4
  46. package/dist/templates/events-stack.json +2 -2
  47. package/dist/templates/token-renew-stack.json +2 -2
  48. package/dist/utils/api-client.js +2 -2
  49. package/dist/utils/command-utils.js +2 -2
  50. package/dist/utils/registry.d.ts +2 -2
  51. package/dist/utils/registry.js +3 -3
  52. package/package.json +3 -3
@@ -24,15 +24,15 @@ const { bold, green } = pico;
24
24
  *
25
25
  * @example
26
26
  * ```bash
27
- * cli upload-plugin --file plugin.zip --organization acme
28
- * cli upload-plugin --file plugin.zip --organization acme --public
29
- * cli upload-plugin --file plugin.zip --organization acme --name my-plugin --version 1.0.0
30
- * cli upload-plugin --file plugin.zip --organization acme --no-verify-ssl
27
+ * cli plugin upload --file plugin.zip --organization acme
28
+ * cli plugin upload --file plugin.zip --organization acme --public
29
+ * cli plugin upload --file plugin.zip --organization acme --name my-plugin --version 1.0.0
30
+ * cli plugin upload --file plugin.zip --organization acme --no-verify-ssl
31
31
  * ```
32
32
  */
33
33
  export function uploadPlugin(program) {
34
34
  program
35
- .command('upload-plugin')
35
+ .command('upload')
36
36
  .description('Upload and deploy a plugin package')
37
37
  .requiredOption('-f, --file <file>', 'Path to plugin ZIP file')
38
38
  .requiredOption('-o, --organization <organization>', 'Organization name')
@@ -116,9 +116,10 @@ export function uploadPlugin(program) {
116
116
  throw new ValidationError('Plugin file is not readable', 'file', filePath);
117
117
  }
118
118
  printSuccess('Plugin file validated');
119
- // Validate version format if provided
119
+ // Validate version format if provided. Allows -prerelease and +build
120
+ // metadata (valid semver) to match validate-plugin and the DB constraint.
120
121
  if (options.version) {
121
- const versionRegex = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/;
122
+ const versionRegex = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/;
122
123
  if (!versionRegex.test(options.version)) {
123
124
  printWarning('Version format may be invalid', {
124
125
  provided: options.version,
@@ -272,4 +273,4 @@ export function uploadPlugin(program) {
272
273
  }
273
274
  });
274
275
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFvQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsb0NBQW9DLENBQUM7U0FDakQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHlCQUF5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TyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFdBQVc7b0JBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2lCQUM3QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEZJTEVfU0laRV9MSU1JVFMsIGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSwgZmlsZUV4aXN0cywgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGB1cGxvYWQtcGx1Z2luYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFZhbGlkYXRlcyBhIGxvY2FsIHBsdWdpbiBaSVAgZmlsZSAoc2l6ZSwgZXh0ZW5zaW9uLCByZWFkYWJpbGl0eSksXG4gKiBidWlsZHMgYSBtdWx0aXBhcnQgZm9ybSwgYW5kIHVwbG9hZHMgaXQgdG8gdGhlIHBsYXRmb3JtIEFQSS5cbiAqIFBsdWdpbiBuYW1lIGFuZCB2ZXJzaW9uIGNhbiBiZSBhdXRvLWRldGVjdGVkIGZyb20gdGhlIHBhY2thZ2VcbiAqIG9yIG92ZXJyaWRkZW4gdmlhIENMSSBmbGFncy5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZVxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLXB1YmxpY1xuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5hbWUgbXktcGx1Z2luIC0tdmVyc2lvbiAxLjAuMFxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5vLXZlcmlmeS1zc2xcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkUGx1Z2luKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd1cGxvYWQtcGx1Z2luJylcbiAgICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhbmQgZGVwbG95IGEgcGx1Z2luIHBhY2thZ2UnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAnUGF0aCB0byBwbHVnaW4gWklQIGZpbGUnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lJylcbiAgICAub3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdQbHVnaW4gbmFtZSAob3B0aW9uYWwsIGV4dHJhY3RlZCBmcm9tIHBhY2thZ2UgaWYgbm90IHByb3ZpZGVkKScpXG4gICAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnUGx1Z2luIHZlcnNpb24gKG9wdGlvbmFsLCBleHRyYWN0ZWQgZnJvbSBwYWNrYWdlIGlmIG5vdCBwcm92aWRlZCknKVxuICAgIC5vcHRpb24oJy0tcHVibGljJywgJ01ha2UgcGx1Z2luIHB1YmxpY2x5IGFjY2Vzc2libGUnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWFjdGl2ZScsICdTZXQgcGx1Z2luIGFzIGFjdGl2ZScsIHRydWUpXG4gICAgLm9wdGlvbignLS1uby1hY3RpdmUnLCAnVXBsb2FkIHRoZSBwbHVnaW4gYXMgaW5hY3RpdmUnKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGZpbGUgd2l0aG91dCB1cGxvYWRpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFBsdWdpbicpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcoYXV0by1kZXRlY3QpJyxcbiAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgb3JnYW5pemF0aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgdHlwZW9mIG9wdGlvbnMub3JnYW5pemF0aW9uICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLm9yZ2FuaXphdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBvcmdhbml6YXRpb24gbmFtZScsIHsgcHJvdmlkZWQ6IG9wdGlvbnMub3JnYW5pemF0aW9uIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09yZ2FuaXphdGlvbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICdvcmdhbml6YXRpb24nLCBvcHRpb25zLm9yZ2FuaXphdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGUgfHwgdHlwZW9mIG9wdGlvbnMuZmlsZSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5maWxlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcsIHsgcHJvdmlkZWQ6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnZmlsZScsIG9wdGlvbnMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIHByaW50SW5mbygnVmFsaWRhdGluZyBwbHVnaW4gZmlsZScsIHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUGx1Z2luIGZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuemlwJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC56aXAnLCB7XG4gICAgICAgICAgICBwcm92aWRlZDogZmlsZUV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnLnppcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgbXVzdCBiZSBhIFpJUCBhcmNoaXZlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZmlsZSBzdGF0c1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3Qgc2l6ZUJ5dGVzID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgY29uc3Qgc2l6ZUZvcm1hdHRlZCA9IGZvcm1hdEZpbGVTaXplKHNpemVCeXRlcyk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQbHVnaW4gZmlsZSBmb3VuZCcsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZShzdGF0cy5tdGltZSkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBtYXhpbXVtOiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgICBleGNlZWRlZEJ5OiBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMgLSBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBQbHVnaW4gZmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke2Zvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUExVR0lOKX0gKGFjdHVhbDogJHtzaXplRm9ybWF0dGVkfSlgLFxuICAgICAgICAgICAgJ2ZpbGUuc2l6ZScsXG4gICAgICAgICAgICBzaXplQnl0ZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgcmVhZGFibGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5hY2Nlc3NTeW5jKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ2Fubm90IHJlYWQgcGx1Z2luIGZpbGUnLCB7XG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgaXMgbm90IHJlYWRhYmxlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBmaWxlIHZhbGlkYXRlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uUmVnZXggPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblJlZ2V4LnRlc3Qob3B0aW9ucy52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdWZXJzaW9uIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdzZW1hbnRpYyB2ZXJzaW9uIChlLmcuLCAxLjAuMCwgMS4yLjMtYmV0YS4xKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lIGZvcm1hdCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZVJlZ2V4ID0gL15bYS16MC05LV0rJC87XG4gICAgICAgICAgaWYgKCFuYW1lUmVnZXgudGVzdChvcHRpb25zLm5hbWUpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BsdWdpbiBuYW1lIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggZGFzaGVzIChlLmcuLCBteS1wbHVnaW4tbmFtZSknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBWYWxpZGF0aW9uIENvbXBsZXRlJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkIC0gbm8gdXBsb2FkIHBlcmZvcm1lZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBGaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIFNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgTmFtZTogb3B0aW9ucy5uYW1lIHx8ICcod2lsbCBiZSBhdXRvLWRldGVjdGVkKScsXG4gICAgICAgICAgICBWZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFB1YmxpYzogb3B0aW9ucy5wdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgICBBY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGZvcm0gZGF0YVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignVXBsb2FkaW5nIFBsdWdpbicpO1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyB1cGxvYWQnLCB7XG4gICAgICAgICAgZmlsZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXphdGlvbicsIG9wdGlvbnMub3JnYW5pemF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSBmb3JtRGF0YS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRpb25zLnZlcnNpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgb3B0aW9ucy5wdWJsaWMgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc0FjdGl2ZScsIG9wdGlvbnMuYWN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cbiAgICAgICAgLy8gTWFrZSBBUEkgcmVxdWVzdFxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGNvbmZpZy5hcGkucGx1Z2luVXBsb2FkVXJsO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyB0byBBUEknLCB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGxvYWRpbmcgcGx1Z2luLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQbHVnaW5SZXNwb25zZTtcbiAgICAgICAgbGV0IGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0Rm9ybTxQbHVnaW5SZXNwb25zZT4oZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgICAgICAgICBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQbHVnaW4gdXBsb2FkZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1VwbG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBsdWdpbj4ocmF3UmVzcG9uc2UsICdwbHVnaW4nLCAnbmFtZScpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyB2YWxpZCBwbHVnaW4gZGF0YSBpbiByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQgLSBubyB2YWxpZCBwbHVnaW4gZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1BsdWdpbiBVcGxvYWRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHBsdWdpbiBpbmZvcm1hdGlvblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGx1Z2luIElEJzogZ3JlZW4oYm9sZChyZXNwb25zZS5pZCkpLFxuICAgICAgICAgICdOYW1lJzogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnRGVzY3JpcHRpb24nOiByZXNwb25zZS5kZXNjcmlwdGlvbiB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBVUkwnOiByZXNwb25zZS5maWxlVXJsIHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdGaWxlIFNpemUnOiByZXNwb25zZS5maWxlU2l6ZSA/IGAkeyhyZXNwb25zZS5maWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdDaGVja3N1bSc6IHJlc3BvbnNlLmNoZWNrc3VtID8gYCR7cmVzcG9uc2UuY2hlY2tzdW0uc3Vic3RyaW5nKDAsIDE2KX0uLi5gIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1B1YmxpYyc6IHJlc3BvbnNlLmlzUHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiByZXNwb25zZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHJlc3BvbnNlLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBsb2FkZWQgQnknOiByZXNwb25zZS51cGxvYWRlZEJ5IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVXBsb2FkIER1cmF0aW9uJzogYCR7KGR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKX1zYCxcbiAgICAgICAgICAnU3RhdHVzJzogZ3JlZW4oJ+KckyBTdWNjZXNzJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BsdWdpbiBtZXRhZGF0YSBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YSkubGVuZ3RoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgZGVwbG95bWVudCBsb2dzIFVSTCBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BbJ1gtUmVxdWVzdC1JZCddIHx8IHJlc3AucmVxdWVzdElkO1xuICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBsb2dzIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfS9sb2dzLyR7cmVxdWVzdElkfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdOZXh0IHN0ZXBzJywge1xuICAgICAgICAgIHZpZXc6IGBVc2UgXCJnZXQtcGx1Z2luIC0taWQgJHtyZXNwb25zZS5pZH1cIiB0byB2aWV3IHBsdWdpbiBkZXRhaWxzYCxcbiAgICAgICAgICBsaXN0OiAnVXNlIFwibGlzdC1wbHVnaW5zXCIgdG8gc2VlIGFsbCBwbHVnaW5zJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICd1cGxvYWQtcGx1Z2luJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG4gICAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFvQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxPQUFPO1NBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqQixXQUFXLENBQUMsb0NBQW9DLENBQUM7U0FDakQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDO1NBQzlELGNBQWMsQ0FBQyxtQ0FBbUMsRUFBRSxtQkFBbUIsQ0FBQztTQUN4RSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsZ0VBQWdFLENBQUM7U0FDN0YsTUFBTSxDQUFDLHlCQUF5QixFQUFFLG1FQUFtRSxDQUFDO1NBQ3RHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsaUNBQWlDLEVBQUUsS0FBSyxDQUFDO1NBQzVELE1BQU0sQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDO1NBQ2hELE1BQU0sQ0FBQyxhQUFhLEVBQUUsK0JBQStCLENBQUM7U0FDdEQsTUFBTSxDQUFDLGNBQWMsRUFBRSxxQ0FBcUMsQ0FBQztTQUM3RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7U0FDakUsTUFBTSxDQUFDLFdBQVcsRUFBRSxpQ0FBaUMsRUFBRSxLQUFLLENBQUM7U0FDN0QsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUM7WUFFSCxxQkFBcUI7WUFDckIsU0FBUyxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksZUFBZTtnQkFDckMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksZUFBZTtnQkFDM0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsaURBQWlEO1lBQ2pELGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkMsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xILFVBQVUsQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxJQUFJLGVBQWUsQ0FBQyx5Q0FBeUMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdHLENBQUM7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUYsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLElBQUksZUFBZSxDQUFDLHNDQUFzQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUYsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLHVCQUF1QjtZQUN2QixTQUFTLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUV4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLElBQUksZUFBZSxDQUFDLDBCQUEwQixRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELDBCQUEwQjtZQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixZQUFZLENBQUMsNEJBQTRCLEVBQUU7b0JBQ3pDLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsTUFBTTtpQkFDakIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxlQUFlLENBQUMsbUNBQW1DLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25GLENBQUM7WUFFRCxpQkFBaUI7WUFDakIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVoRCxZQUFZLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ2hDLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxhQUFhO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTthQUNqRCxDQUFDLENBQUM7WUFFSCxrQkFBa0I7WUFDbEIsSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtvQkFDbEMsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE9BQU8sRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO29CQUNoRCxVQUFVLEVBQUUsY0FBYyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7aUJBQ2hFLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksZUFBZSxDQUN2Qix1Q0FBdUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLGFBQWEsR0FBRyxFQUMzRyxXQUFXLEVBQ1gsU0FBUyxDQUNWLENBQUM7WUFDSixDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksQ0FBQztnQkFDSCxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRTtvQkFDcEMsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQzlELENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksZUFBZSxDQUFDLDZCQUE2QixFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFFdEMscUVBQXFFO1lBQ3JFLDBFQUEwRTtZQUMxRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxZQUFZLEdBQUcsc0RBQXNELENBQUM7Z0JBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN4QyxZQUFZLENBQUMsK0JBQStCLEVBQUU7d0JBQzVDLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTzt3QkFDekIsUUFBUSxFQUFFLDhDQUE4QztxQkFDekQsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNsQyxZQUFZLENBQUMsbUNBQW1DLEVBQUU7d0JBQ2hELFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDdEIsUUFBUSxFQUFFLDJEQUEyRDtxQkFDdEUsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBRUQsZUFBZTtZQUNmLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixZQUFZLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDOUMsWUFBWSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBRTdELGFBQWEsQ0FBQztvQkFDWixJQUFJLEVBQUUsUUFBUTtvQkFDZCxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSx5QkFBeUI7b0JBQy9DLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLHlCQUF5QjtvQkFDckQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDdEMsQ0FBQyxDQUFDO2dCQUVILE9BQU87WUFDVCxDQUFDO1lBRUQsa0NBQWtDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVsQyxtQkFBbUI7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNqQyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsSUFBSSxFQUFFLGFBQWE7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsV0FBVyxFQUFFLGlCQUFpQjthQUMvQixDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsSUFBSSxPQUFPLENBQUMsSUFBSTtnQkFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxPQUFPLENBQUMsT0FBTztnQkFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRCxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9ELG1CQUFtQjtZQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFFBQVEsRUFBRTthQUM3QyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWhCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25ELElBQUksV0FBMkIsQ0FBQztZQUNoQyxJQUFJLFFBQWdCLENBQUM7WUFDckIsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBaUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN4RSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFTLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFOUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLFVBQVUsQ0FBQyxrQ0FBa0MsRUFBRTtvQkFDN0MsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtpQkFDaEUsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixZQUFZLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUU3Qyw2QkFBNkI7WUFDN0IsYUFBYSxDQUFDO2dCQUNaLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNyQixTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQzNCLGNBQWMsRUFBRSxRQUFRLENBQUMsWUFBWTtnQkFDckMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksV0FBVzthQUNuRCxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLGFBQWEsQ0FBQztnQkFDWixVQUFVLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxpQkFBaUI7Z0JBQ2pELFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCO2dCQUNsRyxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCO2FBQy9GLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsYUFBYSxDQUFDO2dCQUNaLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFDLFlBQVksRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLGlCQUFpQjtnQkFDckQsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksaUJBQWlCO2FBQ3hELENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsYUFBYSxDQUFDO2dCQUNaLGNBQWMsRUFBRSxXQUFXO2dCQUMzQixpQkFBaUIsRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFDckQsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUM7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsNENBQTRDO1lBQzVDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixTQUFTLENBQUMsMkJBQTJCLEVBQUU7b0JBQ3JDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNO2lCQUM1QyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQseUNBQXlDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQThDLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixTQUFTLENBQUMsMkJBQTJCLEVBQUU7b0JBQ3JDLFNBQVM7b0JBQ1QsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLFNBQVMsU0FBUyxFQUFFO2lCQUMvQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsYUFBYTtZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDdEIsSUFBSSxFQUFFLHdCQUF3QixRQUFRLENBQUMsRUFBRSwwQkFBMEI7Z0JBQ25FLElBQUksRUFBRSx1Q0FBdUM7YUFDOUMsQ0FBQyxDQUFDO1FBRUwsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxlQUFlO29CQUN4QixXQUFXO29CQUNYLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO29CQUN0QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGSUxFX1NJWkVfTElNSVRTLCBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGx1Z2luLCB0eXBlIFBsdWdpblJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIGZpbGVFeGlzdHMsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgdXBsb2FkLXBsdWdpbmAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBWYWxpZGF0ZXMgYSBsb2NhbCBwbHVnaW4gWklQIGZpbGUgKHNpemUsIGV4dGVuc2lvbiwgcmVhZGFiaWxpdHkpLFxuICogYnVpbGRzIGEgbXVsdGlwYXJ0IGZvcm0sIGFuZCB1cGxvYWRzIGl0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKiBQbHVnaW4gbmFtZSBhbmQgdmVyc2lvbiBjYW4gYmUgYXV0by1kZXRlY3RlZCBmcm9tIHRoZSBwYWNrYWdlXG4gKiBvciBvdmVycmlkZGVuIHZpYSBDTEkgZmxhZ3MuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIGNsaSBwbHVnaW4gdXBsb2FkIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWVcbiAqIGNsaSBwbHVnaW4gdXBsb2FkIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1wdWJsaWNcbiAqIGNsaSBwbHVnaW4gdXBsb2FkIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1uYW1lIG15LXBsdWdpbiAtLXZlcnNpb24gMS4wLjBcbiAqIGNsaSBwbHVnaW4gdXBsb2FkIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1uby12ZXJpZnktc3NsXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBsdWdpbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgndXBsb2FkJylcbiAgICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhbmQgZGVwbG95IGEgcGx1Z2luIHBhY2thZ2UnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAnUGF0aCB0byBwbHVnaW4gWklQIGZpbGUnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lJylcbiAgICAub3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdQbHVnaW4gbmFtZSAob3B0aW9uYWwsIGV4dHJhY3RlZCBmcm9tIHBhY2thZ2UgaWYgbm90IHByb3ZpZGVkKScpXG4gICAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnUGx1Z2luIHZlcnNpb24gKG9wdGlvbmFsLCBleHRyYWN0ZWQgZnJvbSBwYWNrYWdlIGlmIG5vdCBwcm92aWRlZCknKVxuICAgIC5vcHRpb24oJy0tcHVibGljJywgJ01ha2UgcGx1Z2luIHB1YmxpY2x5IGFjY2Vzc2libGUnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWFjdGl2ZScsICdTZXQgcGx1Z2luIGFzIGFjdGl2ZScsIHRydWUpXG4gICAgLm9wdGlvbignLS1uby1hY3RpdmUnLCAnVXBsb2FkIHRoZSBwbHVnaW4gYXMgaW5hY3RpdmUnKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGZpbGUgd2l0aG91dCB1cGxvYWRpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFBsdWdpbicpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcoYXV0by1kZXRlY3QpJyxcbiAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgb3JnYW5pemF0aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgdHlwZW9mIG9wdGlvbnMub3JnYW5pemF0aW9uICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLm9yZ2FuaXphdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBvcmdhbml6YXRpb24gbmFtZScsIHsgcHJvdmlkZWQ6IG9wdGlvbnMub3JnYW5pemF0aW9uIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09yZ2FuaXphdGlvbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICdvcmdhbml6YXRpb24nLCBvcHRpb25zLm9yZ2FuaXphdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGUgfHwgdHlwZW9mIG9wdGlvbnMuZmlsZSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5maWxlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcsIHsgcHJvdmlkZWQ6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnZmlsZScsIG9wdGlvbnMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIHByaW50SW5mbygnVmFsaWRhdGluZyBwbHVnaW4gZmlsZScsIHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUGx1Z2luIGZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuemlwJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC56aXAnLCB7XG4gICAgICAgICAgICBwcm92aWRlZDogZmlsZUV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnLnppcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgbXVzdCBiZSBhIFpJUCBhcmNoaXZlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZmlsZSBzdGF0c1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3Qgc2l6ZUJ5dGVzID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgY29uc3Qgc2l6ZUZvcm1hdHRlZCA9IGZvcm1hdEZpbGVTaXplKHNpemVCeXRlcyk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQbHVnaW4gZmlsZSBmb3VuZCcsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZShzdGF0cy5tdGltZSkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBtYXhpbXVtOiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgICBleGNlZWRlZEJ5OiBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMgLSBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBQbHVnaW4gZmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke2Zvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUExVR0lOKX0gKGFjdHVhbDogJHtzaXplRm9ybWF0dGVkfSlgLFxuICAgICAgICAgICAgJ2ZpbGUuc2l6ZScsXG4gICAgICAgICAgICBzaXplQnl0ZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgcmVhZGFibGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5hY2Nlc3NTeW5jKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ2Fubm90IHJlYWQgcGx1Z2luIGZpbGUnLCB7XG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgaXMgbm90IHJlYWRhYmxlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBmaWxlIHZhbGlkYXRlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IGlmIHByb3ZpZGVkLiBBbGxvd3MgLXByZXJlbGVhc2UgYW5kICtidWlsZFxuICAgICAgICAvLyBtZXRhZGF0YSAodmFsaWQgc2VtdmVyKSB0byBtYXRjaCB2YWxpZGF0ZS1wbHVnaW4gYW5kIHRoZSBEQiBjb25zdHJhaW50LlxuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2lvblJlZ2V4ID0gL15cXGQrXFwuXFxkK1xcLlxcZCsoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblJlZ2V4LnRlc3Qob3B0aW9ucy52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdWZXJzaW9uIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdzZW1hbnRpYyB2ZXJzaW9uIChlLmcuLCAxLjAuMCwgMS4yLjMtYmV0YS4xKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lIGZvcm1hdCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZVJlZ2V4ID0gL15bYS16MC05LV0rJC87XG4gICAgICAgICAgaWYgKCFuYW1lUmVnZXgudGVzdChvcHRpb25zLm5hbWUpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BsdWdpbiBuYW1lIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggZGFzaGVzIChlLmcuLCBteS1wbHVnaW4tbmFtZSknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBWYWxpZGF0aW9uIENvbXBsZXRlJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkIC0gbm8gdXBsb2FkIHBlcmZvcm1lZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBGaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIFNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgTmFtZTogb3B0aW9ucy5uYW1lIHx8ICcod2lsbCBiZSBhdXRvLWRldGVjdGVkKScsXG4gICAgICAgICAgICBWZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFB1YmxpYzogb3B0aW9ucy5wdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgICBBY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGZvcm0gZGF0YVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignVXBsb2FkaW5nIFBsdWdpbicpO1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyB1cGxvYWQnLCB7XG4gICAgICAgICAgZmlsZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXphdGlvbicsIG9wdGlvbnMub3JnYW5pemF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSBmb3JtRGF0YS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRpb25zLnZlcnNpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgb3B0aW9ucy5wdWJsaWMgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc0FjdGl2ZScsIG9wdGlvbnMuYWN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cbiAgICAgICAgLy8gTWFrZSBBUEkgcmVxdWVzdFxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGNvbmZpZy5hcGkucGx1Z2luVXBsb2FkVXJsO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyB0byBBUEknLCB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGxvYWRpbmcgcGx1Z2luLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQbHVnaW5SZXNwb25zZTtcbiAgICAgICAgbGV0IGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0Rm9ybTxQbHVnaW5SZXNwb25zZT4oZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgICAgICAgICBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQbHVnaW4gdXBsb2FkZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1VwbG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBsdWdpbj4ocmF3UmVzcG9uc2UsICdwbHVnaW4nLCAnbmFtZScpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyB2YWxpZCBwbHVnaW4gZGF0YSBpbiByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQgLSBubyB2YWxpZCBwbHVnaW4gZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1BsdWdpbiBVcGxvYWRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHBsdWdpbiBpbmZvcm1hdGlvblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGx1Z2luIElEJzogZ3JlZW4oYm9sZChyZXNwb25zZS5pZCkpLFxuICAgICAgICAgICdOYW1lJzogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnRGVzY3JpcHRpb24nOiByZXNwb25zZS5kZXNjcmlwdGlvbiB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBVUkwnOiByZXNwb25zZS5maWxlVXJsIHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdGaWxlIFNpemUnOiByZXNwb25zZS5maWxlU2l6ZSA/IGAkeyhyZXNwb25zZS5maWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdDaGVja3N1bSc6IHJlc3BvbnNlLmNoZWNrc3VtID8gYCR7cmVzcG9uc2UuY2hlY2tzdW0uc3Vic3RyaW5nKDAsIDE2KX0uLi5gIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1B1YmxpYyc6IHJlc3BvbnNlLmlzUHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiByZXNwb25zZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHJlc3BvbnNlLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBsb2FkZWQgQnknOiByZXNwb25zZS51cGxvYWRlZEJ5IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVXBsb2FkIER1cmF0aW9uJzogYCR7KGR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKX1zYCxcbiAgICAgICAgICAnU3RhdHVzJzogZ3JlZW4oJ+KckyBTdWNjZXNzJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BsdWdpbiBtZXRhZGF0YSBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YSkubGVuZ3RoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgZGVwbG95bWVudCBsb2dzIFVSTCBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BbJ1gtUmVxdWVzdC1JZCddIHx8IHJlc3AucmVxdWVzdElkO1xuICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBsb2dzIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfS9sb2dzLyR7cmVxdWVzdElkfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdOZXh0IHN0ZXBzJywge1xuICAgICAgICAgIHZpZXc6IGBVc2UgXCJnZXQtcGx1Z2luIC0taWQgJHtyZXNwb25zZS5pZH1cIiB0byB2aWV3IHBsdWdpbiBkZXRhaWxzYCxcbiAgICAgICAgICBsaXN0OiAnVXNlIFwibGlzdC1wbHVnaW5zXCIgdG8gc2VlIGFsbCBwbHVnaW5zJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICd1cGxvYWQtcGx1Z2luJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG4gICAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register the `validate-plugin` command — run the same structural + `{{ }}`
4
+ * template checks the server's upload path enforces, against a LOCAL plugin
5
+ * directory, so authors catch problems before packaging/uploading. Exits
6
+ * non-zero on any problem (CI-friendly), mirroring `validate-templates`.
7
+ *
8
+ * Usage:
9
+ * pipeline-manager plugin validate --dir ./my-linter
10
+ */
11
+ export declare function validatePlugin(program: Command): void;
12
+ //# sourceMappingURL=validate-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/validate-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+IrD"}
@@ -0,0 +1,175 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { Command } from 'commander';
6
+ import YAML from 'yaml';
7
+ import { printCommandHeader } from '../utils/command-utils.js';
8
+ import { ERROR_CODES, handleError, ValidationError } from '../utils/error-handler.js';
9
+ import { printError, printSuccess, printWarning, fileExists } from '../utils/output-utils.js';
10
+ const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
11
+ const COMPUTE_TYPES = ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
12
+ const FAILURE_BEHAVIORS = ['fail', 'warn', 'ignore'];
13
+ const BUILD_TYPES = ['build_image', 'prebuilt', 'metadata_only'];
14
+ /**
15
+ * Register the `validate-plugin` command — run the same structural + `{{ }}`
16
+ * template checks the server's upload path enforces, against a LOCAL plugin
17
+ * directory, so authors catch problems before packaging/uploading. Exits
18
+ * non-zero on any problem (CI-friendly), mirroring `validate-templates`.
19
+ *
20
+ * Usage:
21
+ * pipeline-manager plugin validate --dir ./my-linter
22
+ */
23
+ export function validatePlugin(program) {
24
+ program
25
+ .command('validate')
26
+ .description('Validate a local plugin directory (config.yaml + plugin-spec.yaml) before upload')
27
+ .requiredOption('--dir <path>', 'Path to the plugin directory')
28
+ .action(async (options) => {
29
+ const executionId = printCommandHeader('Validate Plugin');
30
+ try {
31
+ const dir = path.resolve(options.dir ?? '');
32
+ if (!fileExists(dir) || !fs.statSync(dir).isDirectory()) {
33
+ throw new ValidationError(`Not a directory: ${dir}`);
34
+ }
35
+ const problems = [];
36
+ // config.yaml (optional build manifest).
37
+ const configPath = ['config.yaml', 'config.yml'].map(f => path.join(dir, f)).find(fileExists);
38
+ let buildType = 'build_image';
39
+ let specFile = 'plugin-spec.yaml';
40
+ let dockerfileName = 'Dockerfile';
41
+ if (configPath) {
42
+ const config = (YAML.parse(fs.readFileSync(configPath, 'utf-8')) ?? {});
43
+ if (config.buildType !== undefined) {
44
+ if (typeof config.buildType !== 'string' || !BUILD_TYPES.includes(config.buildType)) {
45
+ problems.push(`config.yaml: buildType must be one of ${BUILD_TYPES.join(', ')}`);
46
+ }
47
+ else {
48
+ buildType = config.buildType;
49
+ }
50
+ }
51
+ if (typeof config.pluginSpec === 'string')
52
+ specFile = config.pluginSpec;
53
+ if (typeof config.dockerfile === 'string')
54
+ dockerfileName = config.dockerfile;
55
+ if ((buildType === 'prebuilt' || buildType === 'metadata_only') && config.dockerfile) {
56
+ problems.push(`config.yaml: dockerfile is not allowed when buildType is ${buildType}`);
57
+ }
58
+ }
59
+ // plugin-spec.yaml (required).
60
+ const specPath = path.join(dir, specFile);
61
+ if (!fileExists(specPath))
62
+ throw new ValidationError(`Missing plugin spec: ${specPath}`);
63
+ const spec = (YAML.parse(fs.readFileSync(specPath, 'utf-8')) ?? {});
64
+ // Required fields.
65
+ if (typeof spec.name !== 'string' || !spec.name)
66
+ problems.push('plugin-spec.yaml: name is required');
67
+ else if (!/^[a-z0-9-]+$/.test(spec.name))
68
+ problems.push('plugin-spec.yaml: name must match /^[a-z0-9-]+$/');
69
+ if (typeof spec.version !== 'string' || !spec.version)
70
+ problems.push('plugin-spec.yaml: version is required');
71
+ // Match the server/DB semver check (allows -prerelease and +build metadata).
72
+ else if (!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(spec.version))
73
+ problems.push('plugin-spec.yaml: version must be semver (x.y.z)');
74
+ const pluginType = (typeof spec.pluginType === 'string' ? spec.pluginType : 'CodeBuildStep');
75
+ if (!PLUGIN_TYPES.includes(pluginType))
76
+ problems.push(`plugin-spec.yaml: pluginType must be one of ${PLUGIN_TYPES.join(', ')}`);
77
+ if (spec.computeType !== undefined && !COMPUTE_TYPES.includes(String(spec.computeType))) {
78
+ problems.push(`plugin-spec.yaml: computeType must be one of ${COMPUTE_TYPES.join(', ')}`);
79
+ }
80
+ if (spec.failureBehavior !== undefined && !FAILURE_BEHAVIORS.includes(String(spec.failureBehavior))) {
81
+ problems.push(`plugin-spec.yaml: failureBehavior must be one of ${FAILURE_BEHAVIORS.join(', ')}`);
82
+ }
83
+ const isApproval = pluginType === 'ManualApprovalStep';
84
+ if (!isApproval && (!Array.isArray(spec.commands) || spec.commands.length === 0)) {
85
+ problems.push('plugin-spec.yaml: commands[] is required (except for ManualApprovalStep)');
86
+ }
87
+ // Build-type prerequisites.
88
+ if (buildType === 'build_image' && !isApproval && !fileExists(path.join(dir, dockerfileName))) {
89
+ problems.push(`Dockerfile not found for buildType build_image: ${path.join(dir, dockerfileName)}`);
90
+ }
91
+ if (buildType === 'prebuilt' && !fileExists(path.join(dir, 'image.tar'))) {
92
+ problems.push('image.tar not found for buildType prebuilt');
93
+ }
94
+ // `{{ }}` template validation — same scope roots + templatable fields the
95
+ // server enforces at upload (pipeline-core primitives; no server dep).
96
+ const core = await import('@pipeline-builder/pipeline-core');
97
+ const isTpl = (f) => f === 'description' ||
98
+ f.startsWith('commands') ||
99
+ f.startsWith('installCommands') ||
100
+ f.startsWith('env.') || f.startsWith('env[') ||
101
+ f.startsWith('buildArgs.') || f.startsWith('buildArgs[');
102
+ const isKnown = core.allowedScopeRoots(['pipeline', 'plugin', 'env']);
103
+ const { errors } = core.validateTemplates(spec, isTpl, isKnown);
104
+ for (const e of errors)
105
+ problems.push(`template [${e.field ?? '?'}]: ${e.message}`);
106
+ // Plugin CONTRACT check — mirrors the server's upload validation
107
+ // (api/plugin/src/helpers/plugin-spec.ts) so a spec rejected at upload also
108
+ // fails here (no false-green). Two independent rules per `{{ pipeline.vars.X }}`
109
+ // / `{{ pipeline.metadata.X }}` reference:
110
+ // (a) declaration: unless the token has a `| default:`, X must be declared
111
+ // in requiredVars / requiredMetadata;
112
+ // (b) coercion type: if the token has a `| number|bool|json` filter, the
113
+ // declared type in varsTypes/metadataTypes (default 'string') must match.
114
+ const requiredVars = new Set(Array.isArray(spec.requiredVars) ? spec.requiredVars.map(String) : []);
115
+ const requiredMetadata = new Set(Array.isArray(spec.requiredMetadata) ? spec.requiredMetadata.map(String) : []);
116
+ const varsTypes = spec.varsTypes ?? {};
117
+ const metadataTypes = spec.metadataTypes ?? {};
118
+ const coerceToType = { number: 'number', bool: 'bool', json: 'json' };
119
+ const templatableStrings = [
120
+ ...(typeof spec.description === 'string' ? [spec.description] : []),
121
+ ...(Array.isArray(spec.commands) ? spec.commands.filter((c) => typeof c === 'string') : []),
122
+ ...(Array.isArray(spec.installCommands) ? spec.installCommands.filter((c) => typeof c === 'string') : []),
123
+ ...Object.values(spec.env ?? {}).filter((v) => typeof v === 'string'),
124
+ ...Object.values(spec.buildArgs ?? {}).filter((v) => typeof v === 'string'),
125
+ ];
126
+ for (const source of templatableStrings) {
127
+ let tokens;
128
+ try {
129
+ tokens = core.tokenize(source);
130
+ }
131
+ catch {
132
+ continue;
133
+ }
134
+ for (const t of tokens) {
135
+ if (t.kind !== 'expr')
136
+ continue;
137
+ const [root, sub, key] = t.path;
138
+ if (root !== 'pipeline' || (sub !== 'vars' && sub !== 'metadata') || !key)
139
+ continue;
140
+ const isVars = sub === 'vars';
141
+ // (a) declaration — waived by a `| default:`.
142
+ if (t.defaultValue === undefined) {
143
+ const declared = isVars ? requiredVars.has(key) : requiredMetadata.has(key);
144
+ if (!declared)
145
+ problems.push(`contract: template references {{ pipeline.${sub}.${key} }} but '${key}' is not declared in ${isVars ? 'requiredVars' : 'requiredMetadata'}`);
146
+ }
147
+ // (b) coercion type — independent of default.
148
+ if (t.coerce) {
149
+ const declaredType = (isVars ? varsTypes : metadataTypes)[key] ?? 'string';
150
+ const expectedType = coerceToType[t.coerce];
151
+ if (expectedType && declaredType !== expectedType) {
152
+ problems.push(`contract: {{ pipeline.${sub}.${key} | ${t.coerce} }} but declared type is '${declaredType}' (add '${key}: ${expectedType}' to ${isVars ? 'varsTypes' : 'metadataTypes'})`);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ if (problems.length === 0) {
158
+ printSuccess(`Plugin '${String(spec.name)}' is valid`, { executionId, buildType, pluginType });
159
+ return;
160
+ }
161
+ printWarning(`Found ${problems.length} problem(s):`);
162
+ for (const p of problems)
163
+ printError(` • ${p}`);
164
+ process.exit(1);
165
+ }
166
+ catch (err) {
167
+ handleError(err, err instanceof ValidationError ? ERROR_CODES.VALIDATION : ERROR_CODES.GENERAL, {
168
+ debug: program.opts().debug,
169
+ exit: true,
170
+ context: { command: 'validate-plugin', executionId },
171
+ });
172
+ }
173
+ });
174
+ }
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTTlGLE1BQU0sWUFBWSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRWpFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFnQjtJQUM3QyxPQUFPO1NBQ0osT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixXQUFXLENBQUMsa0ZBQWtGLENBQUM7U0FDL0YsY0FBYyxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQztTQUM5RCxNQUFNLENBQUMsS0FB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Z0JBQzlGLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRTthQUNyRCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZywgZmlsZUV4aXN0cyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmludGVyZmFjZSBWYWxpZGF0ZVBsdWdpbk9wdGlvbnMge1xuICBkaXI/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFBMVUdJTl9UWVBFUyA9IFsnQ29kZUJ1aWxkU3RlcCcsICdTaGVsbFN0ZXAnLCAnTWFudWFsQXBwcm92YWxTdGVwJ107XG5jb25zdCBDT01QVVRFX1RZUEVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnLCAnWDJfTEFSR0UnXTtcbmNvbnN0IEZBSUxVUkVfQkVIQVZJT1JTID0gWydmYWlsJywgJ3dhcm4nLCAnaWdub3JlJ107XG5jb25zdCBCVUlMRF9UWVBFUyA9IFsnYnVpbGRfaW1hZ2UnLCAncHJlYnVpbHQnLCAnbWV0YWRhdGFfb25seSddO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBgdmFsaWRhdGUtcGx1Z2luYCBjb21tYW5kIOKAlCBydW4gdGhlIHNhbWUgc3RydWN0dXJhbCArIGB7eyB9fWBcbiAqIHRlbXBsYXRlIGNoZWNrcyB0aGUgc2VydmVyJ3MgdXBsb2FkIHBhdGggZW5mb3JjZXMsIGFnYWluc3QgYSBMT0NBTCBwbHVnaW5cbiAqIGRpcmVjdG9yeSwgc28gYXV0aG9ycyBjYXRjaCBwcm9ibGVtcyBiZWZvcmUgcGFja2FnaW5nL3VwbG9hZGluZy4gRXhpdHNcbiAqIG5vbi16ZXJvIG9uIGFueSBwcm9ibGVtIChDSS1mcmllbmRseSksIG1pcnJvcmluZyBgdmFsaWRhdGUtdGVtcGxhdGVzYC5cbiAqXG4gKiBVc2FnZTpcbiAqICAgcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gdmFsaWRhdGUgLS1kaXIgLi9teS1saW50ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGx1Z2luKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd2YWxpZGF0ZScpXG4gICAgLmRlc2NyaXB0aW9uKCdWYWxpZGF0ZSBhIGxvY2FsIHBsdWdpbiBkaXJlY3RvcnkgKGNvbmZpZy55YW1sICsgcGx1Z2luLXNwZWMueWFtbCkgYmVmb3JlIHVwbG9hZCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctLWRpciA8cGF0aD4nLCAnUGF0aCB0byB0aGUgcGx1Z2luIGRpcmVjdG9yeScpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogVmFsaWRhdGVQbHVnaW5PcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVmFsaWRhdGUgUGx1Z2luJyk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5kaXIgPz8gJycpO1xuICAgICAgICBpZiAoIWZpbGVFeGlzdHMoZGlyKSB8fCAhZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgTm90IGEgZGlyZWN0b3J5OiAke2Rpcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2JsZW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIC8vIGNvbmZpZy55YW1sIChvcHRpb25hbCBidWlsZCBtYW5pZmVzdCkuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBbJ2NvbmZpZy55YW1sJywgJ2NvbmZpZy55bWwnXS5tYXAoZiA9PiBwYXRoLmpvaW4oZGlyLCBmKSkuZmluZChmaWxlRXhpc3RzKTtcbiAgICAgICAgbGV0IGJ1aWxkVHlwZSA9ICdidWlsZF9pbWFnZSc7XG4gICAgICAgIGxldCBzcGVjRmlsZSA9ICdwbHVnaW4tc3BlYy55YW1sJztcbiAgICAgICAgbGV0IGRvY2tlcmZpbGVOYW1lID0gJ0RvY2tlcmZpbGUnO1xuICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IChZQU1MLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKSkgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIGlmIChjb25maWcuYnVpbGRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmJ1aWxkVHlwZSAhPT0gJ3N0cmluZycgfHwgIUJVSUxEX1RZUEVTLmluY2x1ZGVzKGNvbmZpZy5idWlsZFR5cGUpKSB7XG4gICAgICAgICAgICAgIHByb2JsZW1zLnB1c2goYGNvbmZpZy55YW1sOiBidWlsZFR5cGUgbXVzdCBiZSBvbmUgb2YgJHtCVUlMRF9UWVBFUy5qb2luKCcsICcpfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnVpbGRUeXBlID0gY29uZmlnLmJ1aWxkVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcucGx1Z2luU3BlYyA9PT0gJ3N0cmluZycpIHNwZWNGaWxlID0gY29uZmlnLnBsdWdpblNwZWM7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZG9ja2VyZmlsZSA9PT0gJ3N0cmluZycpIGRvY2tlcmZpbGVOYW1lID0gY29uZmlnLmRvY2tlcmZpbGU7XG4gICAgICAgICAgaWYgKChidWlsZFR5cGUgPT09ICdwcmVidWlsdCcgfHwgYnVpbGRUeXBlID09PSAnbWV0YWRhdGFfb25seScpICYmIGNvbmZpZy5kb2NrZXJmaWxlKSB7XG4gICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGBjb25maWcueWFtbDogZG9ja2VyZmlsZSBpcyBub3QgYWxsb3dlZCB3aGVuIGJ1aWxkVHlwZSBpcyAke2J1aWxkVHlwZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbHVnaW4tc3BlYy55YW1sIChyZXF1aXJlZCkuXG4gICAgICAgIGNvbnN0IHNwZWNQYXRoID0gcGF0aC5qb2luKGRpciwgc3BlY0ZpbGUpO1xuICAgICAgICBpZiAoIWZpbGVFeGlzdHMoc3BlY1BhdGgpKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBNaXNzaW5nIHBsdWdpbiBzcGVjOiAke3NwZWNQYXRofWApO1xuICAgICAgICBjb25zdCBzcGVjID0gKFlBTUwucGFyc2UoZnMucmVhZEZpbGVTeW5jKHNwZWNQYXRoLCAndXRmLTgnKSkgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgIC8vIFJlcXVpcmVkIGZpZWxkcy5cbiAgICAgICAgaWYgKHR5cGVvZiBzcGVjLm5hbWUgIT09ICdzdHJpbmcnIHx8ICFzcGVjLm5hbWUpIHByb2JsZW1zLnB1c2goJ3BsdWdpbi1zcGVjLnlhbWw6IG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgZWxzZSBpZiAoIS9eW2EtejAtOS1dKyQvLnRlc3Qoc3BlYy5uYW1lKSkgcHJvYmxlbXMucHVzaCgncGx1Z2luLXNwZWMueWFtbDogbmFtZSBtdXN0IG1hdGNoIC9eW2EtejAtOS1dKyQvJyk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3BlYy52ZXJzaW9uICE9PSAnc3RyaW5nJyB8fCAhc3BlYy52ZXJzaW9uKSBwcm9ibGVtcy5wdXNoKCdwbHVnaW4tc3BlYy55YW1sOiB2ZXJzaW9uIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIC8vIE1hdGNoIHRoZSBzZXJ2ZXIvREIgc2VtdmVyIGNoZWNrIChhbGxvd3MgLXByZXJlbGVhc2UgYW5kICtidWlsZCBtZXRhZGF0YSkuXG4gICAgICAgIGVsc2UgaWYgKCEvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC8udGVzdChzcGVjLnZlcnNpb24pKSBwcm9ibGVtcy5wdXNoKCdwbHVnaW4tc3BlYy55YW1sOiB2ZXJzaW9uIG11c3QgYmUgc2VtdmVyICh4LnkueiknKTtcblxuICAgICAgICBjb25zdCBwbHVnaW5UeXBlID0gKHR5cGVvZiBzcGVjLnBsdWdpblR5cGUgPT09ICdzdHJpbmcnID8gc3BlYy5wbHVnaW5UeXBlIDogJ0NvZGVCdWlsZFN0ZXAnKTtcbiAgICAgICAgaWYgKCFQTFVHSU5fVFlQRVMuaW5jbHVkZXMocGx1Z2luVHlwZSkpIHByb2JsZW1zLnB1c2goYHBsdWdpbi1zcGVjLnlhbWw6IHBsdWdpblR5cGUgbXVzdCBiZSBvbmUgb2YgJHtQTFVHSU5fVFlQRVMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKHNwZWMuY29tcHV0ZVR5cGUgIT09IHVuZGVmaW5lZCAmJiAhQ09NUFVURV9UWVBFUy5pbmNsdWRlcyhTdHJpbmcoc3BlYy5jb21wdXRlVHlwZSkpKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaChgcGx1Z2luLXNwZWMueWFtbDogY29tcHV0ZVR5cGUgbXVzdCBiZSBvbmUgb2YgJHtDT01QVVRFX1RZUEVTLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwZWMuZmFpbHVyZUJlaGF2aW9yICE9PSB1bmRlZmluZWQgJiYgIUZBSUxVUkVfQkVIQVZJT1JTLmluY2x1ZGVzKFN0cmluZyhzcGVjLmZhaWx1cmVCZWhhdmlvcikpKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaChgcGx1Z2luLXNwZWMueWFtbDogZmFpbHVyZUJlaGF2aW9yIG11c3QgYmUgb25lIG9mICR7RkFJTFVSRV9CRUhBVklPUlMuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQXBwcm92YWwgPSBwbHVnaW5UeXBlID09PSAnTWFudWFsQXBwcm92YWxTdGVwJztcbiAgICAgICAgaWYgKCFpc0FwcHJvdmFsICYmICghQXJyYXkuaXNBcnJheShzcGVjLmNvbW1hbmRzKSB8fCBzcGVjLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKCdwbHVnaW4tc3BlYy55YW1sOiBjb21tYW5kc1tdIGlzIHJlcXVpcmVkIChleGNlcHQgZm9yIE1hbnVhbEFwcHJvdmFsU3RlcCknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkLXR5cGUgcHJlcmVxdWlzaXRlcy5cbiAgICAgICAgaWYgKGJ1aWxkVHlwZSA9PT0gJ2J1aWxkX2ltYWdlJyAmJiAhaXNBcHByb3ZhbCAmJiAhZmlsZUV4aXN0cyhwYXRoLmpvaW4oZGlyLCBkb2NrZXJmaWxlTmFtZSkpKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaChgRG9ja2VyZmlsZSBub3QgZm91bmQgZm9yIGJ1aWxkVHlwZSBidWlsZF9pbWFnZTogJHtwYXRoLmpvaW4oZGlyLCBkb2NrZXJmaWxlTmFtZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1aWxkVHlwZSA9PT0gJ3ByZWJ1aWx0JyAmJiAhZmlsZUV4aXN0cyhwYXRoLmpvaW4oZGlyLCAnaW1hZ2UudGFyJykpKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaCgnaW1hZ2UudGFyIG5vdCBmb3VuZCBmb3IgYnVpbGRUeXBlIHByZWJ1aWx0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBge3sgfX1gIHRlbXBsYXRlIHZhbGlkYXRpb24g4oCUIHNhbWUgc2NvcGUgcm9vdHMgKyB0ZW1wbGF0YWJsZSBmaWVsZHMgdGhlXG4gICAgICAgIC8vIHNlcnZlciBlbmZvcmNlcyBhdCB1cGxvYWQgKHBpcGVsaW5lLWNvcmUgcHJpbWl0aXZlczsgbm8gc2VydmVyIGRlcCkuXG4gICAgICAgIGNvbnN0IGNvcmUgPSBhd2FpdCBpbXBvcnQoJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnKTtcbiAgICAgICAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PlxuICAgICAgICAgIGYgPT09ICdkZXNjcmlwdGlvbicgfHxcbiAgICAgICAgICBmLnN0YXJ0c1dpdGgoJ2NvbW1hbmRzJykgfHxcbiAgICAgICAgICBmLnN0YXJ0c1dpdGgoJ2luc3RhbGxDb21tYW5kcycpIHx8XG4gICAgICAgICAgZi5zdGFydHNXaXRoKCdlbnYuJykgfHwgZi5zdGFydHNXaXRoKCdlbnZbJykgfHxcbiAgICAgICAgICBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJncy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJnc1snKTtcbiAgICAgICAgY29uc3QgaXNLbm93biA9IGNvcmUuYWxsb3dlZFNjb3BlUm9vdHMoWydwaXBlbGluZScsICdwbHVnaW4nLCAnZW52J10pO1xuICAgICAgICBjb25zdCB7IGVycm9ycyB9ID0gY29yZS52YWxpZGF0ZVRlbXBsYXRlcyhzcGVjLCBpc1RwbCwgaXNLbm93bik7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlcnJvcnMpIHByb2JsZW1zLnB1c2goYHRlbXBsYXRlIFske2UuZmllbGQgPz8gJz8nfV06ICR7ZS5tZXNzYWdlfWApO1xuXG4gICAgICAgIC8vIFBsdWdpbiBDT05UUkFDVCBjaGVjayDigJQgbWlycm9ycyB0aGUgc2VydmVyJ3MgdXBsb2FkIHZhbGlkYXRpb25cbiAgICAgICAgLy8gKGFwaS9wbHVnaW4vc3JjL2hlbHBlcnMvcGx1Z2luLXNwZWMudHMpIHNvIGEgc3BlYyByZWplY3RlZCBhdCB1cGxvYWQgYWxzb1xuICAgICAgICAvLyBmYWlscyBoZXJlIChubyBmYWxzZS1ncmVlbikuIFR3byBpbmRlcGVuZGVudCBydWxlcyBwZXIgYHt7IHBpcGVsaW5lLnZhcnMuWCB9fWBcbiAgICAgICAgLy8gLyBge3sgcGlwZWxpbmUubWV0YWRhdGEuWCB9fWAgcmVmZXJlbmNlOlxuICAgICAgICAvLyAgIChhKSBkZWNsYXJhdGlvbjogdW5sZXNzIHRoZSB0b2tlbiBoYXMgYSBgfCBkZWZhdWx0OmAsIFggbXVzdCBiZSBkZWNsYXJlZFxuICAgICAgICAvLyAgICAgICBpbiByZXF1aXJlZFZhcnMgLyByZXF1aXJlZE1ldGFkYXRhO1xuICAgICAgICAvLyAgIChiKSBjb2VyY2lvbiB0eXBlOiBpZiB0aGUgdG9rZW4gaGFzIGEgYHwgbnVtYmVyfGJvb2x8anNvbmAgZmlsdGVyLCB0aGVcbiAgICAgICAgLy8gICAgICAgZGVjbGFyZWQgdHlwZSBpbiB2YXJzVHlwZXMvbWV0YWRhdGFUeXBlcyAoZGVmYXVsdCAnc3RyaW5nJykgbXVzdCBtYXRjaC5cbiAgICAgICAgY29uc3QgcmVxdWlyZWRWYXJzID0gbmV3IFNldChBcnJheS5pc0FycmF5KHNwZWMucmVxdWlyZWRWYXJzKSA/IChzcGVjLnJlcXVpcmVkVmFycyBhcyB1bmtub3duW10pLm1hcChTdHJpbmcpIDogW10pO1xuICAgICAgICBjb25zdCByZXF1aXJlZE1ldGFkYXRhID0gbmV3IFNldChBcnJheS5pc0FycmF5KHNwZWMucmVxdWlyZWRNZXRhZGF0YSkgPyAoc3BlYy5yZXF1aXJlZE1ldGFkYXRhIGFzIHVua25vd25bXSkubWFwKFN0cmluZykgOiBbXSk7XG4gICAgICAgIGNvbnN0IHZhcnNUeXBlcyA9IChzcGVjLnZhcnNUeXBlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA/PyB7fTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFUeXBlcyA9IChzcGVjLm1ldGFkYXRhVHlwZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPz8ge307XG4gICAgICAgIGNvbnN0IGNvZXJjZVRvVHlwZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgbnVtYmVyOiAnbnVtYmVyJywgYm9vbDogJ2Jvb2wnLCBqc29uOiAnanNvbicgfTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGFibGVTdHJpbmdzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAuLi4odHlwZW9mIHNwZWMuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gW3NwZWMuZGVzY3JpcHRpb25dIDogW10pLFxuICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KHNwZWMuY29tbWFuZHMpID8gc3BlYy5jb21tYW5kcy5maWx0ZXIoKGMpOiBjIGlzIHN0cmluZyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpIDogW10pLFxuICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KHNwZWMuaW5zdGFsbENvbW1hbmRzKSA/IHNwZWMuaW5zdGFsbENvbW1hbmRzLmZpbHRlcigoYyk6IGMgaXMgc3RyaW5nID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcygoc3BlYy5lbnYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID8/IHt9KS5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpLFxuICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXMoKHNwZWMuYnVpbGRBcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA/PyB7fSkuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgdGVtcGxhdGFibGVTdHJpbmdzKSB7XG4gICAgICAgICAgbGV0IHRva2VucztcbiAgICAgICAgICB0cnkgeyB0b2tlbnMgPSBjb3JlLnRva2VuaXplKHNvdXJjZSk7IH0gY2F0Y2ggeyBjb250aW51ZTsgfVxuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICh0LmtpbmQgIT09ICdleHByJykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBbcm9vdCwgc3ViLCBrZXldID0gdC5wYXRoO1xuICAgICAgICAgICAgaWYgKHJvb3QgIT09ICdwaXBlbGluZScgfHwgKHN1YiAhPT0gJ3ZhcnMnICYmIHN1YiAhPT0gJ21ldGFkYXRhJykgfHwgIWtleSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBpc1ZhcnMgPSBzdWIgPT09ICd2YXJzJztcbiAgICAgICAgICAgIC8vIChhKSBkZWNsYXJhdGlvbiDigJQgd2FpdmVkIGJ5IGEgYHwgZGVmYXVsdDpgLlxuICAgICAgICAgICAgaWYgKHQuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGVjbGFyZWQgPSBpc1ZhcnMgPyByZXF1aXJlZFZhcnMuaGFzKGtleSkgOiByZXF1aXJlZE1ldGFkYXRhLmhhcyhrZXkpO1xuICAgICAgICAgICAgICBpZiAoIWRlY2xhcmVkKSBwcm9ibGVtcy5wdXNoKGBjb250cmFjdDogdGVtcGxhdGUgcmVmZXJlbmNlcyB7eyBwaXBlbGluZS4ke3N1Yn0uJHtrZXl9IH19IGJ1dCAnJHtrZXl9JyBpcyBub3QgZGVjbGFyZWQgaW4gJHtpc1ZhcnMgPyAncmVxdWlyZWRWYXJzJyA6ICdyZXF1aXJlZE1ldGFkYXRhJ31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIChiKSBjb2VyY2lvbiB0eXBlIOKAlCBpbmRlcGVuZGVudCBvZiBkZWZhdWx0LlxuICAgICAgICAgICAgaWYgKHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IChpc1ZhcnMgPyB2YXJzVHlwZXMgOiBtZXRhZGF0YVR5cGVzKVtrZXldID8/ICdzdHJpbmcnO1xuICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBjb2VyY2VUb1R5cGVbdC5jb2VyY2VdO1xuICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUeXBlICYmIGRlY2xhcmVkVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcHJvYmxlbXMucHVzaChgY29udHJhY3Q6IHt7IHBpcGVsaW5lLiR7c3VifS4ke2tleX0gfCAke3QuY29lcmNlfSB9fSBidXQgZGVjbGFyZWQgdHlwZSBpcyAnJHtkZWNsYXJlZFR5cGV9JyAoYWRkICcke2tleX06ICR7ZXhwZWN0ZWRUeXBlfScgdG8gJHtpc1ZhcnMgPyAndmFyc1R5cGVzJyA6ICdtZXRhZGF0YVR5cGVzJ30pYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKGBQbHVnaW4gJyR7U3RyaW5nKHNwZWMubmFtZSl9JyBpcyB2YWxpZGAsIHsgZXhlY3V0aW9uSWQsIGJ1aWxkVHlwZSwgcGx1Z2luVHlwZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdhcm5pbmcoYEZvdW5kICR7cHJvYmxlbXMubGVuZ3RofSBwcm9ibGVtKHMpOmApO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvYmxlbXMpIHByaW50RXJyb3IoYCAg4oCiICR7cH1gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yID8gRVJST1JfQ09ERVMuVkFMSURBVElPTiA6IEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICd2YWxpZGF0ZS1wbHVnaW4nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -3,9 +3,9 @@ import { Command } from 'commander';
3
3
  * Register the `validate-templates` command.
4
4
  *
5
5
  * Usage:
6
- * pipeline-manager validate-templates --pipeline <uuid>
7
- * pipeline-manager validate-templates --plugin <name:version>
8
- * pipeline-manager validate-templates --file ./plugin-spec.yaml
6
+ * pipeline-manager template validate --pipeline <uuid>
7
+ * pipeline-manager template validate --plugin <name:version>
8
+ * pipeline-manager template validate --file ./plugin-spec.yaml
9
9
  */
10
10
  export declare function validateTemplatesCommand(program: Command): void;
11
11
  //# sourceMappingURL=validate-templates.d.ts.map
@@ -11,13 +11,13 @@ import { printError, printInfo, printSuccess, printWarning } from '../utils/outp
11
11
  * Register the `validate-templates` command.
12
12
  *
13
13
  * Usage:
14
- * pipeline-manager validate-templates --pipeline <uuid>
15
- * pipeline-manager validate-templates --plugin <name:version>
16
- * pipeline-manager validate-templates --file ./plugin-spec.yaml
14
+ * pipeline-manager template validate --pipeline <uuid>
15
+ * pipeline-manager template validate --plugin <name:version>
16
+ * pipeline-manager template validate --file ./plugin-spec.yaml
17
17
  */
18
18
  export function validateTemplatesCommand(program) {
19
19
  program
20
- .command('validate-templates')
20
+ .command('validate')
21
21
  .description('Parse and validate {{ ... }} templates in a pipeline or plugin spec')
22
22
  .option('--pipeline <id>', 'Validate the pipeline with this ID')
23
23
  .option('--plugin <name:version>', 'Validate the plugin with this name and version')
@@ -115,4 +115,4 @@ function validatePipelineDoc(core, doc) {
115
115
  const cycles = core.detectCycles(doc, isTpl, (f) => isTpl(f) ? f : null);
116
116
  return [...errors, ...cycles];
117
117
  }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzdGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBZ0I7SUFDdkQsT0FBTztTQUNKLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUM3QixXQUFXLENBQUMscUVBQXFFLENBQUM7U0FDbEYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG9DQUFvQyxDQUFDO1NBQy9ELE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxnREFBZ0QsQ0FBQztTQUNuRixNQUFNLENBQUMsZUFBZSxFQUFFLHlEQUF5RCxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUM7U0FDN0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Qs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QUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG5pbnRlcmZhY2UgVmFsaWRhdGVPcHRpb25zIHtcbiAgcGlwZWxpbmU/OiBzdHJpbmc7XG4gIHBsdWdpbj86IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgYHZhbGlkYXRlLXRlbXBsYXRlc2AgY29tbWFuZC5cbiAqXG4gKiBVc2FnZTpcbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1waXBlbGluZSA8dXVpZD5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1wbHVnaW4gPG5hbWU6dmVyc2lvbj5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1maWxlIC4vcGx1Z2luLXNwZWMueWFtbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZW1wbGF0ZXNDb21tYW5kKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd2YWxpZGF0ZS10ZW1wbGF0ZXMnKVxuICAgIC5kZXNjcmlwdGlvbignUGFyc2UgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gYSBwaXBlbGluZSBvciBwbHVnaW4gc3BlYycpXG4gICAgLm9wdGlvbignLS1waXBlbGluZSA8aWQ+JywgJ1ZhbGlkYXRlIHRoZSBwaXBlbGluZSB3aXRoIHRoaXMgSUQnKVxuICAgIC5vcHRpb24oJy0tcGx1Z2luIDxuYW1lOnZlcnNpb24+JywgJ1ZhbGlkYXRlIHRoZSBwbHVnaW4gd2l0aCB0aGlzIG5hbWUgYW5kIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZmlsZSA8cGF0aD4nLCAnVmFsaWRhdGUgYSBsb2NhbCBwbHVnaW4tc3BlYy55YW1sIG9yIHBpcGVsaW5lLmpzb24gZmlsZScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBWYWxpZGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdWYWxpZGF0ZSBUZW1wbGF0ZXMnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnBpcGVsaW5lICYmICFvcHRpb25zLnBsdWdpbiAmJiAhb3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgLS1waXBlbGluZSwgLS1wbHVnaW4sIG9yIC0tZmlsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29yZSA9IGF3YWl0IGltcG9ydCgnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZScpO1xuXG4gICAgICAgIGNvbnN0IHByb2JsZW1zOiBBcnJheTx7IHNvdXJjZTogc3RyaW5nOyBlcnJvcnM6IHsgZmllbGQ/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgY29kZT86IHN0cmluZyB9W10gfT4gPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSBmaWxlUGF0aC5lbmRzV2l0aCgnLmpzb24nKSA/IEpTT04ucGFyc2UodGV4dCkgOiBZQU1MLnBhcnNlKHRleHQpO1xuXG4gICAgICAgICAgLy8gR3Vlc3M6IGlmIGBwbHVnaW5UeXBlYCBpcyBwcmVzZW50LCB0cmVhdCBhcyBwbHVnaW4gc3BlYzsgZWxzZSBwaXBlbGluZVxuICAgICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZW9mIChkb2MgYXMgeyBwbHVnaW5UeXBlPzogdW5rbm93biB9KS5wbHVnaW5UeXBlID09PSAnc3RyaW5nJztcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBpc1BsdWdpblxuICAgICAgICAgICAgPyB2YWxpZGF0ZVBsdWdpbkRvYyhjb3JlLCBkb2MpXG4gICAgICAgICAgICA6IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogZmlsZVBhdGgsIGVycm9ycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBpcGVsaW5lKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZScsIHsgaWQ6IG9wdGlvbnMucGlwZWxpbmUgfSk7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGNmZyA9IGNsaWVudC5nZXRDb25maWcoKTtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuZ2V0PHsgcGlwZWxpbmU/OiB7IHByb3BzOiB1bmtub3duIH0gfT4oYCR7Y2ZnLmFwaS5waXBlbGluZVVybH0vJHtvcHRpb25zLnBpcGVsaW5lfWApO1xuICAgICAgICAgIGNvbnN0IGRvYyA9IChyZXMgYXMgeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9KS5waXBlbGluZT8ucHJvcHNcbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9IH0pLmRhdGE/LnBpcGVsaW5lPy5wcm9wcztcbiAgICAgICAgICBpZiAoIWRvYykgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAke29wdGlvbnMucGlwZWxpbmV9IG5vdCBmb3VuZGApO1xuICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBpcGVsaW5lLyR7b3B0aW9ucy5waXBlbGluZX1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wbHVnaW4pIHtcbiAgICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBvcHRpb25zLnBsdWdpbi5zcGxpdCgnOicpO1xuICAgICAgICAgIGlmICghbmFtZSB8fCAhdmVyc2lvbikgdGhyb3cgbmV3IEVycm9yKCctLXBsdWdpbiByZXF1aXJlcyA8bmFtZTp2ZXJzaW9uPiBmb3JtYXQnKTtcbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBsdWdpbicsIHsgbmFtZSwgdmVyc2lvbiB9KTtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgY29uc3QgY2ZnID0gY2xpZW50LmdldENvbmZpZygpO1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBwbHVnaW46IHVua25vd24gfT4oXG4gICAgICAgICAgICBgJHtjZmcuYXBpLnBsdWdpblVybH0vZmluZD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfSZ2ZXJzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZlcnNpb24pfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSAocmVzIGFzIHsgcGx1Z2luPzogdW5rbm93biB9KS5wbHVnaW5cbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwbHVnaW4/OiB1bmtub3duIH0gfSkuZGF0YT8ucGx1Z2luO1xuICAgICAgICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAke25hbWV9OiR7dmVyc2lvbn0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBsdWdpbi8ke25hbWV9OiR7dmVyc2lvbn1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdBbGwgdGVtcGxhdGVzIHZhbGlkJywgeyBleGVjdXRpb25JZCB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdhcm5pbmcoYEZvdW5kICR7cHJvYmxlbXMucmVkdWNlKChhLCBwKSA9PiBhICsgcC5lcnJvcnMubGVuZ3RoLCAwKX0gdGVtcGxhdGUgZXJyb3Iocyk6YCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9ibGVtcykge1xuICAgICAgICAgIHByaW50RXJyb3IocC5zb3VyY2UpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBwLmVycm9ycykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBbJHtlLmZpZWxkID8/ICc/J31dICR7ZS5tZXNzYWdlfSR7ZS5jb2RlID8gYCAoJHtlLmNvZGV9KWAgOiAnJ31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICd2YWxpZGF0ZS10ZW1wbGF0ZXMnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZTogUmVjb3JkPHN0cmluZywgYW55PiwgZG9jOiB1bmtub3duKTogQXJyYXk8eyBmaWVsZD86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PlxuICAgIGYgPT09ICdkZXNjcmlwdGlvbicgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2NvbW1hbmRzJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2luc3RhbGxDb21tYW5kcycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCdlbnYuJykgfHwgZi5zdGFydHNXaXRoKCdlbnZbJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJncy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJnc1snKTtcbiAgY29uc3QgaXNLbm93biA9IGNvcmUuYWxsb3dlZFNjb3BlUm9vdHMoWydwaXBlbGluZScsICdwbHVnaW4nLCAnZW52J10pO1xuICBjb25zdCB7IGVycm9ycyB9ID0gY29yZS52YWxpZGF0ZVRlbXBsYXRlcyhkb2MsIGlzVHBsLCBpc0tub3duKTtcbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQaXBlbGluZURvYyhjb3JlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBkb2M6IHVua25vd24pOiBBcnJheTx7IGZpZWxkPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+XG4gICAgZiA9PT0gJ3Byb2plY3ROYW1lJyB8fFxuICAgIGYuc3RhcnRzV2l0aCgnbWV0YWRhdGEuJykgfHwgZi5zdGFydHNXaXRoKCdtZXRhZGF0YVsnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgndmFycy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ3ZhcnNbJyk7XG4gIGNvbnN0IGlzS25vd24gPSBjb3JlLmFsbG93ZWRTY29wZVJvb3RzKFsnbWV0YWRhdGEnLCAndmFycyddKTtcbiAgY29uc3QgeyBlcnJvcnMgfSA9IGNvcmUudmFsaWRhdGVUZW1wbGF0ZXMoZG9jLCBpc1RwbCwgaXNLbm93bik7XG4gIGNvbnN0IGN5Y2xlcyA9IGNvcmUuZGV0ZWN0Q3ljbGVzKGRvYywgaXNUcGwsIChmOiBzdHJpbmcpID0+IGlzVHBsKGYpID8gZiA6IG51bGwpO1xuICByZXR1cm4gWy4uLmVycm9ycywgLi4uY3ljbGVzXTtcbn1cbiJdfQ==
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzdGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBZ0I7SUFDdkQsT0FBTztTQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLHFFQUFxRSxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxvQ0FBb0MsQ0FBQztTQUMvRCxNQUFNLENBQUMseUJBQXlCLEVBQUUsZ0RBQWdELENBQUM7U0FDbkYsTUFBTSxDQUFDLGVBQWUsRUFBRSx5REFBeUQsQ0FBQztTQUNsRixNQUFNLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO1NBQzdELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztTQUNqRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQXdCLEVBQUUsRUFBRTtRQUN6QyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdELElB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aEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuaW50ZXJmYWNlIFZhbGlkYXRlT3B0aW9ucyB7XG4gIHBpcGVsaW5lPzogc3RyaW5nO1xuICBwbHVnaW4/OiBzdHJpbmc7XG4gIGZpbGU/OiBzdHJpbmc7XG4gIHZlcmlmeVNzbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGB2YWxpZGF0ZS10ZW1wbGF0ZXNgIGNvbW1hbmQuXG4gKlxuICogVXNhZ2U6XG4gKiAgIHBpcGVsaW5lLW1hbmFnZXIgdGVtcGxhdGUgdmFsaWRhdGUgLS1waXBlbGluZSA8dXVpZD5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB0ZW1wbGF0ZSB2YWxpZGF0ZSAtLXBsdWdpbiA8bmFtZTp2ZXJzaW9uPlxuICogICBwaXBlbGluZS1tYW5hZ2VyIHRlbXBsYXRlIHZhbGlkYXRlIC0tZmlsZSAuL3BsdWdpbi1zcGVjLnlhbWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZChwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgndmFsaWRhdGUnKVxuICAgIC5kZXNjcmlwdGlvbignUGFyc2UgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gYSBwaXBlbGluZSBvciBwbHVnaW4gc3BlYycpXG4gICAgLm9wdGlvbignLS1waXBlbGluZSA8aWQ+JywgJ1ZhbGlkYXRlIHRoZSBwaXBlbGluZSB3aXRoIHRoaXMgSUQnKVxuICAgIC5vcHRpb24oJy0tcGx1Z2luIDxuYW1lOnZlcnNpb24+JywgJ1ZhbGlkYXRlIHRoZSBwbHVnaW4gd2l0aCB0aGlzIG5hbWUgYW5kIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZmlsZSA8cGF0aD4nLCAnVmFsaWRhdGUgYSBsb2NhbCBwbHVnaW4tc3BlYy55YW1sIG9yIHBpcGVsaW5lLmpzb24gZmlsZScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBWYWxpZGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdWYWxpZGF0ZSBUZW1wbGF0ZXMnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnBpcGVsaW5lICYmICFvcHRpb25zLnBsdWdpbiAmJiAhb3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgLS1waXBlbGluZSwgLS1wbHVnaW4sIG9yIC0tZmlsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29yZSA9IGF3YWl0IGltcG9ydCgnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZScpO1xuXG4gICAgICAgIGNvbnN0IHByb2JsZW1zOiBBcnJheTx7IHNvdXJjZTogc3RyaW5nOyBlcnJvcnM6IHsgZmllbGQ/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgY29kZT86IHN0cmluZyB9W10gfT4gPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSBmaWxlUGF0aC5lbmRzV2l0aCgnLmpzb24nKSA/IEpTT04ucGFyc2UodGV4dCkgOiBZQU1MLnBhcnNlKHRleHQpO1xuXG4gICAgICAgICAgLy8gR3Vlc3M6IGlmIGBwbHVnaW5UeXBlYCBpcyBwcmVzZW50LCB0cmVhdCBhcyBwbHVnaW4gc3BlYzsgZWxzZSBwaXBlbGluZVxuICAgICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZW9mIChkb2MgYXMgeyBwbHVnaW5UeXBlPzogdW5rbm93biB9KS5wbHVnaW5UeXBlID09PSAnc3RyaW5nJztcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBpc1BsdWdpblxuICAgICAgICAgICAgPyB2YWxpZGF0ZVBsdWdpbkRvYyhjb3JlLCBkb2MpXG4gICAgICAgICAgICA6IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogZmlsZVBhdGgsIGVycm9ycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBpcGVsaW5lKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZScsIHsgaWQ6IG9wdGlvbnMucGlwZWxpbmUgfSk7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGNmZyA9IGNsaWVudC5nZXRDb25maWcoKTtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuZ2V0PHsgcGlwZWxpbmU/OiB7IHByb3BzOiB1bmtub3duIH0gfT4oYCR7Y2ZnLmFwaS5waXBlbGluZVVybH0vJHtvcHRpb25zLnBpcGVsaW5lfWApO1xuICAgICAgICAgIGNvbnN0IGRvYyA9IChyZXMgYXMgeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9KS5waXBlbGluZT8ucHJvcHNcbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9IH0pLmRhdGE/LnBpcGVsaW5lPy5wcm9wcztcbiAgICAgICAgICBpZiAoIWRvYykgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAke29wdGlvbnMucGlwZWxpbmV9IG5vdCBmb3VuZGApO1xuICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBpcGVsaW5lLyR7b3B0aW9ucy5waXBlbGluZX1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wbHVnaW4pIHtcbiAgICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBvcHRpb25zLnBsdWdpbi5zcGxpdCgnOicpO1xuICAgICAgICAgIGlmICghbmFtZSB8fCAhdmVyc2lvbikgdGhyb3cgbmV3IEVycm9yKCctLXBsdWdpbiByZXF1aXJlcyA8bmFtZTp2ZXJzaW9uPiBmb3JtYXQnKTtcbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBsdWdpbicsIHsgbmFtZSwgdmVyc2lvbiB9KTtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgY29uc3QgY2ZnID0gY2xpZW50LmdldENvbmZpZygpO1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBwbHVnaW46IHVua25vd24gfT4oXG4gICAgICAgICAgICBgJHtjZmcuYXBpLnBsdWdpblVybH0vZmluZD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfSZ2ZXJzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZlcnNpb24pfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSAocmVzIGFzIHsgcGx1Z2luPzogdW5rbm93biB9KS5wbHVnaW5cbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwbHVnaW4/OiB1bmtub3duIH0gfSkuZGF0YT8ucGx1Z2luO1xuICAgICAgICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAke25hbWV9OiR7dmVyc2lvbn0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBsdWdpbi8ke25hbWV9OiR7dmVyc2lvbn1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdBbGwgdGVtcGxhdGVzIHZhbGlkJywgeyBleGVjdXRpb25JZCB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdhcm5pbmcoYEZvdW5kICR7cHJvYmxlbXMucmVkdWNlKChhLCBwKSA9PiBhICsgcC5lcnJvcnMubGVuZ3RoLCAwKX0gdGVtcGxhdGUgZXJyb3Iocyk6YCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9ibGVtcykge1xuICAgICAgICAgIHByaW50RXJyb3IocC5zb3VyY2UpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBwLmVycm9ycykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBbJHtlLmZpZWxkID8/ICc/J31dICR7ZS5tZXNzYWdlfSR7ZS5jb2RlID8gYCAoJHtlLmNvZGV9KWAgOiAnJ31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICd2YWxpZGF0ZS10ZW1wbGF0ZXMnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZTogUmVjb3JkPHN0cmluZywgYW55PiwgZG9jOiB1bmtub3duKTogQXJyYXk8eyBmaWVsZD86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PlxuICAgIGYgPT09ICdkZXNjcmlwdGlvbicgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2NvbW1hbmRzJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2luc3RhbGxDb21tYW5kcycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCdlbnYuJykgfHwgZi5zdGFydHNXaXRoKCdlbnZbJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJncy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJnc1snKTtcbiAgY29uc3QgaXNLbm93biA9IGNvcmUuYWxsb3dlZFNjb3BlUm9vdHMoWydwaXBlbGluZScsICdwbHVnaW4nLCAnZW52J10pO1xuICBjb25zdCB7IGVycm9ycyB9ID0gY29yZS52YWxpZGF0ZVRlbXBsYXRlcyhkb2MsIGlzVHBsLCBpc0tub3duKTtcbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQaXBlbGluZURvYyhjb3JlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBkb2M6IHVua25vd24pOiBBcnJheTx7IGZpZWxkPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+XG4gICAgZiA9PT0gJ3Byb2plY3ROYW1lJyB8fFxuICAgIGYuc3RhcnRzV2l0aCgnbWV0YWRhdGEuJykgfHwgZi5zdGFydHNXaXRoKCdtZXRhZGF0YVsnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgndmFycy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ3ZhcnNbJyk7XG4gIGNvbnN0IGlzS25vd24gPSBjb3JlLmFsbG93ZWRTY29wZVJvb3RzKFsnbWV0YWRhdGEnLCAndmFycyddKTtcbiAgY29uc3QgeyBlcnJvcnMgfSA9IGNvcmUudmFsaWRhdGVUZW1wbGF0ZXMoZG9jLCBpc1RwbCwgaXNLbm93bik7XG4gIGNvbnN0IGN5Y2xlcyA9IGNvcmUuZGV0ZWN0Q3ljbGVzKGRvYywgaXNUcGwsIChmOiBzdHJpbmcpID0+IGlzVHBsKGYpID8gZiA6IG51bGwpO1xuICByZXR1cm4gWy4uLmVycm9ycywgLi4uY3ljbGVzXTtcbn1cbiJdfQ==
@@ -2,14 +2,14 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  /**
4
4
  * Lambda handler that re-mints the platform JWT in Secrets Manager so it never
5
- * lapses. Deployed + scheduled (once a day) by `pipeline-manager store-token
5
+ * lapses. Deployed + scheduled (once a day) by `pipeline-manager infra store-token
6
6
  * --schedule`. Rather than re-implementing the token flow, it is a thin
7
7
  * orchestrator that reuses the tested CLI — each run:
8
8
  *
9
9
  * 1. Point the `@pipeline-builder` npm scope at public npm.
10
10
  * 2. Download `@pipeline-builder/pipeline-manager` from npm into /tmp.
11
11
  * 3. Read the current platform JWT from the secret.
12
- * 4. Run `pipeline-manager store-token`, which mints a fresh long-lived token
12
+ * 4. Run `pipeline-manager infra store-token`, which mints a fresh long-lived token
13
13
  * via /api/user/generate-token and writes it back to the same secret.
14
14
  *
15
15
  * `/tmp` is the only writable path in Lambda, so npm's HOME/cache/prefix all live
@@ -65,7 +65,7 @@ export const handler = async () => {
65
65
  // write uses the Lambda role's creds.
66
66
  // store-token no longer takes --secret-name; it reads PLATFORM_SECRET_NAME from
67
67
  // the environment (else derives it from the token's org).
68
- const args = ['store-token', '--region', region, '--days', days];
68
+ const args = ['infra', 'store-token', '--region', region, '--days', days];
69
69
  // SECURITY: the spawned store-token POSTs the JWT to the platform. Refuse to
70
70
  // disable TLS verification in production so a MITM can't harvest it. Production
71
71
  // is this Lambda's normal mode (the renew stack sets NODE_ENV=production), so
@@ -91,4 +91,4 @@ export const handler = async () => {
91
91
  // eslint-disable-next-line no-console
92
92
  console.log(JSON.stringify({ level: 'INFO', msg: 'platform token renewed', secretName }));
93
93
  };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmVuZXctaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvdG9rZW4tcmVuZXctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlGLE1BQU0sVUFBVSxHQUFHLG9DQUFvQyxDQUFDO0FBQ3hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsaUJBQWlCLFVBQVUsY0FBYyxDQUFDO0FBRWxFLFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDNUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBbUIsRUFBRTtJQUMvQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFFBQVEsQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUM7SUFFckQsOEVBQThFO0lBQzlFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFMUUsK0VBQStFO0lBQy9FLDZFQUE2RTtJQUM3RSwwQkFBMEI7SUFDMUIsYUFBYSxDQUFDLEtBQUssRUFBRSwwREFBMEQsQ0FBQyxDQUFDO0lBRWpGLDBDQUEwQztJQUMxQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SCxZQUFZLENBQ1YsS0FBSyxFQUNMLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQ2hILEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQ2xDLENBQUM7SUFFRiwyRUFBMkU7SUFDM0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxVQUFVLFlBQVksQ0FBQyxDQUFDO0lBQzlFLE1BQU0sR0FBRyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBMkIsQ0FBQyxRQUFRLENBQUM7SUFDakYsSUFBSSxDQUFDLEdBQUc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsVUFBVSwwQkFBMEIsQ0FBQyxDQUFDO0lBRTNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUseUNBQXlDO0lBQ3pDLGdGQUFnRjtJQUNoRiwwREFBMEQ7SUFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsNkVBQTZFO0lBQzdFLGdGQUFnRjtJQUNoRiw4RUFBOEU7SUFDOUUsaUZBQWlGO0lBQ2pGLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDO0lBQzNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSx5R0FBeUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqSyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNuQywrRUFBK0U7UUFDL0Usb0VBQW9FO1FBQ3BFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRTtRQUN6RyxLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIHRoYXQgcmUtbWludHMgdGhlIHBsYXRmb3JtIEpXVCBpbiBTZWNyZXRzIE1hbmFnZXIgc28gaXQgbmV2ZXJcbiAqIGxhcHNlcy4gRGVwbG95ZWQgKyBzY2hlZHVsZWQgKG9uY2UgYSBkYXkpIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuXG4gKiAtLXNjaGVkdWxlYC4gUmF0aGVyIHRoYW4gcmUtaW1wbGVtZW50aW5nIHRoZSB0b2tlbiBmbG93LCBpdCBpcyBhIHRoaW5cbiAqIG9yY2hlc3RyYXRvciB0aGF0IHJldXNlcyB0aGUgdGVzdGVkIENMSSDigJQgZWFjaCBydW46XG4gKlxuICogICAxLiBQb2ludCB0aGUgYEBwaXBlbGluZS1idWlsZGVyYCBucG0gc2NvcGUgYXQgcHVibGljIG5wbS5cbiAqICAgMi4gRG93bmxvYWQgYEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLW1hbmFnZXJgIGZyb20gbnBtIGludG8gL3RtcC5cbiAqICAgMy4gUmVhZCB0aGUgY3VycmVudCBwbGF0Zm9ybSBKV1QgZnJvbSB0aGUgc2VjcmV0LlxuICogICA0LiBSdW4gYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gLCB3aGljaCBtaW50cyBhIGZyZXNoIGxvbmctbGl2ZWQgdG9rZW5cbiAqICAgICAgdmlhIC9hcGkvdXNlci9nZW5lcmF0ZS10b2tlbiBhbmQgd3JpdGVzIGl0IGJhY2sgdG8gdGhlIHNhbWUgc2VjcmV0LlxuICpcbiAqIGAvdG1wYCBpcyB0aGUgb25seSB3cml0YWJsZSBwYXRoIGluIExhbWJkYSwgc28gbnBtJ3MgSE9NRS9jYWNoZS9wcmVmaXggYWxsIGxpdmVcbiAqIHRoZXJlLiBzdG9yZS10b2tlbiBkb2VzIE5PVCBkZXBsb3kgdGhlIHJlbmV3YWwgc3RhY2sgYnkgZGVmYXVsdCAobm8gLS1zY2hlZHVsZSksXG4gKiBzbyB0aGUgcmVuZXdhbCBydW4gbmV2ZXIgcmVkZXBsb3lzL3JlY3Vyc2VzIGludG8gaXRzIG93biBzdGFjay5cbiAqXG4gKiBFbnY6IFBMQVRGT1JNX1NFQ1JFVF9OQU1FLCBQTEFURk9STV9CQVNFX1VSTCwgUkVORVdfREFZUyAoZGVmYXVsdCAzMCksXG4gKiAgICAgIFBJUEVMSU5FX01BTkFHRVJfVkVSU0lPTiAoZGVmYXVsdCBcImxhdGVzdFwiKSwgUExBVEZPUk1fVkVSSUZZX1NTTCAoXCJmYWxzZVwiXG4gKiAgICAgIHRvIGRpc2FibGUgVExTIHZlcmlmaWNhdGlvbikuXG4gKi9cbmltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2RpclN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyQ2xpZW50LCBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcblxuY29uc3QgUE1fUEFDS0FHRSA9ICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1tYW5hZ2VyJztcbmNvbnN0IFRNUCA9ICcvdG1wJztcbmNvbnN0IFBNX1BSRUZJWCA9IGAke1RNUH0vcG1gO1xuY29uc3QgTlBNX0NBQ0hFID0gYCR7VE1QfS8ubnBtYDtcbmNvbnN0IE5QTVJDID0gYCR7VE1QfS8ubnBtcmNgO1xuY29uc3QgQ0xJID0gYCR7UE1fUFJFRklYfS9ub2RlX21vZHVsZXMvJHtQTV9QQUNLQUdFfS9kaXN0L2NsaS5qc2A7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHYgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWRgKTtcbiAgcmV0dXJuIHY7XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBzZWNyZXROYW1lID0gcmVxdWlyZWQoJ1BMQVRGT1JNX1NFQ1JFVF9OQU1FJyk7XG4gIGNvbnN0IHBsYXRmb3JtVXJsID0gcmVxdWlyZWQoJ1BMQVRGT1JNX0JBU0VfVVJMJykucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3QgZGF5cyA9IHByb2Nlc3MuZW52LlJFTkVXX0RBWVMgfHwgJzMwJztcbiAgY29uc3QgdmVyc2lvbiA9IHByb2Nlc3MuZW52LlBJUEVMSU5FX01BTkFHRVJfVkVSU0lPTiB8fCAnbGF0ZXN0JztcbiAgY29uc3QgcmVnaW9uID0gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcblxuICAvLyBucG0gaW4gTGFtYmRhIGNhbiBvbmx5IHdyaXRlIHVuZGVyIC90bXA7IEhPTUUvY2FjaGUvdXNlcmNvbmZpZyBwb2ludCB0aGVyZS5cbiAgY29uc3QgbnBtRW52ID0geyAuLi5wcm9jZXNzLmVudiwgSE9NRTogVE1QLCBucG1fY29uZmlnX2NhY2hlOiBOUE1fQ0FDSEUgfTtcblxuICAvLyAxLiBTY29wZSBjb25maWc6IHJlc29sdmUgQHBpcGVsaW5lLWJ1aWxkZXIgZnJvbSBwdWJsaWMgbnBtIHJlZ2FyZGxlc3Mgb2YgYW55XG4gIC8vICAgIGluaGVyaXRlZCByZWdpc3RyeS4gV3JpdHRlbiBhcyBhIHVzZXJjb25maWcgZmlsZSAoZW52IG1hcHBpbmcgb2Ygc2NvcGVkXG4gIC8vICAgIGtleXMgaXMgdW5yZWxpYWJsZSkuXG4gIHdyaXRlRmlsZVN5bmMoTlBNUkMsICdAcGlwZWxpbmUtYnVpbGRlcjpyZWdpc3RyeT1odHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cXG4nKTtcblxuICAvLyAyLiBEb3dubG9hZCBwaXBlbGluZS1tYW5hZ2VyIGludG8gL3RtcC5cbiAgbWtkaXJTeW5jKFBNX1BSRUZJWCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgbGV2ZWw6ICdJTkZPJywgbXNnOiAnaW5zdGFsbGluZyBwaXBlbGluZS1tYW5hZ2VyJywgcGFja2FnZTogYCR7UE1fUEFDS0FHRX1AJHt2ZXJzaW9ufWAgfSkpO1xuICBleGVjRmlsZVN5bmMoXG4gICAgJ25wbScsXG4gICAgWydpbnN0YWxsJywgJy0tcHJlZml4JywgUE1fUFJFRklYLCAnLS1uby1hdWRpdCcsICctLW5vLWZ1bmQnLCAnLS11c2VyY29uZmlnJywgTlBNUkMsIGAke1BNX1BBQ0tBR0V9QCR7dmVyc2lvbn1gXSxcbiAgICB7IGVudjogbnBtRW52LCBzdGRpbzogJ2luaGVyaXQnIH0sXG4gICk7XG5cbiAgLy8gMy4gUmVhZCB0aGUgY3VycmVudCBwbGF0Zm9ybSBKV1Qg4oCUIGl0IGF1dGhlbnRpY2F0ZXMgdGhlIHJlbmV3YWwgcmVxdWVzdC5cbiAgY29uc3Qgc20gPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoeyByZWdpb24gfSk7XG4gIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBzbS5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoeyBTZWNyZXRJZDogc2VjcmV0TmFtZSB9KSk7XG4gIGlmICghY3VycmVudC5TZWNyZXRTdHJpbmcpIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtzZWNyZXROYW1lfVwiIGlzIGVtcHR5YCk7XG4gIGNvbnN0IGp3dCA9IChKU09OLnBhcnNlKGN1cnJlbnQuU2VjcmV0U3RyaW5nKSBhcyB7IHBhc3N3b3JkPzogc3RyaW5nIH0pLnBhc3N3b3JkO1xuICBpZiAoIWp3dCkgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke3NlY3JldE5hbWV9XCIgbWlzc2luZyBwYXNzd29yZCAoSldUKWApO1xuXG4gIC8vIDQuIFJ1biBzdG9yZS10b2tlbiAod2l0aG91dCAtLXNjaGVkdWxlLCB0aGUgZGVmYXVsdCkgc28gaXQgT05MWSByZS1taW50cyBhbmRcbiAgLy8gICAgd3JpdGVzIHRoZSBzZWNyZXQg4oCUIGl0IG11c3Qgbm90IHJlZGVwbG95IHRoaXMgc3RhY2sgKHdvdWxkIHJlY3Vyc2UpLiBUaGVcbiAgLy8gICAgd3JpdGUgdXNlcyB0aGUgTGFtYmRhIHJvbGUncyBjcmVkcy5cbiAgLy8gc3RvcmUtdG9rZW4gbm8gbG9uZ2VyIHRha2VzIC0tc2VjcmV0LW5hbWU7IGl0IHJlYWRzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGZyb21cbiAgLy8gdGhlIGVudmlyb25tZW50IChlbHNlIGRlcml2ZXMgaXQgZnJvbSB0aGUgdG9rZW4ncyBvcmcpLlxuICBjb25zdCBhcmdzID0gWydzdG9yZS10b2tlbicsICctLXJlZ2lvbicsIHJlZ2lvbiwgJy0tZGF5cycsIGRheXNdO1xuICAvLyBTRUNVUklUWTogdGhlIHNwYXduZWQgc3RvcmUtdG9rZW4gUE9TVHMgdGhlIEpXVCB0byB0aGUgcGxhdGZvcm0uIFJlZnVzZSB0b1xuICAvLyBkaXNhYmxlIFRMUyB2ZXJpZmljYXRpb24gaW4gcHJvZHVjdGlvbiBzbyBhIE1JVE0gY2FuJ3QgaGFydmVzdCBpdC4gUHJvZHVjdGlvblxuICAvLyBpcyB0aGlzIExhbWJkYSdzIG5vcm1hbCBtb2RlICh0aGUgcmVuZXcgc3RhY2sgc2V0cyBOT0RFX0VOVj1wcm9kdWN0aW9uKSwgc29cbiAgLy8gUExBVEZPUk1fVkVSSUZZX1NTTD1mYWxzZSBpcyBob25vcmVkIE9OTFkgb3V0c2lkZSBwcm9kdWN0aW9uLiBUaGlzIGlubGluZXMgdGhlXG4gIC8vIHNhbWUgYE5PREVfRU5WPT09J3Byb2R1Y3Rpb24nYCBwb2xpY3kgYXMgdXRpbHMvdGxzLnRzI2Fzc2VydFNzbERpc2FibGVBbGxvd2VkXG4gIC8vICh0aGUgaGFuZGxlciBzaGlwcyBhcyBhIHNpbmdsZSBzZWxmLWNvbnRhaW5lZCBpbmRleC5tanMgYW5kIGNhbid0IGltcG9ydCBpdCkuXG4gIGNvbnN0IGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG4gIGlmIChwcm9jZXNzLmVudi5QTEFURk9STV9WRVJJRllfU1NMID09PSAnZmFsc2UnKSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgbGV2ZWw6ICdXQVJOJywgbXNnOiAnUmVmdXNpbmcgUExBVEZPUk1fVkVSSUZZX1NTTD1mYWxzZSBpbiBwcm9kdWN0aW9uIChOT0RFX0VOVj1wcm9kdWN0aW9uKSDigJQgVExTIHZlcmlmaWNhdGlvbiBzdGF5cyBlbmFibGVkJyB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1uby12ZXJpZnktc3NsJyk7XG4gICAgfVxuICB9XG5cbiAgZXhlY0ZpbGVTeW5jKCdub2RlJywgW0NMSSwgLi4uYXJnc10sIHtcbiAgICAvLyBOT0RFX0VOViBpcyBpbmhlcml0ZWQgdmlhIG5wbUVudiAoc3ByZWFkIG9mIHByb2Nlc3MuZW52KSwgc28gdGhlIHNwYXduZWQgQ0xJXG4gICAgLy8gZW5mb3JjZXMgdGhlIHNhbWUgcHJvZHVjdGlvbiBUTFMtZGlzYWJsZSByZWZ1c2FsIGFzIHRoaXMgaGFuZGxlci5cbiAgICBlbnY6IHsgLi4ubnBtRW52LCBQTEFURk9STV9UT0tFTjogand0LCBQTEFURk9STV9CQVNFX1VSTDogcGxhdGZvcm1VcmwsIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lIH0sXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBsZXZlbDogJ0lORk8nLCBtc2c6ICdwbGF0Zm9ybSB0b2tlbiByZW5ld2VkJywgc2VjcmV0TmFtZSB9KSk7XG59O1xuIl19
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmVuZXctaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvdG9rZW4tcmVuZXctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlGLE1BQU0sVUFBVSxHQUFHLG9DQUFvQyxDQUFDO0FBQ3hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsaUJBQWlCLFVBQVUsY0FBYyxDQUFDO0FBRWxFLFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDNUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBbUIsRUFBRTtJQUMvQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsbUJBQW1C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SSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDbkMsK0VBQStFO1FBQy9FLG9FQUFvRTtRQUNwRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUU7UUFDekcsS0FBSyxFQUFFLFNBQVM7S0FDakIsQ0FBQyxDQUFDO0lBRUgsc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciB0aGF0IHJlLW1pbnRzIHRoZSBwbGF0Zm9ybSBKV1QgaW4gU2VjcmV0cyBNYW5hZ2VyIHNvIGl0IG5ldmVyXG4gKiBsYXBzZXMuIERlcGxveWVkICsgc2NoZWR1bGVkIChvbmNlIGEgZGF5KSBieSBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlblxuICogLS1zY2hlZHVsZWAuIFJhdGhlciB0aGFuIHJlLWltcGxlbWVudGluZyB0aGUgdG9rZW4gZmxvdywgaXQgaXMgYSB0aGluXG4gKiBvcmNoZXN0cmF0b3IgdGhhdCByZXVzZXMgdGhlIHRlc3RlZCBDTEkg4oCUIGVhY2ggcnVuOlxuICpcbiAqICAgMS4gUG9pbnQgdGhlIGBAcGlwZWxpbmUtYnVpbGRlcmAgbnBtIHNjb3BlIGF0IHB1YmxpYyBucG0uXG4gKiAgIDIuIERvd25sb2FkIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1tYW5hZ2VyYCBmcm9tIG5wbSBpbnRvIC90bXAuXG4gKiAgIDMuIFJlYWQgdGhlIGN1cnJlbnQgcGxhdGZvcm0gSldUIGZyb20gdGhlIHNlY3JldC5cbiAqICAgNC4gUnVuIGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuYCwgd2hpY2ggbWludHMgYSBmcmVzaCBsb25nLWxpdmVkIHRva2VuXG4gKiAgICAgIHZpYSAvYXBpL3VzZXIvZ2VuZXJhdGUtdG9rZW4gYW5kIHdyaXRlcyBpdCBiYWNrIHRvIHRoZSBzYW1lIHNlY3JldC5cbiAqXG4gKiBgL3RtcGAgaXMgdGhlIG9ubHkgd3JpdGFibGUgcGF0aCBpbiBMYW1iZGEsIHNvIG5wbSdzIEhPTUUvY2FjaGUvcHJlZml4IGFsbCBsaXZlXG4gKiB0aGVyZS4gc3RvcmUtdG9rZW4gZG9lcyBOT1QgZGVwbG95IHRoZSByZW5ld2FsIHN0YWNrIGJ5IGRlZmF1bHQgKG5vIC0tc2NoZWR1bGUpLFxuICogc28gdGhlIHJlbmV3YWwgcnVuIG5ldmVyIHJlZGVwbG95cy9yZWN1cnNlcyBpbnRvIGl0cyBvd24gc3RhY2suXG4gKlxuICogRW52OiBQTEFURk9STV9TRUNSRVRfTkFNRSwgUExBVEZPUk1fQkFTRV9VUkwsIFJFTkVXX0RBWVMgKGRlZmF1bHQgMzApLFxuICogICAgICBQSVBFTElORV9NQU5BR0VSX1ZFUlNJT04gKGRlZmF1bHQgXCJsYXRlc3RcIiksIFBMQVRGT1JNX1ZFUklGWV9TU0wgKFwiZmFsc2VcIlxuICogICAgICB0byBkaXNhYmxlIFRMUyB2ZXJpZmljYXRpb24pLlxuICovXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBTZWNyZXRzTWFuYWdlckNsaWVudCwgR2V0U2VjcmV0VmFsdWVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5cbmNvbnN0IFBNX1BBQ0tBR0UgPSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtbWFuYWdlcic7XG5jb25zdCBUTVAgPSAnL3RtcCc7XG5jb25zdCBQTV9QUkVGSVggPSBgJHtUTVB9L3BtYDtcbmNvbnN0IE5QTV9DQUNIRSA9IGAke1RNUH0vLm5wbWA7XG5jb25zdCBOUE1SQyA9IGAke1RNUH0vLm5wbXJjYDtcbmNvbnN0IENMSSA9IGAke1BNX1BSRUZJWH0vbm9kZV9tb2R1bGVzLyR7UE1fUEFDS0FHRX0vZGlzdC9jbGkuanNgO1xuXG5mdW5jdGlvbiByZXF1aXJlZChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB2ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmICghdikgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkYCk7XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc2VjcmV0TmFtZSA9IHJlcXVpcmVkKCdQTEFURk9STV9TRUNSRVRfTkFNRScpO1xuICBjb25zdCBwbGF0Zm9ybVVybCA9IHJlcXVpcmVkKCdQTEFURk9STV9CQVNFX1VSTCcpLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIGNvbnN0IGRheXMgPSBwcm9jZXNzLmVudi5SRU5FV19EQVlTIHx8ICczMCc7XG4gIGNvbnN0IHZlcnNpb24gPSBwcm9jZXNzLmVudi5QSVBFTElORV9NQU5BR0VSX1ZFUlNJT04gfHwgJ2xhdGVzdCc7XG4gIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMSc7XG5cbiAgLy8gbnBtIGluIExhbWJkYSBjYW4gb25seSB3cml0ZSB1bmRlciAvdG1wOyBIT01FL2NhY2hlL3VzZXJjb25maWcgcG9pbnQgdGhlcmUuXG4gIGNvbnN0IG5wbUVudiA9IHsgLi4ucHJvY2Vzcy5lbnYsIEhPTUU6IFRNUCwgbnBtX2NvbmZpZ19jYWNoZTogTlBNX0NBQ0hFIH07XG5cbiAgLy8gMS4gU2NvcGUgY29uZmlnOiByZXNvbHZlIEBwaXBlbGluZS1idWlsZGVyIGZyb20gcHVibGljIG5wbSByZWdhcmRsZXNzIG9mIGFueVxuICAvLyAgICBpbmhlcml0ZWQgcmVnaXN0cnkuIFdyaXR0ZW4gYXMgYSB1c2VyY29uZmlnIGZpbGUgKGVudiBtYXBwaW5nIG9mIHNjb3BlZFxuICAvLyAgICBrZXlzIGlzIHVucmVsaWFibGUpLlxuICB3cml0ZUZpbGVTeW5jKE5QTVJDLCAnQHBpcGVsaW5lLWJ1aWxkZXI6cmVnaXN0cnk9aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvXFxuJyk7XG5cbiAgLy8gMi4gRG93bmxvYWQgcGlwZWxpbmUtbWFuYWdlciBpbnRvIC90bXAuXG4gIG1rZGlyU3luYyhQTV9QUkVGSVgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGxldmVsOiAnSU5GTycsIG1zZzogJ2luc3RhbGxpbmcgcGlwZWxpbmUtbWFuYWdlcicsIHBhY2thZ2U6IGAke1BNX1BBQ0tBR0V9QCR7dmVyc2lvbn1gIH0pKTtcbiAgZXhlY0ZpbGVTeW5jKFxuICAgICducG0nLFxuICAgIFsnaW5zdGFsbCcsICctLXByZWZpeCcsIFBNX1BSRUZJWCwgJy0tbm8tYXVkaXQnLCAnLS1uby1mdW5kJywgJy0tdXNlcmNvbmZpZycsIE5QTVJDLCBgJHtQTV9QQUNLQUdFfUAke3ZlcnNpb259YF0sXG4gICAgeyBlbnY6IG5wbUVudiwgc3RkaW86ICdpbmhlcml0JyB9LFxuICApO1xuXG4gIC8vIDMuIFJlYWQgdGhlIGN1cnJlbnQgcGxhdGZvcm0gSldUIOKAlCBpdCBhdXRoZW50aWNhdGVzIHRoZSByZW5ld2FsIHJlcXVlc3QuXG4gIGNvbnN0IHNtID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHsgcmVnaW9uIH0pO1xuICBjb25zdCBjdXJyZW50ID0gYXdhaXQgc20uc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHsgU2VjcmV0SWQ6IHNlY3JldE5hbWUgfSkpO1xuICBpZiAoIWN1cnJlbnQuU2VjcmV0U3RyaW5nKSB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7c2VjcmV0TmFtZX1cIiBpcyBlbXB0eWApO1xuICBjb25zdCBqd3QgPSAoSlNPTi5wYXJzZShjdXJyZW50LlNlY3JldFN0cmluZykgYXMgeyBwYXNzd29yZD86IHN0cmluZyB9KS5wYXNzd29yZDtcbiAgaWYgKCFqd3QpIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtzZWNyZXROYW1lfVwiIG1pc3NpbmcgcGFzc3dvcmQgKEpXVClgKTtcblxuICAvLyA0LiBSdW4gc3RvcmUtdG9rZW4gKHdpdGhvdXQgLS1zY2hlZHVsZSwgdGhlIGRlZmF1bHQpIHNvIGl0IE9OTFkgcmUtbWludHMgYW5kXG4gIC8vICAgIHdyaXRlcyB0aGUgc2VjcmV0IOKAlCBpdCBtdXN0IG5vdCByZWRlcGxveSB0aGlzIHN0YWNrICh3b3VsZCByZWN1cnNlKS4gVGhlXG4gIC8vICAgIHdyaXRlIHVzZXMgdGhlIExhbWJkYSByb2xlJ3MgY3JlZHMuXG4gIC8vIHN0b3JlLXRva2VuIG5vIGxvbmdlciB0YWtlcyAtLXNlY3JldC1uYW1lOyBpdCByZWFkcyBQTEFURk9STV9TRUNSRVRfTkFNRSBmcm9tXG4gIC8vIHRoZSBlbnZpcm9ubWVudCAoZWxzZSBkZXJpdmVzIGl0IGZyb20gdGhlIHRva2VuJ3Mgb3JnKS5cbiAgY29uc3QgYXJncyA9IFsnaW5mcmEnLCAnc3RvcmUtdG9rZW4nLCAnLS1yZWdpb24nLCByZWdpb24sICctLWRheXMnLCBkYXlzXTtcbiAgLy8gU0VDVVJJVFk6IHRoZSBzcGF3bmVkIHN0b3JlLXRva2VuIFBPU1RzIHRoZSBKV1QgdG8gdGhlIHBsYXRmb3JtLiBSZWZ1c2UgdG9cbiAgLy8gZGlzYWJsZSBUTFMgdmVyaWZpY2F0aW9uIGluIHByb2R1Y3Rpb24gc28gYSBNSVRNIGNhbid0IGhhcnZlc3QgaXQuIFByb2R1Y3Rpb25cbiAgLy8gaXMgdGhpcyBMYW1iZGEncyBub3JtYWwgbW9kZSAodGhlIHJlbmV3IHN0YWNrIHNldHMgTk9ERV9FTlY9cHJvZHVjdGlvbiksIHNvXG4gIC8vIFBMQVRGT1JNX1ZFUklGWV9TU0w9ZmFsc2UgaXMgaG9ub3JlZCBPTkxZIG91dHNpZGUgcHJvZHVjdGlvbi4gVGhpcyBpbmxpbmVzIHRoZVxuICAvLyBzYW1lIGBOT0RFX0VOVj09PSdwcm9kdWN0aW9uJ2AgcG9saWN5IGFzIHV0aWxzL3Rscy50cyNhc3NlcnRTc2xEaXNhYmxlQWxsb3dlZFxuICAvLyAodGhlIGhhbmRsZXIgc2hpcHMgYXMgYSBzaW5nbGUgc2VsZi1jb250YWluZWQgaW5kZXgubWpzIGFuZCBjYW4ndCBpbXBvcnQgaXQpLlxuICBjb25zdCBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuICBpZiAocHJvY2Vzcy5lbnYuUExBVEZPUk1fVkVSSUZZX1NTTCA9PT0gJ2ZhbHNlJykge1xuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGxldmVsOiAnV0FSTicsIG1zZzogJ1JlZnVzaW5nIFBMQVRGT1JNX1ZFUklGWV9TU0w9ZmFsc2UgaW4gcHJvZHVjdGlvbiAoTk9ERV9FTlY9cHJvZHVjdGlvbikg4oCUIFRMUyB2ZXJpZmljYXRpb24gc3RheXMgZW5hYmxlZCcgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnB1c2goJy0tbm8tdmVyaWZ5LXNzbCcpO1xuICAgIH1cbiAgfVxuXG4gIGV4ZWNGaWxlU3luYygnbm9kZScsIFtDTEksIC4uLmFyZ3NdLCB7XG4gICAgLy8gTk9ERV9FTlYgaXMgaW5oZXJpdGVkIHZpYSBucG1FbnYgKHNwcmVhZCBvZiBwcm9jZXNzLmVudiksIHNvIHRoZSBzcGF3bmVkIENMSVxuICAgIC8vIGVuZm9yY2VzIHRoZSBzYW1lIHByb2R1Y3Rpb24gVExTLWRpc2FibGUgcmVmdXNhbCBhcyB0aGlzIGhhbmRsZXIuXG4gICAgZW52OiB7IC4uLm5wbUVudiwgUExBVEZPUk1fVE9LRU46IGp3dCwgUExBVEZPUk1fQkFTRV9VUkw6IHBsYXRmb3JtVXJsLCBQTEFURk9STV9TRUNSRVRfTkFNRTogc2VjcmV0TmFtZSB9LFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgbGV2ZWw6ICdJTkZPJywgbXNnOiAncGxhdGZvcm0gdG9rZW4gcmVuZXdlZCcsIHNlY3JldE5hbWUgfSkpO1xufTtcbiJdfQ==