@mavogel/awscdk-rootmail 0.0.214 → 0.0.216

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 (85) hide show
  1. package/.jsii +30 -12
  2. package/API.md +14 -0
  3. package/CONTRIBUTING.md +3 -3
  4. package/README.md +3 -3
  5. package/integ-tests/README.md +11 -4
  6. package/integ-tests/common.ts +2 -0
  7. package/integ-tests/create-e2e-cfn-stack.bash +35 -0
  8. package/integ-tests/delete-e2e-cfn-stack.bash +26 -0
  9. package/integ-tests/integ.rootmail-custom-santa.ts +1 -2
  10. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/RootmailIntegTestStack.assets.json +8 -8
  11. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/RootmailIntegTestStack.template.json +4 -4
  12. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.assets.json +2 -2
  13. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.template.json +2 -2
  14. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/{asset.0649b5bfaa322d6bd173d2daef3177389cf0778b556b300ac6bf451704cc3a49 → asset.97724f55c990db7c62d85b80d4afb032e60011490da173e3551e6a131013b79d}/index.js +17458 -464
  15. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/{asset.f9b17c134d24cf60e1d26c033b5f4f247b759149619ac0aac341b950a10ccf14 → asset.f75274dd7677b6ef41f29d2dfc2c885b4f4e069d3fb8e67636bd89efd3f0fcad}/index.js +2 -0
  16. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/integ.json +1 -1
  17. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/manifest.json +2 -2
  18. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/tree.json +3 -3
  19. package/integ-tests/integ.rootmail.ts +1 -2
  20. package/integ-tests/integ.rootmail.ts.snapshot/RootmailIntegTestStack.assets.json +8 -8
  21. package/integ-tests/integ.rootmail.ts.snapshot/RootmailIntegTestStack.template.json +4 -4
  22. package/integ-tests/integ.rootmail.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.assets.json +2 -2
  23. package/integ-tests/integ.rootmail.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.template.json +3 -3
  24. package/integ-tests/integ.rootmail.ts.snapshot/{asset.de67316e819b929cc1aa19838de373be5c9ede7a11e8132fabd28dbc730a92fd → asset.3fe096136c1d1292627baeb9b860b3206032deebb5a03ea407d7d04833a222d7}/index.js +17489 -474
  25. package/integ-tests/integ.rootmail.ts.snapshot/{asset.f9b17c134d24cf60e1d26c033b5f4f247b759149619ac0aac341b950a10ccf14 → asset.f75274dd7677b6ef41f29d2dfc2c885b4f4e069d3fb8e67636bd89efd3f0fcad}/index.js +2 -0
  26. package/integ-tests/integ.rootmail.ts.snapshot/integ.json +1 -1
  27. package/integ-tests/integ.rootmail.ts.snapshot/manifest.json +2 -2
  28. package/integ-tests/integ.rootmail.ts.snapshot/tree.json +3 -3
  29. package/lib/rootmail.d.ts +7 -1
  30. package/lib/rootmail.js +4 -2
  31. package/lib/ses-receive.js +1 -1
  32. package/lib/ses-receive.ops-santa-handler.js +32 -11
  33. package/node_modules/@aws-sdk/client-s3/dist-cjs/index.js +2 -0
  34. package/node_modules/@aws-sdk/client-s3/dist-es/protocols/Aws_restXml.js +2 -0
  35. package/node_modules/@aws-sdk/client-s3/dist-types/commands/CompleteMultipartUploadCommand.d.ts +1 -0
  36. package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateBucketCommand.d.ts +13 -13
  37. package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectCommand.d.ts +10 -10
  38. package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectsCommand.d.ts +22 -22
  39. package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectCommand.d.ts +19 -19
  40. package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListMultipartUploadsCommand.d.ts +32 -32
  41. package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketVersioningCommand.d.ts +4 -2
  42. package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectCommand.d.ts +31 -30
  43. package/node_modules/@aws-sdk/client-s3/dist-types/models/models_0.d.ts +12 -0
  44. package/node_modules/@aws-sdk/client-s3/dist-types/models/models_1.d.ts +10 -0
  45. package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/models_0.d.ts +1 -0
  46. package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/models_1.d.ts +1 -0
  47. package/node_modules/@aws-sdk/client-s3/package.json +1 -1
  48. package/node_modules/axios/CHANGELOG.md +38 -0
  49. package/node_modules/axios/README.md +20 -8
  50. package/node_modules/axios/dist/axios.js +34 -63
  51. package/node_modules/axios/dist/axios.js.map +1 -1
  52. package/node_modules/axios/dist/axios.min.js +1 -1
  53. package/node_modules/axios/dist/axios.min.js.map +1 -1
  54. package/node_modules/axios/dist/browser/axios.cjs +40 -71
  55. package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
  56. package/node_modules/axios/dist/esm/axios.js +40 -71
  57. package/node_modules/axios/dist/esm/axios.js.map +1 -1
  58. package/node_modules/axios/dist/esm/axios.min.js +1 -1
  59. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  60. package/node_modules/axios/dist/node/axios.cjs +45 -75
  61. package/node_modules/axios/dist/node/axios.cjs.map +1 -1
  62. package/node_modules/axios/index.d.cts +38 -29
  63. package/node_modules/axios/index.d.ts +75 -561
  64. package/node_modules/axios/lib/adapters/http.js +4 -4
  65. package/node_modules/axios/lib/core/Axios.js +7 -2
  66. package/node_modules/axios/lib/core/mergeConfig.js +5 -5
  67. package/node_modules/axios/lib/env/data.js +1 -1
  68. package/node_modules/axios/lib/helpers/buildURL.js +7 -1
  69. package/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  70. package/node_modules/axios/lib/helpers/isURLSameOrigin.js +12 -65
  71. package/node_modules/axios/lib/helpers/validator.js +8 -0
  72. package/node_modules/axios/package.json +3 -3
  73. package/node_modules/cdk-nag/.jsii +2 -2
  74. package/node_modules/cdk-nag/lib/ignore-suppression-conditions.js +5 -5
  75. package/node_modules/cdk-nag/lib/nag-logger.js +2 -2
  76. package/node_modules/cdk-nag/lib/nag-pack.js +1 -1
  77. package/node_modules/cdk-nag/lib/nag-rules.js +1 -1
  78. package/node_modules/cdk-nag/lib/nag-suppressions.js +1 -1
  79. package/node_modules/cdk-nag/lib/packs/aws-solutions.js +1 -1
  80. package/node_modules/cdk-nag/lib/packs/hipaa-security.js +1 -1
  81. package/node_modules/cdk-nag/lib/packs/nist-800-53-r4.js +1 -1
  82. package/node_modules/cdk-nag/lib/packs/nist-800-53-r5.js +1 -1
  83. package/node_modules/cdk-nag/lib/packs/pci-dss-321.js +1 -1
  84. package/node_modules/cdk-nag/package.json +1 -1
  85. package/package.json +6 -6
@@ -54,6 +54,8 @@ async function handler(event) {
54
54
  [ATTR_DKIM_TOKENS]: dkimTokens
55
55
  }
56
56
  };
57
+ // TODO check if delete should do nothing: https://github.com/superwerker/superwerker/blob/main/templates/rootmail.yaml#L170
58
+ // we store in Parameter Store as well
57
59
  case "Delete":
58
60
  console.log(`Deleting Domain identity for domain '${domain}' with PhysicalResourceId '${event.PhysicalResourceId}'`);
59
61
  const deleteResponse = await ses.deleteIdentity({ Identity: domain });
@@ -11,7 +11,7 @@
11
11
  ]
12
12
  },
13
13
  "regions": [
14
- "${Token[AWS.Region.8]}"
14
+ "${Token[AWS.Region.9]}"
15
15
  ],
16
16
  "cdkCommandOptions": {
17
17
  "destroy": {
@@ -17,7 +17,7 @@
17
17
  "validateOnSynth": false,
18
18
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
19
19
  "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
20
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/48c74a489d3bba323f0b5e9de6b107e045144c26b35130b6083823df88a4b060.json",
20
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0c6695535d361eb1b54f0d030f4fe10d11036cab6772ade6d1a74e5662d811fc.json",
21
21
  "requiresBootstrapStackVersion": 6,
22
22
  "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
23
23
  "additionalDependencies": [
@@ -670,7 +670,7 @@
670
670
  "validateOnSynth": false,
671
671
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
672
672
  "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
673
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3c319bbdb9ad02954c2bf2dd8462fcec43716ff75a9b9bb053439e3851f2f0be.json",
673
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/da70fb6c6f4ab07690ab5aad465c70e2b8caca384237a5407a691c1e9f2aff78.json",
674
674
  "requiresBootstrapStackVersion": 6,
675
675
  "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
676
676
  "additionalDependencies": [
@@ -785,7 +785,7 @@
785
785
  "s3Bucket": {
786
786
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
787
787
  },
788
- "s3Key": "de67316e819b929cc1aa19838de373be5c9ede7a11e8132fabd28dbc730a92fd.zip"
788
+ "s3Key": "3fe096136c1d1292627baeb9b860b3206032deebb5a03ea407d7d04833a222d7.zip"
789
789
  },
790
790
  "environment": {
791
791
  "variables": {
@@ -1060,7 +1060,7 @@
1060
1060
  "s3Bucket": {
1061
1061
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
1062
1062
  },
1063
- "s3Key": "f9b17c134d24cf60e1d26c033b5f4f247b759149619ac0aac341b950a10ccf14.zip"
1063
+ "s3Key": "f75274dd7677b6ef41f29d2dfc2c885b4f4e069d3fb8e67636bd89efd3f0fcad.zip"
1064
1064
  },
1065
1065
  "environment": {
1066
1066
  "variables": {
@@ -1862,7 +1862,7 @@
1862
1862
  "route53:ListResourceRecordSets"
1863
1863
  ],
1864
1864
  "Effect": "Allow",
1865
- "Resource": "arn:aws:route53:::hostedzone/Z066250529JROZU7IIY3Q"
1865
+ "Resource": "arn:aws:route53:::hostedzone/Z01336592122MNIWKOZSV"
1866
1866
  }
1867
1867
  ],
1868
1868
  "Version": "2012-10-17"
package/lib/rootmail.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Duration, aws_lambda as lambda, aws_s3 as s3 } from 'aws-cdk-lib';
1
+ import { Duration, aws_lambda as lambda, aws_s3 as s3, RemovalPolicy } from 'aws-cdk-lib';
2
2
  import { Construct } from 'constructs';
3
3
  export interface RootmailProps {
4
4
  /**
@@ -28,6 +28,12 @@ export interface RootmailProps {
28
28
  * The custom SES receive function to use
29
29
  */
30
30
  readonly customSesReceiveFunction?: lambda.Function;
31
+ /**
32
+ * The removal policy for the email bucket
33
+ *
34
+ * @default RemovalPolicy.RETAIN
35
+ */
36
+ readonly emailBucketDeletePolicy?: RemovalPolicy;
31
37
  /**
32
38
  * Whether to set all removal policies to DESTROY. This is useful for integration testing purposes.
33
39
  *
package/lib/rootmail.js CHANGED
@@ -18,6 +18,7 @@ class Rootmail extends constructs_1.Construct {
18
18
  const totalTimeToWireDNS = props.totalTimeToWireDNS ?? aws_cdk_lib_1.Duration.hours(2);
19
19
  const wireDNSToHostedZoneID = props.wireDNSToHostedZoneID ?? undefined;
20
20
  const setDestroyPolicyToAllResources = props.setDestroyPolicyToAllResources ?? false;
21
+ const emailBucketDeletePolicy = props.emailBucketDeletePolicy ?? aws_cdk_lib_1.RemovalPolicy.RETAIN;
21
22
  const deployRegion = aws_cdk_lib_1.Stack.of(this).region;
22
23
  console.log(`Deploy region is ${deployRegion}`);
23
24
  if (!(0, common_1.isSESEnabledRegion)(deployRegion)) {
@@ -29,6 +30,7 @@ class Rootmail extends constructs_1.Construct {
29
30
  this.emailBucket = new aws_cdk_lib_1.aws_s3.Bucket(this, 'EmailBucket', {
30
31
  blockPublicAccess: aws_cdk_lib_1.aws_s3.BlockPublicAccess.BLOCK_ALL,
31
32
  encryption: aws_cdk_lib_1.aws_s3.BucketEncryption.S3_MANAGED,
33
+ removalPolicy: emailBucketDeletePolicy,
32
34
  });
33
35
  cdk_nag_1.NagSuppressions.addResourceSuppressions([
34
36
  this.emailBucket,
@@ -74,7 +76,7 @@ class Rootmail extends constructs_1.Construct {
74
76
  }
75
77
  exports.Rootmail = Rootmail;
76
78
  _a = JSII_RTTI_SYMBOL_1;
77
- Rootmail[_a] = { fqn: "@mavogel/awscdk-rootmail.Rootmail", version: "0.0.214" };
79
+ Rootmail[_a] = { fqn: "@mavogel/awscdk-rootmail.Rootmail", version: "0.0.216" };
78
80
  /**
79
81
  * Aspect for setting all removal policies to DESTROY
80
82
  */
@@ -85,4 +87,4 @@ class ApplyDestroyPolicyAspect {
85
87
  }
86
88
  }
87
89
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdG1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9vdG1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FZcUI7QUFDckIscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCxxQ0FBaUU7QUFDakUseURBQW9EO0FBQ3BELCtDQUEyQztBQTJDM0MsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFJckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyx1QkFBdUIsR0FBRywrQkFBK0IsQ0FBQztRQUUvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixJQUFJLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLFNBQVMsQ0FBQztRQUN2RSxNQUFNLDhCQUE4QixHQUFHLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxLQUFLLENBQUM7UUFFckYsTUFBTSxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUEsMkJBQWtCLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxZQUFZLHVDQUF1QywwQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZJLENBQUM7UUFFRDs7V0FFRztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxvQkFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BELGlCQUFpQixFQUFFLG9CQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUztZQUNqRCxVQUFVLEVBQUUsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1NBQzNDLENBQUMsQ0FBQztRQUNILHlCQUFlLENBQUMsdUJBQXVCLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVc7U0FDakIsRUFBRTtZQUNELEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBRTtZQUNqRSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUU7U0FDM0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXZGLHlCQUFlLENBQUMsdUJBQXVCLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFPO1NBQ3pCLEVBQUU7WUFDRCxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUU7U0FDM0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVUOztXQUVHO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx5QkFBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3hELFFBQVEsRUFBRSxHQUFHLFNBQVMsSUFBSSxNQUFNLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHFCQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ3pGLGFBQWEsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQzNDLGVBQWUsRUFBRSxVQUFVLENBQUMscUJBQXFCLElBQUksRUFBRTtTQUN4RCxDQUFDLENBQUM7UUFFSCxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3pDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLFVBQVU7WUFDdEIscUJBQXFCLEVBQUUscUJBQXFCO1lBQzVDLHNCQUFzQixFQUFFLHNCQUFzQjtZQUM5QyxrQkFBa0IsRUFBRSxrQkFBa0I7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx3QkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDakMsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsU0FBUztZQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0Isd0JBQXdCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QjtTQUN6RCxDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFDdkMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1lBQ25DLHFCQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQzs7QUF6RUgsNEJBMkVDOzs7QUFFRDs7R0FFRztBQUNILE1BQU0sd0JBQXdCO0lBQ3JCLEtBQUssQ0FBQyxJQUFnQjtRQUMzQixJQUFJLElBQUksWUFBWSx5QkFBVyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDJCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIER1cmF0aW9uLFxuICBTdGFjayxcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxuICBhd3Nfcm91dGU1MyBhcyByNTMsXG4gIGF3c19zMyBhcyBzMyxcbiAgYXdzX3NzbSBhcyBzc20sXG4gIENmblJlc291cmNlLFxuICBJQXNwZWN0LFxuICBSZW1vdmFsUG9saWN5LFxuICBBc3BlY3RzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgaXNTRVNFbmFibGVkUmVnaW9uLCBzZXNFbmFibGVkUmVnaW9ucyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IEhvc3RlZFpvbmVEa2ltIH0gZnJvbSAnLi9ob3N0ZWQtem9uZS1ka2ltJztcbmltcG9ydCB7IFNFU1JlY2VpdmUgfSBmcm9tICcuL3Nlcy1yZWNlaXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBSb290bWFpbFByb3BzIHtcbiAgLyoqXG4gICAqIERvbWFpbiB1c2VkIGZvciByb290IG1haWwgZmVhdHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJkb21haW4gdXNlZCBmb3Igcm9vdCBtYWlsIGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhd3MnXG4gICAqL1xuICByZWFkb25seSBzdWJkb21haW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCB0aW1lIHRvIHdhaXQgZm9yIHRoZSBETlMgcmVjb3JkcyB0byBiZSBhdmFpbGFibGUvd2lyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmhvdXJzKDIpXG4gICAqL1xuICByZWFkb25seSB0b3RhbFRpbWVUb1dpcmVETlM/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGhvc3RlZCB6b25lIElEIG9mIHRoZSBkb21haW4gdGhhdCBpcyByZWdpc3RlcmVkIFJvdXRlNTMgQU5EIGluIHRoZSBzYW1lIEFXUyBhY2NvdW50XG4gICAqIHRvIGVuYWJsZSBhdXRvd2lyaW5nIG9mIHRoZSBETlMgcmVjb3Jkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB3aXJlRE5TVG9Ib3N0ZWRab25lSUQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gU0VTIHJlY2VpdmUgZnVuY3Rpb24gdG8gdXNlXG4gICAqL1xuICByZWFkb25seSBjdXN0b21TZXNSZWNlaXZlRnVuY3Rpb24/OiBsYW1iZGEuRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2V0IGFsbCByZW1vdmFsIHBvbGljaWVzIHRvIERFU1RST1kuIFRoaXMgaXMgdXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJvb3RtYWlsIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbWFpbEJ1Y2tldDogczMuQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb290bWFpbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmhvc3RlZFpvbmVQYXJhbWV0ZXJOYW1lID0gJy9yb290bWFpbC9kb21haW5fbmFtZV9zZXJ2ZXJzJztcblxuICAgIGNvbnN0IGRvbWFpbiA9IHByb3BzLmRvbWFpbjtcbiAgICBjb25zdCBzdWJkb21haW4gPSBwcm9wcy5zdWJkb21haW4gPz8gJ2F3cyc7XG4gICAgY29uc3QgdG90YWxUaW1lVG9XaXJlRE5TID0gcHJvcHMudG90YWxUaW1lVG9XaXJlRE5TID8/IER1cmF0aW9uLmhvdXJzKDIpO1xuICAgIGNvbnN0IHdpcmVETlNUb0hvc3RlZFpvbmVJRCA9IHByb3BzLndpcmVETlNUb0hvc3RlZFpvbmVJRCA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzID0gcHJvcHMuc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzID8/IGZhbHNlO1xuXG4gICAgY29uc3QgZGVwbG95UmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGNvbnNvbGUubG9nKGBEZXBsb3kgcmVnaW9uIGlzICR7ZGVwbG95UmVnaW9ufWApO1xuICAgIGlmICghaXNTRVNFbmFibGVkUmVnaW9uKGRlcGxveVJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU0VTIGlzIG5vdCBhdmFpbGFibGUgaW4gcmVnaW9uICR7ZGVwbG95UmVnaW9ufS4gVXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlZ2lvbnM6ICR7c2VzRW5hYmxlZFJlZ2lvbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFTUFJTCBCdWNrZXRcbiAgICAgKi9cbiAgICB0aGlzLmVtYWlsQnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnRW1haWxCdWNrZXQnLCB7XG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhbXG4gICAgICB0aGlzLmVtYWlsQnVja2V0LFxuICAgIF0sIFtcbiAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtUzEnLCByZWFzb246ICdubyBzZXJ2ZXIgYWNjZXNzIGxvZ3MgbmVlZGVkJyB9LFxuICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1TMTAnLCByZWFzb246ICdubyBTU0wgYWNjZXNzIG5lZWRlZCcgfSxcbiAgICBdLCB0cnVlKTtcbiAgICB0aGlzLmVtYWlsQnVja2V0LmdyYW50UHV0KG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc2VzLmFtYXpvbmF3cy5jb20nKSwgJ1Jvb3RNYWlsLyonKTtcblxuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhbXG4gICAgICB0aGlzLmVtYWlsQnVja2V0LnBvbGljeSEsXG4gICAgXSwgW1xuICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1TMTAnLCByZWFzb246ICdubyBTU0wgYWNjZXNzIG5lZWRlZCcgfSxcbiAgICBdLCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIEhPU1RFRCBaT05FXG4gICAgICovXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IG5ldyByNTMuSG9zdGVkWm9uZSh0aGlzLCAnSG9zdGVkWm9uZScsIHtcbiAgICAgIHpvbmVOYW1lOiBgJHtzdWJkb21haW59LiR7ZG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBob3N0ZWRab25lU1NNUGFyYW1ldGVyID0gbmV3IHNzbS5TdHJpbmdMaXN0UGFyYW1ldGVyKHRoaXMsICdIb3N0ZWRab25lU1NNUGFyYW1ldGVyJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5ob3N0ZWRab25lUGFyYW1ldGVyTmFtZSxcbiAgICAgIHN0cmluZ0xpc3RWYWx1ZTogaG9zdGVkWm9uZS5ob3N0ZWRab25lTmFtZVNlcnZlcnMgfHwgW10sXG4gICAgfSk7XG5cbiAgICBuZXcgSG9zdGVkWm9uZURraW0odGhpcywgJ0hvc3RlZFpvbmVEa2ltJywge1xuICAgICAgZG9tYWluOiBkb21haW4sXG4gICAgICBzdWJkb21haW46IHN1YmRvbWFpbixcbiAgICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICB3aXJlRE5TVG9Ib3N0ZWRab25lSUQ6IHdpcmVETlNUb0hvc3RlZFpvbmVJRCxcbiAgICAgIGhvc3RlZFpvbmVTU01QYXJhbWV0ZXI6IGhvc3RlZFpvbmVTU01QYXJhbWV0ZXIsXG4gICAgICB0b3RhbFRpbWVUb1dpcmVETlM6IHRvdGFsVGltZVRvV2lyZUROUyxcbiAgICB9KTtcblxuICAgIG5ldyBTRVNSZWNlaXZlKHRoaXMsICdTRVNSZWNlaXZlJywge1xuICAgICAgZG9tYWluOiBkb21haW4sXG4gICAgICBzdWJkb21haW46IHN1YmRvbWFpbixcbiAgICAgIGVtYWlsYnVja2V0OiB0aGlzLmVtYWlsQnVja2V0LFxuICAgICAgY3VzdG9tU2VzUmVjZWl2ZUZ1bmN0aW9uOiBwcm9wcy5jdXN0b21TZXNSZWNlaXZlRnVuY3Rpb24sXG4gICAgfSk7XG5cbiAgICAvLyBJZiBEZXN0cm95IFBvbGljeSBBc3BlY3QgaXMgcHJlc2VudDpcbiAgICBpZiAoc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzKSB7XG4gICAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgQXBwbHlEZXN0cm95UG9saWN5QXNwZWN0KCkpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKlxuICogQXNwZWN0IGZvciBzZXR0aW5nIGFsbCByZW1vdmFsIHBvbGljaWVzIHRvIERFU1RST1lcbiAqL1xuY2xhc3MgQXBwbHlEZXN0cm95UG9saWN5QXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDZm5SZXNvdXJjZSkge1xuICAgICAgbm9kZS5hcHBseVJlbW92YWxQb2xpY3koUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG4gIH1cbn0iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdG1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9vdG1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FZcUI7QUFDckIscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCxxQ0FBaUU7QUFDakUseURBQW9EO0FBQ3BELCtDQUEyQztBQWtEM0MsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFJckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyx1QkFBdUIsR0FBRywrQkFBK0IsQ0FBQztRQUUvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixJQUFJLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLFNBQVMsQ0FBQztRQUN2RSxNQUFNLDhCQUE4QixHQUFHLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxLQUFLLENBQUM7UUFDckYsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLElBQUksMkJBQWEsQ0FBQyxNQUFNLENBQUM7UUFFdEYsTUFBTSxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUEsMkJBQWtCLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxZQUFZLHVDQUF1QywwQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZJLENBQUM7UUFFRDs7V0FFRztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxvQkFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BELGlCQUFpQixFQUFFLG9CQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUztZQUNqRCxVQUFVLEVBQUUsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1lBQzFDLGFBQWEsRUFBRSx1QkFBdUI7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gseUJBQWUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVztTQUNqQixFQUFFO1lBQ0QsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixFQUFFO1lBQ2pFLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRTtTQUMzRCxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBRyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFdkYseUJBQWUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU87U0FDekIsRUFBRTtZQUNELEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRTtTQUMzRCxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRVQ7O1dBRUc7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLHlCQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDeEQsUUFBUSxFQUFFLEdBQUcsU0FBUyxJQUFJLE1BQU0sRUFBRTtTQUNuQyxDQUFDLENBQUM7UUFFSCxNQUFNLHNCQUFzQixHQUFHLElBQUkscUJBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDekYsYUFBYSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7WUFDM0MsZUFBZSxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO1NBQ3hELENBQUMsQ0FBQztRQUVILElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsVUFBVTtZQUN0QixxQkFBcUIsRUFBRSxxQkFBcUI7WUFDNUMsc0JBQXNCLEVBQUUsc0JBQXNCO1lBQzlDLGtCQUFrQixFQUFFLGtCQUFrQjtTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNqQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3Qix3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCO1NBQ3pELENBQUMsQ0FBQztRQUVILHVDQUF1QztRQUN2QyxJQUFJLDhCQUE4QixFQUFFLENBQUM7WUFDbkMscUJBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDOztBQTNFSCw0QkE2RUM7OztBQUVEOztHQUVHO0FBQ0gsTUFBTSx3QkFBd0I7SUFDckIsS0FBSyxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxZQUFZLHlCQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMkJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIFN0YWNrLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19yb3V0ZTUzIGFzIHI1MyxcbiAgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc3NtIGFzIHNzbSxcbiAgQ2ZuUmVzb3VyY2UsXG4gIElBc3BlY3QsXG4gIFJlbW92YWxQb2xpY3ksXG4gIEFzcGVjdHMsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ2Nkay1uYWcnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBpc1NFU0VuYWJsZWRSZWdpb24sIHNlc0VuYWJsZWRSZWdpb25zIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgSG9zdGVkWm9uZURraW0gfSBmcm9tICcuL2hvc3RlZC16b25lLWRraW0nO1xuaW1wb3J0IHsgU0VTUmVjZWl2ZSB9IGZyb20gJy4vc2VzLXJlY2VpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RtYWlsUHJvcHMge1xuICAvKipcbiAgICogRG9tYWluIHVzZWQgZm9yIHJvb3QgbWFpbCBmZWF0dXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YmRvbWFpbiB1c2VkIGZvciByb290IG1haWwgZmVhdHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2F3cydcbiAgICovXG4gIHJlYWRvbmx5IHN1YmRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRvdGFsIHRpbWUgdG8gd2FpdCBmb3IgdGhlIEROUyByZWNvcmRzIHRvIGJlIGF2YWlsYWJsZS93aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMilcbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsVGltZVRvV2lyZUROUz86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdGVkIHpvbmUgSUQgb2YgdGhlIGRvbWFpbiB0aGF0IGlzIHJlZ2lzdGVyZWQgUm91dGU1MyBBTkQgaW4gdGhlIHNhbWUgQVdTIGFjY291bnRcbiAgICogdG8gZW5hYmxlIGF1dG93aXJpbmcgb2YgdGhlIEROUyByZWNvcmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHdpcmVETlNUb0hvc3RlZFpvbmVJRD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBTRVMgcmVjZWl2ZSBmdW5jdGlvbiB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVNlc1JlY2VpdmVGdW5jdGlvbj86IGxhbWJkYS5GdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIHJlbW92YWwgcG9saWN5IGZvciB0aGUgZW1haWwgYnVja2V0XG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAqL1xuICByZWFkb25seSBlbWFpbEJ1Y2tldERlbGV0ZVBvbGljeT86IFJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2V0IGFsbCByZW1vdmFsIHBvbGljaWVzIHRvIERFU1RST1kuIFRoaXMgaXMgdXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJvb3RtYWlsIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbWFpbEJ1Y2tldDogczMuQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb290bWFpbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmhvc3RlZFpvbmVQYXJhbWV0ZXJOYW1lID0gJy9yb290bWFpbC9kb21haW5fbmFtZV9zZXJ2ZXJzJztcblxuICAgIGNvbnN0IGRvbWFpbiA9IHByb3BzLmRvbWFpbjtcbiAgICBjb25zdCBzdWJkb21haW4gPSBwcm9wcy5zdWJkb21haW4gPz8gJ2F3cyc7XG4gICAgY29uc3QgdG90YWxUaW1lVG9XaXJlRE5TID0gcHJvcHMudG90YWxUaW1lVG9XaXJlRE5TID8/IER1cmF0aW9uLmhvdXJzKDIpO1xuICAgIGNvbnN0IHdpcmVETlNUb0hvc3RlZFpvbmVJRCA9IHByb3BzLndpcmVETlNUb0hvc3RlZFpvbmVJRCA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzID0gcHJvcHMuc2V0RGVzdHJveVBvbGljeVRvQWxsUmVzb3VyY2VzID8/IGZhbHNlO1xuICAgIGNvbnN0IGVtYWlsQnVja2V0RGVsZXRlUG9saWN5ID0gcHJvcHMuZW1haWxCdWNrZXREZWxldGVQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5SRVRBSU47XG5cbiAgICBjb25zdCBkZXBsb3lSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc29sZS5sb2coYERlcGxveSByZWdpb24gaXMgJHtkZXBsb3lSZWdpb259YCk7XG4gICAgaWYgKCFpc1NFU0VuYWJsZWRSZWdpb24oZGVwbG95UmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTRVMgaXMgbm90IGF2YWlsYWJsZSBpbiByZWdpb24gJHtkZXBsb3lSZWdpb259LiBVc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVnaW9uczogJHtzZXNFbmFibGVkUmVnaW9ucy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVNQUlMIEJ1Y2tldFxuICAgICAqL1xuICAgIHRoaXMuZW1haWxCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdFbWFpbEJ1Y2tldCcsIHtcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICByZW1vdmFsUG9saWN5OiBlbWFpbEJ1Y2tldERlbGV0ZVBvbGljeSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoW1xuICAgICAgdGhpcy5lbWFpbEJ1Y2tldCxcbiAgICBdLCBbXG4gICAgICB7IGlkOiAnQXdzU29sdXRpb25zLVMxJywgcmVhc29uOiAnbm8gc2VydmVyIGFjY2VzcyBsb2dzIG5lZWRlZCcgfSxcbiAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtUzEwJywgcmVhc29uOiAnbm8gU1NMIGFjY2VzcyBuZWVkZWQnIH0sXG4gICAgXSwgdHJ1ZSk7XG4gICAgdGhpcy5lbWFpbEJ1Y2tldC5ncmFudFB1dChuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3Nlcy5hbWF6b25hd3MuY29tJyksICdSb290TWFpbC8qJyk7XG5cbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoW1xuICAgICAgdGhpcy5lbWFpbEJ1Y2tldC5wb2xpY3khLFxuICAgIF0sIFtcbiAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtUzEwJywgcmVhc29uOiAnbm8gU1NMIGFjY2VzcyBuZWVkZWQnIH0sXG4gICAgXSwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBIT1NURUQgWk9ORVxuICAgICAqL1xuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBuZXcgcjUzLkhvc3RlZFpvbmUodGhpcywgJ0hvc3RlZFpvbmUnLCB7XG4gICAgICB6b25lTmFtZTogYCR7c3ViZG9tYWlufS4ke2RvbWFpbn1gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZVNTTVBhcmFtZXRlciA9IG5ldyBzc20uU3RyaW5nTGlzdFBhcmFtZXRlcih0aGlzLCAnSG9zdGVkWm9uZVNTTVBhcmFtZXRlcicsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuaG9zdGVkWm9uZVBhcmFtZXRlck5hbWUsXG4gICAgICBzdHJpbmdMaXN0VmFsdWU6IGhvc3RlZFpvbmUuaG9zdGVkWm9uZU5hbWVTZXJ2ZXJzIHx8IFtdLFxuICAgIH0pO1xuXG4gICAgbmV3IEhvc3RlZFpvbmVEa2ltKHRoaXMsICdIb3N0ZWRab25lRGtpbScsIHtcbiAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgc3ViZG9tYWluOiBzdWJkb21haW4sXG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICAgICAgd2lyZUROU1RvSG9zdGVkWm9uZUlEOiB3aXJlRE5TVG9Ib3N0ZWRab25lSUQsXG4gICAgICBob3N0ZWRab25lU1NNUGFyYW1ldGVyOiBob3N0ZWRab25lU1NNUGFyYW1ldGVyLFxuICAgICAgdG90YWxUaW1lVG9XaXJlRE5TOiB0b3RhbFRpbWVUb1dpcmVETlMsXG4gICAgfSk7XG5cbiAgICBuZXcgU0VTUmVjZWl2ZSh0aGlzLCAnU0VTUmVjZWl2ZScsIHtcbiAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgc3ViZG9tYWluOiBzdWJkb21haW4sXG4gICAgICBlbWFpbGJ1Y2tldDogdGhpcy5lbWFpbEJ1Y2tldCxcbiAgICAgIGN1c3RvbVNlc1JlY2VpdmVGdW5jdGlvbjogcHJvcHMuY3VzdG9tU2VzUmVjZWl2ZUZ1bmN0aW9uLFxuICAgIH0pO1xuXG4gICAgLy8gSWYgRGVzdHJveSBQb2xpY3kgQXNwZWN0IGlzIHByZXNlbnQ6XG4gICAgaWYgKHNldERlc3Ryb3lQb2xpY3lUb0FsbFJlc291cmNlcykge1xuICAgICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IEFwcGx5RGVzdHJveVBvbGljeUFzcGVjdCgpKTtcbiAgICB9XG4gIH1cblxufVxuXG4vKipcbiAqIEFzcGVjdCBmb3Igc2V0dGluZyBhbGwgcmVtb3ZhbCBwb2xpY2llcyB0byBERVNUUk9ZXG4gKi9cbmNsYXNzIEFwcGx5RGVzdHJveVBvbGljeUFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpIHtcbiAgICAgIG5vZGUuYXBwbHlSZW1vdmFsUG9saWN5KFJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gICAgfVxuICB9XG59Il19
@@ -129,7 +129,7 @@ class SESReceive extends constructs_1.Construct {
129
129
  }
130
130
  exports.SESReceive = SESReceive;
131
131
  _a = JSII_RTTI_SYMBOL_1;
132
- SESReceive[_a] = { fqn: "@mavogel/awscdk-rootmail.SESReceive", version: "0.0.214" };
132
+ SESReceive[_a] = { fqn: "@mavogel/awscdk-rootmail.SESReceive", version: "0.0.216" };
133
133
  /**
134
134
  * Aspect for setting all removal policies to DESTROY
135
135
  */
@@ -32,21 +32,42 @@ const handler = async (event) => {
32
32
  });
33
33
  const verdicts = {
34
34
  dkim: receipt.dkimVerdict.status,
35
+ dmarc: receipt.dmarcVerdict.status,
35
36
  spam: receipt.spamVerdict.status,
36
37
  spf: receipt.spfVerdict.status,
37
38
  virus: receipt.virusVerdict.status,
38
39
  };
39
40
  for (const [k, v] of Object.entries(verdicts)) {
40
- if (v !== 'PASS') {
41
- log({
42
- class: k,
43
- value: v,
44
- id: id,
45
- key: key,
46
- level: 'warn',
47
- msg: 'verdict failed - ops santa item skipped',
48
- });
49
- return;
41
+ switch (k) {
42
+ case 'dkim':
43
+ case 'dmarc':
44
+ if (v !== 'PASS' && v !== 'GRAY') {
45
+ log({
46
+ class: k,
47
+ value: v,
48
+ id: id,
49
+ key: key,
50
+ level: 'warn',
51
+ msg: 'verdict failed - ops santa item skipped',
52
+ });
53
+ return;
54
+ }
55
+ break;
56
+ case 'spam':
57
+ case 'spf':
58
+ case 'virus':
59
+ if (v !== 'PASS') {
60
+ log({
61
+ class: k,
62
+ value: v,
63
+ id: id,
64
+ key: key,
65
+ level: 'warn',
66
+ msg: 'verdict failed - ops santa item skipped',
67
+ });
68
+ return;
69
+ }
70
+ break;
50
71
  }
51
72
  }
52
73
  const response = await s3.getObject({ Bucket: emailBucket, Key: key });
@@ -154,4 +175,4 @@ exports.handler = handler;
154
175
  function log(msg) {
155
176
  console.log(JSON.stringify(msg));
156
177
  }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VzLXJlY2VpdmUub3BzLXNhbnRhLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VzLXJlY2VpdmUub3BzLXNhbnRhLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQXdDO0FBQ3hDLG9EQUE0RDtBQUM1RCwyQ0FBMEM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztBQUNsRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztBQUM3QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0FBQ3BELE1BQU0sRUFBRSxHQUFHLElBQUksY0FBRSxFQUFFLENBQUM7QUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBRyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxNQUFNO0NBQ2YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxxQkFBcUIsR0FBRztJQUM1Qiw2Q0FBNkM7SUFDN0MsZ0NBQWdDO0NBQ2pDLENBQUM7QUFpRUssTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUU5RCxHQUFHLENBQUM7UUFDRixLQUFLLEVBQUUsS0FBSztRQUNaLEtBQUssRUFBRSxPQUFPO0tBQ2YsQ0FBQyxDQUFDO0lBRUgsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbkMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFFbkMsR0FBRyxDQUFDO1lBQ0YsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsT0FBTztZQUNk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QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFMzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IE9wc0l0ZW1EYXRhVmFsdWUsIFNTTSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgc2ltcGxlUGFyc2VyIH0gZnJvbSAnbWFpbHBhcnNlcic7XG5cbmNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LlJPT1RNQUlMX0RFUExPWV9SRUdJT047XG5jb25zdCBlbWFpbEJ1Y2tldCA9IHByb2Nlc3MuZW52LkVNQUlMX0JVQ0tFVDtcbmNvbnN0IGVtYWlsQnVja2V0QXJuID0gcHJvY2Vzcy5lbnYuRU1BSUxfQlVDS0VUX0FSTjtcbmNvbnN0IHMzID0gbmV3IFMzKCk7XG5jb25zdCBzc20gPSBuZXcgU1NNKHtcbiAgcmVnaW9uOiByZWdpb24sXG59KTtcblxuY29uc3QgZmlsdGVyZWRFbWFpbFN1YmplY3RzID0gW1xuICAnWW91ciBBV1MgQWNjb3VudCBpcyBSZWFkeSAtIEdldCBTdGFydGVkIE5vdycsXG4gICdXZWxjb21lIHRvIEFtYXpvbiBXZWIgU2VydmljZXMnLFxuXTtcblxuLy8gZnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VzL2xhdGVzdC9kZy9yZWNlaXZpbmctZW1haWwtYWN0aW9uLWxhbWJkYS1ldmVudC5odG1sXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UmVjb3JkIHtcbiAgZXZlbnRTb3VyY2U6IHN0cmluZztcbiAgZXZlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIHNlczogU2VzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcyB7XG4gIG1haWw6IE1haWw7XG4gIHJlY2VpcHQ6IFJlY2VpcHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmdbXTtcbiAgaGVhZGVyc1RydW5jYXRlZDogYm9vbGVhbjtcbiAgaGVhZGVyczogSGVhZGVyW107XG4gIGNvbW1vbkhlYWRlcnM6IENvbW1vbkhlYWRlcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkhlYWRlcnMge1xuICByZXR1cm5QYXRoOiBzdHJpbmc7XG4gIGZyb206IHN0cmluZ1tdO1xuICBkYXRlOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmdbXTtcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNlaXB0IHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHByb2Nlc3NpbmdUaW1lTWlsbGlzOiBudW1iZXI7XG4gIHJlY2lwaWVudHM6IHN0cmluZ1tdO1xuICBzcGFtVmVyZGljdDogVmVyZGljdDtcbiAgdmlydXNWZXJkaWN0OiBWZXJkaWN0O1xuICBzcGZWZXJkaWN0OiBWZXJkaWN0O1xuICBka2ltVmVyZGljdDogVmVyZGljdDtcbiAgZG1hcmNWZXJkaWN0OiBWZXJkaWN0O1xuICBhY3Rpb246IEFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJkaWN0IHtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uIHtcbiAgdHlwZTogc3RyaW5nO1xuICBmdW5jdGlvbkFybjogc3RyaW5nO1xuICBpbnZvY2F0aW9uVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNFU0V2ZW50UmVjb3Jkc1RvTGFtYmRhIHtcbiAgUmVjb3JkczogRXZlbnRSZWNvcmRbXTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChldmVudDogU0VTRXZlbnRSZWNvcmRzVG9MYW1iZGEpID0+IHtcblxuICBsb2coe1xuICAgIGV2ZW50OiBldmVudCxcbiAgICBsZXZlbDogJ2RlYnVnJyxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCByZWNvcmQgb2YgZXZlbnQuUmVjb3Jkcykge1xuXG4gICAgY29uc3QgaWQgPSByZWNvcmQuc2VzLm1haWwubWVzc2FnZUlkO1xuICAgIGNvbnN0IGtleSA9IGBSb290TWFpbC8ke2lkfWA7XG4gICAgY29uc3QgcmVjZWlwdCA9IHJlY29yZC5zZXMucmVjZWlwdDtcblxuICAgIGxvZyh7XG4gICAgICBpZDogaWQsXG4gICAgICBsZXZlbDogJ2RlYnVnJyxcbiAgICAgIGtleToga2V5LFxuICAgICAgbXNnOiAncHJvY2Vzc2luZyBtYWlsJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHZlcmRpY3RzID0ge1xuICAgICAgZGtpbTogcmVjZWlwdC5ka2ltVmVyZGljdC5zdGF0dXMsXG4gICAgICBzcGFtOiByZWNlaXB0LnNwYW1WZXJkaWN0LnN0YXR1cyxcbiAgICAgIHNwZjogcmVjZWlwdC5zcGZWZXJkaWN0LnN0YXR1cyxcbiAgICAgIHZpcnVzOiByZWNlaXB0LnZpcnVzVmVyZGljdC5zdGF0dXMsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZlcmRpY3RzKSkge1xuXG4gICAgICBpZiAodiAhPT0gJ1BBU1MnKSB7XG5cbiAgICAgICAgbG9nKHtcbiAgICAgICAgICBjbGFzczogayxcbiAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgbGV2ZWw6ICd3YXJuJyxcbiAgICAgICAgICBtc2c6ICd2ZXJkaWN0IGZhaWxlZCAtIG9wcyBzYW50YSBpdGVtIHNraXBwZWQnLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRPYmplY3QoeyBCdWNrZXQ6IGVtYWlsQnVja2V0IGFzIHN0cmluZywgS2V5OiBrZXkgfSk7XG5cbiAgICBjb25zdCBtc2cgPSBhd2FpdCBzaW1wbGVQYXJzZXIocmVzcG9uc2UuQm9keSBhcyB1bmtub3duIGFzIEJ1ZmZlcik7XG5cbiAgICBsZXQgdGl0bGUgPSBtc2cuc3ViamVjdDtcblxuICAgIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkIHx8IHRpdGxlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGxvZyh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgIG1zZzogJ25vIHN1YmplY3QgZm91bmQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcmVkRW1haWxTdWJqZWN0cy5pbmNsdWRlcyh0aXRsZSkpIHtcbiAgICAgIGxvZyh7XG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIG1zZzogJ2ZpbHRlcmVkIGVtYWlsJyxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0gcmVjb3JkLnNlcy5tYWlsLmRlc3RpbmF0aW9uWzBdO1xuXG4gICAgaWYgKHRpdGxlID09PSAnQW1hem9uIFdlYiBTZXJ2aWNlcyBQYXNzd29yZCBBc3Npc3RhbmNlJykge1xuICAgICAgaWYgKG1zZy5odG1sID09PSBmYWxzZSkge1xuICAgICAgICBsb2coe1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICAgIG1zZzogJ25vIGh0bWwgYm9keSBmb3VuZCBpbiBwYXNzd29yZCBhc3Npc3RhbmNlIGVtYWlsJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gbXNnLmh0bWw7XG4gICAgICBjb25zdCBwd19yZXNldF9saW5rID0gZGVzY3JpcHRpb24ubWF0Y2goL2h0dHBzOlxcL1xcL3NpZ25pbi5hd3MuYW1hem9uLmNvbVxcL3Jlc2V0cGFzc3dvcmQoLio/KSg/PTxicj4pLyk/LlswXSB8fCAnbm8gcGFzc3NvcmQgcmVzZXQgbGluayc7XG4gICAgICBjb25zdCByb290bWFpbF9pZGVudGlmaWVyID0gYC9yb290bWFpbC9wd19yZXNldF9saW5rLyR7c291cmNlLnNwbGl0KCdAJylbMF0uc3BsaXQoJ3Jvb3QrJylbMV19YDtcbiAgICAgIGF3YWl0IHNzbS5wdXRQYXJhbWV0ZXIoe1xuICAgICAgICBOYW1lOiByb290bWFpbF9pZGVudGlmaWVyLFxuICAgICAgICBWYWx1ZTogcHdfcmVzZXRfbGluayxcbiAgICAgICAgT3ZlcndyaXRlOiB0cnVlLFxuICAgICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgICAgVGllcjogJ0FkdmFuY2VkJyxcbiAgICAgICAgUG9saWNpZXM6IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBUeXBlOiAnRXhwaXJhdGlvbicsXG4gICAgICAgICAgICBWZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICAgIEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgICBsb2coe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBtc2c6IGBjcmVhdGVkIHNzbSBwYXJhbSBzdG9yZSBlbnRyeSAnJHtyb290bWFpbF9pZGVudGlmaWVyfScgZm9yIHBhc3N3b3JkIGFzc2lzdGFuY2UgZW1haWxgLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47IC8vIG5vIG9wcyBpdGVtIGZvciBub3dcbiAgICB9XG5cbiAgICBsZXQgZGVzY3JpcHRpb24gPSBtc2cudGV4dCB8fCBtc2cuaHRtbDtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSB7XG4gICAgICBsb2coe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICBtc2c6ICdubyB0ZXh0IG9yIGh0bWwgYm9keSBmb3VuZCcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aXRsZSA9IHRpdGxlLnN1YnN0cmluZygwLCAxMDIwKSArICh0aXRsZS5sZW5ndGggPiAxMDIwID8gJyAuLi4nIDogJycpO1xuXG4gICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAyMCkgKyAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAyMCA/ICcgLi4uJyA6ICcnKTtcblxuICAgIGNvbnN0IHNvdXJjZVRydW5jYXRlZCA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgNjApICsgKHNvdXJjZS5sZW5ndGggPiA2MCA/ICcgLi4uJyA6ICcnKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbmFsX2RhdGE6IFJlY29yZDxzdHJpbmcsIE9wc0l0ZW1EYXRhVmFsdWU+ID0ge1xuICAgICAgJy9hd3MvZGVkdXAnOiB7XG4gICAgICAgIFZhbHVlOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWR1cFN0cmluZzogaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgVHlwZTogJ1NlYXJjaGFibGVTdHJpbmcnLFxuICAgICAgfSxcbiAgICAgICcvYXdzL3Jlc291cmNlcyc6IHtcbiAgICAgICAgVmFsdWU6IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcm46IGAke2VtYWlsQnVja2V0QXJufS8ke2tleX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICAgICBUeXBlOiAnU2VhcmNoYWJsZVN0cmluZycsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBzc20uY3JlYXRlT3BzSXRlbSh7XG4gICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBPcGVyYXRpb25hbERhdGE6IG9wZXJhdGlvbmFsX2RhdGEsXG4gICAgICBTb3VyY2U6IHNvdXJjZVRydW5jYXRlZCxcbiAgICAgIFRpdGxlOiB0aXRsZSxcbiAgICB9KTtcbiAgICBsb2coe1xuICAgICAgaWQ6IGlkLFxuICAgICAga2V5OiBrZXksXG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgbXNnOiBgY3JlYXRlZCBvcHMgaXRlbSB3aXRoIHRpdGxlICcke3RpdGxlfSdgLFxuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBsb2cobXNnOiBvYmplY3QpIHtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobXNnKSk7XG59XG4iXX0=
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VzLXJlY2VpdmUub3BzLXNhbnRhLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VzLXJlY2VpdmUub3BzLXNhbnRhLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQXdDO0FBQ3hDLG9EQUE0RDtBQUM1RCwyQ0FBMEM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztBQUNsRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztBQUM3QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0FBQ3BELE1BQU0sRUFBRSxHQUFHLElBQUksY0FBRSxFQUFFLENBQUM7QUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBRyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxNQUFNO0NBQ2YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxxQkFBcUIsR0FBRztJQUM1Qiw2Q0FBNkM7SUFDN0MsZ0NBQWdDO0NBQ2pDLENBQUM7QUFpRUssTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUU5RCxHQUFHLENBQUM7UUFDRixLQUFLLEVBQUUsS0FBSztRQUNaLEtBQUssRUFBRSxPQUFPO0tBQ2YsQ0FBQyxDQUFDO0lBRUgsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbkMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFFbkMsR0FBRyxDQUFDO1lBQ0YsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsT0FBTztZQUNk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QUM7Z0JBQ0YsSUFBSSxFQUFFLGtCQUFrQjthQUN6QjtTQUNGLENBQUM7UUFFRixNQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDdEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsZUFBZSxFQUFFLGdCQUFnQjtZQUNqQyxNQUFNLEVBQUUsZUFBZTtZQUN2QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQztZQUNGLEVBQUUsRUFBRSxFQUFFO1lBQ04sR0FBRyxFQUFFLEdBQUc7WUFDUixLQUFLLEVBQUUsTUFBTTtZQUNiLEdBQUcsRUFBRSxnQ0FBZ0MsS0FBSyxHQUFHO1NBQzlDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUM7QUFsTFcsUUFBQSxPQUFPLFdBa0xsQjtBQUVGLFNBQVMsR0FBRyxDQUFDLEdBQVc7SUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFMzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IE9wc0l0ZW1EYXRhVmFsdWUsIFNTTSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgc2ltcGxlUGFyc2VyIH0gZnJvbSAnbWFpbHBhcnNlcic7XG5cbmNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LlJPT1RNQUlMX0RFUExPWV9SRUdJT047XG5jb25zdCBlbWFpbEJ1Y2tldCA9IHByb2Nlc3MuZW52LkVNQUlMX0JVQ0tFVDtcbmNvbnN0IGVtYWlsQnVja2V0QXJuID0gcHJvY2Vzcy5lbnYuRU1BSUxfQlVDS0VUX0FSTjtcbmNvbnN0IHMzID0gbmV3IFMzKCk7XG5jb25zdCBzc20gPSBuZXcgU1NNKHtcbiAgcmVnaW9uOiByZWdpb24sXG59KTtcblxuY29uc3QgZmlsdGVyZWRFbWFpbFN1YmplY3RzID0gW1xuICAnWW91ciBBV1MgQWNjb3VudCBpcyBSZWFkeSAtIEdldCBTdGFydGVkIE5vdycsXG4gICdXZWxjb21lIHRvIEFtYXpvbiBXZWIgU2VydmljZXMnLFxuXTtcblxuLy8gZnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VzL2xhdGVzdC9kZy9yZWNlaXZpbmctZW1haWwtYWN0aW9uLWxhbWJkYS1ldmVudC5odG1sXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UmVjb3JkIHtcbiAgZXZlbnRTb3VyY2U6IHN0cmluZztcbiAgZXZlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIHNlczogU2VzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcyB7XG4gIG1haWw6IE1haWw7XG4gIHJlY2VpcHQ6IFJlY2VpcHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmdbXTtcbiAgaGVhZGVyc1RydW5jYXRlZDogYm9vbGVhbjtcbiAgaGVhZGVyczogSGVhZGVyW107XG4gIGNvbW1vbkhlYWRlcnM6IENvbW1vbkhlYWRlcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkhlYWRlcnMge1xuICByZXR1cm5QYXRoOiBzdHJpbmc7XG4gIGZyb206IHN0cmluZ1tdO1xuICBkYXRlOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmdbXTtcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNlaXB0IHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHByb2Nlc3NpbmdUaW1lTWlsbGlzOiBudW1iZXI7XG4gIHJlY2lwaWVudHM6IHN0cmluZ1tdO1xuICBzcGFtVmVyZGljdDogVmVyZGljdDtcbiAgdmlydXNWZXJkaWN0OiBWZXJkaWN0O1xuICBzcGZWZXJkaWN0OiBWZXJkaWN0O1xuICBka2ltVmVyZGljdDogVmVyZGljdDtcbiAgZG1hcmNWZXJkaWN0OiBWZXJkaWN0O1xuICBhY3Rpb246IEFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJkaWN0IHtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uIHtcbiAgdHlwZTogc3RyaW5nO1xuICBmdW5jdGlvbkFybjogc3RyaW5nO1xuICBpbnZvY2F0aW9uVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNFU0V2ZW50UmVjb3Jkc1RvTGFtYmRhIHtcbiAgUmVjb3JkczogRXZlbnRSZWNvcmRbXTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChldmVudDogU0VTRXZlbnRSZWNvcmRzVG9MYW1iZGEpID0+IHtcblxuICBsb2coe1xuICAgIGV2ZW50OiBldmVudCxcbiAgICBsZXZlbDogJ2RlYnVnJyxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCByZWNvcmQgb2YgZXZlbnQuUmVjb3Jkcykge1xuXG4gICAgY29uc3QgaWQgPSByZWNvcmQuc2VzLm1haWwubWVzc2FnZUlkO1xuICAgIGNvbnN0IGtleSA9IGBSb290TWFpbC8ke2lkfWA7XG4gICAgY29uc3QgcmVjZWlwdCA9IHJlY29yZC5zZXMucmVjZWlwdDtcblxuICAgIGxvZyh7XG4gICAgICBpZDogaWQsXG4gICAgICBsZXZlbDogJ2RlYnVnJyxcbiAgICAgIGtleToga2V5LFxuICAgICAgbXNnOiAncHJvY2Vzc2luZyBtYWlsJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHZlcmRpY3RzID0ge1xuICAgICAgZGtpbTogcmVjZWlwdC5ka2ltVmVyZGljdC5zdGF0dXMsXG4gICAgICBkbWFyYzogcmVjZWlwdC5kbWFyY1ZlcmRpY3Quc3RhdHVzLFxuICAgICAgc3BhbTogcmVjZWlwdC5zcGFtVmVyZGljdC5zdGF0dXMsXG4gICAgICBzcGY6IHJlY2VpcHQuc3BmVmVyZGljdC5zdGF0dXMsXG4gICAgICB2aXJ1czogcmVjZWlwdC52aXJ1c1ZlcmRpY3Quc3RhdHVzLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2ZXJkaWN0cykpIHtcbiAgICAgIHN3aXRjaCAoaykge1xuICAgICAgICBjYXNlICdka2ltJzpcbiAgICAgICAgY2FzZSAnZG1hcmMnOlxuICAgICAgICAgIGlmICh2ICE9PSAnUEFTUycgJiYgdiAhPT0gJ0dSQVknKSB7XG4gICAgICAgICAgICBsb2coe1xuICAgICAgICAgICAgICBjbGFzczogayxcbiAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgICAgIG1zZzogJ3ZlcmRpY3QgZmFpbGVkIC0gb3BzIHNhbnRhIGl0ZW0gc2tpcHBlZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3BhbSc6XG4gICAgICAgIGNhc2UgJ3NwZic6XG4gICAgICAgIGNhc2UgJ3ZpcnVzJzpcbiAgICAgICAgICBpZiAodiAhPT0gJ1BBU1MnKSB7XG4gICAgICAgICAgICBsb2coe1xuICAgICAgICAgICAgICBjbGFzczogayxcbiAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgICAgIG1zZzogJ3ZlcmRpY3QgZmFpbGVkIC0gb3BzIHNhbnRhIGl0ZW0gc2tpcHBlZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHMzLmdldE9iamVjdCh7IEJ1Y2tldDogZW1haWxCdWNrZXQgYXMgc3RyaW5nLCBLZXk6IGtleSB9KTtcblxuICAgIGNvbnN0IG1zZyA9IGF3YWl0IHNpbXBsZVBhcnNlcihyZXNwb25zZS5Cb2R5IGFzIHVua25vd24gYXMgQnVmZmVyKTtcblxuICAgIGxldCB0aXRsZSA9IG1zZy5zdWJqZWN0O1xuXG4gICAgaWYgKHRpdGxlID09PSB1bmRlZmluZWQgfHwgdGl0bGUudHJpbSgpID09PSAnJykge1xuICAgICAgbG9nKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgbGV2ZWw6ICd3YXJuJyxcbiAgICAgICAgbXNnOiAnbm8gc3ViamVjdCBmb3VuZCcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyZWRFbWFpbFN1YmplY3RzLmluY2x1ZGVzKHRpdGxlKSkge1xuICAgICAgbG9nKHtcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbXNnOiAnZmlsdGVyZWQgZW1haWwnLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSByZWNvcmQuc2VzLm1haWwuZGVzdGluYXRpb25bMF07XG5cbiAgICBpZiAodGl0bGUgPT09ICdBbWF6b24gV2ViIFNlcnZpY2VzIFBhc3N3b3JkIEFzc2lzdGFuY2UnKSB7XG4gICAgICBpZiAobXNnLmh0bWwgPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZyh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgbXNnOiAnbm8gaHRtbCBib2R5IGZvdW5kIGluIHBhc3N3b3JkIGFzc2lzdGFuY2UgZW1haWwnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBtc2cuaHRtbDtcbiAgICAgIGNvbnN0IHB3X3Jlc2V0X2xpbmsgPSBkZXNjcmlwdGlvbi5tYXRjaCgvaHR0cHM6XFwvXFwvc2lnbmluLmF3cy5hbWF6b24uY29tXFwvcmVzZXRwYXNzd29yZCguKj8pKD89PGJyPikvKT8uWzBdIHx8ICdubyBwYXNzc29yZCByZXNldCBsaW5rJztcbiAgICAgIGNvbnN0IHJvb3RtYWlsX2lkZW50aWZpZXIgPSBgL3Jvb3RtYWlsL3B3X3Jlc2V0X2xpbmsvJHtzb3VyY2Uuc3BsaXQoJ0AnKVswXS5zcGxpdCgncm9vdCsnKVsxXX1gO1xuICAgICAgYXdhaXQgc3NtLnB1dFBhcmFtZXRlcih7XG4gICAgICAgIE5hbWU6IHJvb3RtYWlsX2lkZW50aWZpZXIsXG4gICAgICAgIFZhbHVlOiBwd19yZXNldF9saW5rLFxuICAgICAgICBPdmVyd3JpdGU6IHRydWUsXG4gICAgICAgIFR5cGU6ICdTdHJpbmcnLFxuICAgICAgICBUaWVyOiAnQWR2YW5jZWQnLFxuICAgICAgICBQb2xpY2llczogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFR5cGU6ICdFeHBpcmF0aW9uJyxcbiAgICAgICAgICAgIFZlcnNpb246ICcxLjAnLFxuICAgICAgICAgICAgQXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKERhdGUubm93KCkgKyAxMCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSksXG4gICAgICB9KTtcbiAgICAgIGxvZyh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIG1zZzogYGNyZWF0ZWQgc3NtIHBhcmFtIHN0b3JlIGVudHJ5ICcke3Jvb3RtYWlsX2lkZW50aWZpZXJ9JyBmb3IgcGFzc3dvcmQgYXNzaXN0YW5jZSBlbWFpbGAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjsgLy8gbm8gb3BzIGl0ZW0gZm9yIG5vd1xuICAgIH1cblxuICAgIGxldCBkZXNjcmlwdGlvbiA9IG1zZy50ZXh0IHx8IG1zZy5odG1sO1xuICAgIGlmICghZGVzY3JpcHRpb24pIHtcbiAgICAgIGxvZyh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgIG1zZzogJ25vIHRleHQgb3IgaHRtbCBib2R5IGZvdW5kJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIDEwMjApICsgKHRpdGxlLmxlbmd0aCA+IDEwMjAgPyAnIC4uLicgOiAnJyk7XG5cbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCAxMDIwKSArIChkZXNjcmlwdGlvbi5sZW5ndGggPiAxMDIwID8gJyAuLi4nIDogJycpO1xuXG4gICAgY29uc3Qgc291cmNlVHJ1bmNhdGVkID0gc291cmNlLnN1YnN0cmluZygwLCA2MCkgKyAoc291cmNlLmxlbmd0aCA+IDYwID8gJyAuLi4nIDogJycpO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uYWxfZGF0YTogUmVjb3JkPHN0cmluZywgT3BzSXRlbURhdGFWYWx1ZT4gPSB7XG4gICAgICAnL2F3cy9kZWR1cCc6IHtcbiAgICAgICAgVmFsdWU6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlZHVwU3RyaW5nOiBpZCxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBUeXBlOiAnU2VhcmNoYWJsZVN0cmluZycsXG4gICAgICB9LFxuICAgICAgJy9hd3MvcmVzb3VyY2VzJzoge1xuICAgICAgICBWYWx1ZTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFybjogYCR7ZW1haWxCdWNrZXRBcm59LyR7a2V5fWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSksXG4gICAgICAgIFR5cGU6ICdTZWFyY2hhYmxlU3RyaW5nJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IHNzbS5jcmVhdGVPcHNJdGVtKHtcbiAgICAgIERlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgIE9wZXJhdGlvbmFsRGF0YTogb3BlcmF0aW9uYWxfZGF0YSxcbiAgICAgIFNvdXJjZTogc291cmNlVHJ1bmNhdGVkLFxuICAgICAgVGl0bGU6IHRpdGxlLFxuICAgIH0pO1xuICAgIGxvZyh7XG4gICAgICBpZDogaWQsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBtc2c6IGBjcmVhdGVkIG9wcyBpdGVtIHdpdGggdGl0bGUgJyR7dGl0bGV9J2AsXG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGxvZyhtc2c6IG9iamVjdCkge1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtc2cpKTtcbn1cbiJdfQ==
@@ -1211,6 +1211,7 @@ var se_CompleteMultipartUploadCommand = /* @__PURE__ */ __name(async (input, con
1211
1211
  [_xacs_]: input[_CSHAh],
1212
1212
  [_xarp]: input[_RP],
1213
1213
  [_xaebo]: input[_EBO],
1214
+ [_im]: input[_IM],
1214
1215
  [_inm]: input[_INM],
1215
1216
  [_xasseca]: input[_SSECA],
1216
1217
  [_xasseck]: input[_SSECK],
@@ -2783,6 +2784,7 @@ var se_PutObjectCommand = /* @__PURE__ */ __name(async (input, context) => {
2783
2784
  [_xacs]: input[_CSHA],
2784
2785
  [_xacs_]: input[_CSHAh],
2785
2786
  [_e]: [() => (0, import_smithy_client.isSerializableHeaderValue)(input[_E]), () => (0, import_smithy_client.dateToUtcString)(input[_E]).toString()],
2787
+ [_im]: input[_IM],
2786
2788
  [_inm]: input[_INM],
2787
2789
  [_xagfc]: input[_GFC],
2788
2790
  [_xagr]: input[_GR],
@@ -34,6 +34,7 @@ export const se_CompleteMultipartUploadCommand = async (input, context) => {
34
34
  [_xacs_]: input[_CSHAh],
35
35
  [_xarp]: input[_RP],
36
36
  [_xaebo]: input[_EBO],
37
+ [_im]: input[_IM],
37
38
  [_inm]: input[_INM],
38
39
  [_xasseca]: input[_SSECA],
39
40
  [_xasseck]: input[_SSECK],
@@ -1608,6 +1609,7 @@ export const se_PutObjectCommand = async (input, context) => {
1608
1609
  [_xacs]: input[_CSHA],
1609
1610
  [_xacs_]: input[_CSHAh],
1610
1611
  [_e]: [() => isSerializableHeaderValue(input[_E]), () => __dateToUtcString(input[_E]).toString()],
1612
+ [_im]: input[_IM],
1611
1613
  [_inm]: input[_INM],
1612
1614
  [_xagfc]: input[_GFC],
1613
1615
  [_xagr]: input[_GR],
@@ -224,6 +224,7 @@ declare const CompleteMultipartUploadCommand_base: {
224
224
  * ChecksumSHA256: "STRING_VALUE",
225
225
  * RequestPayer: "requester",
226
226
  * ExpectedBucketOwner: "STRING_VALUE",
227
+ * IfMatch: "STRING_VALUE",
227
228
  * IfNoneMatch: "STRING_VALUE",
228
229
  * SSECustomerAlgorithm: "STRING_VALUE",
229
230
  * SSECustomerKey: "STRING_VALUE",
@@ -231,39 +231,39 @@ declare const CreateBucketCommand_base: {
231
231
  * <p>Base exception class for all service exceptions from S3 service.</p>
232
232
  *
233
233
  * @public
234
- * @example To create a bucket in a specific region
234
+ * @example To create a bucket
235
235
  * ```javascript
236
- * // The following example creates a bucket. The request specifies an AWS region where to create the bucket.
236
+ * // The following example creates a bucket.
237
237
  * const input = {
238
- * "Bucket": "examplebucket",
239
- * "CreateBucketConfiguration": {
240
- * "LocationConstraint": "eu-west-1"
241
- * }
238
+ * "Bucket": "examplebucket"
242
239
  * };
243
240
  * const command = new CreateBucketCommand(input);
244
241
  * const response = await client.send(command);
245
242
  * /* response ==
246
243
  * {
247
- * "Location": "http://examplebucket.<Region>.s3.amazonaws.com/"
244
+ * "Location": "/examplebucket"
248
245
  * }
249
246
  * *\/
250
- * // example id: to-create-a-bucket-in-a-specific-region-1483399072992
247
+ * // example id: to-create-a-bucket--1472851826060
251
248
  * ```
252
249
  *
253
- * @example To create a bucket
250
+ * @example To create a bucket in a specific region
254
251
  * ```javascript
255
- * // The following example creates a bucket.
252
+ * // The following example creates a bucket. The request specifies an AWS region where to create the bucket.
256
253
  * const input = {
257
- * "Bucket": "examplebucket"
254
+ * "Bucket": "examplebucket",
255
+ * "CreateBucketConfiguration": {
256
+ * "LocationConstraint": "eu-west-1"
257
+ * }
258
258
  * };
259
259
  * const command = new CreateBucketCommand(input);
260
260
  * const response = await client.send(command);
261
261
  * /* response ==
262
262
  * {
263
- * "Location": "/examplebucket"
263
+ * "Location": "http://examplebucket.<Region>.s3.amazonaws.com/"
264
264
  * }
265
265
  * *\/
266
- * // example id: to-create-a-bucket--1472851826060
266
+ * // example id: to-create-a-bucket-in-a-specific-region-1483399072992
267
267
  * ```
268
268
  *
269
269
  */
@@ -155,28 +155,28 @@ declare const DeleteObjectCommand_base: {
155
155
  * <p>Base exception class for all service exceptions from S3 service.</p>
156
156
  *
157
157
  * @public
158
- * @example To delete an object (from a non-versioned bucket)
158
+ * @example To delete an object
159
159
  * ```javascript
160
- * // The following example deletes an object from a non-versioned bucket.
160
+ * // The following example deletes an object from an S3 bucket.
161
161
  * const input = {
162
- * "Bucket": "ExampleBucket",
163
- * "Key": "HappyFace.jpg"
162
+ * "Bucket": "examplebucket",
163
+ * "Key": "objectkey.jpg"
164
164
  * };
165
165
  * const command = new DeleteObjectCommand(input);
166
166
  * await client.send(command);
167
- * // example id: to-delete-an-object-from-a-non-versioned-bucket-1481588533089
167
+ * // example id: to-delete-an-object-1472850136595
168
168
  * ```
169
169
  *
170
- * @example To delete an object
170
+ * @example To delete an object (from a non-versioned bucket)
171
171
  * ```javascript
172
- * // The following example deletes an object from an S3 bucket.
172
+ * // The following example deletes an object from a non-versioned bucket.
173
173
  * const input = {
174
- * "Bucket": "examplebucket",
175
- * "Key": "objectkey.jpg"
174
+ * "Bucket": "ExampleBucket",
175
+ * "Key": "HappyFace.jpg"
176
176
  * };
177
177
  * const command = new DeleteObjectCommand(input);
178
178
  * await client.send(command);
179
- * // example id: to-delete-an-object-1472850136595
179
+ * // example id: to-delete-an-object-from-a-non-versioned-bucket-1481588533089
180
180
  * ```
181
181
  *
182
182
  */
@@ -224,18 +224,20 @@ declare const DeleteObjectsCommand_base: {
224
224
  * <p>Base exception class for all service exceptions from S3 service.</p>
225
225
  *
226
226
  * @public
227
- * @example To delete multiple objects from a versioned bucket
227
+ * @example To delete multiple object versions from a versioned bucket
228
228
  * ```javascript
229
- * // The following example deletes objects from a bucket. The bucket is versioned, and the request does not specify the object version to delete. In this case, all versions remain in the bucket and S3 adds a delete marker.
229
+ * // The following example deletes objects from a bucket. The request specifies object versions. S3 deletes specific object versions and returns the key and versions of deleted objects in the response.
230
230
  * const input = {
231
231
  * "Bucket": "examplebucket",
232
232
  * "Delete": {
233
233
  * "Objects": [
234
234
  * {
235
- * "Key": "objectkey1"
235
+ * "Key": "HappyFace.jpg",
236
+ * "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b"
236
237
  * },
237
238
  * {
238
- * "Key": "objectkey2"
239
+ * "Key": "HappyFace.jpg",
240
+ * "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd"
239
241
  * }
240
242
  * ],
241
243
  * "Quiet": false
@@ -247,35 +249,31 @@ declare const DeleteObjectsCommand_base: {
247
249
  * {
248
250
  * "Deleted": [
249
251
  * {
250
- * "DeleteMarker": "true",
251
- * "DeleteMarkerVersionId": "A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F",
252
- * "Key": "objectkey1"
252
+ * "Key": "HappyFace.jpg",
253
+ * "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd"
253
254
  * },
254
255
  * {
255
- * "DeleteMarker": "true",
256
- * "DeleteMarkerVersionId": "iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt",
257
- * "Key": "objectkey2"
256
+ * "Key": "HappyFace.jpg",
257
+ * "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b"
258
258
  * }
259
259
  * ]
260
260
  * }
261
261
  * *\/
262
- * // example id: to-delete-multiple-objects-from-a-versioned-bucket-1483146248805
262
+ * // example id: to-delete-multiple-object-versions-from-a-versioned-bucket-1483147087737
263
263
  * ```
264
264
  *
265
- * @example To delete multiple object versions from a versioned bucket
265
+ * @example To delete multiple objects from a versioned bucket
266
266
  * ```javascript
267
- * // The following example deletes objects from a bucket. The request specifies object versions. S3 deletes specific object versions and returns the key and versions of deleted objects in the response.
267
+ * // The following example deletes objects from a bucket. The bucket is versioned, and the request does not specify the object version to delete. In this case, all versions remain in the bucket and S3 adds a delete marker.
268
268
  * const input = {
269
269
  * "Bucket": "examplebucket",
270
270
  * "Delete": {
271
271
  * "Objects": [
272
272
  * {
273
- * "Key": "HappyFace.jpg",
274
- * "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b"
273
+ * "Key": "objectkey1"
275
274
  * },
276
275
  * {
277
- * "Key": "HappyFace.jpg",
278
- * "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd"
276
+ * "Key": "objectkey2"
279
277
  * }
280
278
  * ],
281
279
  * "Quiet": false
@@ -287,17 +285,19 @@ declare const DeleteObjectsCommand_base: {
287
285
  * {
288
286
  * "Deleted": [
289
287
  * {
290
- * "Key": "HappyFace.jpg",
291
- * "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd"
288
+ * "DeleteMarker": "true",
289
+ * "DeleteMarkerVersionId": "A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F",
290
+ * "Key": "objectkey1"
292
291
  * },
293
292
  * {
294
- * "Key": "HappyFace.jpg",
295
- * "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b"
293
+ * "DeleteMarker": "true",
294
+ * "DeleteMarkerVersionId": "iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt",
295
+ * "Key": "objectkey2"
296
296
  * }
297
297
  * ]
298
298
  * }
299
299
  * *\/
300
- * // example id: to-delete-multiple-object-versions-from-a-versioned-bucket-1483147087737
300
+ * // example id: to-delete-multiple-objects-from-a-versioned-bucket-1483146248805
301
301
  * ```
302
302
  *
303
303
  */
@@ -301,53 +301,53 @@ declare const GetObjectCommand_base: {
301
301
  * <p>Base exception class for all service exceptions from S3 service.</p>
302
302
  *
303
303
  * @public
304
- * @example To retrieve an object
304
+ * @example To retrieve a byte range of an object
305
305
  * ```javascript
306
- * // The following example retrieves an object for an S3 bucket.
306
+ * // The following example retrieves an object for an S3 bucket. The request specifies the range header to retrieve a specific byte range.
307
307
  * const input = {
308
308
  * "Bucket": "examplebucket",
309
- * "Key": "HappyFace.jpg"
309
+ * "Key": "SampleFile.txt",
310
+ * "Range": "bytes=0-9"
310
311
  * };
311
312
  * const command = new GetObjectCommand(input);
312
313
  * const response = await client.send(command);
313
314
  * /* response ==
314
315
  * {
315
316
  * "AcceptRanges": "bytes",
316
- * "ContentLength": "3191",
317
- * "ContentType": "image/jpeg",
318
- * "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"",
319
- * "LastModified": "2016-12-15T01:19:41.000Z",
317
+ * "ContentLength": "10",
318
+ * "ContentRange": "bytes 0-9/43",
319
+ * "ContentType": "text/plain",
320
+ * "ETag": "\"0d94420ffd0bc68cd3d152506b97a9cc\"",
321
+ * "LastModified": "2014-10-09T22:57:28.000Z",
320
322
  * "Metadata": {},
321
- * "TagCount": 2,
322
323
  * "VersionId": "null"
323
324
  * }
324
325
  * *\/
325
- * // example id: to-retrieve-an-object-1481827837012
326
+ * // example id: to-retrieve-a-byte-range-of-an-object--1481832674603
326
327
  * ```
327
328
  *
328
- * @example To retrieve a byte range of an object
329
+ * @example To retrieve an object
329
330
  * ```javascript
330
- * // The following example retrieves an object for an S3 bucket. The request specifies the range header to retrieve a specific byte range.
331
+ * // The following example retrieves an object for an S3 bucket.
331
332
  * const input = {
332
333
  * "Bucket": "examplebucket",
333
- * "Key": "SampleFile.txt",
334
- * "Range": "bytes=0-9"
334
+ * "Key": "HappyFace.jpg"
335
335
  * };
336
336
  * const command = new GetObjectCommand(input);
337
337
  * const response = await client.send(command);
338
338
  * /* response ==
339
339
  * {
340
340
  * "AcceptRanges": "bytes",
341
- * "ContentLength": "10",
342
- * "ContentRange": "bytes 0-9/43",
343
- * "ContentType": "text/plain",
344
- * "ETag": "\"0d94420ffd0bc68cd3d152506b97a9cc\"",
345
- * "LastModified": "2014-10-09T22:57:28.000Z",
341
+ * "ContentLength": "3191",
342
+ * "ContentType": "image/jpeg",
343
+ * "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"",
344
+ * "LastModified": "2016-12-15T01:19:41.000Z",
346
345
  * "Metadata": {},
346
+ * "TagCount": 2,
347
347
  * "VersionId": "null"
348
348
  * }
349
349
  * *\/
350
- * // example id: to-retrieve-a-byte-range-of-an-object--1481832674603
350
+ * // example id: to-retrieve-an-object-1481827837012
351
351
  * ```
352
352
  *
353
353
  */