@aws-solutions-constructs/aws-iot-lambda 1.121.0 → 1.125.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.
package/.jsii CHANGED
@@ -8,11 +8,11 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "@aws-cdk/aws-iam": "1.121.0",
12
- "@aws-cdk/aws-iot": "1.121.0",
13
- "@aws-cdk/aws-lambda": "1.121.0",
14
- "@aws-cdk/core": "1.121.0",
15
- "@aws-solutions-constructs/core": "1.121.0",
11
+ "@aws-cdk/aws-iam": "1.125.0",
12
+ "@aws-cdk/aws-iot": "1.125.0",
13
+ "@aws-cdk/aws-lambda": "1.125.0",
14
+ "@aws-cdk/core": "1.125.0",
15
+ "@aws-solutions-constructs/core": "1.125.0",
16
16
  "constructs": "^3.2.0"
17
17
  },
18
18
  "dependencyClosure": {
@@ -1426,7 +1426,7 @@
1426
1426
  },
1427
1427
  "description": "CDK Constructs for AWS IoT to AWS Lambda integration",
1428
1428
  "homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
1429
- "jsiiVersion": "1.34.0 (build 9b72778)",
1429
+ "jsiiVersion": "1.38.0 (build 717bef2)",
1430
1430
  "keywords": [
1431
1431
  "aws",
1432
1432
  "cdk",
@@ -1622,6 +1622,6 @@
1622
1622
  ]
1623
1623
  }
1624
1624
  },
1625
- "version": "1.121.0",
1626
- "fingerprint": "EsG/1HiMfJ3FVtX9TDVcOgwvTvWevuKnWUq1MnJNj1g="
1625
+ "version": "1.125.0",
1626
+ "fingerprint": "KnW1t77QlVL18KtzVez9TM8Un2AvAIzcijLN5AU2TzQ="
1627
1627
  }
package/lib/index.js CHANGED
@@ -41,5 +41,5 @@ class IotToLambda extends core_1.Construct {
41
41
  }
42
42
  exports.IotToLambda = IotToLambda;
43
43
  _a = JSII_RTTI_SYMBOL_1;
44
- IotToLambda[_a] = { fqn: "@aws-solutions-constructs/aws-iot-lambda.IotToLambda", version: "1.121.0" };
44
+ IotToLambda[_a] = { fqn: "@aws-solutions-constructs/aws-iot-lambda.IotToLambda", version: "1.125.0" };
45
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWNBLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFDeEMsd0ZBQXdGO0FBQ3hGLHdDQUEwQztBQUMxQywyREFBMkQ7QUFDM0QseURBQStEO0FBWS9ELE1BQWEsV0FBWSxTQUFRLGdCQUFTOzs7Ozs7Ozs7SUFLeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ3ZELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtTQUMvQyxDQUFDLENBQUM7UUFFSCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLEVBQUU7b0JBQ04sV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztpQkFDN0M7YUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sYUFBYSxHQUFHLG9CQUFhLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsRUFBRTtZQUMxRSxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDeEQsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVCSCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMSBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGlvdCBmcm9tICdAYXdzLWNkay9hd3MtaW90JztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbi8vIE5vdGU6IFRvIGVuc3VyZSBDREt2MiBjb21wYXRpYmlsaXR5LCBrZWVwIHRoZSBpbXBvcnQgc3RhdGVtZW50IGZvciBDb25zdHJ1Y3Qgc2VwYXJhdGVcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIElvdFRvTGFtYmRhUHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBleGlzdGluZ0xhbWJkYU9iaj86IGxhbWJkYS5GdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBsYW1iZGFGdW5jdGlvblByb3BzPzogbGFtYmRhLkZ1bmN0aW9uUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgaW90VG9waWNSdWxlUHJvcHM6IGlvdC5DZm5Ub3BpY1J1bGVQcm9wc1xufVxuXG5leHBvcnQgY2xhc3MgSW90VG9MYW1iZGEgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5GdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGlvdFRvcGljUnVsZTogaW90LkNmblRvcGljUnVsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJb3RUb0xhbWJkYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBkZWZhdWx0cy5DaGVja1Byb3BzKHByb3BzKTtcblxuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBkZWZhdWx0cy5idWlsZExhbWJkYUZ1bmN0aW9uKHRoaXMsIHtcbiAgICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBwcm9wcy5leGlzdGluZ0xhbWJkYU9iaixcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHByb3BzLmxhbWJkYUZ1bmN0aW9uUHJvcHNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRJb3RUb3BpY1Byb3BzID0gZGVmYXVsdHMuRGVmYXVsdENmblRvcGljUnVsZVByb3BzKFt7XG4gICAgICBsYW1iZGE6IHtcbiAgICAgICAgZnVuY3Rpb25Bcm46IHRoaXMubGFtYmRhRnVuY3Rpb24uZnVuY3Rpb25Bcm5cbiAgICAgIH1cbiAgICB9XSk7XG4gICAgY29uc3QgaW90VG9waWNQcm9wcyA9IG92ZXJyaWRlUHJvcHMoZGVmYXVsdElvdFRvcGljUHJvcHMsIHByb3BzLmlvdFRvcGljUnVsZVByb3BzLCB0cnVlKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgSW9UIHRvcGljIHJ1bGVcbiAgICB0aGlzLmlvdFRvcGljUnVsZSA9IG5ldyBpb3QuQ2ZuVG9waWNSdWxlKHRoaXMsICdJb3RUb3BpYycsIGlvdFRvcGljUHJvcHMpO1xuXG4gICAgZGVmYXVsdHMuYWRkUGVybWlzc2lvbih0aGlzLmxhbWJkYUZ1bmN0aW9uLCBcIkF3c0lvdExhbWJkYUludm9rZVBlcm1pc3Npb25cIiwge1xuICAgICAgcHJpbmNpcGFsOiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2lvdC5hbWF6b25hd3MuY29tJyksXG4gICAgICBzb3VyY2VBcm46IHRoaXMuaW90VG9waWNSdWxlLmF0dHJBcm5cbiAgICB9KTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/aws-iot-lambda",
3
- "version": "1.121.0",
3
+ "version": "1.125.0",
4
4
  "description": "CDK Constructs for AWS IoT to AWS Lambda integration",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -53,15 +53,15 @@
53
53
  }
54
54
  },
55
55
  "dependencies": {
56
- "@aws-cdk/aws-iot": "1.121.0",
57
- "@aws-cdk/aws-lambda": "1.121.0",
58
- "@aws-cdk/aws-iam": "1.121.0",
59
- "@aws-cdk/core": "1.121.0",
60
- "@aws-solutions-constructs/core": "1.121.0",
56
+ "@aws-cdk/aws-iot": "1.125.0",
57
+ "@aws-cdk/aws-lambda": "1.125.0",
58
+ "@aws-cdk/aws-iam": "1.125.0",
59
+ "@aws-cdk/core": "1.125.0",
60
+ "@aws-solutions-constructs/core": "1.125.0",
61
61
  "constructs": "^3.2.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@aws-cdk/assert": "1.121.0",
64
+ "@aws-cdk/assert": "1.125.0",
65
65
  "@types/jest": "^26.0.22",
66
66
  "@types/node": "^10.3.0"
67
67
  },
@@ -80,11 +80,11 @@
80
80
  ]
81
81
  },
82
82
  "peerDependencies": {
83
- "@aws-cdk/aws-iot": "1.121.0",
84
- "@aws-cdk/aws-lambda": "1.121.0",
85
- "@aws-cdk/core": "1.121.0",
86
- "@aws-solutions-constructs/core": "1.121.0",
87
- "@aws-cdk/aws-iam": "1.121.0",
83
+ "@aws-cdk/aws-iot": "1.125.0",
84
+ "@aws-cdk/aws-lambda": "1.125.0",
85
+ "@aws-cdk/core": "1.125.0",
86
+ "@aws-solutions-constructs/core": "1.125.0",
87
+ "@aws-cdk/aws-iam": "1.125.0",
88
88
  "constructs": "^3.2.0"
89
89
  },
90
90
  "keywords": [
@@ -94,41 +94,9 @@
94
94
  "Properties": {
95
95
  "Code": {
96
96
  "S3Bucket": {
97
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3Bucket1F467BCC"
97
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
98
98
  },
99
- "S3Key": {
100
- "Fn::Join": [
101
- "",
102
- [
103
- {
104
- "Fn::Select": [
105
- 0,
106
- {
107
- "Fn::Split": [
108
- "||",
109
- {
110
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872"
111
- }
112
- ]
113
- }
114
- ]
115
- },
116
- {
117
- "Fn::Select": [
118
- 1,
119
- {
120
- "Fn::Split": [
121
- "||",
122
- {
123
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872"
124
- }
125
- ]
126
- }
127
- ]
128
- }
129
- ]
130
- ]
131
- }
99
+ "S3Key": "42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c.zip"
132
100
  },
133
101
  "Role": {
134
102
  "Fn::GetAtt": [
@@ -213,17 +181,37 @@
213
181
  }
214
182
  },
215
183
  "Parameters": {
216
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3Bucket1F467BCC": {
217
- "Type": "String",
218
- "Description": "S3 bucket for asset \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
219
- },
220
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872": {
221
- "Type": "String",
222
- "Description": "S3 key for asset version \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
223
- },
224
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cArtifactHash00A70A91": {
225
- "Type": "String",
226
- "Description": "Artifact hash for asset \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
184
+ "BootstrapVersion": {
185
+ "Type": "AWS::SSM::Parameter::Value<String>",
186
+ "Default": "/cdk-bootstrap/hnb659fds/version",
187
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store."
188
+ }
189
+ },
190
+ "Rules": {
191
+ "CheckBootstrapVersion": {
192
+ "Assertions": [
193
+ {
194
+ "Assert": {
195
+ "Fn::Not": [
196
+ {
197
+ "Fn::Contains": [
198
+ [
199
+ "1",
200
+ "2",
201
+ "3",
202
+ "4",
203
+ "5"
204
+ ],
205
+ {
206
+ "Ref": "BootstrapVersion"
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ },
212
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
213
+ }
214
+ ]
227
215
  }
228
216
  }
229
217
  }
@@ -94,41 +94,9 @@
94
94
  "Properties": {
95
95
  "Code": {
96
96
  "S3Bucket": {
97
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3Bucket1F467BCC"
97
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
98
98
  },
99
- "S3Key": {
100
- "Fn::Join": [
101
- "",
102
- [
103
- {
104
- "Fn::Select": [
105
- 0,
106
- {
107
- "Fn::Split": [
108
- "||",
109
- {
110
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872"
111
- }
112
- ]
113
- }
114
- ]
115
- },
116
- {
117
- "Fn::Select": [
118
- 1,
119
- {
120
- "Fn::Split": [
121
- "||",
122
- {
123
- "Ref": "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872"
124
- }
125
- ]
126
- }
127
- ]
128
- }
129
- ]
130
- ]
131
- }
99
+ "S3Key": "42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c.zip"
132
100
  },
133
101
  "Role": {
134
102
  "Fn::GetAtt": [
@@ -213,17 +181,37 @@
213
181
  }
214
182
  },
215
183
  "Parameters": {
216
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3Bucket1F467BCC": {
217
- "Type": "String",
218
- "Description": "S3 bucket for asset \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
219
- },
220
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cS3VersionKey9E4F7872": {
221
- "Type": "String",
222
- "Description": "S3 key for asset version \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
223
- },
224
- "AssetParameters42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198cArtifactHash00A70A91": {
225
- "Type": "String",
226
- "Description": "Artifact hash for asset \"42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c\""
184
+ "BootstrapVersion": {
185
+ "Type": "AWS::SSM::Parameter::Value<String>",
186
+ "Default": "/cdk-bootstrap/hnb659fds/version",
187
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store."
188
+ }
189
+ },
190
+ "Rules": {
191
+ "CheckBootstrapVersion": {
192
+ "Assertions": [
193
+ {
194
+ "Assert": {
195
+ "Fn::Not": [
196
+ {
197
+ "Fn::Contains": [
198
+ [
199
+ "1",
200
+ "2",
201
+ "3",
202
+ "4",
203
+ "5"
204
+ ],
205
+ {
206
+ "Ref": "BootstrapVersion"
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ },
212
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
213
+ }
214
+ ]
227
215
  }
228
216
  }
229
217
  }