@aws-cdk/aws-bedrock-agentcore-alpha 2.253.0-alpha.0 → 2.254.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +17116 -11830
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +140 -10
- package/lib/evaluation/custom-evaluator.d.ts +9 -0
- package/lib/evaluation/custom-evaluator.js +8 -2
- package/lib/evaluation/data-source.js +1 -1
- package/lib/evaluation/evaluator-base.js +1 -1
- package/lib/evaluation/evaluator-config.js +2 -2
- package/lib/evaluation/evaluator.js +1 -1
- package/lib/evaluation/online-evaluation-base.js +1 -1
- package/lib/evaluation/online-evaluation.d.ts +9 -0
- package/lib/evaluation/online-evaluation.js +8 -2
- package/lib/evaluation/types.js +5 -5
- package/lib/evaluation/validation-helpers.d.ts +8 -0
- package/lib/evaluation/validation-helpers.js +62 -1
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.d.ts +3 -2
- package/lib/gateway/gateway.js +3 -3
- package/lib/gateway/inbound-auth/authorizer.js +4 -4
- package/lib/gateway/inbound-auth/custom-claim.js +1 -1
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
- package/lib/gateway/outbound-auth/api-key.js +63 -21
- package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
- package/lib/gateway/outbound-auth/credential-provider.js +49 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
- package/lib/gateway/outbound-auth/iam-role.js +3 -5
- package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
- package/lib/gateway/outbound-auth/oauth.js +70 -20
- package/lib/gateway/perms.d.ts +15 -3
- package/lib/gateway/perms.js +24 -9
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +6 -6
- package/lib/gateway/targets/target.js +3 -3
- package/lib/identity/api-key-credential-provider.d.ts +217 -0
- package/lib/identity/api-key-credential-provider.js +249 -0
- package/lib/identity/grant-helpers.d.ts +74 -0
- package/lib/identity/grant-helpers.js +132 -0
- package/lib/identity/oauth2-credential-provider.d.ts +679 -0
- package/lib/identity/oauth2-credential-provider.js +863 -0
- package/lib/identity/perms.d.ts +119 -0
- package/lib/identity/perms.js +178 -0
- package/lib/identity/validation-helpers.d.ts +61 -0
- package/lib/identity/validation-helpers.js +156 -0
- package/lib/identity/workload-identity.d.ts +186 -0
- package/lib/identity/workload-identity.js +212 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +8 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/memory/validation-helpers.js +2 -2
- package/lib/network/network-configuration.js +4 -4
- package/lib/policy/policy-base.js +1 -1
- package/lib/policy/policy-engine-base.js +1 -1
- package/lib/policy/policy-engine.js +1 -1
- package/lib/policy/policy-statement.d.ts +2 -1
- package/lib/policy/policy-statement.js +14 -12
- package/lib/policy/policy-types.js +1 -1
- package/lib/policy/policy.js +1 -1
- package/lib/runtime/inbound-auth/custom-claim.js +1 -1
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/observability.js +2 -2
- package/lib/runtime/runtime-artifact.d.ts +11 -3
- package/lib/runtime/runtime-artifact.js +12 -4
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.js +1 -1
- package/lib/runtime/types.d.ts +7 -1
- package/lib/runtime/types.js +7 -1
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +18 -10
package/lib/evaluation/types.js
CHANGED
|
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
9
9
|
* at various levels (session, trace, or tool call).
|
|
10
10
|
*/
|
|
11
11
|
class BuiltinEvaluator {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BuiltinEvaluator", version: "2.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BuiltinEvaluator", version: "2.254.0-alpha.0" };
|
|
13
13
|
/**
|
|
14
14
|
* Evaluates whether the information in the agent's response is factually accurate.
|
|
15
15
|
*/
|
|
@@ -78,7 +78,7 @@ exports.BuiltinEvaluator = BuiltinEvaluator;
|
|
|
78
78
|
* The execution status of an online evaluation configuration.
|
|
79
79
|
*/
|
|
80
80
|
class ExecutionStatus {
|
|
81
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ExecutionStatus", version: "2.
|
|
81
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ExecutionStatus", version: "2.254.0-alpha.0" };
|
|
82
82
|
/**
|
|
83
83
|
* The evaluation is enabled and actively processing agent traces.
|
|
84
84
|
*/
|
|
@@ -103,7 +103,7 @@ exports.ExecutionStatus = ExecutionStatus;
|
|
|
103
103
|
* Filter operators for online evaluation filtering.
|
|
104
104
|
*/
|
|
105
105
|
class FilterOperator {
|
|
106
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterOperator", version: "2.
|
|
106
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterOperator", version: "2.254.0-alpha.0" };
|
|
107
107
|
/**
|
|
108
108
|
* Exact equality comparison.
|
|
109
109
|
*/
|
|
@@ -157,7 +157,7 @@ exports.FilterOperator = FilterOperator;
|
|
|
157
157
|
* - `FilterValue.boolean()` for boolean comparisons
|
|
158
158
|
*/
|
|
159
159
|
class FilterValue {
|
|
160
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterValue", version: "2.
|
|
160
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterValue", version: "2.254.0-alpha.0" };
|
|
161
161
|
/**
|
|
162
162
|
* Creates a string filter value.
|
|
163
163
|
*
|
|
@@ -201,7 +201,7 @@ exports.FilterValue = FilterValue;
|
|
|
201
201
|
* Determines what granularity of data the evaluator operates on.
|
|
202
202
|
*/
|
|
203
203
|
class EvaluationLevel {
|
|
204
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluationLevel", version: "2.
|
|
204
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluationLevel", version: "2.254.0-alpha.0" };
|
|
205
205
|
/**
|
|
206
206
|
* Evaluates individual tool call invocations within a trace.
|
|
207
207
|
*/
|
|
@@ -130,4 +130,12 @@ export declare function validateLambdaTimeout(seconds: number | undefined, _scop
|
|
|
130
130
|
* @returns The validated parameter
|
|
131
131
|
*/
|
|
132
132
|
export declare function throwIfInvalid<T>(validationFn: ValidationFn<T>, param: T, scope?: IConstruct): T;
|
|
133
|
+
/** Validates tags for Evaluator resources (Unicode keys allowed per CFN docs) */
|
|
134
|
+
export declare function validateEvaluatorTags(tags?: {
|
|
135
|
+
[key: string]: string;
|
|
136
|
+
}, scope?: IConstruct): string[];
|
|
137
|
+
/** Validates tags for OnlineEvaluationConfig resources (ASCII keys per CFN pattern) */
|
|
138
|
+
export declare function validateEvaluationTags(tags?: {
|
|
139
|
+
[key: string]: string;
|
|
140
|
+
}, scope?: IConstruct): string[];
|
|
133
141
|
export {};
|
|
@@ -26,6 +26,8 @@ exports.validateCategoricalRatingScale = validateCategoricalRatingScale;
|
|
|
26
26
|
exports.validateNumericalRatingScale = validateNumericalRatingScale;
|
|
27
27
|
exports.validateLambdaTimeout = validateLambdaTimeout;
|
|
28
28
|
exports.throwIfInvalid = throwIfInvalid;
|
|
29
|
+
exports.validateEvaluatorTags = validateEvaluatorTags;
|
|
30
|
+
exports.validateEvaluationTags = validateEvaluationTags;
|
|
29
31
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
30
32
|
const errors_1 = require("aws-cdk-lib/core/lib/errors");
|
|
31
33
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
@@ -49,6 +51,13 @@ const SERVICE_NAMES_MAX_COUNT = 1;
|
|
|
49
51
|
const EVALUATOR_NAME_MIN_LENGTH = 1;
|
|
50
52
|
const EVALUATOR_NAME_MAX_LENGTH = 48;
|
|
51
53
|
const RATING_SCALE_MIN_OPTIONS = 1;
|
|
54
|
+
const TAG_KEY_MIN = 1;
|
|
55
|
+
const TAG_KEY_MAX = 128;
|
|
56
|
+
const TAG_VALUE_MAX = 256;
|
|
57
|
+
const TAGS_MAX_COUNT = 50;
|
|
58
|
+
const ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN = /^[a-zA-Z+\-=._:/]+$/;
|
|
59
|
+
const EVALUATOR_TAG_KEY_PATTERN = /^[\p{L}\p{N}\s._:/=+@-]+$/u;
|
|
60
|
+
const TAG_VALUE_PATTERN = /^[\p{L}\p{N}\s._/=+-]*$/u;
|
|
52
61
|
/******************************************************************************
|
|
53
62
|
* VALIDATION FUNCTIONS
|
|
54
63
|
*****************************************************************************/
|
|
@@ -346,4 +355,56 @@ function throwIfInvalid(validationFn, param, scope) {
|
|
|
346
355
|
}
|
|
347
356
|
return param;
|
|
348
357
|
}
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFxREgsZ0RBZ0NDO0FBUUQsa0RBa0JDO0FBUUQsZ0RBcUJDO0FBUUQsZ0VBd0JDO0FBUUQsMENBY0M7QUFRRCx3REF3QkM7QUFRRCxzREFhQztBQVFELG9EQWFDO0FBU0Qsc0RBZ0NDO0FBUUQsb0RBaUJDO0FBUUQsd0VBa0JDO0FBUUQsb0VBa0JDO0FBUUQsc0RBZ0JDO0FBYUQsd0NBVUM7QUEvYUQsNkNBQW9DO0FBQ3BDLHdEQUF1RjtBQUN2Riw0RUFBNEQ7QUFZNUQ7OytFQUUrRTtBQUMvRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLHdC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Q0gsU0FBZ0IsY0FBYyxDQUFJLFlBQTZCLEVBQUUsS0FBUSxFQUFFLEtBQWtCO0lBQzNGLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksd0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3JpY2FsUmF0aW5nT3B0aW9uLCBGaWx0ZXJDb25maWcsIE51bWVyaWNhbFJhdGluZ09wdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZXZhbHVhdG9yIHJlZmVyZW5jZXMgdXNlZCBpbiB2YWxpZGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBJRXZhbHVhdG9yUmVmZXJlbmNlIHtcbiAgcmVhZG9ubHkgZXZhbHVhdG9ySWQ6IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmNvbnN0IENPTkZJR19OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgQ09ORklHX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgREVTQ1JJUFRJT05fTUFYX0xFTkdUSCA9IDIwMDtcbmNvbnN0IEVWQUxVQVRPUlNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUlNfTUFYX0NPVU5UID0gMTA7XG5jb25zdCBTQU1QTElOR19QRVJDRU5UQUdFX01JTiA9IDAuMDE7XG5jb25zdCBTQU1QTElOR19QRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IEZJTFRFUlNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFU1NJT05fVElNRU9VVF9NSU4gPSAxO1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01BWCA9IDE0NDA7XG5jb25zdCBMT0dfR1JPVVBTX01JTl9DT1VOVCA9IDE7XG5jb25zdCBMT0dfR1JPVVBTX01BWF9DT1VOVCA9IDU7XG5jb25zdCBTRVJWSUNFX05BTUVTX01JTl9DT1VOVCA9IDE7XG5jb25zdCBTRVJWSUNFX05BTUVTX01BWF9DT1VOVCA9IDE7XG5jb25zdCBFVkFMVUFUT1JfTkFNRV9NSU5fTEVOR1RIID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01BWF9MRU5HVEggPSA0ODtcbmNvbnN0IFJBVElOR19TQ0FMRV9NSU5fT1BUSU9OUyA9IDE7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRVNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GbjxUPiA9IChwYXJhbTogVCwgc2NvcGU/OiBJQ29uc3RydWN0KSA9PiBzdHJpbmdbXTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVElPTiBGVU5DVElPTlNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24gbmFtZS5cbiAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGNvbmZpZ3VyYXRpb24gbmFtZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb25maWdOYW1lKG5hbWU6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPCBDT05GSUdfTkFNRV9NSU5fTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIG11c3QgYmUgYXQgbGVhc3QgJHtDT05GSUdfTkFNRV9NSU5fTEVOR1RIfSBjaGFyYWN0ZXIocyksIGdvdCAke25hbWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IENPTkZJR19OQU1FX01BWF9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7Q09ORklHX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBcIiR7bmFtZX1cIiBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZpZWxkLlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIC0gVGhlIGRlc2NyaXB0aW9uIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYERlc2NyaXB0aW9uIG11c3QgYmUgYXQgbW9zdCAke0RFU0NSSVBUSU9OX01BWF9MRU5HVEh9IGNoYXJhY3RlcnMsIGdvdCAke2Rlc2NyaXB0aW9uLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXZhbHVhdG9ycyBhcnJheS5cbiAqIEBwYXJhbSBldmFsdWF0b3JzIC0gVGhlIGV2YWx1YXRvcnMgYXJyYXkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdG9ycyhldmFsdWF0b3JzOiBJRXZhbHVhdG9yUmVmZXJlbmNlW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZXZhbHVhdG9ycyA9PSBudWxsKSB7XG4gICAgZXJyb3JzLnB1c2goJ0V2YWx1YXRvcnMgYXJyYXkgaXMgcmVxdWlyZWQnKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoIDwgRVZBTFVBVE9SU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBsZWFzdCAke0VWQUxVQVRPUlNfTUlOX0NPVU5UfSBldmFsdWF0b3IgaXMgcmVxdWlyZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChldmFsdWF0b3JzLmxlbmd0aCA+IEVWQUxVQVRPUlNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQXQgbW9zdCAke0VWQUxVQVRPUlNfTUFYX0NPVU5UfSBldmFsdWF0b3JzIGFyZSBhbGxvd2VkLCBnb3QgJHtldmFsdWF0b3JzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2FtcGxpbmcgcGVyY2VudGFnZS5cbiAqIEBwYXJhbSBwZXJjZW50YWdlIC0gVGhlIHNhbXBsaW5nIHBlcmNlbnRhZ2UgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlKHBlcmNlbnRhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChwZXJjZW50YWdlID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChwZXJjZW50YWdlKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAocGVyY2VudGFnZSA8IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgU2FtcGxpbmcgcGVyY2VudGFnZSBtdXN0IGJlIGF0IGxlYXN0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NSU59LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlID4gU0FNUExJTkdfUEVSQ0VOVEFHRV9NQVgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbW9zdCAke1NBTVBMSU5HX1BFUkNFTlRBR0VfTUFYfSwgZ290ICR7cGVyY2VudGFnZX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZmlsdGVycyBhcnJheS5cbiAqIEBwYXJhbSBmaWx0ZXJzIC0gVGhlIGZpbHRlcnMgYXJyYXkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVycyhmaWx0ZXJzOiBGaWx0ZXJDb25maWdbXSB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChmaWx0ZXJzID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGZpbHRlcnMubGVuZ3RoID4gRklMVEVSU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RklMVEVSU19NQVhfQ09VTlR9IGZpbHRlcnMgYXJlIGFsbG93ZWQsIGdvdCAke2ZpbHRlcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzZXNzaW9uIHRpbWVvdXQgaW4gbWludXRlcy5cbiAqIEBwYXJhbSBtaW51dGVzIC0gVGhlIHNlc3Npb24gdGltZW91dCBpbiBtaW51dGVzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlc3Npb25UaW1lb3V0KG1pbnV0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChtaW51dGVzID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChtaW51dGVzKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobWludXRlcyA8IFNFU1NJT05fVElNRU9VVF9NSU4pIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBhdCBsZWFzdCAke1NFU1NJT05fVElNRU9VVF9NSU59IG1pbnV0ZShzKSwgZ290ICR7bWludXRlc31gLFxuICAgICk7XG4gIH1cblxuICBpZiAobWludXRlcyA+IFNFU1NJT05fVElNRU9VVF9NQVgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBhdCBtb3N0ICR7U0VTU0lPTl9USU1FT1VUX01BWH0gbWludXRlcywgZ290ICR7bWludXRlc31gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5LlxuICogQHBhcmFtIG5hbWVzIC0gVGhlIGxvZyBncm91cCBuYW1lcyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMb2dHcm91cE5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lcyA9PSBudWxsIHx8IG5hbWVzLmxlbmd0aCA8IExPR19HUk9VUFNfTUlOX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7TE9HX0dST1VQU19NSU5fQ09VTlR9IGxvZyBncm91cCBuYW1lIGlzIHJlcXVpcmVkLCBnb3QgJHtuYW1lcz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lcy5sZW5ndGggPiBMT0dfR1JPVVBTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBtb3N0ICR7TE9HX0dST1VQU19NQVhfQ09VTlR9IGxvZyBncm91cCBuYW1lcyBhcmUgYWxsb3dlZCwgZ290ICR7bmFtZXMubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlcnZpY2UgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgc2VydmljZSBuYW1lcyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZXJ2aWNlTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWVzID09IG51bGwgfHwgbmFtZXMubGVuZ3RoIDwgU0VSVklDRV9OQU1FU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtTRVJWSUNFX05BTUVTX01JTl9DT1VOVH0gc2VydmljZSBuYW1lIGlzIHJlcXVpcmVkLCBnb3QgJHtuYW1lcz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lcy5sZW5ndGggPiBTRVJWSUNFX05BTUVTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBtb3N0ICR7U0VSVklDRV9OQU1FU19NQVhfQ09VTlR9IHNlcnZpY2UgbmFtZSBpcyBhbGxvd2VkLCBnb3QgJHtuYW1lcy5sZW5ndGh9YCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXZhbHVhdG9yIG5hbWUuXG4gKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBldmFsdWF0b3IgbmFtZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JOYW1lKG5hbWU6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPCBFVkFMVUFUT1JfTkFNRV9NSU5fTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAke0VWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEh9IGNoYXJhY3RlcihzKSwgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIG11c3QgYmUgYXQgbW9zdCAke0VWQUxVQVRPUl9OQU1FX01BWF9MRU5HVEh9IGNoYXJhY3RlcnMsIGdvdCAke25hbWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgaWYgKCF2YWxpZE5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBcIiR7bmFtZX1cIiBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCBpbnN0cnVjdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCBub24tZW1wdHkuXG4gKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBzdHJpbmcsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoaW5zdHJ1Y3Rpb25zID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIGFyZSByZXF1aXJlZCBmb3IgTExNLWFzLWEtSnVkZ2UgZXZhbHVhdG9ycycpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGluc3RydWN0aW9ucykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGluc3RydWN0aW9ucy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgZXJyb3JzLnB1c2goJ0luc3RydWN0aW9ucyBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBjYXRlZ29yaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDYXRlZ29yaWNhbFJhdGluZ1NjYWxlKG9wdGlvbnM6IENhdGVnb3JpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBjYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGlzIHJlcXVpcmVkLCBnb3QgJHtvcHRpb25zPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5sYWJlbCkgJiYgKCFvcHRpb25zW2ldLmxhYmVsIHx8IG9wdGlvbnNbaV0ubGFiZWwudHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGxhYmVsYCk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0uZGVmaW5pdGlvbikgJiYgKCFvcHRpb25zW2ldLmRlZmluaXRpb24gfHwgb3B0aW9uc1tpXS5kZWZpbml0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgQ2F0ZWdvcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBudW1lcmljYWwgcmF0aW5nIHNjYWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbnVtZXJpY2FsIHJhdGluZyBvcHRpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU51bWVyaWNhbFJhdGluZ1NjYWxlKG9wdGlvbnM6IE51bWVyaWNhbFJhdGluZ09wdGlvbltdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCB8fCBvcHRpb25zLmxlbmd0aCA8IFJBVElOR19TQ0FMRV9NSU5fT1BUSU9OUykge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1JBVElOR19TQ0FMRV9NSU5fT1BUSU9OU30gbnVtZXJpY2FsIHJhdGluZyBvcHRpb24gaXMgcmVxdWlyZWQsIGdvdCAke29wdGlvbnM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmxhYmVsKSAmJiAoIW9wdGlvbnNbaV0ubGFiZWwgfHwgb3B0aW9uc1tpXS5sYWJlbC50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYE51bWVyaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGxhYmVsYCk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0uZGVmaW5pdGlvbikgJiYgKCFvcHRpb25zW2ldLmRlZmluaXRpb24gfHwgb3B0aW9uc1tpXS5kZWZpbml0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgZGVmaW5pdGlvbmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzLlxuICogQHBhcmFtIHNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBzZWNvbmRzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxhbWJkYVRpbWVvdXQoc2Vjb25kczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHNlY29uZHMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChzZWNvbmRzIDw9IDApIHtcbiAgICBlcnJvcnMucHVzaChgTGFtYmRhIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7c2Vjb25kc31gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVMUEVSIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFRocm93cyBhIHZhbGlkYXRpb24gZXJyb3IgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJucyBhbnkgZXJyb3JzLlxuICogQHBhcmFtIHZhbGlkYXRpb25GbiAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBwYXJhbWV0ZXIgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIHBhcmFtZXRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkludmFsaWQ8VD4odmFsaWRhdGlvbkZuOiBWYWxpZGF0aW9uRm48VD4sIHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpOiBUIHtcbiAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGlvbkZuKHBhcmFtLCBzY29wZSk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzY29wZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgVmFsaWRhdGlvbkZhaWxlZGAsIGVycm9ycy5qb2luKCdcXG4nKSwgc2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZhbGlkYXRpb25GYWlsZWRgLCBlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyYW07XG59XG4iXX0=
|
|
358
|
+
/**
|
|
359
|
+
* Validates tags for evaluation resources.
|
|
360
|
+
* @param tags - The tags object to validate
|
|
361
|
+
* @param keyPattern - The regex pattern to validate tag keys against
|
|
362
|
+
* @param _scope - The construct scope for error reporting (optional)
|
|
363
|
+
* @returns Array of validation error messages, empty if valid
|
|
364
|
+
*/
|
|
365
|
+
function validateTags(tags, keyPattern, _scope) {
|
|
366
|
+
const errors = [];
|
|
367
|
+
if (tags == null) {
|
|
368
|
+
return errors;
|
|
369
|
+
}
|
|
370
|
+
if (aws_cdk_lib_1.Token.isUnresolved(tags)) {
|
|
371
|
+
return errors;
|
|
372
|
+
}
|
|
373
|
+
if (Object.keys(tags).length > TAGS_MAX_COUNT) {
|
|
374
|
+
errors.push(`Cannot have more than ${TAGS_MAX_COUNT} tags, got ${Object.keys(tags).length}`);
|
|
375
|
+
}
|
|
376
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
377
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(key)) {
|
|
378
|
+
if (key.trim().length === 0) {
|
|
379
|
+
errors.push('Tag key cannot be empty or consist only of whitespace');
|
|
380
|
+
}
|
|
381
|
+
else if (key.length < TAG_KEY_MIN || key.length > TAG_KEY_MAX) {
|
|
382
|
+
errors.push(`Tag key "${key}" must be between ${TAG_KEY_MIN} and ${TAG_KEY_MAX} characters, got ${key.length}`);
|
|
383
|
+
}
|
|
384
|
+
if (key.toLowerCase().startsWith('aws:')) {
|
|
385
|
+
errors.push(`Tag key "${key}" cannot start with "aws:" as this prefix is reserved by AWS`);
|
|
386
|
+
}
|
|
387
|
+
if (!keyPattern.test(key)) {
|
|
388
|
+
errors.push(`Tag key "${key}" contains invalid characters`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
|
|
392
|
+
if (value.length > TAG_VALUE_MAX) {
|
|
393
|
+
errors.push(`Tag value for key "${key}" must be at most ${TAG_VALUE_MAX} characters, got ${value.length}`);
|
|
394
|
+
}
|
|
395
|
+
if (!TAG_VALUE_PATTERN.test(value)) {
|
|
396
|
+
errors.push(`Tag value for key "${key}" contains invalid characters. Valid: Unicode letters, digits, whitespace, and _./=+-`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return errors;
|
|
401
|
+
}
|
|
402
|
+
/** Validates tags for Evaluator resources (Unicode keys allowed per CFN docs) */
|
|
403
|
+
function validateEvaluatorTags(tags, scope) {
|
|
404
|
+
return validateTags(tags, EVALUATOR_TAG_KEY_PATTERN, scope);
|
|
405
|
+
}
|
|
406
|
+
/** Validates tags for OnlineEvaluationConfig resources (ASCII keys per CFN pattern) */
|
|
407
|
+
function validateEvaluationTags(tags, scope) {
|
|
408
|
+
return validateTags(tags, ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN, scope);
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUE0REgsZ0RBZ0NDO0FBUUQsa0RBa0JDO0FBUUQsZ0RBcUJDO0FBUUQsZ0VBd0JDO0FBUUQsMENBY0M7QUFRRCx3REF3QkM7QUFRRCxzREFhQztBQVFELG9EQWFDO0FBU0Qsc0RBZ0NDO0FBUUQsb0RBaUJDO0FBUUQsd0VBa0JDO0FBUUQsb0VBa0JDO0FBUUQsc0RBZ0JDO0FBYUQsd0NBVUM7QUFrREQsc0RBRUM7QUFHRCx3REFFQztBQS9lRCw2Q0FBb0M7QUFDcEMsd0RBQXVGO0FBQ3ZGLDRFQUE0RDtBQVk1RDs7K0VBRStFO0FBQy9FLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0seUJBQXlCLEdBQUcs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O1lBQzlELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixhQUFhLG9CQUFvQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHVGQUF1RixDQUFDLENBQUM7WUFDaEksQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFnQixxQkFBcUIsQ0FBQyxJQUFnQyxFQUFFLEtBQWtCO0lBQ3hGLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLFNBQWdCLHNCQUFzQixDQUFDLElBQWdDLEVBQUUsS0FBa0I7SUFDekYsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb24sIEZpbHRlckNvbmZpZywgTnVtZXJpY2FsUmF0aW5nT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBldmFsdWF0b3IgcmVmZXJlbmNlcyB1c2VkIGluIHZhbGlkYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIElFdmFsdWF0b3JSZWZlcmVuY2Uge1xuICByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuY29uc3QgQ09ORklHX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5jb25zdCBDT05GSUdfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5jb25zdCBERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMjAwO1xuY29uc3QgRVZBTFVBVE9SU19NSU5fQ09VTlQgPSAxO1xuY29uc3QgRVZBTFVBVE9SU19NQVhfQ09VTlQgPSAxMDtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOID0gMC4wMTtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgRklMVEVSU19NQVhfQ09VTlQgPSA1O1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01JTiA9IDE7XG5jb25zdCBTRVNTSU9OX1RJTUVPVVRfTUFYID0gMTQ0MDtcbmNvbnN0IExPR19HUk9VUFNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IExPR19HUk9VUFNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TID0gMTtcbmNvbnN0IFRBR19LRVlfTUlOID0gMTtcbmNvbnN0IFRBR19LRVlfTUFYID0gMTI4O1xuY29uc3QgVEFHX1ZBTFVFX01BWCA9IDI1NjtcbmNvbnN0IFRBR1NfTUFYX0NPVU5UID0gNTA7XG5jb25zdCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOID0gL15bYS16QS1aK1xcLT0uXzovXSskLztcbmNvbnN0IEVWQUxVQVRPUl9UQUdfS0VZX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXzovPStALV0rJC91O1xuY29uc3QgVEFHX1ZBTFVFX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXy89Ky1dKiQvdTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkZuPFQ+ID0gKHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpID0+IHN0cmluZ1tdO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFUSU9OIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBuYW1lLlxuICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgY29uZmlndXJhdGlvbiBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZ05hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IENPTkZJR19OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAke0NPTkZJR19OQU1FX01JTl9MRU5HVEh9IGNoYXJhY3RlcihzKSwgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gQ09ORklHX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBtdXN0IGJlIGF0IG1vc3QgJHtDT05GSUdfTkFNRV9NQVhfTEVOR1RIfSBjaGFyYWN0ZXJzLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gIGNvbnN0IHZhbGlkTmFtZVBhdHRlcm4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC87XG4gIGlmICghdmFsaWROYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZmllbGQuXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiBERVNDUklQVElPTl9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRGVzY3JpcHRpb24gbXVzdCBiZSBhdCBtb3N0ICR7REVTQ1JJUFRJT05fTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7ZGVzY3JpcHRpb24ubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3JzIGFycmF5LlxuICogQHBhcmFtIGV2YWx1YXRvcnMgLSBUaGUgZXZhbHVhdG9ycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JzKGV2YWx1YXRvcnM6IElFdmFsdWF0b3JSZWZlcmVuY2VbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChldmFsdWF0b3JzID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnRXZhbHVhdG9ycyBhcnJheSBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPCBFVkFMVUFUT1JTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IGxlYXN0ICR7RVZBTFVBVE9SU19NSU5fQ09VTlR9IGV2YWx1YXRvciBpcyByZXF1aXJlZCwgZ290ICR7ZXZhbHVhdG9ycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoID4gRVZBTFVBVE9SU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RVZBTFVBVE9SU19NQVhfQ09VTlR9IGV2YWx1YXRvcnMgYXJlIGFsbG93ZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzYW1wbGluZyBwZXJjZW50YWdlLlxuICogQHBhcmFtIHBlcmNlbnRhZ2UgLSBUaGUgc2FtcGxpbmcgcGVyY2VudGFnZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYW1wbGluZ1BlcmNlbnRhZ2UocGVyY2VudGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHBlcmNlbnRhZ2UpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlIDwgU0FNUExJTkdfUEVSQ0VOVEFHRV9NSU4pIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbGVhc3QgJHtTQU1QTElOR19QRVJDRU5UQUdFX01JTn0sIGdvdCAke3BlcmNlbnRhZ2V9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPiBTQU1QTElOR19QRVJDRU5UQUdFX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNhbXBsaW5nIHBlcmNlbnRhZ2UgbXVzdCBiZSBhdCBtb3N0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NQVh9LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBmaWx0ZXJzIGFycmF5LlxuICogQHBhcmFtIGZpbHRlcnMgLSBUaGUgZmlsdGVycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlckNvbmZpZ1tdIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZmlsdGVycy5sZW5ndGggPiBGSUxURVJTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IG1vc3QgJHtGSUxURVJTX01BWF9DT1VOVH0gZmlsdGVycyBhcmUgYWxsb3dlZCwgZ290ICR7ZmlsdGVycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlc3Npb24gdGltZW91dCBpbiBtaW51dGVzLlxuICogQHBhcmFtIG1pbnV0ZXMgLSBUaGUgc2Vzc2lvbiB0aW1lb3V0IGluIG1pbnV0ZXMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQobWludXRlczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG1pbnV0ZXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChtaW51dGVzIDwgU0VTU0lPTl9USU1FT1VUX01JTikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IGxlYXN0ICR7U0VTU0lPTl9USU1FT1VUX01JTn0gbWludXRlKHMpLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtaW51dGVzID4gU0VTU0lPTl9USU1FT1VUX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IG1vc3QgJHtTRVNTSU9OX1RJTUVPVVRfTUFYfSBtaW51dGVzLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBsb2cgZ3JvdXAgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxvZ0dyb3VwTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWVzID09IG51bGwgfHwgbmFtZXMubGVuZ3RoIDwgTE9HX0dST1VQU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtMT0dfR1JPVVBTX01JTl9DT1VOVH0gbG9nIGdyb3VwIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IExPR19HUk9VUFNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtMT0dfR1JPVVBTX01BWF9DT1VOVH0gbG9nIGdyb3VwIG5hbWVzIGFyZSBhbGxvd2VkLCBnb3QgJHtuYW1lcy5sZW5ndGh9YCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2VydmljZSBuYW1lcyBhcnJheS5cbiAqIEBwYXJhbSBuYW1lcyAtIFRoZSBzZXJ2aWNlIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlcnZpY2VOYW1lcyhuYW1lczogc3RyaW5nW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAobmFtZXMgPT0gbnVsbCB8fCBuYW1lcy5sZW5ndGggPCBTRVJWSUNFX05BTUVTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1NFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UfSBzZXJ2aWNlIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtTRVJWSUNFX05BTUVTX01BWF9DT1VOVH0gc2VydmljZSBuYW1lIGlzIGFsbG93ZWQsIGdvdCAke25hbWVzLmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3IgbmFtZS5cbiAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGV2YWx1YXRvciBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvck5hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBtdXN0IGJlIGF0IGxlYXN0ICR7RVZBTFVBVE9SX05BTUVfTUlOX0xFTkdUSH0gY2hhcmFjdGVyKHMpLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiBFVkFMVUFUT1JfTkFNRV9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7RVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGluc3RydWN0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIG5vbi1lbXB0eS5cbiAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChpbnN0cnVjdGlvbnMgPT0gbnVsbCkge1xuICAgIGVycm9ycy5wdXNoKCdJbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBMTE0tYXMtYS1KdWRnZSBldmFsdWF0b3JzJyk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoaW5zdHJ1Y3Rpb25zKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoaW5zdHJ1Y3Rpb25zLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNhdGVnb3JpY2FsIHJhdGluZyBzY2FsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNhdGVnb3JpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb25bXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChvcHRpb25zID09IG51bGwgfHwgb3B0aW9ucy5sZW5ndGggPCBSQVRJTkdfU0NBTEVfTUlOX09QVElPTlMpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtSQVRJTkdfU0NBTEVfTUlOX09QVElPTlN9IGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gaXMgcmVxdWlyZWQsIGdvdCAke29wdGlvbnM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmxhYmVsKSAmJiAoIW9wdGlvbnNbaV0ubGFiZWwgfHwgb3B0aW9uc1tpXS5sYWJlbC50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYENhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGRlZmluaXRpb25gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIG51bWVyaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbnMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtZXJpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogTnVtZXJpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbiBpcyByZXF1aXJlZCwgZ290ICR7b3B0aW9ucz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0ubGFiZWwpICYmICghb3B0aW9uc1tpXS5sYWJlbCB8fCBvcHRpb25zW2ldLmxhYmVsLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBOdW1lcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIExhbWJkYSB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcGFyYW0gc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGFtYmRhVGltZW91dChzZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc2Vjb25kcyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoc2Vjb25kcykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKHNlY29uZHMgPD0gMCkge1xuICAgIGVycm9ycy5wdXNoKGBMYW1iZGEgdGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtzZWNvbmRzfWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRUxQRVIgRlVOQ1RJT05TXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogVGhyb3dzIGEgdmFsaWRhdGlvbiBlcnJvciBpZiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIGFueSBlcnJvcnMuXG4gKiBAcGFyYW0gdmFsaWRhdGlvbkZuIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmSW52YWxpZDxUPih2YWxpZGF0aW9uRm46IFZhbGlkYXRpb25GbjxUPiwgcGFyYW06IFQsIHNjb3BlPzogSUNvbnN0cnVjdCk6IFQge1xuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0aW9uRm4ocGFyYW0sIHNjb3BlKTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBWYWxpZGF0aW9uRmFpbGVkYCwgZXJyb3JzLmpvaW4oJ1xcbicpLCBzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVmFsaWRhdGlvbkZhaWxlZGAsIGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJhbTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFncyBmb3IgZXZhbHVhdGlvbiByZXNvdXJjZXMuXG4gKiBAcGFyYW0gdGFncyAtIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGtleVBhdHRlcm4gLSBUaGUgcmVnZXggcGF0dGVybiB0byB2YWxpZGF0ZSB0YWcga2V5cyBhZ2FpbnN0XG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLCBrZXlQYXR0ZXJuOiBSZWdFeHAsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHRhZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0YWdzKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gVEFHU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQ2Fubm90IGhhdmUgbW9yZSB0aGFuICR7VEFHU19NQVhfQ09VTlR9IHRhZ3MsIGdvdCAke09iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSkge1xuICAgICAgaWYgKGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdUYWcga2V5IGNhbm5vdCBiZSBlbXB0eSBvciBjb25zaXN0IG9ubHkgb2Ygd2hpdGVzcGFjZScpO1xuICAgICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgVEFHX0tFWV9NSU4gfHwga2V5Lmxlbmd0aCA+IFRBR19LRVlfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcga2V5IFwiJHtrZXl9XCIgbXVzdCBiZSBiZXR3ZWVuICR7VEFHX0tFWV9NSU59IGFuZCAke1RBR19LRVlfTUFYfSBjaGFyYWN0ZXJzLCBnb3QgJHtrZXkubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2F3czonKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNhbm5vdCBzdGFydCB3aXRoIFwiYXdzOlwiIGFzIHRoaXMgcHJlZml4IGlzIHJlc2VydmVkIGJ5IEFXU2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFrZXlQYXR0ZXJuLnRlc3Qoa2V5KSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBUQUdfVkFMVUVfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIG11c3QgYmUgYXQgbW9zdCAke1RBR19WQUxVRV9NQVh9IGNoYXJhY3RlcnMsIGdvdCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghVEFHX1ZBTFVFX1BBVFRFUk4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLiBWYWxpZDogVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIGFuZCBfLi89Ky1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKiogVmFsaWRhdGVzIHRhZ3MgZm9yIEV2YWx1YXRvciByZXNvdXJjZXMgKFVuaWNvZGUga2V5cyBhbGxvd2VkIHBlciBDRk4gZG9jcykgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvclRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBFVkFMVUFUT1JfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGFncyBmb3IgT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZXNvdXJjZXMgKEFTQ0lJIGtleXMgcGVyIENGTiBwYXR0ZXJuKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdGlvblRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG4iXX0=
|
|
@@ -25,7 +25,7 @@ var GatewayExceptionLevel;
|
|
|
25
25
|
* Base Class
|
|
26
26
|
*****************************************************************************/
|
|
27
27
|
class GatewayBase extends aws_cdk_lib_1.Resource {
|
|
28
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.254.0-alpha.0" };
|
|
29
29
|
/**
|
|
30
30
|
* A reference to a Gateway resource.
|
|
31
31
|
*/
|
package/lib/gateway/gateway.d.ts
CHANGED
|
@@ -117,8 +117,9 @@ export interface AddOpenApiTargetOptions {
|
|
|
117
117
|
*/
|
|
118
118
|
readonly validateOpenApiSchema?: boolean;
|
|
119
119
|
/**
|
|
120
|
-
* Credential providers for authentication
|
|
121
|
-
*
|
|
120
|
+
* Credential providers for outbound authentication (OpenAPI targets use API Key or OAuth, not IAM).
|
|
121
|
+
*
|
|
122
|
+
* @default - none (no credential configuration on the target; supply providers for secured backends)
|
|
122
123
|
*/
|
|
123
124
|
readonly credentialProviderConfigurations?: ICredentialProviderConfig[];
|
|
124
125
|
}
|