aws-cdk 2.175.0 → 2.176.0

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 (91) hide show
  1. package/CONTRIBUTING.md +4 -4
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/credential-plugins.js +5 -5
  5. package/lib/api/aws-auth/sdk-provider.js +3 -2
  6. package/lib/api/aws-auth/sdk.js +3 -2
  7. package/lib/api/cxapp/cloud-assembly.js +4 -4
  8. package/lib/api/deploy-stack.js +11 -10
  9. package/lib/api/deployments.js +4 -4
  10. package/lib/api/environment-access.js +3 -2
  11. package/lib/api/environment-resources.js +3 -2
  12. package/lib/api/garbage-collection/garbage-collector.js +9 -9
  13. package/lib/api/garbage-collection/progress-printer.js +3 -3
  14. package/lib/api/hotswap-deployments.js +11 -10
  15. package/lib/api/logs/find-cloudwatch-logs.js +3 -2
  16. package/lib/api/logs/logs-monitor.js +3 -3
  17. package/lib/api/nested-stack-helpers.js +3 -2
  18. package/lib/api/plugin/plugin.js +1 -1
  19. package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +4 -4
  20. package/lib/api/util/cloudformation/stack-activity-monitor.js +9 -9
  21. package/lib/api/util/cloudformation/stack-event-poller.js +3 -2
  22. package/lib/api/util/cloudformation.js +3 -3
  23. package/lib/cdk-toolkit.d.ts +0 -1
  24. package/lib/cdk-toolkit.js +32 -76
  25. package/lib/cli.js +12 -7
  26. package/lib/commands/context.js +20 -20
  27. package/lib/commands/docs.js +2 -2
  28. package/lib/commands/doctor.js +9 -9
  29. package/lib/commands/migrate.js +16 -16
  30. package/lib/config.d.ts +6 -3
  31. package/lib/config.js +10 -7
  32. package/lib/context-providers/ami.js +2 -2
  33. package/lib/context-providers/index.js +3 -2
  34. package/lib/convert-to-user-input.d.ts +3 -0
  35. package/lib/convert-to-user-input.js +431 -0
  36. package/lib/diff.js +3 -3
  37. package/lib/import.js +6 -6
  38. package/lib/index.js +50 -35
  39. package/lib/init-hooks.js +3 -2
  40. package/lib/init-templates/.init-version.json +1 -1
  41. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  42. package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +1 -1
  43. package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +1 -1
  44. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +1 -1
  45. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +1 -1
  46. package/lib/init.d.ts +1 -1
  47. package/lib/init.js +20 -19
  48. package/lib/logging.d.ts +112 -48
  49. package/lib/logging.js +176 -133
  50. package/lib/notices.js +13 -12
  51. package/lib/parse-command-line-arguments.js +2 -2
  52. package/lib/settings.d.ts +2 -0
  53. package/lib/settings.js +3 -1
  54. package/lib/toolkit/cli-io-host.d.ts +56 -25
  55. package/lib/toolkit/cli-io-host.js +49 -22
  56. package/lib/toolkit/error.js +2 -2
  57. package/lib/{cli-arguments.d.ts → user-input.d.ts} +8 -8
  58. package/lib/user-input.js +3 -0
  59. package/lib/util/archive.js +3 -2
  60. package/lib/util/asset-publishing.js +3 -3
  61. package/lib/util/error.d.ts +9 -0
  62. package/lib/util/error.js +22 -0
  63. package/lib/version.js +2 -2
  64. package/package.json +12 -11
  65. package/scripts/user-input-gen +2 -0
  66. package/scripts/user-input-gen.js +17 -0
  67. package/test/api/exec.test.js +3 -3
  68. package/test/api/fake-sts.js +3 -2
  69. package/test/api/logs/logging.test.js +269 -0
  70. package/test/api/sdk-provider.test.js +3 -3
  71. package/test/api/stack-activity-monitor.test.js +16 -16
  72. package/test/api/util/error.test.d.ts +1 -0
  73. package/test/api/util/error.test.js +26 -0
  74. package/test/cdk-toolkit.test.js +1 -46
  75. package/test/cli-arguments.test.js +126 -81
  76. package/test/cli.test.js +8 -8
  77. package/test/init.test.js +5 -5
  78. package/test/jest-bufferedconsole.d.ts +14 -0
  79. package/test/jest-bufferedconsole.js +72 -0
  80. package/test/notices.test.js +14 -14
  81. package/test/toolkit/cli-io-host.test.js +93 -188
  82. package/test/util/silent.js +2 -2
  83. package/test/version.test.js +5 -5
  84. package/lib/cli-arguments.js +0 -3
  85. package/lib/convert-to-cli-args.d.ts +0 -2
  86. package/lib/convert-to-cli-args.js +0 -234
  87. package/scripts/cli-args-gen +0 -2
  88. package/scripts/cli-args-gen.js +0 -16
  89. package/test/api/logs/cli-logging.test.js +0 -135
  90. /package/scripts/{cli-args-gen.d.ts → user-input-gen.d.ts} +0 -0
  91. /package/test/api/logs/{cli-logging.test.d.ts → logging.test.d.ts} +0 -0
@@ -33,6 +33,7 @@ const cached_1 = require("./cached");
33
33
  const user_agent_1 = require("./user-agent");
34
34
  const logging_1 = require("../../logging");
35
35
  const error_1 = require("../../toolkit/error");
36
+ const error_2 = require("../../util/error");
36
37
  const tracing_1 = require("../../util/tracing");
37
38
  /**
38
39
  * Base functionality of SDK without credential fetching
@@ -286,7 +287,7 @@ let SDK = SDK_1 = class SDK {
286
287
  return upload.done();
287
288
  }
288
289
  catch (e) {
289
- throw new error_1.AuthenticationError(`Upload failed: ${e.message}`);
290
+ throw new error_1.AuthenticationError(`Upload failed: ${(0, error_2.formatErrorMessage)(e)}`);
290
291
  }
291
292
  },
292
293
  };
@@ -360,4 +361,4 @@ exports.SDK = SDK = SDK_1 = __decorate([
360
361
  tracing_1.traceMethods
361
362
  ], SDK);
362
363
  const CURRENT_ACCOUNT_KEY = Symbol('current_account_key');
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSw0REFvQmlDO0FBQ2pDLDBFQW1Gd0M7QUFDeEMsNEVBUXlDO0FBQ3pDLGdFQUttQztBQUNuQyxvREE2QjZCO0FBQzdCLG9EQTZCNkI7QUFDN0Isb0RBYTZCO0FBQzdCLGdHQWVtRDtBQUNuRCxvREFXNkI7QUFDN0Isb0RBUTZCO0FBQzdCLDBEQWtCZ0M7QUFDaEMsOERBV2tDO0FBQ2xDLGtEQTRCNEI7QUFDNUIsNEVBS3lDO0FBQ3pDLG9EQUs2QjtBQUM3QixvREFLNkI7QUFDN0Isb0RBQTBFO0FBQzFFLHNEQUE4QztBQUM5QyxxRUFBMEU7QUFHMUUsbURBQTZEO0FBRTdELG1EQUF3RDtBQUN4RCxxQ0FBdUM7QUFFdkMsNkNBQW1EO0FBQ25ELDJDQUFzQztBQUN0QywrQ0FBMEQ7QUFDMUQsZ0RBQWtEO0FBcU1sRDs7R0FFRztBQUVJLElBQU0sR0FBRyxXQUFULE1BQU0sR0FBRztJQXFCZCxZQUNtQixZQUEyQyxFQUM1RCxNQUFjLEVBQ2QsY0FBc0MsRUFDdEMsTUFBZTtRQUhFLGlCQUFZLEdBQVosWUFBWSxDQUErQjtRQWY5RDs7V0FFRztRQUNjLHFCQUFnQixHQUFHLElBQUksb0NBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV0Rzs7Ozs7O1dBTUc7UUFDSywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFRcEMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE1BQU07WUFDTixXQUFXLEVBQUUsWUFBWTtZQUN6QixjQUFjO1lBQ2QsYUFBYSxFQUFFLElBQUksb0NBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFD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LENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksc0JBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN2RixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxxQ0FBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQzs7QUEzY1Usa0JBQUc7QUFDVSxnQkFBWSxHQUFHLElBQUkscUNBQXFCLEVBQUUsQUFBOUIsQ0FBK0I7Y0FEeEQsR0FBRztJQURmLHNCQUFZO0dBQ0EsR0FBRyxDQTRjZjtBQUVELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBTeW5jQ2xpZW50LFxuICBGdW5jdGlvbkNvbmZpZ3VyYXRpb24sXG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZCxcbiAgdHlwZSBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsXG4gIHR5cGUgTGlzdEZ1bmN0aW9uc0NvbW1hbmRJbnB1dCxcbiAgcGFnaW5hdGVMaXN0RnVuY3Rpb25zLFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZCxcbiAgdHlwZSBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVBcGlLZXlDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUFwaUtleUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQge1xuICBDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kLFxuICB0eXBlIENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgdHlwZSBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVTdGFja0NvbW1hbmQsXG4gIHR5cGUgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kLFxuICB0eXBlIERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBEZWxldGVTdGFja0NvbW1hbmQsXG4gIHR5cGUgRGVsZXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0LFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgdHlwZSBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICB0eXBlIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kLFxuICB0eXBlIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kT3V0cHV0LFxuICBMaXN0RXhwb3J0c0NvbW1hbmQsXG4gIHR5cGUgTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZCxcbiAgdHlwZSBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0LFxuICB0eXBlIExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFN0YWNrc0NvbW1hbmQsXG4gIExpc3RTdGFja3NDb21tYW5kSW5wdXQsXG4gIExpc3RTdGFja3NDb21tYW5kT3V0cHV0LFxuICBwYWdpbmF0ZUxpc3RTdGFja1Jlc291cmNlcyxcbiAgUm9sbGJhY2tTdGFja0NvbW1hbmQsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0LFxuICBTdGFja1Jlc291cmNlU3VtbWFyeSxcbiAgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kLFxuICB0eXBlIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0LFxuICB0eXBlIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7XG4gIENsb3VkV2F0Y2hMb2dzQ2xpZW50LFxuICBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kT3V0cHV0LFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kLFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kSW5wdXQsXG4gIEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZHdhdGNoLWxvZ3MnO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQ2xpZW50LFxuICBVcGRhdGVQcm9qZWN0Q29tbWFuZCxcbiAgdHlwZSBVcGRhdGVQcm9qZWN0Q29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY29kZWJ1aWxkJztcbmltcG9ydCB7XG4gIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3VibmV0c0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlVnBjc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRPdXRwdXQsXG4gIEVDMkNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQge1xuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCxcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kLFxuICB0eXBlIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0IGFzIEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZE91dHB1dCxcbiAgRUNSQ2xpZW50LFxuICBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kLFxuICB0eXBlIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kT3V0cHV0LFxuICBMaXN0SW1hZ2VzQ29tbWFuZCxcbiAgTGlzdEltYWdlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlQ29tbWFuZCxcbiAgUHV0SW1hZ2VDb21tYW5kSW5wdXQsXG4gIFB1dEltYWdlQ29tbWFuZE91dHB1dCxcbiAgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kLFxuICB0eXBlIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbiAgQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hHZXRJbWFnZUNvbW1hbmQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcbmltcG9ydCB7XG4gIERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsXG4gIEVDU0NsaWVudCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZCxcbiAgdHlwZSBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdENsdXN0ZXJzQ29tbWFuZE91dHB1dCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlU2VydmljZUNvbW1hbmRPdXRwdXQsXG4gIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7XG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlVGFnc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQsXG4gIEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQsXG4gIExpc3RlbmVyLFxuICBMb2FkQmFsYW5jZXIsXG4gIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMsXG4gIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQge1xuICBDcmVhdGVQb2xpY3lDb21tYW5kLFxuICB0eXBlIENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRQb2xpY3lDb21tYW5kLFxuICB0eXBlIEdldFBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRSb2xlQ29tbWFuZCxcbiAgdHlwZSBHZXRSb2xlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFJvbGVDb21tYW5kT3V0cHV0LFxuICBJQU1DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHtcbiAgRGVzY3JpYmVLZXlDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dCxcbiAgS01TQ2xpZW50LFxuICBMaXN0QWxpYXNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQta21zJztcbmltcG9ydCB7XG4gIEludm9rZUNvbW1hbmQsXG4gIHR5cGUgSW52b2tlQ29tbWFuZElucHV0LFxuICB0eXBlIEludm9rZUNvbW1hbmRPdXRwdXQsXG4gIExhbWJkYUNsaWVudCxcbiAgUHVibGlzaFZlcnNpb25Db21tYW5kLFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQWxpYXNDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbiAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgR2V0SG9zdGVkWm9uZUNvbW1hbmQsXG4gIHR5cGUgR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dCxcbiAgUm91dGU1M0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB7XG4gIHR5cGUgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0LFxuICBEZWxldGVPYmplY3RzQ29tbWFuZCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQsXG4gIHR5cGUgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kLFxuICB0eXBlIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgdHlwZSBHZXRPYmplY3RDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBMaXN0T2JqZWN0c1YyQ29tbWFuZCxcbiAgdHlwZSBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0LFxuICB0eXBlIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbiAgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBTM0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7XG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQsXG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7XG4gIFNGTkNsaWVudCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0LFxuICBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2ZuJztcbmltcG9ydCB7XG4gIEdldFBhcmFtZXRlckNvbW1hbmQsXG4gIHR5cGUgR2V0UGFyYW1ldGVyQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQsXG4gIFNTTUNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbSc7XG5pbXBvcnQgeyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQsIFNUU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0IHsgVXBsb2FkIH0gZnJvbSAnQGF3cy1zZGsvbGliLXN0b3JhZ2UnO1xuaW1wb3J0IHsgZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zIH0gZnJvbSAnQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50JztcbmltcG9ydCB0eXBlIHsgTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXInO1xuaW1wb3J0IHsgQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIsIExvZ2dlciB9IGZyb20gJ0BzbWl0aHkvdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuaW1wb3J0IHsgV2FpdGVyUmVzdWx0IH0gZnJvbSAnQHNtaXRoeS91dGlsLXdhaXRlcic7XG5pbXBvcnQgeyBBY2NvdW50QWNjZXNzS2V5Q2FjaGUgfSBmcm9tICcuL2FjY291bnQtY2FjaGUnO1xuaW1wb3J0IHsgY2FjaGVkQXN5bmMgfSBmcm9tICcuL2NhY2hlZCc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHsgZGVmYXVsdENsaVVzZXJBZ2VudCB9IGZyb20gJy4vdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHsgdHJhY2VNZXRob2RzIH0gZnJvbSAnLi4vLi4vdXRpbC90cmFjaW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTM0NsaWVudE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgQVBJcyBhcmUgdXNlZCB0aGF0IHJlcXVpcmUgTUQ1IGNoZWNrc3Vtcy5cbiAgICpcbiAgICogU29tZSBTMyBBUElzIGluIFNES3YyIGhhdmUgYSBidWcgdGhhdCBhbHdheXMgcmVxdWlyZXMgdGhlbSB0byB1c2UgYSBNRDUgY2hlY2tzdW0uXG4gICAqIFRoZXNlIEFQSXMgYXJlIG5vdCBnb2luZyB0byBiZSBzdXBwb3J0ZWQgaW4gYSBGSVBTIGVudmlyb25tZW50LlxuICAgKi9cbiAgbmVlZHNNZDVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkZXNjcmlwdGl2ZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgd2hlcmUgdGhlIFwiQXNzdW1lUm9sZVwiIGNyZWRlbnRpYWxzIGFyZSBjb21pbmcgZnJvbVxuICAgKlxuICAgKiBXaWxsIGJlIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSB0byBoZWxwIHVzZXJzIGRpYWdub3NlIGF1dGggcHJvYmxlbXMuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLy8gVE9ETzogc3RpbGwgc29tZSBjbGVhbnVwIGhlcmUuIE1ha2UgdGhlIHBhZ2luYXRpb24gZnVuY3Rpb25zIGRvIGFsbCB0aGUgd29yayBoZXJlIGluc3RlYWQgb2YgaW4gaW5kaXZpZHVhbCBwYWNrYWdlcy5cbi8vIEFsc28gYWRkIGFzeW5jL2F3YWl0LiBEb2VzIHRoYXQgYWN0dWFsbHkgbWF0dGVyIGluIHRoaXMgY29udGV4dD8gRmluZCBvdXQgYW5kIHVwZGF0ZSBhY2NvcmRpbmdseS5cblxuLy8gQWxzbyBhZGQgbm90ZXMgdG8gdGhlIFBSIGFib3V0IHdoeSB5b3UgaW1wb3J0ZWQgZXZlcnl0aGluZyBpbmRpdmlkdWFsbHkgYW5kIHVzZWQgJ3R5cGUnIHNvIHJldmlld2VycyBkb24ndCBoYXZlIHRvIGFzay5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI7XG4gIHJlcXVlc3RIYW5kbGVyOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zO1xuICByZXRyeVN0cmF0ZWd5OiBDb25maWd1cmVkUmV0cnlTdHJhdGVneTtcbiAgY3VzdG9tVXNlckFnZW50OiBzdHJpbmc7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbiAgczNEaXNhYmxlQm9keVNpZ25pbmc/OiBib29sZWFuO1xuICBjb21wdXRlQ2hlY2tzdW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwU3luY0NsaWVudCB7XG4gIGdldFNjaGVtYUNyZWF0aW9uU3RhdHVzKGlucHV0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0PjtcbiAgc3RhcnRTY2hlbWFDcmVhdGlvbihpbnB1dDogU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVBcGlLZXkoaW5wdXQ6IFVwZGF0ZUFwaUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQXBpS2V5Q29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlUmVzb2x2ZXIoaW5wdXQ6IFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVSZXNvbHZlckNvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uIGZ1bmN0aW9uc1xuICBsaXN0RnVuY3Rpb25zKGlucHV0OiBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0KTogUHJvbWlzZTxGdW5jdGlvbkNvbmZpZ3VyYXRpb25bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgY29udGludWVVcGRhdGVSb2xsYmFjayhpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVDaGFuZ2VTZXQoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlU3RhY2soaW5wdXQ6IENyZWF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVDaGFuZ2VTZXQoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlU3RhY2soaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUNoYW5nZVNldChpbnB1dDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUoXG4gICAgaW5wdXQ6IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJlc291cmNlU2NhbihpbnB1dDogRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tzKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja1Jlc291cmNlcyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBleGVjdXRlQ2hhbmdlU2V0KGlucHV0OiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGdldEdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZ2V0VGVtcGxhdGUoaW5wdXQ6IEdldFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRUZW1wbGF0ZVN1bW1hcnkoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD47XG4gIGxpc3RFeHBvcnRzKGlucHV0OiBMaXN0RXhwb3J0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FucyhpbnB1dD86IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0U3RhY2tzKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0U3RhY2tzQ29tbWFuZE91dHB1dD47XG4gIHJvbGxiYWNrU3RhY2soaW5wdXQ6IFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0PjtcbiAgc3RhcnRSZXNvdXJjZVNjYW4oaW5wdXQ6IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVTdGFjayhpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbihcbiAgICBpbnB1dDogVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uIGZ1bmN0aW9uc1xuICBkZXNjcmliZVN0YWNrRXZlbnRzKGlucHV0OiBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RTdGFja1Jlc291cmNlcyhpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRXYXRjaExvZ3NDbGllbnQge1xuICBkZXNjcmliZUxvZ0dyb3VwcyhpbnB1dDogRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGZpbHRlckxvZ0V2ZW50cyhpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29kZUJ1aWxkQ2xpZW50IHtcbiAgdXBkYXRlUHJvamVjdChpbnB1dDogVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBJRUMyQ2xpZW50IHtcbiAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lcyhcbiAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVJbnN0YW5jZXMoaW5wdXQ6IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJvdXRlVGFibGVzKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU2VjdXJpdHlHcm91cHMoaW5wdXQ6IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdWJuZXRzKGlucHV0OiBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNzKGlucHV0OiBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwbkdhdGV3YXlzKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDUkNsaWVudCB7XG4gIGJhdGNoRGVsZXRlSW1hZ2UoaW5wdXQ6IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgYmF0Y2hHZXRJbWFnZShpbnB1dDogQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hHZXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVSZXBvc2l0b3J5KGlucHV0OiBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSZXBvc2l0b3JpZXMoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRBdXRob3JpemF0aW9uVG9rZW4oaW5wdXQ6IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dD47XG4gIGxpc3RJbWFnZXMoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2UoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBwdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRUNTQ2xpZW50IHtcbiAgbGlzdENsdXN0ZXJzKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+O1xuICByZWdpc3RlclRhc2tEZWZpbml0aW9uKGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVNlcnZpY2UoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZShpbnB1dDogRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8V2FpdGVyUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB7XG4gIGRlc2NyaWJlTGlzdGVuZXJzKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVMb2FkQmFsYW5jZXJzKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVRhZ3MoaW5wdXQ6IERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVUYWdzQ29tbWFuZE91dHB1dD47XG4gIC8vIFBhZ2luYXRpb25cbiAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyhpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RlbmVyW10+O1xuICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2VycyhpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMb2FkQmFsYW5jZXJbXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlBTUNsaWVudCB7XG4gIGNyZWF0ZVBvbGljeShpbnB1dDogQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0PjtcbiAgZ2V0UG9saWN5KGlucHV0OiBHZXRQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBvbGljeUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRSb2xlKGlucHV0OiBHZXRSb2xlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRSb2xlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtNU0NsaWVudCB7XG4gIGRlc2NyaWJlS2V5KGlucHV0OiBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEFsaWFzZXMoaW5wdXQ6IExpc3RBbGlhc2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0QWxpYXNlc0NvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMYW1iZGFDbGllbnQge1xuICBpbnZva2VDb21tYW5kKGlucHV0OiBJbnZva2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEludm9rZUNvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaXNoVmVyc2lvbihpbnB1dDogUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUFsaWFzKGlucHV0OiBVcGRhdGVBbGlhc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQWxpYXNDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb25Db2RlKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb24oXG4gICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWQoZGVsYXlTZWNvbmRzOiBudW1iZXIsIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlNTNDbGllbnQge1xuICBnZXRIb3N0ZWRab25lKGlucHV0OiBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dD47XG4gIGxpc3RIb3N0ZWRab25lcyhpbnB1dDogTGlzdEhvc3RlZFpvbmVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEhvc3RlZFpvbmVzQnlOYW1lKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTM0NsaWVudCB7XG4gIGRlbGV0ZU9iamVjdHMoaW5wdXQ6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlT2JqZWN0VGFnZ2luZyhpbnB1dDogRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRCdWNrZXRFbmNyeXB0aW9uKGlucHV0OiBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dD47XG4gIGdldEJ1Y2tldExvY2F0aW9uKGlucHV0OiBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0TG9jYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgZ2V0T2JqZWN0KGlucHV0OiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+O1xuICBnZXRPYmplY3RUYWdnaW5nKGlucHV0OiBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIGxpc3RPYmplY3RzVjIoaW5wdXQ6IExpc3RPYmplY3RzVjJDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0PjtcbiAgcHV0T2JqZWN0VGFnZ2luZyhpbnB1dDogUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICB1cGxvYWQoaW5wdXQ6IFB1dE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICBnZXRTZWNyZXRWYWx1ZShpbnB1dDogR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNTTUNsaWVudCB7XG4gIGdldFBhcmFtZXRlcihpbnB1dDogR2V0UGFyYW1ldGVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3RlcEZ1bmN0aW9uc0NsaWVudCB7XG4gIHVwZGF0ZVN0YXRlTWFjaGluZShpbnB1dDogVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0Pjtcbn1cblxuLyoqXG4gKiBCYXNlIGZ1bmN0aW9uYWxpdHkgb2YgU0RLIHdpdGhvdXQgY3JlZGVudGlhbCBmZXRjaGluZ1xuICovXG5AdHJhY2VNZXRob2RzXG5leHBvcnQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWNjb3VudENhY2hlID0gbmV3IEFjY291bnRBY2Nlc3NLZXlDYWNoZSgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNUUyBpcyB1c2VkIHRvIGNoZWNrIGNyZWRlbnRpYWwgdmFsaWRpdHksIGRvbid0IGRvIHRvbyBtYW55IHJldHJpZXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0c1JldHJ5U3RyYXRlZ3kgPSBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMywgKGF0dGVtcHQpID0+IDEwMCAqICgyICoqIGF0dGVtcHQpKTtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBoYXZlIHByb29mIHRoYXQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgbm90IGV4cGlyZWRcbiAgICpcbiAgICogV2UgbmVlZCB0byBkbyBzb21lIG1hbnVhbCBwbHVtYmluZyBhcm91bmQgdGhpcyBiZWNhdXNlIHRoZSBKUyBTREt2MiB0cmVhdHMgYEV4cGlyZWRUb2tlbmBcbiAgICogYXMgcmV0cmlhYmxlIGFuZCB3ZSBoYXZlIGhlZnR5IHJldHJpZXMgb24gQ0ZOIGNhbGxzIG1ha2luZyB0aGUgQ0xJIGhhbmcgZm9yIGEgZ29vZCAxNSBtaW51dGVzXG4gICAqIGlmIHRoZSBjcmVkZW50aWFscyBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBwcml2YXRlIF9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlZFByb3ZpZGVyOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcixcbiAgICByZWdpb246IHN0cmluZyxcbiAgICByZXF1ZXN0SGFuZGxlcjogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBsb2dnZXI/OiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgcmVnaW9uLFxuICAgICAgY3JlZGVudGlhbHM6IGNyZWRQcm92aWRlcixcbiAgICAgIHJlcXVlc3RIYW5kbGVyLFxuICAgICAgcmV0cnlTdHJhdGVneTogbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDcsIChhdHRlbXB0KSA9PiAzMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgICBjdXN0b21Vc2VyQWdlbnQ6IGRlZmF1bHRDbGlVc2VyQWdlbnQoKSxcbiAgICAgIGxvZ2dlcixcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXNlckFnZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPSB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQ7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gY3VycmVudEN1c3RvbVVzZXJBZ2VudCA/IGAke2N1cnJlbnRDdXN0b21Vc2VyQWdlbnR9ICR7dXNlckFnZW50RGF0YX1gIDogdXNlckFnZW50RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50Py5yZXBsYWNlKHVzZXJBZ2VudERhdGEsICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBzeW5jKCk6IElBcHBTeW5jQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQXBwU3luY0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFNjaGVtYUNyZWF0aW9uU3RhdHVzOiAoXG4gICAgICAgIGlucHV0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8R2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kKGlucHV0KSksXG4gICAgICBzdGFydFNjaGVtYUNyZWF0aW9uOiAoaW5wdXQ6IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUFwaUtleTogKGlucHV0OiBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBcGlLZXlDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVGdW5jdGlvbjogKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVSZXNvbHZlcjogKGlucHV0OiBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUmVzb2x2ZXJDb21tYW5kKGlucHV0KSksXG5cbiAgICAgIC8vIFBhZ2luYXRpb24gRnVuY3Rpb25zXG4gICAgICBsaXN0RnVuY3Rpb25zOiBhc3luYyAoaW5wdXQ6IExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEZ1bmN0aW9uQ29uZmlndXJhdGlvbltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IEFycmF5PEZ1bmN0aW9uQ29uZmlndXJhdGlvbj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVMaXN0RnVuY3Rpb25zKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLihwYWdlLmZ1bmN0aW9ucyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbnM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRGb3JtYXRpb24oKTogSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICByZXRyeVN0cmF0ZWd5OiBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMTEsIChhdHRlbXB0OiBudW1iZXIpID0+IDEwMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRpbnVlVXBkYXRlUm9sbGJhY2s6IGFzeW5jIChcbiAgICAgICAgaW5wdXQ6IENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZUNoYW5nZVNldDogKGlucHV0OiBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZTogKFxuICAgICAgICBpbnB1dDogQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlU3RhY2s6IChpbnB1dDogQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVTdGFjazogKGlucHV0OiBEZWxldGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUNoYW5nZVNldDogKGlucHV0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVJlc291cmNlU2NhbjogKGlucHV0OiBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrczogKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrUmVzb3VyY2VzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGV4ZWN1dGVDaGFuZ2VTZXQ6IChpbnB1dDogRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0R2VuZXJhdGVkVGVtcGxhdGU6IChpbnB1dDogR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGU6IChpbnB1dDogR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGVTdW1tYXJ5OiAoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RFeHBvcnRzOiAoaW5wdXQ6IExpc3RFeHBvcnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0RXhwb3J0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuczogKGlucHV0OiBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0U3RhY2tzOiAoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFN0YWNrc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHJvbGxiYWNrU3RhY2s6IChpbnB1dDogUm9sbGJhY2tTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Um9sbGJhY2tTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBSb2xsYmFja1N0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRSZXNvdXJjZVNjYW46IChpbnB1dDogU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlU3RhY2s6IChpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uOiAoXG4gICAgICAgIGlucHV0OiBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrRXZlbnRzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kT3V0cHV0PiA9PiB7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmQoaW5wdXQpKTtcbiAgICAgIH0sXG4gICAgICBsaXN0U3RhY2tSZXNvdXJjZXM6IGFzeW5jIChpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8U3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdFN0YWNrUmVzb3VyY2VzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIHN0YWNrUmVzb3VyY2VzLnB1c2goLi4uKHBhZ2U/LlN0YWNrUmVzb3VyY2VTdW1tYXJpZXMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRXYXRjaExvZ3MoKTogSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRXYXRjaExvZ3NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxvZ0dyb3VwczogKGlucHV0OiBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2dHcm91cHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBmaWx0ZXJMb2dFdmVudHM6IChpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IElDb2RlQnVpbGRDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVQcm9qZWN0OiAoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUHJvamVjdENvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjMigpOiBJRUMyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUMyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbWFnZXM6IChpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbnN0YW5jZXM6IChpbnB1dDogRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSb3V0ZVRhYmxlczogKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN1Ym5ldHM6IChpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwY3M6IChpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcGNzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcG5HYXRld2F5czogKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3IoKTogSUVDUkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhdGNoRGVsZXRlSW1hZ2U6IChpbnB1dDogQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgYmF0Y2hHZXRJbWFnZTogKGlucHV0OiBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEJhdGNoR2V0SW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVSZXBvc2l0b3J5OiAoaW5wdXQ6IENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW1hZ2VzOiAoaW5wdXQ6IEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVwb3NpdG9yaWVzOiAoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEF1dGhvcml6YXRpb25Ub2tlbjogKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SW1hZ2VzOiAoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlOiAoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiAoXG4gICAgICAgIGlucHV0OiBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3MoKTogSUVDU0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RDbHVzdGVyczogKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0Q2x1c3RlcnNDb21tYW5kKGlucHV0KSksXG4gICAgICByZWdpc3RlclRhc2tEZWZpbml0aW9uOiAoXG4gICAgICAgIGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTZXJ2aWNlOiAoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU2VydmljZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlOiAoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsU2VydmljZXNTdGFibGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IDYwMCxcbiAgICAgICAgICAgIG1pbkRlbGF5OiA2LFxuICAgICAgICAgICAgbWF4RGVsYXk6IDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbGJ2MigpOiBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxpc3RlbmVyczogKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUxvYWRCYWxhbmNlcnM6IChpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVUYWdzOiAoaW5wdXQ6IERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVUYWdzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVGFnc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFBhZ2luYXRpb24gRnVuY3Rpb25zXG4gICAgICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0ZW5lcltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IEFycmF5PExpc3RlbmVyPigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKC4uLihwYWdlPy5MaXN0ZW5lcnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+ID0+IHtcbiAgICAgICAgY29uc3QgbG9hZEJhbGFuY2VycyA9IEFycmF5PExvYWRCYWxhbmNlcj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgbG9hZEJhbGFuY2Vycy5wdXNoKC4uLihwYWdlPy5Mb2FkQmFsYW5jZXJzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvYWRCYWxhbmNlcnM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgaWFtKCk6IElJQU1DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBJQU1DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVQb2xpY3k6IChpbnB1dDogQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUG9saWN5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0UG9saWN5OiAoaW5wdXQ6IEdldFBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UG9saWN5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBvbGljeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFJvbGU6IChpbnB1dDogR2V0Um9sZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0Um9sZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBHZXRSb2xlQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMga21zKCk6IElLTVNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBLTVNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUtleTogKGlucHV0OiBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVLZXlDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0QWxpYXNlczogKGlucHV0OiBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEFsaWFzZXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBsYW1iZGEoKTogSUxhbWJkYUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludm9rZUNvbW1hbmQ6IChpbnB1dDogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZva2VDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgSW52b2tlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHVibGlzaFZlcnNpb246IChpbnB1dDogUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlQWxpYXM6IChpbnB1dDogVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUFsaWFzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb25Db2RlOiAoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbjogKFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgLy8gV2FpdGVyc1xuICAgICAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkOiAoXG4gICAgICAgIGRlbGF5U2Vjb25kczogbnVtYmVyLFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZFYyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heERlbGF5OiBkZWxheVNlY29uZHMsXG4gICAgICAgICAgICBtaW5EZWxheTogZGVsYXlTZWNvbmRzLFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IGRlbGF5U2Vjb25kcyAqIDYwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcm91dGU1MygpOiBJUm91dGU1M0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJvdXRlNTNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRIb3N0ZWRab25lOiAoaW5wdXQ6IEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0SG9zdGVkWm9uZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RIb3N0ZWRab25lczogKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0SG9zdGVkWm9uZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SG9zdGVkWm9uZXNCeU5hbWU6IChpbnB1dDogTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgczMoKTogSVMzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVPYmplY3RzOiAoaW5wdXQ6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlT2JqZWN0c0NvbW1hbmQoe1xuICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgIENoZWNrc3VtQWxnb3JpdGhtOiAnU0hBMjU2JyxcbiAgICAgICAgfSkpLFxuICAgICAgZGVsZXRlT2JqZWN0VGFnZ2luZzogKGlucHV0OiBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRCdWNrZXRFbmNyeXB0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEJ1Y2tldExvY2F0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldE9iamVjdDogKGlucHV0OiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRPYmplY3RDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRPYmplY3RUYWdnaW5nOiAoaW5wdXQ6IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RPYmplY3RzVjI6IChpbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0T2JqZWN0c1YyQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHV0T2JqZWN0VGFnZ2luZzogKGlucHV0OiBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kKHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicsXG4gICAgICAgIH0pKSxcbiAgICAgIHVwbG9hZDogKGlucHV0OiBQdXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwbG9hZCA9IG5ldyBVcGxvYWQoe1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgcGFyYW1zOiB7IC4uLmlucHV0LCBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB1cGxvYWQuZG9uZSgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgVXBsb2FkIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZWNyZXRzTWFuYWdlcigpOiBJU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFNlY3JldFZhbHVlOiAoaW5wdXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNzbSgpOiBJU1NNQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU1NNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UGFyYW1ldGVyOiAoaW5wdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBhcmFtZXRlckNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0ZXBGdW5jdGlvbnMoKTogSVN0ZXBGdW5jdGlvbnNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTRk5DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVTdGF0ZU1hY2hpbmU6IChpbnB1dDogVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFXUyBTREsgdjMgcmVxdWlyZXMgYSBjbGllbnQgY29uZmlnIGFuZCBhIGNvbW1hbmQgaW4gb3JkZXIgdG8gZ2V0IGFuIGVuZHBvaW50IGZvclxuICAgKiBhbnkgZ2l2ZW4gc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVcmxTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNmbiA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyh7fSwgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsIHsgLi4uY2ZuLmNvbmZpZyB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnQudXJsLmhvc3RuYW1lLnNwbGl0KGAke3JlZ2lvbn0uYCkucG9wKCkhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIHJldHVybiBjYWNoZWRBc3luYyh0aGlzLCBDVVJSRU5UX0FDQ09VTlRfS0VZLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuY3JlZFByb3ZpZGVyKCk7XG4gICAgICByZXR1cm4gU0RLLmFjY291bnRDYWNoZS5mZXRjaChjcmVkcy5hY2Nlc3NLZXlJZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIG9uZSwgcmVzb2x2ZSBmcm9tIFNUUyBhbmQgc3RvcmUgaW4gY2FjaGUuXG4gICAgICAgIGRlYnVnKCdMb29raW5nIHVwIGRlZmF1bHQgYWNjb3VudCBJRCBmcm9tIFNUUycpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3ksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zZW5kKGNvbW1hbmQpO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSByZXN1bHQuQWNjb3VudDtcbiAgICAgICAgY29uc3QgcGFydGl0aW9uID0gcmVzdWx0LkFybiEuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcIlNUUyBkaWRuJ3QgcmV0dXJuIGFuIGFjY291bnQgSURcIik7XG4gICAgICAgIH1cbiAgICAgICAgZGVidWcoJ0RlZmF1bHQgYWNjb3VudCBJRDonLCBhY2NvdW50SWQpO1xuXG4gICAgICAgIC8vIFNhdmUgYW5vdGhlciBTVFMgY2FsbCBsYXRlciBpZiB0aGlzIG9uZSBhbHJlYWR5IHN1Y2NlZWRlZFxuICAgICAgICB0aGlzLl9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB7IGFjY291bnRJZCwgcGFydGl0aW9uIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgdGhlIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBub3QgZXhwaXJlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ3JlZGVudGlhbHMoKSB7XG4gICAgaWYgKHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNUU0NsaWVudCh7IC4uLnRoaXMuY29uZmlnLCByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3kgfSk7XG4gICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpO1xuICAgIHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgfVxufVxuXG5jb25zdCBDVVJSRU5UX0FDQ09VTlRfS0VZID0gU3ltYm9sKCdjdXJyZW50X2FjY291bnRfa2V5Jyk7XG4iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSw0REFvQmlDO0FBQ2pDLDBFQW1Gd0M7QUFDeEMsNEVBUXlDO0FBQ3pDLGdFQUttQztBQUNuQyxvREE2QjZCO0FBQzdCLG9EQTZCNkI7QUFDN0Isb0RBYTZCO0FBQzdCLGdHQWVtRDtBQUNuRCxvREFXNkI7QUFDN0Isb0RBUTZCO0FBQzdCLDBEQWtCZ0M7QUFDaEMsOERBV2tDO0FBQ2xDLGtEQTRCNEI7QUFDNUIsNEVBS3lDO0FBQ3pDLG9EQUs2QjtBQUM3QixvREFLNkI7QUFDN0Isb0RBQTBFO0FBQzFFLHNEQUE4QztBQUM5QyxxRUFBMEU7QUFHMUUsbURBQTZEO0FBRTdELG1EQUF3RDtBQUN4RCxxQ0FBdUM7QUFFdkMsNkNBQW1EO0FBQ25ELDJDQUFzQztBQUN0QywrQ0FBMEQ7QUFDMUQsNENBQXNEO0FBQ3RELGdEQUFrRDtBQXFNbEQ7O0dBRUc7QUFFSSxJQUFNLEdBQUcsV0FBVCxNQUFNLEdBQUc7SUFxQmQsWUFDbUIsWUFBMkMsRUFDNUQsTUFBYyxFQUNkLGNBQXNDLEVBQ3RDLE1BQWU7UUFIRSxpQkFBWSxHQUFaLFlBQVksQ0FBK0I7UUFmOUQ7O1dBRUc7UUFDYyxxQkFBZ0IsR0FBRyxJQUFJLG9DQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdEc7Ozs7OztXQU1HO1FBQ0ssMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixNQUFNO1lBQ04sV0FBVyxFQUFFLFlBQVk7WUFDekIsY0FBYztZQUNkLGFBQWEsRUFBRSxJQUFJLG9DQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJ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QUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUkscUNBQXdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7O0FBM2NVLGtCQUFHO0FBQ1UsZ0JBQVksR0FBRyxJQUFJLHFDQUFxQixFQUFFLEFBQTlCLENBQStCO2NBRHhELEdBQUc7SUFEZixzQkFBWTtHQUNBLEdBQUcsQ0E0Y2Y7QUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwU3luY0NsaWVudCxcbiAgRnVuY3Rpb25Db25maWd1cmF0aW9uLFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmQsXG4gIHR5cGUgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0LFxuICB0eXBlIExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQsXG4gIHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyxcbiAgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQsXG4gIHR5cGUgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZCxcbiAgdHlwZSBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlQXBpS2V5Q29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWFwcHN5bmMnO1xuaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kLFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0LFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgdHlwZSBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kLFxuICB0eXBlIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgdHlwZSBEZWxldGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kLFxuICB0eXBlIERlbGV0ZVN0YWNrQ29tbWFuZElucHV0LFxuICB0eXBlIERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kLFxuICB0eXBlIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmQsXG4gIHR5cGUgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgdHlwZSBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIEdldFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCxcbiAgdHlwZSBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kLFxuICB0eXBlIExpc3RFeHBvcnRzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kLFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kLFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZE91dHB1dCxcbiAgdHlwZSBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RTdGFja3NDb21tYW5kLFxuICBMaXN0U3RhY2tzQ29tbWFuZElucHV0LFxuICBMaXN0U3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kLFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dCxcbiAgU3RhY2tSZXNvdXJjZVN1bW1hcnksXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZCxcbiAgdHlwZSBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBDbG91ZFdhdGNoTG9nc0NsaWVudCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0LFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZENsaWVudCxcbiAgVXBkYXRlUHJvamVjdENvbW1hbmQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVQcm9qZWN0Q29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN1Ym5ldHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3VibmV0c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kT3V0cHV0LFxuICBFQzJDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsXG4gIEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZCxcbiAgdHlwZSBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0IGFzIEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQsXG4gIEVDUkNsaWVudCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZCxcbiAgdHlwZSBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmQsXG4gIExpc3RJbWFnZXNDb21tYW5kSW5wdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBQdXRJbWFnZUNvbW1hbmQsXG4gIFB1dEltYWdlQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZCxcbiAgdHlwZSBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kLFxuICBCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQge1xuICBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZElucHV0LFxuICBFQ1NDbGllbnQsXG4gIExpc3RDbHVzdGVyc0NvbW1hbmQsXG4gIHR5cGUgTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kLFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVTZXJ2aWNlQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVTZXJ2aWNlQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0LFxuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQge1xuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0LFxuICBFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50LFxuICBMaXN0ZW5lcixcbiAgTG9hZEJhbGFuY2VyLFxuICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzLFxuICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2Vycyxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVsYXN0aWMtbG9hZC1iYWxhbmNpbmctdjInO1xuaW1wb3J0IHtcbiAgQ3JlYXRlUG9saWN5Q29tbWFuZCxcbiAgdHlwZSBDcmVhdGVQb2xpY3lDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUG9saWN5Q29tbWFuZE91dHB1dCxcbiAgR2V0UG9saWN5Q29tbWFuZCxcbiAgdHlwZSBHZXRQb2xpY3lDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0UG9saWN5Q29tbWFuZE91dHB1dCxcbiAgR2V0Um9sZUNvbW1hbmQsXG4gIHR5cGUgR2V0Um9sZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRSb2xlQ29tbWFuZE91dHB1dCxcbiAgSUFNQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7XG4gIERlc2NyaWJlS2V5Q29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUtleUNvbW1hbmRPdXRwdXQsXG4gIEtNU0NsaWVudCxcbiAgTGlzdEFsaWFzZXNDb21tYW5kLFxuICB0eXBlIExpc3RBbGlhc2VzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcyc7XG5pbXBvcnQge1xuICBJbnZva2VDb21tYW5kLFxuICB0eXBlIEludm9rZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBJbnZva2VDb21tYW5kT3V0cHV0LFxuICBMYW1iZGFDbGllbnQsXG4gIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZCxcbiAgdHlwZSBQdWJsaXNoVmVyc2lvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBQdWJsaXNoVmVyc2lvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZUFsaWFzQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVBbGlhc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVBbGlhc0NvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZFYyLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7XG4gIEdldEhvc3RlZFpvbmVDb21tYW5kLFxuICB0eXBlIEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0SG9zdGVkWm9uZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RIb3N0ZWRab25lc0NvbW1hbmQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQsXG4gIFJvdXRlNTNDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yb3V0ZS01Myc7XG5pbXBvcnQge1xuICB0eXBlIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsXG4gIERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0LFxuICBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQsXG4gIEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kLFxuICB0eXBlIEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZCxcbiAgdHlwZSBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIHR5cGUgR2V0T2JqZWN0Q29tbWFuZElucHV0LFxuICB0eXBlIEdldE9iamVjdENvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmQsXG4gIHR5cGUgTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dCxcbiAgdHlwZSBQdXRPYmplY3RDb21tYW5kSW5wdXQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgUzNDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge1xuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0LFxuICBTZWNyZXRzTWFuYWdlckNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQge1xuICBTRk5DbGllbnQsXG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmQsXG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQge1xuICBHZXRQYXJhbWV0ZXJDb21tYW5kLFxuICB0eXBlIEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0LFxuICBTU01DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLCBTVFNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7IFVwbG9hZCB9IGZyb20gJ0Bhd3Mtc2RrL2xpYi1zdG9yYWdlJztcbmltcG9ydCB7IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCc7XG5pbXBvcnQgdHlwZSB7IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgfSBmcm9tICdAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyJztcbmltcG9ydCB7IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyLCBMb2dnZXIgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCB7IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5IH0gZnJvbSAnQHNtaXRoeS91dGlsLXJldHJ5JztcbmltcG9ydCB7IFdhaXRlclJlc3VsdCB9IGZyb20gJ0BzbWl0aHkvdXRpbC13YWl0ZXInO1xuaW1wb3J0IHsgQWNjb3VudEFjY2Vzc0tleUNhY2hlIH0gZnJvbSAnLi9hY2NvdW50LWNhY2hlJztcbmltcG9ydCB7IGNhY2hlZEFzeW5jIH0gZnJvbSAnLi9jYWNoZWQnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4vc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IGRlZmF1bHRDbGlVc2VyQWdlbnQgfSBmcm9tICcuL3VzZXItYWdlbnQnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L2Vycm9yJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3InO1xuaW1wb3J0IHsgdHJhY2VNZXRob2RzIH0gZnJvbSAnLi4vLi4vdXRpbC90cmFjaW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTM0NsaWVudE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgQVBJcyBhcmUgdXNlZCB0aGF0IHJlcXVpcmUgTUQ1IGNoZWNrc3Vtcy5cbiAgICpcbiAgICogU29tZSBTMyBBUElzIGluIFNES3YyIGhhdmUgYSBidWcgdGhhdCBhbHdheXMgcmVxdWlyZXMgdGhlbSB0byB1c2UgYSBNRDUgY2hlY2tzdW0uXG4gICAqIFRoZXNlIEFQSXMgYXJlIG5vdCBnb2luZyB0byBiZSBzdXBwb3J0ZWQgaW4gYSBGSVBTIGVudmlyb25tZW50LlxuICAgKi9cbiAgbmVlZHNNZDVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkZXNjcmlwdGl2ZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgd2hlcmUgdGhlIFwiQXNzdW1lUm9sZVwiIGNyZWRlbnRpYWxzIGFyZSBjb21pbmcgZnJvbVxuICAgKlxuICAgKiBXaWxsIGJlIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSB0byBoZWxwIHVzZXJzIGRpYWdub3NlIGF1dGggcHJvYmxlbXMuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLy8gVE9ETzogc3RpbGwgc29tZSBjbGVhbnVwIGhlcmUuIE1ha2UgdGhlIHBhZ2luYXRpb24gZnVuY3Rpb25zIGRvIGFsbCB0aGUgd29yayBoZXJlIGluc3RlYWQgb2YgaW4gaW5kaXZpZHVhbCBwYWNrYWdlcy5cbi8vIEFsc28gYWRkIGFzeW5jL2F3YWl0LiBEb2VzIHRoYXQgYWN0dWFsbHkgbWF0dGVyIGluIHRoaXMgY29udGV4dD8gRmluZCBvdXQgYW5kIHVwZGF0ZSBhY2NvcmRpbmdseS5cblxuLy8gQWxzbyBhZGQgbm90ZXMgdG8gdGhlIFBSIGFib3V0IHdoeSB5b3UgaW1wb3J0ZWQgZXZlcnl0aGluZyBpbmRpdmlkdWFsbHkgYW5kIHVzZWQgJ3R5cGUnIHNvIHJldmlld2VycyBkb24ndCBoYXZlIHRvIGFzay5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI7XG4gIHJlcXVlc3RIYW5kbGVyOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zO1xuICByZXRyeVN0cmF0ZWd5OiBDb25maWd1cmVkUmV0cnlTdHJhdGVneTtcbiAgY3VzdG9tVXNlckFnZW50OiBzdHJpbmc7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbiAgczNEaXNhYmxlQm9keVNpZ25pbmc/OiBib29sZWFuO1xuICBjb21wdXRlQ2hlY2tzdW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwU3luY0NsaWVudCB7XG4gIGdldFNjaGVtYUNyZWF0aW9uU3RhdHVzKGlucHV0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0PjtcbiAgc3RhcnRTY2hlbWFDcmVhdGlvbihpbnB1dDogU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVBcGlLZXkoaW5wdXQ6IFVwZGF0ZUFwaUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQXBpS2V5Q29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlUmVzb2x2ZXIoaW5wdXQ6IFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVSZXNvbHZlckNvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uIGZ1bmN0aW9uc1xuICBsaXN0RnVuY3Rpb25zKGlucHV0OiBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0KTogUHJvbWlzZTxGdW5jdGlvbkNvbmZpZ3VyYXRpb25bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgY29udGludWVVcGRhdGVSb2xsYmFjayhpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVDaGFuZ2VTZXQoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlU3RhY2soaW5wdXQ6IENyZWF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVDaGFuZ2VTZXQoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlU3RhY2soaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUNoYW5nZVNldChpbnB1dDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUoXG4gICAgaW5wdXQ6IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJlc291cmNlU2NhbihpbnB1dDogRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tzKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja1Jlc291cmNlcyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBleGVjdXRlQ2hhbmdlU2V0KGlucHV0OiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGdldEdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZ2V0VGVtcGxhdGUoaW5wdXQ6IEdldFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRUZW1wbGF0ZVN1bW1hcnkoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD47XG4gIGxpc3RFeHBvcnRzKGlucHV0OiBMaXN0RXhwb3J0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FucyhpbnB1dD86IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0U3RhY2tzKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0U3RhY2tzQ29tbWFuZE91dHB1dD47XG4gIHJvbGxiYWNrU3RhY2soaW5wdXQ6IFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0PjtcbiAgc3RhcnRSZXNvdXJjZVNjYW4oaW5wdXQ6IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVTdGFjayhpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbihcbiAgICBpbnB1dDogVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uIGZ1bmN0aW9uc1xuICBkZXNjcmliZVN0YWNrRXZlbnRzKGlucHV0OiBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RTdGFja1Jlc291cmNlcyhpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRXYXRjaExvZ3NDbGllbnQge1xuICBkZXNjcmliZUxvZ0dyb3VwcyhpbnB1dDogRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGZpbHRlckxvZ0V2ZW50cyhpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29kZUJ1aWxkQ2xpZW50IHtcbiAgdXBkYXRlUHJvamVjdChpbnB1dDogVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBJRUMyQ2xpZW50IHtcbiAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lcyhcbiAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVJbnN0YW5jZXMoaW5wdXQ6IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJvdXRlVGFibGVzKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU2VjdXJpdHlHcm91cHMoaW5wdXQ6IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdWJuZXRzKGlucHV0OiBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNzKGlucHV0OiBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwbkdhdGV3YXlzKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDUkNsaWVudCB7XG4gIGJhdGNoRGVsZXRlSW1hZ2UoaW5wdXQ6IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgYmF0Y2hHZXRJbWFnZShpbnB1dDogQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hHZXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVSZXBvc2l0b3J5KGlucHV0OiBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSZXBvc2l0b3JpZXMoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRBdXRob3JpemF0aW9uVG9rZW4oaW5wdXQ6IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dD47XG4gIGxpc3RJbWFnZXMoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2UoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBwdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRUNTQ2xpZW50IHtcbiAgbGlzdENsdXN0ZXJzKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+O1xuICByZWdpc3RlclRhc2tEZWZpbml0aW9uKGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVNlcnZpY2UoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZShpbnB1dDogRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8V2FpdGVyUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB7XG4gIGRlc2NyaWJlTGlzdGVuZXJzKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVMb2FkQmFsYW5jZXJzKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVRhZ3MoaW5wdXQ6IERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVUYWdzQ29tbWFuZE91dHB1dD47XG4gIC8vIFBhZ2luYXRpb25cbiAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyhpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RlbmVyW10+O1xuICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2VycyhpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMb2FkQmFsYW5jZXJbXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlBTUNsaWVudCB7XG4gIGNyZWF0ZVBvbGljeShpbnB1dDogQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0PjtcbiAgZ2V0UG9saWN5KGlucHV0OiBHZXRQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBvbGljeUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRSb2xlKGlucHV0OiBHZXRSb2xlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRSb2xlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtNU0NsaWVudCB7XG4gIGRlc2NyaWJlS2V5KGlucHV0OiBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEFsaWFzZXMoaW5wdXQ6IExpc3RBbGlhc2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0QWxpYXNlc0NvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMYW1iZGFDbGllbnQge1xuICBpbnZva2VDb21tYW5kKGlucHV0OiBJbnZva2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEludm9rZUNvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaXNoVmVyc2lvbihpbnB1dDogUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUFsaWFzKGlucHV0OiBVcGRhdGVBbGlhc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQWxpYXNDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb25Db2RlKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb24oXG4gICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWQoZGVsYXlTZWNvbmRzOiBudW1iZXIsIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlNTNDbGllbnQge1xuICBnZXRIb3N0ZWRab25lKGlucHV0OiBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dD47XG4gIGxpc3RIb3N0ZWRab25lcyhpbnB1dDogTGlzdEhvc3RlZFpvbmVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEhvc3RlZFpvbmVzQnlOYW1lKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTM0NsaWVudCB7XG4gIGRlbGV0ZU9iamVjdHMoaW5wdXQ6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlT2JqZWN0VGFnZ2luZyhpbnB1dDogRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRCdWNrZXRFbmNyeXB0aW9uKGlucHV0OiBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dD47XG4gIGdldEJ1Y2tldExvY2F0aW9uKGlucHV0OiBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0TG9jYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgZ2V0T2JqZWN0KGlucHV0OiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+O1xuICBnZXRPYmplY3RUYWdnaW5nKGlucHV0OiBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIGxpc3RPYmplY3RzVjIoaW5wdXQ6IExpc3RPYmplY3RzVjJDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0PjtcbiAgcHV0T2JqZWN0VGFnZ2luZyhpbnB1dDogUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICB1cGxvYWQoaW5wdXQ6IFB1dE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICBnZXRTZWNyZXRWYWx1ZShpbnB1dDogR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNTTUNsaWVudCB7XG4gIGdldFBhcmFtZXRlcihpbnB1dDogR2V0UGFyYW1ldGVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3RlcEZ1bmN0aW9uc0NsaWVudCB7XG4gIHVwZGF0ZVN0YXRlTWFjaGluZShpbnB1dDogVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0Pjtcbn1cblxuLyoqXG4gKiBCYXNlIGZ1bmN0aW9uYWxpdHkgb2YgU0RLIHdpdGhvdXQgY3JlZGVudGlhbCBmZXRjaGluZ1xuICovXG5AdHJhY2VNZXRob2RzXG5leHBvcnQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWNjb3VudENhY2hlID0gbmV3IEFjY291bnRBY2Nlc3NLZXlDYWNoZSgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNUUyBpcyB1c2VkIHRvIGNoZWNrIGNyZWRlbnRpYWwgdmFsaWRpdHksIGRvbid0IGRvIHRvbyBtYW55IHJldHJpZXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0c1JldHJ5U3RyYXRlZ3kgPSBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMywgKGF0dGVtcHQpID0+IDEwMCAqICgyICoqIGF0dGVtcHQpKTtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBoYXZlIHByb29mIHRoYXQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgbm90IGV4cGlyZWRcbiAgICpcbiAgICogV2UgbmVlZCB0byBkbyBzb21lIG1hbnVhbCBwbHVtYmluZyBhcm91bmQgdGhpcyBiZWNhdXNlIHRoZSBKUyBTREt2MiB0cmVhdHMgYEV4cGlyZWRUb2tlbmBcbiAgICogYXMgcmV0cmlhYmxlIGFuZCB3ZSBoYXZlIGhlZnR5IHJldHJpZXMgb24gQ0ZOIGNhbGxzIG1ha2luZyB0aGUgQ0xJIGhhbmcgZm9yIGEgZ29vZCAxNSBtaW51dGVzXG4gICAqIGlmIHRoZSBjcmVkZW50aWFscyBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBwcml2YXRlIF9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlZFByb3ZpZGVyOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcixcbiAgICByZWdpb246IHN0cmluZyxcbiAgICByZXF1ZXN0SGFuZGxlcjogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBsb2dnZXI/OiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgcmVnaW9uLFxuICAgICAgY3JlZGVudGlhbHM6IGNyZWRQcm92aWRlcixcbiAgICAgIHJlcXVlc3RIYW5kbGVyLFxuICAgICAgcmV0cnlTdHJhdGVneTogbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDcsIChhdHRlbXB0KSA9PiAzMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgICBjdXN0b21Vc2VyQWdlbnQ6IGRlZmF1bHRDbGlVc2VyQWdlbnQoKSxcbiAgICAgIGxvZ2dlcixcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXNlckFnZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPSB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQ7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gY3VycmVudEN1c3RvbVVzZXJBZ2VudCA/IGAke2N1cnJlbnRDdXN0b21Vc2VyQWdlbnR9ICR7dXNlckFnZW50RGF0YX1gIDogdXNlckFnZW50RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50Py5yZXBsYWNlKHVzZXJBZ2VudERhdGEsICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBzeW5jKCk6IElBcHBTeW5jQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQXBwU3luY0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFNjaGVtYUNyZWF0aW9uU3RhdHVzOiAoXG4gICAgICAgIGlucHV0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8R2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kKGlucHV0KSksXG4gICAgICBzdGFydFNjaGVtYUNyZWF0aW9uOiAoaW5wdXQ6IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUFwaUtleTogKGlucHV0OiBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBcGlLZXlDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVGdW5jdGlvbjogKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVSZXNvbHZlcjogKGlucHV0OiBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUmVzb2x2ZXJDb21tYW5kKGlucHV0KSksXG5cbiAgICAgIC8vIFBhZ2luYXRpb24gRnVuY3Rpb25zXG4gICAgICBsaXN0RnVuY3Rpb25zOiBhc3luYyAoaW5wdXQ6IExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEZ1bmN0aW9uQ29uZmlndXJhdGlvbltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IEFycmF5PEZ1bmN0aW9uQ29uZmlndXJhdGlvbj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVMaXN0RnVuY3Rpb25zKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLihwYWdlLmZ1bmN0aW9ucyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbnM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRGb3JtYXRpb24oKTogSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICByZXRyeVN0cmF0ZWd5OiBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMTEsIChhdHRlbXB0OiBudW1iZXIpID0+IDEwMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRpbnVlVXBkYXRlUm9sbGJhY2s6IGFzeW5jIChcbiAgICAgICAgaW5wdXQ6IENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZUNoYW5nZVNldDogKGlucHV0OiBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZTogKFxuICAgICAgICBpbnB1dDogQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlU3RhY2s6IChpbnB1dDogQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVTdGFjazogKGlucHV0OiBEZWxldGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUNoYW5nZVNldDogKGlucHV0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVJlc291cmNlU2NhbjogKGlucHV0OiBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrczogKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrUmVzb3VyY2VzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGV4ZWN1dGVDaGFuZ2VTZXQ6IChpbnB1dDogRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0R2VuZXJhdGVkVGVtcGxhdGU6IChpbnB1dDogR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGU6IChpbnB1dDogR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGVTdW1tYXJ5OiAoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RFeHBvcnRzOiAoaW5wdXQ6IExpc3RFeHBvcnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0RXhwb3J0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuczogKGlucHV0OiBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0U3RhY2tzOiAoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFN0YWNrc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHJvbGxiYWNrU3RhY2s6IChpbnB1dDogUm9sbGJhY2tTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Um9sbGJhY2tTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBSb2xsYmFja1N0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRSZXNvdXJjZVNjYW46IChpbnB1dDogU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlU3RhY2s6IChpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uOiAoXG4gICAgICAgIGlucHV0OiBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrRXZlbnRzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kT3V0cHV0PiA9PiB7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmQoaW5wdXQpKTtcbiAgICAgIH0sXG4gICAgICBsaXN0U3RhY2tSZXNvdXJjZXM6IGFzeW5jIChpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8U3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdFN0YWNrUmVzb3VyY2VzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIHN0YWNrUmVzb3VyY2VzLnB1c2goLi4uKHBhZ2U/LlN0YWNrUmVzb3VyY2VTdW1tYXJpZXMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRXYXRjaExvZ3MoKTogSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRXYXRjaExvZ3NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxvZ0dyb3VwczogKGlucHV0OiBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2dHcm91cHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBmaWx0ZXJMb2dFdmVudHM6IChpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IElDb2RlQnVpbGRDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVQcm9qZWN0OiAoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUHJvamVjdENvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjMigpOiBJRUMyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUMyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbWFnZXM6IChpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbnN0YW5jZXM6IChpbnB1dDogRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSb3V0ZVRhYmxlczogKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN1Ym5ldHM6IChpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwY3M6IChpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcGNzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcG5HYXRld2F5czogKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3IoKTogSUVDUkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhdGNoRGVsZXRlSW1hZ2U6IChpbnB1dDogQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgYmF0Y2hHZXRJbWFnZTogKGlucHV0OiBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEJhdGNoR2V0SW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVSZXBvc2l0b3J5OiAoaW5wdXQ6IENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW1hZ2VzOiAoaW5wdXQ6IEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVwb3NpdG9yaWVzOiAoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEF1dGhvcml6YXRpb25Ub2tlbjogKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SW1hZ2VzOiAoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlOiAoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiAoXG4gICAgICAgIGlucHV0OiBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3MoKTogSUVDU0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RDbHVzdGVyczogKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0Q2x1c3RlcnNDb21tYW5kKGlucHV0KSksXG4gICAgICByZWdpc3RlclRhc2tEZWZpbml0aW9uOiAoXG4gICAgICAgIGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTZXJ2aWNlOiAoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU2VydmljZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlOiAoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsU2VydmljZXNTdGFibGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IDYwMCxcbiAgICAgICAgICAgIG1pbkRlbGF5OiA2LFxuICAgICAgICAgICAgbWF4RGVsYXk6IDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbGJ2MigpOiBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxpc3RlbmVyczogKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUxvYWRCYWxhbmNlcnM6IChpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVUYWdzOiAoaW5wdXQ6IERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVUYWdzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVGFnc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFBhZ2luYXRpb24gRnVuY3Rpb25zXG4gICAgICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0ZW5lcltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IEFycmF5PExpc3RlbmVyPigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKC4uLihwYWdlPy5MaXN0ZW5lcnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+ID0+IHtcbiAgICAgICAgY29uc3QgbG9hZEJhbGFuY2VycyA9IEFycmF5PExvYWRCYWxhbmNlcj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgbG9hZEJhbGFuY2Vycy5wdXNoKC4uLihwYWdlPy5Mb2FkQmFsYW5jZXJzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvYWRCYWxhbmNlcnM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgaWFtKCk6IElJQU1DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBJQU1DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVQb2xpY3k6IChpbnB1dDogQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUG9saWN5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0UG9saWN5OiAoaW5wdXQ6IEdldFBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UG9saWN5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBvbGljeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFJvbGU6IChpbnB1dDogR2V0Um9sZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0Um9sZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBHZXRSb2xlQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMga21zKCk6IElLTVNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBLTVNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUtleTogKGlucHV0OiBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVLZXlDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0QWxpYXNlczogKGlucHV0OiBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEFsaWFzZXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBsYW1iZGEoKTogSUxhbWJkYUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludm9rZUNvbW1hbmQ6IChpbnB1dDogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZva2VDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgSW52b2tlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHVibGlzaFZlcnNpb246IChpbnB1dDogUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlQWxpYXM6IChpbnB1dDogVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUFsaWFzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb25Db2RlOiAoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbjogKFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgLy8gV2FpdGVyc1xuICAgICAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkOiAoXG4gICAgICAgIGRlbGF5U2Vjb25kczogbnVtYmVyLFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZFYyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heERlbGF5OiBkZWxheVNlY29uZHMsXG4gICAgICAgICAgICBtaW5EZWxheTogZGVsYXlTZWNvbmRzLFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IGRlbGF5U2Vjb25kcyAqIDYwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcm91dGU1MygpOiBJUm91dGU1M0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJvdXRlNTNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRIb3N0ZWRab25lOiAoaW5wdXQ6IEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0SG9zdGVkWm9uZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RIb3N0ZWRab25lczogKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0SG9zdGVkWm9uZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SG9zdGVkWm9uZXNCeU5hbWU6IChpbnB1dDogTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgczMoKTogSVMzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVPYmplY3RzOiAoaW5wdXQ6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlT2JqZWN0c0NvbW1hbmQoe1xuICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgIENoZWNrc3VtQWxnb3JpdGhtOiAnU0hBMjU2JyxcbiAgICAgICAgfSkpLFxuICAgICAgZGVsZXRlT2JqZWN0VGFnZ2luZzogKGlucHV0OiBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRCdWNrZXRFbmNyeXB0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEJ1Y2tldExvY2F0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldE9iamVjdDogKGlucHV0OiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRPYmplY3RDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRPYmplY3RUYWdnaW5nOiAoaW5wdXQ6IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RPYmplY3RzVjI6IChpbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0T2JqZWN0c1YyQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHV0T2JqZWN0VGFnZ2luZzogKGlucHV0OiBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kKHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicsXG4gICAgICAgIH0pKSxcbiAgICAgIHVwbG9hZDogKGlucHV0OiBQdXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwbG9hZCA9IG5ldyBVcGxvYWQoe1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgcGFyYW1zOiB7IC4uLmlucHV0LCBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB1cGxvYWQuZG9uZSgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgVXBsb2FkIGZhaWxlZDogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZWNyZXRzTWFuYWdlcigpOiBJU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFNlY3JldFZhbHVlOiAoaW5wdXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNzbSgpOiBJU1NNQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU1NNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UGFyYW1ldGVyOiAoaW5wdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBhcmFtZXRlckNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0ZXBGdW5jdGlvbnMoKTogSVN0ZXBGdW5jdGlvbnNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTRk5DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVTdGF0ZU1hY2hpbmU6IChpbnB1dDogVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFXUyBTREsgdjMgcmVxdWlyZXMgYSBjbGllbnQgY29uZmlnIGFuZCBhIGNvbW1hbmQgaW4gb3JkZXIgdG8gZ2V0IGFuIGVuZHBvaW50IGZvclxuICAgKiBhbnkgZ2l2ZW4gc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVcmxTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNmbiA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyh7fSwgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsIHsgLi4uY2ZuLmNvbmZpZyB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnQudXJsLmhvc3RuYW1lLnNwbGl0KGAke3JlZ2lvbn0uYCkucG9wKCkhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIHJldHVybiBjYWNoZWRBc3luYyh0aGlzLCBDVVJSRU5UX0FDQ09VTlRfS0VZLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuY3JlZFByb3ZpZGVyKCk7XG4gICAgICByZXR1cm4gU0RLLmFjY291bnRDYWNoZS5mZXRjaChjcmVkcy5hY2Nlc3NLZXlJZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIG9uZSwgcmVzb2x2ZSBmcm9tIFNUUyBhbmQgc3RvcmUgaW4gY2FjaGUuXG4gICAgICAgIGRlYnVnKCdMb29raW5nIHVwIGRlZmF1bHQgYWNjb3VudCBJRCBmcm9tIFNUUycpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3ksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zZW5kKGNvbW1hbmQpO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSByZXN1bHQuQWNjb3VudDtcbiAgICAgICAgY29uc3QgcGFydGl0aW9uID0gcmVzdWx0LkFybiEuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcIlNUUyBkaWRuJ3QgcmV0dXJuIGFuIGFjY291bnQgSURcIik7XG4gICAgICAgIH1cbiAgICAgICAgZGVidWcoJ0RlZmF1bHQgYWNjb3VudCBJRDonLCBhY2NvdW50SWQpO1xuXG4gICAgICAgIC8vIFNhdmUgYW5vdGhlciBTVFMgY2FsbCBsYXRlciBpZiB0aGlzIG9uZSBhbHJlYWR5IHN1Y2NlZWRlZFxuICAgICAgICB0aGlzLl9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB7IGFjY291bnRJZCwgcGFydGl0aW9uIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgdGhlIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBub3QgZXhwaXJlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ3JlZGVudGlhbHMoKSB7XG4gICAgaWYgKHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNUU0NsaWVudCh7IC4uLnRoaXMuY29uZmlnLCByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3kgfSk7XG4gICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpO1xuICAgIHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgfVxufVxuXG5jb25zdCBDVVJSRU5UX0FDQ09VTlRfS0VZID0gU3ltYm9sKCdjdXJyZW50X2FjY291bnRfa2V5Jyk7XG4iXX0=
@@ -189,7 +189,7 @@ class StackCollection {
189
189
  printMessage(logging_1.error, 'Error', message.id, message.entry);
190
190
  break;
191
191
  case cxapi.SynthesisMessageLevel.INFO:
192
- printMessage(logging_1.print, 'Info', message.id, message.entry);
192
+ printMessage(logging_1.info, 'Info', message.id, message.entry);
193
193
  break;
194
194
  }
195
195
  }
@@ -236,7 +236,7 @@ function includeDownstreamStacks(selectedStacks, allStacks) {
236
236
  }
237
237
  } while (madeProgress);
238
238
  if (added.length > 0) {
239
- (0, logging_1.print)('Including depending stacks: %s', chalk.bold(added.join(', ')));
239
+ (0, logging_1.info)('Including depending stacks: %s', chalk.bold(added.join(', ')));
240
240
  }
241
241
  }
242
242
  /**
@@ -261,7 +261,7 @@ function includeUpstreamStacks(selectedStacks, allStacks) {
261
261
  }
262
262
  }
263
263
  if (added.length > 0) {
264
- (0, logging_1.print)('Including dependency stacks: %s', chalk.bold(added.join(', ')));
264
+ (0, logging_1.info)('Including dependency stacks: %s', chalk.bold(added.join(', ')));
265
265
  }
266
266
  }
267
267
  function sanitizePatterns(patterns) {
@@ -269,4 +269,4 @@ function sanitizePatterns(patterns) {
269
269
  sanitized = [...new Set(sanitized)]; // make them unique
270
270
  return sanitized;
271
271
  }
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZC1hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHlDQUFzQztBQUN0QyxpQ0FBaUM7QUFDakMsMkNBQXNEO0FBQ3RELCtDQUFtRDtBQUNuRCxxQ0FBcUM7QUFFckMsSUFBWSxnQkFzQlg7QUF0QkQsV0FBWSxnQkFBZ0I7SUFDMUI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7OztPQUdHO0lBQ0gseUNBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7O09BR0c7SUFDSCxxQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBdEJXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBc0IzQjtBQXNCRDs7R0FFRztBQUNILElBQVksc0JBZVg7QUFmRCxXQUFZLHNCQUFzQjtJQUNoQzs7T0FFRztJQUNILG1FQUFJLENBQUE7SUFFSjs7T0FFRztJQUNILDJFQUFRLENBQUE7SUFFUjs7T0FFRztJQUNILCtFQUFVLENBQUE7QUFDWixDQUFDLEVBZlcsc0JBQXNCLHNDQUF0QixzQkFBc0IsUUFlakM7QUFrQkQ7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFNeEIsWUFBNEIsUUFBNkI7UUFBN0IsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQXVCLEVBQUUsT0FBNEI7UUFDN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMxQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxD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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3pCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFFLENBQUMsQ0FBQztvQkFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFBLGVBQUssRUFBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUMxQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBQ3pFLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUN4RCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGVycm9yLCBwcmludCwgd2FybmluZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9lcnJvcic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmV4cG9ydCBlbnVtIERlZmF1bHRTZWxlY3Rpb24ge1xuICAvKipcbiAgICogUmV0dXJucyBhbiBlbXB0eSBzZWxlY3Rpb24gaW4gY2FzZSB0aGVyZSBhcmUgbm8gc2VsZWN0b3JzLlxuICAgKi9cbiAgTm9uZSA9ICdub25lJyxcblxuICAvKipcbiAgICogSWYgdGhlIGFwcCBpbmNsdWRlcyBhIHNpbmdsZSBzdGFjaywgcmV0dXJucyBpdC4gT3RoZXJ3aXNlIHRocm93cyBhbiBleGNlcHRpb24uXG4gICAqIFRoaXMgYmVoYXZpb3IgaXMgdXNlZCBieSBcImRlcGxveVwiLlxuICAgKi9cbiAgT25seVNpbmdsZSA9ICdzaW5nbGUnLFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBzdGFja3MgaW4gdGhlIG1haW4gKHRvcCBsZXZlbCkgYXNzZW1ibHkgb25seS5cbiAgICovXG4gIE1haW5Bc3NlbWJseSA9ICdtYWluJyxcblxuICAvKipcbiAgICogSWYgbm8gc2VsZWN0b3JzIGFyZSBwcm92aWRlZCwgcmV0dXJucyBhbGwgc3RhY2tzIGluIHRoZSBhcHAsXG4gICAqIGluY2x1ZGluZyBzdGFja3MgaW5zaWRlIG5lc3RlZCBhc3NlbWJsaWVzLlxuICAgKi9cbiAgQWxsU3RhY2tzID0gJ2FsbCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0U3RhY2tzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFeHRlbmQgdGhlIHNlbGVjdGlvbiB0byB1cHN0cmVhZC9kb3duc3RyZWFtIHN0YWNrc1xuICAgKiBAZGVmYXVsdCBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLk5vbmUgb25seSBzZWxlY3QgdGhlIHNwZWNpZmllZCBzdGFja3MuXG4gICAqL1xuICBleHRlbmQ/OiBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3IgaWYgbm8gc2VsZWN0b3JzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIGRlZmF1bHRCZWhhdmlvcjogRGVmYXVsdFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgaWYgdGhlIGFwcCBjb250YWlucyBubyBzdGFja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpZ25vcmVOb1N0YWNrcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2hlbiBzZWxlY3Rpbmcgc3RhY2tzLCB3aGF0IG90aGVyIHN0YWNrcyB0byBpbmNsdWRlIGJlY2F1c2Ugb2YgZGVwZW5kZW5jaWVzXG4gKi9cbmV4cG9ydCBlbnVtIEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24ge1xuICAvKipcbiAgICogRG9uJ3Qgc2VsZWN0IGFueSBleHRyYSBzdGFja3NcbiAgICovXG4gIE5vbmUsXG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgc3RhY2tzIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqL1xuICBVcHN0cmVhbSxcblxuICAvKipcbiAgICogSW5jbHVkZSBzdGFja3MgdGhhdCBkZXBlbmQgb24gdGhpcyBzdGFja1xuICAgKi9cbiAgRG93bnN0cmVhbSxcbn1cblxuLyoqXG4gKiBBIHNwZWNpZmljYXRpb24gb2Ygd2hpY2ggc3RhY2tzIHNob3VsZCBiZSBzZWxlY3RlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrU2VsZWN0b3Ige1xuICAvKipcbiAgICogV2hldGhlciBhbGwgc3RhY2tzIGF0IHRoZSB0b3AgbGV2ZWwgYXNzZW1ibHkgc2hvdWxkXG4gICAqIGJlIHNlbGVjdGVkIGFuZCBub3RoaW5nIGVsc2VcbiAgICovXG4gIGFsbFRvcExldmVsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhdHRlcm5zIHRvIG1hdGNoIHRoZSBzdGFjayBoaWVyYXJjaGljYWwgaWRzXG4gICAqL1xuICBwYXR0ZXJuczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBzaW5nbGUgQ2xvdWQgQXNzZW1ibHkgYW5kIHRoZSBvcGVyYXRpb25zIHdlIGRvIG9uIGl0IHRvIGRlcGxveSB0aGUgYXJ0aWZhY3RzIGluc2lkZVxuICovXG5leHBvcnQgY2xhc3MgQ2xvdWRBc3NlbWJseSB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRoaXMgQ2xvdWRBc3NlbWJseSB3YXMgcmVhZCBmcm9tXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGFzc2VtYmx5OiBjeGFwaS5DbG91ZEFzc2VtYmx5KSB7XG4gICAgdGhpcy5kaXJlY3RvcnkgPSBhc3NlbWJseS5kaXJlY3Rvcnk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2VsZWN0U3RhY2tzKHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yLCBvcHRpb25zOiBTZWxlY3RTdGFja3NPcHRpb25zKTogUHJvbWlzZTxTdGFja0NvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBhc20gPSB0aGlzLmFzc2VtYmx5O1xuICAgIGNvbnN0IHRvcExldmVsU3RhY2tzID0gYXNtLnN0YWNrcztcbiAgICBjb25zdCBzdGFja3MgPSBzZW12ZXIubWFqb3IoYXNtLnZlcnNpb24pIDwgMTAgPyBhc20uc3RhY2tzIDogYXNtLnN0YWNrc1JlY3Vyc2l2ZWx5O1xuICAgIGNvbnN0IGFsbFRvcExldmVsID0gc2VsZWN0b3IuYWxsVG9wTGV2ZWwgPz8gZmFsc2U7XG4gICAgY29uc3QgcGF0dGVybnMgPSBzYW5pdGl6ZVBhdHRlcm5zKHNlbGVjdG9yLnBhdHRlcm5zKTtcblxuICAgIGlmIChzdGFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVOb1N0YWNrcykge1xuICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCBbXSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUaGlzIGFwcCBjb250YWlucyBubyBzdGFja3MnKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsVG9wTGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdFRvcExldmVsU3RhY2tzKHN0YWNrcywgdG9wTGV2ZWxTdGFja3MsIG9wdGlvbnMuZXh0ZW5kKTtcbiAgICB9IGVsc2UgaWYgKHBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1hdGNoaW5nU3RhY2tzKHN0YWNrcywgcGF0dGVybnMsIG9wdGlvbnMuZXh0ZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0RGVmYXVsdFN0YWNrcyhzdGFja3MsIHRvcExldmVsU3RhY2tzLCBvcHRpb25zLmRlZmF1bHRCZWhhdmlvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RUb3BMZXZlbFN0YWNrcyhcbiAgICBzdGFja3M6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIHRvcExldmVsU3RhY2tzOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSxcbiAgICBleHRlbmQ6IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gPSBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLk5vbmUsXG4gICk6IFN0YWNrQ29sbGVjdGlvbiB7XG4gICAgaWYgKHRvcExldmVsU3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZFN0YWNrcyh0b3BMZXZlbFN0YWNrcywgc3RhY2tzLCBleHRlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdObyBzdGFjayBmb3VuZCBpbiB0aGUgbWFpbiBjbG91ZCBhc3NlbWJseS4gVXNlIFwibGlzdFwiIHRvIHByaW50IG1hbmlmZXN0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RNYXRjaGluZ1N0YWNrcyhcbiAgICBzdGFja3M6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgICBleHRlbmQ6IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gPSBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLk5vbmUsXG4gICk6IFN0YWNrQ29sbGVjdGlvbiB7XG5cbiAgICBjb25zdCBtYXRjaGluZ1BhdHRlcm4gPSAocGF0dGVybjogc3RyaW5nKSA9PiAoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCkgPT4gbWluaW1hdGNoKHN0YWNrLmhpZXJhcmNoaWNhbElkLCBwYXR0ZXJuKTtcbiAgICBjb25zdCBtYXRjaGVkU3RhY2tzID0gZmxhdHRlbihwYXR0ZXJucy5tYXAocGF0dGVybiA9PiBzdGFja3MuZmlsdGVyKG1hdGNoaW5nUGF0dGVybihwYXR0ZXJuKSkpKTtcblxuICAgIHJldHVybiB0aGlzLmV4dGVuZFN0YWNrcyhtYXRjaGVkU3RhY2tzLCBzdGFja3MsIGV4dGVuZCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdERlZmF1bHRTdGFja3MoXG4gICAgc3RhY2tzOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSxcbiAgICB0b3BMZXZlbFN0YWNrczogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10sXG4gICAgZGVmYXVsdFNlbGVjdGlvbjogRGVmYXVsdFNlbGVjdGlvbixcbiAgKSB7XG4gICAgc3dpdGNoIChkZWZhdWx0U2VsZWN0aW9uKSB7XG4gICAgICBjYXNlIERlZmF1bHRTZWxlY3Rpb24uTWFpbkFzc2VtYmx5OlxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCB0b3BMZXZlbFN0YWNrcyk7XG4gICAgICBjYXNlIERlZmF1bHRTZWxlY3Rpb24uQWxsU3RhY2tzOlxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCBzdGFja3MpO1xuICAgICAgY2FzZSBEZWZhdWx0U2VsZWN0aW9uLk5vbmU6XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIFtdKTtcbiAgICAgIGNhc2UgRGVmYXVsdFNlbGVjdGlvbi5Pbmx5U2luZ2xlOlxuICAgICAgICBpZiAodG9wTGV2ZWxTdGFja3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcywgdG9wTGV2ZWxTdGFja3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1NpbmNlIHRoaXMgYXBwIGluY2x1ZGVzIG1vcmUgdGhhbiBhIHNpbmdsZSBzdGFjaywgc3BlY2lmeSB3aGljaCBzdGFja3MgdG8gdXNlICh3aWxkY2FyZHMgYXJlIHN1cHBvcnRlZCkgb3Igc3BlY2lmeSBgLS1hbGxgXFxuJyArXG4gICAgICAgICAgYFN0YWNrczogJHtzdGFja3MubWFwKHggPT4geC5oaWVyYXJjaGljYWxJZCkuam9pbignIMK3ICcpfWApO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBpbnZhbGlkIGRlZmF1bHQgYmVoYXZpb3I6ICR7ZGVmYXVsdFNlbGVjdGlvbn1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4dGVuZFN0YWNrcyhcbiAgICBtYXRjaGVkOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSxcbiAgICBhbGw6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIGV4dGVuZDogRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiA9IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24uTm9uZSxcbiAgKSB7XG4gICAgY29uc3QgYWxsU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdD4oKTtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGFsbCkge1xuICAgICAgYWxsU3RhY2tzLnNldChzdGFjay5oaWVyYXJjaGljYWxJZCwgc3RhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhCeUhpZXJhcmNoaWNhbElkKG1hdGNoZWQpO1xuXG4gICAgc3dpdGNoIChleHRlbmQpIHtcbiAgICAgIGNhc2UgRXh0ZW5kZWRTdGFja1NlbGVjdGlvbi5Eb3duc3RyZWFtOlxuICAgICAgICBpbmNsdWRlRG93bnN0cmVhbVN0YWNrcyhpbmRleCwgYWxsU3RhY2tzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24uVXBzdHJlYW06XG4gICAgICAgIGluY2x1ZGVVcHN0cmVhbVN0YWNrcyhpbmRleCwgYWxsU3RhY2tzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG9yaWdpbmFsIGFycmF5IGJlY2F1c2UgaXQgaXMgaW4gdGhlIHJpZ2h0IG9yZGVyXG4gICAgY29uc3Qgc2VsZWN0ZWRMaXN0ID0gYWxsLmZpbHRlcihzID0+IGluZGV4LmhhcyhzLmhpZXJhcmNoaWNhbElkKSk7XG5cbiAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCBzZWxlY3RlZExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHNpbmdsZSBzdGFjayBieSBpdHMgSURcbiAgICovXG4gIHB1YmxpYyBzdGFja0J5SWQoc3RhY2tJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcywgW3RoaXMuYXNzZW1ibHkuZ2V0U3RhY2tBcnRpZmFjdChzdGFja0lkKV0pO1xuICB9XG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHN0YWNrcyBhbmQgcmVsYXRlZCBhcnRpZmFjdHNcbiAqXG4gKiBJbiBwcmFjdGljZSwgbm90IGFsbCBhcnRpZmFjdHMgaW4gdGhlIENsb3VkQXNzZW1ibHkgYXJlIGNyZWF0ZWQgZXF1YWw7XG4gKiBzdGFja3MgY2FuIGJlIHNlbGVjdGVkIGluZGVwZW5kZW50bHksIGJ1dCBvdGhlciBhcnRpZmFjdHMgc3VjaCBhcyBhc3NldFxuICogYnVuZGxlcyBjYW5ub3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFja0NvbGxlY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXNzZW1ibHk6IENsb3VkQXNzZW1ibHksIHB1YmxpYyByZWFkb25seSBzdGFja0FydGlmYWN0czogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2tDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpcnN0U3RhY2soKSB7XG4gICAgaWYgKHRoaXMuc3RhY2tDb3VudCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrQ29sbGVjdGlvbiBjb250YWlucyBubyBzdGFjayBhcnRpZmFjdHMgKHRyeWluZyB0byBhY2Nlc3MgdGhlIGZpcnN0IG9uZSknKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tBcnRpZmFjdHNbMF07XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YWNrSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0cy5tYXAocyA9PiBzLmlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZXZlcnNlZCgpIHtcbiAgICBjb25zdCBhcnRzID0gWy4uLnRoaXMuc3RhY2tBcnRpZmFjdHNdO1xuICAgIGFydHMucmV2ZXJzZSgpO1xuICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMuYXNzZW1ibHksIGFydHMpO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcihwcmVkaWNhdGU6IChhcnQ6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCkgPT4gYm9vbGVhbik6IFN0YWNrQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcy5hc3NlbWJseSwgdGhpcy5zdGFja0FydGlmYWN0cy5maWx0ZXIocHJlZGljYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgY29uY2F0KG90aGVyOiBTdGFja0NvbGxlY3Rpb24pOiBTdGFja0NvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMuYXNzZW1ibHksIHRoaXMuc3RhY2tBcnRpZmFjdHMuY29uY2F0KG90aGVyLnN0YWNrQXJ0aWZhY3RzKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgJ2F3czpjZGs6d2FybmluZ3xpbmZvfGVycm9yJyBtZXRhZGF0YSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrIHN5bnRoZXNpc1xuICAgKi9cbiAgcHVibGljIHByb2Nlc3NNZXRhZGF0YU1lc3NhZ2VzKG9wdGlvbnM6IE1ldGFkYXRhTWVzc2FnZU9wdGlvbnMgPSB7fSkge1xuICAgIGxldCB3YXJuaW5ncyA9IGZhbHNlO1xuICAgIGxldCBlcnJvcnMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgdGhpcy5zdGFja0FydGlmYWN0cykge1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHN0YWNrLm1lc3NhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS5sZXZlbCkge1xuICAgICAgICAgIGNhc2UgY3hhcGkuU3ludGhlc2lzTWVzc2FnZUxldmVsLldBUk5JTkc6XG4gICAgICAgICAgICB3YXJuaW5ncyA9IHRydWU7XG4gICAgICAgICAgICBwcmludE1lc3NhZ2Uod2FybmluZywgJ1dhcm5pbmcnLCBtZXNzYWdlLmlkLCBtZXNzYWdlLmVudHJ5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgY3hhcGkuU3ludGhlc2lzTWVzc2FnZUxldmVsLkVSUk9SOlxuICAgICAgICAgICAgZXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIHByaW50TWVzc2FnZShlcnJvciwgJ0Vycm9yJywgbWVzc2FnZS5pZCwgbWVzc2FnZS5lbnRyeSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGN4YXBpLlN5bnRoZXNpc01lc3NhZ2VMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcHJpbnRNZXNzYWdlKHByaW50LCAnSW5mbycsIG1lc3NhZ2UuaWQsIG1lc3NhZ2UuZW50cnkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzICYmICFvcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRm91bmQgZXJyb3JzJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ICYmIHdhcm5pbmdzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdGb3VuZCB3YXJuaW5ncyAoLS1zdHJpY3QgbW9kZSknKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmludE1lc3NhZ2UobG9nRm46IChzOiBzdHJpbmcpID0+IHZvaWQsIHByZWZpeDogc3RyaW5nLCBpZDogc3RyaW5nLCBlbnRyeTogY3hhcGkuTWV0YWRhdGFFbnRyeSkge1xuICAgICAgbG9nRm4oYFske3ByZWZpeH0gYXQgJHtpZH1dICR7ZW50cnkuZGF0YX1gKTtcblxuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSAmJiBlbnRyeS50cmFjZSkge1xuICAgICAgICBsb2dGbihgICAke2VudHJ5LnRyYWNlLmpvaW4oJ1xcbiAgJyl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFNZXNzYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGJlIHZlcmJvc2VcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBzdG9wIG9uIGVycm9yIG1ldGFkYXRhXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpZ25vcmVFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUcmVhdCB3YXJuaW5ncyBpbiBtZXRhZGF0YSBhcyBlcnJvcnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN0cmljdD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGluZGV4QnlIaWVyYXJjaGljYWxJZChzdGFja3M6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdKTogTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0PiB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q+KCk7XG5cbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICByZXN1bHQuc2V0KHN0YWNrLmhpZXJhcmNoaWNhbElkLCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIHN0YWNrIGRlcGVuZGVudHMuXG4gKlxuICogTW9kaWZpZXMgYHNlbGVjdGVkU3RhY2tzYCBpbi1wbGFjZS5cbiAqL1xuZnVuY3Rpb24gaW5jbHVkZURvd25zdHJlYW1TdGFja3MoXG4gIHNlbGVjdGVkU3RhY2tzOiBNYXA8c3RyaW5nLCBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q+LFxuICBhbGxTdGFja3M6IE1hcDxzdHJpbmcsIGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdD4pIHtcbiAgY29uc3QgYWRkZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGxldCBtYWRlUHJvZ3Jlc3M7XG4gIGRvIHtcbiAgICBtYWRlUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2lkLCBzdGFja10gb2YgYWxsU3RhY2tzKSB7XG4gICAgICAvLyBTZWxlY3QgdGhpcyBzdGFjayBpZiBpdCdzIG5vdCBzZWxlY3RlZCB5ZXQgQU5EIGl0IGRlcGVuZHMgb24gYSBzdGFjayB0aGF0J3MgaW4gdGhlIHNlbGVjdGVkIHNldFxuICAgICAgaWYgKCFzZWxlY3RlZFN0YWNrcy5oYXMoaWQpICYmIChzdGFjay5kZXBlbmRlbmNpZXMgfHwgW10pLnNvbWUoZGVwID0+IHNlbGVjdGVkU3RhY2tzLmhhcyhkZXAuaWQpKSkge1xuICAgICAgICBzZWxlY3RlZFN0YWNrcy5zZXQoaWQsIHN0YWNrKTtcbiAgICAgICAgYWRkZWQucHVzaChpZCk7XG4gICAgICAgIG1hZGVQcm9ncmVzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChtYWRlUHJvZ3Jlc3MpO1xuXG4gIGlmIChhZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnQoJ0luY2x1ZGluZyBkZXBlbmRpbmcgc3RhY2tzOiAlcycsIGNoYWxrLmJvbGQoYWRkZWQuam9pbignLCAnKSkpO1xuICB9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2Ygc3RhY2sgZGVwZW5kZW5jaWVzLlxuICpcbiAqIE1vZGlmaWVzIGBzZWxlY3RlZFN0YWNrc2AgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVVcHN0cmVhbVN0YWNrcyhcbiAgc2VsZWN0ZWRTdGFja3M6IE1hcDxzdHJpbmcsIGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdD4sXG4gIGFsbFN0YWNrczogTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0Pikge1xuICBjb25zdCBhZGRlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBtYWRlUHJvZ3Jlc3MgPSB0cnVlO1xuICB3aGlsZSAobWFkZVByb2dyZXNzKSB7XG4gICAgbWFkZVByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHNlbGVjdGVkU3RhY2tzLnZhbHVlcygpKSB7XG4gICAgICAvLyBTZWxlY3QgYW4gYWRkaXRpb25hbCBzdGFjayBpZiBpdCdzIG5vdCBzZWxlY3RlZCB5ZXQgYW5kIGEgZGVwZW5kZW5jeSBvZiBhIHNlbGVjdGVkIHN0YWNrIChhbmQgZXhpc3RzLCBvYnZpb3VzbHkpXG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3lJZCBvZiBzdGFjay5kZXBlbmRlbmNpZXMubWFwKHggPT4geC5tYW5pZmVzdC5kaXNwbGF5TmFtZSA/PyB4LmlkKSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkU3RhY2tzLmhhcyhkZXBlbmRlbmN5SWQpICYmIGFsbFN0YWNrcy5oYXMoZGVwZW5kZW5jeUlkKSkge1xuICAgICAgICAgIGFkZGVkLnB1c2goZGVwZW5kZW5jeUlkKTtcbiAgICAgICAgICBzZWxlY3RlZFN0YWNrcy5zZXQoZGVwZW5kZW5jeUlkLCBhbGxTdGFja3MuZ2V0KGRlcGVuZGVuY3lJZCkhKTtcbiAgICAgICAgICBtYWRlUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICBwcmludCgnSW5jbHVkaW5nIGRlcGVuZGVuY3kgc3RhY2tzOiAlcycsIGNoYWxrLmJvbGQoYWRkZWQuam9pbignLCAnKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplUGF0dGVybnMocGF0dGVybnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBsZXQgc2FuaXRpemVkID0gcGF0dGVybnMuZmlsdGVyKHMgPT4gcyAhPSBudWxsKTsgLy8gZmlsdGVyIG51bGwvdW5kZWZpbmVkXG4gIHNhbml0aXplZCA9IFsuLi5uZXcgU2V0KHNhbml0aXplZCldOyAvLyBtYWtlIHRoZW0gdW5pcXVlXG4gIHJldHVybiBzYW5pdGl6ZWQ7XG59XG4iXX0=
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZC1hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHlDQUFzQztBQUN0QyxpQ0FBaUM7QUFDakMsMkNBQXFEO0FBQ3JELCtDQUFtRDtBQUNuRCxxQ0FBcUM7QUFFckMsSUFBWSxnQkFzQlg7QUF0QkQsV0FBWSxnQkFBZ0I7SUFDMUI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7OztPQUdHO0lBQ0gseUNBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7O09BR0c7SUFDSCxxQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBdEJXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBc0IzQjtBQXNCRDs7R0FFRztBQUNILElBQVksc0JBZVg7QUFmRCxXQUFZLHNCQUFzQjtJQUNoQzs7T0FFRztJQUNILG1FQUFJLENBQUE7SUFFSjs7T0FFRztJQUNILDJFQUFRLENBQUE7SUFFUjs7T0FFRztJQUNILCtFQUFVLENBQUE7QUFDWixDQUFDLEVBZlcsc0JBQXNCLHNDQUF0QixzQkFBc0IsUUFlakM7QUFrQkQ7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFNeEIsWUFBNEIsUUFBNkI7UUFBN0IsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQXVCLEVBQUUsT0FBNEI7UUFDN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMxQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxD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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3pCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFFLENBQUMsQ0FBQztvQkFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFBLGNBQUksRUFBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUMxQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBQ3pFLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUN4RCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGVycm9yLCBpbmZvLCB3YXJuaW5nIH0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L2Vycm9yJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi8uLi91dGlsJztcblxuZXhwb3J0IGVudW0gRGVmYXVsdFNlbGVjdGlvbiB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVtcHR5IHNlbGVjdGlvbiBpbiBjYXNlIHRoZXJlIGFyZSBubyBzZWxlY3RvcnMuXG4gICAqL1xuICBOb25lID0gJ25vbmUnLFxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYXBwIGluY2x1ZGVzIGEgc2luZ2xlIHN0YWNrLCByZXR1cm5zIGl0LiBPdGhlcndpc2UgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgICogVGhpcyBiZWhhdmlvciBpcyB1c2VkIGJ5IFwiZGVwbG95XCIuXG4gICAqL1xuICBPbmx5U2luZ2xlID0gJ3NpbmdsZScsXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHN0YWNrcyBpbiB0aGUgbWFpbiAodG9wIGxldmVsKSBhc3NlbWJseSBvbmx5LlxuICAgKi9cbiAgTWFpbkFzc2VtYmx5ID0gJ21haW4nLFxuXG4gIC8qKlxuICAgKiBJZiBubyBzZWxlY3RvcnMgYXJlIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBzdGFja3MgaW4gdGhlIGFwcCxcbiAgICogaW5jbHVkaW5nIHN0YWNrcyBpbnNpZGUgbmVzdGVkIGFzc2VtYmxpZXMuXG4gICAqL1xuICBBbGxTdGFja3MgPSAnYWxsJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RTdGFja3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgc2VsZWN0aW9uIHRvIHVwc3RyZWFkL2Rvd25zdHJlYW0gc3RhY2tzXG4gICAqIEBkZWZhdWx0IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24uTm9uZSBvbmx5IHNlbGVjdCB0aGUgc3BlY2lmaWVkIHN0YWNrcy5cbiAgICovXG4gIGV4dGVuZD86IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvciBpZiBubyBzZWxlY3RvcnMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgZGVmYXVsdEJlaGF2aW9yOiBEZWZhdWx0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBpZiB0aGUgYXBwIGNvbnRhaW5zIG5vIHN0YWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGlnbm9yZU5vU3RhY2tzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXaGVuIHNlbGVjdGluZyBzdGFja3MsIHdoYXQgb3RoZXIgc3RhY2tzIHRvIGluY2x1ZGUgYmVjYXVzZSBvZiBkZXBlbmRlbmNpZXNcbiAqL1xuZXhwb3J0IGVudW0gRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiB7XG4gIC8qKlxuICAgKiBEb24ndCBzZWxlY3QgYW55IGV4dHJhIHN0YWNrc1xuICAgKi9cbiAgTm9uZSxcblxuICAvKipcbiAgICogSW5jbHVkZSBzdGFja3MgdGhhdCB0aGlzIHN0YWNrIGRlcGVuZHMgb25cbiAgICovXG4gIFVwc3RyZWFtLFxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHN0YWNrcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHN0YWNrXG4gICAqL1xuICBEb3duc3RyZWFtLFxufVxuXG4vKipcbiAqIEEgc3BlY2lmaWNhdGlvbiBvZiB3aGljaCBzdGFja3Mgc2hvdWxkIGJlIHNlbGVjdGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGFsbCBzdGFja3MgYXQgdGhlIHRvcCBsZXZlbCBhc3NlbWJseSBzaG91bGRcbiAgICogYmUgc2VsZWN0ZWQgYW5kIG5vdGhpbmcgZWxzZVxuICAgKi9cbiAgYWxsVG9wTGV2ZWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGF0dGVybnMgdG8gbWF0Y2ggdGhlIHN0YWNrIGhpZXJhcmNoaWNhbCBpZHNcbiAgICovXG4gIHBhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBDbG91ZCBBc3NlbWJseSBhbmQgdGhlIG9wZXJhdGlvbnMgd2UgZG8gb24gaXQgdG8gZGVwbG95IHRoZSBhcnRpZmFjdHMgaW5zaWRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEFzc2VtYmx5IHtcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgdGhpcyBDbG91ZEFzc2VtYmx5IHdhcyByZWFkIGZyb21cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXNzZW1ibHk6IGN4YXBpLkNsb3VkQXNzZW1ibHkpIHtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IGFzc2VtYmx5LmRpcmVjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RTdGFja3Moc2VsZWN0b3I6IFN0YWNrU2VsZWN0b3IsIG9wdGlvbnM6IFNlbGVjdFN0YWNrc09wdGlvbnMpOiBQcm9taXNlPFN0YWNrQ29sbGVjdGlvbj4ge1xuICAgIGNvbnN0IGFzbSA9IHRoaXMuYXNzZW1ibHk7XG4gICAgY29uc3QgdG9wTGV2ZWxTdGFja3MgPSBhc20uc3RhY2tzO1xuICAgIGNvbnN0IHN0YWNrcyA9IHNlbXZlci5tYWpvcihhc20udmVyc2lvbikgPCAxMCA/IGFzbS5zdGFja3MgOiBhc20uc3RhY2tzUmVjdXJzaXZlbHk7XG4gICAgY29uc3QgYWxsVG9wTGV2ZWwgPSBzZWxlY3Rvci5hbGxUb3BMZXZlbCA/PyBmYWxzZTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHNhbml0aXplUGF0dGVybnMoc2VsZWN0b3IucGF0dGVybnMpO1xuXG4gICAgaWYgKHN0YWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChvcHRpb25zLmlnbm9yZU5vU3RhY2tzKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIFtdKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1RoaXMgYXBwIGNvbnRhaW5zIG5vIHN0YWNrcycpO1xuICAgIH1cblxuICAgIGlmIChhbGxUb3BMZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0VG9wTGV2ZWxTdGFja3Moc3RhY2tzLCB0b3BMZXZlbFN0YWNrcywgb3B0aW9ucy5leHRlbmQpO1xuICAgIH0gZWxzZSBpZiAocGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TWF0Y2hpbmdTdGFja3Moc3RhY2tzLCBwYXR0ZXJucywgb3B0aW9ucy5leHRlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3REZWZhdWx0U3RhY2tzKHN0YWNrcywgdG9wTGV2ZWxTdGFja3MsIG9wdGlvbnMuZGVmYXVsdEJlaGF2aW9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFRvcExldmVsU3RhY2tzKFxuICAgIHN0YWNrczogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10sXG4gICAgdG9wTGV2ZWxTdGFja3M6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIGV4dGVuZDogRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiA9IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24uTm9uZSxcbiAgKTogU3RhY2tDb2xsZWN0aW9uIHtcbiAgICBpZiAodG9wTGV2ZWxTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kU3RhY2tzKHRvcExldmVsU3RhY2tzLCBzdGFja3MsIGV4dGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ05vIHN0YWNrIGZvdW5kIGluIHRoZSBtYWluIGNsb3VkIGFzc2VtYmx5LiBVc2UgXCJsaXN0XCIgdG8gcHJpbnQgbWFuaWZlc3QnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdE1hdGNoaW5nU3RhY2tzKFxuICAgIHN0YWNrczogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10sXG4gICAgcGF0dGVybnM6IHN0cmluZ1tdLFxuICAgIGV4dGVuZDogRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiA9IEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24uTm9uZSxcbiAgKTogU3RhY2tDb2xsZWN0aW9uIHtcblxuICAgIGNvbnN0IG1hdGNoaW5nUGF0dGVybiA9IChwYXR0ZXJuOiBzdHJpbmcpID0+IChzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSA9PiBtaW5pbWF0Y2goc3RhY2suaGllcmFyY2hpY2FsSWQsIHBhdHRlcm4pO1xuICAgIGNvbnN0IG1hdGNoZWRTdGFja3MgPSBmbGF0dGVuKHBhdHRlcm5zLm1hcChwYXR0ZXJuID0+IHN0YWNrcy5maWx0ZXIobWF0Y2hpbmdQYXR0ZXJuKHBhdHRlcm4pKSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kU3RhY2tzKG1hdGNoZWRTdGFja3MsIHN0YWNrcywgZXh0ZW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0RGVmYXVsdFN0YWNrcyhcbiAgICBzdGFja3M6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIHRvcExldmVsU3RhY2tzOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSxcbiAgICBkZWZhdWx0U2VsZWN0aW9uOiBEZWZhdWx0U2VsZWN0aW9uLFxuICApIHtcbiAgICBzd2l0Y2ggKGRlZmF1bHRTZWxlY3Rpb24pIHtcbiAgICAgIGNhc2UgRGVmYXVsdFNlbGVjdGlvbi5NYWluQXNzZW1ibHk6XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIHRvcExldmVsU3RhY2tzKTtcbiAgICAgIGNhc2UgRGVmYXVsdFNlbGVjdGlvbi5BbGxTdGFja3M6XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIHN0YWNrcyk7XG4gICAgICBjYXNlIERlZmF1bHRTZWxlY3Rpb24uTm9uZTpcbiAgICAgICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcywgW10pO1xuICAgICAgY2FzZSBEZWZhdWx0U2VsZWN0aW9uLk9ubHlTaW5nbGU6XG4gICAgICAgIGlmICh0b3BMZXZlbFN0YWNrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCB0b3BMZXZlbFN0YWNrcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU2luY2UgdGhpcyBhcHAgaW5jbHVkZXMgbW9yZSB0aGFuIGEgc2luZ2xlIHN0YWNrLCBzcGVjaWZ5IHdoaWNoIHN0YWNrcyB0byB1c2UgKHdpbGRjYXJkcyBhcmUgc3VwcG9ydGVkKSBvciBzcGVjaWZ5IGAtLWFsbGBcXG4nICtcbiAgICAgICAgICBgU3RhY2tzOiAke3N0YWNrcy5tYXAoeCA9PiB4LmhpZXJhcmNoaWNhbElkKS5qb2luKCcgwrcgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYGludmFsaWQgZGVmYXVsdCBiZWhhdmlvcjogJHtkZWZhdWx0U2VsZWN0aW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXh0ZW5kU3RhY2tzKFxuICAgIG1hdGNoZWQ6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdLFxuICAgIGFsbDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10sXG4gICAgZXh0ZW5kOiBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uID0gRXh0ZW5kZWRTdGFja1NlbGVjdGlvbi5Ob25lLFxuICApIHtcbiAgICBjb25zdCBhbGxTdGFja3MgPSBuZXcgTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0PigpO1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgYWxsKSB7XG4gICAgICBhbGxTdGFja3Muc2V0KHN0YWNrLmhpZXJhcmNoaWNhbElkLCBzdGFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSBpbmRleEJ5SGllcmFyY2hpY2FsSWQobWF0Y2hlZCk7XG5cbiAgICBzd2l0Y2ggKGV4dGVuZCkge1xuICAgICAgY2FzZSBFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLkRvd25zdHJlYW06XG4gICAgICAgIGluY2x1ZGVEb3duc3RyZWFtU3RhY2tzKGluZGV4LCBhbGxTdGFja3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRXh0ZW5kZWRTdGFja1NlbGVjdGlvbi5VcHN0cmVhbTpcbiAgICAgICAgaW5jbHVkZVVwc3RyZWFtU3RhY2tzKGluZGV4LCBhbGxTdGFja3MpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgb3JpZ2luYWwgYXJyYXkgYmVjYXVzZSBpdCBpcyBpbiB0aGUgcmlnaHQgb3JkZXJcbiAgICBjb25zdCBzZWxlY3RlZExpc3QgPSBhbGwuZmlsdGVyKHMgPT4gaW5kZXguaGFzKHMuaGllcmFyY2hpY2FsSWQpKTtcblxuICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIHNlbGVjdGVkTGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgc2luZ2xlIHN0YWNrIGJ5IGl0cyBJRFxuICAgKi9cbiAgcHVibGljIHN0YWNrQnlJZChzdGFja0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCBbdGhpcy5hc3NlbWJseS5nZXRTdGFja0FydGlmYWN0KHN0YWNrSWQpXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc3RhY2tzIGFuZCByZWxhdGVkIGFydGlmYWN0c1xuICpcbiAqIEluIHByYWN0aWNlLCBub3QgYWxsIGFydGlmYWN0cyBpbiB0aGUgQ2xvdWRBc3NlbWJseSBhcmUgY3JlYXRlZCBlcXVhbDtcbiAqIHN0YWNrcyBjYW4gYmUgc2VsZWN0ZWQgaW5kZXBlbmRlbnRseSwgYnV0IG90aGVyIGFydGlmYWN0cyBzdWNoIGFzIGFzc2V0XG4gKiBidW5kbGVzIGNhbm5vdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrQ29sbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBhc3NlbWJseTogQ2xvdWRBc3NlbWJseSwgcHVibGljIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3RzOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSkge1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFja0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrQXJ0aWZhY3RzLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlyc3RTdGFjaygpIHtcbiAgICBpZiAodGhpcy5zdGFja0NvdW50IDwgMSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2tDb2xsZWN0aW9uIGNvbnRhaW5zIG5vIHN0YWNrIGFydGlmYWN0cyAodHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3Qgb25lKScpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0c1swXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2tJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrQXJ0aWZhY3RzLm1hcChzID0+IHMuaWQpO1xuICB9XG5cbiAgcHVibGljIHJldmVyc2VkKCkge1xuICAgIGNvbnN0IGFydHMgPSBbLi4udGhpcy5zdGFja0FydGlmYWN0c107XG4gICAgYXJ0cy5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcy5hc3NlbWJseSwgYXJ0cyk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGFydDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSA9PiBib29sZWFuKTogU3RhY2tDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLmFzc2VtYmx5LCB0aGlzLnN0YWNrQXJ0aWZhY3RzLmZpbHRlcihwcmVkaWNhdGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25jYXQob3RoZXI6IFN0YWNrQ29sbGVjdGlvbik6IFN0YWNrQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcy5hc3NlbWJseSwgdGhpcy5zdGFja0FydGlmYWN0cy5jb25jYXQob3RoZXIuc3RhY2tBcnRpZmFjdHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyAnYXdzOmNkazp3YXJuaW5nfGluZm98ZXJyb3InIG1ldGFkYXRhIGVudHJpZXMgZnJvbSB0aGUgc3RhY2sgc3ludGhlc2lzXG4gICAqL1xuICBwdWJsaWMgcHJvY2Vzc01ldGFkYXRhTWVzc2FnZXMob3B0aW9uczogTWV0YWRhdGFNZXNzYWdlT3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IHdhcm5pbmdzID0gZmFsc2U7XG4gICAgbGV0IGVycm9ycyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrQXJ0aWZhY3RzKSB7XG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2Ygc3RhY2subWVzc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLmxldmVsKSB7XG4gICAgICAgICAgY2FzZSBjeGFwaS5TeW50aGVzaXNNZXNzYWdlTGV2ZWwuV0FSTklORzpcbiAgICAgICAgICAgIHdhcm5pbmdzID0gdHJ1ZTtcbiAgICAgICAgICAgIHByaW50TWVzc2FnZSh3YXJuaW5nLCAnV2FybmluZycsIG1lc3NhZ2UuaWQsIG1lc3NhZ2UuZW50cnkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBjeGFwaS5TeW50aGVzaXNNZXNzYWdlTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICBlcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgcHJpbnRNZXNzYWdlKGVycm9yLCAnRXJyb3InLCBtZXNzYWdlLmlkLCBtZXNzYWdlLmVudHJ5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgY3hhcGkuU3ludGhlc2lzTWVzc2FnZUxldmVsLklORk86XG4gICAgICAgICAgICBwcmludE1lc3NhZ2UoaW5mbywgJ0luZm8nLCBtZXNzYWdlLmlkLCBtZXNzYWdlLmVudHJ5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycyAmJiAhb3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ZvdW5kIGVycm9ycycpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnN0cmljdCAmJiB3YXJuaW5ncykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRm91bmQgd2FybmluZ3MgKC0tc3RyaWN0IG1vZGUpJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJpbnRNZXNzYWdlKGxvZ0ZuOiAoczogc3RyaW5nKSA9PiB2b2lkLCBwcmVmaXg6IHN0cmluZywgaWQ6IHN0cmluZywgZW50cnk6IGN4YXBpLk1ldGFkYXRhRW50cnkpIHtcbiAgICAgIGxvZ0ZuKGBbJHtwcmVmaXh9IGF0ICR7aWR9XSAke2VudHJ5LmRhdGF9YCk7XG5cbiAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UgJiYgZW50cnkudHJhY2UpIHtcbiAgICAgICAgbG9nRm4oYCAgJHtlbnRyeS50cmFjZS5qb2luKCdcXG4gICcpfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhTWVzc2FnZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBiZSB2ZXJib3NlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3Qgc3RvcCBvbiBlcnJvciBtZXRhZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaWdub3JlRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHJlYXQgd2FybmluZ3MgaW4gbWV0YWRhdGEgYXMgZXJyb3JzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzdHJpY3Q/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpbmRleEJ5SGllcmFyY2hpY2FsSWQoc3RhY2tzOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3RbXSk6IE1hcDxzdHJpbmcsIGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdD4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0PigpO1xuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2Ygc3RhY2tzKSB7XG4gICAgcmVzdWx0LnNldChzdGFjay5oaWVyYXJjaGljYWxJZCwgc3RhY2spO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiBzdGFjayBkZXBlbmRlbnRzLlxuICpcbiAqIE1vZGlmaWVzIGBzZWxlY3RlZFN0YWNrc2AgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVEb3duc3RyZWFtU3RhY2tzKFxuICBzZWxlY3RlZFN0YWNrczogTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0PixcbiAgYWxsU3RhY2tzOiBNYXA8c3RyaW5nLCBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q+KSB7XG4gIGNvbnN0IGFkZGVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBsZXQgbWFkZVByb2dyZXNzO1xuICBkbyB7XG4gICAgbWFkZVByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgc3RhY2tdIG9mIGFsbFN0YWNrcykge1xuICAgICAgLy8gU2VsZWN0IHRoaXMgc3RhY2sgaWYgaXQncyBub3Qgc2VsZWN0ZWQgeWV0IEFORCBpdCBkZXBlbmRzIG9uIGEgc3RhY2sgdGhhdCdzIGluIHRoZSBzZWxlY3RlZCBzZXRcbiAgICAgIGlmICghc2VsZWN0ZWRTdGFja3MuaGFzKGlkKSAmJiAoc3RhY2suZGVwZW5kZW5jaWVzIHx8IFtdKS5zb21lKGRlcCA9PiBzZWxlY3RlZFN0YWNrcy5oYXMoZGVwLmlkKSkpIHtcbiAgICAgICAgc2VsZWN0ZWRTdGFja3Muc2V0KGlkLCBzdGFjayk7XG4gICAgICAgIGFkZGVkLnB1c2goaWQpO1xuICAgICAgICBtYWRlUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAobWFkZVByb2dyZXNzKTtcblxuICBpZiAoYWRkZWQubGVuZ3RoID4gMCkge1xuICAgIGluZm8oJ0luY2x1ZGluZyBkZXBlbmRpbmcgc3RhY2tzOiAlcycsIGNoYWxrLmJvbGQoYWRkZWQuam9pbignLCAnKSkpO1xuICB9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2Ygc3RhY2sgZGVwZW5kZW5jaWVzLlxuICpcbiAqIE1vZGlmaWVzIGBzZWxlY3RlZFN0YWNrc2AgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVVcHN0cmVhbVN0YWNrcyhcbiAgc2VsZWN0ZWRTdGFja3M6IE1hcDxzdHJpbmcsIGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdD4sXG4gIGFsbFN0YWNrczogTWFwPHN0cmluZywgY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0Pikge1xuICBjb25zdCBhZGRlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBtYWRlUHJvZ3Jlc3MgPSB0cnVlO1xuICB3aGlsZSAobWFkZVByb2dyZXNzKSB7XG4gICAgbWFkZVByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHNlbGVjdGVkU3RhY2tzLnZhbHVlcygpKSB7XG4gICAgICAvLyBTZWxlY3QgYW4gYWRkaXRpb25hbCBzdGFjayBpZiBpdCdzIG5vdCBzZWxlY3RlZCB5ZXQgYW5kIGEgZGVwZW5kZW5jeSBvZiBhIHNlbGVjdGVkIHN0YWNrIChhbmQgZXhpc3RzLCBvYnZpb3VzbHkpXG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3lJZCBvZiBzdGFjay5kZXBlbmRlbmNpZXMubWFwKHggPT4geC5tYW5pZmVzdC5kaXNwbGF5TmFtZSA/PyB4LmlkKSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkU3RhY2tzLmhhcyhkZXBlbmRlbmN5SWQpICYmIGFsbFN0YWNrcy5oYXMoZGVwZW5kZW5jeUlkKSkge1xuICAgICAgICAgIGFkZGVkLnB1c2goZGVwZW5kZW5jeUlkKTtcbiAgICAgICAgICBzZWxlY3RlZFN0YWNrcy5zZXQoZGVwZW5kZW5jeUlkLCBhbGxTdGFja3MuZ2V0KGRlcGVuZGVuY3lJZCkhKTtcbiAgICAgICAgICBtYWRlUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICBpbmZvKCdJbmNsdWRpbmcgZGVwZW5kZW5jeSBzdGFja3M6ICVzJywgY2hhbGsuYm9sZChhZGRlZC5qb2luKCcsICcpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpemVQYXR0ZXJucyhwYXR0ZXJuczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGxldCBzYW5pdGl6ZWQgPSBwYXR0ZXJucy5maWx0ZXIocyA9PiBzICE9IG51bGwpOyAvLyBmaWx0ZXIgbnVsbC91bmRlZmluZWRcbiAgc2FuaXRpemVkID0gWy4uLm5ldyBTZXQoc2FuaXRpemVkKV07IC8vIG1ha2UgdGhlbSB1bmlxdWVcbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cbiJdfQ==