@aws-cdk/aws-bedrock-agentcore-alpha 2.253.1-alpha.0 → 2.255.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/.jsii +16960 -11718
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/README.md +57 -2910
  4. package/lib/evaluation/custom-evaluator.d.ts +9 -0
  5. package/lib/evaluation/custom-evaluator.js +8 -2
  6. package/lib/evaluation/data-source.js +1 -1
  7. package/lib/evaluation/evaluator-base.js +1 -1
  8. package/lib/evaluation/evaluator-config.js +2 -2
  9. package/lib/evaluation/evaluator.js +1 -1
  10. package/lib/evaluation/online-evaluation-base.js +1 -1
  11. package/lib/evaluation/online-evaluation.d.ts +9 -0
  12. package/lib/evaluation/online-evaluation.js +8 -2
  13. package/lib/evaluation/types.js +5 -5
  14. package/lib/evaluation/validation-helpers.d.ts +8 -0
  15. package/lib/evaluation/validation-helpers.js +62 -1
  16. package/lib/gateway/gateway-base.js +1 -1
  17. package/lib/gateway/gateway.d.ts +3 -2
  18. package/lib/gateway/gateway.js +3 -3
  19. package/lib/gateway/inbound-auth/authorizer.js +4 -4
  20. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  21. package/lib/gateway/interceptor.js +1 -1
  22. package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
  23. package/lib/gateway/outbound-auth/api-key.js +63 -21
  24. package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
  25. package/lib/gateway/outbound-auth/credential-provider.js +49 -2
  26. package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
  27. package/lib/gateway/outbound-auth/iam-role.js +3 -5
  28. package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
  29. package/lib/gateway/outbound-auth/oauth.js +70 -20
  30. package/lib/gateway/perms.d.ts +15 -3
  31. package/lib/gateway/perms.js +24 -9
  32. package/lib/gateway/protocol.js +2 -2
  33. package/lib/gateway/targets/schema/api-schema.js +4 -4
  34. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  35. package/lib/gateway/targets/target-base.js +1 -1
  36. package/lib/gateway/targets/target-configuration.js +6 -6
  37. package/lib/gateway/targets/target.js +3 -3
  38. package/lib/identity/api-key-credential-provider.d.ts +217 -0
  39. package/lib/identity/api-key-credential-provider.js +249 -0
  40. package/lib/identity/grant-helpers.d.ts +74 -0
  41. package/lib/identity/grant-helpers.js +132 -0
  42. package/lib/identity/oauth2-credential-provider.d.ts +679 -0
  43. package/lib/identity/oauth2-credential-provider.js +863 -0
  44. package/lib/identity/perms.d.ts +119 -0
  45. package/lib/identity/perms.js +178 -0
  46. package/lib/identity/validation-helpers.d.ts +61 -0
  47. package/lib/identity/validation-helpers.js +156 -0
  48. package/lib/identity/workload-identity.d.ts +186 -0
  49. package/lib/identity/workload-identity.js +212 -0
  50. package/lib/index.d.ts +4 -0
  51. package/lib/index.js +8 -1
  52. package/lib/memory/memory-strategy.js +1 -1
  53. package/lib/memory/memory.js +2 -2
  54. package/lib/memory/strategies/managed-strategy.js +1 -1
  55. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  56. package/lib/memory/validation-helpers.js +2 -2
  57. package/lib/network/network-configuration.js +4 -4
  58. package/lib/policy/perms.d.ts +0 -6
  59. package/lib/policy/perms.js +1 -7
  60. package/lib/policy/policy-base.js +1 -1
  61. package/lib/policy/policy-engine-base.js +1 -1
  62. package/lib/policy/policy-engine.js +1 -1
  63. package/lib/policy/policy-statement.d.ts +2 -1
  64. package/lib/policy/policy-statement.js +14 -12
  65. package/lib/policy/policy-types.js +1 -1
  66. package/lib/policy/policy.js +1 -1
  67. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  68. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  69. package/lib/runtime/observability.js +2 -2
  70. package/lib/runtime/runtime-artifact.d.ts +11 -3
  71. package/lib/runtime/runtime-artifact.js +12 -4
  72. package/lib/runtime/runtime-base.js +1 -1
  73. package/lib/runtime/runtime-endpoint-base.js +1 -1
  74. package/lib/runtime/runtime-endpoint.js +1 -1
  75. package/lib/runtime/runtime.js +1 -1
  76. package/lib/runtime/types.d.ts +7 -1
  77. package/lib/runtime/types.js +7 -1
  78. package/lib/tools/browser.js +2 -2
  79. package/lib/tools/code-interpreter.js +2 -2
  80. package/package.json +18 -10
  81. package/rosetta/policy.ts-fixture +11 -0
@@ -12,12 +12,6 @@
12
12
  *
13
13
  * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy-permissions.html
14
14
  *
15
- * TODO: When this package graduates from alpha and is moved into aws-cdk-lib (and renamed from
16
- * `aws-bedrock-agentcore-alpha` to `aws-bedrockagentcore` to align with the L1 module name),
17
- * replace this file with an auto-generated grants class following the CDK Design Guidelines:
18
- * @see https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#grants
19
- * This requires creating a `grants.json` file at the package root, after which the tooling
20
- * will auto-generate the `*Grants` class on every `yarn build`.
21
15
  */
22
16
  /**
23
17
  * Runtime evaluation permissions for PolicyEngine (data plane).
@@ -13,12 +13,6 @@
13
13
  *
14
14
  * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy-permissions.html
15
15
  *
16
- * TODO: When this package graduates from alpha and is moved into aws-cdk-lib (and renamed from
17
- * `aws-bedrock-agentcore-alpha` to `aws-bedrockagentcore` to align with the L1 module name),
18
- * replace this file with an auto-generated grants class following the CDK Design Guidelines:
19
- * @see https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#grants
20
- * This requires creating a `grants.json` file at the package root, after which the tooling
21
- * will auto-generate the `*Grants` class on every `yarn build`.
22
16
  */
23
17
  Object.defineProperty(exports, "__esModule", { value: true });
24
18
  exports.POLICY_READ_PERMS = exports.POLICY_ENGINE_READ_PERMS = exports.POLICY_ENGINE_EVALUATE_PERMS = void 0;
@@ -59,4 +53,4 @@ exports.POLICY_ENGINE_READ_PERMS = [
59
53
  exports.POLICY_READ_PERMS = [
60
54
  'bedrock-agentcore:GetPolicy',
61
55
  ];
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUFFSDs7Ozs7OztHQU9HO0FBQ1UsUUFBQSw0QkFBNEIsR0FBRztJQUMxQyxtQ0FBbUM7SUFDbkMsbUNBQW1DO0lBQ25DLDZDQUE2QztDQUM5QyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDVSxRQUFBLHdCQUF3QixHQUFHO0lBQ3RDLG1DQUFtQztDQUNwQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFDVSxRQUFBLGlCQUFpQixHQUFHO0lBQy9CLDZCQUE2QjtDQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJQU0gcGVybWlzc2lvbnMgZm9yIFBvbGljeUVuZ2luZSBhbmQgUG9saWN5IG9wZXJhdGlvbnMuXG4gKlxuICogSU1QT1JUQU5UOiBUaGlzIG1vZHVsZSBjb250YWlucyBEQVRBIFBMQU5FIChydW50aW1lKSBwZXJtaXNzaW9ucyBvbmx5LlxuICpcbiAqIENvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucyAoQ3JlYXRlL1VwZGF0ZS9EZWxldGUpIGFyZSBwZXJmb3JtZWQgYnkgQVdTIENsb3VkRm9ybWF0aW9uXG4gKiBkdXJpbmcgYGNkayBkZXBsb3lgIGFuZCBkbyBub3QgbmVlZCB0byBiZSBncmFudGVkIHRvIGFwcGxpY2F0aW9uIHJ1bnRpbWUgcm9sZXMuXG4gKlxuICogV2hlbiB5b3UgcnVuIGBjZGsgZGVwbG95YCwgQ2xvdWRGb3JtYXRpb24gdXNlcyBpdHMgb3duIHNlcnZpY2UgcHJpbmNpcGFsIHRvIGNyZWF0ZS91cGRhdGUvZGVsZXRlXG4gKiBQb2xpY3lFbmdpbmUgYW5kIFBvbGljeSByZXNvdXJjZXMuIFlvdXIgSUFNIHVzZXIvcm9sZSBydW5uaW5nIGBjZGsgZGVwbG95YCBuZWVkcyBjb250cm9sIHBsYW5lXG4gKiBwZXJtaXNzaW9ucyBpbiB0aGVpciBJQU0gcG9saWNpZXMsIGJ1dCB0aGVzZSBzaG91bGQgTk9UIGJlIGdyYW50ZWQgdGhyb3VnaCBDREsgY29uc3RydWN0IGdyYW50IG1ldGhvZHMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3BvbGljeS1wZXJtaXNzaW9ucy5odG1sXG4gKlxuICogVE9ETzogV2hlbiB0aGlzIHBhY2thZ2UgZ3JhZHVhdGVzIGZyb20gYWxwaGEgYW5kIGlzIG1vdmVkIGludG8gYXdzLWNkay1saWIgKGFuZCByZW5hbWVkIGZyb21cbiAqIGBhd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGFgIHRvIGBhd3MtYmVkcm9ja2FnZW50Y29yZWAgdG8gYWxpZ24gd2l0aCB0aGUgTDEgbW9kdWxlIG5hbWUpLFxuICogcmVwbGFjZSB0aGlzIGZpbGUgd2l0aCBhbiBhdXRvLWdlbmVyYXRlZCBncmFudHMgY2xhc3MgZm9sbG93aW5nIHRoZSBDREsgRGVzaWduIEd1aWRlbGluZXM6XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vZG9jcy9ERVNJR05fR1VJREVMSU5FUy5tZCNncmFudHNcbiAqIFRoaXMgcmVxdWlyZXMgY3JlYXRpbmcgYSBgZ3JhbnRzLmpzb25gIGZpbGUgYXQgdGhlIHBhY2thZ2Ugcm9vdCwgYWZ0ZXIgd2hpY2ggdGhlIHRvb2xpbmdcbiAqIHdpbGwgYXV0by1nZW5lcmF0ZSB0aGUgYCpHcmFudHNgIGNsYXNzIG9uIGV2ZXJ5IGB5YXJuIGJ1aWxkYC5cbiAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgZXZhbHVhdGlvbiBwZXJtaXNzaW9ucyBmb3IgUG9saWN5RW5naW5lIChkYXRhIHBsYW5lKS5cbiAqXG4gKiBUaGVzZSBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgZm9yIGV2YWx1YXRpbmcgYXV0aG9yaXphdGlvbiBwb2xpY2llcyBhdCBydW50aW1lLlxuICogR3JhbnQgdGhlc2UgdG8gR2F0ZXdheSBleGVjdXRpb24gcm9sZXMgdGhhdCBldmFsdWF0ZSBwb2xpY2llcyBkdXJpbmcgYWdlbnQgcmVxdWVzdHMuXG4gKlxuICogVXNhZ2U6IHBvbGljeUVuZ2luZS5ncmFudEV2YWx1YXRlKGdhdGV3YXlSb2xlKVxuICovXG5leHBvcnQgY29uc3QgUE9MSUNZX0VOR0lORV9FVkFMVUFURV9QRVJNUyA9IFtcbiAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFBvbGljeUVuZ2luZScsXG4gICdiZWRyb2NrLWFnZW50Y29yZTpBdXRob3JpemVBY3Rpb24nLFxuICAnYmVkcm9jay1hZ2VudGNvcmU6UGFydGlhbGx5QXV0aG9yaXplQWN0aW9ucycsXG5dO1xuXG4vKipcbiAqIFJlYWQgcGVybWlzc2lvbnMgZm9yIFBvbGljeUVuZ2luZSAoZGF0YSBwbGFuZSkuXG4gKlxuICogVGhlc2UgcGVybWlzc2lvbnMgYWxsb3cgcmVhZGluZyBwb2xpY3kgZW5naW5lIGNvbmZpZ3VyYXRpb24gYXQgcnVudGltZS5cbiAqIFR5cGljYWxseSB1c2VkIGZvciBtb25pdG9yaW5nLCBvYnNlcnZhYmlsaXR5LCBvciByZWFkLW9ubHkgYWRtaW5pc3RyYXRpdmUgdG9vbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQT0xJQ1lfRU5HSU5FX1JFQURfUEVSTVMgPSBbXG4gICdiZWRyb2NrLWFnZW50Y29yZTpHZXRQb2xpY3lFbmdpbmUnLFxuXTtcblxuLyoqXG4gKiBSZWFkIHBlcm1pc3Npb25zIGZvciBQb2xpY3kgKGRhdGEgcGxhbmUpLlxuICpcbiAqIFRoZXNlIHBlcm1pc3Npb25zIGFsbG93IHJlYWRpbmcgcG9saWN5IGNvbmZpZ3VyYXRpb24gYXQgcnVudGltZS5cbiAqIEdyYW50IHRoZXNlIHRvIG1vbml0b3Jpbmcgb3IgYXVkaXQgcm9sZXMgdGhhdCBuZWVkIHRvIGluc3BlY3QgcG9saWN5IGRlZmluaXRpb25zLlxuICpcbiAqIEFjdGlvbnM6XG4gKiAtIGBiZWRyb2NrLWFnZW50Y29yZTpHZXRQb2xpY3lgIC0gUmV0cmlldmUgc3BlY2lmaWMgcG9saWN5IGNvbmZpZ3VyYXRpb24gYW5kIENlZGFyIHN0YXRlbWVudFxuICpcbiAqIE5vdGU6IGBMaXN0UG9saWNpZXNgIGlzIGludGVudGlvbmFsbHkgZXhjbHVkZWQgYXMgaXQncyBhbiBhZG1pbmlzdHJhdGl2ZSBvcGVyYXRpb24uXG4gKiBBcHBsaWNhdGlvbnMgc2hvdWxkIHJlZmVyZW5jZSBzcGVjaWZpYyBwb2xpY2llcyBieSBJRC9BUk4sIG5vdCBsaXN0IGFsbCBwb2xpY2llcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBPTElDWV9SRUFEX1BFUk1TID0gW1xuICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0UG9saWN5Jyxcbl07XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVIOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLDRCQUE0QixHQUFHO0lBQzFDLG1DQUFtQztJQUNuQyxtQ0FBbUM7SUFDbkMsNkNBQTZDO0NBQzlDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNVLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsbUNBQW1DO0NBQ3BDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNVLFFBQUEsaUJBQWlCLEdBQUc7SUFDL0IsNkJBQTZCO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIElBTSBwZXJtaXNzaW9ucyBmb3IgUG9saWN5RW5naW5lIGFuZCBQb2xpY3kgb3BlcmF0aW9ucy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgbW9kdWxlIGNvbnRhaW5zIERBVEEgUExBTkUgKHJ1bnRpbWUpIHBlcm1pc3Npb25zIG9ubHkuXG4gKlxuICogQ29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChDcmVhdGUvVXBkYXRlL0RlbGV0ZSkgYXJlIHBlcmZvcm1lZCBieSBBV1MgQ2xvdWRGb3JtYXRpb25cbiAqIGR1cmluZyBgY2RrIGRlcGxveWAgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGdyYW50ZWQgdG8gYXBwbGljYXRpb24gcnVudGltZSByb2xlcy5cbiAqXG4gKiBXaGVuIHlvdSBydW4gYGNkayBkZXBsb3lgLCBDbG91ZEZvcm1hdGlvbiB1c2VzIGl0cyBvd24gc2VydmljZSBwcmluY2lwYWwgdG8gY3JlYXRlL3VwZGF0ZS9kZWxldGVcbiAqIFBvbGljeUVuZ2luZSBhbmQgUG9saWN5IHJlc291cmNlcy4gWW91ciBJQU0gdXNlci9yb2xlIHJ1bm5pbmcgYGNkayBkZXBsb3lgIG5lZWRzIGNvbnRyb2wgcGxhbmVcbiAqIHBlcm1pc3Npb25zIGluIHRoZWlyIElBTSBwb2xpY2llcywgYnV0IHRoZXNlIHNob3VsZCBOT1QgYmUgZ3JhbnRlZCB0aHJvdWdoIENESyBjb25zdHJ1Y3QgZ3JhbnQgbWV0aG9kcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcG9saWN5LXBlcm1pc3Npb25zLmh0bWxcbiAqXG4gKi9cblxuLyoqXG4gKiBSdW50aW1lIGV2YWx1YXRpb24gcGVybWlzc2lvbnMgZm9yIFBvbGljeUVuZ2luZSAoZGF0YSBwbGFuZSkuXG4gKlxuICogVGhlc2UgcGVybWlzc2lvbnMgYXJlIHJlcXVpcmVkIGZvciBldmFsdWF0aW5nIGF1dGhvcml6YXRpb24gcG9saWNpZXMgYXQgcnVudGltZS5cbiAqIEdyYW50IHRoZXNlIHRvIEdhdGV3YXkgZXhlY3V0aW9uIHJvbGVzIHRoYXQgZXZhbHVhdGUgcG9saWNpZXMgZHVyaW5nIGFnZW50IHJlcXVlc3RzLlxuICpcbiAqIFVzYWdlOiBwb2xpY3lFbmdpbmUuZ3JhbnRFdmFsdWF0ZShnYXRld2F5Um9sZSlcbiAqL1xuZXhwb3J0IGNvbnN0IFBPTElDWV9FTkdJTkVfRVZBTFVBVEVfUEVSTVMgPSBbXG4gICdiZWRyb2NrLWFnZW50Y29yZTpHZXRQb2xpY3lFbmdpbmUnLFxuICAnYmVkcm9jay1hZ2VudGNvcmU6QXV0aG9yaXplQWN0aW9uJyxcbiAgJ2JlZHJvY2stYWdlbnRjb3JlOlBhcnRpYWxseUF1dGhvcml6ZUFjdGlvbnMnLFxuXTtcblxuLyoqXG4gKiBSZWFkIHBlcm1pc3Npb25zIGZvciBQb2xpY3lFbmdpbmUgKGRhdGEgcGxhbmUpLlxuICpcbiAqIFRoZXNlIHBlcm1pc3Npb25zIGFsbG93IHJlYWRpbmcgcG9saWN5IGVuZ2luZSBjb25maWd1cmF0aW9uIGF0IHJ1bnRpbWUuXG4gKiBUeXBpY2FsbHkgdXNlZCBmb3IgbW9uaXRvcmluZywgb2JzZXJ2YWJpbGl0eSwgb3IgcmVhZC1vbmx5IGFkbWluaXN0cmF0aXZlIHRvb2xzLlxuICovXG5leHBvcnQgY29uc3QgUE9MSUNZX0VOR0lORV9SRUFEX1BFUk1TID0gW1xuICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0UG9saWN5RW5naW5lJyxcbl07XG5cbi8qKlxuICogUmVhZCBwZXJtaXNzaW9ucyBmb3IgUG9saWN5IChkYXRhIHBsYW5lKS5cbiAqXG4gKiBUaGVzZSBwZXJtaXNzaW9ucyBhbGxvdyByZWFkaW5nIHBvbGljeSBjb25maWd1cmF0aW9uIGF0IHJ1bnRpbWUuXG4gKiBHcmFudCB0aGVzZSB0byBtb25pdG9yaW5nIG9yIGF1ZGl0IHJvbGVzIHRoYXQgbmVlZCB0byBpbnNwZWN0IHBvbGljeSBkZWZpbml0aW9ucy5cbiAqXG4gKiBBY3Rpb25zOlxuICogLSBgYmVkcm9jay1hZ2VudGNvcmU6R2V0UG9saWN5YCAtIFJldHJpZXZlIHNwZWNpZmljIHBvbGljeSBjb25maWd1cmF0aW9uIGFuZCBDZWRhciBzdGF0ZW1lbnRcbiAqXG4gKiBOb3RlOiBgTGlzdFBvbGljaWVzYCBpcyBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkIGFzIGl0J3MgYW4gYWRtaW5pc3RyYXRpdmUgb3BlcmF0aW9uLlxuICogQXBwbGljYXRpb25zIHNob3VsZCByZWZlcmVuY2Ugc3BlY2lmaWMgcG9saWNpZXMgYnkgSUQvQVJOLCBub3QgbGlzdCBhbGwgcG9saWNpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBQT0xJQ1lfUkVBRF9QRVJNUyA9IFtcbiAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFBvbGljeScsXG5dO1xuIl19
@@ -15,7 +15,7 @@ const perms_1 = require("./perms");
15
15
  * Contains methods and attributes valid for Policies either created with CDK or imported.
16
16
  */
17
17
  class PolicyBase extends aws_cdk_lib_1.Resource {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyBase", version: "2.253.1-alpha.0" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyBase", version: "2.255.0-alpha.0" };
19
19
  /**
20
20
  * A reference to this Policy resource.
21
21
  */
@@ -16,7 +16,7 @@ const perms_1 = require("./perms");
16
16
  * Contains methods and attributes valid for PolicyEngines either created with CDK or imported.
17
17
  */
18
18
  class PolicyEngineBase extends aws_cdk_lib_1.Resource {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngineBase", version: "2.253.1-alpha.0" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngineBase", version: "2.255.0-alpha.0" };
20
20
  /**
21
21
  * A reference to this PolicyEngine resource.
22
22
  */
@@ -85,7 +85,7 @@ let PolicyEngine = (() => {
85
85
  PolicyEngine = _classThis = _classDescriptor.value;
86
86
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
87
87
  }
88
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngine", version: "2.253.1-alpha.0" };
88
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngine", version: "2.255.0-alpha.0" };
89
89
  /** Uniquely identifies this class. */
90
90
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.PolicyEngine';
91
91
  /**
@@ -17,7 +17,8 @@ declare class ConditionExpression {
17
17
  private readonly attribute;
18
18
  private readonly operator;
19
19
  private readonly value;
20
- constructor(attribute: string, operator: string, value: string | number | boolean);
20
+ private readonly isCedarExpression;
21
+ constructor(attribute: string, operator: string, value: string | number | boolean, isCedarExpression?: boolean);
21
22
  toCedar(): string;
22
23
  }
23
24
  /**
@@ -88,13 +88,15 @@ class ConditionExpression {
88
88
  attribute;
89
89
  operator;
90
90
  value;
91
- constructor(attribute, operator, value) {
91
+ isCedarExpression;
92
+ constructor(attribute, operator, value, isCedarExpression = false) {
92
93
  this.attribute = attribute;
93
94
  this.operator = operator;
94
95
  this.value = value;
96
+ this.isCedarExpression = isCedarExpression;
95
97
  }
96
98
  toCedar() {
97
- const formattedValue = typeof this.value === 'string' && !this.value.startsWith('ip(')
99
+ const formattedValue = (typeof this.value === 'string' && !this.isCedarExpression)
98
100
  ? `"${this.value}"`
99
101
  : this.value;
100
102
  return `${this.attribute} ${this.operator} ${formattedValue}`;
@@ -107,7 +109,7 @@ class ConditionExpression {
107
109
  * Supports logical operators (AND, OR) and various comparison operators.
108
110
  */
109
111
  class ConditionBuilder {
110
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionBuilder", version: "2.253.1-alpha.0" };
112
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionBuilder", version: "2.255.0-alpha.0" };
111
113
  conditions = [];
112
114
  operators = [];
113
115
  /**
@@ -194,7 +196,7 @@ exports.ConditionBuilder = ConditionBuilder;
194
196
  class ConditionalPolicyStatement {
195
197
  policyStatement;
196
198
  conditionBuilder;
197
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionalPolicyStatement", version: "2.253.1-alpha.0" };
199
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionalPolicyStatement", version: "2.255.0-alpha.0" };
198
200
  constructor(policyStatement, conditionBuilder) {
199
201
  this.policyStatement = policyStatement;
200
202
  this.conditionBuilder = conditionBuilder;
@@ -273,7 +275,7 @@ class ConditionalAttributeAccessor {
273
275
  path;
274
276
  parent;
275
277
  conditionBuilder;
276
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionalAttributeAccessor", version: "2.253.1-alpha.0" };
278
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ConditionalAttributeAccessor", version: "2.255.0-alpha.0" };
277
279
  constructor(path, parent, conditionBuilder) {
278
280
  this.path = path;
279
281
  this.parent = parent;
@@ -337,7 +339,7 @@ class ConditionalAttributeAccessor {
337
339
  * @param ipRange - CIDR notation (e.g., '192.168.1.0/24')
338
340
  */
339
341
  isInRange(ipRange) {
340
- this.conditionBuilder._addCondition(new ConditionExpression(this.path, 'isInRange', `ip("${ipRange}")`));
342
+ this.conditionBuilder._addCondition(new ConditionExpression(this.path, 'isInRange', `ip("${ipRange}")`, true));
341
343
  return this.parent;
342
344
  }
343
345
  /**
@@ -352,7 +354,7 @@ class ConditionalAttributeAccessor {
352
354
  */
353
355
  isIn(values) {
354
356
  const formattedValues = values.map(v => typeof v === 'string' ? `"${v}"` : v).join(', ');
355
- this.conditionBuilder._addCondition(new ConditionExpression(this.path, 'in', `[${formattedValues}]`));
357
+ this.conditionBuilder._addCondition(new ConditionExpression(this.path, 'in', `[${formattedValues}]`, true));
356
358
  return this.parent;
357
359
  }
358
360
  }
@@ -365,7 +367,7 @@ exports.ConditionalAttributeAccessor = ConditionalAttributeAccessor;
365
367
  class AttributeAccessor {
366
368
  path;
367
369
  parent;
368
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AttributeAccessor", version: "2.253.1-alpha.0" };
370
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AttributeAccessor", version: "2.255.0-alpha.0" };
369
371
  constructor(path, parent) {
370
372
  this.path = path;
371
373
  this.parent = parent;
@@ -421,7 +423,7 @@ class AttributeAccessor {
421
423
  * @param ipRange - CIDR notation (e.g., '192.168.1.0/24')
422
424
  */
423
425
  isInRange(ipRange) {
424
- return this.parent._addCondition(new ConditionExpression(this.path, 'isInRange', `ip("${ipRange}")`));
426
+ return this.parent._addCondition(new ConditionExpression(this.path, 'isInRange', `ip("${ipRange}")`, true));
425
427
  }
426
428
  /**
427
429
  * String contains check.
@@ -434,7 +436,7 @@ class AttributeAccessor {
434
436
  */
435
437
  isIn(values) {
436
438
  const formattedValues = values.map(v => typeof v === 'string' ? `"${v}"` : v).join(', ');
437
- return this.parent._addCondition(new ConditionExpression(this.path, 'in', `[${formattedValues}]`));
439
+ return this.parent._addCondition(new ConditionExpression(this.path, 'in', `[${formattedValues}]`, true));
438
440
  }
439
441
  }
440
442
  exports.AttributeAccessor = AttributeAccessor;
@@ -552,7 +554,7 @@ exports.AttributeAccessor = AttributeAccessor;
552
554
  * });
553
555
  */
554
556
  class PolicyStatement {
555
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyStatement", version: "2.253.1-alpha.0" };
557
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyStatement", version: "2.255.0-alpha.0" };
556
558
  /**
557
559
  * Create a permit statement - allows the action if conditions are met.
558
560
  *
@@ -924,4 +926,4 @@ class PolicyStatement {
924
926
  }
925
927
  }
926
928
  exports.PolicyStatement = PolicyStatement;
927
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LXN0YXRlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvbGljeS1zdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILHdEQUFzRTtBQUN0RSw0RUFBNEQ7QUFFNUQ7OztHQUdHO0FBQ0gsSUFBSyxZQVVKO0FBVkQsV0FBSyxZQUFZO0lBQ2Y7O09BRUc7SUFDSCxpQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWSSxZQUFZLEtBQVosWUFBWSxRQVVoQjtBQUVEOzs7R0FHRztBQUNILElBQUssY0FVSjtBQVZELFdBQUssY0FBYztJQUNqQjs7T0FFRztJQUNILDZCQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWSSxjQUFjLEtBQWQsY0FBYyxRQVVsQjtBQUVEOzs7R0FHRztBQUNILElBQUssV0FVSjtBQVZELFdBQUssV0FBVztJQUNkOztPQUVHO0lBQ0gsMEJBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVZJLFdBQVcsS0FBWCxXQUFXLFFBVWY7QUFFRDs7O0dBR0c7QUFDSCxJQUFLLGFBZUo7QUFmRCxXQUFLLGFBQWE7SUFDaEI7O09BRUc7SUFDSCw0QkFBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxzQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBZkksYUFBYSxLQUFiLGFBQWEsUUFlakI7QUFnQ0Q7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQjtJQUVKO0lBQ0E7SUFDQTtJQUhuQixZQUNtQixTQUFpQixFQUNqQixRQUFnQixFQUNoQixLQUFnQztRQUZoQyxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsVUFBSyxHQUFMLEtBQUssQ0FBMkI7S0FDL0M7SUFFRyxPQUFPO1FBQ1osTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNwRixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2YsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxjQUFjLEVBQUUsQ0FBQztLQUMvRDtDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGdCQUFnQjs7SUFDbkIsVUFBVSxHQUEwQixFQUFFLENBQUM7SUFDdkMsU0FBUyxHQUFvQixFQUFFLENBQUM7SUFFeEM7Ozs7Ozs7T0FPRztJQUNJLGtCQUFrQixDQUFDLFNBQWlCO1FBQ3pDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlEO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3hDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdEO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVEO0lBRUQ7O09BRUc7SUFDSSxHQUFHO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVEOztPQUVHO0lBQ0ksRUFBRTtRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsU0FBOEI7UUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVEOzs7T0FHRztJQUNJLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkOztBQWxGSCw0Q0FtRkM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLDBCQUEwQjtJQUVsQjtJQUNBOztJQUZuQixZQUNtQixlQUFnQyxFQUNoQyxnQkFBa0M7UUFEbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7Ozs7Ozs7K0NBSDFDLDBCQUEwQjs7OztLQUlqQztJQUVKOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxTQUFpQjtRQUN6QyxPQUFPLElBQUksNEJBQTRCLENBQUMsYUFBYSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDaEc7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsU0FBaUI7UUFDeEMsT0FBTyxJQUFJLDRCQUE0QixDQUFDLFlBQVksU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQy9GO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxXQUFXLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUM5RjtJQUVEOztPQUVHO0lBQ0ksR0FBRztRQUNSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7O09BRUc7SUFDSSxFQUFFO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRDs7Ozs7T0FLRztJQUNJLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7S0FDN0I7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDdEM7O0FBaEVILGdFQWlFQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLDRCQUE0QjtJQUVwQjtJQUNBO0lBQ0E7O0lBSG5CLFlBQ21CLElBQVksRUFDWixNQUFrQyxFQUNsQyxnQkFBa0M7UUFGbEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQTRCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7Ozs7Ozs7K0NBSjFDLDRCQUE0Qjs7OztLQUtuQztJQUVKOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEtBQWdDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQ2pDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ2hELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxLQUFnQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUNqQyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUNoRCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3BCO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUNqQyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUMvQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3BCO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQ2pDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ2hELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQ2pDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQy9DLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLEtBQWE7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FDakMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDaEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNwQjtJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsT0FBZTtRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUNqQyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sT0FBTyxJQUFJLENBQUMsQ0FDcEUsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNwQjtJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FDakMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FDdEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNwQjtJQUVEOztPQUVHO0lBQ0ksSUFBSSxDQUFDLE1BQTJCO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDckMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FDakMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQ2pFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7O0FBcEdILG9FQXFHQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGlCQUFpQjtJQUVUO0lBQ0E7O0lBRm5CLFlBQ21CLElBQVksRUFDWixNQUF3QjtRQUR4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBa0I7Ozs7OzsrQ0FIaEMsaUJBQWlCOzs7O0tBSXhCO0lBRUo7O09BRUc7SUFDSSxPQUFPLENBQUMsS0FBZ0M7UUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDaEQsQ0FBQztLQUNIO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsS0FBZ0M7UUFDaEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDaEQsQ0FBQztLQUNIO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUM5QixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUMvQyxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDaEQsQ0FBQztLQUNIO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsS0FBYTtRQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUM5QixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUMvQyxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLEtBQWE7UUFDdkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDaEQsQ0FBQztLQUNIO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQzlCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxPQUFPLElBQUksQ0FBQyxDQUNwRSxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQzlCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQ3RELENBQUM7S0FDSDtJQUVEOztPQUVHO0lBQ0ksSUFBSSxDQUFDLE1BQTJCO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDckMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQ2pFLENBQUM7S0FDSDs7QUExRkgsOENBMkZDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnSEc7QUFDSCxNQUFhLGVBQWU7O0lBQzFCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakQ7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxNQUFNO1FBQ2xCLE9BQU8sSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2pEO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFzQjtRQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0MsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFTyxNQUFNLENBQWU7SUFDckIsZUFBZSxDQUFtQjtJQUNsQyxZQUFZLENBQWdCO0lBQzVCLGNBQWMsQ0FBa0I7SUFDaEMsY0FBYyxDQUFvQjtJQUNsQyxnQkFBZ0IsQ0FBb0I7SUFDcEMsUUFBUSxDQUFVO0lBRTFCLFlBQW9CLE1BQW9CO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0tBQ3RCO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFlBQVksQ0FBQyxVQUFrQixFQUFFLFFBQWlCO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQzlCLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQzNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQzlCLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtTQUN2RCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVEOzs7O09BSUc7SUFDSSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsT0FBaUI7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVE7WUFDM0IsT0FBTztTQUNSLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLE1BQWM7UUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNqQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUJHO0lBQ0ksY0FBYyxDQUFDLGFBQXFCLG9CQUFvQjtRQUM3RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSTtZQUN6QixVQUFVO1NBQ1gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSSxjQUFjLENBQUMsVUFBa0I7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNwQixLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUk7WUFDekIsVUFBVTtTQUNYLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxVQUFVLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtRQUNyRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtZQUM3QixVQUFVO1lBQ1YsU0FBUztTQUNWLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDN0MsT0FBTyxJQUFJLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbEU7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU07UUFDWCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9DLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDcEU7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksT0FBTztRQUNaLGdEQUFnRDtRQUNoRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsbUJBQW1CLEVBQUUsd0VBQXdFLENBQUMsQ0FBQztRQUN0SSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksZ0NBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdCQUFnQixFQUFFLDhEQUE4RCxDQUFDLENBQUM7UUFDekgsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxrQkFBa0IsRUFBRSxtRUFBbUUsQ0FBQyxDQUFDO1FBQ2hJLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUVoQyxZQUFZO1FBQ1osS0FBSyxJQUFJLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztRQUUzQyxTQUFTO1FBQ1QsS0FBSyxJQUFJLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFFeEMsV0FBVztRQUNYLEtBQUssSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBRXpDLEtBQUssSUFBSSxHQUFHLENBQUM7UUFFYixrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLEtBQUssSUFBSSxlQUFlLFNBQVMsS0FBSyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssSUFBSSxpQkFBaUIsV0FBVyxLQUFLLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLElBQUksR0FBRyxDQUFDO1FBQ2IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEseUJBQXlCLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUMvRCxPQUFPLGdCQUFnQixVQUFVLE1BQU0sUUFBUSxHQUFHLENBQUM7UUFDckQsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsT0FBTyxnQkFBZ0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsQ0FBQztRQUMvRixDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLE9BQU8sZ0JBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDMUQ7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGdDQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxzQkFBc0IsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFRLENBQUM7UUFFM0MsaUZBQWlGO1FBQ2pGLHVDQUF1QztRQUN2QyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO1lBQzlDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQiwwREFBMEQ7Z0JBQzFELGdEQUFnRDtnQkFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN0QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEdBQUcsU0FBUyxNQUFNLFVBQVUsR0FBRyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUNELHNEQUFzRDtZQUN0RCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxhQUFhLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sY0FBYyxnQkFBZ0IsR0FBRyxDQUFDO0tBQzFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsd0JBQXdCLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBRUQsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLEtBQUssYUFBYSxDQUFDLEdBQUc7Z0JBQ3BCLDRFQUE0RTtnQkFDNUUsT0FBTyxVQUFVLENBQUM7WUFFcEIsS0FBSyxhQUFhLENBQUMsSUFBSTtnQkFDckIscURBQXFEO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLGdDQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxvQkFBb0IsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO2dCQUNoSCxDQUFDO2dCQUNELE9BQU8sZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRXpELEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLHFEQUFxRDtnQkFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdEUsTUFBTSxJQUFJLGdDQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSwwQkFBMEIsRUFBRSw4REFBOEQsQ0FBQyxDQUFDO2dCQUNuSSxDQUFDO2dCQUNELE9BQU8sZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxDQUFDO1lBRTdGO2dCQUNFLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsc0JBQXNCLEVBQUUsMkJBQTJCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6SCxDQUFDO0tBQ0Y7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQ3JCLDZDQUE2QztnQkFDN0Msc0VBQXNFLENBQ3ZFLENBQUM7UUFDSixDQUFDO0tBQ0Y7O0FBOVpILDBDQStaQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuXG4vKipcbiAqIEVmZmVjdCBvZiB0aGUgcG9saWN5IHN0YXRlbWVudCAtIHdoZXRoZXIgdG8gcGVybWl0IG9yIGZvcmJpZCB0aGUgYWN0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmVudW0gUG9saWN5RWZmZWN0IHtcbiAgLyoqXG4gICAqIFBlcm1pdCB0aGUgYWN0aW9uIGlmIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgKi9cbiAgUEVSTUlUID0gJ3Blcm1pdCcsXG5cbiAgLyoqXG4gICAqIEZvcmJpZCAoZGVueSkgdGhlIGFjdGlvbiBpZiBjb25kaXRpb25zIGFyZSBtZXRcbiAgICovXG4gIEZPUkJJRCA9ICdmb3JiaWQnLFxufVxuXG4vKipcbiAqIFNjb3BlIGZvciBwcmluY2lwYWxzIC0gd2hldGhlciB0byBhcHBseSB0byBhbGwgcHJpbmNpcGFscyBvciBzcGVjaWZpYyBvbmVzLlxuICogQGludGVybmFsXG4gKi9cbmVudW0gUHJpbmNpcGFsU2NvcGUge1xuICAvKipcbiAgICogQXBwbHkgdG8gYWxsIHByaW5jaXBhbHNcbiAgICovXG4gIEFMTCA9ICdhbGwnLFxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBzcGVjaWZpYyBwcmluY2lwYWwocylcbiAgICovXG4gIFNQRUNJRklDID0gJ3NwZWNpZmljJyxcbn1cblxuLyoqXG4gKiBTY29wZSBmb3IgYWN0aW9ucyAtIHdoZXRoZXIgdG8gYXBwbHkgdG8gYWxsIGFjdGlvbnMgb3Igc3BlY2lmaWMgb25lcy5cbiAqIEBpbnRlcm5hbFxuICovXG5lbnVtIEFjdGlvblNjb3BlIHtcbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCBhY3Rpb25zXG4gICAqL1xuICBBTEwgPSAnYWxsJyxcblxuICAvKipcbiAgICogQXBwbHkgdG8gc3BlY2lmaWMgYWN0aW9uKHMpXG4gICAqL1xuICBTUEVDSUZJQyA9ICdzcGVjaWZpYycsXG59XG5cbi8qKlxuICogU2NvcGUgZm9yIHJlc291cmNlcyAtIHdoZXRoZXIgdG8gYXBwbHkgdG8gYWxsIHJlc291cmNlcywgcmVzb3VyY2UgdHlwZXMsIG9yIHNwZWNpZmljIG9uZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZW51bSBSZXNvdXJjZVNjb3BlIHtcbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCByZXNvdXJjZXMgKHdpbGRjYXJkIC0gbWF5IGJlIHJlamVjdGVkIGJ5IHNlcnZpY2UpXG4gICAqL1xuICBBTEwgPSAnYWxsJyxcblxuICAvKipcbiAgICogQXBwbHkgdG8gYWxsIHJlc291cmNlcyBvZiBhIHNwZWNpZmljIHR5cGVcbiAgICovXG4gIFRZUEUgPSAndHlwZScsXG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIHNwZWNpZmljIHJlc291cmNlKHMpXG4gICAqL1xuICBTUEVDSUZJQyA9ICdzcGVjaWZpYycsXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcHJpbmNpcGFsIHNwZWNpZmljYXRpb24gaW4gYSBwb2xpY3kgc3RhdGVtZW50LlxuICovXG5pbnRlcmZhY2UgUHJpbmNpcGFsQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2NvcGU6IFByaW5jaXBhbFNjb3BlO1xuICByZWFkb25seSBlbnRpdHlUeXBlPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRpdHlJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVtYmVyT2Y/OiB7XG4gICAgcmVhZG9ubHkgZW50aXR5VHlwZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGVudGl0eUlkOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYWN0aW9uIHNwZWNpZmljYXRpb24gaW4gYSBwb2xpY3kgc3RhdGVtZW50LlxuICovXG5pbnRlcmZhY2UgQWN0aW9uQ29uZmlnIHtcbiAgcmVhZG9ubHkgc2NvcGU6IEFjdGlvblNjb3BlO1xuICByZWFkb25seSBhY3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBpbiBhIHBvbGljeSBzdGF0ZW1lbnQuXG4gKi9cbmludGVyZmFjZSBSZXNvdXJjZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjb3BlOiBSZXNvdXJjZVNjb3BlO1xuICByZWFkb25seSBlbnRpdHlUeXBlPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRpdHlBcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgY29uZGl0aW9uIGV4cHJlc3Npb24gaW4gQ2VkYXIgcG9saWN5IGxhbmd1YWdlLlxuICovXG5jbGFzcyBDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbixcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NlZGFyKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXRoaXMudmFsdWUuc3RhcnRzV2l0aCgnaXAoJylcbiAgICAgID8gYFwiJHt0aGlzLnZhbHVlfVwiYFxuICAgICAgOiB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBgJHt0aGlzLmF0dHJpYnV0ZX0gJHt0aGlzLm9wZXJhdG9yfSAke2Zvcm1hdHRlZFZhbHVlfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZGVyIGZvciBjb25kaXRpb24gZXhwcmVzc2lvbnMgaW4gQ2VkYXIgcG9saWNpZXMuXG4gKlxuICogQ29uZGl0aW9ucyBkZWZpbmUgd2hlbiBhIHBvbGljeSBzdGF0ZW1lbnQgc2hvdWxkIGFwcGx5IG9yIG5vdCBhcHBseS5cbiAqIFN1cHBvcnRzIGxvZ2ljYWwgb3BlcmF0b3JzIChBTkQsIE9SKSBhbmQgdmFyaW91cyBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIGNvbmRpdGlvbnM6IENvbmRpdGlvbkV4cHJlc3Npb25bXSA9IFtdO1xuICBwcml2YXRlIG9wZXJhdG9yczogKCcmJicgfCAnfHwnKVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBhIHByaW5jaXBhbCBhdHRyaWJ1dGUgZm9yIGNvbXBhcmlzb24uXG4gICAqXG4gICAqIFByaW5jaXBhbCBhdHRyaWJ1dGVzIGNvbWUgZnJvbSB0aGUgYXV0aGVudGljYXRlZCB1c2VyL3NlcnZpY2UgbWFraW5nIHRoZSByZXF1ZXN0LlxuICAgKiBDb21tb24gYXR0cmlidXRlczogdXNlcm5hbWUsIHJvbGUsIGRlcGFydG1lbnQsIGdyb3VwcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0cmlidXRlIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCAnZGVwYXJ0bWVudCcsICdyb2xlJywgJ3VzZXJuYW1lJylcbiAgICovXG4gIHB1YmxpYyBwcmluY2lwYWxBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcpOiBBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVBY2Nlc3NvcihgcHJpbmNpcGFsLiR7YXR0cmlidXRlfWAsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBhIHJlc291cmNlIGF0dHJpYnV0ZSBmb3IgY29tcGFyaXNvbi5cbiAgICpcbiAgICogUmVzb3VyY2UgYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIHRhcmdldCByZXNvdXJjZSBiZWluZyBhY2Nlc3NlZC5cbiAgICogQ29tbW9uIGF0dHJpYnV0ZXM6IGFybiwgdHlwZSwgdGFncywgb3duZXIsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgJ2NvbmZpZGVudGlhbCcsICdvd25lcicsICdjbGFzc2lmaWNhdGlvbicpXG4gICAqL1xuICBwdWJsaWMgcmVzb3VyY2VBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcpOiBBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVBY2Nlc3NvcihgcmVzb3VyY2UuJHthdHRyaWJ1dGV9YCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzIGEgY29udGV4dCBhdHRyaWJ1dGUgZm9yIGNvbXBhcmlzb24uXG4gICAqXG4gICAqIENvbnRleHQgYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIHJlcXVlc3QgZW52aXJvbm1lbnQuXG4gICAqIENvbW1vbiBhdHRyaWJ1dGVzOiBzb3VyY2VJcCwgdGltZXN0YW1wLCBlbnZpcm9ubWVudCwgcmVnaW9uLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlIG5hbWUgKGUuZy4sICdzb3VyY2VJcCcsICdlbnZpcm9ubWVudCcsICd0aW1lc3RhbXAnKVxuICAgKi9cbiAgcHVibGljIGNvbnRleHRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcpOiBBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVBY2Nlc3NvcihgY29udGV4dC4ke2F0dHJpYnV0ZX1gLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpY2FsIEFORCBvcGVyYXRvciAtIGFsbCBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZS5cbiAgICovXG4gIHB1YmxpYyBhbmQoKTogdGhpcyB7XG4gICAgdGhpcy5vcGVyYXRvcnMucHVzaCgnJiYnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpY2FsIE9SIG9wZXJhdG9yIC0gYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiBtdXN0IGJlIHRydWUuXG4gICAqL1xuICBwdWJsaWMgb3IoKTogdGhpcyB7XG4gICAgdGhpcy5vcGVyYXRvcnMucHVzaCgnfHwnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gYWRkIGEgY29uZGl0aW9uIGV4cHJlc3Npb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9hZGRDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb25FeHByZXNzaW9uKTogdGhpcyB7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDZWRhciBjb25kaXRpb24gc3ludGF4LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9DZWRhcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbGV0IGNlZGFyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNlZGFyICs9IGAke3RoaXMuY29uZGl0aW9uc1tpXS50b0NlZGFyKCl9YDtcbiAgICAgIGlmIChpIDwgdGhpcy5vcGVyYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgIGNlZGFyICs9IGAgJHt0aGlzLm9wZXJhdG9yc1tpXX0gYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNlZGFyO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHBlciBjbGFzcyBmb3IgY29uZGl0aW9uYWxseSBidWlsZGluZyBwb2xpY3kgc3RhdGVtZW50cy5cbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBjaGFpbmluZyBjb25kaXRpb24gbWV0aG9kcyBhbmQgcmV0dXJuaW5nIHRvIHRoZSBwYXJlbnRcbiAqIFBvbGljeVN0YXRlbWVudCB3aGVuIGRvbmUuIEl0IHByb3hpZXMgY29uZGl0aW9uIGJ1aWxkaW5nIG1ldGhvZHMgZnJvbVxuICogQ29uZGl0aW9uQnVpbGRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb2xpY3lTdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmRpdGlvbkJ1aWxkZXI6IENvbmRpdGlvbkJ1aWxkZXIsXG4gICkge31cblxuICAvKipcbiAgICogQWNjZXNzIGEgcHJpbmNpcGFsIGF0dHJpYnV0ZSBmb3IgY29tcGFyaXNvbi5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgJ2RlcGFydG1lbnQnLCAncm9sZScsICd1c2VybmFtZScpXG4gICAqL1xuICBwdWJsaWMgcHJpbmNpcGFsQXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEF0dHJpYnV0ZUFjY2Vzc29yKGBwcmluY2lwYWwuJHthdHRyaWJ1dGV9YCwgdGhpcywgdGhpcy5jb25kaXRpb25CdWlsZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgYSByZXNvdXJjZSBhdHRyaWJ1dGUgZm9yIGNvbXBhcmlzb24uXG4gICAqXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlIG5hbWUgKGUuZy4sICdjb25maWRlbnRpYWwnLCAnb3duZXInLCAnY2xhc3NpZmljYXRpb24nKVxuICAgKi9cbiAgcHVibGljIHJlc291cmNlQXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEF0dHJpYnV0ZUFjY2Vzc29yKGByZXNvdXJjZS4ke2F0dHJpYnV0ZX1gLCB0aGlzLCB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBhIGNvbnRleHQgYXR0cmlidXRlIGZvciBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0cmlidXRlIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCAnc291cmNlSXAnLCAnZW52aXJvbm1lbnQnLCAndGltZXN0YW1wJylcbiAgICovXG4gIHB1YmxpYyBjb250ZXh0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEF0dHJpYnV0ZUFjY2Vzc29yKGBjb250ZXh0LiR7YXR0cmlidXRlfWAsIHRoaXMsIHRoaXMuY29uZGl0aW9uQnVpbGRlcik7XG4gIH1cblxuICAvKipcbiAgICogTG9naWNhbCBBTkQgb3BlcmF0b3IgLSBhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUuXG4gICAqL1xuICBwdWJsaWMgYW5kKCk6IHRoaXMge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5hbmQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpY2FsIE9SIG9wZXJhdG9yIC0gYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiBtdXN0IGJlIHRydWUuXG4gICAqL1xuICBwdWJsaWMgb3IoKTogdGhpcyB7XG4gICAgdGhpcy5jb25kaXRpb25CdWlsZGVyLm9yKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgY29uZGl0aW9uIGJ1aWxkaW5nIGFuZCByZXR1cm4gdG8gdGhlIFBvbGljeVN0YXRlbWVudC5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gZmluaXNoIGJ1aWxkaW5nIHdoZW4vdW5sZXNzIGNvbmRpdGlvbnMgYW5kIGNvbnRpbnVlXG4gICAqIGNvbmZpZ3VyaW5nIHRoZSBwb2xpY3kgc3RhdGVtZW50LlxuICAgKi9cbiAgcHVibGljIGRvbmUoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wb2xpY3lTdGF0ZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQWxpYXMgZm9yIGRvbmUoKSB0byBzdXBwb3J0IGZsdWVudCB1bmxlc3MoKSBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyB1bmxlc3MoKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnBvbGljeVN0YXRlbWVudC51bmxlc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIEFjY2Vzc29yIGZvciBidWlsZGluZyB0eXBlLXNhZmUgYXR0cmlidXRlIGNvbXBhcmlzb25zIHdpdGhpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLlxuICpcbiAqIFJldHVybnMgQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQgdG8gYWxsb3cgY2hhaW5pbmcgYmFjayB0byBwb2xpY3kgYnVpbGRpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbEF0dHJpYnV0ZUFjY2Vzc29yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXRoOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZGl0aW9uQnVpbGRlcjogQ29uZGl0aW9uQnVpbGRlcixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjb21wYXJpc29uICg9PSlcbiAgICovXG4gIHB1YmxpYyBlcXVhbFRvKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnPT0nLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogSW5lcXVhbGl0eSBjb21wYXJpc29uICghPSlcbiAgICovXG4gIHB1YmxpYyBub3RFcXVhbFRvKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnIT0nLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogTGVzcyB0aGFuIGNvbXBhcmlzb24gKDwpXG4gICAqL1xuICBwdWJsaWMgbGVzc1RoYW4odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJzwnLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogTGVzcyB0aGFuIG9yIGVxdWFscyBjb21wYXJpc29uICg8PSlcbiAgICovXG4gIHB1YmxpYyBsZXNzVGhhbk9yRXF1YWxUbyh2YWx1ZTogbnVtYmVyKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnPD0nLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogR3JlYXRlciB0aGFuIGNvbXBhcmlzb24gKD4pXG4gICAqL1xuICBwdWJsaWMgZ3JlYXRlclRoYW4odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz4nLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogR3JlYXRlciB0aGFuIG9yIGVxdWFscyBjb21wYXJpc29uICg+PSlcbiAgICovXG4gIHB1YmxpYyBncmVhdGVyVGhhbk9yRXF1YWxUbyh2YWx1ZTogbnVtYmVyKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnPj0nLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogSVAgcmFuZ2UgY2hlY2sgLSB0ZXN0cyBpZiBJUCBhZGRyZXNzIGlzIGluIENJRFIgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBpcFJhbmdlIC0gQ0lEUiBub3RhdGlvbiAoZS5nLiwgJzE5Mi4xNjguMS4wLzI0JylcbiAgICovXG4gIHB1YmxpYyBpc0luUmFuZ2UoaXBSYW5nZTogc3RyaW5nKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnaXNJblJhbmdlJywgYGlwKFwiJHtpcFJhbmdlfVwiKWApLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmluZyBjb250YWlucyBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBjb250YWlucyh2YWx1ZTogc3RyaW5nKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnY29udGFpbnMnLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYXR0cmlidXRlIGlzIGluIGEgc2V0L2xpc3QuXG4gICAqL1xuICBwdWJsaWMgaXNJbih2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWVzID0gdmFsdWVzLm1hcCh2ID0+XG4gICAgICB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBgXCIke3Z9XCJgIDogdixcbiAgICApLmpvaW4oJywgJyk7XG4gICAgdGhpcy5jb25kaXRpb25CdWlsZGVyLl9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICdpbicsIGBbJHtmb3JtYXR0ZWRWYWx1ZXN9XWApLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogQWNjZXNzb3IgZm9yIGJ1aWxkaW5nIHR5cGUtc2FmZSBhdHRyaWJ1dGUgY29tcGFyaXNvbnMuXG4gKlxuICogUHJvdmlkZXMgbWV0aG9kcyBmb3IgY29tbW9uIGNvbXBhcmlzb24gb3BlcmF0b3JzIHdpdGggcHJvcGVyIHR5cGUgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF0aDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBDb25kaXRpb25CdWlsZGVyLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNvbXBhcmlzb24gKD09KVxuICAgKi9cbiAgcHVibGljIGVxdWFsVG8odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz09JywgdmFsdWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5lcXVhbGl0eSBjb21wYXJpc29uICghPSlcbiAgICovXG4gIHB1YmxpYyBub3RFcXVhbFRvKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICchPScsIHZhbHVlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExlc3MgdGhhbiBjb21wYXJpc29uICg8KVxuICAgKi9cbiAgcHVibGljIGxlc3NUaGFuKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJzwnLCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXNzIHRoYW4gb3IgZXF1YWxzIGNvbXBhcmlzb24gKDw9KVxuICAgKi9cbiAgcHVibGljIGxlc3NUaGFuT3JFcXVhbFRvKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJzw9JywgdmFsdWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JlYXRlciB0aGFuIGNvbXBhcmlzb24gKD4pXG4gICAqL1xuICBwdWJsaWMgZ3JlYXRlclRoYW4odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnPicsIHZhbHVlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbHMgY29tcGFyaXNvbiAoPj0pXG4gICAqL1xuICBwdWJsaWMgZ3JlYXRlclRoYW5PckVxdWFsVG8odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnPj0nLCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJUCByYW5nZSBjaGVjayAtIHRlc3RzIGlmIElQIGFkZHJlc3MgaXMgaW4gQ0lEUiByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIGlwUmFuZ2UgLSBDSURSIG5vdGF0aW9uIChlLmcuLCAnMTkyLjE2OC4xLjAvMjQnKVxuICAgKi9cbiAgcHVibGljIGlzSW5SYW5nZShpcFJhbmdlOiBzdHJpbmcpOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJ2lzSW5SYW5nZScsIGBpcChcIiR7aXBSYW5nZX1cIilgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmluZyBjb250YWlucyBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBjb250YWlucyh2YWx1ZTogc3RyaW5nKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICdjb250YWlucycsIHZhbHVlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGF0dHJpYnV0ZSBpcyBpbiBhIHNldC9saXN0LlxuICAgKi9cbiAgcHVibGljIGlzSW4odmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWVzID0gdmFsdWVzLm1hcCh2ID0+XG4gICAgICB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBgXCIke3Z9XCJgIDogdixcbiAgICApLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICdpbicsIGBbJHtmb3JtYXR0ZWRWYWx1ZXN9XWApLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgYnVpbGRlciBmb3IgY3JlYXRpbmcgQ2VkYXIgYXV0aG9yaXphdGlvbiBwb2xpY3kgc3RhdGVtZW50cy5cbiAqXG4gKiBUaGlzIGJ1aWxkZXIgcHJvdmlkZXMgYSBmbHVlbnQgQVBJIGZvciBjb25zdHJ1Y3RpbmcgQ2VkYXIgcG9saWNpZXMgd2l0aG91dFxuICogcmVxdWlyaW5nIGtub3dsZWRnZSBvZiBDZWRhciBzeW50YXguIEl0IHN1cHBvcnRzOlxuICogLSBQZXJtaXQgYW5kIGZvcmJpZCBlZmZlY3RzXG4gKiAtIFByaW5jaXBhbCwgYWN0aW9uLCBhbmQgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbnNcbiAqIC0gQ29uZGl0aW9uYWwgbG9naWMgKHdoZW4vdW5sZXNzIGNsYXVzZXMpXG4gKiAtIFJhdyBDZWRhciBmb3IgYWR2YW5jZWQgY2FzZXNcbiAqXG4gKiBUaGUgYnVpbGRlciBnZW5lcmF0ZXMgdmFsaWQgQ2VkYXIgcG9saWN5IHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoXG4gKiB0aGUgUG9saWN5IGNvbnN0cnVjdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgUG9saWN5LCBQb2xpY3lFbmdpbmUsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYSc7XG4gKiBkZWNsYXJlIGNvbnN0IGVuZ2luZTogUG9saWN5RW5naW5lO1xuICpcbiAqIC8vIEV4YW1wbGUgMTogU2ltcGxlIHBlcm1pdCBwb2xpY3lcbiAqIC8vIEJ1aWxkZXIgZm9ybWF0OlxuICogbmV3IFBvbGljeSh0aGlzLCAnQWxsb3dBbGwnLCB7XG4gKiAgIHBvbGljeUVuZ2luZTogZW5naW5lLFxuICogICBzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudC5wZXJtaXQoKVxuICogICAgIC5mb3JBbGxQcmluY2lwYWxzKClcbiAqICAgICAub25BbGxBY3Rpb25zKClcbiAqICAgICAub25BbGxSZXNvdXJjZXMoKSxcbiAqIH0pO1xuICpcbiAqIC8vIEdlbmVyYXRlZCBDZWRhcjpcbiAqIC8vIHBlcm1pdChcbiAqIC8vICAgcHJpbmNpcGFsLFxuICogLy8gICBhY3Rpb24sXG4gKiAvLyAgIHJlc291cmNlXG4gKiAvLyApO1xuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBQb2xpY3ksIFBvbGljeUVuZ2luZSwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhJztcbiAqIGRlY2xhcmUgY29uc3QgZW5naW5lOiBQb2xpY3lFbmdpbmU7XG4gKiBkZWNsYXJlIGNvbnN0IGdhdGV3YXlBcm46IHN0cmluZztcbiAqXG4gKiAvLyBFeGFtcGxlIDI6IFNwZWNpZmljIGFjdGlvbnMgcG9saWN5XG4gKiAvLyBCdWlsZGVyIGZvcm1hdDpcbiAqIG5ldyBQb2xpY3kodGhpcywgJ0FsbG93U3BlY2lmaWNBY3Rpb25zJywge1xuICogICBwb2xpY3lFbmdpbmU6IGVuZ2luZSxcbiAqICAgc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQucGVybWl0KClcbiAqICAgICAuZm9yUHJpbmNpcGFsSW5Hcm91cCgnR3JvdXAnLCAnRW5naW5lZXJzJylcbiAqICAgICAub25BY3Rpb25zKFtcbiAqICAgICAgICdBZ2VudENvcmU6OkFjdGlvbjo6ZXhhbXBsZWFjdGlvbjEnLFxuICogICAgICAgJ0FnZW50Q29yZTo6QWN0aW9uOjpleGFtcGxlYWN0aW9uMicsXG4gKiAgICAgXSlcbiAqICAgICAub25SZXNvdXJjZSgnQWdlbnRDb3JlOjpHYXRld2F5JywgZ2F0ZXdheUFybiksXG4gKiB9KTtcbiAqXG4gKiAvLyBHZW5lcmF0ZWQgQ2VkYXI6XG4gKiAvLyBwZXJtaXQoXG4gKiAvLyAgIHByaW5jaXBhbCBpbiBHcm91cDo6XCJFbmdpbmVlcnNcIixcbiAqIC8vICAgYWN0aW9uIGluIFtBZ2VudENvcmU6OkFjdGlvbjo6XCJleGFtcGxlYWN0aW9uMVwiLCBBZ2VudENvcmU6OkFjdGlvbjo6XCJleGFtcGxlYWN0aW9uMlwiXSxcbiAqIC8vICAgcmVzb3VyY2UgPT0gQWdlbnRDb3JlOjpHYXRld2F5OjpcImFybjphd3M6YmVkcm9jazp1cy1lYXN0LTE6MTIzOmdhdGV3YXkvZ3ctMTIzXCJcbiAqIC8vICk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IFBvbGljeSwgUG9saWN5RW5naW5lLCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEnO1xuICogZGVjbGFyZSBjb25zdCBlbmdpbmU6IFBvbGljeUVuZ2luZTtcbiAqXG4gKiAvLyBFeGFtcGxlIDM6IFBvbGljeSB3aXRoIGNvbmRpdGlvbnNcbiAqIC8vIEJ1aWxkZXIgZm9ybWF0OlxuICogbmV3IFBvbGljeSh0aGlzLCAnQ29uZGl0aW9uYWxQb2xpY3knLCB7XG4gKiAgIHBvbGljeUVuZ2luZTogZW5naW5lLFxuICogICBzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudC5wZXJtaXQoKVxuICogICAgIC5mb3JBbGxQcmluY2lwYWxzKClcbiAqICAgICAub25BbGxBY3Rpb25zKClcbiAqICAgICAub25BbGxSZXNvdXJjZXMoKVxuICogICAgIC53aGVuKClcbiAqICAgICAgIC5wcmluY2lwYWxBdHRyaWJ1dGUoJ2RlcGFydG1lbnQnKS5lcXVhbFRvKCdFbmdpbmVlcmluZycpXG4gKiAgICAgICAuYW5kKClcbiAqICAgICAgIC5jb250ZXh0QXR0cmlidXRlKCdzb3VyY2VJcCcpLmlzSW5SYW5nZSgnMTkyLjE2OC4xLjAvMjQnKVxuICogICAgICAgLmRvbmUoKVxuICogICAgIC51bmxlc3MoKVxuICogICAgICAgLnByaW5jaXBhbEF0dHJpYnV0ZSgnc3VzcGVuZGVkJykuZXF1YWxUbyh0cnVlKVxuICogICAgICAgLmRvbmUoKSxcbiAqIH0pO1xuICpcbiAqIC8vIEdlbmVyYXRlZCBDZWRhcjpcbiAqIC8vIHBlcm1pdChcbiAqIC8vICAgcHJpbmNpcGFsLFxuICogLy8gICBhY3Rpb24sXG4gKiAvLyAgIHJlc291cmNlXG4gKiAvLyApXG4gKiAvLyB3aGVuIHtcbiAqIC8vICAgcHJpbmNpcGFsLmRlcGFydG1lbnQgPT0gXCJFbmdpbmVlcmluZ1wiICYmIGNvbnRleHQuc291cmNlSXAgaXNJblJhbmdlIGlwKFwiMTkyLjE2OC4xLjAvMjRcIilcbiAqIC8vIH1cbiAqIC8vIHVubGVzcyB7XG4gKiAvLyAgIHByaW5jaXBhbC5zdXNwZW5kZWQgPT0gdHJ1ZVxuICogLy8gfTtcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgUG9saWN5LCBQb2xpY3lFbmdpbmUsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYSc7XG4gKiBkZWNsYXJlIGNvbnN0IGVuZ2luZTogUG9saWN5RW5naW5lO1xuICpcbiAqIC8vIEV4YW1wbGUgNDogUmF3IENlZGFyIHBvbGljeVxuICogLy8gRm9yIGFkdmFuY2VkIENlZGFyIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJ1aWxkZXJcbiAqIG5ldyBQb2xpY3kodGhpcywgJ0N1c3RvbVBvbGljeScsIHtcbiAqICAgcG9saWN5RW5naW5lOiBlbmdpbmUsXG4gKiAgIGRlZmluaXRpb246ICdwZXJtaXQocHJpbmNpcGFsLCBhY3Rpb24sIHJlc291cmNlKSB3aGVuIHsgY29udGV4dC5jdXN0b20gPiAxMCB9OycsXG4gKiB9KTtcbiAqXG4gKiAvLyBPciB1c2luZyBmcm9tQ2VkYXIoKTpcbiAqIG5ldyBQb2xpY3kodGhpcywgJ0ltcG9ydGVkUG9saWN5Jywge1xuICogICBwb2xpY3lFbmdpbmU6IGVuZ2luZSxcbiAqICAgc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQuZnJvbUNlZGFyKFxuICogICAgICdmb3JiaWQocHJpbmNpcGFsLCBhY3Rpb24sIHJlc291cmNlKSB3aGVuIHsgcmVzb3VyY2UuY29uZmlkZW50aWFsID09IHRydWUgfTsnXG4gKiAgICksXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIFBvbGljeVN0YXRlbWVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwZXJtaXQgc3RhdGVtZW50IC0gYWxsb3dzIHRoZSBhY3Rpb24gaWYgY29uZGl0aW9ucyBhcmUgbWV0LlxuICAgKlxuICAgKiBQZXJtaXQgc3RhdGVtZW50cyBncmFudCBhY2Nlc3Mgd2hlbiB0aGVpciBjb25kaXRpb25zIGV2YWx1YXRlIHRvIHRydWUuXG4gICAqIE11bHRpcGxlIHBlcm1pdCBzdGF0ZW1lbnRzIGNhbiBhcHBseTsgYW55IG1hdGNoaW5nIHBlcm1pdCBhbGxvd3MgYWNjZXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwZXJtaXQoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudChQb2xpY3lFZmZlY3QuUEVSTUlUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmb3JiaWQgc3RhdGVtZW50IC0gZGVuaWVzIHRoZSBhY3Rpb24gaWYgY29uZGl0aW9ucyBhcmUgbWV0LlxuICAgKlxuICAgKiBGb3JiaWQgc3RhdGVtZW50cyBkZW55IGFjY2VzcyB3aGVuIHRoZWlyIGNvbmRpdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZS5cbiAgICogRm9yYmlkIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcGVybWl0IChleHBsaWNpdCBkZW55KS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yYmlkKCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lTdGF0ZW1lbnQoUG9saWN5RWZmZWN0LkZPUkJJRCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGZyb20gcmF3IENlZGFyIHBvbGljeSBzdGF0ZW1lbnQgc3RyaW5nLlxuICAgKlxuICAgKiBVc2UgdGhpcyBmb3IgYWR2YW5jZWQgQ2VkYXIgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnVpbGRlcixcbiAgICogb3Igd2hlbiBtaWdyYXRpbmcgZXhpc3RpbmcgQ2VkYXIgcG9saWNpZXMuXG4gICAqXG4gICAqIFZhbGlkYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIFBvbGljeSBjb25zdHJ1Y3QncyB2YWxpZGF0aW9uTW9kZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2VkYXJTdGF0ZW1lbnQgLSBDb21wbGV0ZSBDZWRhciBwb2xpY3kgc3RhdGVtZW50IGluY2x1ZGluZyBlZmZlY3QsIHByaW5jaXBhbCwgYWN0aW9uLCByZXNvdXJjZSwgYW5kIGNvbmRpdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNlZGFyKGNlZGFyU3RhdGVtZW50OiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoUG9saWN5RWZmZWN0LlBFUk1JVCk7XG4gICAgc3RhdGVtZW50LnJhd0NlZGFyID0gY2VkYXJTdGF0ZW1lbnQudHJpbSgpO1xuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGVmZmVjdDogUG9saWN5RWZmZWN0O1xuICBwcml2YXRlIHByaW5jaXBhbENvbmZpZz86IFByaW5jaXBhbENvbmZpZztcbiAgcHJpdmF0ZSBhY3Rpb25Db25maWc/OiBBY3Rpb25Db25maWc7XG4gIHByaXZhdGUgcmVzb3VyY2VDb25maWc/OiBSZXNvdXJjZUNvbmZpZztcbiAgcHJpdmF0ZSB3aGVuQ29uZGl0aW9ucz86IENvbmRpdGlvbkJ1aWxkZXI7XG4gIHByaXZhdGUgdW5sZXNzQ29uZGl0aW9ucz86IENvbmRpdGlvbkJ1aWxkZXI7XG4gIHByaXZhdGUgcmF3Q2VkYXI/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihlZmZlY3Q6IFBvbGljeUVmZmVjdCkge1xuICAgIHRoaXMuZWZmZWN0ID0gZWZmZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCBwcmluY2lwYWxzIChhbnkgdXNlciwgc2VydmljZSwgb3IgZW50aXR5KS5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgcHJpbmNpcGFsYCBpbiBDZWRhclxuICAgKi9cbiAgcHVibGljIGZvckFsbFByaW5jaXBhbHMoKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5wcmluY2lwYWxDb25maWcgPSB7IHNjb3BlOiBQcmluY2lwYWxTY29wZS5BTEwgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBhIHNwZWNpZmljIHByaW5jaXBhbCBlbnRpdHkuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHByaW5jaXBhbCA9PSBFbnRpdHlUeXBlOjpcImVudGl0eUlkXCJgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlIC0gVGhlIGVudGl0eSB0eXBlIChlLmcuLCAnQWdlbnRDb3JlOjpPQXV0aFVzZXInKVxuICAgKiBAcGFyYW0gZW50aXR5SWQgLSBPcHRpb25hbCBzcGVjaWZpYyBlbnRpdHkgSURcbiAgICovXG4gIHB1YmxpYyBmb3JQcmluY2lwYWwoZW50aXR5VHlwZTogc3RyaW5nLCBlbnRpdHlJZD86IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMucHJpbmNpcGFsQ29uZmlnID0ge1xuICAgICAgc2NvcGU6IFByaW5jaXBhbFNjb3BlLlNQRUNJRklDLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIGVudGl0eUlkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdG8gcHJpbmNpcGFscyB0aGF0IGFyZSBtZW1iZXJzIG9mIGEgc3BlY2lmaWMgZ3JvdXAuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHByaW5jaXBhbCBpbiBHcm91cDo6XCJncm91cElkXCJgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBncm91cFR5cGUgLSBUaGUgZ3JvdXAgZW50aXR5IHR5cGUgKGUuZy4sICdHcm91cCcpXG4gICAqIEBwYXJhbSBncm91cElkIC0gVGhlIGdyb3VwIGlkZW50aWZpZXIgKGUuZy4sICdBZG1pbnMnLCAnRW5naW5lZXJzJylcbiAgICovXG4gIHB1YmxpYyBmb3JQcmluY2lwYWxJbkdyb3VwKGdyb3VwVHlwZTogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm90UmF3Q2VkYXIoKTtcbiAgICB0aGlzLnByaW5jaXBhbENvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBQcmluY2lwYWxTY29wZS5TUEVDSUZJQyxcbiAgICAgIG1lbWJlck9mOiB7IGVudGl0eVR5cGU6IGdyb3VwVHlwZSwgZW50aXR5SWQ6IGdyb3VwSWQgfSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCBhY3Rpb25zIChhbnkgb3BlcmF0aW9uKS5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgYWN0aW9uYCBpbiBDZWRhclxuICAgKi9cbiAgcHVibGljIG9uQWxsQWN0aW9ucygpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm90UmF3Q2VkYXIoKTtcbiAgICB0aGlzLmFjdGlvbkNvbmZpZyA9IHsgc2NvcGU6IEFjdGlvblNjb3BlLkFMTCB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIHNwZWNpZmljIGFjdGlvbihzKS5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgYWN0aW9uID09IEFjdGlvbjo6XCJuYW1lXCJgIG9yIGBhY3Rpb24gaW4gW0FjdGlvbjo6XCJuYW1lMVwiLCBBY3Rpb246OlwibmFtZTJcIl1gIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBhY3Rpb25zIC0gQXJyYXkgb2YgYWN0aW9uIG5hbWVzIChlLmcuLCBbJ0FnZW50Q29yZTo6QWN0aW9uOjpJbnN1cmFuY2VBUElfX2dldF9wb2xpY3knXSlcbiAgICovXG4gIHB1YmxpYyBvbkFjdGlvbnMoYWN0aW9uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm90UmF3Q2VkYXIoKTtcbiAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQXRMZWFzdE9uZUFjdGlvbmAsICdBdCBsZWFzdCBvbmUgYWN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uQ29uZmlnID0ge1xuICAgICAgc2NvcGU6IEFjdGlvblNjb3BlLlNQRUNJRklDLFxuICAgICAgYWN0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGEgc2luZ2xlIHNwZWNpZmljIGFjdGlvbi5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgYWN0aW9uID09IEFjdGlvbjo6XCJuYW1lXCJgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBhY3Rpb24gLSBBY3Rpb24gbmFtZSAoZS5nLiwgJ0FnZW50Q29yZTo6QWN0aW9uOjpJbnN1cmFuY2VBUElfX2dldF9wb2xpY3knKVxuICAgKi9cbiAgcHVibGljIG9uQWN0aW9uKGFjdGlvbjogc3RyaW5nKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMub25BY3Rpb25zKFthY3Rpb25dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBhbGwgcmVzb3VyY2VzIG9mIGEgc3BlY2lmaWMgdHlwZS5cbiAgICpcbiAgICogKipBV1MgUmVxdWlyZW1lbnQqKjogQVdTIEJlZHJvY2sgQWdlbnRDb3JlIFBvbGljeSBzZXJ2aWNlIGRvZXMgbm90IGFsbG93IHdpbGRjYXJkXG4gICAqIHJlc291cmNlcyAoYHJlc291cmNlYCkuIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHR5cGUtY29uc3RyYWluZWQgcmVzb3VyY2VzIHdoaWNoIGFyZVxuICAgKiByZXF1aXJlZCBmb3IgcG9saWN5IHZhbGlkYXRpb24gdG8gc3VjY2VlZC5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgcmVzb3VyY2UgaXMgRW50aXR5VHlwZWAgaW4gQ2VkYXJcbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgLSBUaGUgZW50aXR5IHR5cGUgKGRlZmF1bHQ6ICdBZ2VudENvcmU6OkdhdGV3YXknKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEnO1xuICAgKlxuICAgKiAvLyBDb25zdHJhaW4gdG8gR2F0ZXdheSByZXNvdXJjZXMgKGRlZmF1bHQpXG4gICAqIFBvbGljeVN0YXRlbWVudC5wZXJtaXQoKVxuICAgKiAgIC5mb3JBbGxQcmluY2lwYWxzKClcbiAgICogICAub25BbGxBY3Rpb25zKClcbiAgICogICAub25BbGxSZXNvdXJjZXMoKSAgLy8g4oaSIFwicmVzb3VyY2UgaXMgQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICpcbiAgICogLy8gQ29uc3RyYWluIHRvIFJ1bnRpbWUgcmVzb3VyY2VzXG4gICAqIFBvbGljeVN0YXRlbWVudC5wZXJtaXQoKVxuICAgKiAgIC5mb3JBbGxQcmluY2lwYWxzKClcbiAgICogICAub25BbGxBY3Rpb25zKClcbiAgICogICAub25BbGxSZXNvdXJjZXMoJ0FnZW50Q29yZTo6UnVudGltZScpICAvLyDihpIgXCJyZXNvdXJjZSBpcyBBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgKi9cbiAgcHVibGljIG9uQWxsUmVzb3VyY2VzKGVudGl0eVR5cGU6IHN0cmluZyA9ICdBZ2VudENvcmU6OkdhdGV3YXknKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5yZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBSZXNvdXJjZVNjb3BlLlRZUEUsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdG8gYWxsIHJlc291cmNlcyBvZiBhIHNwZWNpZmljIHR5cGUgKGV4cGxpY2l0IG1ldGhvZCkuXG4gICAqXG4gICAqICoqQVdTIFJlcXVpcmVtZW50Kio6IFJlc291cmNlIHR5cGUgY29uc3RyYWludHMgYXJlIHJlcXVpcmVkIGJ5IEFXUyBCZWRyb2NrXG4gICAqIEFnZW50Q29yZSB3aGVuIHVzaW5nIHdpbGRjYXJkIHByaW5jaXBhbHMgb3IgYWN0aW9ucy5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgcmVzb3VyY2UgaXMgRW50aXR5VHlwZWAgaW4gQ2VkYXJcbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgLSBUaGUgZW50aXR5IHR5cGUgKGUuZy4sICdBZ2VudENvcmU6OkdhdGV3YXknLCAnQWdlbnRDb3JlOjpSdW50aW1lJylcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhJztcbiAgICpcbiAgICogUG9saWN5U3RhdGVtZW50LnBlcm1pdCgpXG4gICAqICAgLmZvckFsbFByaW5jaXBhbHMoKVxuICAgKiAgIC5vbkFsbEFjdGlvbnMoKVxuICAgKiAgIC5vblJlc291cmNlVHlwZSgnQWdlbnRDb3JlOjpHYXRld2F5JykgIC8vIOKGkiBcInJlc291cmNlIGlzIEFnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAqL1xuICBwdWJsaWMgb25SZXNvdXJjZVR5cGUoZW50aXR5VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5yZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBSZXNvdXJjZVNjb3BlLlRZUEUsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdG8gYSBzcGVjaWZpYyByZXNvdXJjZSBpbnN0YW5jZS5cbiAgICpcbiAgICogKipBV1MgUmVxdWlyZW1lbnQqKjogV2hlbiB1c2luZyBzcGVjaWZpYyBhY3Rpb25zIChlLmcuLCBgYWN0aW9uID09IEFjdGlvbjo6XCJEZWxldGVcImApLFxuICAgKiB5b3UgbXVzdCBjb25zdHJhaW4gdGhlIHJlc291cmNlIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2UsIG5vdCBqdXN0IGEgdHlwZS5cbiAgICpcbiAgICogR2VuZXJhdGVzOiBgcmVzb3VyY2UgPT0gRW50aXR5VHlwZTo6XCJhcm5cImAgaW4gQ2VkYXJcbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgLSBUaGUgZW50aXR5IHR5cGUgKGUuZy4sICdBZ2VudENvcmU6OkdhdGV3YXknKVxuICAgKiBAcGFyYW0gZW50aXR5QXJuIC0gVGhlIHJlc291cmNlIEFSTiBvciBpZGVudGlmaWVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYSc7XG4gICAqIGRlY2xhcmUgY29uc3QgZ2F0ZXdheUFybjogc3RyaW5nO1xuICAgKlxuICAgKiBQb2xpY3lTdGF0ZW1lbnQuZm9yYmlkKClcbiAgICogICAuZm9yQWxsUHJpbmNpcGFscygpXG4gICAqICAgLm9uQWN0aW9uKCdBZ2VudENvcmU6OkFjdGlvbjo6RGVsZXRlJylcbiAgICogICAub25SZXNvdXJjZSgnQWdlbnRDb3JlOjpHYXRld2F5JywgZ2F0ZXdheUFybikgIC8vIE11c3QgYmUgc3BlY2lmaWMgcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBvblJlc291cmNlKGVudGl0eVR5cGU6IHN0cmluZywgZW50aXR5QXJuOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm90UmF3Q2VkYXIoKTtcbiAgICB0aGlzLnJlc291cmNlQ29uZmlnID0ge1xuICAgICAgc2NvcGU6IFJlc291cmNlU2NvcGUuU1BFQ0lGSUMsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgZW50aXR5QXJuLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHdoZW4gY29uZGl0aW9ucyAtIHBvbGljeSBhcHBsaWVzIG9ubHkgaWYgdGhlc2UgY29uZGl0aW9ucyBhcmUgdHJ1ZS5cbiAgICpcbiAgICogV2hlbiBjb25kaXRpb25zIGRlZmluZSBwb3NpdGl2ZSByZXF1aXJlbWVudHMgdGhhdCBtdXN0IGJlIG1ldC5cbiAgICogTXVsdGlwbGUgY29uZGl0aW9ucyBjYW4gYmUgY29tYmluZWQgd2l0aCBBTkQvT1Igb3BlcmF0b3JzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgQ29uZGl0aW9uQnVpbGRlciB0aGF0IHlvdSBjYW4gY2hhaW4gY29uZGl0aW9uIG1ldGhvZHMgb24uXG4gICAqIENhbGwgZG9uZSgpIHdoZW4gZmluaXNoZWQgdG8gcmV0dXJuIHRvIHRoZSBQb2xpY3lTdGF0ZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgd2hlbigpOiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy53aGVuQ29uZGl0aW9ucyA9IG5ldyBDb25kaXRpb25CdWlsZGVyKCk7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCh0aGlzLCB0aGlzLndoZW5Db25kaXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdW5sZXNzIGNvbmRpdGlvbnMgLSBwb2xpY3kgYXBwbGllcyBvbmx5IGlmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIGZhbHNlLlxuICAgKlxuICAgKiBVbmxlc3MgY29uZGl0aW9ucyBkZWZpbmUgbmVnYXRpdmUgcmVxdWlyZW1lbnRzIChleGNsdXNpb25zKS5cbiAgICogVGhlIHBvbGljeSBhcHBsaWVzIHdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgTk9UIG1ldC5cbiAgICpcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkJ1aWxkZXIgdGhhdCB5b3UgY2FuIGNoYWluIGNvbmRpdGlvbiBtZXRob2RzIG9uLlxuICAgKiBDYWxsIGRvbmUoKSB3aGVuIGZpbmlzaGVkIHRvIHJldHVybiB0byB0aGUgUG9saWN5U3RhdGVtZW50LlxuICAgKi9cbiAgcHVibGljIHVubGVzcygpOiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy51bmxlc3NDb25kaXRpb25zID0gbmV3IENvbmRpdGlvbkJ1aWxkZXIoKTtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50KHRoaXMsIHRoaXMudW5sZXNzQ29uZGl0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIENlZGFyIHBvbGljeSBzdGF0ZW1lbnQgc3RyaW5nLlxuICAgKlxuICAgKiBDb252ZXJ0cyB0aGUgYnVpbGRlciBzdGF0ZSBpbnRvIHZhbGlkIENlZGFyIHBvbGljeSBzeW50YXguXG4gICAqIFRoaXMgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgdGhlIFBvbGljeSBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFZhbGlkIENlZGFyIHBvbGljeSBzdGF0ZW1lbnRcbiAgICovXG4gIHB1YmxpYyB0b0NlZGFyKCk6IHN0cmluZyB7XG4gICAgLy8gSWYgcmF3IENlZGFyIHdhcyBwcm92aWRlZCwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgaWYgKHRoaXMucmF3Q2VkYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhd0NlZGFyO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIHJlcXVpcmVkIHBhcnRzIGFyZSBjb25maWd1cmVkXG4gICAgaWYgKCF0aGlzLnByaW5jaXBhbENvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBQcmluY2lwYWxSZXF1aXJlZGAsICdQcmluY2lwYWwgbXVzdCBiZSBzcGVjaWZpZWQgdXNpbmcgZm9yQWxsUHJpbmNpcGFscygpIG9yIGZvclByaW5jaXBhbCgpJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hY3Rpb25Db25maWcpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQWN0aW9uUmVxdWlyZWRgLCAnQWN0aW9uIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIG9uQWxsQWN0aW9ucygpIG9yIG9uQWN0aW9ucygpJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yZXNvdXJjZUNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBSZXNvdXJjZVJlcXVpcmVkYCwgJ1Jlc291cmNlIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIG9uQWxsUmVzb3VyY2VzKCkgb3Igb25SZXNvdXJjZSgpJyk7XG4gICAgfVxuXG4gICAgbGV0IGNlZGFyID0gYCR7dGhpcy5lZmZlY3R9KFxcbmA7XG5cbiAgICAvLyBQcmluY2lwYWxcbiAgICBjZWRhciArPSBgICAke3RoaXMucHJpbmNpcGFsVG9DZWRhcigpfSxcXG5gO1xuXG4gICAgLy8gQWN0aW9uXG4gICAgY2VkYXIgKz0gYCAgJHt0aGlzLmFjdGlvblRvQ2VkYXIoKX0sXFxuYDtcblxuICAgIC8vIFJlc291cmNlXG4gICAgY2VkYXIgKz0gYCAgJHt0aGlzLnJlc291cmNlVG9DZWRhcigpfVxcbmA7XG5cbiAgICBjZWRhciArPSAnKSc7XG5cbiAgICAvLyBXaGVuIGNvbmRpdGlvbnNcbiAgICBpZiAodGhpcy53aGVuQ29uZGl0aW9ucykge1xuICAgICAgY29uc3Qgd2hlbkNlZGFyID0gdGhpcy53aGVuQ29uZGl0aW9ucy5fdG9DZWRhcigpO1xuICAgICAgaWYgKHdoZW5DZWRhcikge1xuICAgICAgICBjZWRhciArPSBgXFxud2hlbiB7XFxuICAke3doZW5DZWRhcn1cXG59YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVbmxlc3MgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLnVubGVzc0NvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVubGVzc0NlZGFyID0gdGhpcy51bmxlc3NDb25kaXRpb25zLl90b0NlZGFyKCk7XG4gICAgICBpZiAodW5sZXNzQ2VkYXIpIHtcbiAgICAgICAgY2VkYXIgKz0gYFxcbnVubGVzcyB7XFxuICAke3VubGVzc0NlZGFyfVxcbn1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNlZGFyICs9ICc7JztcbiAgICByZXR1cm4gY2VkYXI7XG4gIH1cblxuICBwcml2YXRlIHByaW5jaXBhbFRvQ2VkYXIoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJpbmNpcGFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFByaW5jaXBhbENvbmZpZ1JlcXVpcmVkYCwgJ1ByaW5jaXBhbCBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJpbmNpcGFsQ29uZmlnLnNjb3BlID09PSBQcmluY2lwYWxTY29wZS5BTEwpIHtcbiAgICAgIHJldHVybiAncHJpbmNpcGFsJztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZ3JvdXAgbWVtYmVyc2hpcFxuICAgIGlmICh0aGlzLnByaW5jaXBhbENvbmZpZy5tZW1iZXJPZikge1xuICAgICAgY29uc3QgeyBlbnRpdHlUeXBlLCBlbnRpdHlJZCB9ID0gdGhpcy5wcmluY2lwYWxDb25maWcubWVtYmVyT2Y7XG4gICAgICByZXR1cm4gYHByaW5jaXBhbCBpbiAke2VudGl0eVR5cGV9OjpcIiR7ZW50aXR5SWR9XCJgO1xuICAgIH1cblxuICAgIC8vIFNwZWNpZmljIHByaW5jaXBhbFxuICAgIGlmICh0aGlzLnByaW5jaXBhbENvbmZpZy5lbnRpdHlJZCkge1xuICAgICAgcmV0dXJuIGBwcmluY2lwYWwgPT0gJHt0aGlzLnByaW5jaXBhbENvbmZpZy5lbnRpdHlUeXBlfTo6XCIke3RoaXMucHJpbmNpcGFsQ29uZmlnLmVudGl0eUlkfVwiYDtcbiAgICB9XG5cbiAgICAvLyBQcmluY2lwYWwgdHlwZSBvbmx5IChpcyBvcGVyYXRvcilcbiAgICByZXR1cm4gYHByaW5jaXBhbCBpcyAke3RoaXMucHJpbmNpcGFsQ29uZmlnLmVudGl0eVR5cGV9YDtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aW9uVG9DZWRhcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5hY3Rpb25Db25maWcpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQWN0aW9uQ29uZmlnUmVxdWlyZWRgLCAnQWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3Rpb25Db25maWcuc2NvcGUgPT09IEFjdGlvblNjb3BlLkFMTCkge1xuICAgICAgcmV0dXJuICdhY3Rpb24nO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmFjdGlvbkNvbmZpZy5hY3Rpb25zITtcblxuICAgIC8vIEZvcm1hdCBhY3Rpb246IGlmIGl0IGNvbnRhaW5zIFwiOjpcIiBpdCdzIGFscmVhZHkgbmFtZXNwYWNlZCwganVzdCBlbnN1cmUgcXVvdGVzXG4gICAgLy8gT3RoZXJ3aXNlIHRyZWF0IGFzIGFjdGlvbiBpZGVudGlmaWVyXG4gICAgY29uc3QgZm9ybWF0QWN0aW9uID0gKGFjdGlvbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmIChhY3Rpb24uaW5jbHVkZXMoJzo6JykpIHtcbiAgICAgICAgLy8gQWxyZWFkeSBuYW1lc3BhY2VkIGxpa2UgXCJBZ2VudENvcmU6OkFjdGlvbjo6YWN0aW9ubmFtZVwiXG4gICAgICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoZSBhY3Rpb24gbmFtZSBwYXJ0IGlzIHF1b3RlZFxuICAgICAgICBjb25zdCBwYXJ0cyA9IGFjdGlvbi5zcGxpdCgnOjonKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IHBhcnRzLnNsaWNlKDIpLmpvaW4oJzo6Jyk7XG4gICAgICAgICAgY29uc3QgbmFtZXNwYWNlID0gcGFydHMuc2xpY2UoMCwgMikuam9pbignOjonKTtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZXNwYWNlfTo6XCIke2FjdGlvbk5hbWV9XCJgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIGFzLWlzICh3aWxsIGJlIHZhbGlkYXRlZCBieSBDZWRhcilcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfTtcblxuICAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGBhY3Rpb24gPT0gJHtmb3JtYXRBY3Rpb24oYWN0aW9uc1swXSl9YDtcbiAgICB9XG5cbiAgICAvLyBNdWx0aXBsZSBhY3Rpb25zXG4gICAgY29uc3QgZm9ybWF0dGVkQWN0aW9ucyA9IGFjdGlvbnMubWFwKGEgPT4gZm9ybWF0QWN0aW9uKGEpKS5qb2luKCcsICcpO1xuICAgIHJldHVybiBgYWN0aW9uIGluIFske2Zvcm1hdHRlZEFjdGlvbnN9XWA7XG4gIH1cblxuICBwcml2YXRlIHJlc291cmNlVG9DZWRhcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZUNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBSZXNvdXJjZUNvbmZpZ1JlcXVpcmVkYCwgJ1Jlc291cmNlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMucmVzb3VyY2VDb25maWcuc2NvcGUpIHtcbiAgICAgIGNhc2UgUmVzb3VyY2VTY29wZS5BTEw6XG4gICAgICAgIC8vIE5vdGU6IFdpbGRjYXJkIHJlc291cmNlcyBtYXkgYmUgcmVqZWN0ZWQgYnkgQVdTIEJlZHJvY2sgQWdlbnRDb3JlIHNlcnZpY2VcbiAgICAgICAgcmV0dXJuICdyZXNvdXJjZSc7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VTY29wZS5UWVBFOlxuICAgICAgICAvLyBSZXNvdXJjZSB0eXBlIGNvbnN0cmFpbnQ6IFwicmVzb3VyY2UgaXMgRW50aXR5VHlwZVwiXG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBFbnRpdHlUeXBlUmVxdWlyZWRgLCAnRW50aXR5IHR5cGUgaXMgcmVxdWlyZWQgZm9yIFRZUEUgcmVzb3VyY2Ugc2NvcGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHJlc291cmNlIGlzICR7dGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlUeXBlfWA7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VTY29wZS5TUEVDSUZJQzpcbiAgICAgICAgLy8gU3BlY2lmaWMgcmVzb3VyY2U6IFwicmVzb3VyY2UgPT0gRW50aXR5VHlwZTo6XCJhcm5cIlwiXG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlUeXBlIHx8ICF0aGlzLnJlc291cmNlQ29uZmlnLmVudGl0eUFybikge1xuICAgICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgRW50aXR5VHlwZUFuZEFyblJlcXVpcmVkYCwgJ0VudGl0eSB0eXBlIGFuZCBBUk4gYXJlIHJlcXVpcmVkIGZvciBTUEVDSUZJQyByZXNvdXJjZSBzY29wZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgcmVzb3VyY2UgPT0gJHt0aGlzLnJlc291cmNlQ29uZmlnLmVudGl0eVR5cGV9OjpcIiR7dGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlBcm59XCJgO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFVua25vd25SZXNvdXJjZVNjb3BlYCwgYFVua25vd24gcmVzb3VyY2Ugc2NvcGU6ICR7dGhpcy5yZXNvdXJjZUNvbmZpZy5zY29wZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTm90UmF3Q2VkYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF3Q2VkYXIpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFJhd0NlZGFyQ29uZmxpY3RgLFxuICAgICAgICAnQ2Fubm90IHVzZSBidWlsZGVyIG1ldGhvZHMgd2l0aCByYXcgQ2VkYXIuICcgK1xuICAgICAgICAnRWl0aGVyIHVzZSBQb2xpY3lTdGF0ZW1lbnQuZnJvbUNlZGFyKCkgb3IgYnVpbGRlciBtZXRob2RzLCBub3QgYm90aC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
929
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LXN0YXRlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvbGljeS1zdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILHdEQUFzRTtBQUN0RSw0RUFBNEQ7QUFFNUQ7OztHQUdHO0FBQ0gsSUFBSyxZQVVKO0FBVkQsV0FBSyxZQUFZO0lBQ2Y7O09BRUc7SUFDSCxpQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWSSxZQUFZLEtBQVosWUFBWSxRQVVoQjtBQUVEOzs7R0FHRztBQUNILElBQUssY0FVSjtBQVZELFdBQUssY0FBYztJQUNqQjs7T0FFRztJQUNILDZCQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWSSxjQUFjLEtBQWQsY0FBYyxRQVVsQjtBQUVEOzs7R0FHRztBQUNILElBQUssV0FVSjtBQVZELFdBQUssV0FBVztJQUNkOztPQUVHO0lBQ0gsMEJBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVZJLFdBQVcsS0FBWCxXQUFXLFFBVWY7QUFFRDs7O0dBR0c7QUFDSCxJQUFLLGFBZUo7QUFmRCxXQUFLLGFBQWE7SUFDaEI7O09BRUc7SUFDSCw0QkFBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxzQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBZkksYUFBYSxLQUFiLGFBQWEsUUFlakI7QUFnQ0Q7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQjtJQUVKO0lBQ0E7SUFDQTtJQUNBO0lBSm5CLFlBQ21CLFNBQWlCLEVBQ2pCLFFBQWdCLEVBQ2hCLEtBQWdDLEVBQ2hDLG9CQUE2QixLQUFLO1FBSGxDLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixV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QUEyQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekgsQ0FBQztLQUNGO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FDL0IsSUFBQSxzQkFBRyxFQUFBLGtCQUFrQixFQUNyQiw2Q0FBNkM7Z0JBQzdDLHNFQUFzRSxDQUN2RSxDQUFDO1FBQ0osQ0FBQztLQUNGOztBQTlaSCwwQ0ErWkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcblxuLyoqXG4gKiBFZmZlY3Qgb2YgdGhlIHBvbGljeSBzdGF0ZW1lbnQgLSB3aGV0aGVyIHRvIHBlcm1pdCBvciBmb3JiaWQgdGhlIGFjdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5lbnVtIFBvbGljeUVmZmVjdCB7XG4gIC8qKlxuICAgKiBQZXJtaXQgdGhlIGFjdGlvbiBpZiBjb25kaXRpb25zIGFyZSBtZXRcbiAgICovXG4gIFBFUk1JVCA9ICdwZXJtaXQnLFxuXG4gIC8qKlxuICAgKiBGb3JiaWQgKGRlbnkpIHRoZSBhY3Rpb24gaWYgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAqL1xuICBGT1JCSUQgPSAnZm9yYmlkJyxcbn1cblxuLyoqXG4gKiBTY29wZSBmb3IgcHJpbmNpcGFscyAtIHdoZXRoZXIgdG8gYXBwbHkgdG8gYWxsIHByaW5jaXBhbHMgb3Igc3BlY2lmaWMgb25lcy5cbiAqIEBpbnRlcm5hbFxuICovXG5lbnVtIFByaW5jaXBhbFNjb3BlIHtcbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCBwcmluY2lwYWxzXG4gICAqL1xuICBBTEwgPSAnYWxsJyxcblxuICAvKipcbiAgICogQXBwbHkgdG8gc3BlY2lmaWMgcHJpbmNpcGFsKHMpXG4gICAqL1xuICBTUEVDSUZJQyA9ICdzcGVjaWZpYycsXG59XG5cbi8qKlxuICogU2NvcGUgZm9yIGFjdGlvbnMgLSB3aGV0aGVyIHRvIGFwcGx5IHRvIGFsbCBhY3Rpb25zIG9yIHNwZWNpZmljIG9uZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZW51bSBBY3Rpb25TY29wZSB7XG4gIC8qKlxuICAgKiBBcHBseSB0byBhbGwgYWN0aW9uc1xuICAgKi9cbiAgQUxMID0gJ2FsbCcsXG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIHNwZWNpZmljIGFjdGlvbihzKVxuICAgKi9cbiAgU1BFQ0lGSUMgPSAnc3BlY2lmaWMnLFxufVxuXG4vKipcbiAqIFNjb3BlIGZvciByZXNvdXJjZXMgLSB3aGV0aGVyIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXMsIHJlc291cmNlIHR5cGVzLCBvciBzcGVjaWZpYyBvbmVzLlxuICogQGludGVybmFsXG4gKi9cbmVudW0gUmVzb3VyY2VTY29wZSB7XG4gIC8qKlxuICAgKiBBcHBseSB0byBhbGwgcmVzb3VyY2VzICh3aWxkY2FyZCAtIG1heSBiZSByZWplY3RlZCBieSBzZXJ2aWNlKVxuICAgKi9cbiAgQUxMID0gJ2FsbCcsXG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCByZXNvdXJjZXMgb2YgYSBzcGVjaWZpYyB0eXBlXG4gICAqL1xuICBUWVBFID0gJ3R5cGUnLFxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBzcGVjaWZpYyByZXNvdXJjZShzKVxuICAgKi9cbiAgU1BFQ0lGSUMgPSAnc3BlY2lmaWMnLFxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHByaW5jaXBhbCBzcGVjaWZpY2F0aW9uIGluIGEgcG9saWN5IHN0YXRlbWVudC5cbiAqL1xuaW50ZXJmYWNlIFByaW5jaXBhbENvbmZpZyB7XG4gIHJlYWRvbmx5IHNjb3BlOiBQcmluY2lwYWxTY29wZTtcbiAgcmVhZG9ubHkgZW50aXR5VHlwZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lbWJlck9mPzoge1xuICAgIHJlYWRvbmx5IGVudGl0eVR5cGU6IHN0cmluZztcbiAgICByZWFkb25seSBlbnRpdHlJZDogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGFjdGlvbiBzcGVjaWZpY2F0aW9uIGluIGEgcG9saWN5IHN0YXRlbWVudC5cbiAqL1xuaW50ZXJmYWNlIEFjdGlvbkNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjb3BlOiBBY3Rpb25TY29wZTtcbiAgcmVhZG9ubHkgYWN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHJlc291cmNlIHNwZWNpZmljYXRpb24gaW4gYSBwb2xpY3kgc3RhdGVtZW50LlxuICovXG5pbnRlcmZhY2UgUmVzb3VyY2VDb25maWcge1xuICByZWFkb25seSBzY29wZTogUmVzb3VyY2VTY29wZTtcbiAgcmVhZG9ubHkgZW50aXR5VHlwZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5QXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGNvbmRpdGlvbiBleHByZXNzaW9uIGluIENlZGFyIHBvbGljeSBsYW5ndWFnZS5cbiAqL1xuY2xhc3MgQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0NlZGFyRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlLFxuICApIHt9XG5cbiAgcHVibGljIHRvQ2VkYXIoKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9ICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXRoaXMuaXNDZWRhckV4cHJlc3Npb24pXG4gICAgICA/IGBcIiR7dGhpcy52YWx1ZX1cImBcbiAgICAgIDogdGhpcy52YWx1ZTtcbiAgICByZXR1cm4gYCR7dGhpcy5hdHRyaWJ1dGV9ICR7dGhpcy5vcGVyYXRvcn0gJHtmb3JtYXR0ZWRWYWx1ZX1gO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRlciBmb3IgY29uZGl0aW9uIGV4cHJlc3Npb25zIGluIENlZGFyIHBvbGljaWVzLlxuICpcbiAqIENvbmRpdGlvbnMgZGVmaW5lIHdoZW4gYSBwb2xpY3kgc3RhdGVtZW50IHNob3VsZCBhcHBseSBvciBub3QgYXBwbHkuXG4gKiBTdXBwb3J0cyBsb2dpY2FsIG9wZXJhdG9ycyAoQU5ELCBPUikgYW5kIHZhcmlvdXMgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25zOiBDb25kaXRpb25FeHByZXNzaW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBvcGVyYXRvcnM6ICgnJiYnIHwgJ3x8JylbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgYSBwcmluY2lwYWwgYXR0cmlidXRlIGZvciBjb21wYXJpc29uLlxuICAgKlxuICAgKiBQcmluY2lwYWwgYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci9zZXJ2aWNlIG1ha2luZyB0aGUgcmVxdWVzdC5cbiAgICogQ29tbW9uIGF0dHJpYnV0ZXM6IHVzZXJuYW1lLCByb2xlLCBkZXBhcnRtZW50LCBncm91cHMsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgJ2RlcGFydG1lbnQnLCAncm9sZScsICd1c2VybmFtZScpXG4gICAqL1xuICBwdWJsaWMgcHJpbmNpcGFsQXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQXR0cmlidXRlQWNjZXNzb3IoYHByaW5jaXBhbC4ke2F0dHJpYnV0ZX1gLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgYSByZXNvdXJjZSBhdHRyaWJ1dGUgZm9yIGNvbXBhcmlzb24uXG4gICAqXG4gICAqIFJlc291cmNlIGF0dHJpYnV0ZXMgY29tZSBmcm9tIHRoZSB0YXJnZXQgcmVzb3VyY2UgYmVpbmcgYWNjZXNzZWQuXG4gICAqIENvbW1vbiBhdHRyaWJ1dGVzOiBhcm4sIHR5cGUsIHRhZ3MsIG93bmVyLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlIG5hbWUgKGUuZy4sICdjb25maWRlbnRpYWwnLCAnb3duZXInLCAnY2xhc3NpZmljYXRpb24nKVxuICAgKi9cbiAgcHVibGljIHJlc291cmNlQXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQXR0cmlidXRlQWNjZXNzb3IoYHJlc291cmNlLiR7YXR0cmlidXRlfWAsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBhIGNvbnRleHQgYXR0cmlidXRlIGZvciBjb21wYXJpc29uLlxuICAgKlxuICAgKiBDb250ZXh0IGF0dHJpYnV0ZXMgY29tZSBmcm9tIHRoZSByZXF1ZXN0IGVudmlyb25tZW50LlxuICAgKiBDb21tb24gYXR0cmlidXRlczogc291cmNlSXAsIHRpbWVzdGFtcCwgZW52aXJvbm1lbnQsIHJlZ2lvbiwgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0cmlidXRlIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCAnc291cmNlSXAnLCAnZW52aXJvbm1lbnQnLCAndGltZXN0YW1wJylcbiAgICovXG4gIHB1YmxpYyBjb250ZXh0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKTogQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQXR0cmlidXRlQWNjZXNzb3IoYGNvbnRleHQuJHthdHRyaWJ1dGV9YCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTG9naWNhbCBBTkQgb3BlcmF0b3IgLSBhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUuXG4gICAqL1xuICBwdWJsaWMgYW5kKCk6IHRoaXMge1xuICAgIHRoaXMub3BlcmF0b3JzLnB1c2goJyYmJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9naWNhbCBPUiBvcGVyYXRvciAtIGF0IGxlYXN0IG9uZSBjb25kaXRpb24gbXVzdCBiZSB0cnVlLlxuICAgKi9cbiAgcHVibGljIG9yKCk6IHRoaXMge1xuICAgIHRoaXMub3BlcmF0b3JzLnB1c2goJ3x8Jyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBhIGNvbmRpdGlvbiBleHByZXNzaW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfYWRkQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uRXhwcmVzc2lvbik6IHRoaXMge1xuICAgIHRoaXMuY29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgQ2VkYXIgY29uZGl0aW9uIHN5bnRheC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvQ2VkYXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGxldCBjZWRhciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjZWRhciArPSBgJHt0aGlzLmNvbmRpdGlvbnNbaV0udG9DZWRhcigpfWA7XG4gICAgICBpZiAoaSA8IHRoaXMub3BlcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICBjZWRhciArPSBgICR7dGhpcy5vcGVyYXRvcnNbaV19IGA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjZWRhcjtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXBwZXIgY2xhc3MgZm9yIGNvbmRpdGlvbmFsbHkgYnVpbGRpbmcgcG9saWN5IHN0YXRlbWVudHMuXG4gKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgY2hhaW5pbmcgY29uZGl0aW9uIG1ldGhvZHMgYW5kIHJldHVybmluZyB0byB0aGUgcGFyZW50XG4gKiBQb2xpY3lTdGF0ZW1lbnQgd2hlbiBkb25lLiBJdCBwcm94aWVzIGNvbmRpdGlvbiBidWlsZGluZyBtZXRob2RzIGZyb21cbiAqIENvbmRpdGlvbkJ1aWxkZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9saWN5U3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25kaXRpb25CdWlsZGVyOiBDb25kaXRpb25CdWlsZGVyLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBhIHByaW5jaXBhbCBhdHRyaWJ1dGUgZm9yIGNvbXBhcmlzb24uXG4gICAqXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlIG5hbWUgKGUuZy4sICdkZXBhcnRtZW50JywgJ3JvbGUnLCAndXNlcm5hbWUnKVxuICAgKi9cbiAgcHVibGljIHByaW5jaXBhbEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZyk6IENvbmRpdGlvbmFsQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvcihgcHJpbmNpcGFsLiR7YXR0cmlidXRlfWAsIHRoaXMsIHRoaXMuY29uZGl0aW9uQnVpbGRlcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzIGEgcmVzb3VyY2UgYXR0cmlidXRlIGZvciBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0cmlidXRlIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCAnY29uZmlkZW50aWFsJywgJ293bmVyJywgJ2NsYXNzaWZpY2F0aW9uJylcbiAgICovXG4gIHB1YmxpYyByZXNvdXJjZUF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZyk6IENvbmRpdGlvbmFsQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvcihgcmVzb3VyY2UuJHthdHRyaWJ1dGV9YCwgdGhpcywgdGhpcy5jb25kaXRpb25CdWlsZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgYSBjb250ZXh0IGF0dHJpYnV0ZSBmb3IgY29tcGFyaXNvbi5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgJ3NvdXJjZUlwJywgJ2Vudmlyb25tZW50JywgJ3RpbWVzdGFtcCcpXG4gICAqL1xuICBwdWJsaWMgY29udGV4dEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZyk6IENvbmRpdGlvbmFsQXR0cmlidXRlQWNjZXNzb3Ige1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvcihgY29udGV4dC4ke2F0dHJpYnV0ZX1gLCB0aGlzLCB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ2ljYWwgQU5EIG9wZXJhdG9yIC0gYWxsIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlLlxuICAgKi9cbiAgcHVibGljIGFuZCgpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuYW5kKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9naWNhbCBPUiBvcGVyYXRvciAtIGF0IGxlYXN0IG9uZSBjb25kaXRpb24gbXVzdCBiZSB0cnVlLlxuICAgKi9cbiAgcHVibGljIG9yKCk6IHRoaXMge1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5vcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGNvbmRpdGlvbiBidWlsZGluZyBhbmQgcmV0dXJuIHRvIHRoZSBQb2xpY3lTdGF0ZW1lbnQuXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGZpbmlzaCBidWlsZGluZyB3aGVuL3VubGVzcyBjb25kaXRpb25zIGFuZCBjb250aW51ZVxuICAgKiBjb25maWd1cmluZyB0aGUgcG9saWN5IHN0YXRlbWVudC5cbiAgICovXG4gIHB1YmxpYyBkb25lKCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5U3RhdGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciBkb25lKCkgdG8gc3VwcG9ydCBmbHVlbnQgdW5sZXNzKCkgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgdW5sZXNzKCk6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wb2xpY3lTdGF0ZW1lbnQudW5sZXNzKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBY2Nlc3NvciBmb3IgYnVpbGRpbmcgdHlwZS1zYWZlIGF0dHJpYnV0ZSBjb21wYXJpc29ucyB3aXRoaW4gY29uZGl0aW9uYWwgc3RhdGVtZW50cy5cbiAqXG4gKiBSZXR1cm5zIENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHRvIGFsbG93IGNoYWluaW5nIGJhY2sgdG8gcG9saWN5IGJ1aWxkaW5nLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF0aDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmRpdGlvbkJ1aWxkZXI6IENvbmRpdGlvbkJ1aWxkZXIsXG4gICkge31cblxuICAvKipcbiAgICogRXF1YWxpdHkgY29tcGFyaXNvbiAoPT0pXG4gICAqL1xuICBwdWJsaWMgZXF1YWxUbyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz09JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZXF1YWxpdHkgY29tcGFyaXNvbiAoIT0pXG4gICAqL1xuICBwdWJsaWMgbm90RXF1YWxUbyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJyE9JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExlc3MgdGhhbiBjb21wYXJpc29uICg8KVxuICAgKi9cbiAgcHVibGljIGxlc3NUaGFuKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5jb25kaXRpb25CdWlsZGVyLl9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICc8JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExlc3MgdGhhbiBvciBlcXVhbHMgY29tcGFyaXNvbiAoPD0pXG4gICAqL1xuICBwdWJsaWMgbGVzc1RoYW5PckVxdWFsVG8odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJzw9JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyZWF0ZXIgdGhhbiBjb21wYXJpc29uICg+KVxuICAgKi9cbiAgcHVibGljIGdyZWF0ZXJUaGFuKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5jb25kaXRpb25CdWlsZGVyLl9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICc+JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbHMgY29tcGFyaXNvbiAoPj0pXG4gICAqL1xuICBwdWJsaWMgZ3JlYXRlclRoYW5PckVxdWFsVG8odmFsdWU6IG51bWJlcik6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz49JywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIElQIHJhbmdlIGNoZWNrIC0gdGVzdHMgaWYgSVAgYWRkcmVzcyBpcyBpbiBDSURSIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0gaXBSYW5nZSAtIENJRFIgbm90YXRpb24gKGUuZy4sICcxOTIuMTY4LjEuMC8yNCcpXG4gICAqL1xuICBwdWJsaWMgaXNJblJhbmdlKGlwUmFuZ2U6IHN0cmluZyk6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJ2lzSW5SYW5nZScsIGBpcChcIiR7aXBSYW5nZX1cIilgLCB0cnVlKSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmcgY29udGFpbnMgY2hlY2suXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnModmFsdWU6IHN0cmluZyk6IENvbmRpdGlvbmFsUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLmNvbmRpdGlvbkJ1aWxkZXIuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJ2NvbnRhaW5zJywgdmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGF0dHJpYnV0ZSBpcyBpbiBhIHNldC9saXN0LlxuICAgKi9cbiAgcHVibGljIGlzSW4odmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlcyA9IHZhbHVlcy5tYXAodiA9PlxuICAgICAgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYFwiJHt2fVwiYCA6IHYsXG4gICAgKS5qb2luKCcsICcpO1xuICAgIHRoaXMuY29uZGl0aW9uQnVpbGRlci5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnaW4nLCBgWyR7Zm9ybWF0dGVkVmFsdWVzfV1gLCB0cnVlKSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIEFjY2Vzc29yIGZvciBidWlsZGluZyB0eXBlLXNhZmUgYXR0cmlidXRlIGNvbXBhcmlzb25zLlxuICpcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGNvbW1vbiBjb21wYXJpc29uIG9wZXJhdG9ycyB3aXRoIHByb3BlciB0eXBlIGNoZWNraW5nLlxuICovXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQWNjZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogQ29uZGl0aW9uQnVpbGRlcixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjb21wYXJpc29uICg9PSlcbiAgICovXG4gIHB1YmxpYyBlcXVhbFRvKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICc9PScsIHZhbHVlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZXF1YWxpdHkgY29tcGFyaXNvbiAoIT0pXG4gICAqL1xuICBwdWJsaWMgbm90RXF1YWxUbyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik6IENvbmRpdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnIT0nLCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXNzIHRoYW4gY29tcGFyaXNvbiAoPClcbiAgICovXG4gIHB1YmxpYyBsZXNzVGhhbih2YWx1ZTogbnVtYmVyKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICc8JywgdmFsdWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGVzcyB0aGFuIG9yIGVxdWFscyBjb21wYXJpc29uICg8PSlcbiAgICovXG4gIHB1YmxpYyBsZXNzVGhhbk9yRXF1YWxUbyh2YWx1ZTogbnVtYmVyKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICc8PScsIHZhbHVlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyZWF0ZXIgdGhhbiBjb21wYXJpc29uICg+KVxuICAgKi9cbiAgcHVibGljIGdyZWF0ZXJUaGFuKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz4nLCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmVhdGVyIHRoYW4gb3IgZXF1YWxzIGNvbXBhcmlzb24gKD49KVxuICAgKi9cbiAgcHVibGljIGdyZWF0ZXJUaGFuT3JFcXVhbFRvKHZhbHVlOiBudW1iZXIpOiBDb25kaXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2FkZENvbmRpdGlvbihcbiAgICAgIG5ldyBDb25kaXRpb25FeHByZXNzaW9uKHRoaXMucGF0aCwgJz49JywgdmFsdWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSVAgcmFuZ2UgY2hlY2sgLSB0ZXN0cyBpZiBJUCBhZGRyZXNzIGlzIGluIENJRFIgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBpcFJhbmdlIC0gQ0lEUiBub3RhdGlvbiAoZS5nLiwgJzE5Mi4xNjguMS4wLzI0JylcbiAgICovXG4gIHB1YmxpYyBpc0luUmFuZ2UoaXBSYW5nZTogc3RyaW5nKTogQ29uZGl0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Ll9hZGRDb25kaXRpb24oXG4gICAgICBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbih0aGlzLnBhdGgsICdpc0luUmFuZ2UnLCBgaXAoXCIke2lwUmFuZ2V9XCIpYCwgdHJ1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmcgY29udGFpbnMgY2hlY2suXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnModmFsdWU6IHN0cmluZyk6IENvbmRpdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnY29udGFpbnMnLCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhdHRyaWJ1dGUgaXMgaW4gYSBzZXQvbGlzdC5cbiAgICovXG4gIHB1YmxpYyBpc0luKHZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSk6IENvbmRpdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlcyA9IHZhbHVlcy5tYXAodiA9PlxuICAgICAgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYFwiJHt2fVwiYCA6IHYsXG4gICAgKS5qb2luKCcsICcpO1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5fYWRkQ29uZGl0aW9uKFxuICAgICAgbmV3IENvbmRpdGlvbkV4cHJlc3Npb24odGhpcy5wYXRoLCAnaW4nLCBgWyR7Zm9ybWF0dGVkVmFsdWVzfV1gLCB0cnVlKSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIGJ1aWxkZXIgZm9yIGNyZWF0aW5nIENlZGFyIGF1dGhvcml6YXRpb24gcG9saWN5IHN0YXRlbWVudHMuXG4gKlxuICogVGhpcyBidWlsZGVyIHByb3ZpZGVzIGEgZmx1ZW50IEFQSSBmb3IgY29uc3RydWN0aW5nIENlZGFyIHBvbGljaWVzIHdpdGhvdXRcbiAqIHJlcXVpcmluZyBrbm93bGVkZ2Ugb2YgQ2VkYXIgc3ludGF4LiBJdCBzdXBwb3J0czpcbiAqIC0gUGVybWl0IGFuZCBmb3JiaWQgZWZmZWN0c1xuICogLSBQcmluY2lwYWwsIGFjdGlvbiwgYW5kIHJlc291cmNlIHNwZWNpZmljYXRpb25zXG4gKiAtIENvbmRpdGlvbmFsIGxvZ2ljICh3aGVuL3VubGVzcyBjbGF1c2VzKVxuICogLSBSYXcgQ2VkYXIgZm9yIGFkdmFuY2VkIGNhc2VzXG4gKlxuICogVGhlIGJ1aWxkZXIgZ2VuZXJhdGVzIHZhbGlkIENlZGFyIHBvbGljeSBzdGF0ZW1lbnRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aFxuICogdGhlIFBvbGljeSBjb25zdHJ1Y3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IFBvbGljeSwgUG9saWN5RW5naW5lLCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEnO1xuICogZGVjbGFyZSBjb25zdCBlbmdpbmU6IFBvbGljeUVuZ2luZTtcbiAqXG4gKiAvLyBFeGFtcGxlIDE6IFNpbXBsZSBwZXJtaXQgcG9saWN5XG4gKiAvLyBCdWlsZGVyIGZvcm1hdDpcbiAqIG5ldyBQb2xpY3kodGhpcywgJ0FsbG93QWxsJywge1xuICogICBwb2xpY3lFbmdpbmU6IGVuZ2luZSxcbiAqICAgc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQucGVybWl0KClcbiAqICAgICAuZm9yQWxsUHJpbmNpcGFscygpXG4gKiAgICAgLm9uQWxsQWN0aW9ucygpXG4gKiAgICAgLm9uQWxsUmVzb3VyY2VzKCksXG4gKiB9KTtcbiAqXG4gKiAvLyBHZW5lcmF0ZWQgQ2VkYXI6XG4gKiAvLyBwZXJtaXQoXG4gKiAvLyAgIHByaW5jaXBhbCxcbiAqIC8vICAgYWN0aW9uLFxuICogLy8gICByZXNvdXJjZVxuICogLy8gKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgUG9saWN5LCBQb2xpY3lFbmdpbmUsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYSc7XG4gKiBkZWNsYXJlIGNvbnN0IGVuZ2luZTogUG9saWN5RW5naW5lO1xuICogZGVjbGFyZSBjb25zdCBnYXRld2F5QXJuOiBzdHJpbmc7XG4gKlxuICogLy8gRXhhbXBsZSAyOiBTcGVjaWZpYyBhY3Rpb25zIHBvbGljeVxuICogLy8gQnVpbGRlciBmb3JtYXQ6XG4gKiBuZXcgUG9saWN5KHRoaXMsICdBbGxvd1NwZWNpZmljQWN0aW9ucycsIHtcbiAqICAgcG9saWN5RW5naW5lOiBlbmdpbmUsXG4gKiAgIHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50LnBlcm1pdCgpXG4gKiAgICAgLmZvclByaW5jaXBhbEluR3JvdXAoJ0dyb3VwJywgJ0VuZ2luZWVycycpXG4gKiAgICAgLm9uQWN0aW9ucyhbXG4gKiAgICAgICAnQWdlbnRDb3JlOjpBY3Rpb246OmV4YW1wbGVhY3Rpb24xJyxcbiAqICAgICAgICdBZ2VudENvcmU6OkFjdGlvbjo6ZXhhbXBsZWFjdGlvbjInLFxuICogICAgIF0pXG4gKiAgICAgLm9uUmVzb3VyY2UoJ0FnZW50Q29yZTo6R2F0ZXdheScsIGdhdGV3YXlBcm4pLFxuICogfSk7XG4gKlxuICogLy8gR2VuZXJhdGVkIENlZGFyOlxuICogLy8gcGVybWl0KFxuICogLy8gICBwcmluY2lwYWwgaW4gR3JvdXA6OlwiRW5naW5lZXJzXCIsXG4gKiAvLyAgIGFjdGlvbiBpbiBbQWdlbnRDb3JlOjpBY3Rpb246OlwiZXhhbXBsZWFjdGlvbjFcIiwgQWdlbnRDb3JlOjpBY3Rpb246OlwiZXhhbXBsZWFjdGlvbjJcIl0sXG4gKiAvLyAgIHJlc291cmNlID09IEFnZW50Q29yZTo6R2F0ZXdheTo6XCJhcm46YXdzOmJlZHJvY2s6dXMtZWFzdC0xOjEyMzpnYXRld2F5L2d3LTEyM1wiXG4gKiAvLyApO1xuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBQb2xpY3ksIFBvbGljeUVuZ2luZSwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhJztcbiAqIGRlY2xhcmUgY29uc3QgZW5naW5lOiBQb2xpY3lFbmdpbmU7XG4gKlxuICogLy8gRXhhbXBsZSAzOiBQb2xpY3kgd2l0aCBjb25kaXRpb25zXG4gKiAvLyBCdWlsZGVyIGZvcm1hdDpcbiAqIG5ldyBQb2xpY3kodGhpcywgJ0NvbmRpdGlvbmFsUG9saWN5Jywge1xuICogICBwb2xpY3lFbmdpbmU6IGVuZ2luZSxcbiAqICAgc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQucGVybWl0KClcbiAqICAgICAuZm9yQWxsUHJpbmNpcGFscygpXG4gKiAgICAgLm9uQWxsQWN0aW9ucygpXG4gKiAgICAgLm9uQWxsUmVzb3VyY2VzKClcbiAqICAgICAud2hlbigpXG4gKiAgICAgICAucHJpbmNpcGFsQXR0cmlidXRlKCdkZXBhcnRtZW50JykuZXF1YWxUbygnRW5naW5lZXJpbmcnKVxuICogICAgICAgLmFuZCgpXG4gKiAgICAgICAuY29udGV4dEF0dHJpYnV0ZSgnc291cmNlSXAnKS5pc0luUmFuZ2UoJzE5Mi4xNjguMS4wLzI0JylcbiAqICAgICAgIC5kb25lKClcbiAqICAgICAudW5sZXNzKClcbiAqICAgICAgIC5wcmluY2lwYWxBdHRyaWJ1dGUoJ3N1c3BlbmRlZCcpLmVxdWFsVG8odHJ1ZSlcbiAqICAgICAgIC5kb25lKCksXG4gKiB9KTtcbiAqXG4gKiAvLyBHZW5lcmF0ZWQgQ2VkYXI6XG4gKiAvLyBwZXJtaXQoXG4gKiAvLyAgIHByaW5jaXBhbCxcbiAqIC8vICAgYWN0aW9uLFxuICogLy8gICByZXNvdXJjZVxuICogLy8gKVxuICogLy8gd2hlbiB7XG4gKiAvLyAgIHByaW5jaXBhbC5kZXBhcnRtZW50ID09IFwiRW5naW5lZXJpbmdcIiAmJiBjb250ZXh0LnNvdXJjZUlwIGlzSW5SYW5nZSBpcChcIjE5Mi4xNjguMS4wLzI0XCIpXG4gKiAvLyB9XG4gKiAvLyB1bmxlc3Mge1xuICogLy8gICBwcmluY2lwYWwuc3VzcGVuZGVkID09IHRydWVcbiAqIC8vIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IFBvbGljeSwgUG9saWN5RW5naW5lLCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEnO1xuICogZGVjbGFyZSBjb25zdCBlbmdpbmU6IFBvbGljeUVuZ2luZTtcbiAqXG4gKiAvLyBFeGFtcGxlIDQ6IFJhdyBDZWRhciBwb2xpY3lcbiAqIC8vIEZvciBhZHZhbmNlZCBDZWRhciBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBidWlsZGVyXG4gKiBuZXcgUG9saWN5KHRoaXMsICdDdXN0b21Qb2xpY3knLCB7XG4gKiAgIHBvbGljeUVuZ2luZTogZW5naW5lLFxuICogICBkZWZpbml0aW9uOiAncGVybWl0KHByaW5jaXBhbCwgYWN0aW9uLCByZXNvdXJjZSkgd2hlbiB7IGNvbnRleHQuY3VzdG9tID4gMTAgfTsnLFxuICogfSk7XG4gKlxuICogLy8gT3IgdXNpbmcgZnJvbUNlZGFyKCk6XG4gKiBuZXcgUG9saWN5KHRoaXMsICdJbXBvcnRlZFBvbGljeScsIHtcbiAqICAgcG9saWN5RW5naW5lOiBlbmdpbmUsXG4gKiAgIHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50LmZyb21DZWRhcihcbiAqICAgICAnZm9yYmlkKHByaW5jaXBhbCwgYWN0aW9uLCByZXNvdXJjZSkgd2hlbiB7IHJlc291cmNlLmNvbmZpZGVudGlhbCA9PSB0cnVlIH07J1xuICogICApLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lTdGF0ZW1lbnQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcGVybWl0IHN0YXRlbWVudCAtIGFsbG93cyB0aGUgYWN0aW9uIGlmIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICpcbiAgICogUGVybWl0IHN0YXRlbWVudHMgZ3JhbnQgYWNjZXNzIHdoZW4gdGhlaXIgY29uZGl0aW9ucyBldmFsdWF0ZSB0byB0cnVlLlxuICAgKiBNdWx0aXBsZSBwZXJtaXQgc3RhdGVtZW50cyBjYW4gYXBwbHk7IGFueSBtYXRjaGluZyBwZXJtaXQgYWxsb3dzIGFjY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGVybWl0KCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lTdGF0ZW1lbnQoUG9saWN5RWZmZWN0LlBFUk1JVCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZm9yYmlkIHN0YXRlbWVudCAtIGRlbmllcyB0aGUgYWN0aW9uIGlmIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICpcbiAgICogRm9yYmlkIHN0YXRlbWVudHMgZGVueSBhY2Nlc3Mgd2hlbiB0aGVpciBjb25kaXRpb25zIGV2YWx1YXRlIHRvIHRydWUuXG4gICAqIEZvcmJpZCBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBlcm1pdCAoZXhwbGljaXQgZGVueSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvcmJpZCgpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgUG9saWN5U3RhdGVtZW50KFBvbGljeUVmZmVjdC5GT1JCSUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBmcm9tIHJhdyBDZWRhciBwb2xpY3kgc3RhdGVtZW50IHN0cmluZy5cbiAgICpcbiAgICogVXNlIHRoaXMgZm9yIGFkdmFuY2VkIENlZGFyIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJ1aWxkZXIsXG4gICAqIG9yIHdoZW4gbWlncmF0aW5nIGV4aXN0aW5nIENlZGFyIHBvbGljaWVzLlxuICAgKlxuICAgKiBWYWxpZGF0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBQb2xpY3kgY29uc3RydWN0J3MgdmFsaWRhdGlvbk1vZGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNlZGFyU3RhdGVtZW50IC0gQ29tcGxldGUgQ2VkYXIgcG9saWN5IHN0YXRlbWVudCBpbmNsdWRpbmcgZWZmZWN0LCBwcmluY2lwYWwsIGFjdGlvbiwgcmVzb3VyY2UsIGFuZCBjb25kaXRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DZWRhcihjZWRhclN0YXRlbWVudDogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KFBvbGljeUVmZmVjdC5QRVJNSVQpO1xuICAgIHN0YXRlbWVudC5yYXdDZWRhciA9IGNlZGFyU3RhdGVtZW50LnRyaW0oKTtcbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBlZmZlY3Q6IFBvbGljeUVmZmVjdDtcbiAgcHJpdmF0ZSBwcmluY2lwYWxDb25maWc/OiBQcmluY2lwYWxDb25maWc7XG4gIHByaXZhdGUgYWN0aW9uQ29uZmlnPzogQWN0aW9uQ29uZmlnO1xuICBwcml2YXRlIHJlc291cmNlQ29uZmlnPzogUmVzb3VyY2VDb25maWc7XG4gIHByaXZhdGUgd2hlbkNvbmRpdGlvbnM/OiBDb25kaXRpb25CdWlsZGVyO1xuICBwcml2YXRlIHVubGVzc0NvbmRpdGlvbnM/OiBDb25kaXRpb25CdWlsZGVyO1xuICBwcml2YXRlIHJhd0NlZGFyPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZWZmZWN0OiBQb2xpY3lFZmZlY3QpIHtcbiAgICB0aGlzLmVmZmVjdCA9IGVmZmVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBhbGwgcHJpbmNpcGFscyAoYW55IHVzZXIsIHNlcnZpY2UsIG9yIGVudGl0eSkuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHByaW5jaXBhbGAgaW4gQ2VkYXJcbiAgICovXG4gIHB1YmxpYyBmb3JBbGxQcmluY2lwYWxzKCk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMucHJpbmNpcGFsQ29uZmlnID0geyBzY29wZTogUHJpbmNpcGFsU2NvcGUuQUxMIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdG8gYSBzcGVjaWZpYyBwcmluY2lwYWwgZW50aXR5LlxuICAgKlxuICAgKiBHZW5lcmF0ZXM6IGBwcmluY2lwYWwgPT0gRW50aXR5VHlwZTo6XCJlbnRpdHlJZFwiYCBpbiBDZWRhclxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5VHlwZSAtIFRoZSBlbnRpdHkgdHlwZSAoZS5nLiwgJ0FnZW50Q29yZTo6T0F1dGhVc2VyJylcbiAgICogQHBhcmFtIGVudGl0eUlkIC0gT3B0aW9uYWwgc3BlY2lmaWMgZW50aXR5IElEXG4gICAqL1xuICBwdWJsaWMgZm9yUHJpbmNpcGFsKGVudGl0eVR5cGU6IHN0cmluZywgZW50aXR5SWQ/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm90UmF3Q2VkYXIoKTtcbiAgICB0aGlzLnByaW5jaXBhbENvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBQcmluY2lwYWxTY29wZS5TUEVDSUZJQyxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIHByaW5jaXBhbHMgdGhhdCBhcmUgbWVtYmVycyBvZiBhIHNwZWNpZmljIGdyb3VwLlxuICAgKlxuICAgKiBHZW5lcmF0ZXM6IGBwcmluY2lwYWwgaW4gR3JvdXA6OlwiZ3JvdXBJZFwiYCBpbiBDZWRhclxuICAgKlxuICAgKiBAcGFyYW0gZ3JvdXBUeXBlIC0gVGhlIGdyb3VwIGVudGl0eSB0eXBlIChlLmcuLCAnR3JvdXAnKVxuICAgKiBAcGFyYW0gZ3JvdXBJZCAtIFRoZSBncm91cCBpZGVudGlmaWVyIChlLmcuLCAnQWRtaW5zJywgJ0VuZ2luZWVycycpXG4gICAqL1xuICBwdWJsaWMgZm9yUHJpbmNpcGFsSW5Hcm91cChncm91cFR5cGU6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5wcmluY2lwYWxDb25maWcgPSB7XG4gICAgICBzY29wZTogUHJpbmNpcGFsU2NvcGUuU1BFQ0lGSUMsXG4gICAgICBtZW1iZXJPZjogeyBlbnRpdHlUeXBlOiBncm91cFR5cGUsIGVudGl0eUlkOiBncm91cElkIH0sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBhbGwgYWN0aW9ucyAoYW55IG9wZXJhdGlvbikuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYGFjdGlvbmAgaW4gQ2VkYXJcbiAgICovXG4gIHB1YmxpYyBvbkFsbEFjdGlvbnMoKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5hY3Rpb25Db25maWcgPSB7IHNjb3BlOiBBY3Rpb25TY29wZS5BTEwgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBzcGVjaWZpYyBhY3Rpb24ocykuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYGFjdGlvbiA9PSBBY3Rpb246OlwibmFtZVwiYCBvciBgYWN0aW9uIGluIFtBY3Rpb246OlwibmFtZTFcIiwgQWN0aW9uOjpcIm5hbWUyXCJdYCBpbiBDZWRhclxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9ucyAtIEFycmF5IG9mIGFjdGlvbiBuYW1lcyAoZS5nLiwgWydBZ2VudENvcmU6OkFjdGlvbjo6SW5zdXJhbmNlQVBJX19nZXRfcG9saWN5J10pXG4gICAqL1xuICBwdWJsaWMgb25BY3Rpb25zKGFjdGlvbnM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEF0TGVhc3RPbmVBY3Rpb25gLCAnQXQgbGVhc3Qgb25lIGFjdGlvbiBtdXN0IGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBBY3Rpb25TY29wZS5TUEVDSUZJQyxcbiAgICAgIGFjdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0byBhIHNpbmdsZSBzcGVjaWZpYyBhY3Rpb24uXG4gICAqXG4gICAqIEdlbmVyYXRlczogYGFjdGlvbiA9PSBBY3Rpb246OlwibmFtZVwiYCBpbiBDZWRhclxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uIC0gQWN0aW9uIG5hbWUgKGUuZy4sICdBZ2VudENvcmU6OkFjdGlvbjo6SW5zdXJhbmNlQVBJX19nZXRfcG9saWN5JylcbiAgICovXG4gIHB1YmxpYyBvbkFjdGlvbihhY3Rpb246IHN0cmluZyk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLm9uQWN0aW9ucyhbYWN0aW9uXSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdG8gYWxsIHJlc291cmNlcyBvZiBhIHNwZWNpZmljIHR5cGUuXG4gICAqXG4gICAqICoqQVdTIFJlcXVpcmVtZW50Kio6IEFXUyBCZWRyb2NrIEFnZW50Q29yZSBQb2xpY3kgc2VydmljZSBkb2VzIG5vdCBhbGxvdyB3aWxkY2FyZFxuICAgKiByZXNvdXJjZXMgKGByZXNvdXJjZWApLiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0eXBlLWNvbnN0cmFpbmVkIHJlc291cmNlcyB3aGljaCBhcmVcbiAgICogcmVxdWlyZWQgZm9yIHBvbGljeSB2YWxpZGF0aW9uIHRvIHN1Y2NlZWQuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHJlc291cmNlIGlzIEVudGl0eVR5cGVgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlIC0gVGhlIGVudGl0eSB0eXBlIChkZWZhdWx0OiAnQWdlbnRDb3JlOjpHYXRld2F5JylcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhJztcbiAgICpcbiAgICogLy8gQ29uc3RyYWluIHRvIEdhdGV3YXkgcmVzb3VyY2VzIChkZWZhdWx0KVxuICAgKiBQb2xpY3lTdGF0ZW1lbnQucGVybWl0KClcbiAgICogICAuZm9yQWxsUHJpbmNpcGFscygpXG4gICAqICAgLm9uQWxsQWN0aW9ucygpXG4gICAqICAgLm9uQWxsUmVzb3VyY2VzKCkgIC8vIOKGkiBcInJlc291cmNlIGlzIEFnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAqXG4gICAqIC8vIENvbnN0cmFpbiB0byBSdW50aW1lIHJlc291cmNlc1xuICAgKiBQb2xpY3lTdGF0ZW1lbnQucGVybWl0KClcbiAgICogICAuZm9yQWxsUHJpbmNpcGFscygpXG4gICAqICAgLm9uQWxsQWN0aW9ucygpXG4gICAqICAgLm9uQWxsUmVzb3VyY2VzKCdBZ2VudENvcmU6OlJ1bnRpbWUnKSAgLy8g4oaSIFwicmVzb3VyY2UgaXMgQWdlbnRDb3JlOjpSdW50aW1lXCJcbiAgICovXG4gIHB1YmxpYyBvbkFsbFJlc291cmNlcyhlbnRpdHlUeXBlOiBzdHJpbmcgPSAnQWdlbnRDb3JlOjpHYXRld2F5Jyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMucmVzb3VyY2VDb25maWcgPSB7XG4gICAgICBzY29wZTogUmVzb3VyY2VTY29wZS5UWVBFLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGFsbCByZXNvdXJjZXMgb2YgYSBzcGVjaWZpYyB0eXBlIChleHBsaWNpdCBtZXRob2QpLlxuICAgKlxuICAgKiAqKkFXUyBSZXF1aXJlbWVudCoqOiBSZXNvdXJjZSB0eXBlIGNvbnN0cmFpbnRzIGFyZSByZXF1aXJlZCBieSBBV1MgQmVkcm9ja1xuICAgKiBBZ2VudENvcmUgd2hlbiB1c2luZyB3aWxkY2FyZCBwcmluY2lwYWxzIG9yIGFjdGlvbnMuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHJlc291cmNlIGlzIEVudGl0eVR5cGVgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlIC0gVGhlIGVudGl0eSB0eXBlIChlLmcuLCAnQWdlbnRDb3JlOjpHYXRld2F5JywgJ0FnZW50Q29yZTo6UnVudGltZScpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYSc7XG4gICAqXG4gICAqIFBvbGljeVN0YXRlbWVudC5wZXJtaXQoKVxuICAgKiAgIC5mb3JBbGxQcmluY2lwYWxzKClcbiAgICogICAub25BbGxBY3Rpb25zKClcbiAgICogICAub25SZXNvdXJjZVR5cGUoJ0FnZW50Q29yZTo6R2F0ZXdheScpICAvLyDihpIgXCJyZXNvdXJjZSBpcyBBZ2VudENvcmU6OkdhdGV3YXlcIlxuICAgKi9cbiAgcHVibGljIG9uUmVzb3VyY2VUeXBlKGVudGl0eVR5cGU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMucmVzb3VyY2VDb25maWcgPSB7XG4gICAgICBzY29wZTogUmVzb3VyY2VTY29wZS5UWVBFLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRvIGEgc3BlY2lmaWMgcmVzb3VyY2UgaW5zdGFuY2UuXG4gICAqXG4gICAqICoqQVdTIFJlcXVpcmVtZW50Kio6IFdoZW4gdXNpbmcgc3BlY2lmaWMgYWN0aW9ucyAoZS5nLiwgYGFjdGlvbiA9PSBBY3Rpb246OlwiRGVsZXRlXCJgKSxcbiAgICogeW91IG11c3QgY29uc3RyYWluIHRoZSByZXNvdXJjZSB0byBhIHNwZWNpZmljIGluc3RhbmNlLCBub3QganVzdCBhIHR5cGUuXG4gICAqXG4gICAqIEdlbmVyYXRlczogYHJlc291cmNlID09IEVudGl0eVR5cGU6OlwiYXJuXCJgIGluIENlZGFyXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlIC0gVGhlIGVudGl0eSB0eXBlIChlLmcuLCAnQWdlbnRDb3JlOjpHYXRld2F5JylcbiAgICogQHBhcmFtIGVudGl0eUFybiAtIFRoZSByZXNvdXJjZSBBUk4gb3IgaWRlbnRpZmllclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEnO1xuICAgKiBkZWNsYXJlIGNvbnN0IGdhdGV3YXlBcm46IHN0cmluZztcbiAgICpcbiAgICogUG9saWN5U3RhdGVtZW50LmZvcmJpZCgpXG4gICAqICAgLmZvckFsbFByaW5jaXBhbHMoKVxuICAgKiAgIC5vbkFjdGlvbignQWdlbnRDb3JlOjpBY3Rpb246OkRlbGV0ZScpXG4gICAqICAgLm9uUmVzb3VyY2UoJ0FnZW50Q29yZTo6R2F0ZXdheScsIGdhdGV3YXlBcm4pICAvLyBNdXN0IGJlIHNwZWNpZmljIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgb25SZXNvdXJjZShlbnRpdHlUeXBlOiBzdHJpbmcsIGVudGl0eUFybjogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vdFJhd0NlZGFyKCk7XG4gICAgdGhpcy5yZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiBSZXNvdXJjZVNjb3BlLlNQRUNJRklDLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIGVudGl0eUFybixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB3aGVuIGNvbmRpdGlvbnMgLSBwb2xpY3kgYXBwbGllcyBvbmx5IGlmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHRydWUuXG4gICAqXG4gICAqIFdoZW4gY29uZGl0aW9ucyBkZWZpbmUgcG9zaXRpdmUgcmVxdWlyZW1lbnRzIHRoYXQgbXVzdCBiZSBtZXQuXG4gICAqIE11bHRpcGxlIGNvbmRpdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggQU5EL09SIG9wZXJhdG9ycy5cbiAgICpcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkJ1aWxkZXIgdGhhdCB5b3UgY2FuIGNoYWluIGNvbmRpdGlvbiBtZXRob2RzIG9uLlxuICAgKiBDYWxsIGRvbmUoKSB3aGVuIGZpbmlzaGVkIHRvIHJldHVybiB0byB0aGUgUG9saWN5U3RhdGVtZW50LlxuICAgKi9cbiAgcHVibGljIHdoZW4oKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMud2hlbkNvbmRpdGlvbnMgPSBuZXcgQ29uZGl0aW9uQnVpbGRlcigpO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQodGhpcywgdGhpcy53aGVuQ29uZGl0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHVubGVzcyBjb25kaXRpb25zIC0gcG9saWN5IGFwcGxpZXMgb25seSBpZiB0aGVzZSBjb25kaXRpb25zIGFyZSBmYWxzZS5cbiAgICpcbiAgICogVW5sZXNzIGNvbmRpdGlvbnMgZGVmaW5lIG5lZ2F0aXZlIHJlcXVpcmVtZW50cyAoZXhjbHVzaW9ucykuXG4gICAqIFRoZSBwb2xpY3kgYXBwbGllcyB3aGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIE5PVCBtZXQuXG4gICAqXG4gICAqIFJldHVybnMgYSBDb25kaXRpb25CdWlsZGVyIHRoYXQgeW91IGNhbiBjaGFpbiBjb25kaXRpb24gbWV0aG9kcyBvbi5cbiAgICogQ2FsbCBkb25lKCkgd2hlbiBmaW5pc2hlZCB0byByZXR1cm4gdG8gdGhlIFBvbGljeVN0YXRlbWVudC5cbiAgICovXG4gIHB1YmxpYyB1bmxlc3MoKTogQ29uZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHRoaXMudmFsaWRhdGVOb3RSYXdDZWRhcigpO1xuICAgIHRoaXMudW5sZXNzQ29uZGl0aW9ucyA9IG5ldyBDb25kaXRpb25CdWlsZGVyKCk7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbFBvbGljeVN0YXRlbWVudCh0aGlzLCB0aGlzLnVubGVzc0NvbmRpdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDZWRhciBwb2xpY3kgc3RhdGVtZW50IHN0cmluZy5cbiAgICpcbiAgICogQ29udmVydHMgdGhlIGJ1aWxkZXIgc3RhdGUgaW50byB2YWxpZCBDZWRhciBwb2xpY3kgc3ludGF4LlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQb2xpY3kgY29uc3RydWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBWYWxpZCBDZWRhciBwb2xpY3kgc3RhdGVtZW50XG4gICAqL1xuICBwdWJsaWMgdG9DZWRhcigpOiBzdHJpbmcge1xuICAgIC8vIElmIHJhdyBDZWRhciB3YXMgcHJvdmlkZWQsIHJldHVybiBpdCBkaXJlY3RseVxuICAgIGlmICh0aGlzLnJhd0NlZGFyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXdDZWRhcjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBwYXJ0cyBhcmUgY29uZmlndXJlZFxuICAgIGlmICghdGhpcy5wcmluY2lwYWxDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUHJpbmNpcGFsUmVxdWlyZWRgLCAnUHJpbmNpcGFsIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIGZvckFsbFByaW5jaXBhbHMoKSBvciBmb3JQcmluY2lwYWwoKScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYWN0aW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEFjdGlvblJlcXVpcmVkYCwgJ0FjdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB1c2luZyBvbkFsbEFjdGlvbnMoKSBvciBvbkFjdGlvbnMoKScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVzb3VyY2VDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUmVzb3VyY2VSZXF1aXJlZGAsICdSZXNvdXJjZSBtdXN0IGJlIHNwZWNpZmllZCB1c2luZyBvbkFsbFJlc291cmNlcygpIG9yIG9uUmVzb3VyY2UoKScpO1xuICAgIH1cblxuICAgIGxldCBjZWRhciA9IGAke3RoaXMuZWZmZWN0fShcXG5gO1xuXG4gICAgLy8gUHJpbmNpcGFsXG4gICAgY2VkYXIgKz0gYCAgJHt0aGlzLnByaW5jaXBhbFRvQ2VkYXIoKX0sXFxuYDtcblxuICAgIC8vIEFjdGlvblxuICAgIGNlZGFyICs9IGAgICR7dGhpcy5hY3Rpb25Ub0NlZGFyKCl9LFxcbmA7XG5cbiAgICAvLyBSZXNvdXJjZVxuICAgIGNlZGFyICs9IGAgICR7dGhpcy5yZXNvdXJjZVRvQ2VkYXIoKX1cXG5gO1xuXG4gICAgY2VkYXIgKz0gJyknO1xuXG4gICAgLy8gV2hlbiBjb25kaXRpb25zXG4gICAgaWYgKHRoaXMud2hlbkNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IHdoZW5DZWRhciA9IHRoaXMud2hlbkNvbmRpdGlvbnMuX3RvQ2VkYXIoKTtcbiAgICAgIGlmICh3aGVuQ2VkYXIpIHtcbiAgICAgICAgY2VkYXIgKz0gYFxcbndoZW4ge1xcbiAgJHt3aGVuQ2VkYXJ9XFxufWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVW5sZXNzIGNvbmRpdGlvbnNcbiAgICBpZiAodGhpcy51bmxlc3NDb25kaXRpb25zKSB7XG4gICAgICBjb25zdCB1bmxlc3NDZWRhciA9IHRoaXMudW5sZXNzQ29uZGl0aW9ucy5fdG9DZWRhcigpO1xuICAgICAgaWYgKHVubGVzc0NlZGFyKSB7XG4gICAgICAgIGNlZGFyICs9IGBcXG51bmxlc3Mge1xcbiAgJHt1bmxlc3NDZWRhcn1cXG59YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjZWRhciArPSAnOyc7XG4gICAgcmV0dXJuIGNlZGFyO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmluY2lwYWxUb0NlZGFyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnByaW5jaXBhbENvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBQcmluY2lwYWxDb25maWdSZXF1aXJlZGAsICdQcmluY2lwYWwgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByaW5jaXBhbENvbmZpZy5zY29wZSA9PT0gUHJpbmNpcGFsU2NvcGUuQUxMKSB7XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbCc7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGdyb3VwIG1lbWJlcnNoaXBcbiAgICBpZiAodGhpcy5wcmluY2lwYWxDb25maWcubWVtYmVyT2YpIHtcbiAgICAgIGNvbnN0IHsgZW50aXR5VHlwZSwgZW50aXR5SWQgfSA9IHRoaXMucHJpbmNpcGFsQ29uZmlnLm1lbWJlck9mO1xuICAgICAgcmV0dXJuIGBwcmluY2lwYWwgaW4gJHtlbnRpdHlUeXBlfTo6XCIke2VudGl0eUlkfVwiYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWZpYyBwcmluY2lwYWxcbiAgICBpZiAodGhpcy5wcmluY2lwYWxDb25maWcuZW50aXR5SWQpIHtcbiAgICAgIHJldHVybiBgcHJpbmNpcGFsID09ICR7dGhpcy5wcmluY2lwYWxDb25maWcuZW50aXR5VHlwZX06OlwiJHt0aGlzLnByaW5jaXBhbENvbmZpZy5lbnRpdHlJZH1cImA7XG4gICAgfVxuXG4gICAgLy8gUHJpbmNpcGFsIHR5cGUgb25seSAoaXMgb3BlcmF0b3IpXG4gICAgcmV0dXJuIGBwcmluY2lwYWwgaXMgJHt0aGlzLnByaW5jaXBhbENvbmZpZy5lbnRpdHlUeXBlfWA7XG4gIH1cblxuICBwcml2YXRlIGFjdGlvblRvQ2VkYXIoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEFjdGlvbkNvbmZpZ1JlcXVpcmVkYCwgJ0FjdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aW9uQ29uZmlnLnNjb3BlID09PSBBY3Rpb25TY29wZS5BTEwpIHtcbiAgICAgIHJldHVybiAnYWN0aW9uJztcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25Db25maWcuYWN0aW9ucyE7XG5cbiAgICAvLyBGb3JtYXQgYWN0aW9uOiBpZiBpdCBjb250YWlucyBcIjo6XCIgaXQncyBhbHJlYWR5IG5hbWVzcGFjZWQsIGp1c3QgZW5zdXJlIHF1b3Rlc1xuICAgIC8vIE90aGVyd2lzZSB0cmVhdCBhcyBhY3Rpb24gaWRlbnRpZmllclxuICAgIGNvbnN0IGZvcm1hdEFjdGlvbiA9IChhY3Rpb246IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoYWN0aW9uLmluY2x1ZGVzKCc6OicpKSB7XG4gICAgICAgIC8vIEFscmVhZHkgbmFtZXNwYWNlZCBsaWtlIFwiQWdlbnRDb3JlOjpBY3Rpb246OmFjdGlvbm5hbWVcIlxuICAgICAgICAvLyBOZWVkIHRvIGVuc3VyZSB0aGUgYWN0aW9uIG5hbWUgcGFydCBpcyBxdW90ZWRcbiAgICAgICAgY29uc3QgcGFydHMgPSBhY3Rpb24uc3BsaXQoJzo6Jyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBwYXJ0cy5zbGljZSgyKS5qb2luKCc6OicpO1xuICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHBhcnRzLnNsaWNlKDAsIDIpLmpvaW4oJzo6Jyk7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWVzcGFjZX06OlwiJHthY3Rpb25OYW1lfVwiYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBhcy1pcyAod2lsbCBiZSB2YWxpZGF0ZWQgYnkgQ2VkYXIpXG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH07XG5cbiAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBgYWN0aW9uID09ICR7Zm9ybWF0QWN0aW9uKGFjdGlvbnNbMF0pfWA7XG4gICAgfVxuXG4gICAgLy8gTXVsdGlwbGUgYWN0aW9uc1xuICAgIGNvbnN0IGZvcm1hdHRlZEFjdGlvbnMgPSBhY3Rpb25zLm1hcChhID0+IGZvcm1hdEFjdGlvbihhKSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYGFjdGlvbiBpbiBbJHtmb3JtYXR0ZWRBY3Rpb25zfV1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvdXJjZVRvQ2VkYXIoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUmVzb3VyY2VDb25maWdSZXF1aXJlZGAsICdSZXNvdXJjZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnJlc291cmNlQ29uZmlnLnNjb3BlKSB7XG4gICAgICBjYXNlIFJlc291cmNlU2NvcGUuQUxMOlxuICAgICAgICAvLyBOb3RlOiBXaWxkY2FyZCByZXNvdXJjZXMgbWF5IGJlIHJlamVjdGVkIGJ5IEFXUyBCZWRyb2NrIEFnZW50Q29yZSBzZXJ2aWNlXG4gICAgICAgIHJldHVybiAncmVzb3VyY2UnO1xuXG4gICAgICBjYXNlIFJlc291cmNlU2NvcGUuVFlQRTpcbiAgICAgICAgLy8gUmVzb3VyY2UgdHlwZSBjb25zdHJhaW50OiBcInJlc291cmNlIGlzIEVudGl0eVR5cGVcIlxuICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2VDb25maWcuZW50aXR5VHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgRW50aXR5VHlwZVJlcXVpcmVkYCwgJ0VudGl0eSB0eXBlIGlzIHJlcXVpcmVkIGZvciBUWVBFIHJlc291cmNlIHNjb3BlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGByZXNvdXJjZSBpcyAke3RoaXMucmVzb3VyY2VDb25maWcuZW50aXR5VHlwZX1gO1xuXG4gICAgICBjYXNlIFJlc291cmNlU2NvcGUuU1BFQ0lGSUM6XG4gICAgICAgIC8vIFNwZWNpZmljIHJlc291cmNlOiBcInJlc291cmNlID09IEVudGl0eVR5cGU6OlwiYXJuXCJcIlxuICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2VDb25maWcuZW50aXR5VHlwZSB8fCAhdGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlBcm4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEVudGl0eVR5cGVBbmRBcm5SZXF1aXJlZGAsICdFbnRpdHkgdHlwZSBhbmQgQVJOIGFyZSByZXF1aXJlZCBmb3IgU1BFQ0lGSUMgcmVzb3VyY2Ugc2NvcGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHJlc291cmNlID09ICR7dGhpcy5yZXNvdXJjZUNvbmZpZy5lbnRpdHlUeXBlfTo6XCIke3RoaXMucmVzb3VyY2VDb25maWcuZW50aXR5QXJufVwiYDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBVbmtub3duUmVzb3VyY2VTY29wZWAsIGBVbmtub3duIHJlc291cmNlIHNjb3BlOiAke3RoaXMucmVzb3VyY2VDb25maWcuc2NvcGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vdFJhd0NlZGFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhd0NlZGFyKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBSYXdDZWRhckNvbmZsaWN0YCxcbiAgICAgICAgJ0Nhbm5vdCB1c2UgYnVpbGRlciBtZXRob2RzIHdpdGggcmF3IENlZGFyLiAnICtcbiAgICAgICAgJ0VpdGhlciB1c2UgUG9saWN5U3RhdGVtZW50LmZyb21DZWRhcigpIG9yIGJ1aWxkZXIgbWV0aG9kcywgbm90IGJvdGguJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
7
  *
8
8
  */
9
9
  class PolicyValidationMode {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyValidationMode", version: "2.253.1-alpha.0" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyValidationMode", version: "2.255.0-alpha.0" };
11
11
  /**
12
12
  * Fail policy creation if any validation findings are detected.
13
13
  * This is the safer default - catches policy errors early.
@@ -69,7 +69,7 @@ let Policy = (() => {
69
69
  Policy = _classThis = _classDescriptor.value;
70
70
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
71
71
  }
72
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Policy", version: "2.253.1-alpha.0" };
72
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Policy", version: "2.255.0-alpha.0" };
73
73
  /** Uniquely identifies this class. */
74
74
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Policy';
75
75
  /**
@@ -29,7 +29,7 @@ class RuntimeCustomClaim {
29
29
  valueType;
30
30
  operator;
31
31
  value;
32
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeCustomClaim", version: "2.253.1-alpha.0" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeCustomClaim", version: "2.255.0-alpha.0" };
33
33
  /**
34
34
  * Create a custom claim with a string value.
35
35
  * String claims must use the EQUALS operator.
@@ -22,7 +22,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
22
22
  * Provides static factory methods to create different authentication types.
23
23
  */
24
24
  class RuntimeAuthorizerConfiguration {
25
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeAuthorizerConfiguration", version: "2.253.1-alpha.0" };
25
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeAuthorizerConfiguration", version: "2.255.0-alpha.0" };
26
26
  /**
27
27
  * Use IAM authentication (default).
28
28
  * Requires AWS credentials to sign requests using SigV4.
@@ -18,7 +18,7 @@ const MAX_DELIVERY_NAME_LENGTH = 60;
18
18
  */
19
19
  class LogType {
20
20
  value;
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LogType", version: "2.253.1-alpha.0" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LogType", version: "2.255.0-alpha.0" };
22
22
  /**
23
23
  * Application logs for agent runtime invocations
24
24
  */
@@ -53,7 +53,7 @@ exports.LogType = LogType;
53
53
  * - `LoggingDestination.firehose(stream)` - Send logs to Kinesis Data Firehose
54
54
  */
55
55
  class LoggingDestination {
56
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LoggingDestination", version: "2.253.1-alpha.0" };
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LoggingDestination", version: "2.255.0-alpha.0" };
57
57
  /**
58
58
  * Create a logging destination that sends logs to a CloudWatch Log Group
59
59
  *
@@ -19,7 +19,7 @@ import type { Construct } from 'constructs';
19
19
  import type { Runtime } from './runtime';
20
20
  /**
21
21
  * Bedrock AgentCore runtime environment for code execution
22
- * Allowed values: PYTHON_3_10 | PYTHON_3_11 | PYTHON_3_12 | PYTHON_3_13
22
+ * Allowed values: PYTHON_3_10 | PYTHON_3_11 | PYTHON_3_12 | PYTHON_3_13 | PYTHON_3_14 | NODE_22
23
23
  */
24
24
  export declare enum AgentCoreRuntime {
25
25
  /**
@@ -37,7 +37,15 @@ export declare enum AgentCoreRuntime {
37
37
  /**
38
38
  * Python 3.13 runtime
39
39
  */
40
- PYTHON_3_13 = "PYTHON_3_13"
40
+ PYTHON_3_13 = "PYTHON_3_13",
41
+ /**
42
+ * Python 3.14 runtime
43
+ */
44
+ PYTHON_3_14 = "PYTHON_3_14",
45
+ /**
46
+ * Node.js 22 runtime
47
+ */
48
+ NODE_22 = "NODE_22"
41
49
  }
42
50
  /**
43
51
  * Options for configuring an S3 code asset from local files for agent runtime artifact
@@ -74,7 +82,7 @@ export declare abstract class AgentRuntimeArtifact {
74
82
  /**
75
83
  * Reference an agent runtime artifact that's constructed directly from an S3 object
76
84
  * @param s3Location The source code location and configuration details.
77
- * @param runtime The runtime environment for executing the code. Allowed values: PYTHON_3_10 | PYTHON_3_11 | PYTHON_3_12 | PYTHON_3_13
85
+ * @param runtime The runtime environment for executing the code. Allowed values: PYTHON_3_10 | PYTHON_3_11 | PYTHON_3_12 | PYTHON_3_13 | PYTHON_3_14 | NODE_22
78
86
  * @param entrypoint The entry point for the code execution, specifying the function or method that should be invoked when the code runs.
79
87
  */
80
88
  static fromS3(s3Location: s3.Location, runtime: AgentCoreRuntime, entrypoint: string[]): AgentRuntimeArtifact;