Skip to content

Commit 8ff2227

Browse files
This release adds sensitive trait to some required shapes.
Documentation update for Security Hub This release adds support for customer managed KMS keys in Amazon EventBridge Pipe Documentation-only update that clarifies the ValidateE911Address action of the Amazon Chime SDK Voice APIs.
1 parent 5913125 commit 8ff2227

File tree

21 files changed

+187
-67
lines changed

21 files changed

+187
-67
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.11.401
1+
1.11.402

generated/src/aws-cpp-sdk-chime-sdk-voice/include/aws/chime-sdk-voice/model/GetVoiceToneAnalysisTaskRequest.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ namespace Model
5454

5555
///@{
5656
/**
57-
* <p>The ID of the voice tone anlysis task.</p>
57+
* <p>The ID of the voice tone analysis task.</p>
5858
*/
5959
inline const Aws::String& GetVoiceToneAnalysisTaskId() const{ return m_voiceToneAnalysisTaskId; }
6060
inline bool VoiceToneAnalysisTaskIdHasBeenSet() const { return m_voiceToneAnalysisTaskIdHasBeenSet; }

generated/src/aws-cpp-sdk-chime-sdk-voice/include/aws/chime-sdk-voice/model/MediaInsightsConfiguration.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace Model
3939

4040
///@{
4141
/**
42-
* <p>Denotes the configration as enabled or disabled.</p>
42+
* <p>Denotes the configuration as enabled or disabled.</p>
4343
*/
4444
inline bool GetDisabled() const{ return m_disabled; }
4545
inline bool DisabledHasBeenSet() const { return m_disabledHasBeenSet; }

generated/src/aws-cpp-sdk-chime-sdk-voice/include/aws/chime-sdk-voice/model/ValidateE911AddressRequest.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ namespace Model
104104

105105
///@{
106106
/**
107-
* <p>The country in the address being validated.</p>
107+
* <p>The country in the address being validated as two-letter country code in ISO
108+
* 3166-1 alpha-2 format, such as <code>US</code>. For more information, see <a
109+
* href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>
110+
* in Wikipedia.</p>
108111
*/
109112
inline const Aws::String& GetCountry() const{ return m_country; }
110113
inline bool CountryHasBeenSet() const { return m_countryHasBeenSet; }

generated/src/aws-cpp-sdk-chime-sdk-voice/include/aws/chime-sdk-voice/model/ValidateE911AddressResult.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ namespace Model
3737

3838
///@{
3939
/**
40-
* <p>Number indicating the result of address validation. <code>0</code> means the
41-
* address was perfect as-is and successfully validated. <code>1</code> means the
42-
* address was corrected. <code>2</code> means the address sent was not close
43-
* enough and was not validated.</p>
40+
* <p>Number indicating the result of address validation.</p> <p>Each possible
41+
* result is defined as follows:</p> <ul> <li> <p> <code>0</code> - Address
42+
* validation succeeded.</p> </li> <li> <p> <code>1</code> - Address validation
43+
* succeeded. The address was a close enough match and has been corrected as part
44+
* of the address object.</p> </li> <li> <p> <code>2</code> - Address validation
45+
* failed. You should re-submit the validation request with candidates from the
46+
* <code>CandidateAddressList</code> result, if it's a close match.</p> </li> </ul>
4447
*/
4548
inline int GetValidationResult() const{ return m_validationResult; }
4649
inline void SetValidationResult(int value) { m_validationResult = value; }

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/CreatePipeRequest.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,27 @@ namespace Model
204204
inline CreatePipeRequest& WithLogConfiguration(const PipeLogConfigurationParameters& value) { SetLogConfiguration(value); return *this;}
205205
inline CreatePipeRequest& WithLogConfiguration(PipeLogConfigurationParameters&& value) { SetLogConfiguration(std::move(value)); return *this;}
206206
///@}
207+
208+
///@{
209+
/**
210+
* <p>The identifier of the KMS customer managed key for EventBridge to use, if you
211+
* choose to use a customer managed key to encrypt pipe data. The identifier can be
212+
* the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p>
213+
* <p>If you do not specify a customer managed key identifier, EventBridge uses an
214+
* Amazon Web Services owned key to encrypt pipe data.</p> <p>For more information,
215+
* see <a
216+
* href="https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html">Managing
217+
* keys</a> in the <i>Key Management Service Developer Guide</i>. </p>
218+
*/
219+
inline const Aws::String& GetKmsKeyIdentifier() const{ return m_kmsKeyIdentifier; }
220+
inline bool KmsKeyIdentifierHasBeenSet() const { return m_kmsKeyIdentifierHasBeenSet; }
221+
inline void SetKmsKeyIdentifier(const Aws::String& value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier = value; }
222+
inline void SetKmsKeyIdentifier(Aws::String&& value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier = std::move(value); }
223+
inline void SetKmsKeyIdentifier(const char* value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier.assign(value); }
224+
inline CreatePipeRequest& WithKmsKeyIdentifier(const Aws::String& value) { SetKmsKeyIdentifier(value); return *this;}
225+
inline CreatePipeRequest& WithKmsKeyIdentifier(Aws::String&& value) { SetKmsKeyIdentifier(std::move(value)); return *this;}
226+
inline CreatePipeRequest& WithKmsKeyIdentifier(const char* value) { SetKmsKeyIdentifier(value); return *this;}
227+
///@}
207228
private:
208229

209230
Aws::String m_name;
@@ -241,6 +262,9 @@ namespace Model
241262

242263
PipeLogConfigurationParameters m_logConfiguration;
243264
bool m_logConfigurationHasBeenSet = false;
265+
266+
Aws::String m_kmsKeyIdentifier;
267+
bool m_kmsKeyIdentifierHasBeenSet = false;
244268
};
245269

246270
} // namespace Model

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/DescribePipeResult.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,23 @@ namespace Model
256256
inline DescribePipeResult& WithLogConfiguration(PipeLogConfiguration&& value) { SetLogConfiguration(std::move(value)); return *this;}
257257
///@}
258258

259+
///@{
260+
/**
261+
* <p>The identifier of the KMS customer managed key for EventBridge to use to
262+
* encrypt pipe data, if one has been specified.</p> <p>For more information, see
263+
* <a
264+
* href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption.html">Data
265+
* encryption in EventBridge</a> in the <i>Amazon EventBridge User Guide</i>.</p>
266+
*/
267+
inline const Aws::String& GetKmsKeyIdentifier() const{ return m_kmsKeyIdentifier; }
268+
inline void SetKmsKeyIdentifier(const Aws::String& value) { m_kmsKeyIdentifier = value; }
269+
inline void SetKmsKeyIdentifier(Aws::String&& value) { m_kmsKeyIdentifier = std::move(value); }
270+
inline void SetKmsKeyIdentifier(const char* value) { m_kmsKeyIdentifier.assign(value); }
271+
inline DescribePipeResult& WithKmsKeyIdentifier(const Aws::String& value) { SetKmsKeyIdentifier(value); return *this;}
272+
inline DescribePipeResult& WithKmsKeyIdentifier(Aws::String&& value) { SetKmsKeyIdentifier(std::move(value)); return *this;}
273+
inline DescribePipeResult& WithKmsKeyIdentifier(const char* value) { SetKmsKeyIdentifier(value); return *this;}
274+
///@}
275+
259276
///@{
260277

261278
inline const Aws::String& GetRequestId() const{ return m_requestId; }
@@ -302,6 +319,8 @@ namespace Model
302319

303320
PipeLogConfiguration m_logConfiguration;
304321

322+
Aws::String m_kmsKeyIdentifier;
323+
305324
Aws::String m_requestId;
306325
};
307326

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/S3LogDestination.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,8 @@ namespace Model
8989

9090
///@{
9191
/**
92-
* <p>The format EventBridge uses for the log records.</p> <ul> <li> <p>
93-
* <code>json</code>: JSON </p> </li> <li> <p> <code>plain</code>: Plain text</p>
94-
* </li> <li> <p> <code>w3c</code>: <a href="https://www.w3.org/TR/WD-logfile">W3C
95-
* extended logging file format</a> </p> </li> </ul>
92+
* <p>The format EventBridge uses for the log records.</p> <p>EventBridge currently
93+
* only supports <code>json</code> formatting.</p>
9694
*/
9795
inline const S3OutputFormat& GetOutputFormat() const{ return m_outputFormat; }
9896
inline bool OutputFormatHasBeenSet() const { return m_outputFormatHasBeenSet; }

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/S3LogDestinationParameters.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,8 @@ namespace Model
7171

7272
///@{
7373
/**
74-
* <p>How EventBridge should format the log records.</p> <ul> <li> <p>
75-
* <code>json</code>: JSON </p> </li> <li> <p> <code>plain</code>: Plain text</p>
76-
* </li> <li> <p> <code>w3c</code>: <a href="https://www.w3.org/TR/WD-logfile">W3C
77-
* extended logging file format</a> </p> </li> </ul>
74+
* <p>How EventBridge should format the log records.</p> <p>EventBridge currently
75+
* only supports <code>json</code> formatting.</p>
7876
*/
7977
inline const S3OutputFormat& GetOutputFormat() const{ return m_outputFormat; }
8078
inline bool OutputFormatHasBeenSet() const { return m_outputFormatHasBeenSet; }

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/SelfManagedKafkaAccessConfigurationVpc.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ namespace Model
5959
/**
6060
* <p>Specifies the security groups associated with the stream. These security
6161
* groups must all be in the same VPC. You can specify as many as five security
62-
* groups. If you do not specify a security group, the default security group for
63-
* the VPC is used.</p>
62+
* groups.</p>
6463
*/
6564
inline const Aws::Vector<Aws::String>& GetSecurityGroup() const{ return m_securityGroup; }
6665
inline bool SecurityGroupHasBeenSet() const { return m_securityGroupHasBeenSet; }

generated/src/aws-cpp-sdk-pipes/include/aws/pipes/model/UpdatePipeRequest.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,30 @@ namespace Model
170170
inline UpdatePipeRequest& WithLogConfiguration(const PipeLogConfigurationParameters& value) { SetLogConfiguration(value); return *this;}
171171
inline UpdatePipeRequest& WithLogConfiguration(PipeLogConfigurationParameters&& value) { SetLogConfiguration(std::move(value)); return *this;}
172172
///@}
173+
174+
///@{
175+
/**
176+
* <p>The identifier of the KMS customer managed key for EventBridge to use, if you
177+
* choose to use a customer managed key to encrypt pipe data. The identifier can be
178+
* the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p>
179+
* <p>To update a pipe that is using the default Amazon Web Services owned key to
180+
* use a customer managed key instead, or update a pipe that is using a customer
181+
* managed key to use a different customer managed key, specify a customer managed
182+
* key identifier.</p> <p>To update a pipe that is using a customer managed key to
183+
* use the default Amazon Web Services owned key, specify an empty string.</p>
184+
* <p>For more information, see <a
185+
* href="https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html">Managing
186+
* keys</a> in the <i>Key Management Service Developer Guide</i>. </p>
187+
*/
188+
inline const Aws::String& GetKmsKeyIdentifier() const{ return m_kmsKeyIdentifier; }
189+
inline bool KmsKeyIdentifierHasBeenSet() const { return m_kmsKeyIdentifierHasBeenSet; }
190+
inline void SetKmsKeyIdentifier(const Aws::String& value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier = value; }
191+
inline void SetKmsKeyIdentifier(Aws::String&& value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier = std::move(value); }
192+
inline void SetKmsKeyIdentifier(const char* value) { m_kmsKeyIdentifierHasBeenSet = true; m_kmsKeyIdentifier.assign(value); }
193+
inline UpdatePipeRequest& WithKmsKeyIdentifier(const Aws::String& value) { SetKmsKeyIdentifier(value); return *this;}
194+
inline UpdatePipeRequest& WithKmsKeyIdentifier(Aws::String&& value) { SetKmsKeyIdentifier(std::move(value)); return *this;}
195+
inline UpdatePipeRequest& WithKmsKeyIdentifier(const char* value) { SetKmsKeyIdentifier(value); return *this;}
196+
///@}
173197
private:
174198

175199
Aws::String m_name;
@@ -201,6 +225,9 @@ namespace Model
201225

202226
PipeLogConfigurationParameters m_logConfiguration;
203227
bool m_logConfigurationHasBeenSet = false;
228+
229+
Aws::String m_kmsKeyIdentifier;
230+
bool m_kmsKeyIdentifierHasBeenSet = false;
204231
};
205232

206233
} // namespace Model

generated/src/aws-cpp-sdk-pipes/source/model/CreatePipeRequest.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ CreatePipeRequest::CreatePipeRequest() :
2525
m_targetParametersHasBeenSet(false),
2626
m_roleArnHasBeenSet(false),
2727
m_tagsHasBeenSet(false),
28-
m_logConfigurationHasBeenSet(false)
28+
m_logConfigurationHasBeenSet(false),
29+
m_kmsKeyIdentifierHasBeenSet(false)
2930
{
3031
}
3132

@@ -103,6 +104,12 @@ Aws::String CreatePipeRequest::SerializePayload() const
103104

104105
}
105106

107+
if(m_kmsKeyIdentifierHasBeenSet)
108+
{
109+
payload.WithString("KmsKeyIdentifier", m_kmsKeyIdentifier);
110+
111+
}
112+
106113
return payload.View().WriteReadable();
107114
}
108115

generated/src/aws-cpp-sdk-pipes/source/model/DescribePipeResult.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ DescribePipeResult& DescribePipeResult::operator =(const Aws::AmazonWebServiceRe
137137

138138
}
139139

140+
if(jsonValue.ValueExists("KmsKeyIdentifier"))
141+
{
142+
m_kmsKeyIdentifier = jsonValue.GetString("KmsKeyIdentifier");
143+
144+
}
145+
140146

141147
const auto& headers = result.GetHeaderValueCollection();
142148
const auto& requestIdIter = headers.find("x-amzn-requestid");

generated/src/aws-cpp-sdk-pipes/source/model/UpdatePipeRequest.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ UpdatePipeRequest::UpdatePipeRequest() :
2323
m_targetHasBeenSet(false),
2424
m_targetParametersHasBeenSet(false),
2525
m_roleArnHasBeenSet(false),
26-
m_logConfigurationHasBeenSet(false)
26+
m_logConfigurationHasBeenSet(false),
27+
m_kmsKeyIdentifierHasBeenSet(false)
2728
{
2829
}
2930

@@ -84,6 +85,12 @@ Aws::String UpdatePipeRequest::SerializePayload() const
8485

8586
}
8687

88+
if(m_kmsKeyIdentifierHasBeenSet)
89+
{
90+
payload.WithString("KmsKeyIdentifier", m_kmsKeyIdentifier);
91+
92+
}
93+
8794
return payload.View().WriteReadable();
8895
}
8996

generated/src/aws-cpp-sdk-securityhub/include/aws/securityhub/model/AwsApiCallAction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ namespace Model
8888

8989
///@{
9090
/**
91-
* <p>Provided if <code>CallerType</code> is <code>remoteIp</code>. Provides
91+
* <p>Provided if <code>CallerType</code> is <code>remoteip</code>. Provides
9292
* information about the remote IP address that the API call originated from.</p>
9393
*/
9494
inline const ActionRemoteIpDetails& GetRemoteIpDetails() const{ return m_remoteIpDetails; }

generated/src/aws-cpp-sdk-securityhub/include/aws/securityhub/model/Compliance.h

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ namespace Model
2929
{
3030

3131
/**
32-
* <p>Contains finding details that are specific to control-based findings. Only
33-
* returned for findings generated from controls.</p><p><h3>See Also:</h3> <a
32+
* <p>This object typically provides details about a control finding, such as
33+
* applicable standards and the status of control checks. While finding providers
34+
* can add custom content in <code>Compliance</code> object fields, they are
35+
* typically used to review details of Security Hub control findings.</p><p><h3>See
36+
* Also:</h3> <a
3437
* href="http://docs.aws.amazon.com/goto/WebAPI/securityhub-2018-10-26/Compliance">AWS
3538
* API Reference</a></p>
3639
*/
@@ -45,16 +48,16 @@ namespace Model
4548

4649
///@{
4750
/**
48-
* <p>The result of a standards check.</p> <p>The valid values for
49-
* <code>Status</code> are as follows.</p> <ul> <li> <ul> <li> <p>
50-
* <code>PASSED</code> - Standards check passed for all evaluated resources.</p>
51-
* </li> <li> <p> <code>WARNING</code> - Some information is missing or this check
52-
* is not supported for your configuration.</p> </li> <li> <p> <code>FAILED</code>
53-
* - Standards check failed for at least one evaluated resource.</p> </li> <li> <p>
54-
* <code>NOT_AVAILABLE</code> - Check could not be performed due to a service
55-
* outage, API error, or because the result of the Config evaluation was
56-
* <code>NOT_APPLICABLE</code>. If the Config evaluation result was
57-
* <code>NOT_APPLICABLE</code> for a Security Hub control, Security Hub
51+
* <p>Typically summarizes the result of a control check.</p> <p>For Security Hub
52+
* controls, valid values for <code>Status</code> are as follows.</p> <ul> <li>
53+
* <ul> <li> <p> <code>PASSED</code> - Standards check passed for all evaluated
54+
* resources.</p> </li> <li> <p> <code>WARNING</code> - Some information is missing
55+
* or this check is not supported for your configuration.</p> </li> <li> <p>
56+
* <code>FAILED</code> - Standards check failed for at least one evaluated
57+
* resource.</p> </li> <li> <p> <code>NOT_AVAILABLE</code> - Check could not be
58+
* performed due to a service outage, API error, or because the result of the
59+
* Config evaluation was <code>NOT_APPLICABLE</code>. If the Config evaluation
60+
* result was <code>NOT_APPLICABLE</code> for a Security Hub control, Security Hub
5861
* automatically archives the finding after 3 days.</p> </li> </ul> </li> </ul>
5962
*/
6063
inline const ComplianceStatus& GetStatus() const{ return m_status; }
@@ -67,8 +70,8 @@ namespace Model
6770

6871
///@{
6972
/**
70-
* <p>For a control, the industry or regulatory framework requirements that are
71-
* related to the control. The check for that control is aligned with these
73+
* <p>Typically provides the industry or regulatory framework requirements that are
74+
* related to a control. The check for that control is aligned with these
7275
* requirements.</p> <p>Array Members: Maximum number of 32 items.</p>
7376
*/
7477
inline const Aws::Vector<Aws::String>& GetRelatedRequirements() const{ return m_relatedRequirements; }
@@ -84,11 +87,8 @@ namespace Model
8487

8588
///@{
8689
/**
87-
* <p>For findings generated from controls, a list of reasons behind the value of
88-
* <code>Status</code>. For the list of status reason codes and their meanings, see
89-
* <a
90-
* href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-results.html#securityhub-standards-results-asff">Standards-related
91-
* information in the ASFF</a> in the <i>Security Hub User Guide</i>. </p>
90+
* <p>Typically used to provide a list of reasons for the value of
91+
* <code>Status</code>.</p>
9292
*/
9393
inline const Aws::Vector<StatusReason>& GetStatusReasons() const{ return m_statusReasons; }
9494
inline bool StatusReasonsHasBeenSet() const { return m_statusReasonsHasBeenSet; }
@@ -102,9 +102,9 @@ namespace Model
102102

103103
///@{
104104
/**
105-
* <p> The unique identifier of a control across standards. Values for this field
106-
* typically consist of an Amazon Web Servicesservice and a number, such as
107-
* APIGateway.5. </p>
105+
* <p> Typically provides the unique identifier of a control across standards. For
106+
* Security Hub controls, this field consists of an Amazon Web Servicesservice and
107+
* a unique number, such as <code>APIGateway.5</code>. </p>
108108
*/
109109
inline const Aws::String& GetSecurityControlId() const{ return m_securityControlId; }
110110
inline bool SecurityControlIdHasBeenSet() const { return m_securityControlIdHasBeenSet; }
@@ -118,8 +118,8 @@ namespace Model
118118

119119
///@{
120120
/**
121-
* <p>The enabled security standards in which a security control is currently
122-
* enabled. </p>
121+
* <p>Typically provides an array of enabled security standards in which a security
122+
* control is currently enabled. </p>
123123
*/
124124
inline const Aws::Vector<AssociatedStandard>& GetAssociatedStandards() const{ return m_associatedStandards; }
125125
inline bool AssociatedStandardsHasBeenSet() const { return m_associatedStandardsHasBeenSet; }
@@ -133,7 +133,8 @@ namespace Model
133133

134134
///@{
135135
/**
136-
* <p> An object that includes security control parameter names and values. </p>
136+
* <p> Typically an object that includes security control parameter names and
137+
* values. </p>
137138
*/
138139
inline const Aws::Vector<SecurityControlParameter>& GetSecurityControlParameters() const{ return m_securityControlParameters; }
139140
inline bool SecurityControlParametersHasBeenSet() const { return m_securityControlParametersHasBeenSet; }

src/aws-cpp-sdk-core/include/aws/core/VersionConfig.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
#pragma once
66

7-
#define AWS_SDK_VERSION_STRING "1.11.401"
7+
#define AWS_SDK_VERSION_STRING "1.11.402"
88
#define AWS_SDK_VERSION_MAJOR 1
99
#define AWS_SDK_VERSION_MINOR 11
10-
#define AWS_SDK_VERSION_PATCH 401
10+
#define AWS_SDK_VERSION_PATCH 402

0 commit comments

Comments
 (0)