@aws-cdk/toolkit-lib 1.19.1 → 1.19.2

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 (79) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/bootstrap/private/helpers.js +2 -2
  4. package/lib/actions/diff/private/helpers.js +6 -6
  5. package/lib/actions/refactor/private/mapping-helpers.js +3 -3
  6. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  7. package/lib/api/aws-auth/base-credentials.js +2 -2
  8. package/lib/api/aws-auth/credential-plugins.js +3 -3
  9. package/lib/api/aws-auth/sdk-provider.js +6 -6
  10. package/lib/api/aws-auth/sdk.js +3 -3
  11. package/lib/api/bootstrap/bootstrap-environment.js +12 -12
  12. package/lib/api/cloud-assembly/context-store.js +2 -2
  13. package/lib/api/cloud-assembly/private/context-aware-source.js +2 -2
  14. package/lib/api/cloud-assembly/private/exec.d.ts +3 -0
  15. package/lib/api/cloud-assembly/private/exec.js +38 -5
  16. package/lib/api/cloud-assembly/private/helpers.js +2 -2
  17. package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
  18. package/lib/api/cloud-assembly/private/stack-assembly.js +6 -6
  19. package/lib/api/cloud-assembly/source-builder.js +2 -2
  20. package/lib/api/cloud-assembly/stack-collection.js +8 -4
  21. package/lib/api/cloudformation/evaluate-cloudformation-template.js +2 -2
  22. package/lib/api/cloudformation/stack-helpers.js +2 -2
  23. package/lib/api/cloudformation/template-body-parameter.js +3 -3
  24. package/lib/api/context.js +2 -2
  25. package/lib/api/deployments/asset-publishing.js +3 -3
  26. package/lib/api/deployments/assets.js +5 -5
  27. package/lib/api/deployments/cfn-api.js +9 -9
  28. package/lib/api/deployments/checks.js +5 -5
  29. package/lib/api/deployments/deploy-stack.js +7 -7
  30. package/lib/api/deployments/deployment-result.js +2 -2
  31. package/lib/api/deployments/deployments.js +12 -12
  32. package/lib/api/drift/drift.js +3 -3
  33. package/lib/api/environment/environment-access.js +5 -5
  34. package/lib/api/environment/environment-resources.js +8 -8
  35. package/lib/api/garbage-collection/garbage-collector.js +7 -7
  36. package/lib/api/garbage-collection/progress-printer.js +2 -2
  37. package/lib/api/garbage-collection/stack-refresh.js +3 -3
  38. package/lib/api/hotswap/appsync-mapping-templates.js +2 -2
  39. package/lib/api/hotswap/bedrock-agentcore-runtimes.js +6 -6
  40. package/lib/api/hotswap/common.js +4 -4
  41. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  42. package/lib/api/hotswap/lambda-functions.js +2 -2
  43. package/lib/api/notices/cached-data-source.js +2 -2
  44. package/lib/api/notices/web-data-source.js +9 -9
  45. package/lib/api/plugin/plugin.js +5 -5
  46. package/lib/api/refactoring/context.js +4 -4
  47. package/lib/api/refactoring/graph.js +3 -3
  48. package/lib/api/refactoring/index.js +5 -5
  49. package/lib/api/refactoring/stack-definitions.js +2 -2
  50. package/lib/api/resource-import/importer.js +2 -2
  51. package/lib/api/rwlock.js +3 -3
  52. package/lib/api/settings.js +3 -3
  53. package/lib/api/stack-events/stack-activity-monitor.d.ts +41 -4
  54. package/lib/api/stack-events/stack-activity-monitor.js +99 -9
  55. package/lib/api/stack-events/stack-event-poller.d.ts +5 -2
  56. package/lib/api/stack-events/stack-event-poller.js +7 -5
  57. package/lib/api/toolkit-info.js +9 -9
  58. package/lib/api/work-graph/work-graph-builder.js +3 -3
  59. package/lib/api/work-graph/work-graph.js +4 -4
  60. package/lib/context-providers/ami.js +2 -2
  61. package/lib/context-providers/cc-api-provider.js +9 -9
  62. package/lib/context-providers/hosted-zones.js +4 -4
  63. package/lib/context-providers/index.js +3 -3
  64. package/lib/context-providers/keys.js +3 -3
  65. package/lib/context-providers/load-balancers.js +10 -10
  66. package/lib/context-providers/security-groups.js +5 -5
  67. package/lib/context-providers/ssm-parameters.js +3 -3
  68. package/lib/context-providers/vpcs.js +7 -7
  69. package/lib/private/activity-printer/base.js +5 -5
  70. package/lib/private/activity-printer/current.js +2 -2
  71. package/lib/toolkit/toolkit-error.d.ts +31 -5
  72. package/lib/toolkit/toolkit-error.js +54 -14
  73. package/lib/toolkit/toolkit.js +21 -16
  74. package/lib/util/cloudformation.d.ts +18 -1
  75. package/lib/util/cloudformation.js +29 -3
  76. package/lib/util/directories.js +2 -2
  77. package/lib/util/objects.js +3 -3
  78. package/lib/util/version-range.js +5 -5
  79. package/package.json +3 -3
@@ -355,7 +355,7 @@ let SDK = class SDK {
355
355
  return upload.done();
356
356
  }
357
357
  catch (e) {
358
- throw new toolkit_error_1.AuthenticationError(`Upload failed: ${(0, util_1.formatErrorMessage)(e)}`);
358
+ throw new toolkit_error_1.AuthenticationError('S3UploadFailed', `Upload failed: ${(0, util_1.formatErrorMessage)(e)}`);
359
359
  }
360
360
  },
361
361
  };
@@ -402,7 +402,7 @@ let SDK = class SDK {
402
402
  const accountId = result.Account;
403
403
  const partition = result.Arn.split(':')[1];
404
404
  if (!accountId) {
405
- throw new toolkit_error_1.AuthenticationError("STS didn't return an account ID");
405
+ throw new toolkit_error_1.AuthenticationError('NoAccountId', "STS didn't return an account ID");
406
406
  }
407
407
  await this.debug(`Default account ID: ${accountId}`);
408
408
  // Save another STS call later if this one already succeeded
@@ -448,4 +448,4 @@ function makeSdkLoggerSafeByBindingThis(logger) {
448
448
  error: logger.error.bind(logger),
449
449
  };
450
450
  }
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBLDREQVFpQztBQU9qQyxnR0FJbUQ7QUFPbkQsc0VBSXNDO0FBeUV0QywwRUF5Q3dDO0FBUXhDLDRFQUl5QztBQUN6QyxnRUFLbUM7QUFDbkMsb0RBNkI2QjtBQXFCN0Isb0RBVzZCO0FBVTdCLG9EQU02QjtBQVc3QixnR0FPbUQ7QUFDbkQsb0RBVzZCO0FBQzdCLG9EQVE2QjtBQUM3QiwwREFrQmdDO0FBQ2hDLDhEQVdrQztBQXFCbEMsa0RBVTRCO0FBQzVCLDRFQUt5QztBQUt6QyxvREFHNkI7QUFDN0Isb0RBSzZCO0FBQzdCLG9EQUEwRTtBQUMxRSxzREFBOEM7QUFDOUMscUVBQTBFO0FBQzFFLG1EQUE2RDtBQUU3RCxtREFBd0Q7QUFFeEQscUNBQXVDO0FBR3ZDLHVDQUErQztBQUMvQyw2Q0FBbUQ7QUFDbkQsK0RBQWtFO0FBQ2xFLHFDQUFnRDtBQTJOaEQ7O0dBRUc7QUFFSSxJQUFNLEdBQUcsR0FBVCxNQUFNLEdBQUc7SUEyQks7SUExQkgsYUFBYSxDQUFTO0lBRXRCLE1BQU0sQ0FBdUI7SUFFNUIsWUFBWSxDQUFDO0lBRTlCOztPQUVHO0lBQ2MsZ0JBQWdCLEdBQUcsSUFBSSxvQ0FBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHOzs7Ozs7T0FNRztJQUNLLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUV0Qzs7T0FFRztJQUNjLEtBQUssQ0FBaUM7SUFFdkQsWUFDbUIsWUFBK0MsRUFDaEUsTUFBYyxFQUNkLGNBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLE1BQW1CO1FBSkYsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBTWhFLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRSxD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QUM7S0FDakMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlciB9IGZyb20gJ0Bhd3MtY2RrL2NsaS1wbHVnaW4tY29udHJhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBGdW5jdGlvbkNvbmZpZ3VyYXRpb24sXG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZElucHV0LFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsXG4gIExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQsXG4gIFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQsXG4gIFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0LFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB7XG4gIEFwcFN5bmNDbGllbnQsXG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZCxcbiAgcGFnaW5hdGVMaXN0RnVuY3Rpb25zLFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kLFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB0eXBlIHtcbiAgR2V0QWdlbnRSdW50aW1lQ29tbWFuZElucHV0LFxuICBHZXRBZ2VudFJ1bnRpbWVDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZUFnZW50UnVudGltZUNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sJztcbmltcG9ydCB7XG4gIEJlZHJvY2tBZ2VudENvcmVDb250cm9sQ2xpZW50LFxuICBHZXRBZ2VudFJ1bnRpbWVDb21tYW5kLFxuICBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdldFJlc291cmNlQ29tbWFuZElucHV0LFxuICBHZXRSZXNvdXJjZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB7XG4gIENsb3VkQ29udHJvbENsaWVudCxcbiAgR2V0UmVzb3VyY2VDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VzQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkY29udHJvbCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RTdGFja3NDb21tYW5kSW5wdXQsXG4gIExpc3RTdGFja3NDb21tYW5kT3V0cHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dCxcbiAgU3RhY2tSZXNvdXJjZVN1bW1hcnksXG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBEZWxldGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQsXG4gIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIEdldFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQsXG4gIExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0LFxuICBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQsXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kT3V0cHV0LFxuICBTdGFja1N1bW1hcnksXG4gIERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRJbnB1dCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRPdXRwdXQsXG4gIERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRJbnB1dCxcbiAgRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZElucHV0LFxuICBFeGVjdXRlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0LFxuICBDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUV2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlRXZlbnRzQ29tbWFuZElucHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHtcbiAgcGFnaW5hdGVEZXNjcmliZUV2ZW50cyxcblxuICBwYWdpbmF0ZUxpc3RTdGFja3MsXG4gIENsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBDcmVhdGVTdGFja0NvbW1hbmQsXG4gIENyZWF0ZVN0YWNrUmVmYWN0b3JDb21tYW5kLFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kLFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVFdmVudHNDb21tYW5kLFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQsXG4gIERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgRXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kLFxuICBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIEdldFRlbXBsYXRlQ29tbWFuZCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmQsXG4gIExpc3RTdGFja3NDb21tYW5kLFxuICBwYWdpbmF0ZUxpc3RTdGFja1Jlc291cmNlcyxcbiAgUm9sbGJhY2tTdGFja0NvbW1hbmQsXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kLFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kLFxuICBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kLFxuICBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZCxcbiAgRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZCxcbiAgd2FpdFVudGlsU3RhY2tSZWZhY3RvckNyZWF0ZUNvbXBsZXRlLFxuICB3YWl0VW50aWxTdGFja1JlZmFjdG9yRXhlY3V0ZUNvbXBsZXRlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25FdmVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbi9kaXN0LXR5cGVzL21vZGVscy9tb2RlbHNfMCc7XG5pbXBvcnQgdHlwZSB7XG4gIEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQge1xuICBDbG91ZFdhdGNoTG9nc0NsaWVudCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kLFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZENsaWVudCxcbiAgVXBkYXRlUHJvamVjdENvbW1hbmQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVQcm9qZWN0Q29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN1Ym5ldHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3VibmV0c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kT3V0cHV0LFxuICBFQzJDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHR5cGUge1xuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZElucHV0LFxuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZE91dHB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQsXG4gIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dCxcbiAgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQge1xuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZCxcbiAgRUNSQ2xpZW50LFxuICBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kLFxuICBMaXN0SW1hZ2VzQ29tbWFuZCxcbiAgUHV0SW1hZ2VDb21tYW5kLFxuICBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcbmltcG9ydCB0eXBlIHtcbiAgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0LFxuICBMaXN0Q2x1c3RlcnNDb21tYW5kT3V0cHV0LFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3MnO1xuaW1wb3J0IHtcbiAgRUNTQ2xpZW50LFxuICBMaXN0Q2x1c3RlcnNDb21tYW5kLFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmQsXG4gIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB0eXBlIHtcbiAgTGlzdGVuZXIsXG4gIExvYWRCYWxhbmNlcixcbiAgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lbGFzdGljLWxvYWQtYmFsYW5jaW5nLXYyJztcbmltcG9ydCB7XG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZCxcbiAgRGVzY3JpYmVUYWdzQ29tbWFuZCxcbiAgRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCxcbiAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyxcbiAgcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lbGFzdGljLWxvYWQtYmFsYW5jaW5nLXYyJztcbmltcG9ydCB7XG4gIENyZWF0ZVBvbGljeUNvbW1hbmQsXG4gIHR5cGUgQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVBvbGljeUNvbW1hbmRPdXRwdXQsXG4gIEdldFBvbGljeUNvbW1hbmQsXG4gIHR5cGUgR2V0UG9saWN5Q29tbWFuZElucHV0LFxuICB0eXBlIEdldFBvbGljeUNvbW1hbmRPdXRwdXQsXG4gIEdldFJvbGVDb21tYW5kLFxuICB0eXBlIEdldFJvbGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0Um9sZUNvbW1hbmRPdXRwdXQsXG4gIElBTUNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQge1xuICBEZXNjcmliZUtleUNvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0LFxuICBLTVNDbGllbnQsXG4gIExpc3RBbGlhc2VzQ29tbWFuZCxcbiAgdHlwZSBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0QWxpYXNlc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnO1xuaW1wb3J0IHtcbiAgSW52b2tlQ29tbWFuZCxcbiAgdHlwZSBJbnZva2VDb21tYW5kSW5wdXQsXG4gIHR5cGUgSW52b2tlQ29tbWFuZE91dHB1dCxcbiAgTGFtYmRhQ2xpZW50LFxuICBQdWJsaXNoVmVyc2lvbkNvbW1hbmQsXG4gIHR5cGUgUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgUHVibGlzaFZlcnNpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVBbGlhc0NvbW1hbmQsXG4gIHR5cGUgVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlQWxpYXNDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0LFxuICB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWRWMixcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBHZXRIb3N0ZWRab25lQ29tbWFuZCxcbiAgdHlwZSBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0LFxuICB0eXBlIEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0LFxuICBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kLFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0LFxuICBMaXN0SG9zdGVkWm9uZXNDb21tYW5kLFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0LFxuICBSb3V0ZTUzQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcm91dGUtNTMnO1xuaW1wb3J0IHR5cGUge1xuICBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LFxuICBEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0LFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0LFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZElucHV0LFxuICBHZXRPYmplY3RDb21tYW5kT3V0cHV0LFxuICBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0LFxuICBMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dCxcbiAgUHV0T2JqZWN0Q29tbWFuZElucHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZCxcbiAgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBTM0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7XG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQsXG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0LFxuICBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2ZuJztcbmltcG9ydCB7XG4gIFNGTkNsaWVudCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQge1xuICBHZXRQYXJhbWV0ZXJDb21tYW5kLFxuICB0eXBlIEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0LFxuICBTU01DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLCBTVFNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7IFVwbG9hZCB9IGZyb20gJ0Bhd3Mtc2RrL2xpYi1zdG9yYWdlJztcbmltcG9ydCB7IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCc7XG5pbXBvcnQgeyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSB9IGZyb20gJ0BzbWl0aHkvdXRpbC1yZXRyeSc7XG5pbXBvcnQgdHlwZSB7IFdhaXRlclJlc3VsdCB9IGZyb20gJ0BzbWl0aHkvdXRpbC13YWl0ZXInO1xuaW1wb3J0IHsgQWNjb3VudEFjY2Vzc0tleUNhY2hlIH0gZnJvbSAnLi9hY2NvdW50LWNhY2hlJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEhhbmRsZXJTZXR0aW5ncyB9IGZyb20gJy4vYmFzZS1jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBjYWNoZWRBc3luYyB9IGZyb20gJy4vY2FjaGVkJztcbmltcG9ydCB0eXBlIHsgSVNka0xvZ2dlciB9IGZyb20gJy4vc2RrLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tICcuL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyB0cmFjZU1lbWJlck1ldGhvZHMgfSBmcm9tICcuL3RyYWNpbmcnO1xuaW1wb3J0IHsgZGVmYXVsdENsaVVzZXJBZ2VudCB9IGZyb20gJy4vdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzQ2xpZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiBBUElzIGFyZSB1c2VkIHRoYXQgcmVxdWlyZSBNRDUgY2hlY2tzdW1zLlxuICAgKlxuICAgKiBTb21lIFMzIEFQSXMgaW4gU0RLdjIgaGF2ZSBhIGJ1ZyB0aGF0IGFsd2F5cyByZXF1aXJlcyB0aGVtIHRvIHVzZSBhIE1ENSBjaGVja3N1bS5cbiAgICogVGhlc2UgQVBJcyBhcmUgbm90IGdvaW5nIHRvIGJlIHN1cHBvcnRlZCBpbiBhIEZJUFMgZW52aXJvbm1lbnQuXG4gICAqL1xuICBuZWVkc01kNUNoZWNrc3Vtcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBTREsgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGRlc2NyaXB0aXZlIHN0cmluZ3MgdGhhdCBpbmRpY2F0ZSB3aGVyZSB0aGUgXCJBc3N1bWVSb2xlXCIgY3JlZGVudGlhbHMgYXJlIGNvbWluZyBmcm9tXG4gICAqXG4gICAqIFdpbGwgYmUgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlIHRvIGhlbHAgdXNlcnMgZGlhZ25vc2UgYXV0aCBwcm9ibGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vLyBUT0RPOiBzdGlsbCBzb21lIGNsZWFudXAgaGVyZS4gTWFrZSB0aGUgcGFnaW5hdGlvbiBmdW5jdGlvbnMgZG8gYWxsIHRoZSB3b3JrIGhlcmUgaW5zdGVhZCBvZiBpbiBpbmRpdmlkdWFsIHBhY2thZ2VzLlxuLy8gQWxzbyBhZGQgYXN5bmMvYXdhaXQuIERvZXMgdGhhdCBhY3R1YWxseSBtYXR0ZXIgaW4gdGhpcyBjb250ZXh0PyBGaW5kIG91dCBhbmQgdXBkYXRlIGFjY29yZGluZ2x5LlxuXG4vLyBBbHNvIGFkZCBub3RlcyB0byB0aGUgUFIgYWJvdXQgd2h5IHlvdSBpbXBvcnRlZCBldmVyeXRoaW5nIGluZGl2aWR1YWxseSBhbmQgdXNlZCAndHlwZScgc28gcmV2aWV3ZXJzIGRvbid0IGhhdmUgdG8gYXNrLlxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25PcHRpb25zIHtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxzOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXI7XG4gIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzO1xuICByZXRyeVN0cmF0ZWd5OiBDb25maWd1cmVkUmV0cnlTdHJhdGVneTtcbiAgY3VzdG9tVXNlckFnZW50OiBzdHJpbmc7XG4gIGxvZ2dlcj86IElTZGtMb2dnZXI7XG4gIHMzRGlzYWJsZUJvZHlTaWduaW5nPzogYm9vbGVhbjtcbiAgY29tcHV0ZUNoZWNrc3Vtcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcFN5bmNDbGllbnQge1xuICBnZXRTY2hlbWFDcmVhdGlvblN0YXR1cyhpbnB1dDogR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD47XG4gIHN0YXJ0U2NoZW1hQ3JlYXRpb24oaW5wdXQ6IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlQXBpS2V5KGlucHV0OiBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbihpbnB1dDogVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVJlc29sdmVyKGlucHV0OiBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvbiBmdW5jdGlvbnNcbiAgbGlzdEZ1bmN0aW9ucyhpbnB1dDogTGlzdEZ1bmN0aW9uc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RnVuY3Rpb25Db25maWd1cmF0aW9uW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCZWRyb2NrQWdlbnRDb3JlQ29udHJvbENsaWVudCB7XG4gIGdldEFnZW50UnVudGltZShpbnB1dDogR2V0QWdlbnRSdW50aW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRBZ2VudFJ1bnRpbWVDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlQWdlbnRSdW50aW1lKGlucHV0OiBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFnZW50UnVudGltZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDbG91ZENvbnRyb2xDbGllbnQge1xuICBsaXN0UmVzb3VyY2VzKGlucHV0OiBMaXN0UmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGdldFJlc291cmNlKGlucHV0OiBHZXRSZXNvdXJjZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UmVzb3VyY2VDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRGb3JtYXRpb25DbGllbnQge1xuICBjb250aW51ZVVwZGF0ZVJvbGxiYWNrKGlucHV0OiBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUNoYW5nZVNldChpbnB1dDogQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlR2VuZXJhdGVkVGVtcGxhdGUoaW5wdXQ6IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVTdGFjayhpbnB1dDogQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUNoYW5nZVNldChpbnB1dDogRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlR2VuZXJhdGVkVGVtcGxhdGUoaW5wdXQ6IERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVTdGFjayhpbnB1dDogRGVsZXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlRXZlbnRzKGlucHV0OiBEZXNjcmliZUV2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVFdmVudHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVDaGFuZ2VTZXQoaW5wdXQ6IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlKFxuICAgIGlucHV0OiBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSZXNvdXJjZVNjYW4oaW5wdXQ6IERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXMoaW5wdXQ6IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tzKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzKGlucHV0OiBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVN0YWNrUmVzb3VyY2VzKGlucHV0OiBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGRldGVjdFN0YWNrRHJpZnQoaW5wdXQ6IERldGVjdFN0YWNrRHJpZnRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERldGVjdFN0YWNrRHJpZnRDb21tYW5kT3V0cHV0PjtcbiAgZGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0KGlucHV0OiBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRPdXRwdXQ+O1xuICBleGVjdXRlQ2hhbmdlU2V0KGlucHV0OiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGdldEdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZ2V0VGVtcGxhdGUoaW5wdXQ6IEdldFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRUZW1wbGF0ZVN1bW1hcnkoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD47XG4gIGxpc3RFeHBvcnRzKGlucHV0OiBMaXN0RXhwb3J0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXMoXG4gICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FucyhpbnB1dD86IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0U3RhY2tzKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0U3RhY2tzQ29tbWFuZE91dHB1dD47XG4gIHJvbGxiYWNrU3RhY2soaW5wdXQ6IFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0PjtcbiAgc3RhcnRSZXNvdXJjZVNjYW4oaW5wdXQ6IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVTdGFjayhpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbihcbiAgICBpbnB1dDogVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uIGZ1bmN0aW9uc1xuICBkZXNjcmliZVN0YWNrRXZlbnRzKGlucHV0OiBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RTdGFja1Jlc291cmNlcyhpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPjtcbiAgcGFnaW5hdGVkTGlzdFN0YWNrcyhpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhY2tTdW1tYXJ5W10+O1xuICBwYWdpbmF0ZWREZXNjcmliZUV2ZW50cyhpbnB1dDogRGVzY3JpYmVFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPE9wZXJhdGlvbkV2ZW50W10+O1xuICBjcmVhdGVTdGFja1JlZmFjdG9yKGlucHV0OiBDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dD47XG4gIGV4ZWN1dGVTdGFja1JlZmFjdG9yKGlucHV0OiBFeGVjdXRlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kT3V0cHV0PjtcbiAgd2FpdFVudGlsU3RhY2tSZWZhY3RvckNyZWF0ZUNvbXBsZXRlKGlucHV0OiBEZXNjcmliZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG4gIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JFeGVjdXRlQ29tcGxldGUoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCk6IFByb21pc2U8V2FpdGVyUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRXYXRjaExvZ3NDbGllbnQge1xuICBkZXNjcmliZUxvZ0dyb3VwcyhpbnB1dDogRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGZpbHRlckxvZ0V2ZW50cyhpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29kZUJ1aWxkQ2xpZW50IHtcbiAgdXBkYXRlUHJvamVjdChpbnB1dDogVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBJRUMyQ2xpZW50IHtcbiAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lcyhcbiAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVJbnN0YW5jZXMoaW5wdXQ6IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJvdXRlVGFibGVzKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU2VjdXJpdHlHcm91cHMoaW5wdXQ6IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdWJuZXRzKGlucHV0OiBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNzKGlucHV0OiBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwbkdhdGV3YXlzKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDUkNsaWVudCB7XG4gIGJhdGNoRGVsZXRlSW1hZ2UoaW5wdXQ6IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgYmF0Y2hHZXRJbWFnZShpbnB1dDogQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hHZXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVSZXBvc2l0b3J5KGlucHV0OiBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSZXBvc2l0b3JpZXMoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRBdXRob3JpemF0aW9uVG9rZW4oaW5wdXQ6IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dD47XG4gIGxpc3RJbWFnZXMoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2UoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBwdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRUNTQ2xpZW50IHtcbiAgbGlzdENsdXN0ZXJzKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+O1xuICByZWdpc3RlclRhc2tEZWZpbml0aW9uKGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVNlcnZpY2UoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZShpbnB1dDogRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCwgdGltZW91dFNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQge1xuICBkZXNjcmliZUxpc3RlbmVycyhpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlTG9hZEJhbGFuY2VycyhpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVUYWdzKGlucHV0OiBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uXG4gIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0ZW5lcltdPjtcbiAgcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJQU1DbGllbnQge1xuICBjcmVhdGVQb2xpY3koaW5wdXQ6IENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUG9saWN5Q29tbWFuZE91dHB1dD47XG4gIGdldFBvbGljeShpbnB1dDogR2V0UG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQb2xpY3lDb21tYW5kT3V0cHV0PjtcbiAgZ2V0Um9sZShpbnB1dDogR2V0Um9sZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0Um9sZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElLTVNDbGllbnQge1xuICBkZXNjcmliZUtleShpbnB1dDogRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dD47XG4gIGxpc3RBbGlhc2VzKGlucHV0OiBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGFtYmRhQ2xpZW50IHtcbiAgaW52b2tlQ29tbWFuZChpbnB1dDogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZva2VDb21tYW5kT3V0cHV0PjtcbiAgcHVibGlzaFZlcnNpb24oaW5wdXQ6IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdWJsaXNoVmVyc2lvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVBbGlhcyhpbnB1dDogVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uQ29kZShpbnB1dDogVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uKFxuICAgIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD47XG4gIC8vIFdhaXRlcnNcbiAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkKGRlbGF5U2Vjb25kczogbnVtYmVyLCBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZTUzQ2xpZW50IHtcbiAgZ2V0SG9zdGVkWm9uZShpbnB1dDogR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SG9zdGVkWm9uZUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SG9zdGVkWm9uZXMoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RIb3N0ZWRab25lc0J5TmFtZShpbnB1dDogTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUzNDbGllbnQge1xuICBkZWxldGVPYmplY3RzKGlucHV0OiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZU9iamVjdFRhZ2dpbmcoaW5wdXQ6IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgZ2V0QnVja2V0RW5jcnlwdGlvbihpbnB1dDogR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICBnZXRCdWNrZXRMb2NhdGlvbihpbnB1dDogR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dD47XG4gIGdldE9iamVjdChpbnB1dDogR2V0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RDb21tYW5kT3V0cHV0PjtcbiAgZ2V0T2JqZWN0VGFnZ2luZyhpbnB1dDogR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0T2JqZWN0c1YyKGlucHV0OiBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dD47XG4gIHB1dE9iamVjdFRhZ2dpbmcoaW5wdXQ6IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgdXBsb2FkKGlucHV0OiBQdXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlY3JldHNNYW5hZ2VyQ2xpZW50IHtcbiAgZ2V0U2VjcmV0VmFsdWUoaW5wdXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTU01DbGllbnQge1xuICBnZXRQYXJhbWV0ZXIoaW5wdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0ZXBGdW5jdGlvbnNDbGllbnQge1xuICB1cGRhdGVTdGF0ZU1hY2hpbmUoaW5wdXQ6IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dD47XG59XG5cbi8qKlxuICogQmFzZSBmdW5jdGlvbmFsaXR5IG9mIFNESyB3aXRob3V0IGNyZWRlbnRpYWwgZmV0Y2hpbmdcbiAqL1xuQHRyYWNlTWVtYmVyTWV0aG9kc1xuZXhwb3J0IGNsYXNzIFNESyB7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY2NvdW50Q2FjaGU7XG5cbiAgLyoqXG4gICAqIFNUUyBpcyB1c2VkIHRvIGNoZWNrIGNyZWRlbnRpYWwgdmFsaWRpdHksIGRvbid0IGRvIHRvbyBtYW55IHJldHJpZXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0c1JldHJ5U3RyYXRlZ3kgPSBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMywgKGF0dGVtcHQpID0+IDEwMCAqICgyICoqIGF0dGVtcHQpKTtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBoYXZlIHByb29mIHRoYXQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgbm90IGV4cGlyZWRcbiAgICpcbiAgICogV2UgbmVlZCB0byBkbyBzb21lIG1hbnVhbCBwbHVtYmluZyBhcm91bmQgdGhpcyBiZWNhdXNlIHRoZSBKUyBTREt2MiB0cmVhdHMgYEV4cGlyZWRUb2tlbmBcbiAgICogYXMgcmV0cmlhYmxlIGFuZCB3ZSBoYXZlIGhlZnR5IHJldHJpZXMgb24gQ0ZOIGNhbGxzIG1ha2luZyB0aGUgQ0xJIGhhbmcgZm9yIGEgZ29vZCAxNSBtaW51dGVzXG4gICAqIGlmIHRoZSBjcmVkZW50aWFscyBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBwcml2YXRlIF9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZWJ1ZyBtZXNzYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1ZzogKG1zZzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlZFByb3ZpZGVyOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcmVxdWVzdEhhbmRsZXI6IFJlcXVlc3RIYW5kbGVyU2V0dGluZ3MsXG4gICAgaW9IZWxwZXI6IElvSGVscGVyLFxuICAgIGxvZ2dlcj86IElTZGtMb2dnZXIsXG4gICkge1xuICAgIGNvbnN0IGRlYnVnRm4gPSBhc3luYyAobXNnOiBzdHJpbmcpID0+IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKG1zZyk7XG4gICAgdGhpcy5hY2NvdW50Q2FjaGUgPSBuZXcgQWNjb3VudEFjY2Vzc0tleUNhY2hlKEFjY291bnRBY2Nlc3NLZXlDYWNoZS5ERUZBVUxUX1BBVEgsIGRlYnVnRm4pO1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1Z0ZuO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgcmVnaW9uLFxuICAgICAgY3JlZGVudGlhbHM6IGNyZWRQcm92aWRlcixcbiAgICAgIHJlcXVlc3RIYW5kbGVyLFxuICAgICAgcmV0cnlTdHJhdGVneTogbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDcsIChhdHRlbXB0KSA9PiAzMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgICBjdXN0b21Vc2VyQWdlbnQ6IGRlZmF1bHRDbGlVc2VyQWdlbnQoKSxcbiAgICAgIGxvZ2dlcjogbG9nZ2VyID8gbWFrZVNka0xvZ2dlclNhZmVCeUJpbmRpbmdUaGlzKGxvZ2dlcikgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJBZ2VudERhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50O1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPyBgJHtjdXJyZW50Q3VzdG9tVXNlckFnZW50fSAke3VzZXJBZ2VudERhdGF9YCA6IHVzZXJBZ2VudERhdGE7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudD8ucmVwbGFjZSh1c2VyQWdlbnREYXRhLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgYXBwc3luYygpOiBJQXBwU3luY0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFwcFN5bmNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRTY2hlbWFDcmVhdGlvblN0YXR1czogKFxuICAgICAgICBpbnB1dDogR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRTY2hlbWFDcmVhdGlvbjogKGlucHV0OiBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVBcGlLZXk6IChpbnB1dDogVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlQXBpS2V5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb246IChpbnB1dDogVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlUmVzb2x2ZXI6IChpbnB1dDogVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVJlc29sdmVyQ29tbWFuZChpbnB1dCkpLFxuXG4gICAgICAvLyBQYWdpbmF0aW9uIEZ1bmN0aW9uc1xuICAgICAgbGlzdEZ1bmN0aW9uczogYXN5bmMgKGlucHV0OiBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0KTogUHJvbWlzZTxGdW5jdGlvbkNvbmZpZ3VyYXRpb25bXT4gPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSBBcnJheTxGdW5jdGlvbkNvbmZpZ3VyYXRpb24+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaCguLi4ocGFnZS5mdW5jdGlvbnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb25zO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGJlZHJvY2tBZ2VudENvcmVDb250cm9sKCk6IElCZWRyb2NrQWdlbnRDb3JlQ29udHJvbENsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEJlZHJvY2tBZ2VudENvcmVDb250cm9sQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0QWdlbnRSdW50aW1lOiAoaW5wdXQ6IEdldEFnZW50UnVudGltZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QWdlbnRSdW50aW1lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEFnZW50UnVudGltZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUFnZW50UnVudGltZTogKGlucHV0OiBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFnZW50UnVudGltZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZENvbnRyb2woKTogSUNsb3VkQ29udHJvbENsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsb3VkQ29udHJvbENsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RSZXNvdXJjZXM6IChpbnB1dDogTGlzdFJlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0UmVzb3VyY2U6IChpbnB1dDogR2V0UmVzb3VyY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJlc291cmNlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFJlc291cmNlQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRGb3JtYXRpb24oKTogSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICByZXRyeVN0cmF0ZWd5OiBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMTEsIChhdHRlbXB0OiBudW1iZXIpID0+IDEwMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRpbnVlVXBkYXRlUm9sbGJhY2s6IGFzeW5jIChcbiAgICAgICAgaW5wdXQ6IENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZUNoYW5nZVNldDogKGlucHV0OiBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZTogKFxuICAgICAgICBpbnB1dDogQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlU3RhY2s6IChpbnB1dDogQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVTdGFjazogKGlucHV0OiBEZWxldGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXRlY3RTdGFja0RyaWZ0OiAoaW5wdXQ6IERldGVjdFN0YWNrRHJpZnRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERldGVjdFN0YWNrRHJpZnRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdDogKGlucHV0OiBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUV2ZW50czogKGlucHV0OiBEZXNjcmliZUV2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVFdmVudHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVFdmVudHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUNoYW5nZVNldDogKGlucHV0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVJlc291cmNlU2NhbjogKGlucHV0OiBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXM6IChpbnB1dDogRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZElucHV0KTpcbiAgICAgIFByb21pc2U8RGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0czogKGlucHV0OiBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrczogKGlucHV0OiBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrUmVzb3VyY2VzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGV4ZWN1dGVDaGFuZ2VTZXQ6IChpbnB1dDogRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0R2VuZXJhdGVkVGVtcGxhdGU6IChpbnB1dDogR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGU6IChpbnB1dDogR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0VGVtcGxhdGVTdW1tYXJ5OiAoaW5wdXQ6IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RFeHBvcnRzOiAoaW5wdXQ6IExpc3RFeHBvcnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0RXhwb3J0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzOiAoXG4gICAgICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuczogKGlucHV0OiBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0U3RhY2tzOiAoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RTdGFja3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFN0YWNrc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHJvbGxiYWNrU3RhY2s6IChpbnB1dDogUm9sbGJhY2tTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Um9sbGJhY2tTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBSb2xsYmFja1N0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRSZXNvdXJjZVNjYW46IChpbnB1dDogU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlU3RhY2s6IChpbnB1dDogVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uOiAoXG4gICAgICAgIGlucHV0OiBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrRXZlbnRzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kT3V0cHV0PiA9PiB7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmQoaW5wdXQpKTtcbiAgICAgIH0sXG4gICAgICBsaXN0U3RhY2tSZXNvdXJjZXM6IGFzeW5jIChpbnB1dDogTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8U3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdFN0YWNrUmVzb3VyY2VzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIHN0YWNrUmVzb3VyY2VzLnB1c2goLi4uKHBhZ2U/LlN0YWNrUmVzb3VyY2VTdW1tYXJpZXMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgICAgcGFnaW5hdGVkTGlzdFN0YWNrczogYXN5bmMgKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1N1bW1hcnlbXT4gPT4ge1xuICAgICAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IEFycmF5PFN0YWNrU3VtbWFyeT4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVMaXN0U3RhY2tzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIHN0YWNrUmVzb3VyY2VzLnB1c2goLi4uKHBhZ2U/LlN0YWNrU3VtbWFyaWVzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRlZERlc2NyaWJlRXZlbnRzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxPcGVyYXRpb25FdmVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8T3BlcmF0aW9uRXZlbnQ+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlRGVzY3JpYmVFdmVudHMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgc3RhY2tSZXNvdXJjZXMucHVzaCguLi4ocGFnZS5PcGVyYXRpb25FdmVudHMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgICAgY3JlYXRlU3RhY2tSZWZhY3RvcjogKGlucHV0OiBDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlbmQobmV3IENyZWF0ZVN0YWNrUmVmYWN0b3JDb21tYW5kKGlucHV0KSk7XG4gICAgICB9LFxuICAgICAgZXhlY3V0ZVN0YWNrUmVmYWN0b3I6IChpbnB1dDogRXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlbmQobmV3IEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZChpbnB1dCkpO1xuICAgICAgfSxcbiAgICAgIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JDcmVhdGVDb21wbGV0ZTogKGlucHV0OiBEZXNjcmliZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsU3RhY2tSZWZhY3RvckNyZWF0ZUNvbXBsZXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heFdhaXRUaW1lOiA2MDAsXG4gICAgICAgICAgICBtaW5EZWxheTogNixcbiAgICAgICAgICAgIG1heERlbGF5OiA2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgd2FpdFVudGlsU3RhY2tSZWZhY3RvckV4ZWN1dGVDb21wbGV0ZTogKGlucHV0OiBEZXNjcmliZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsU3RhY2tSZWZhY3RvckV4ZWN1dGVDb21wbGV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBtYXhXYWl0VGltZTogNjAwLFxuICAgICAgICAgICAgbWluRGVsYXk6IDYsXG4gICAgICAgICAgICBtYXhEZWxheTogNixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNsb3VkV2F0Y2hMb2dzKCk6IElDbG91ZFdhdGNoTG9nc0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsb3VkV2F0Y2hMb2dzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVMb2dHcm91cHM6IChpbnB1dDogRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZmlsdGVyTG9nRXZlbnRzOiAoaW5wdXQ6IEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RmlsdGVyTG9nRXZlbnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEZpbHRlckxvZ0V2ZW50c0NvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNvZGVCdWlsZCgpOiBJQ29kZUJ1aWxkQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ29kZUJ1aWxkQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlUHJvamVjdDogKGlucHV0OiBVcGRhdGVQcm9qZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVQcm9qZWN0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVByb2plY3RDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlYzIoKTogSUVDMkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDMkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXM6IChcbiAgICAgICAgaW5wdXQ6IERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW1hZ2VzOiAoaW5wdXQ6IERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW5zdGFuY2VzOiAoaW5wdXQ6IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUm91dGVUYWJsZXM6IChpbnB1dDogRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTZWN1cml0eUdyb3VwczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdWJuZXRzOiAoaW5wdXQ6IERlc2NyaWJlU3VibmV0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdWJuZXRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3VibmV0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcGNzOiAoaW5wdXQ6IERlc2NyaWJlVnBjc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVWcGNzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBjc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlVnBuR2F0ZXdheXM6IChpbnB1dDogRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZWNyKCk6IElFQ1JDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFQ1JDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXRjaERlbGV0ZUltYWdlOiAoaW5wdXQ6IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGJhdGNoR2V0SW1hZ2U6IChpbnB1dDogQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hHZXRJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBCYXRjaEdldEltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlUmVwb3NpdG9yeTogKGlucHV0OiBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUltYWdlczogKGlucHV0OiBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVJlcG9zaXRvcmllczogKGlucHV0OiBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRBdXRob3JpemF0aW9uVG9rZW46IChpbnB1dDogR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEltYWdlczogKGlucHV0OiBMaXN0SW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RJbWFnZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBwdXRJbWFnZTogKGlucHV0OiBQdXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0SW1hZ2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0SW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBwdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbjogKFxuICAgICAgICBpbnB1dDogUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZWNzKCk6IElFQ1NDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFQ1NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0Q2x1c3RlcnM6IChpbnB1dDogTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0Q2x1c3RlcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdENsdXN0ZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcmVnaXN0ZXJUYXNrRGVmaW5pdGlvbjogKFxuICAgICAgICBpbnB1dDogUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlU2VydmljZTogKGlucHV0OiBVcGRhdGVTZXJ2aWNlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTZXJ2aWNlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVNlcnZpY2VDb21tYW5kKGlucHV0KSksXG4gICAgICAvLyBXYWl0ZXJzXG4gICAgICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZTogKGlucHV0OiBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZElucHV0LCB0aW1lb3V0U2Vjb25kcz86IG51bWJlcik6IFByb21pc2U8V2FpdGVyUmVzdWx0PiA9PiB7XG4gICAgICAgIHJldHVybiB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBtYXhXYWl0VGltZTogdGltZW91dFNlY29uZHMgPz8gNjAwLFxuICAgICAgICAgICAgbWluRGVsYXk6IDYsXG4gICAgICAgICAgICBtYXhEZWxheTogNixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVsYnYyKCk6IElFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaWJlTGlzdGVuZXJzOiAoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlTG9hZEJhbGFuY2VyczogKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVRhZ3M6IChpbnB1dDogRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVUYWdzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgLy8gUGFnaW5hdGlvbiBGdW5jdGlvbnNcbiAgICAgIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnM6IGFzeW5jIChpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RlbmVyW10+ID0+IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gQXJyYXk8TGlzdGVuZXI+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goLi4uKHBhZ2U/Lkxpc3RlbmVycyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgICB9LFxuICAgICAgcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnM6IGFzeW5jIChpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMb2FkQmFsYW5jZXJbXT4gPT4ge1xuICAgICAgICBjb25zdCBsb2FkQmFsYW5jZXJzID0gQXJyYXk8TG9hZEJhbGFuY2VyPigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2Vycyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBsb2FkQmFsYW5jZXJzLnB1c2goLi4uKHBhZ2U/LkxvYWRCYWxhbmNlcnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9hZEJhbGFuY2VycztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpYW0oKTogSUlBTUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IElBTUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZVBvbGljeTogKGlucHV0OiBDcmVhdGVQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVBvbGljeUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVQb2xpY3lDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRQb2xpY3k6IChpbnB1dDogR2V0UG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQb2xpY3lDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0UG9saWN5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0Um9sZTogKGlucHV0OiBHZXRSb2xlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRSb2xlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEdldFJvbGVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBrbXMoKTogSUtNU0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEtNU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaWJlS2V5OiAoaW5wdXQ6IERlc2NyaWJlS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUtleUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUtleUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RBbGlhc2VzOiAoaW5wdXQ6IExpc3RBbGlhc2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0QWxpYXNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0QWxpYXNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGxhbWJkYSgpOiBJTGFtYmRhQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgTGFtYmRhQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW52b2tlQ29tbWFuZDogKGlucHV0OiBJbnZva2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEludm9rZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBJbnZva2VDb21tYW5kKGlucHV0KSksXG4gICAgICBwdWJsaXNoVmVyc2lvbjogKGlucHV0OiBQdWJsaXNoVmVyc2lvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHVibGlzaFZlcnNpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHVibGlzaFZlcnNpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVBbGlhczogKGlucHV0OiBVcGRhdGVBbGlhc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQWxpYXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlQWxpYXNDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVGdW5jdGlvbkNvZGU6IChpbnB1dDogVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uOiAoXG4gICAgICAgIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICAvLyBXYWl0ZXJzXG4gICAgICB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWQ6IChcbiAgICAgICAgZGVsYXlTZWNvbmRzOiBudW1iZXIsXG4gICAgICAgIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgbWF4RGVsYXk6IGRlbGF5U2Vjb25kcyxcbiAgICAgICAgICAgIG1pbkRlbGF5OiBkZWxheVNlY29uZHMsXG4gICAgICAgICAgICBtYXhXYWl0VGltZTogZGVsYXlTZWNvbmRzICogNjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByb3V0ZTUzKCk6IElSb3V0ZTUzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUm91dGU1M0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEhvc3RlZFpvbmU6IChpbnB1dDogR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SG9zdGVkWm9uZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRIb3N0ZWRab25lQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEhvc3RlZFpvbmVzOiAoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RIb3N0ZWRab25lc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RIb3N0ZWRab25lc0J5TmFtZTogKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzMygpOiBJUzNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTM0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlbGV0ZU9iamVjdHM6IChpbnB1dDogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVPYmplY3RzQ29tbWFuZCh7XG4gICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgQ2hlY2tzdW1BbGdvcml0aG06ICdTSEEyNTYnLFxuICAgICAgICB9KSksXG4gICAgICBkZWxldGVPYmplY3RUYWdnaW5nOiAoaW5wdXQ6IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEJ1Y2tldEVuY3J5cHRpb246IChpbnB1dDogR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0QnVja2V0TG9jYXRpb246IChpbnB1dDogR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0T2JqZWN0OiAoaW5wdXQ6IEdldE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldE9iamVjdENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldE9iamVjdFRhZ2dpbmc6IChpbnB1dDogR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdE9iamVjdHNWMjogKGlucHV0OiBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RPYmplY3RzVjJDb21tYW5kKGlucHV0KSksXG4gICAgICBwdXRPYmplY3RUYWdnaW5nOiAoaW5wdXQ6IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQoe1xuICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgIENoZWNrc3VtQWxnb3JpdGhtOiAnU0hBMjU2JyxcbiAgICAgICAgfSkpLFxuICAgICAgdXBsb2FkOiAoaW5wdXQ6IFB1dE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0PiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBsb2FkID0gbmV3IFVwbG9hZCh7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBwYXJhbXM6IHsgLi4uaW5wdXQsIENoZWNrc3VtQWxnb3JpdGhtOiAnU0hBMjU2JyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHVwbG9hZC5kb25lKCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKGBVcGxvYWQgZmFpbGVkOiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNlY3JldHNNYW5hZ2VyKCk6IElTZWNyZXRzTWFuYWdlckNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0U2VjcmV0VmFsdWU6IChpbnB1dDogR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3NtKCk6IElTU01DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTU01DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRQYXJhbWV0ZXI6IChpbnB1dDogR2V0UGFyYW1ldGVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0UGFyYW1ldGVyQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RlcEZ1bmN0aW9ucygpOiBJU3RlcEZ1bmN0aW9uc0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNGTkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZTogKGlucHV0OiBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFNESyB2MyByZXF1aXJlcyBhIGNsaWVudCBjb25maWcgYW5kIGEgY29tbWFuZCBpbiBvcmRlciB0byBnZXQgYW4gZW5kcG9pbnQgZm9yXG4gICAqIGFueSBnaXZlbiBzZXJ2aWNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVybFN1ZmZpeChyZWdpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY2ZuID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHsgcmVnaW9uIH0pO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0RW5kcG9pbnRGcm9tSW5zdHJ1Y3Rpb25zKHt9LCBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCwgeyAuLi5jZm4uY29uZmlnIH0pO1xuICAgIHJldHVybiBlbmRwb2ludC51cmwuaG9zdG5hbWUuc3BsaXQoYCR7cmVnaW9ufS5gKS5wb3AoKSE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3VycmVudEFjY291bnQoKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgcmV0dXJuIGNhY2hlZEFzeW5jKHRoaXMsIENVUlJFTlRfQUNDT1VOVF9LRVksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNyZWRzID0gYXdhaXQgdGhpcy5jcmVkUHJvdmlkZXIoKTtcbiAgICAgIHJldHVybiB0aGlzLmFjY291bnRDYWNoZS5mZXRjaChjcmVkcy5hY2Nlc3NLZXlJZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIG9uZSwgcmVzb2x2ZSBmcm9tIFNUUyBhbmQgc3RvcmUgaW4gY2FjaGUuXG4gICAgICAgIGF3YWl0IHRoaXMuZGVidWcoJ0xvb2tpbmcgdXAgZGVmYXVsdCBhY2NvdW50IElEIGZyb20gU1RTJyk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTVFNDbGllbnQoe1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIHJldHJ5U3RyYXRlZ3k6IHRoaXMuc3RzUmV0cnlTdHJhdGVneSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnNlbmQoY29tbWFuZCk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHJlc3VsdC5BY2NvdW50O1xuICAgICAgICBjb25zdCBwYXJ0aXRpb24gPSByZXN1bHQuQXJuIS5zcGxpdCgnOicpWzFdO1xuICAgICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKFwiU1RTIGRpZG4ndCByZXR1cm4gYW4gYWNjb3VudCBJRFwiKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlYnVnKGBEZWZhdWx0IGFjY291bnQgSUQ6ICR7YWNjb3VudElkfWApO1xuXG4gICAgICAgIC8vIFNhdmUgYW5vdGhlciBTVFMgY2FsbCBsYXRlciBpZiB0aGlzIG9uZSBhbHJlYWR5IHN1Y2NlZWRlZFxuICAgICAgICB0aGlzLl9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB7IGFjY291bnRJZCwgcGFydGl0aW9uIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgdGhlIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBub3QgZXhwaXJlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ3JlZGVudGlhbHMoKSB7XG4gICAgaWYgKHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNUU0NsaWVudCh7IC4uLnRoaXMuY29uZmlnLCByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3kgfSk7XG4gICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpO1xuICAgIHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgfVxufVxuXG5jb25zdCBDVVJSRU5UX0FDQ09VTlRfS0VZID0gU3ltYm9sKCdjdXJyZW50X2FjY291bnRfa2V5Jyk7XG5cbi8qKlxuICogTWFrZSB0aGUgU0RLIGxvZ2dlciBzYWZlIGFnYWluc3QgcmF3IGZ1bmN0aW9uIGludm9jYXRpb25zXG4gKlxuICogVGhlIFNESyBleHBlY3RzIHRoZSBsb2dnZXIgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSBudW1iZXIgb2YgZnVuY3Rpb25zLCBidXQgaXRcbiAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkga2VlcCAndGhpcycgYm91bmQgYWxsIHRoZSB0aW1lOyBzb21ldGltZXMgaXQgd2lsbCBjb3B5XG4gKiBmdW5jdGlvbnMgb2ZmIG9mIHRoZSBvYmplY3QgYW5kIGNhbGwgdGhlbSBmcm9tIGEgdmFyaWFibGUuXG4gKlxuICogQnkgaG93IEphdmFTY3JpcHQgd29ya3MsIHRoaXMgZHJvcHMgdGhlICd0aGlzJyByZWZlcmVuY2UuIE1ha2Ugc3VyZSAndGhpcycgaXNcbiAqIGJvdW5kIGF0IGFsbCB0aW1lcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12My9pc3N1ZXMvNzI5N1xuICovXG5mdW5jdGlvbiBtYWtlU2RrTG9nZ2VyU2FmZUJ5QmluZGluZ1RoaXMobG9nZ2VyOiBJU2RrTG9nZ2VyKTogSVNka0xvZ2dlciB7XG4gIHJldHVybiB7XG4gICAgZGVidWc6IGxvZ2dlci5kZWJ1Zy5iaW5kKGxvZ2dlciksXG4gICAgaW5mbzogbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpLFxuICAgIHdhcm46IGxvZ2dlci53YXJuLmJpbmQobG9nZ2VyKSxcbiAgICBlcnJvcjogbG9nZ2VyLmVycm9yLmJpbmQobG9nZ2VyKSxcbiAgfTtcbn1cbiJdfQ==
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBLDREQVFpQztBQU9qQyxnR0FJbUQ7QUFPbkQsc0VBSXNDO0FBeUV0QywwRUF5Q3dDO0FBUXhDLDRFQUl5QztBQUN6QyxnRUFLbUM7QUFDbkMsb0RBNkI2QjtBQXFCN0Isb0RBVzZCO0FBVTdCLG9EQU02QjtBQVc3QixnR0FPbUQ7QUFDbkQsb0RBVzZCO0FBQzdCLG9EQVE2QjtBQUM3QiwwREFrQmdDO0FBQ2hDLDhEQVdrQztBQXFCbEMsa0RBVTRCO0FBQzVCLDRFQUt5QztBQUt6QyxvREFHNkI7QUFDN0Isb0RBSzZCO0FBQzdCLG9EQUEwRTtBQUMxRSxzREFBOEM7QUFDOUMscUVBQTBFO0FBQzFFLG1EQUE2RDtBQUU3RCxtREFBd0Q7QUFFeEQscUNBQXVDO0FBR3ZDLHVDQUErQztBQUMvQyw2Q0FBbUQ7QUFDbkQsK0RBQWtFO0FBQ2xFLHFDQUFnRDtBQTJOaEQ7O0dBRUc7QUFFSSxJQUFNLEdBQUcsR0FBVCxNQUFNLEdBQUc7SUEyQks7SUExQkgsYUFBYSxDQUFTO0lBRXRCLE1BQU0sQ0FBdUI7SUFFNUIsWUFBWSxDQUFDO0lBRTlCOztPQUVHO0lBQ2MsZ0JBQWdCLEdBQUcsSUFBSSxvQ0FBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHOzs7Ozs7T0FNRztJQUNLLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUV0Qzs7T0FFRztJQUNjLEtBQUssQ0FBaUM7SUFFdkQsWUFDbUIsWUFBK0MsRUFDaEUsTUFBYyxFQUNkLGNBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLE1BQW1CO1FBSkYsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBTWhFLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRSxD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Q0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ2pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIgfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgRnVuY3Rpb25Db25maWd1cmF0aW9uLFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0LFxuICBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0LFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0LFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0LFxuICBVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQge1xuICBBcHBTeW5jQ2xpZW50LFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmQsXG4gIHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyxcbiAgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQsXG4gIFVwZGF0ZUFwaUtleUNvbW1hbmQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQgdHlwZSB7XG4gIEdldEFnZW50UnVudGltZUNvbW1hbmRJbnB1dCxcbiAgR2V0QWdlbnRSdW50aW1lQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQWdlbnRSdW50aW1lQ29tbWFuZElucHV0LFxuICBVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbCc7XG5pbXBvcnQge1xuICBCZWRyb2NrQWdlbnRDb3JlQ29udHJvbENsaWVudCxcbiAgR2V0QWdlbnRSdW50aW1lQ29tbWFuZCxcbiAgVXBkYXRlQWdlbnRSdW50aW1lQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wnO1xuaW1wb3J0IHR5cGUge1xuICBHZXRSZXNvdXJjZUNvbW1hbmRJbnB1dCxcbiAgR2V0UmVzb3VyY2VDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBMaXN0UmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkY29udHJvbCc7XG5pbXBvcnQge1xuICBDbG91ZENvbnRyb2xDbGllbnQsXG4gIEdldFJlc291cmNlQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlc0NvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGNvbnRyb2wnO1xuaW1wb3J0IHR5cGUge1xuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0LFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBMaXN0U3RhY2tzQ29tbWFuZElucHV0LFxuICBMaXN0U3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgUm9sbGJhY2tTdGFja0NvbW1hbmRJbnB1dCxcbiAgUm9sbGJhY2tTdGFja0NvbW1hbmRPdXRwdXQsXG4gIFN0YWNrUmVzb3VyY2VTdW1tYXJ5LFxuICBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICBDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQsXG4gIENyZWF0ZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQsXG4gIERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrc0NvbW1hbmRPdXRwdXQsXG4gIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBHZXRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRPdXRwdXQsXG4gIExpc3RFeHBvcnRzQ29tbWFuZElucHV0LFxuICBMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0LFxuICBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0LFxuICBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICBVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZE91dHB1dCxcbiAgU3RhY2tTdW1tYXJ5LFxuICBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQsXG4gIERldGVjdFN0YWNrRHJpZnRDb21tYW5kSW5wdXQsXG4gIERldGVjdFN0YWNrRHJpZnRDb21tYW5kT3V0cHV0LFxuICBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kSW5wdXQsXG4gIERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRJbnB1dCxcbiAgRXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRPdXRwdXQsXG4gIEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVFdmVudHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUV2ZW50c0NvbW1hbmRJbnB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7XG4gIHBhZ2luYXRlRGVzY3JpYmVFdmVudHMsXG5cbiAgcGFnaW5hdGVMaXN0U3RhY2tzLFxuICBDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQsXG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmQsXG4gIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kLFxuICBDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBEZWxldGVTdGFja0NvbW1hbmQsXG4gIERlc2NyaWJlRXZlbnRzQ29tbWFuZCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kLFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmQsXG4gIEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQsXG4gIExpc3RFeHBvcnRzQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kLFxuICBMaXN0U3RhY2tzQ29tbWFuZCxcbiAgcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kLFxuICBTdGFydFJlc291cmNlU2NhbkNvbW1hbmQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmQsXG4gIERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmQsXG4gIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JDcmVhdGVDb21wbGV0ZSxcbiAgd2FpdFVudGlsU3RhY2tSZWZhY3RvckV4ZWN1dGVDb21wbGV0ZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24vZGlzdC10eXBlcy9tb2RlbHMvbW9kZWxzXzAnO1xuaW1wb3J0IHR5cGUge1xuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kSW5wdXQsXG4gIEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZHdhdGNoLWxvZ3MnO1xuaW1wb3J0IHtcbiAgQ2xvdWRXYXRjaExvZ3NDbGllbnQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQge1xuICBDb2RlQnVpbGRDbGllbnQsXG4gIFVwZGF0ZVByb2plY3RDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jb2RlYnVpbGQnO1xuaW1wb3J0IHtcbiAgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcGNzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVWcGNzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dCxcbiAgRUMyQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWMyJztcbmltcG9ydCB0eXBlIHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kSW5wdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBQdXRJbWFnZUNvbW1hbmRJbnB1dCxcbiAgUHV0SW1hZ2VDb21tYW5kT3V0cHV0LFxuICBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0LFxuICBCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0IGFzIEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0LFxuICBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQsXG4gIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsXG4gIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kLFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQsXG4gIEVDUkNsaWVudCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZCxcbiAgTGlzdEltYWdlc0NvbW1hbmQsXG4gIFB1dEltYWdlQ29tbWFuZCxcbiAgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kLFxuICBCYXRjaEdldEltYWdlQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQgdHlwZSB7XG4gIERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kSW5wdXQsXG4gIExpc3RDbHVzdGVyc0NvbW1hbmRJbnB1dCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZE91dHB1dCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7XG4gIEVDU0NsaWVudCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kLFxuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQgdHlwZSB7XG4gIExpc3RlbmVyLFxuICBMb2FkQmFsYW5jZXIsXG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQge1xuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmQsXG4gIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmQsXG4gIERlc2NyaWJlVGFnc0NvbW1hbmQsXG4gIEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQsXG4gIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMsXG4gIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQge1xuICBDcmVhdGVQb2xpY3lDb21tYW5kLFxuICB0eXBlIENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRQb2xpY3lDb21tYW5kLFxuICB0eXBlIEdldFBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRSb2xlQ29tbWFuZCxcbiAgdHlwZSBHZXRSb2xlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFJvbGVDb21tYW5kT3V0cHV0LFxuICBJQU1DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHtcbiAgRGVzY3JpYmVLZXlDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dCxcbiAgS01TQ2xpZW50LFxuICBMaXN0QWxpYXNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQta21zJztcbmltcG9ydCB7XG4gIEludm9rZUNvbW1hbmQsXG4gIHR5cGUgSW52b2tlQ29tbWFuZElucHV0LFxuICB0eXBlIEludm9rZUNvbW1hbmRPdXRwdXQsXG4gIExhbWJkYUNsaWVudCxcbiAgUHVibGlzaFZlcnNpb25Db21tYW5kLFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQWxpYXNDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbiAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgR2V0SG9zdGVkWm9uZUNvbW1hbmQsXG4gIHR5cGUgR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dCxcbiAgUm91dGU1M0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCxcbiAgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQsXG4gIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0LFxuICBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdENvbW1hbmRJbnB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7XG4gIERlbGV0ZU9iamVjdHNDb21tYW5kLFxuICBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZCxcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsXG4gIExpc3RPYmplY3RzVjJDb21tYW5kLFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgUzNDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge1xuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0LFxuICBTZWNyZXRzTWFuYWdlckNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQge1xuICBTRk5DbGllbnQsXG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZm4nO1xuaW1wb3J0IHtcbiAgR2V0UGFyYW1ldGVyQ29tbWFuZCxcbiAgdHlwZSBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dCxcbiAgU1NNQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbmltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCwgU1RTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgeyBVcGxvYWQgfSBmcm9tICdAYXdzLXNkay9saWItc3RvcmFnZSc7XG5pbXBvcnQgeyBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMgfSBmcm9tICdAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuaW1wb3J0IHR5cGUgeyBXYWl0ZXJSZXN1bHQgfSBmcm9tICdAc21pdGh5L3V0aWwtd2FpdGVyJztcbmltcG9ydCB7IEFjY291bnRBY2Nlc3NLZXlDYWNoZSB9IGZyb20gJy4vYWNjb3VudC1jYWNoZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RIYW5kbGVyU2V0dGluZ3MgfSBmcm9tICcuL2Jhc2UtY3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgY2FjaGVkQXN5bmMgfSBmcm9tICcuL2NhY2hlZCc7XG5pbXBvcnQgdHlwZSB7IElTZGtMb2dnZXIgfSBmcm9tICcuL3Nkay1sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSAnLi9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHsgdHJhY2VNZW1iZXJNZXRob2RzIH0gZnJvbSAnLi90cmFjaW5nJztcbmltcG9ydCB7IGRlZmF1bHRDbGlVc2VyQWdlbnQgfSBmcm9tICcuL3VzZXItYWdlbnQnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBTM0NsaWVudE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgQVBJcyBhcmUgdXNlZCB0aGF0IHJlcXVpcmUgTUQ1IGNoZWNrc3Vtcy5cbiAgICpcbiAgICogU29tZSBTMyBBUElzIGluIFNES3YyIGhhdmUgYSBidWcgdGhhdCBhbHdheXMgcmVxdWlyZXMgdGhlbSB0byB1c2UgYSBNRDUgY2hlY2tzdW0uXG4gICAqIFRoZXNlIEFQSXMgYXJlIG5vdCBnb2luZyB0byBiZSBzdXBwb3J0ZWQgaW4gYSBGSVBTIGVudmlyb25tZW50LlxuICAgKi9cbiAgbmVlZHNNZDVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkZXNjcmlwdGl2ZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgd2hlcmUgdGhlIFwiQXNzdW1lUm9sZVwiIGNyZWRlbnRpYWxzIGFyZSBjb21pbmcgZnJvbVxuICAgKlxuICAgKiBXaWxsIGJlIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSB0byBoZWxwIHVzZXJzIGRpYWdub3NlIGF1dGggcHJvYmxlbXMuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLy8gVE9ETzogc3RpbGwgc29tZSBjbGVhbnVwIGhlcmUuIE1ha2UgdGhlIHBhZ2luYXRpb24gZnVuY3Rpb25zIGRvIGFsbCB0aGUgd29yayBoZXJlIGluc3RlYWQgb2YgaW4gaW5kaXZpZHVhbCBwYWNrYWdlcy5cbi8vIEFsc28gYWRkIGFzeW5jL2F3YWl0LiBEb2VzIHRoYXQgYWN0dWFsbHkgbWF0dGVyIGluIHRoaXMgY29udGV4dD8gRmluZCBvdXQgYW5kIHVwZGF0ZSBhY2NvcmRpbmdseS5cblxuLy8gQWxzbyBhZGQgbm90ZXMgdG8gdGhlIFBSIGFib3V0IHdoeSB5b3UgaW1wb3J0ZWQgZXZlcnl0aGluZyBpbmRpdmlkdWFsbHkgYW5kIHVzZWQgJ3R5cGUnIHNvIHJldmlld2VycyBkb24ndCBoYXZlIHRvIGFzay5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBjcmVkZW50aWFsczogU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbFByb3ZpZGVyO1xuICByZXF1ZXN0SGFuZGxlcjogUmVxdWVzdEhhbmRsZXJTZXR0aW5ncztcbiAgcmV0cnlTdHJhdGVneTogQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3k7XG4gIGN1c3RvbVVzZXJBZ2VudDogc3RyaW5nO1xuICBsb2dnZXI/OiBJU2RrTG9nZ2VyO1xuICBzM0Rpc2FibGVCb2R5U2lnbmluZz86IGJvb2xlYW47XG4gIGNvbXB1dGVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTeW5jQ2xpZW50IHtcbiAgZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXMoaW5wdXQ6IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+O1xuICBzdGFydFNjaGVtYUNyZWF0aW9uKGlucHV0OiBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUFwaUtleShpbnB1dDogVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb24oaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVSZXNvbHZlcihpbnB1dDogVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dD47XG4gIC8vIFBhZ2luYXRpb24gZnVuY3Rpb25zXG4gIGxpc3RGdW5jdGlvbnMoaW5wdXQ6IExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEZ1bmN0aW9uQ29uZmlndXJhdGlvbltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmVkcm9ja0FnZW50Q29yZUNvbnRyb2xDbGllbnQge1xuICBnZXRBZ2VudFJ1bnRpbWUoaW5wdXQ6IEdldEFnZW50UnVudGltZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QWdlbnRSdW50aW1lQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUFnZW50UnVudGltZShpbnB1dDogVXBkYXRlQWdlbnRSdW50aW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRDb250cm9sQ2xpZW50IHtcbiAgbGlzdFJlc291cmNlcyhpbnB1dDogTGlzdFJlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRSZXNvdXJjZShpbnB1dDogR2V0UmVzb3VyY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJlc291cmNlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgY29udGludWVVcGRhdGVSb2xsYmFjayhpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVDaGFuZ2VTZXQoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlU3RhY2soaW5wdXQ6IENyZWF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVDaGFuZ2VTZXQoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlU3RhY2soaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUV2ZW50cyhpbnB1dDogRGVzY3JpYmVFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlRXZlbnRzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlQ2hhbmdlU2V0KGlucHV0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZShcbiAgICBpbnB1dDogRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlUmVzb3VyY2VTY2FuKGlucHV0OiBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzKGlucHV0OiBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVN0YWNrcyhpbnB1dDogRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0cyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja1Jlc291cmNlcyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXRlY3RTdGFja0RyaWZ0KGlucHV0OiBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZE91dHB1dD47XG4gIGRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdChpbnB1dDogRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kT3V0cHV0PjtcbiAgZXhlY3V0ZUNoYW5nZVNldChpbnB1dDogRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+O1xuICBnZXRHZW5lcmF0ZWRUZW1wbGF0ZShpbnB1dDogR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD47XG4gIGdldFRlbXBsYXRlKGlucHV0OiBHZXRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZ2V0VGVtcGxhdGVTdW1tYXJ5KGlucHV0OiBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0RXhwb3J0cyhpbnB1dDogTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzKFxuICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzKFxuICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhbnMoaW5wdXQ/OiBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFN0YWNrcyhpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFN0YWNrc0NvbW1hbmRPdXRwdXQ+O1xuICByb2xsYmFja1N0YWNrKGlucHV0OiBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dD47XG4gIHN0YXJ0UmVzb3VyY2VTY2FuKGlucHV0OiBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlU3RhY2soaW5wdXQ6IFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oXG4gICAgaW5wdXQ6IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvbiBmdW5jdGlvbnNcbiAgZGVzY3JpYmVTdGFja0V2ZW50cyhpbnB1dDogRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0U3RhY2tSZXNvdXJjZXMoaW5wdXQ6IExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhY2tSZXNvdXJjZVN1bW1hcnlbXT47XG4gIHBhZ2luYXRlZExpc3RTdGFja3MoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrU3VtbWFyeVtdPjtcbiAgcGFnaW5hdGVkRGVzY3JpYmVFdmVudHMoaW5wdXQ6IERlc2NyaWJlRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxPcGVyYXRpb25FdmVudFtdPjtcbiAgY3JlYXRlU3RhY2tSZWZhY3RvcihpbnB1dDogQ3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRPdXRwdXQ+O1xuICBleGVjdXRlU3RhY2tSZWZhY3RvcihpbnB1dDogRXhlY3V0ZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZE91dHB1dD47XG4gIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JDcmVhdGVDb21wbGV0ZShpbnB1dDogRGVzY3JpYmVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+O1xuICB3YWl0VW50aWxTdGFja1JlZmFjdG9yRXhlY3V0ZUNvbXBsZXRlKGlucHV0OiBEZXNjcmliZVN0YWNrUmVmYWN0b3JDb21tYW5kSW5wdXQpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgZGVzY3JpYmVMb2dHcm91cHMoaW5wdXQ6IERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRPdXRwdXQ+O1xuICBmaWx0ZXJMb2dFdmVudHMoaW5wdXQ6IEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RmlsdGVyTG9nRXZlbnRzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvZGVCdWlsZENsaWVudCB7XG4gIHVwZGF0ZVByb2plY3QoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0Pjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUVDMkNsaWVudCB7XG4gIGRlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUltYWdlcyhpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW5zdGFuY2VzKGlucHV0OiBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSb3V0ZVRhYmxlcyhpbnB1dDogRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzKGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3VibmV0cyhpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzKFxuICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlVnBjcyhpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcG5HYXRld2F5cyhpbnB1dDogRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFQ1JDbGllbnQge1xuICBiYXRjaERlbGV0ZUltYWdlKGlucHV0OiBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaERlbGV0ZUltYWdlQ29tbWFuZE91dHB1dD47XG4gIGJhdGNoR2V0SW1hZ2UoaW5wdXQ6IEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlUmVwb3NpdG9yeShpbnB1dDogQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUltYWdlcyhpbnB1dDogRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlUmVwb3NpdG9yaWVzKGlucHV0OiBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0PjtcbiAgZ2V0QXV0aG9yaXphdGlvblRva2VuKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SW1hZ2VzKGlucHV0OiBMaXN0SW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIHB1dEltYWdlKGlucHV0OiBQdXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0SW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24oXG4gICAgaW5wdXQ6IFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDU0NsaWVudCB7XG4gIGxpc3RDbHVzdGVycyhpbnB1dDogTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0Q2x1c3RlcnNDb21tYW5kT3V0cHV0PjtcbiAgcmVnaXN0ZXJUYXNrRGVmaW5pdGlvbihpbnB1dDogUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVTZXJ2aWNlKGlucHV0OiBVcGRhdGVTZXJ2aWNlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTZXJ2aWNlQ29tbWFuZE91dHB1dD47XG4gIC8vIFdhaXRlcnNcbiAgd2FpdFVudGlsU2VydmljZXNTdGFibGUoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50IHtcbiAgZGVzY3JpYmVMaXN0ZW5lcnMoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUxvYWRCYWxhbmNlcnMoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlVGFncyhpbnB1dDogRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvblxuICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdGVuZXJbXT47XG4gIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExvYWRCYWxhbmNlcltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSUFNQ2xpZW50IHtcbiAgY3JlYXRlUG9saWN5KGlucHV0OiBDcmVhdGVQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVBvbGljeUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRQb2xpY3koaW5wdXQ6IEdldFBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UG9saWN5Q29tbWFuZE91dHB1dD47XG4gIGdldFJvbGUoaW5wdXQ6IEdldFJvbGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJvbGVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJS01TQ2xpZW50IHtcbiAgZGVzY3JpYmVLZXkoaW5wdXQ6IERlc2NyaWJlS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUtleUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0QWxpYXNlcyhpbnB1dDogTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxhbWJkYUNsaWVudCB7XG4gIGludm9rZUNvbW1hbmQoaW5wdXQ6IEludm9rZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8SW52b2tlQ29tbWFuZE91dHB1dD47XG4gIHB1Ymxpc2hWZXJzaW9uKGlucHV0OiBQdWJsaXNoVmVyc2lvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHVibGlzaFZlcnNpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlQWxpYXMoaW5wdXQ6IFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBbGlhc0NvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbkNvZGUoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICAvLyBXYWl0ZXJzXG4gIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZChkZWxheVNlY29uZHM6IG51bWJlciwgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8V2FpdGVyUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUm91dGU1M0NsaWVudCB7XG4gIGdldEhvc3RlZFpvbmUoaW5wdXQ6IEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEhvc3RlZFpvbmVzKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SG9zdGVkWm9uZXNCeU5hbWUoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVMzQ2xpZW50IHtcbiAgZGVsZXRlT2JqZWN0cyhpbnB1dDogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVPYmplY3RUYWdnaW5nKGlucHV0OiBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIGdldEJ1Y2tldEVuY3J5cHRpb24oaW5wdXQ6IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kT3V0cHV0PjtcbiAgZ2V0QnVja2V0TG9jYXRpb24oaW5wdXQ6IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICBnZXRPYmplY3QoaW5wdXQ6IEdldE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0Q29tbWFuZE91dHB1dD47XG4gIGdldE9iamVjdFRhZ2dpbmcoaW5wdXQ6IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgbGlzdE9iamVjdHNWMihpbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQ+O1xuICBwdXRPYmplY3RUYWdnaW5nKGlucHV0OiBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIHVwbG9hZChpbnB1dDogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWNyZXRzTWFuYWdlckNsaWVudCB7XG4gIGdldFNlY3JldFZhbHVlKGlucHV0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU1NNQ2xpZW50IHtcbiAgZ2V0UGFyYW1ldGVyKGlucHV0OiBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdGVwRnVuY3Rpb25zQ2xpZW50IHtcbiAgdXBkYXRlU3RhdGVNYWNoaW5lKGlucHV0OiBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG4vKipcbiAqIEJhc2UgZnVuY3Rpb25hbGl0eSBvZiBTREsgd2l0aG91dCBjcmVkZW50aWFsIGZldGNoaW5nXG4gKi9cbkB0cmFjZU1lbWJlck1ldGhvZHNcbmV4cG9ydCBjbGFzcyBTREsge1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJlZ2lvbjogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudENhY2hlO1xuXG4gIC8qKlxuICAgKiBTVFMgaXMgdXNlZCB0byBjaGVjayBjcmVkZW50aWFsIHZhbGlkaXR5LCBkb24ndCBkbyB0b28gbWFueSByZXRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdHNSZXRyeVN0cmF0ZWd5ID0gbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDMsIChhdHRlbXB0KSA9PiAxMDAgKiAoMiAqKiBhdHRlbXB0KSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UgaGF2ZSBwcm9vZiB0aGF0IHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBleHBpcmVkXG4gICAqXG4gICAqIFdlIG5lZWQgdG8gZG8gc29tZSBtYW51YWwgcGx1bWJpbmcgYXJvdW5kIHRoaXMgYmVjYXVzZSB0aGUgSlMgU0RLdjIgdHJlYXRzIGBFeHBpcmVkVG9rZW5gXG4gICAqIGFzIHJldHJpYWJsZSBhbmQgd2UgaGF2ZSBoZWZ0eSByZXRyaWVzIG9uIENGTiBjYWxscyBtYWtpbmcgdGhlIENMSSBoYW5nIGZvciBhIGdvb2QgMTUgbWludXRlc1xuICAgKiBpZiB0aGUgY3JlZGVudGlhbHMgaGF2ZSBleHBpcmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlZGVudGlhbHNWYWxpZGF0ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBjcmVhdGUgZGVidWcgbWVzc2FnZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWc6IChtc2c6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyZWRQcm92aWRlcjogU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbFByb3ZpZGVyLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzLFxuICAgIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgICBsb2dnZXI/OiBJU2RrTG9nZ2VyLFxuICApIHtcbiAgICBjb25zdCBkZWJ1Z0ZuID0gYXN5bmMgKG1zZzogc3RyaW5nKSA9PiBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhtc2cpO1xuICAgIHRoaXMuYWNjb3VudENhY2hlID0gbmV3IEFjY291bnRBY2Nlc3NLZXlDYWNoZShBY2NvdW50QWNjZXNzS2V5Q2FjaGUuREVGQVVMVF9QQVRILCBkZWJ1Z0ZuKTtcbiAgICB0aGlzLmRlYnVnID0gZGVidWdGbjtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGNyZWRlbnRpYWxzOiBjcmVkUHJvdmlkZXIsXG4gICAgICByZXF1ZXN0SGFuZGxlcixcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSg3LCAoYXR0ZW1wdCkgPT4gMzAwICogKDIgKiogYXR0ZW1wdCkpLFxuICAgICAgY3VzdG9tVXNlckFnZW50OiBkZWZhdWx0Q2xpVXNlckFnZW50KCksXG4gICAgICBsb2dnZXI6IGxvZ2dlciA/IG1ha2VTZGtMb2dnZXJTYWZlQnlCaW5kaW5nVGhpcyhsb2dnZXIpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZEN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1c2VyQWdlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudDtcbiAgICB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSBjdXJyZW50Q3VzdG9tVXNlckFnZW50ID8gYCR7Y3VycmVudEN1c3RvbVVzZXJBZ2VudH0gJHt1c2VyQWdlbnREYXRhfWAgOiB1c2VyQWdlbnREYXRhO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQ/LnJlcGxhY2UodXNlckFnZW50RGF0YSwgJycpO1xuICB9XG5cbiAgcHVibGljIGFwcHN5bmMoKTogSUFwcFN5bmNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBBcHBTeW5jQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXM6IChcbiAgICAgICAgaW5wdXQ6IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHN0YXJ0U2NoZW1hQ3JlYXRpb246IChpbnB1dDogU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlQXBpS2V5OiAoaW5wdXQ6IFVwZGF0ZUFwaUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlQXBpS2V5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUFwaUtleUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uOiAoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVGdW5jdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZVJlc29sdmVyOiAoaW5wdXQ6IFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVSZXNvbHZlckNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVSZXNvbHZlckNvbW1hbmQoaW5wdXQpKSxcblxuICAgICAgLy8gUGFnaW5hdGlvbiBGdW5jdGlvbnNcbiAgICAgIGxpc3RGdW5jdGlvbnM6IGFzeW5jIChpbnB1dDogTGlzdEZ1bmN0aW9uc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RnVuY3Rpb25Db25maWd1cmF0aW9uW10+ID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gQXJyYXk8RnVuY3Rpb25Db25maWd1cmF0aW9uPigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZUxpc3RGdW5jdGlvbnMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goLi4uKHBhZ2UuZnVuY3Rpb25zIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBiZWRyb2NrQWdlbnRDb3JlQ29udHJvbCgpOiBJQmVkcm9ja0FnZW50Q29yZUNvbnRyb2xDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBCZWRyb2NrQWdlbnRDb3JlQ29udHJvbENsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEFnZW50UnVudGltZTogKGlucHV0OiBHZXRBZ2VudFJ1bnRpbWVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEFnZW50UnVudGltZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRBZ2VudFJ1bnRpbWVDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVBZ2VudFJ1bnRpbWU6IChpbnB1dDogVXBkYXRlQWdlbnRSdW50aW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBZ2VudFJ1bnRpbWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlQWdlbnRSdW50aW1lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRDb250cm9sKCk6IElDbG91ZENvbnRyb2xDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZENvbnRyb2xDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0UmVzb3VyY2VzOiAoaW5wdXQ6IExpc3RSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RSZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFJlc291cmNlOiAoaW5wdXQ6IEdldFJlc291cmNlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRSZXNvdXJjZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRSZXNvdXJjZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNsb3VkRm9ybWF0aW9uKCk6IElDbG91ZEZvcm1hdGlvbkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgcmV0cnlTdHJhdGVneTogbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDExLCAoYXR0ZW1wdDogbnVtYmVyKSA9PiAxMDAwICogKDIgKiogYXR0ZW1wdCkpLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBjb250aW51ZVVwZGF0ZVJvbGxiYWNrOiBhc3luYyAoXG4gICAgICAgIGlucHV0OiBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVDaGFuZ2VTZXQ6IChpbnB1dDogQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlR2VuZXJhdGVkVGVtcGxhdGU6IChcbiAgICAgICAgaW5wdXQ6IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZVN0YWNrOiAoaW5wdXQ6IENyZWF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVTdGFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZUNoYW5nZVNldDogKGlucHV0OiBEZWxldGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZTogKFxuICAgICAgICBpbnB1dDogRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlU3RhY2s6IChpbnB1dDogRGVsZXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZVN0YWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGV0ZWN0U3RhY2tEcmlmdDogKGlucHV0OiBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERldGVjdFN0YWNrRHJpZnRDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXRlY3RTdGFja1Jlc291cmNlRHJpZnQ6IChpbnB1dDogRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVFdmVudHM6IChpbnB1dDogRGVzY3JpYmVFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlRXZlbnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlRXZlbnRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVDaGFuZ2VTZXQ6IChpbnB1dDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZTogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSZXNvdXJjZVNjYW46IChpbnB1dDogRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRJbnB1dCk6XG4gICAgICBQcm9taXNlPERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHM6IChpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja3M6IChpbnB1dDogRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja1Jlc291cmNlczogKGlucHV0OiBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBleGVjdXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEdlbmVyYXRlZFRlbXBsYXRlOiAoaW5wdXQ6IEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFRlbXBsYXRlOiAoaW5wdXQ6IEdldFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFRlbXBsYXRlU3VtbWFyeTogKGlucHV0OiBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0RXhwb3J0czogKGlucHV0OiBMaXN0RXhwb3J0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEV4cG9ydHNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlczogKFxuICAgICAgICBpbnB1dDogTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdFJlc291cmNlU2NhblJlc291cmNlczogKFxuICAgICAgICBpbnB1dDogTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdFJlc291cmNlU2NhbnM6IChpbnB1dDogTGlzdFJlc291cmNlU2NhbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdFN0YWNrczogKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0U3RhY2tzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RTdGFja3NDb21tYW5kKGlucHV0KSksXG4gICAgICByb2xsYmFja1N0YWNrOiAoaW5wdXQ6IFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUm9sbGJhY2tTdGFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHN0YXJ0UmVzb3VyY2VTY2FuOiAoaW5wdXQ6IFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBTdGFydFJlc291cmNlU2NhbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZVN0YWNrOiAoaW5wdXQ6IFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVTdGFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogKFxuICAgICAgICBpbnB1dDogVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja0V2ZW50czogKGlucHV0OiBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kKGlucHV0KSk7XG4gICAgICB9LFxuICAgICAgbGlzdFN0YWNrUmVzb3VyY2VzOiBhc3luYyAoaW5wdXQ6IExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhY2tSZXNvdXJjZVN1bW1hcnlbXT4gPT4ge1xuICAgICAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IEFycmF5PFN0YWNrUmVzb3VyY2VTdW1tYXJ5PigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZUxpc3RTdGFja1Jlc291cmNlcyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBzdGFja1Jlc291cmNlcy5wdXNoKC4uLihwYWdlPy5TdGFja1Jlc291cmNlU3VtbWFyaWVzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRlZExpc3RTdGFja3M6IGFzeW5jIChpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhY2tTdW1tYXJ5W10+ID0+IHtcbiAgICAgICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBBcnJheTxTdGFja1N1bW1hcnk+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdFN0YWNrcyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBzdGFja1Jlc291cmNlcy5wdXNoKC4uLihwYWdlPy5TdGFja1N1bW1hcmllcyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja1Jlc291cmNlcztcbiAgICAgIH0sXG4gICAgICBwYWdpbmF0ZWREZXNjcmliZUV2ZW50czogYXN5bmMgKGlucHV0OiBEZXNjcmliZUV2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8T3BlcmF0aW9uRXZlbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IEFycmF5PE9wZXJhdGlvbkV2ZW50PigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZURlc2NyaWJlRXZlbnRzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIHN0YWNrUmVzb3VyY2VzLnB1c2goLi4uKHBhZ2UuT3BlcmF0aW9uRXZlbnRzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZVN0YWNrUmVmYWN0b3I6IChpbnB1dDogQ3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlU3RhY2tSZWZhY3RvckNvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVTdGFja1JlZmFjdG9yQ29tbWFuZChpbnB1dCkpO1xuICAgICAgfSxcbiAgICAgIGV4ZWN1dGVTdGFja1JlZmFjdG9yOiAoaW5wdXQ6IEV4ZWN1dGVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlU3RhY2tSZWZhY3RvckNvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kKG5ldyBFeGVjdXRlU3RhY2tSZWZhY3RvckNvbW1hbmQoaW5wdXQpKTtcbiAgICAgIH0sXG4gICAgICB3YWl0VW50aWxTdGFja1JlZmFjdG9yQ3JlYXRlQ29tcGxldGU6IChpbnB1dDogRGVzY3JpYmVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JDcmVhdGVDb21wbGV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBtYXhXYWl0VGltZTogNjAwLFxuICAgICAgICAgICAgbWluRGVsYXk6IDYsXG4gICAgICAgICAgICBtYXhEZWxheTogNixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JFeGVjdXRlQ29tcGxldGU6IChpbnB1dDogRGVzY3JpYmVTdGFja1JlZmFjdG9yQ29tbWFuZElucHV0KTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbFN0YWNrUmVmYWN0b3JFeGVjdXRlQ29tcGxldGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IDYwMCxcbiAgICAgICAgICAgIG1pbkRlbGF5OiA2LFxuICAgICAgICAgICAgbWF4RGVsYXk6IDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZFdhdGNoTG9ncygpOiBJQ2xvdWRXYXRjaExvZ3NDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZFdhdGNoTG9nc0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaWJlTG9nR3JvdXBzOiAoaW5wdXQ6IERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGZpbHRlckxvZ0V2ZW50czogKGlucHV0OiBGaWx0ZXJMb2dFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBGaWx0ZXJMb2dFdmVudHNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjb2RlQnVpbGQoKTogSUNvZGVCdWlsZENsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENvZGVCdWlsZENsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZVByb2plY3Q6IChpbnB1dDogVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVQcm9qZWN0Q29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZWMyKCk6IElFQzJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFQzJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUltYWdlczogKGlucHV0OiBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVJbWFnZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUluc3RhbmNlczogKGlucHV0OiBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVJvdXRlVGFibGVzOiAoaW5wdXQ6IERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU2VjdXJpdHlHcm91cHM6IChcbiAgICAgICAgaW5wdXQ6IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3VibmV0czogKGlucHV0OiBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN1Ym5ldHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXM6IChcbiAgICAgICAgaW5wdXQ6IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlVnBjczogKGlucHV0OiBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwY3NDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwbkdhdGV3YXlzOiAoaW5wdXQ6IERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjcigpOiBJRUNSQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUNSQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmF0Y2hEZWxldGVJbWFnZTogKGlucHV0OiBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaERlbGV0ZUltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBiYXRjaEdldEltYWdlOiAoaW5wdXQ6IEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQmF0Y2hHZXRJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZVJlcG9zaXRvcnk6IChpbnB1dDogQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbWFnZXM6IChpbnB1dDogRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSZXBvc2l0b3JpZXM6IChpbnB1dDogRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0QXV0aG9yaXphdGlvblRva2VuOiAoaW5wdXQ6IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RJbWFnZXM6IChpbnB1dDogTGlzdEltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0SW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHV0SW1hZ2U6IChpbnB1dDogUHV0SW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dEltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1dEltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb246IChcbiAgICAgICAgaW5wdXQ6IFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjcygpOiBJRUNTQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUNTQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdENsdXN0ZXJzOiAoaW5wdXQ6IExpc3RDbHVzdGVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdENsdXN0ZXJzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RDbHVzdGVyc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHJlZ2lzdGVyVGFza0RlZmluaXRpb246IChcbiAgICAgICAgaW5wdXQ6IFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZVNlcnZpY2U6IChpbnB1dDogVXBkYXRlU2VydmljZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU2VydmljZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVTZXJ2aWNlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgLy8gV2FpdGVyc1xuICAgICAgd2FpdFVudGlsU2VydmljZXNTdGFibGU6IChpbnB1dDogRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCwgdGltZW91dFNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPFdhaXRlclJlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gd2FpdFVudGlsU2VydmljZXNTdGFibGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IHRpbWVvdXRTZWNvbmRzID8/IDYwMCxcbiAgICAgICAgICAgIG1pbkRlbGF5OiA2LFxuICAgICAgICAgICAgbWF4RGVsYXk6IDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbGJ2MigpOiBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxpc3RlbmVyczogKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZUxvYWRCYWxhbmNlcnM6IChpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVUYWdzOiAoaW5wdXQ6IERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVUYWdzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVGFnc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFBhZ2luYXRpb24gRnVuY3Rpb25zXG4gICAgICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0ZW5lcltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IEFycmF5PExpc3RlbmVyPigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKC4uLihwYWdlPy5MaXN0ZW5lcnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzOiBhc3luYyAoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+ID0+IHtcbiAgICAgICAgY29uc3QgbG9hZEJhbGFuY2VycyA9IEFycmF5PExvYWRCYWxhbmNlcj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgbG9hZEJhbGFuY2Vycy5wdXNoKC4uLihwYWdlPy5Mb2FkQmFsYW5jZXJzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvYWRCYWxhbmNlcnM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgaWFtKCk6IElJQU1DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBJQU1DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVQb2xpY3k6IChpbnB1dDogQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUG9saWN5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0UG9saWN5OiAoaW5wdXQ6IEdldFBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UG9saWN5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBvbGljeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFJvbGU6IChpbnB1dDogR2V0Um9sZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0Um9sZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBHZXRSb2xlQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMga21zKCk6IElLTVNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBLTVNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUtleTogKGlucHV0OiBEZXNjcmliZUtleUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVLZXlDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0QWxpYXNlczogKGlucHV0OiBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEFsaWFzZXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBsYW1iZGEoKTogSUxhbWJkYUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludm9rZUNvbW1hbmQ6IChpbnB1dDogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZva2VDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgSW52b2tlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHVibGlzaFZlcnNpb246IChpbnB1dDogUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlQWxpYXM6IChpbnB1dDogVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUFsaWFzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb25Db2RlOiAoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbjogKFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgLy8gV2FpdGVyc1xuICAgICAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkOiAoXG4gICAgICAgIGRlbGF5U2Vjb25kczogbnVtYmVyLFxuICAgICAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZFYyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heERlbGF5OiBkZWxheVNlY29uZHMsXG4gICAgICAgICAgICBtaW5EZWxheTogZGVsYXlTZWNvbmRzLFxuICAgICAgICAgICAgbWF4V2FpdFRpbWU6IGRlbGF5U2Vjb25kcyAqIDYwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcm91dGU1MygpOiBJUm91dGU1M0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJvdXRlNTNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRIb3N0ZWRab25lOiAoaW5wdXQ6IEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0SG9zdGVkWm9uZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RIb3N0ZWRab25lczogKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0SG9zdGVkWm9uZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SG9zdGVkWm9uZXNCeU5hbWU6IChpbnB1dDogTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgczMoKTogSVMzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVPYmplY3RzOiAoaW5wdXQ6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlT2JqZWN0c0NvbW1hbmQoe1xuICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgIENoZWNrc3VtQWxnb3JpdGhtOiAnU0hBMjU2JyxcbiAgICAgICAgfSkpLFxuICAgICAgZGVsZXRlT2JqZWN0VGFnZ2luZzogKGlucHV0OiBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRCdWNrZXRFbmNyeXB0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEJ1Y2tldExvY2F0aW9uOiAoaW5wdXQ6IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldE9iamVjdDogKGlucHV0OiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRPYmplY3RDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRPYmplY3RUYWdnaW5nOiAoaW5wdXQ6IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RPYmplY3RzVjI6IChpbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0T2JqZWN0c1YyQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcHV0T2JqZWN0VGFnZ2luZzogKGlucHV0OiBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kKHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicsXG4gICAgICAgIH0pKSxcbiAgICAgIHVwbG9hZDogKGlucHV0OiBQdXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwbG9hZCA9IG5ldyBVcGxvYWQoe1xuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgcGFyYW1zOiB7IC4uLmlucHV0LCBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB1cGxvYWQuZG9uZSgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcignUzNVcGxvYWRGYWlsZWQnLCBgVXBsb2FkIGZhaWxlZDogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZWNyZXRzTWFuYWdlcigpOiBJU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFNlY3JldFZhbHVlOiAoaW5wdXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNzbSgpOiBJU1NNQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU1NNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UGFyYW1ldGVyOiAoaW5wdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldFBhcmFtZXRlckNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0ZXBGdW5jdGlvbnMoKTogSVN0ZXBGdW5jdGlvbnNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTRk5DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVTdGF0ZU1hY2hpbmU6IChpbnB1dDogVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFXUyBTREsgdjMgcmVxdWlyZXMgYSBjbGllbnQgY29uZmlnIGFuZCBhIGNvbW1hbmQgaW4gb3JkZXIgdG8gZ2V0IGFuIGVuZHBvaW50IGZvclxuICAgKiBhbnkgZ2l2ZW4gc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVcmxTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNmbiA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyh7fSwgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsIHsgLi4uY2ZuLmNvbmZpZyB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnQudXJsLmhvc3RuYW1lLnNwbGl0KGAke3JlZ2lvbn0uYCkucG9wKCkhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIHJldHVybiBjYWNoZWRBc3luYyh0aGlzLCBDVVJSRU5UX0FDQ09VTlRfS0VZLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuY3JlZFByb3ZpZGVyKCk7XG4gICAgICByZXR1cm4gdGhpcy5hY2NvdW50Q2FjaGUuZmV0Y2goY3JlZHMuYWNjZXNzS2V5SWQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBvbmUsIHJlc29sdmUgZnJvbSBTVFMgYW5kIHN0b3JlIGluIGNhY2hlLlxuICAgICAgICBhd2FpdCB0aGlzLmRlYnVnKCdMb29raW5nIHVwIGRlZmF1bHQgYWNjb3VudCBJRCBmcm9tIFNUUycpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICByZXRyeVN0cmF0ZWd5OiB0aGlzLnN0c1JldHJ5U3RyYXRlZ3ksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zZW5kKGNvbW1hbmQpO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSByZXN1bHQuQWNjb3VudDtcbiAgICAgICAgY29uc3QgcGFydGl0aW9uID0gcmVzdWx0LkFybiEuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcignTm9BY2NvdW50SWQnLCBcIlNUUyBkaWRuJ3QgcmV0dXJuIGFuIGFjY291bnQgSURcIik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5kZWJ1ZyhgRGVmYXVsdCBhY2NvdW50IElEOiAke2FjY291bnRJZH1gKTtcblxuICAgICAgICAvLyBTYXZlIGFub3RoZXIgU1RTIGNhbGwgbGF0ZXIgaWYgdGhpcyBvbmUgYWxyZWFkeSBzdWNjZWVkZWRcbiAgICAgICAgdGhpcy5fY3JlZGVudGlhbHNWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4geyBhY2NvdW50SWQsIHBhcnRpdGlvbiB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIHRoZSB0aGUgY3VycmVudCBjcmVkZW50aWFscyBhcmUgbm90IGV4cGlyZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNyZWRlbnRpYWxzKCkge1xuICAgIGlmICh0aGlzLl9jcmVkZW50aWFsc1ZhbGlkYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTVFNDbGllbnQoeyAuLi50aGlzLmNvbmZpZywgcmV0cnlTdHJhdGVneTogdGhpcy5zdHNSZXRyeVN0cmF0ZWd5IH0pO1xuICAgIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKTtcbiAgICB0aGlzLl9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IHRydWU7XG4gIH1cbn1cblxuY29uc3QgQ1VSUkVOVF9BQ0NPVU5UX0tFWSA9IFN5bWJvbCgnY3VycmVudF9hY2NvdW50X2tleScpO1xuXG4vKipcbiAqIE1ha2UgdGhlIFNESyBsb2dnZXIgc2FmZSBhZ2FpbnN0IHJhdyBmdW5jdGlvbiBpbnZvY2F0aW9uc1xuICpcbiAqIFRoZSBTREsgZXhwZWN0cyB0aGUgbG9nZ2VyIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucywgYnV0IGl0XG4gKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IGtlZXAgJ3RoaXMnIGJvdW5kIGFsbCB0aGUgdGltZTsgc29tZXRpbWVzIGl0IHdpbGwgY29weVxuICogZnVuY3Rpb25zIG9mZiBvZiB0aGUgb2JqZWN0IGFuZCBjYWxsIHRoZW0gZnJvbSBhIHZhcmlhYmxlLlxuICpcbiAqIEJ5IGhvdyBKYXZhU2NyaXB0IHdvcmtzLCB0aGlzIGRyb3BzIHRoZSAndGhpcycgcmVmZXJlbmNlLiBNYWtlIHN1cmUgJ3RoaXMnIGlzXG4gKiBib3VuZCBhdCBhbGwgdGltZXMuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMvaXNzdWVzLzcyOTdcbiAqL1xuZnVuY3Rpb24gbWFrZVNka0xvZ2dlclNhZmVCeUJpbmRpbmdUaGlzKGxvZ2dlcjogSVNka0xvZ2dlcik6IElTZGtMb2dnZXIge1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiBsb2dnZXIuZGVidWcuYmluZChsb2dnZXIpLFxuICAgIGluZm86IGxvZ2dlci5pbmZvLmJpbmQobG9nZ2VyKSxcbiAgICB3YXJuOiBsb2dnZXIud2Fybi5iaW5kKGxvZ2dlciksXG4gICAgZXJyb3I6IGxvZ2dlci5lcnJvci5iaW5kKGxvZ2dlciksXG4gIH07XG59XG4iXX0=