@odigos/aws-cdk 0.0.18 → 0.0.20
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 +33 -34
- package/README.md +111 -47
- package/lib/collector-config.d.ts +2 -0
- package/lib/collector-config.js +40 -17
- package/lib/fargate-recipes.js +3 -1
- package/lib/fargate.d.ts +3 -2
- package/lib/fargate.js +44 -10
- package/lib/generated/distributions.d.ts +1 -1
- package/lib/generated/distributions.js +2 -2
- package/lib/generated/fargate.d.ts +2 -2
- package/lib/generated/fargate.js +3 -3
- package/lib/generated/layers.d.ts +3 -3
- package/lib/generated/layers.js +292 -292
- package/lib/instrumentation.d.ts +5 -6
- package/lib/instrumentation.js +45 -26
- package/lib/layer-resolver.js +6 -2
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +8 -10
- package/lib/types.js +5 -5
- package/package.json +1 -2
package/lib/instrumentation.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export interface OdigosInstrumentationOptions {
|
|
|
53
53
|
/**
|
|
54
54
|
* Raise in-function OpenTelemetry verbosity (`OTEL_LOG_LEVEL=debug`).
|
|
55
55
|
*
|
|
56
|
-
* The
|
|
56
|
+
* The SDK and collector can then emit additional OTLP-export diagnostics into the function's CloudWatch
|
|
57
57
|
* log group. Useful while wiring up a destination, expensive to leave on.
|
|
58
58
|
*
|
|
59
59
|
* Has no effect in web-server mode, matching the connector, which never sets a log level there.
|
|
@@ -80,11 +80,10 @@ export interface OdigosInstrumentationOptions {
|
|
|
80
80
|
* The value the function already needs in its language loader variable (`NODE_OPTIONS`,
|
|
81
81
|
* `JAVA_TOOL_OPTIONS` or `PYTHONPATH`), which the Odigos loader is joined to rather than replacing.
|
|
82
82
|
*
|
|
83
|
-
* Only used in web-server mode.
|
|
84
|
-
*
|
|
85
|
-
* silently overwritten, which for `NODE_OPTIONS` can mean losing a flag the app needs to boot.
|
|
83
|
+
* Only used in web-server mode. The launcher preserves the function's existing loader at startup;
|
|
84
|
+
* this optional value overrides the customer's saved loader setting before instrumentation is added.
|
|
86
85
|
*
|
|
87
|
-
* @default - the loader variable
|
|
86
|
+
* @default - preserve the function's existing loader variable
|
|
88
87
|
*/
|
|
89
88
|
readonly existingLoaderValue?: string;
|
|
90
89
|
/**
|
|
@@ -141,7 +140,7 @@ export interface OdigosLambdaInstrumentationProps extends OdigosInstrumentationO
|
|
|
141
140
|
*/
|
|
142
141
|
export declare class OdigosLambdaInstrumentation extends Construct {
|
|
143
142
|
private readonly options;
|
|
144
|
-
private readonly
|
|
143
|
+
private readonly resolvers;
|
|
145
144
|
private readonly instrumented;
|
|
146
145
|
constructor(scope: Construct, id: string, props: OdigosLambdaInstrumentationProps);
|
|
147
146
|
/**
|
package/lib/instrumentation.js
CHANGED
|
@@ -75,9 +75,9 @@ function defaultServiceName(fn) {
|
|
|
75
75
|
class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
76
76
|
constructor(scope, id, props) {
|
|
77
77
|
super(scope, id);
|
|
78
|
+
this.resolvers = new Map();
|
|
78
79
|
this.instrumented = new Set();
|
|
79
80
|
this.options = props;
|
|
80
|
-
this.resolver = new layer_resolver_1.OdigosLayerResolver(this, props.layerSource ?? types_1.OdigosLayerSource.ODIGOS_PUBLIC);
|
|
81
81
|
// Rendered once. It depends only on the destination, and rendering it per function would make an
|
|
82
82
|
// accidental difference between two functions possible.
|
|
83
83
|
(0, collector_config_1.renderCollectorConfig)(props.destination);
|
|
@@ -121,26 +121,41 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
121
121
|
}
|
|
122
122
|
const recipe = (0, runtime_1.distributionRecipe)(language, this.options.distro, runtimeName);
|
|
123
123
|
(0, runtime_1.distributionWrapper)(language, this.options.distro, this.options.javaHandlerDistro, this.options.mode === types_1.OdigosInstrumentationMode.WEB_SERVER);
|
|
124
|
-
if (recipe.applicationSignals && !(0, collector_config_1.resolvedSignals)(this.options.destination).traces) {
|
|
125
|
-
throw new Error('ADOT + Application Signals requires traces to be enabled for the destination.');
|
|
124
|
+
if (recipe.applicationSignals && (!(0, collector_config_1.resolvedSignals)(this.options.destination).traces || !(0, collector_config_1.resolvedSignals)(this.options.destination).metrics)) {
|
|
125
|
+
throw new Error('ADOT + Application Signals requires traces and metrics to be enabled for the destination.');
|
|
126
126
|
}
|
|
127
|
+
const stack = aws_cdk_lib_1.Stack.of(fn);
|
|
128
|
+
let resolver = this.resolvers.get(stack);
|
|
129
|
+
if (!resolver) {
|
|
130
|
+
const scope = this.node.scopes.includes(stack) ? this : new constructs_1.Construct(stack, `OdigosLayers${this.node.addr}`);
|
|
131
|
+
resolver = new layer_resolver_1.OdigosLayerResolver(scope, this.options.layerSource ?? types_1.OdigosLayerSource.ODIGOS_PUBLIC);
|
|
132
|
+
this.resolvers.set(stack, resolver);
|
|
133
|
+
}
|
|
134
|
+
const architecture = fn.architecture.name;
|
|
135
|
+
const layer = this.options.layerVersion ?? resolver.resolve(recipe.artifact ?? language, architecture);
|
|
136
|
+
const collectorLayer = recipe.artifact ? (this.options.collectorLayerVersion ?? resolver.resolve('adot-collector', architecture)) : undefined;
|
|
137
|
+
const layers = collectorLayer ? [layer, collectorLayer] : [layer];
|
|
138
|
+
for (const attached of layers) {
|
|
139
|
+
const arn = attached.layerVersionArn;
|
|
140
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(arn) && !aws_cdk_lib_1.Token.isUnresolved(stack.region) && arn.split(':')[3] !== stack.region) {
|
|
141
|
+
throw new Error(`Odigos: layer ${arn} is not in the function's region ${stack.region}. Supply a layer published in the function's region.`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const environment = this.environmentFor(fn, language, layer.layerVersionArn, collectorLayer?.layerVersionArn);
|
|
127
145
|
if (recipe.applicationSignals) {
|
|
128
146
|
fn.role?.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
|
|
129
|
-
aws_cdk_lib_1.Annotations.of(fn).addWarningV2('@odigos/aws-cdk:applicationSignals', 'Enable CloudWatch Application Signals service discovery once in this AWS account and region. Application Signals also sends AWS service telemetry through the Lambda embedded agent.');
|
|
147
|
+
aws_cdk_lib_1.Annotations.of(fn).addWarningV2('@odigos/aws-cdk:applicationSignals', 'Enable CloudWatch Application Signals service discovery once in this AWS account and region. If the Lambda role is imported as immutable, attach CloudWatchLambdaApplicationSignalsExecutionRolePolicy separately. Application Signals also sends AWS service telemetry through the Lambda embedded agent.');
|
|
130
148
|
}
|
|
131
149
|
const resource = fn.node.defaultChild;
|
|
132
150
|
resource.addPropertyDeletionOverride('Environment.Variables.ODIGOS_MANAGED');
|
|
133
151
|
resource.addPropertyDeletionOverride('Environment.Variables.ODIGOS_IAC');
|
|
134
|
-
|
|
135
|
-
const architecture = fn.architecture.name;
|
|
136
|
-
const layer = this.options.layerVersion ?? this.resolver.resolve(recipe.artifact ?? language, architecture);
|
|
137
|
-
const collectorLayer = recipe.artifact ? (this.options.collectorLayerVersion ?? this.resolver.resolve('adot-collector', architecture)) : undefined;
|
|
138
|
-
fn.addLayers(...(collectorLayer ? [layer, collectorLayer] : [layer]));
|
|
152
|
+
fn.addLayers(...layers);
|
|
139
153
|
// The ARN, not the construct: the marker has to name the exact layer version the function carries, and
|
|
140
154
|
// in IN_ACCOUNT mode that is a nested-stack output reference resolved at deploy time.
|
|
141
|
-
for (const [name, value] of Object.entries(
|
|
155
|
+
for (const [name, value] of Object.entries(environment)) {
|
|
142
156
|
fn.addEnvironment(name, value);
|
|
143
157
|
}
|
|
158
|
+
this.instrumented.add(key);
|
|
144
159
|
}
|
|
145
160
|
/** Instruments every function in the list. */
|
|
146
161
|
instrumentAll(functions) {
|
|
@@ -162,26 +177,30 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
162
177
|
const signals = (0, collector_config_1.resolvedSignals)(destination);
|
|
163
178
|
const resource = fn.node.defaultChild;
|
|
164
179
|
const current = aws_cdk_lib_1.Stack.of(fn).resolve(resource.environment);
|
|
165
|
-
const
|
|
180
|
+
const wrapperValue = current?.variables?.AWS_LAMBDA_EXEC_WRAPPER;
|
|
181
|
+
const originalWrapper = wrapperValue === undefined ? '' : aws_cdk_lib_1.Token.asString(wrapperValue);
|
|
182
|
+
if (webServer && originalWrapper === '/opt/odigos-webserver') {
|
|
183
|
+
throw new Error('Odigos: this function already uses the Odigos web-server wrapper. Reuse its original instrumentation construct.');
|
|
184
|
+
}
|
|
166
185
|
const execWrapper = webServer ? '/opt/odigos-webserver' : (0, runtime_1.distributionWrapper)(language, distro, javaHandlerDistro, false);
|
|
167
186
|
const functionLogs = signals.logs && !webServer && (language === 'ruby' || (language === 'java' &&
|
|
168
187
|
['/opt/otel-handler', '/opt/otel-proxy-handler', '/opt/otel-sqs-handler', '/opt/otel-stream-handler'].includes(execWrapper)));
|
|
169
188
|
const config = {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
...(destination.httpEndpoint ? {
|
|
175
|
-
...(destination.endpoint && destination.insecure ? {
|
|
176
|
-
...(destination.headers && Object.keys(destination.headers).length ? {
|
|
177
|
-
...(recipe.applicationSignals ? {
|
|
178
|
-
...(functionLogs ? {
|
|
179
|
-
...(debug && !webServer ? {
|
|
180
|
-
...(webServer ? {
|
|
189
|
+
version: 2,
|
|
190
|
+
service: serviceName ?? defaultServiceName(fn),
|
|
191
|
+
signals: ['traces', 'metrics', 'logs'].filter(signal => signals[signal]),
|
|
192
|
+
endpoint: destination.endpoint ?? destination.httpEndpoint,
|
|
193
|
+
...(destination.httpEndpoint ? { http: true } : {}),
|
|
194
|
+
...(destination.endpoint && destination.insecure ? { insecure: true } : {}),
|
|
195
|
+
...(destination.headers && Object.keys(destination.headers).length ? { headers: destination.headers } : {}),
|
|
196
|
+
...(recipe.applicationSignals ? { applicationSignals: true } : {}),
|
|
197
|
+
...(functionLogs ? { functionLogs: true } : {}),
|
|
198
|
+
...(debug && !webServer ? { debug: true } : {}),
|
|
199
|
+
...(webServer ? { webWrapper: originalWrapper } : {}),
|
|
181
200
|
};
|
|
182
201
|
const env = {
|
|
183
202
|
[ENV_EXEC_WRAPPER]: execWrapper,
|
|
184
|
-
[ENV_LAMBDA_CONFIG]:
|
|
203
|
+
[ENV_LAMBDA_CONFIG]: aws_cdk_lib_1.Stack.of(fn).toJsonString(config),
|
|
185
204
|
};
|
|
186
205
|
aws_cdk_lib_1.Tags.of(fn).add('odigos:iac', 'v1');
|
|
187
206
|
aws_cdk_lib_1.Tags.of(fn).add('odigos:sdk-layer', layerArn);
|
|
@@ -204,7 +223,7 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
204
223
|
}
|
|
205
224
|
exports.OdigosLambdaInstrumentation = OdigosLambdaInstrumentation;
|
|
206
225
|
_a = JSII_RTTI_SYMBOL_1;
|
|
207
|
-
OdigosLambdaInstrumentation[_a] = { fqn: "@odigos/aws-cdk.OdigosLambdaInstrumentation", version: "0.0.
|
|
226
|
+
OdigosLambdaInstrumentation[_a] = { fqn: "@odigos/aws-cdk.OdigosLambdaInstrumentation", version: "0.0.20" };
|
|
208
227
|
/**
|
|
209
228
|
* Applies Odigos instrumentation to every `lambda.Function` in a scope.
|
|
210
229
|
*
|
|
@@ -242,5 +261,5 @@ class OdigosInstrumentationAspect {
|
|
|
242
261
|
}
|
|
243
262
|
exports.OdigosInstrumentationAspect = OdigosInstrumentationAspect;
|
|
244
263
|
_b = JSII_RTTI_SYMBOL_1;
|
|
245
|
-
OdigosInstrumentationAspect[_b] = { fqn: "@odigos/aws-cdk.OdigosInstrumentationAspect", version: "0.0.
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1RTtBQUN2RSxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLDJDQUFtRDtBQUNuRCx5REFHNEI7QUFDNUIscURBQXVEO0FBQ3ZELHVDQUF5RjtBQUN6RixtQ0FLaUI7QUFFakIsMkVBQTJFO0FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7QUFDbkQsa0VBQWtFO0FBQ2xFLDhGQUE4RjtBQUM5RixNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsa0JBQWtCLENBQUMsRUFBbUI7SUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUE4QyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBeUhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFLeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUMvRSxLQUFLLENBQUMsS0FBSyxF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N0IsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFnQjtRQUMzQixJQUFJLElBQUksWUFBWSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7O0FBbkJILGtFQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBJQXNwZWN0LCBTdGFjaywgVG9rZW4sIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIHJlc29sdmVkU2lnbmFscyxcbiAgcmVuZGVyQ29sbGVjdG9yQ29uZmlnLFxufSBmcm9tICcuL2NvbGxlY3Rvci1jb25maWcnO1xuaW1wb3J0IHsgT2RpZ29zTGF5ZXJSZXNvbHZlciB9IGZyb20gJy4vbGF5ZXItcmVzb2x2ZXInO1xuaW1wb3J0IHsgZGlzdHJpYnV0aW9uUmVjaXBlLCBkaXN0cmlidXRpb25XcmFwcGVyLCBsYW5ndWFnZUZyb21SdW50aW1lIH0gZnJvbSAnLi9ydW50aW1lJztcbmltcG9ydCB7XG4gIE9kaWdvc0Rlc3RpbmF0aW9uLFxuICBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLFxuICBPZGlnb3NKYXZhSGFuZGxlckRpc3RybyxcbiAgT2RpZ29zTGF5ZXJTb3VyY2UsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKiogYEFXU19MQU1CREFfRVhFQ19XUkFQUEVSYCDigJQgdGhlIGxheWVyJ3MgZW50cnkgcG9pbnQgaW4gaGFuZGxlciBtb2RlLiAqL1xuY29uc3QgRU5WX0VYRUNfV1JBUFBFUiA9ICdBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUic7XG4vKiogU2VydmljZSBuYW1lIHJlcG9ydGVkIG9uIGV2ZXJ5IHNwYW4sIG1ldHJpYyBhbmQgbG9nIHJlY29yZC4gKi9cbi8qKiBDb21wYWN0IFNESyBhbmQgZGVzdGluYXRpb24gc2V0dGluZ3M7IGFsbCBhdHRyaWJ1dGlvbiBtYXJrZXJzIGFyZSBMYW1iZGEgcmVzb3VyY2UgdGFncy4gKi9cbmNvbnN0IEVOVl9MQU1CREFfQ09ORklHID0gJ09ESUdPU19MQU1CREFfQ09ORklHJztcblxuLyoqXG4gKiBUaGUgc2VydmljZSBhIGZ1bmN0aW9uIHJlcG9ydHMgYXMsIHdoZW4gdGhlIGNhbGxlciBoYXMgbm90IG5hbWVkIG9uZS5cbiAqXG4gKiBSRUFEIEZST00gVEhFIEwxLCBOT1QgRlJPTSBgZm4uZnVuY3Rpb25OYW1lYC4gVGhlIEwyIHByb3BlcnR5IGlzIGEgY3Jvc3MtZW52aXJvbm1lbnQtYXdhcmUgdG9rZW4gdGhhdFxuICogcmVzb2x2ZXMgdG8gYSBgUmVmYCB0byB0aGUgZnVuY3Rpb24gaXRzZWxmIGV2ZW4gd2hlbiB0aGUgc3RhY2sgc2V0IGBmdW5jdGlvbk5hbWVgIGV4cGxpY2l0bHkg4oCUIHNvIHRoZVxuICogb2J2aW91cyBgU3RhY2sub2YoZm4pLnJlc29sdmUoZm4uZnVuY3Rpb25OYW1lKWAgbmV2ZXIgeWllbGRzIGEgbGl0ZXJhbCwgYW5kIGV2ZXJ5IGZ1bmN0aW9uIHNpbGVudGx5IGZlbGxcbiAqIGJhY2sgdG8gaXRzIGNvbnN0cnVjdCBpZC4gYENmbkZ1bmN0aW9uLmZ1bmN0aW9uTmFtZWAgaXMgdGhlIHJhdyB0ZW1wbGF0ZSB2YWx1ZTogdGhlIGxpdGVyYWwgdGhlIHN0YWNrXG4gKiBwYXNzZWQsIG9yIHVuZGVmaW5lZCB3aGVuIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyB0aGUgbmFtZS5cbiAqXG4gKiBXaHkgdGhlIGZhbGxiYWNrIGlzIHRoZSBjb25zdHJ1Y3QgaWQgcmF0aGVyIHRoYW4gdGhlIGdlbmVyYXRlZCBuYW1lOiBhIGdlbmVyYXRlZCBuYW1lIGlzIGEgYFJlZmAgdG8gdGhlXG4gKiBmdW5jdGlvbiwgYW5kIHB1dHRpbmcgdGhhdCBpbiB0aGUgZnVuY3Rpb24ncyBvd24gZW52aXJvbm1lbnQgbWFrZXMgdGhlIHJlc291cmNlIGRlcGVuZCBvbiBpdHMgb3duXG4gKiBjcmVhdGlvbiDigJQgQ2xvdWRGb3JtYXRpb24gcmVqZWN0cyB0aGUgdGVtcGxhdGUgd2l0aCBhIGRlcGVuZGVuY3kgY3ljbGUsIGF0IGRlcGxveSB0aW1lLlxuICpcbiAqIFRoaXMgbWF0dGVycyBiZXlvbmQgY29zbWV0aWNzLiBUaGUgY29ubmVjdG9yIGNvbXBhcmVzIGBPVEVMX1NFUlZJQ0VfTkFNRWAgYWdhaW5zdCB0aGUgd29ya2xvYWQncyBuYW1lIGluXG4gKiBPZGlnb3MsIHdoaWNoIGlzIHRoZSByZWFsIEFXUyBmdW5jdGlvbiBuYW1lLCBzbyBhIGZ1bmN0aW9uIHJlcG9ydGluZyBpdHMgY29uc3RydWN0IGlkIGlzIHJlcG9ydGVkIGFzXG4gKiBkcmlmdGVkIG9uIHRoZSBzZXJ2aWNlLW5hbWUgY29tcG9uZW50LiBOYW1pbmcgdGhlIGZ1bmN0aW9uIGluIHlvdXIgc3RhY2sgaXMgbm93IGVub3VnaCB0byBsaW5lIHRoZSB0d29cbiAqIHVwOyBhIGZ1bmN0aW9uIHdob3NlIG5hbWUgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIHN0aWxsIG5lZWRzIGBzZXJ2aWNlTmFtZWAgcGFzc2VkIGV4cGxpY2l0bHkuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRTZXJ2aWNlTmFtZShmbjogbGFtYmRhLkZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgY29uc3QgY2ZuID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCByZXNvbHZlZCA9IGNmbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU3RhY2sub2YoZm4pLnJlc29sdmUoY2ZuLmZ1bmN0aW9uTmFtZSk7XG4gIGlmICh0eXBlb2YgcmVzb2x2ZWQgPT09ICdzdHJpbmcnICYmIHJlc29sdmVkICE9PSAnJyAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHJlc29sdmVkKSkge1xuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuICByZXR1cm4gZm4ubm9kZS5pZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHNoYXJlZCBieSB0aGUgY29uc3RydWN0IGFuZCB0aGUgYXNwZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogV2hlcmUgdGhlIGluLUxhbWJkYSBjb2xsZWN0b3IgZXhwb3J0cyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBPZGlnb3NEZXN0aW5hdGlvbjtcblxuICAvKipcbiAgICogV2hlcmUgdGhlIE9kaWdvcyBsYXllciBjb21lcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPZGlnb3NMYXllclNvdXJjZS5PRElHT1NfUFVCTElDXG4gICAqL1xuICByZWFkb25seSBsYXllclNvdXJjZT86IE9kaWdvc0xheWVyU291cmNlO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVyIG1vZGUgb3Igd2ViLXNlcnZlciAoTGFtYmRhIFdlYiBBZGFwdGVyKSBtb2RlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBhdXRvLWRldGVjdGlvbiwgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvbWlzc2lvbjogZGV0ZWN0aW5nIHRoZSB3ZWIgYWRhcHRlclxuICAgKiBtZWFucyBpbnNwZWN0aW5nIHRoZSBmdW5jdGlvbidzIG90aGVyIGxheWVycywgd2hpY2ggYXQgc3ludGggdGltZSBhcmUgZnJlcXVlbnRseSB1bnJlc29sdmVkIHRva2Vucy5cbiAgICogQSBkZXRlY3RvciB0aGF0IGlzIHJpZ2h0IG1vc3Qgb2YgdGhlIHRpbWUgd291bGQgc2lsZW50bHkgYnJlYWsgdGhlIGZ1bmN0aW9ucyBpdCBnb3Qgd3JvbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IE9kaWdvc0luc3RydW1lbnRhdGlvbk1vZGUuSEFORExFUlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IE9kaWdvc0luc3RydW1lbnRhdGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIENvbm5lY3RvciBHcmFwaFFMIGRpc3RybyBuYW1lLCBzdWNoIGFzIGphdmEtbGFtYmRhLW90ZWwtYWdlbnQgb3IgamF2YS1sYW1iZGEtb3RlbC13cmFwcGVyLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBidW5kbGVkIGRlZmF1bHQgZGlzdHJpYnV0aW9uIGZvciB0aGUgZnVuY3Rpb24ncyBydW50aW1lXG4gICAqL1xuICByZWFkb25seSBkaXN0cm8/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExlZ2FjeSBsaWdodHdlaWdodCBKYXZhIGhhbmRsZXIgYWRhcHRlci5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBjb3JyZXNwb25kaW5nIGphdmEtbGFtYmRhLW90ZWwtKi13cmFwcGVyIGRpc3Ryby5cbiAgICovXG4gIHJlYWRvbmx5IGphdmFIYW5kbGVyRGlzdHJvPzogT2RpZ29zSmF2YUhhbmRsZXJEaXN0cm87XG5cbiAgLyoqXG4gICAqIGBPVEVMX1NFUlZJQ0VfTkFNRWAgZm9yIGV2ZXJ5IGZ1bmN0aW9uIHRoaXMgaW5zdHJ1bWVudHMuXG4gICAqXG4gICAqIFVzdWFsbHkgd3JvbmcgdG8gc2V0IHdoZW4gaW5zdHJ1bWVudGluZyBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIOKAlCB0aGV5IHdvdWxkIGFsbCByZXBvcnQgYXMgdGhlIHNhbWVcbiAgICogc2VydmljZS5cbiAgICpcbiAgICogTGVmdCB1bnNldCwgYSBmdW5jdGlvbiByZXBvcnRzIGFzIGl0cyBleHBsaWNpdGx5LXNldCBwaHlzaWNhbCBuYW1lIGlmIGl0IGhhcyBvbmUsIGFuZCBvdGhlcndpc2UgYXNcbiAgICogaXRzIGNvbnN0cnVjdCBpZC4gSXQgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGRlZmF1bHQgdG8gdGhlIGdlbmVyYXRlZCBwaHlzaWNhbCBuYW1lOiB0aGF0IHZhbHVlIGlzIGFcbiAgICogYFJlZmAgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIGEgZnVuY3Rpb24gcmVmZXJlbmNpbmcgaXRzZWxmIGluIGl0cyBvd24gZW52aXJvbm1lbnQgaXMgYVxuICAgKiBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5IGN5Y2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBmdW5jdGlvbidzIHBoeXNpY2FsIG5hbWUgaWYgZXhwbGljaXRseSBzZXQsIG90aGVyd2lzZSBpdHMgY29uc3RydWN0IGlkXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmFpc2UgaW4tZnVuY3Rpb24gT3BlblRlbGVtZXRyeSB2ZXJib3NpdHkgKGBPVEVMX0xPR19MRVZFTD1kZWJ1Z2ApLlxuICAgKlxuICAgKiBUaGUgbGF5ZXIsIFNESyBhbmQgY29sbGVjdG9yIHRoZW4gZW1pdCBzcGFuIGFuZCBPVExQLWV4cG9ydCBkaWFnbm9zdGljcyBpbnRvIHRoZSBmdW5jdGlvbidzIENsb3VkV2F0Y2hcbiAgICogbG9nIGdyb3VwLiBVc2VmdWwgd2hpbGUgd2lyaW5nIHVwIGEgZGVzdGluYXRpb24sIGV4cGVuc2l2ZSB0byBsZWF2ZSBvbi5cbiAgICpcbiAgICogSGFzIG5vIGVmZmVjdCBpbiB3ZWItc2VydmVyIG1vZGUsIG1hdGNoaW5nIHRoZSBjb25uZWN0b3IsIHdoaWNoIG5ldmVyIHNldHMgYSBsb2cgbGV2ZWwgdGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGlzIGxheWVyIGluc3RlYWQgb2YgcmVzb2x2aW5nIG9uZS4gT3ZlcnJpZGVzIGBsYXllclNvdXJjZWAgZW50aXJlbHkuXG4gICAqXG4gICAqIFRoZSBlc2NhcGUgaGF0Y2ggZm9yIGEgbGF5ZXIgbWlycm9yZWQgaW50byBhIHByaXZhdGUgcmVnaXN0cnkgb3IgYW4gaW50ZXJuYWwgYWNjb3VudC4gVGhlIGxheWVyIG11c3RcbiAgICogaGF2ZSB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgT2RpZ29zIG9uZSDigJQgdGhlIGVudmlyb25tZW50IHNldCBoZXJlIGFzc3VtZXMgaXRzIGV4YWN0IHNjcmlwdCBsYXlvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVzb2x2ZWQgZnJvbSBsYXllclNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF5ZXJWZXJzaW9uPzogbGFtYmRhLklMYXllclZlcnNpb247XG5cbiAgLyoqXG4gICAqIEFyY2hpdGVjdHVyZS1tYXRjaGVkIGNvbGxlY3RvciBsYXllciB3aGVuIHN1cHBseWluZyBhIGN1c3RvbSBBRE9UIFNESyBsYXllci5cbiAgICogVXBzdHJlYW0gU0RLIGxheWVycyBhbHJlYWR5IGluY2x1ZGUgdGhlaXIgY29sbGVjdG9yIGFuZCBkbyBub3QgdXNlIHRoaXMgb3B0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHJlc29sdmVkIGZyb20gbGF5ZXJTb3VyY2UgZm9yIEFET1RcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3RvckxheWVyVmVyc2lvbj86IGxhbWJkYS5JTGF5ZXJWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhlIGZ1bmN0aW9uIGFscmVhZHkgbmVlZHMgaW4gaXRzIGxhbmd1YWdlIGxvYWRlciB2YXJpYWJsZSAoYE5PREVfT1BUSU9OU2AsXG4gICAqIGBKQVZBX1RPT0xfT1BUSU9OU2Agb3IgYFBZVEhPTlBBVEhgKSwgd2hpY2ggdGhlIE9kaWdvcyBsb2FkZXIgaXMgam9pbmVkIHRvIHJhdGhlciB0aGFuIHJlcGxhY2luZy5cbiAgICpcbiAgICogT25seSB1c2VkIGluIHdlYi1zZXJ2ZXIgbW9kZS4gSXQgaGFzIHRvIGJlIHBhc3NlZCBleHBsaWNpdGx5IGJlY2F1c2UgQ0RLJ3MgYGxhbWJkYS5GdW5jdGlvbmAgZXhwb3Nlc1xuICAgKiBubyB3YXkgdG8gcmVhZCBiYWNrIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBlbHNld2hlcmUgaW4gdGhlIGFwcCDigJQgYW4gb21pdHRlZCB2YWx1ZSBoZXJlIGlzXG4gICAqIHNpbGVudGx5IG92ZXJ3cml0dGVuLCB3aGljaCBmb3IgYE5PREVfT1BUSU9OU2AgY2FuIG1lYW4gbG9zaW5nIGEgZmxhZyB0aGUgYXBwIG5lZWRzIHRvIGJvb3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxvYWRlciB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIE9kaWdvcyB2YWx1ZSBhbG9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdMb2FkZXJWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2tpcCBmdW5jdGlvbnMgd2hvc2UgcnVudGltZSBoYXMgbm8gT3BlblRlbGVtZXRyeSBMYW1iZGEgbGF5ZXIgaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAgICpcbiAgICogYGRvdG5ldCpgIGFuZCBgcHJvdmlkZWQuKmAgKEdvLCBjdXN0b20gcnVudGltZXMpIGhhdmUgbm8gbGFuZ3VhZ2UgbGF5ZXIgdXBzdHJlYW0uIEV4cGxpY2l0bHlcbiAgICogaW5zdHJ1bWVudGluZyBvbmUgaXMgYSBtaXN0YWtlIHdvcnRoIGZhaWxpbmcgb247IHN3ZWVwaW5nIGEgd2hvbGUgc3RhY2sgd2l0aCB0aGUgYXNwZWN0IGFuZCBoaXR0aW5nXG4gICAqIG9uZSBpcyBub3QsIHdoaWNoIGlzIHdoeSB0aGUgYXNwZWN0IGRlZmF1bHRzIHRoaXMgdG8gYHRydWVgIGFuZCB0aGUgY29uc3RydWN0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwVW5zdXBwb3J0ZWRSdW50aW1lcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvblByb3BzIGV4dGVuZHMgT2RpZ29zSW5zdHJ1bWVudGF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbnMgdG8gaW5zdHJ1bWVudCBvbiBjb25zdHJ1Y3Rpb24uIE1vcmUgY2FuIGJlIGFkZGVkIHdpdGggYGluc3RydW1lbnQoKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25zPzogbGFtYmRhLkZ1bmN0aW9uW107XG59XG5cbi8qKlxuICogSW5zdHJ1bWVudHMgQVdTIExhbWJkYSBmdW5jdGlvbnMgd2l0aCB0aGUgT2RpZ29zIE9wZW5UZWxlbWV0cnkgbGF5ZXIuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IG9kaWdvcyA9IG5ldyBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb24odGhpcywgJ09kaWdvcycsIHtcbiAqICAgZGVzdGluYXRpb246IHsgZW5kcG9pbnQ6ICdvdGxwLmV4YW1wbGUuY29tOjQzMTcnIH0sXG4gKiAgIGZ1bmN0aW9uczogW2FwaUZuLCB3b3JrZXJGbl0sXG4gKiB9KTtcbiAqIG9kaWdvcy5pbnN0cnVtZW50KGFub3RoZXJGbik7XG4gKiBgYGBcbiAqXG4gKiBXaGF0IGl0IGRvZXMgdG8gZWFjaCBmdW5jdGlvbjogYXR0YWNoZXMgdGhlIGxheWVyIGZvciB0aGUgZnVuY3Rpb24ncyBsYW5ndWFnZSBhbmQgYXJjaGl0ZWN0dXJlLCBzZXRzXG4gKiBgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVJgIGFuZCBjb21wYWN0IGBPRElHT1NfTEFNQkRBX0NPTkZJR2AuIFRoZSBsYXllciBidWlsZHMgdGhlIFNESyBlbnZpcm9ubWVudCBhbmRcbiAqIGNvbGxlY3RvciBwaXBlbGluZXMgYXQgc3RhcnR1cDsgb3duZXJzaGlwIGFuZCBleGFjdCBsYXllciBhdHRyaWJ1dGlvbiBhcmUgcmVjb3JkZWQgaW4gcmVzb3VyY2UgdGFncy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24ncyBTREsgZXhwb3J0cyB0byB0aGUgY29sbGVjdG9yIG9uIGxvY2FsaG9zdCwgbm90IHRvIHlvdXIgZGVzdGluYXRpb24uIFRoZSBjb2xsZWN0b3JcbiAqIGZvcndhcmRzIGFmdGVyIHRoZSBoYW5kbGVyIGhhcyBhbHJlYWR5IHJldHVybmVkLCBzbyBhIHNsb3cgZGVzdGluYXRpb24gY29zdHMgYmlsbGVkIGR1cmF0aW9uIHJhdGhlclxuICogdGhhbiBjYWxsZXIgbGF0ZW5jeS5cbiAqXG4gKiAjIyBEbyBub3QgYWxzbyBpbnN0cnVtZW50IHRoZXNlIGZ1bmN0aW9ucyB3aXRoIHRoZSBjb25uZWN0b3JcbiAqXG4gKiBUaGUgT2RpZ29zIEFXUyBjb25uZWN0b3IgaW5zdHJ1bWVudHMgbGl2ZSBmdW5jdGlvbnMgYnkgbXV0YXRpbmcgdGhlbSwgYW5kIHJlY29uY2lsZXMgdGhlbSBiYWNrIHRvIGl0c1xuICogb3duIGRlc2lyZWQgc3RhdGUgb24gZXZlcnkgcGFzcy4gQSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmQgYWxzbyBlbmFibGVkIGFzIGEgY29ubmVjdG9yIHNvdXJjZVxuICogZW5kcyB1cCBvd25lZCBieSBib3RoOiBlYWNoIGBjZGsgZGVwbG95YCByZWFzc2VydHMgdGhlIENESydzIGVudmlyb25tZW50LCBlYWNoIHJlY29uY2lsZSByZWFzc2VydHMgdGhlXG4gKiBjb25uZWN0b3IncywgYW5kIGV2ZXJ5IHJvdW5kIHRyaXAgcHVibGlzaGVzIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb24uXG4gKlxuICogQ2hvb3NlIG9uZSBwZXIgZnVuY3Rpb24uIFRoaXMgY29uc3RydWN0IHdyaXRlcyBgb2RpZ29zOmlhY2AgcmVzb3VyY2UgdGFncyBhbmQgbmV2ZXIgdGhlIGNvbm5lY3RvcidzIGBvZGlnb3M6bWFuYWdlZGBcbiAqIG93bmVyc2hpcCB0YWcsIHNvIGFuIElhQy1pbnN0cnVtZW50ZWQgZnVuY3Rpb24gcmVwb3J0cyBhcyBpbnN0cnVtZW50ZWQgYnV0IGlzIG5vdCBvbmUgdGhlIGNvbm5lY3RvclxuICogd2lsbCByb2xsIGJhY2sg4oCUIHRob3VnaCBpdCB3aWxsIGhhcHBpbHkgdGFrZSBpdCBvdmVyIGlmIHlvdSBlbmFibGUgaXQgYXMgYSBzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXI6IE9kaWdvc0xheWVyUmVzb2x2ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdHJ1bWVudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHByb3BzO1xuICAgIHRoaXMucmVzb2x2ZXIgPSBuZXcgT2RpZ29zTGF5ZXJSZXNvbHZlcih0aGlzLCBwcm9wcy5sYXllclNvdXJjZSA/PyBPZGlnb3NMYXllclNvdXJjZS5PRElHT1NfUFVCTElDKTtcblxuICAgIC8vIFJlbmRlcmVkIG9uY2UuIEl0IGRlcGVuZHMgb25seSBvbiB0aGUgZGVzdGluYXRpb24sIGFuZCByZW5kZXJpbmcgaXQgcGVyIGZ1bmN0aW9uIHdvdWxkIG1ha2UgYW5cbiAgICAvLyBhY2NpZGVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZnVuY3Rpb25zIHBvc3NpYmxlLlxuICAgIHJlbmRlckNvbGxlY3RvckNvbmZpZyhwcm9wcy5kZXN0aW5hdGlvbik7XG5cbiAgICAvLyBBIHdhcm5pbmcgcmF0aGVyIHRoYW4gYW4gZXJyb3IsIGJlY2F1c2UgYSBjb2xsZWN0b3IgQ0FOIGJlIHJlYWNoZWQgb3ZlciBnUlBDIG9uIGEgbm9uLXN0YW5kYXJkIHBvcnQg4oCUXG4gICAgLy8gYnV0IHRoZSBvdmVyd2hlbG1pbmdseSBsaWtlbGllciByZWFkaW5nIG9mIGBlbmRwb2ludDogXCJob3N0OjQzMThcImAgaXMgYW4gT1RMUC9IVFRQIGVuZHBvaW50IHBhc3NlZCB0b1xuICAgIC8vIHRoZSBnUlBDIGV4cG9ydGVyLCB3aGljaCBidWlsZHMsIHN0YXJ0cywgYW5kIHRoZW4gbmV2ZXIgZGVsaXZlcnMgYSBiYXRjaC4gU2lsZW50IGZvciB0aGUgY2FsbGVyIHdob1xuICAgIC8vIG1lYW50IGl0OyBsb3VkIGZvciB0aGUgb25lIHdobyBkaWQgbm90LlxuICAgIGlmIChwcm9wcy5kZXN0aW5hdGlvbi5lbmRwb2ludD8uZW5kc1dpdGgoJzo0MzE4JykpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0BvZGlnb3MvYXdzLWNkazpwcm9iYWJsZUh0dHBFbmRwb2ludCcsXG4gICAgICAgIGBPZGlnb3M6IGRlc3RpbmF0aW9uIGVuZHBvaW50IFwiJHtwcm9wcy5kZXN0aW5hdGlvbi5lbmRwb2ludH1cIiBpcyBvbiA0MzE4LCB0aGUgT1RMUC9IVFRQIHBvcnQsIGJ1dCBgICtcbiAgICAgICAgICAnYGVuZHBvaW50YCBjb25maWd1cmVzIHRoZSBnUlBDIGV4cG9ydGVyIChjb252ZW50aW9uYWxseSA0MzE3KS4gSWYgdGhhdCBpcyBhbiBPVExQL0hUVFAgY29sbGVjdG9yLCAnICtcbiAgICAgICAgICAncGFzcyBpdCBhcyBgaHR0cEVuZHBvaW50OiBcImh0dHA6Ly9ob3N0OjQzMThcImAgaW5zdGVhZCDigJQgdGhlIGdSUEMgZXhwb3J0ZXIgd2lsbCBleHBvcnQgbm90aGluZyB0byBpdC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRlc3RpbmF0aW9uLmh0dHBFbmRwb2ludD8uZW5kc1dpdGgoJzo0MzE3JykpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0BvZGlnb3MvYXdzLWNkazpwcm9iYWJsZUdycGNFbmRwb2ludCcsXG4gICAgICAgIGBPZGlnb3M6IGRlc3RpbmF0aW9uIGh0dHBFbmRwb2ludCBcIiR7cHJvcHMuZGVzdGluYXRpb24uaHR0cEVuZHBvaW50fVwiIGlzIG9uIDQzMTcsIHRoZSBPVExQL2dSUEMgcG9ydCwgYCArXG4gICAgICAgICAgJ2J1dCBgaHR0cEVuZHBvaW50YCBjb25maWd1cmVzIHRoZSBIVFRQIGV4cG9ydGVyIChjb252ZW50aW9uYWxseSA0MzE4KS4gSWYgdGhhdCBpcyBhIGdSUEMgY29sbGVjdG9yLCAnICtcbiAgICAgICAgICAncGFzcyBpdCBhcyBgZW5kcG9pbnQ6IFwiaG9zdDo0MzE3XCJgIGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmbiBvZiBwcm9wcy5mdW5jdGlvbnMgPz8gW10pIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudChmbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluc3RydW1lbnRzIG9uZSBmdW5jdGlvbi4gSWRlbXBvdGVudCDigJQgaW5zdHJ1bWVudGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpcyBhIG5vLW9wIHJhdGhlciB0aGFuIGFcbiAgICogZG91YmxlZCBsb2FkZXIgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgaW5zdHJ1bWVudChmbjogbGFtYmRhLkZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZm4ubm9kZS5wYXRoO1xuICAgIGlmICh0aGlzLmluc3RydW1lbnRlZC5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bnRpbWVOYW1lID0gZm4ucnVudGltZS5uYW1lO1xuICAgIGNvbnN0IGxhbmd1YWdlID0gbGFuZ3VhZ2VGcm9tUnVudGltZShydW50aW1lTmFtZSk7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGBPZGlnb3M6IHJ1bnRpbWUgXCIke3J1bnRpbWVOYW1lfVwiIGhhcyBubyBPcGVuVGVsZW1ldHJ5IExhbWJkYSBsYXllciBgICtcbiAgICAgICAgJyh1cHN0cmVhbSBwdWJsaXNoZXMgbGF5ZXJzIGZvciBweXRob24sIG5vZGVqcywgamF2YSBhbmQgcnVieSBvbmx5KSwgc28gdGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgaW5zdHJ1bWVudGVkLic7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKGZuKS5hZGRXYXJuaW5nVjIoJ0BvZGlnb3MvYXdzLWNkazp1bnN1cHBvcnRlZFJ1bnRpbWUnLCBgJHttZXNzYWdlfSBTa2lwcGluZy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21lc3NhZ2V9IFNldCBza2lwVW5zdXBwb3J0ZWRSdW50aW1lczogdHJ1ZSB0byBza2lwIGl0IGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBlID0gZGlzdHJpYnV0aW9uUmVjaXBlKGxhbmd1YWdlLCB0aGlzLm9wdGlvbnMuZGlzdHJvLCBydW50aW1lTmFtZSk7XG4gICAgZGlzdHJpYnV0aW9uV3JhcHBlcihsYW5ndWFnZSwgdGhpcy5vcHRpb25zLmRpc3RybywgdGhpcy5vcHRpb25zLmphdmFIYW5kbGVyRGlzdHJvLCB0aGlzLm9wdGlvbnMubW9kZSA9PT0gT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZS5XRUJfU0VSVkVSKTtcbiAgICBpZiAocmVjaXBlLmFwcGxpY2F0aW9uU2lnbmFscyAmJiAhcmVzb2x2ZWRTaWduYWxzKHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbikudHJhY2VzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FET1QgKyBBcHBsaWNhdGlvbiBTaWduYWxzIHJlcXVpcmVzIHRyYWNlcyB0byBiZSBlbmFibGVkIGZvciB0aGUgZGVzdGluYXRpb24uJyk7XG4gICAgfVxuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzKSB7XG4gICAgICBmbi5yb2xlPy5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQ2xvdWRXYXRjaExhbWJkYUFwcGxpY2F0aW9uU2lnbmFsc0V4ZWN1dGlvblJvbGVQb2xpY3knKSk7XG4gICAgICBBbm5vdGF0aW9ucy5vZihmbikuYWRkV2FybmluZ1YyKCdAb2RpZ29zL2F3cy1jZGs6YXBwbGljYXRpb25TaWduYWxzJyxcbiAgICAgICAgJ0VuYWJsZSBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgc2VydmljZSBkaXNjb3Zlcnkgb25jZSBpbiB0aGlzIEFXUyBhY2NvdW50IGFuZCByZWdpb24uIEFwcGxpY2F0aW9uIFNpZ25hbHMgYWxzbyBzZW5kcyBBV1Mgc2VydmljZSB0ZWxlbWV0cnkgdGhyb3VnaCB0aGUgTGFtYmRhIGVtYmVkZGVkIGFnZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlPWZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUoJ0Vudmlyb25tZW50LlZhcmlhYmxlcy5PRElHT1NfTUFOQUdFRCcpO1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZSgnRW52aXJvbm1lbnQuVmFyaWFibGVzLk9ESUdPU19JQUMnKTtcbiAgICB0aGlzLmluc3RydW1lbnRlZC5hZGQoa2V5KTtcblxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IGZuLmFyY2hpdGVjdHVyZS5uYW1lO1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5vcHRpb25zLmxheWVyVmVyc2lvbiA/PyB0aGlzLnJlc29sdmVyLnJlc29sdmUocmVjaXBlLmFydGlmYWN0ID8/IGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xuICAgIGNvbnN0IGNvbGxlY3RvckxheWVyID0gcmVjaXBlLmFydGlmYWN0ID8gKHRoaXMub3B0aW9ucy5jb2xsZWN0b3JMYXllclZlcnNpb24gPz8gdGhpcy5yZXNvbHZlci5yZXNvbHZlKCdhZG90LWNvbGxlY3RvcicsIGFyY2hpdGVjdHVyZSkpIDogdW5kZWZpbmVkO1xuICAgIGZuLmFkZExheWVycyguLi4oY29sbGVjdG9yTGF5ZXIgPyBbbGF5ZXIsIGNvbGxlY3RvckxheWVyXSA6IFtsYXllcl0pKTtcblxuICAgIC8vIFRoZSBBUk4sIG5vdCB0aGUgY29uc3RydWN0OiB0aGUgbWFya2VyIGhhcyB0byBuYW1lIHRoZSBleGFjdCBsYXllciB2ZXJzaW9uIHRoZSBmdW5jdGlvbiBjYXJyaWVzLCBhbmRcbiAgICAvLyBpbiBJTl9BQ0NPVU5UIG1vZGUgdGhhdCBpcyBhIG5lc3RlZC1zdGFjayBvdXRwdXQgcmVmZXJlbmNlIHJlc29sdmVkIGF0IGRlcGxveSB0aW1lLlxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmVudmlyb25tZW50Rm9yKGZuLCBsYW5ndWFnZSwgbGF5ZXIubGF5ZXJWZXJzaW9uQXJuLCBjb2xsZWN0b3JMYXllcj8ubGF5ZXJWZXJzaW9uQXJuKSkpIHtcbiAgICAgIGZuLmFkZEVudmlyb25tZW50KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogSW5zdHJ1bWVudHMgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGxpc3QuICovXG4gIHB1YmxpYyBpbnN0cnVtZW50QWxsKGZ1bmN0aW9uczogbGFtYmRhLkZ1bmN0aW9uW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgICAgdGhpcy5pbnN0cnVtZW50KGZuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGFwcGxpZWQgdG8gb25lIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBNaXJyb3JzIGBhcHBseUhhbmRsZXJFbnZgIC8gYGFwcGx5V2ViU2VydmVyRW52YCBpbiB0aGUgY29ubmVjdG9yLCBpbmNsdWRpbmcgd2hhdCBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAqIHNldDogYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgc3RheXMgdW5zZXQgc28gdGhlIFNESyBrZWVwcyBleHBvcnRpbmcgdG8gdGhlIGluLUxhbWJkYSBjb2xsZWN0b3JcbiAgICogb24gbG9jYWxob3N0IHJhdGhlciB0aGFuIGJsb2NraW5nIHRoZSBpbnZvY2F0aW9uIG9uIHRoZSByZW1vdGUgZGVzdGluYXRpb24sIGFuZCBldmVyeSBzaWduYWwgZXhwb3J0ZXIgaXMgc2VsZWN0ZWQgZXhwbGljaXRseS5cbiAgICovXG4gIHByaXZhdGUgZW52aXJvbm1lbnRGb3IoZm46IGxhbWJkYS5GdW5jdGlvbiwgbGFuZ3VhZ2U6IHN0cmluZywgbGF5ZXJBcm46IHN0cmluZywgY29sbGVjdG9yTGF5ZXJBcm4/OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCB7IGRlc3RpbmF0aW9uLCBtb2RlLCBkZWJ1Zywgc2VydmljZU5hbWUsIGphdmFIYW5kbGVyRGlzdHJvLCBkaXN0cm8sIGV4aXN0aW5nTG9hZGVyVmFsdWUgfSA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB3ZWJTZXJ2ZXIgPSBtb2RlID09PSBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLldFQl9TRVJWRVI7XG5cbiAgICBjb25zdCByZWNpcGUgPSBkaXN0cmlidXRpb25SZWNpcGUobGFuZ3VhZ2UsIGRpc3RybywgZm4ucnVudGltZS5uYW1lKTtcbiAgICBjb25zdCBzaWduYWxzID0gcmVzb2x2ZWRTaWduYWxzKGRlc3RpbmF0aW9uKTtcbiAgICBjb25zdCByZXNvdXJjZSA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgICBjb25zdCBjdXJyZW50ID0gU3RhY2sub2YoZm4pLnJlc29sdmUocmVzb3VyY2UuZW52aXJvbm1lbnQpIGFzIGxhbWJkYS5DZm5GdW5jdGlvbi5FbnZpcm9ubWVudFByb3BlcnR5IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9yaWdpbmFsV3JhcHBlciA9IChjdXJyZW50Py52YXJpYWJsZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCk/LkFXU19MQU1CREFfRVhFQ19XUkFQUEVSID8/ICcnO1xuICAgIGNvbnN0IGV4ZWNXcmFwcGVyID0gd2ViU2VydmVyID8gJy9vcHQvb2RpZ29zLXdlYnNlcnZlcicgOiBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCBkaXN0cm8sIGphdmFIYW5kbGVyRGlzdHJvLCBmYWxzZSk7XG4gICAgY29uc3QgZnVuY3Rpb25Mb2dzID0gc2lnbmFscy5sb2dzICYmICF3ZWJTZXJ2ZXIgJiYgKGxhbmd1YWdlID09PSAncnVieScgfHwgKGxhbmd1YWdlID09PSAnamF2YScgJiZcbiAgICAgIFsnL29wdC9vdGVsLWhhbmRsZXInLCAnL29wdC9vdGVsLXByb3h5LWhhbmRsZXInLCAnL29wdC9vdGVsLXNxcy1oYW5kbGVyJywgJy9vcHQvb3RlbC1zdHJlYW0taGFuZGxlciddLmluY2x1ZGVzKGV4ZWNXcmFwcGVyKSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHY6IDEsXG4gICAgICBzOiBzZXJ2aWNlTmFtZSA/PyBkZWZhdWx0U2VydmljZU5hbWUoZm4pLFxuICAgICAgdDogKHNpZ25hbHMudHJhY2VzID8gMSA6IDApIHwgKHNpZ25hbHMubWV0cmljcyA/IDIgOiAwKSB8IChzaWduYWxzLmxvZ3MgPyA0IDogMCksXG4gICAgICBlOiBkZXN0aW5hdGlvbi5lbmRwb2ludCA/PyBkZXN0aW5hdGlvbi5odHRwRW5kcG9pbnQsXG4gICAgICAuLi4oZGVzdGluYXRpb24uaHR0cEVuZHBvaW50ID8geyBwOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4oZGVzdGluYXRpb24uZW5kcG9pbnQgJiYgZGVzdGluYXRpb24uaW5zZWN1cmUgPyB7IGk6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGRlc3RpbmF0aW9uLmhlYWRlcnMpLmxlbmd0aCA/IHsgaDogZGVzdGluYXRpb24uaGVhZGVycyB9IDoge30pLFxuICAgICAgLi4uKHJlY2lwZS5hcHBsaWNhdGlvblNpZ25hbHMgPyB7IGE6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihmdW5jdGlvbkxvZ3MgPyB7IGw6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZWJ1ZyAmJiAhd2ViU2VydmVyID8geyBkOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4od2ViU2VydmVyID8geyB3OiBvcmlnaW5hbFdyYXBwZXIgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IGVudjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIFtFTlZfRVhFQ19XUkFQUEVSXTogZXhlY1dyYXBwZXIsXG4gICAgICBbRU5WX0xBTUJEQV9DT05GSUddOiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxuICAgIH07XG4gICAgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6aWFjJywgJ3YxJyk7XG4gICAgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6c2RrLWxheWVyJywgbGF5ZXJBcm4pO1xuICAgIGlmIChjb2xsZWN0b3JMYXllckFybikgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6Y29sbGVjdG9yLWxheWVyJywgY29sbGVjdG9yTGF5ZXJBcm4pO1xuICAgIC8vIEV4cGxpY2l0IGN1c3RvbWVyIGxvYWRlciBvcHRpb25zIHJlbWFpbiBvcmRpbmFyeSBjdXN0b21lciBlbnZpcm9ubWVudCB2YWx1ZXMuXG4gICAgaWYgKHdlYlNlcnZlciAmJiBleGlzdGluZ0xvYWRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGxvYWRlcktleSA9IHsgamF2YTogJ0pBVkFfVE9PTF9PUFRJT05TJywgbm9kZWpzOiAnTk9ERV9PUFRJT05TJywgcHl0aG9uOiAnUFlUSE9OUEFUSCcgfVtsYW5ndWFnZV07XG4gICAgICBpZiAobG9hZGVyS2V5KSBlbnZbbG9hZGVyS2V5XSA9IGV4aXN0aW5nTG9hZGVyVmFsdWU7XG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PT0gJ3J1YnknICYmIHNpZ25hbHMubWV0cmljcykge1xuICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnJ1YnlTaWduYWxzVW5zdXBwb3J0ZWQnLFxuICAgICAgICAnVGhlIGJ1bmRsZWQgUnVieSBMYW1iZGEgU0RLIGNhbm5vdCBnZW5lcmF0ZSBPVExQIG1ldHJpY3MuIEZ1bmN0aW9uIHN0ZG91dC9zdGRlcnIgbG9ncyBhcmUgY29sbGVjdGVkIGJ5IHRoZSBMYW1iZGEgY29sbGVjdG9yIHdoZW4gbG9ncyBhcmUgc2VsZWN0ZWQuJyk7XG4gICAgfVxuICAgIGlmIChkZXN0aW5hdGlvbi5wcm9maWxlcykge1xuICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnByb2ZpbGVzVW5zdXBwb3J0ZWQnLFxuICAgICAgICAnVGhlIGJ1bmRsZWQgTGFtYmRhIGxhbmd1YWdlIGFnZW50cyBkbyBub3QgZ2VuZXJhdGUgT1RMUCBwcm9maWxlcy4gT3RoZXIgc2VsZWN0ZWQgc2lnbmFscyByZW1haW4gZW5hYmxlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudjtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3RQcm9wcyBleHRlbmRzIE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnMge31cblxuLyoqXG4gKiBBcHBsaWVzIE9kaWdvcyBpbnN0cnVtZW50YXRpb24gdG8gZXZlcnkgYGxhbWJkYS5GdW5jdGlvbmAgaW4gYSBzY29wZS5cbiAqXG4gKiBgYGB0c1xuICogQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3Qoc3RhY2ssIHtcbiAqICAgZGVzdGluYXRpb246IHsgZW5kcG9pbnQ6ICdvdGxwLmV4YW1wbGUuY29tOjQzMTcnIH0sXG4gKiB9KSk7XG4gKiBgYGBcbiAqXG4gKiBgc2tpcFVuc3VwcG9ydGVkUnVudGltZXNgIGRlZmF1bHRzIHRvIGB0cnVlYCBoZXJlLCB1bmxpa2UgdGhlIGNvbnN0cnVjdDogYW4gYXNwZWN0IHZpc2l0cyBldmVyeSBmdW5jdGlvblxuICogaW4gdGhlIHNjb3BlLCBpbmNsdWRpbmcgb25lcyB3aG9zZSBydW50aW1lIGhhcyBubyBPcGVuVGVsZW1ldHJ5IGxheWVyLCBhbmQgZmFpbGluZyB0aGUgd2hvbGUgc3ludGhcbiAqIGJlY2F1c2UgYSBzdGFjayBoYXBwZW5zIHRvIGNvbnRhaW4gb25lIEdvIGZ1bmN0aW9uIGlzIG5vdCB1c2VmdWwuIEVhY2ggc2tpcCBpcyByZXBvcnRlZCBhcyBhIHN5bnRoXG4gKiB3YXJuaW5nLCBzbyBpdCBpcyB2aXNpYmxlIHJhdGhlciB0aGFuIHNpbGVudC5cbiAqXG4gKiBUaGUgYXNwZWN0IGluc3RydW1lbnRzIHdoYXQgZXhpc3RzIGluIHRoZSB0cmVlIHdoZW4gaXQgcnVucy4gQSBmdW5jdGlvbiBhZGRlZCBieSBhIGxhdGVyIGFzcGVjdCBpcyBub3RcbiAqIHZpc2l0ZWQ7IHVzZSB0aGUgY29uc3RydWN0IGRpcmVjdGx5IGZvciB0aG9zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RydW1lbnRhdGlvbjogT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2NvcGUgd2hlcmUgdGhlIHNoYXJlZCBsYXllciBjb25zdHJ1Y3RzIGFyZSBjcmVhdGVkLiBVc3VhbGx5IHRoZSBzYW1lIHNjb3BlIHRoZSBhc3BlY3QgaXNcbiAgICogYXBwbGllZCB0by4gSXQgaXMgYSBzZXBhcmF0ZSBhcmd1bWVudCBmcm9tIHRoZSB2aXNpdGVkIG5vZGVzIGJlY2F1c2UgdGhlIGxheWVyIChhbmQsIGluIGBJTl9BQ0NPVU5UYFxuICAgKiBtb2RlLCB0aGUgbmVzdGVkIFNBUiBhcHBsaWNhdGlvbikgaXMgY3JlYXRlZCBvbmNlIGFuZCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24gdGhlIGFzcGVjdCB2aXNpdHMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBwcm9wczogT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0UHJvcHMpIHtcbiAgICB0aGlzLmluc3RydW1lbnRhdGlvbiA9IG5ldyBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb24oc2NvcGUsICdPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3QnLCB7XG4gICAgICBza2lwVW5zdXBwb3J0ZWRSdW50aW1lczogdHJ1ZSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGxhbWJkYS5GdW5jdGlvbikge1xuICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb24uaW5zdHJ1bWVudChub2RlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
264
|
+
OdigosInstrumentationAspect[_b] = { fqn: "@odigos/aws-cdk.OdigosInstrumentationAspect", version: "0.0.20" };
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1RTtBQUN2RSxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLDJDQUFtRDtBQUNuRCx5REFHNEI7QUFDNUIscURBQXVEO0FBQ3ZELHVDQUF5RjtBQUN6RixtQ0FLaUI7QUFFakIsMkVBQTJFO0FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7QUFDbkQsa0VBQWtFO0FBQ2xFLDhGQUE4RjtBQUM5RixNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsa0JBQWtCLENBQUMsRUFBbUI7SUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUE4QyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBd0hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFLeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUMvRSxLQUFLLENBQUMsS0FBSyxF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SUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsS0FBdUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtZQUMzRix1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxJQUFJLFlBQVksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztBQW5CSCxrRUFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9ucywgSUFzcGVjdCwgU3RhY2ssIFRva2VuLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICByZXNvbHZlZFNpZ25hbHMsXG4gIHJlbmRlckNvbGxlY3RvckNvbmZpZyxcbn0gZnJvbSAnLi9jb2xsZWN0b3ItY29uZmlnJztcbmltcG9ydCB7IE9kaWdvc0xheWVyUmVzb2x2ZXIgfSBmcm9tICcuL2xheWVyLXJlc29sdmVyJztcbmltcG9ydCB7IGRpc3RyaWJ1dGlvblJlY2lwZSwgZGlzdHJpYnV0aW9uV3JhcHBlciwgbGFuZ3VhZ2VGcm9tUnVudGltZSB9IGZyb20gJy4vcnVudGltZSc7XG5pbXBvcnQge1xuICBPZGlnb3NEZXN0aW5hdGlvbixcbiAgT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZSxcbiAgT2RpZ29zSmF2YUhhbmRsZXJEaXN0cm8sXG4gIE9kaWdvc0xheWVyU291cmNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqIGBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUmAg4oCUIHRoZSBsYXllcidzIGVudHJ5IHBvaW50IGluIGhhbmRsZXIgbW9kZS4gKi9cbmNvbnN0IEVOVl9FWEVDX1dSQVBQRVIgPSAnQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVInO1xuLyoqIFNlcnZpY2UgbmFtZSByZXBvcnRlZCBvbiBldmVyeSBzcGFuLCBtZXRyaWMgYW5kIGxvZyByZWNvcmQuICovXG4vKiogQ29tcGFjdCBTREsgYW5kIGRlc3RpbmF0aW9uIHNldHRpbmdzOyBhbGwgYXR0cmlidXRpb24gbWFya2VycyBhcmUgTGFtYmRhIHJlc291cmNlIHRhZ3MuICovXG5jb25zdCBFTlZfTEFNQkRBX0NPTkZJRyA9ICdPRElHT1NfTEFNQkRBX0NPTkZJRyc7XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgYSBmdW5jdGlvbiByZXBvcnRzIGFzLCB3aGVuIHRoZSBjYWxsZXIgaGFzIG5vdCBuYW1lZCBvbmUuXG4gKlxuICogUkVBRCBGUk9NIFRIRSBMMSwgTk9UIEZST00gYGZuLmZ1bmN0aW9uTmFtZWAuIFRoZSBMMiBwcm9wZXJ0eSBpcyBhIGNyb3NzLWVudmlyb25tZW50LWF3YXJlIHRva2VuIHRoYXRcbiAqIHJlc29sdmVzIHRvIGEgYFJlZmAgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiBldmVuIHdoZW4gdGhlIHN0YWNrIHNldCBgZnVuY3Rpb25OYW1lYCBleHBsaWNpdGx5IOKAlCBzbyB0aGVcbiAqIG9idmlvdXMgYFN0YWNrLm9mKGZuKS5yZXNvbHZlKGZuLmZ1bmN0aW9uTmFtZSlgIG5ldmVyIHlpZWxkcyBhIGxpdGVyYWwsIGFuZCBldmVyeSBmdW5jdGlvbiBzaWxlbnRseSBmZWxsXG4gKiBiYWNrIHRvIGl0cyBjb25zdHJ1Y3QgaWQuIGBDZm5GdW5jdGlvbi5mdW5jdGlvbk5hbWVgIGlzIHRoZSByYXcgdGVtcGxhdGUgdmFsdWU6IHRoZSBsaXRlcmFsIHRoZSBzdGFja1xuICogcGFzc2VkLCBvciB1bmRlZmluZWQgd2hlbiBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgdGhlIG5hbWUuXG4gKlxuICogV2h5IHRoZSBmYWxsYmFjayBpcyB0aGUgY29uc3RydWN0IGlkIHJhdGhlciB0aGFuIHRoZSBnZW5lcmF0ZWQgbmFtZTogYSBnZW5lcmF0ZWQgbmFtZSBpcyBhIGBSZWZgIHRvIHRoZVxuICogZnVuY3Rpb24sIGFuZCBwdXR0aW5nIHRoYXQgaW4gdGhlIGZ1bmN0aW9uJ3Mgb3duIGVudmlyb25tZW50IG1ha2VzIHRoZSByZXNvdXJjZSBkZXBlbmQgb24gaXRzIG93blxuICogY3JlYXRpb24g4oCUIENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHRlbXBsYXRlIHdpdGggYSBkZXBlbmRlbmN5IGN5Y2xlLCBhdCBkZXBsb3kgdGltZS5cbiAqXG4gKiBUaGlzIG1hdHRlcnMgYmV5b25kIGNvc21ldGljcy4gVGhlIGNvbm5lY3RvciBjb21wYXJlcyBgT1RFTF9TRVJWSUNFX05BTUVgIGFnYWluc3QgdGhlIHdvcmtsb2FkJ3MgbmFtZSBpblxuICogT2RpZ29zLCB3aGljaCBpcyB0aGUgcmVhbCBBV1MgZnVuY3Rpb24gbmFtZSwgc28gYSBmdW5jdGlvbiByZXBvcnRpbmcgaXRzIGNvbnN0cnVjdCBpZCBpcyByZXBvcnRlZCBhc1xuICogZHJpZnRlZCBvbiB0aGUgc2VydmljZS1uYW1lIGNvbXBvbmVudC4gTmFtaW5nIHRoZSBmdW5jdGlvbiBpbiB5b3VyIHN0YWNrIGlzIG5vdyBlbm91Z2ggdG8gbGluZSB0aGUgdHdvXG4gKiB1cDsgYSBmdW5jdGlvbiB3aG9zZSBuYW1lIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBzdGlsbCBuZWVkcyBgc2VydmljZU5hbWVgIHBhc3NlZCBleHBsaWNpdGx5LlxuICovXG5mdW5jdGlvbiBkZWZhdWx0U2VydmljZU5hbWUoZm46IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGNmbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSBjZm4gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0YWNrLm9mKGZuKS5yZXNvbHZlKGNmbi5mdW5jdGlvbk5hbWUpO1xuICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJyAmJiByZXNvbHZlZCAhPT0gJycgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChyZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbiAgcmV0dXJuIGZuLm5vZGUuaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBzaGFyZWQgYnkgdGhlIGNvbnN0cnVjdCBhbmQgdGhlIGFzcGVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yIGV4cG9ydHMgdG8uXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogT2RpZ29zRGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBPZGlnb3MgbGF5ZXIgY29tZXMgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQ1xuICAgKi9cbiAgcmVhZG9ubHkgbGF5ZXJTb3VyY2U/OiBPZGlnb3NMYXllclNvdXJjZTtcblxuICAvKipcbiAgICogSGFuZGxlciBtb2RlIG9yIHdlYi1zZXJ2ZXIgKExhbWJkYSBXZWIgQWRhcHRlcikgbW9kZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gYXV0by1kZXRlY3Rpb24sIGFuZCB0aGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gYW4gb21pc3Npb246IGRldGVjdGluZyB0aGUgd2ViIGFkYXB0ZXJcbiAgICogbWVhbnMgaW5zcGVjdGluZyB0aGUgZnVuY3Rpb24ncyBvdGhlciBsYXllcnMsIHdoaWNoIGF0IHN5bnRoIHRpbWUgYXJlIGZyZXF1ZW50bHkgdW5yZXNvbHZlZCB0b2tlbnMuXG4gICAqIEEgZGV0ZWN0b3IgdGhhdCBpcyByaWdodCBtb3N0IG9mIHRoZSB0aW1lIHdvdWxkIHNpbGVudGx5IGJyZWFrIHRoZSBmdW5jdGlvbnMgaXQgZ290IHdyb25nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLkhBTkRMRVJcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlO1xuXG4gIC8qKlxuICAgKiBDb25uZWN0b3IgR3JhcGhRTCBkaXN0cm8gbmFtZSwgc3VjaCBhcyBqYXZhLWxhbWJkYS1vdGVsLWFnZW50IG9yIGphdmEtbGFtYmRhLW90ZWwtd3JhcHBlci5cbiAgICogQGRlZmF1bHQgLSB0aGUgYnVuZGxlZCBkZWZhdWx0IGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bmN0aW9uJ3MgcnVudGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMZWdhY3kgbGlnaHR3ZWlnaHQgSmF2YSBoYW5kbGVyIGFkYXB0ZXIuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgY29ycmVzcG9uZGluZyBqYXZhLWxhbWJkYS1vdGVsLSotd3JhcHBlciBkaXN0cm8uXG4gICAqL1xuICByZWFkb25seSBqYXZhSGFuZGxlckRpc3Rybz86IE9kaWdvc0phdmFIYW5kbGVyRGlzdHJvO1xuXG4gIC8qKlxuICAgKiBgT1RFTF9TRVJWSUNFX05BTUVgIGZvciBldmVyeSBmdW5jdGlvbiB0aGlzIGluc3RydW1lbnRzLlxuICAgKlxuICAgKiBVc3VhbGx5IHdyb25nIHRvIHNldCB3aGVuIGluc3RydW1lbnRpbmcgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiDigJQgdGhleSB3b3VsZCBhbGwgcmVwb3J0IGFzIHRoZSBzYW1lXG4gICAqIHNlcnZpY2UuXG4gICAqXG4gICAqIExlZnQgdW5zZXQsIGEgZnVuY3Rpb24gcmVwb3J0cyBhcyBpdHMgZXhwbGljaXRseS1zZXQgcGh5c2ljYWwgbmFtZSBpZiBpdCBoYXMgb25lLCBhbmQgb3RoZXJ3aXNlIGFzXG4gICAqIGl0cyBjb25zdHJ1Y3QgaWQuIEl0IGRlbGliZXJhdGVseSBkb2VzIG5vdCBkZWZhdWx0IHRvIHRoZSBnZW5lcmF0ZWQgcGh5c2ljYWwgbmFtZTogdGhhdCB2YWx1ZSBpcyBhXG4gICAqIGBSZWZgIHRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCBhIGZ1bmN0aW9uIHJlZmVyZW5jaW5nIGl0c2VsZiBpbiBpdHMgb3duIGVudmlyb25tZW50IGlzIGFcbiAgICogQ2xvdWRGb3JtYXRpb24gZGVwZW5kZW5jeSBjeWNsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZnVuY3Rpb24ncyBwaHlzaWNhbCBuYW1lIGlmIGV4cGxpY2l0bHkgc2V0LCBvdGhlcndpc2UgaXRzIGNvbnN0cnVjdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJhaXNlIGluLWZ1bmN0aW9uIE9wZW5UZWxlbWV0cnkgdmVyYm9zaXR5IChgT1RFTF9MT0dfTEVWRUw9ZGVidWdgKS5cbiAgICpcbiAgICogVGhlIFNESyBhbmQgY29sbGVjdG9yIGNhbiB0aGVuIGVtaXQgYWRkaXRpb25hbCBPVExQLWV4cG9ydCBkaWFnbm9zdGljcyBpbnRvIHRoZSBmdW5jdGlvbidzIENsb3VkV2F0Y2hcbiAgICogbG9nIGdyb3VwLiBVc2VmdWwgd2hpbGUgd2lyaW5nIHVwIGEgZGVzdGluYXRpb24sIGV4cGVuc2l2ZSB0byBsZWF2ZSBvbi5cbiAgICpcbiAgICogSGFzIG5vIGVmZmVjdCBpbiB3ZWItc2VydmVyIG1vZGUsIG1hdGNoaW5nIHRoZSBjb25uZWN0b3IsIHdoaWNoIG5ldmVyIHNldHMgYSBsb2cgbGV2ZWwgdGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGlzIGxheWVyIGluc3RlYWQgb2YgcmVzb2x2aW5nIG9uZS4gT3ZlcnJpZGVzIGBsYXllclNvdXJjZWAgZW50aXJlbHkuXG4gICAqXG4gICAqIFRoZSBlc2NhcGUgaGF0Y2ggZm9yIGEgbGF5ZXIgbWlycm9yZWQgaW50byBhIHByaXZhdGUgcmVnaXN0cnkgb3IgYW4gaW50ZXJuYWwgYWNjb3VudC4gVGhlIGxheWVyIG11c3RcbiAgICogaGF2ZSB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgT2RpZ29zIG9uZSDigJQgdGhlIGVudmlyb25tZW50IHNldCBoZXJlIGFzc3VtZXMgaXRzIGV4YWN0IHNjcmlwdCBsYXlvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVzb2x2ZWQgZnJvbSBsYXllclNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF5ZXJWZXJzaW9uPzogbGFtYmRhLklMYXllclZlcnNpb247XG5cbiAgLyoqXG4gICAqIEFyY2hpdGVjdHVyZS1tYXRjaGVkIGNvbGxlY3RvciBsYXllciB3aGVuIHN1cHBseWluZyBhIGN1c3RvbSBBRE9UIFNESyBsYXllci5cbiAgICogVXBzdHJlYW0gU0RLIGxheWVycyBhbHJlYWR5IGluY2x1ZGUgdGhlaXIgY29sbGVjdG9yIGFuZCBkbyBub3QgdXNlIHRoaXMgb3B0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHJlc29sdmVkIGZyb20gbGF5ZXJTb3VyY2UgZm9yIEFET1RcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3RvckxheWVyVmVyc2lvbj86IGxhbWJkYS5JTGF5ZXJWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhlIGZ1bmN0aW9uIGFscmVhZHkgbmVlZHMgaW4gaXRzIGxhbmd1YWdlIGxvYWRlciB2YXJpYWJsZSAoYE5PREVfT1BUSU9OU2AsXG4gICAqIGBKQVZBX1RPT0xfT1BUSU9OU2Agb3IgYFBZVEhPTlBBVEhgKSwgd2hpY2ggdGhlIE9kaWdvcyBsb2FkZXIgaXMgam9pbmVkIHRvIHJhdGhlciB0aGFuIHJlcGxhY2luZy5cbiAgICpcbiAgICogT25seSB1c2VkIGluIHdlYi1zZXJ2ZXIgbW9kZS4gVGhlIGxhdW5jaGVyIHByZXNlcnZlcyB0aGUgZnVuY3Rpb24ncyBleGlzdGluZyBsb2FkZXIgYXQgc3RhcnR1cDtcbiAgICogdGhpcyBvcHRpb25hbCB2YWx1ZSBvdmVycmlkZXMgdGhlIGN1c3RvbWVyJ3Mgc2F2ZWQgbG9hZGVyIHNldHRpbmcgYmVmb3JlIGluc3RydW1lbnRhdGlvbiBpcyBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcmVzZXJ2ZSB0aGUgZnVuY3Rpb24ncyBleGlzdGluZyBsb2FkZXIgdmFyaWFibGVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nTG9hZGVyVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNraXAgZnVuY3Rpb25zIHdob3NlIHJ1bnRpbWUgaGFzIG5vIE9wZW5UZWxlbWV0cnkgTGFtYmRhIGxheWVyIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gICAqXG4gICAqIGBkb3RuZXQqYCBhbmQgYHByb3ZpZGVkLipgIChHbywgY3VzdG9tIHJ1bnRpbWVzKSBoYXZlIG5vIGxhbmd1YWdlIGxheWVyIHVwc3RyZWFtLiBFeHBsaWNpdGx5XG4gICAqIGluc3RydW1lbnRpbmcgb25lIGlzIGEgbWlzdGFrZSB3b3J0aCBmYWlsaW5nIG9uOyBzd2VlcGluZyBhIHdob2xlIHN0YWNrIHdpdGggdGhlIGFzcGVjdCBhbmQgaGl0dGluZ1xuICAgKiBvbmUgaXMgbm90LCB3aGljaCBpcyB3aHkgdGhlIGFzcGVjdCBkZWZhdWx0cyB0aGlzIHRvIGB0cnVlYCBhbmQgdGhlIGNvbnN0cnVjdCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFVuc3VwcG9ydGVkUnVudGltZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9ufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb25Qcm9wcyBleHRlbmRzIE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogRnVuY3Rpb25zIHRvIGluc3RydW1lbnQgb24gY29uc3RydWN0aW9uLiBNb3JlIGNhbiBiZSBhZGRlZCB3aXRoIGBpbnN0cnVtZW50KClgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IGxhbWJkYS5GdW5jdGlvbltdO1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRzIEFXUyBMYW1iZGEgZnVuY3Rpb25zIHdpdGggdGhlIE9kaWdvcyBPcGVuVGVsZW1ldHJ5IGxheWVyLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBvZGlnb3MgPSBuZXcgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uKHRoaXMsICdPZGlnb3MnLCB7XG4gKiAgIGRlc3RpbmF0aW9uOiB7IGVuZHBvaW50OiAnb3RscC5leGFtcGxlLmNvbTo0MzE3JyB9LFxuICogICBmdW5jdGlvbnM6IFthcGlGbiwgd29ya2VyRm5dLFxuICogfSk7XG4gKiBvZGlnb3MuaW5zdHJ1bWVudChhbm90aGVyRm4pO1xuICogYGBgXG4gKlxuICogV2hhdCBpdCBkb2VzIHRvIGVhY2ggZnVuY3Rpb246IGF0dGFjaGVzIHRoZSBsYXllciBmb3IgdGhlIGZ1bmN0aW9uJ3MgbGFuZ3VhZ2UgYW5kIGFyY2hpdGVjdHVyZSwgc2V0c1xuICogYEFXU19MQU1CREFfRVhFQ19XUkFQUEVSYCBhbmQgY29tcGFjdCBgT0RJR09TX0xBTUJEQV9DT05GSUdgLiBUaGUgbGF5ZXIgYnVpbGRzIHRoZSBTREsgZW52aXJvbm1lbnQgYW5kXG4gKiBjb2xsZWN0b3IgcGlwZWxpbmVzIGF0IHN0YXJ0dXA7IG93bmVyc2hpcCBhbmQgZXhhY3QgbGF5ZXIgYXR0cmlidXRpb24gYXJlIHJlY29yZGVkIGluIHJlc291cmNlIHRhZ3MuXG4gKlxuICogVGhlIGZ1bmN0aW9uJ3MgU0RLIGV4cG9ydHMgdG8gdGhlIGNvbGxlY3RvciBvbiBsb2NhbGhvc3QsIG5vdCB0byB5b3VyIGRlc3RpbmF0aW9uLiBUaGUgY29sbGVjdG9yXG4gKiBmb3J3YXJkcyBhZnRlciB0aGUgaGFuZGxlciBoYXMgYWxyZWFkeSByZXR1cm5lZCwgc28gYSBzbG93IGRlc3RpbmF0aW9uIGNvc3RzIGJpbGxlZCBkdXJhdGlvbiByYXRoZXJcbiAqIHRoYW4gY2FsbGVyIGxhdGVuY3kuXG4gKlxuICogIyMgRG8gbm90IGFsc28gaW5zdHJ1bWVudCB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgY29ubmVjdG9yXG4gKlxuICogVGhlIE9kaWdvcyBBV1MgY29ubmVjdG9yIGluc3RydW1lbnRzIGxpdmUgZnVuY3Rpb25zIGJ5IG11dGF0aW5nIHRoZW0sIGFuZCByZWNvbmNpbGVzIHRoZW0gYmFjayB0byBpdHNcbiAqIG93biBkZXNpcmVkIHN0YXRlIG9uIGV2ZXJ5IHBhc3MuIEEgZnVuY3Rpb24gaW5zdHJ1bWVudGVkIGhlcmUgYW5kIGFsc28gZW5hYmxlZCBhcyBhIGNvbm5lY3RvciBzb3VyY2VcbiAqIGVuZHMgdXAgb3duZWQgYnkgYm90aDogZWFjaCBgY2RrIGRlcGxveWAgcmVhc3NlcnRzIHRoZSBDREsncyBlbnZpcm9ubWVudCwgZWFjaCByZWNvbmNpbGUgcmVhc3NlcnRzIHRoZVxuICogY29ubmVjdG9yJ3MsIGFuZCBldmVyeSByb3VuZCB0cmlwIHB1Ymxpc2hlcyBhIG5ldyBmdW5jdGlvbiB2ZXJzaW9uLlxuICpcbiAqIENob29zZSBvbmUgcGVyIGZ1bmN0aW9uLiBUaGlzIGNvbnN0cnVjdCB3cml0ZXMgYG9kaWdvczppYWNgIHJlc291cmNlIHRhZ3MgYW5kIG5ldmVyIHRoZSBjb25uZWN0b3IncyBgb2RpZ29zOm1hbmFnZWRgXG4gKiBvd25lcnNoaXAgdGFnLCBzbyBhbiBJYUMtaW5zdHJ1bWVudGVkIGZ1bmN0aW9uIHJlcG9ydHMgYXMgaW5zdHJ1bWVudGVkIGJ1dCBpcyBub3Qgb25lIHRoZSBjb25uZWN0b3JcbiAqIHdpbGwgcm9sbCBiYWNrIOKAlCB0aG91Z2ggaXQgd2lsbCBoYXBwaWx5IHRha2UgaXQgb3ZlciBpZiB5b3UgZW5hYmxlIGl0IGFzIGEgc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVycyA9IG5ldyBNYXA8U3RhY2ssIE9kaWdvc0xheWVyUmVzb2x2ZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdHJ1bWVudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHByb3BzO1xuXG4gICAgLy8gUmVuZGVyZWQgb25jZS4gSXQgZGVwZW5kcyBvbmx5IG9uIHRoZSBkZXN0aW5hdGlvbiwgYW5kIHJlbmRlcmluZyBpdCBwZXIgZnVuY3Rpb24gd291bGQgbWFrZSBhblxuICAgIC8vIGFjY2lkZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBmdW5jdGlvbnMgcG9zc2libGUuXG4gICAgcmVuZGVyQ29sbGVjdG9yQ29uZmlnKHByb3BzLmRlc3RpbmF0aW9uKTtcblxuICAgIC8vIEEgd2FybmluZyByYXRoZXIgdGhhbiBhbiBlcnJvciwgYmVjYXVzZSBhIGNvbGxlY3RvciBDQU4gYmUgcmVhY2hlZCBvdmVyIGdSUEMgb24gYSBub24tc3RhbmRhcmQgcG9ydCDigJRcbiAgICAvLyBidXQgdGhlIG92ZXJ3aGVsbWluZ2x5IGxpa2VsaWVyIHJlYWRpbmcgb2YgYGVuZHBvaW50OiBcImhvc3Q6NDMxOFwiYCBpcyBhbiBPVExQL0hUVFAgZW5kcG9pbnQgcGFzc2VkIHRvXG4gICAgLy8gdGhlIGdSUEMgZXhwb3J0ZXIsIHdoaWNoIGJ1aWxkcywgc3RhcnRzLCBhbmQgdGhlbiBuZXZlciBkZWxpdmVycyBhIGJhdGNoLiBTaWxlbnQgZm9yIHRoZSBjYWxsZXIgd2hvXG4gICAgLy8gbWVhbnQgaXQ7IGxvdWQgZm9yIHRoZSBvbmUgd2hvIGRpZCBub3QuXG4gICAgaWYgKHByb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTgnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlSHR0cEVuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gZW5kcG9pbnQgXCIke3Byb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50fVwiIGlzIG9uIDQzMTgsIHRoZSBPVExQL0hUVFAgcG9ydCwgYnV0IGAgK1xuICAgICAgICAgICdgZW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIGdSUEMgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTcpLiBJZiB0aGF0IGlzIGFuIE9UTFAvSFRUUCBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBodHRwRW5kcG9pbnQ6IFwiaHR0cDovL2hvc3Q6NDMxOFwiYCBpbnN0ZWFkIOKAlCB0aGUgZ1JQQyBleHBvcnRlciB3aWxsIGV4cG9ydCBub3RoaW5nIHRvIGl0LicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZGVzdGluYXRpb24uaHR0cEVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTcnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlR3JwY0VuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gaHR0cEVuZHBvaW50IFwiJHtwcm9wcy5kZXN0aW5hdGlvbi5odHRwRW5kcG9pbnR9XCIgaXMgb24gNDMxNywgdGhlIE9UTFAvZ1JQQyBwb3J0LCBgICtcbiAgICAgICAgICAnYnV0IGBodHRwRW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIEhUVFAgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTgpLiBJZiB0aGF0IGlzIGEgZ1JQQyBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBlbmRwb2ludDogXCJob3N0OjQzMTdcImAgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIHByb3BzLmZ1bmN0aW9ucyA/PyBbXSkge1xuICAgICAgdGhpcy5pbnN0cnVtZW50KGZuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5zdHJ1bWVudHMgb25lIGZ1bmN0aW9uLiBJZGVtcG90ZW50IOKAlCBpbnN0cnVtZW50aW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHR3aWNlIGlzIGEgbm8tb3AgcmF0aGVyIHRoYW4gYVxuICAgKiBkb3VibGVkIGxvYWRlciB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBpbnN0cnVtZW50KGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBmbi5ub2RlLnBhdGg7XG4gICAgaWYgKHRoaXMuaW5zdHJ1bWVudGVkLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZU5hbWUgPSBmbi5ydW50aW1lLm5hbWU7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21SdW50aW1lKHJ1bnRpbWVOYW1lKTtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgYE9kaWdvczogcnVudGltZSBcIiR7cnVudGltZU5hbWV9XCIgaGFzIG5vIE9wZW5UZWxlbWV0cnkgTGFtYmRhIGxheWVyIGAgK1xuICAgICAgICAnKHVwc3RyZWFtIHB1Ymxpc2hlcyBsYXllcnMgZm9yIHB5dGhvbiwgbm9kZWpzLCBqYXZhIGFuZCBydWJ5IG9ubHkpLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBpbnN0cnVtZW50ZWQuJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFVuc3VwcG9ydGVkUnVudGltZXMpIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnVuc3VwcG9ydGVkUnVudGltZScsIGAke21lc3NhZ2V9IFNraXBwaW5nLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gU2V0IHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzOiB0cnVlIHRvIHNraXAgaXQgaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBkaXN0cmlidXRpb25SZWNpcGUobGFuZ3VhZ2UsIHRoaXMub3B0aW9ucy5kaXN0cm8sIHJ1bnRpbWVOYW1lKTtcbiAgICBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCB0aGlzLm9wdGlvbnMuZGlzdHJvLCB0aGlzLm9wdGlvbnMuamF2YUhhbmRsZXJEaXN0cm8sIHRoaXMub3B0aW9ucy5tb2RlID09PSBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLldFQl9TRVJWRVIpO1xuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzICYmICghcmVzb2x2ZWRTaWduYWxzKHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbikudHJhY2VzIHx8ICFyZXNvbHZlZFNpZ25hbHModGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uKS5tZXRyaWNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBRE9UICsgQXBwbGljYXRpb24gU2lnbmFscyByZXF1aXJlcyB0cmFjZXMgYW5kIG1ldHJpY3MgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGRlc3RpbmF0aW9uLicpO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKGZuKTtcbiAgICBsZXQgcmVzb2x2ZXIgPSB0aGlzLnJlc29sdmVycy5nZXQoc3RhY2spO1xuICAgIGlmICghcmVzb2x2ZXIpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5ub2RlLnNjb3Blcy5pbmNsdWRlcyhzdGFjaykgPyB0aGlzIDogbmV3IENvbnN0cnVjdChzdGFjaywgYE9kaWdvc0xheWVycyR7dGhpcy5ub2RlLmFkZHJ9YCk7XG4gICAgICByZXNvbHZlciA9IG5ldyBPZGlnb3NMYXllclJlc29sdmVyKHNjb3BlLCB0aGlzLm9wdGlvbnMubGF5ZXJTb3VyY2UgPz8gT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQyk7XG4gICAgICB0aGlzLnJlc29sdmVycy5zZXQoc3RhY2ssIHJlc29sdmVyKTtcbiAgICB9XG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gZm4uYXJjaGl0ZWN0dXJlLm5hbWU7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLm9wdGlvbnMubGF5ZXJWZXJzaW9uID8/IHJlc29sdmVyLnJlc29sdmUocmVjaXBlLmFydGlmYWN0ID8/IGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xuICAgIGNvbnN0IGNvbGxlY3RvckxheWVyID0gcmVjaXBlLmFydGlmYWN0ID8gKHRoaXMub3B0aW9ucy5jb2xsZWN0b3JMYXllclZlcnNpb24gPz8gcmVzb2x2ZXIucmVzb2x2ZSgnYWRvdC1jb2xsZWN0b3InLCBhcmNoaXRlY3R1cmUpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsYXllcnMgPSBjb2xsZWN0b3JMYXllciA/IFtsYXllciwgY29sbGVjdG9yTGF5ZXJdIDogW2xheWVyXTtcbiAgICBmb3IgKGNvbnN0IGF0dGFjaGVkIG9mIGxheWVycykge1xuICAgICAgY29uc3QgYXJuID0gYXR0YWNoZWQubGF5ZXJWZXJzaW9uQXJuO1xuICAgICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYXJuKSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrLnJlZ2lvbikgJiYgYXJuLnNwbGl0KCc6JylbM10gIT09IHN0YWNrLnJlZ2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9kaWdvczogbGF5ZXIgJHthcm59IGlzIG5vdCBpbiB0aGUgZnVuY3Rpb24ncyByZWdpb24gJHtzdGFjay5yZWdpb259LiBTdXBwbHkgYSBsYXllciBwdWJsaXNoZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgcmVnaW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuZW52aXJvbm1lbnRGb3IoZm4sIGxhbmd1YWdlLCBsYXllci5sYXllclZlcnNpb25Bcm4sIGNvbGxlY3RvckxheWVyPy5sYXllclZlcnNpb25Bcm4pO1xuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzKSB7XG4gICAgICBmbi5yb2xlPy5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQ2xvdWRXYXRjaExhbWJkYUFwcGxpY2F0aW9uU2lnbmFsc0V4ZWN1dGlvblJvbGVQb2xpY3knKSk7XG4gICAgICBBbm5vdGF0aW9ucy5vZihmbikuYWRkV2FybmluZ1YyKCdAb2RpZ29zL2F3cy1jZGs6YXBwbGljYXRpb25TaWduYWxzJyxcbiAgICAgICAgJ0VuYWJsZSBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgc2VydmljZSBkaXNjb3Zlcnkgb25jZSBpbiB0aGlzIEFXUyBhY2NvdW50IGFuZCByZWdpb24uIElmIHRoZSBMYW1iZGEgcm9sZSBpcyBpbXBvcnRlZCBhcyBpbW11dGFibGUsIGF0dGFjaCBDbG91ZFdhdGNoTGFtYmRhQXBwbGljYXRpb25TaWduYWxzRXhlY3V0aW9uUm9sZVBvbGljeSBzZXBhcmF0ZWx5LiBBcHBsaWNhdGlvbiBTaWduYWxzIGFsc28gc2VuZHMgQVdTIHNlcnZpY2UgdGVsZW1ldHJ5IHRocm91Z2ggdGhlIExhbWJkYSBlbWJlZGRlZCBhZ2VudC4nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgcmVzb3VyY2UuYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKCdFbnZpcm9ubWVudC5WYXJpYWJsZXMuT0RJR09TX01BTkFHRUQnKTtcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUoJ0Vudmlyb25tZW50LlZhcmlhYmxlcy5PRElHT1NfSUFDJyk7XG4gICAgZm4uYWRkTGF5ZXJzKC4uLmxheWVycyk7XG5cbiAgICAvLyBUaGUgQVJOLCBub3QgdGhlIGNvbnN0cnVjdDogdGhlIG1hcmtlciBoYXMgdG8gbmFtZSB0aGUgZXhhY3QgbGF5ZXIgdmVyc2lvbiB0aGUgZnVuY3Rpb24gY2FycmllcywgYW5kXG4gICAgLy8gaW4gSU5fQUNDT1VOVCBtb2RlIHRoYXQgaXMgYSBuZXN0ZWQtc3RhY2sgb3V0cHV0IHJlZmVyZW5jZSByZXNvbHZlZCBhdCBkZXBsb3kgdGltZS5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnQpKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaW5zdHJ1bWVudGVkLmFkZChrZXkpO1xuICB9XG5cbiAgLyoqIEluc3RydW1lbnRzIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBsaXN0LiAqL1xuICBwdWJsaWMgaW5zdHJ1bWVudEFsbChmdW5jdGlvbnM6IGxhbWJkYS5GdW5jdGlvbltdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudChmbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBhcHBsaWVkIHRvIG9uZSBmdW5jdGlvbi5cbiAgICpcbiAgICogTWlycm9ycyBgYXBwbHlIYW5kbGVyRW52YCAvIGBhcHBseVdlYlNlcnZlckVudmAgaW4gdGhlIGNvbm5lY3RvciwgaW5jbHVkaW5nIHdoYXQgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgKiBzZXQ6IGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIHN0YXlzIHVuc2V0IHNvIHRoZSBTREsga2VlcHMgZXhwb3J0aW5nIHRvIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yXG4gICAqIG9uIGxvY2FsaG9zdCByYXRoZXIgdGhhbiBibG9ja2luZyB0aGUgaW52b2NhdGlvbiBvbiB0aGUgcmVtb3RlIGRlc3RpbmF0aW9uLCBhbmQgZXZlcnkgc2lnbmFsIGV4cG9ydGVyIGlzIHNlbGVjdGVkIGV4cGxpY2l0bHkuXG4gICAqL1xuICBwcml2YXRlIGVudmlyb25tZW50Rm9yKGZuOiBsYW1iZGEuRnVuY3Rpb24sIGxhbmd1YWdlOiBzdHJpbmcsIGxheWVyQXJuOiBzdHJpbmcsIGNvbGxlY3RvckxheWVyQXJuPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgbW9kZSwgZGVidWcsIHNlcnZpY2VOYW1lLCBqYXZhSGFuZGxlckRpc3RybywgZGlzdHJvLCBleGlzdGluZ0xvYWRlclZhbHVlIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qgd2ViU2VydmVyID0gbW9kZSA9PT0gT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZS5XRUJfU0VSVkVSO1xuXG4gICAgY29uc3QgcmVjaXBlID0gZGlzdHJpYnV0aW9uUmVjaXBlKGxhbmd1YWdlLCBkaXN0cm8sIGZuLnJ1bnRpbWUubmFtZSk7XG4gICAgY29uc3Qgc2lnbmFscyA9IHJlc29sdmVkU2lnbmFscyhkZXN0aW5hdGlvbik7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgY29uc3QgY3VycmVudCA9IFN0YWNrLm9mKGZuKS5yZXNvbHZlKHJlc291cmNlLmVudmlyb25tZW50KSBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb24uRW52aXJvbm1lbnRQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3cmFwcGVyVmFsdWUgPSAoY3VycmVudD8udmFyaWFibGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQpPy5BV1NfTEFNQkRBX0VYRUNfV1JBUFBFUjtcbiAgICBjb25zdCBvcmlnaW5hbFdyYXBwZXIgPSB3cmFwcGVyVmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogVG9rZW4uYXNTdHJpbmcod3JhcHBlclZhbHVlKTtcbiAgICBpZiAod2ViU2VydmVyICYmIG9yaWdpbmFsV3JhcHBlciA9PT0gJy9vcHQvb2RpZ29zLXdlYnNlcnZlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2RpZ29zOiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgdXNlcyB0aGUgT2RpZ29zIHdlYi1zZXJ2ZXIgd3JhcHBlci4gUmV1c2UgaXRzIG9yaWdpbmFsIGluc3RydW1lbnRhdGlvbiBjb25zdHJ1Y3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IGV4ZWNXcmFwcGVyID0gd2ViU2VydmVyID8gJy9vcHQvb2RpZ29zLXdlYnNlcnZlcicgOiBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCBkaXN0cm8sIGphdmFIYW5kbGVyRGlzdHJvLCBmYWxzZSk7XG4gICAgY29uc3QgZnVuY3Rpb25Mb2dzID0gc2lnbmFscy5sb2dzICYmICF3ZWJTZXJ2ZXIgJiYgKGxhbmd1YWdlID09PSAncnVieScgfHwgKGxhbmd1YWdlID09PSAnamF2YScgJiZcbiAgICAgIFsnL29wdC9vdGVsLWhhbmRsZXInLCAnL29wdC9vdGVsLXByb3h5LWhhbmRsZXInLCAnL29wdC9vdGVsLXNxcy1oYW5kbGVyJywgJy9vcHQvb3RlbC1zdHJlYW0taGFuZGxlciddLmluY2x1ZGVzKGV4ZWNXcmFwcGVyKSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHZlcnNpb246IDIsXG4gICAgICBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSA/PyBkZWZhdWx0U2VydmljZU5hbWUoZm4pLFxuICAgICAgc2lnbmFsczogWyd0cmFjZXMnLCAnbWV0cmljcycsICdsb2dzJ10uZmlsdGVyKHNpZ25hbCA9PiBzaWduYWxzW3NpZ25hbCBhcyBrZXlvZiB0eXBlb2Ygc2lnbmFsc10pLFxuICAgICAgZW5kcG9pbnQ6IGRlc3RpbmF0aW9uLmVuZHBvaW50ID8/IGRlc3RpbmF0aW9uLmh0dHBFbmRwb2ludCxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5odHRwRW5kcG9pbnQgPyB7IGh0dHA6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5lbmRwb2ludCAmJiBkZXN0aW5hdGlvbi5pbnNlY3VyZSA/IHsgaW5zZWN1cmU6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGRlc3RpbmF0aW9uLmhlYWRlcnMpLmxlbmd0aCA/IHsgaGVhZGVyczogZGVzdGluYXRpb24uaGVhZGVycyB9IDoge30pLFxuICAgICAgLi4uKHJlY2lwZS5hcHBsaWNhdGlvblNpZ25hbHMgPyB7IGFwcGxpY2F0aW9uU2lnbmFsczogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKGZ1bmN0aW9uTG9ncyA/IHsgZnVuY3Rpb25Mb2dzOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4oZGVidWcgJiYgIXdlYlNlcnZlciA/IHsgZGVidWc6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLih3ZWJTZXJ2ZXIgPyB7IHdlYldyYXBwZXI6IG9yaWdpbmFsV3JhcHBlciB9IDoge30pLFxuICAgIH07XG4gICAgY29uc3QgZW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgW0VOVl9FWEVDX1dSQVBQRVJdOiBleGVjV3JhcHBlcixcbiAgICAgIFtFTlZfTEFNQkRBX0NPTkZJR106IFN0YWNrLm9mKGZuKS50b0pzb25TdHJpbmcoY29uZmlnKSxcbiAgICB9O1xuICAgIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOmlhYycsICd2MScpO1xuICAgIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOnNkay1sYXllcicsIGxheWVyQXJuKTtcbiAgICBpZiAoY29sbGVjdG9yTGF5ZXJBcm4pIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOmNvbGxlY3Rvci1sYXllcicsIGNvbGxlY3RvckxheWVyQXJuKTtcbiAgICAvLyBFeHBsaWNpdCBjdXN0b21lciBsb2FkZXIgb3B0aW9ucyByZW1haW4gb3JkaW5hcnkgY3VzdG9tZXIgZW52aXJvbm1lbnQgdmFsdWVzLlxuICAgIGlmICh3ZWJTZXJ2ZXIgJiYgZXhpc3RpbmdMb2FkZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsb2FkZXJLZXkgPSB7IGphdmE6ICdKQVZBX1RPT0xfT1BUSU9OUycsIG5vZGVqczogJ05PREVfT1BUSU9OUycsIHB5dGhvbjogJ1BZVEhPTlBBVEgnIH1bbGFuZ3VhZ2VdO1xuICAgICAgaWYgKGxvYWRlcktleSkgZW52W2xvYWRlcktleV0gPSBleGlzdGluZ0xvYWRlclZhbHVlO1xuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT09ICdydWJ5JyAmJiBzaWduYWxzLm1ldHJpY3MpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKGZuKS5hZGRXYXJuaW5nVjIoJ0BvZGlnb3MvYXdzLWNkazpydWJ5U2lnbmFsc1Vuc3VwcG9ydGVkJyxcbiAgICAgICAgJ1RoZSBidW5kbGVkIFJ1YnkgTGFtYmRhIFNESyBjYW5ub3QgZ2VuZXJhdGUgT1RMUCBtZXRyaWNzLiBGdW5jdGlvbiBzdGRvdXQvc3RkZXJyIGxvZ3MgYXJlIGNvbGxlY3RlZCBieSB0aGUgTGFtYmRhIGNvbGxlY3RvciB3aGVuIGxvZ3MgYXJlIHNlbGVjdGVkLicpO1xuICAgIH1cbiAgICBpZiAoZGVzdGluYXRpb24ucHJvZmlsZXMpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKGZuKS5hZGRXYXJuaW5nVjIoJ0BvZGlnb3MvYXdzLWNkazpwcm9maWxlc1Vuc3VwcG9ydGVkJyxcbiAgICAgICAgJ1RoZSBidW5kbGVkIExhbWJkYSBsYW5ndWFnZSBhZ2VudHMgZG8gbm90IGdlbmVyYXRlIE9UTFAgcHJvZmlsZXMuIE90aGVyIHNlbGVjdGVkIHNpZ25hbHMgcmVtYWluIGVuYWJsZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnY7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0UHJvcHMgZXh0ZW5kcyBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zIHt9XG5cbi8qKlxuICogQXBwbGllcyBPZGlnb3MgaW5zdHJ1bWVudGF0aW9uIHRvIGV2ZXJ5IGBsYW1iZGEuRnVuY3Rpb25gIGluIGEgc2NvcGUuXG4gKlxuICogYGBgdHNcbiAqIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0KHN0YWNrLCB7XG4gKiAgIGRlc3RpbmF0aW9uOiB7IGVuZHBvaW50OiAnb3RscC5leGFtcGxlLmNvbTo0MzE3JyB9LFxuICogfSkpO1xuICogYGBgXG4gKlxuICogYHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzYCBkZWZhdWx0cyB0byBgdHJ1ZWAgaGVyZSwgdW5saWtlIHRoZSBjb25zdHJ1Y3Q6IGFuIGFzcGVjdCB2aXNpdHMgZXZlcnkgZnVuY3Rpb25cbiAqIGluIHRoZSBzY29wZSwgaW5jbHVkaW5nIG9uZXMgd2hvc2UgcnVudGltZSBoYXMgbm8gT3BlblRlbGVtZXRyeSBsYXllciwgYW5kIGZhaWxpbmcgdGhlIHdob2xlIHN5bnRoXG4gKiBiZWNhdXNlIGEgc3RhY2sgaGFwcGVucyB0byBjb250YWluIG9uZSBHbyBmdW5jdGlvbiBpcyBub3QgdXNlZnVsLiBFYWNoIHNraXAgaXMgcmVwb3J0ZWQgYXMgYSBzeW50aFxuICogd2FybmluZywgc28gaXQgaXMgdmlzaWJsZSByYXRoZXIgdGhhbiBzaWxlbnQuXG4gKlxuICogVGhlIGFzcGVjdCBpbnN0cnVtZW50cyB3aGF0IGV4aXN0cyBpbiB0aGUgdHJlZSB3aGVuIGl0IHJ1bnMuIEEgZnVuY3Rpb24gYWRkZWQgYnkgYSBsYXRlciBhc3BlY3QgaXMgbm90XG4gKiB2aXNpdGVkOyB1c2UgdGhlIGNvbnN0cnVjdCBkaXJlY3RseSBmb3IgdGhvc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0cnVtZW50YXRpb246IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvbjtcblxuICAvKipcbiAgICogQHBhcmFtIHNjb3BlIHdoZXJlIHRoZSBzaGFyZWQgbGF5ZXIgY29uc3RydWN0cyBhcmUgY3JlYXRlZC4gVXN1YWxseSB0aGUgc2FtZSBzY29wZSB0aGUgYXNwZWN0IGlzXG4gICAqIGFwcGxpZWQgdG8uIEl0IGlzIGEgc2VwYXJhdGUgYXJndW1lbnQgZnJvbSB0aGUgdmlzaXRlZCBub2RlcyBiZWNhdXNlIHRoZSBsYXllciAoYW5kLCBpbiBgSU5fQUNDT1VOVGBcbiAgICogbW9kZSwgdGhlIG5lc3RlZCBTQVIgYXBwbGljYXRpb24pIGlzIGNyZWF0ZWQgb25jZSBhbmQgc2hhcmVkIGJ5IGV2ZXJ5IGZ1bmN0aW9uIHRoZSBhc3BlY3QgdmlzaXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdFByb3BzKSB7XG4gICAgdGhpcy5pbnN0cnVtZW50YXRpb24gPSBuZXcgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uKHNjb3BlLCAnT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0Jywge1xuICAgICAgc2tpcFVuc3VwcG9ydGVkUnVudGltZXM6IHRydWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBsYW1iZGEuRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uLmluc3RydW1lbnQobm9kZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/layer-resolver.js
CHANGED
|
@@ -48,7 +48,7 @@ class OdigosLayerResolver {
|
|
|
48
48
|
if (aws_cdk_lib_1.Token.isUnresolved(region)) {
|
|
49
49
|
throw new Error('Odigos: OdigosLayerSource.ODIGOS_PUBLIC needs a concrete region to look up the layer ARN, but ' +
|
|
50
50
|
'this stack is environment-agnostic. Set `env: { region: "..." }` on the stack, or use ' +
|
|
51
|
-
'OdigosLayerSource.IN_ACCOUNT, which resolves the layer at deploy time
|
|
51
|
+
'OdigosLayerSource.IN_ACCOUNT, which resolves the layer at deploy time in supported commercial AWS regions.');
|
|
52
52
|
}
|
|
53
53
|
const arn = layers_1.LAYER_ARNS[`${region}/${language}/${architecture}`];
|
|
54
54
|
if (!arn) {
|
|
@@ -71,6 +71,10 @@ class OdigosLayerResolver {
|
|
|
71
71
|
* `cdk deploy` of unchanged code pick up a different layer.
|
|
72
72
|
*/
|
|
73
73
|
fromSar(language, architecture) {
|
|
74
|
+
const region = aws_cdk_lib_1.Stack.of(this.scope).region;
|
|
75
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(region) && /^(us-gov-|us-iso|cn-)/.test(region)) {
|
|
76
|
+
throw new Error('Odigos: the public SAR applications are available in the commercial AWS partition only. Supply a compatible layerVersion from this partition instead.');
|
|
77
|
+
}
|
|
74
78
|
const applicationId = layers_1.SAR_APPLICATIONS[`${language}/${architecture}`];
|
|
75
79
|
if (!applicationId) {
|
|
76
80
|
throw new Error(`Odigos: no SAR application published for ${language}/${architecture} ` +
|
|
@@ -115,4 +119,4 @@ function odigosLayerName(language, architecture) {
|
|
|
115
119
|
function functionScopeId(fn) {
|
|
116
120
|
return aws_cdk_lib_1.Names.nodeUniqueId(fn.node);
|
|
117
121
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXItcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdUlBLDBDQUVDO0FBR0QsMENBRUM7QUE5SUQsNkNBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRCwyQ0FBMkM7QUFFM0MsK0NBQXdHO0FBQ3hHLHVDQUF5QztBQUN6QyxtQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCLFlBQ21CLEtBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFKM0IsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBSzlELENBQUM7SUFFRyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsVUFBVTtZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLFFBQWdCLEVBQUUsWUFB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LEVBQUUsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxzR0FBc0c7SUFDOUYsZUFBZSxDQUFDLFFBQWdCLEVBQUUsWUFBb0I7UUFDNUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUEvR0Qsa0RBK0dDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtJQUNwRSxPQUFPLElBQUEsc0JBQVksRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixTQUFnQixlQUFlLENBQUMsRUFBYTtJQUMzQyxPQUFPLG1CQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIHNhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2FtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTEFZRVJfQVJOUywgT0RJR09TX1ZFUlNJT04sIFNBUl9BUFBMSUNBVElPTlMsIFNBUl9TRU1BTlRJQ19WRVJTSU9OIH0gZnJvbSAnLi9nZW5lcmF0ZWQvbGF5ZXJzJztcbmltcG9ydCB7IGxheWVyTmFtZUZvciB9IGZyb20gJy4vcnVudGltZSc7XG5pbXBvcnQgeyBPZGlnb3NMYXllclNvdXJjZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBPZGlnb3MgbGF5ZXIgZm9yIGEgKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpIHRvIGFuIGBJTGF5ZXJWZXJzaW9uYCwgYW5kIGNhY2hlcyBpdCBzbyBOXG4gKiBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kIGFyY2hpdGVjdHVyZSBzaGFyZSBvbmUgbGF5ZXIgY29uc3RydWN0IOKAlCBhbmQsIGluIGBJTl9BQ0NPVU5UYCBtb2RlLFxuICogb25lIG5lc3RlZCBTQVIgYXBwbGljYXRpb24gcmF0aGVyIHRoYW4gTiBjb3BpZXMgb2YgdGhlIHNhbWUgbGF5ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBPZGlnb3NMYXllclJlc29sdmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBsYW1iZGEuSUxheWVyVmVyc2lvbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2U6IE9kaWdvc0xheWVyU291cmNlLFxuICApIHt9XG5cbiAgcHVibGljIHJlc29sdmUobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7bGFuZ3VhZ2V9LyR7YXJjaGl0ZWN0dXJlfWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCBsYXllciA9XG4gICAgICB0aGlzLnNvdXJjZSA9PT0gT2RpZ29zTGF5ZXJTb3VyY2UuSU5fQUNDT1VOVFxuICAgICAgICA/IHRoaXMuZnJvbVNhcihsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKVxuICAgICAgICA6IHRoaXMuZnJvbVB1YmxpY0FybihsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKTtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIGxheWVyKTtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBsYXllciB2ZXJzaW9uIE9kaWdvcyBwdWJsaXNoZWQgaW4gdGhpcyBzdGFjaydzIHJlZ2lvbiwgcmVzb2x2ZWQgZnJvbSB0aGUgdGFibGUgYmFrZWQgaW50b1xuICAgKiB0aGlzIHBhY2thZ2UgYXQgYnVpbGQgdGltZS5cbiAgICpcbiAgICogQSByZWdpb24gd2l0aCBubyBlbnRyeSB0aHJvd3MgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvIGFub3RoZXIgcmVnaW9uJ3MgQVJOLCB3aGljaCB3b3VsZCBub3RcbiAgICogcmVzb2x2ZSwgb3IgdG8gbm8gbGF5ZXIsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBmdW5jdGlvbiByZXBvcnRpbmcgaGVhbHRoeSBhbmQgZXhwb3J0aW5nIG5vdGhpbmcuXG4gICAqL1xuICBwcml2YXRlIGZyb21QdWJsaWNBcm4obGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzLnNjb3BlKTtcbiAgICBjb25zdCByZWdpb24gPSBzdGFjay5yZWdpb247XG5cbiAgICAvLyBBbiBlbnZpcm9ubWVudC1hZ25vc3RpYyBzdGFjayBoYXMgYSB0b2tlbiBmb3IgaXRzIHJlZ2lvbiwgc28gdGhlcmUgaXMgbm8gdGFibGUgbG9va3VwIHRvIGRvLiBUaGlzXG4gICAgLy8gaXMgd29ydGggY2F0Y2hpbmcgZXhwbGljaXRseTogdGhlIGFsdGVybmF0aXZlIG1lc3NhZ2Ugd291bGQgYmUgYWJvdXQgYSByZWdpb24gbGl0ZXJhbGx5IG5hbWVkXG4gICAgLy8gXCIke1Rva2VuW0FXUy5SZWdpb24uNl19XCIsIHdoaWNoIHNlbmRzIHBlb3BsZSBsb29raW5nIGluIHRoZSB3cm9uZyBwbGFjZSBlbnRpcmVseS5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ09kaWdvczogT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQyBuZWVkcyBhIGNvbmNyZXRlIHJlZ2lvbiB0byBsb29rIHVwIHRoZSBsYXllciBBUk4sIGJ1dCAnICtcbiAgICAgICAgICAndGhpcyBzdGFjayBpcyBlbnZpcm9ubWVudC1hZ25vc3RpYy4gU2V0IGBlbnY6IHsgcmVnaW9uOiBcIi4uLlwiIH1gIG9uIHRoZSBzdGFjaywgb3IgdXNlICcgK1xuICAgICAgICAgICdPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5ULCB3aGljaCByZXNvbHZlcyB0aGUgbGF5ZXIgYXQgZGVwbG95IHRpbWUgYW5kIHdvcmtzIGFueXdoZXJlLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFybiA9IExBWUVSX0FSTlNbYCR7cmVnaW9ufS8ke2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX1gXTtcbiAgICBpZiAoIWFybikge1xuICAgICAgY29uc3Qga25vd24gPSBuZXcgU2V0KE9iamVjdC5rZXlzKExBWUVSX0FSTlMpLm1hcCgoaykgPT4gay5zcGxpdCgnLycpWzBdKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPZGlnb3M6IG5vIHB1YmxpYyAke2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX0gbGF5ZXIgcHVibGlzaGVkIGluICR7cmVnaW9ufSBgICtcbiAgICAgICAgICBgKEBvZGlnb3MvYXdzLWNkayAke09ESUdPU19WRVJTSU9OIHx8ICd1bnJlbGVhc2VkJ30pLiBgICtcbiAgICAgICAgICAoa25vd24uc2l6ZSA9PT0gMFxuICAgICAgICAgICAgPyAnVGhpcyBidWlsZCBvZiB0aGUgcGFja2FnZSBoYXMgYW4gZW1wdHkgbGF5ZXIgdGFibGUg4oCUIGl0IHdhcyBidWlsdCBiZWZvcmUgdGhlIGZpcnN0IHJlbGVhc2UuJ1xuICAgICAgICAgICAgOiBgUHVibGlzaGVkIHJlZ2lvbnM6ICR7Wy4uLmtub3duXS5zb3J0KCkuam9pbignLCAnKX0uYCkgK1xuICAgICAgICAgICcgVXNlIE9kaWdvc0xheWVyU291cmNlLklOX0FDQ09VTlQgdG8gZGVwbG95IHRoZSBsYXllciBpbnRvIHlvdXIgb3duIGFjY291bnQgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFtYmRhLkxheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIGBPZGlnb3NMYXllciR7dGhpcy5jb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSl9YCxcbiAgICAgIGFybixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIE9kaWdvcyBTQVIgYXBwbGljYXRpb24gaW50byB0aGlzIGFjY291bnQgYXMgYSBuZXN0ZWQgc3RhY2sgYW5kIGF0dGFjaGVzIHRoZSBsYXllciBpdFxuICAgKiBjcmVhdGVzLlxuICAgKlxuICAgKiBQaW5uaW5nIGBzZW1hbnRpY1ZlcnNpb25gIGlzIHdoYXQgbWFrZXMgdGhpcyByZXByb2R1Y2libGU6IGEgU0FSIGFwcGxpY2F0aW9uIHZlcnNpb24gaXMgaW1tdXRhYmxlLCBzb1xuICAgKiB0aGUgcGlubmVkIHZlcnNpb24gcmVzb2x2ZXMgdG8gdGhlIHNhbWUgbGF5ZXIgYnl0ZXMgZm9yZXZlci4gTGVhdmluZyBpdCB1bnBpbm5lZCB3b3VsZCBsZXQgYSBsYXRlclxuICAgKiBgY2RrIGRlcGxveWAgb2YgdW5jaGFuZ2VkIGNvZGUgcGljayB1cCBhIGRpZmZlcmVudCBsYXllci5cbiAgICovXG4gIHByaXZhdGUgZnJvbVNhcihsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gU0FSX0FQUExJQ0FUSU9OU1tgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YF07XG4gICAgaWYgKCFhcHBsaWNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPZGlnb3M6IG5vIFNBUiBhcHBsaWNhdGlvbiBwdWJsaXNoZWQgZm9yICR7bGFuZ3VhZ2V9LyR7YXJjaGl0ZWN0dXJlfSBgICtcbiAgICAgICAgICBgKEBvZGlnb3MvYXdzLWNkayAke09ESUdPU19WRVJTSU9OIHx8ICd1bnJlbGVhc2VkJ30pLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIVNBUl9TRU1BTlRJQ19WRVJTSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdPZGlnb3M6IHRoaXMgYnVpbGQgb2YgQG9kaWdvcy9hd3MtY2RrIGhhcyBubyBTQVIgc2VtYW50aWMgdmVyc2lvbiBiYWtlZCBpbiwgc28gdGhlIGFwcGxpY2F0aW9uICcgK1xuICAgICAgICAgICdjb3VsZCBvbmx5IGJlIGRlcGxveWVkIHVucGlubmVkLiBVc2UgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENmbkFwcGxpY2F0aW9uIGlzIGEgU0FNIHJlc291cmNlLCBzbyB0aGUgc3RhY2sgbmVlZHMgdGhlIFNlcnZlcmxlc3MgdHJhbnNmb3JtLiBhZGRUcmFuc2Zvcm0gaXNcbiAgICAvLyBpZGVtcG90ZW50LCBzbyBkZWNsYXJpbmcgaXQgaGVyZSBpcyBzYWZlIHdoZXRoZXIgb3Igbm90IHRoZSBhcHAgYWxyZWFkeSB1c2VzIFNBTSBlbHNld2hlcmUuXG4gICAgU3RhY2sub2YodGhpcy5zY29wZSkuYWRkVHJhbnNmb3JtKCdBV1M6OlNlcnZlcmxlc3MtMjAxNi0xMC0zMScpO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5jb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSk7XG4gICAgY29uc3QgYXBwID0gbmV3IHNhbS5DZm5BcHBsaWNhdGlvbih0aGlzLnNjb3BlLCBgT2RpZ29zTGF5ZXJBcHAke3N1ZmZpeH1gLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IFNBUl9TRU1BTlRJQ19WRVJTSU9OLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsYW1iZGEuTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYE9kaWdvc0xheWVyJHtzdWZmaXh9YCxcbiAgICAgIGFwcC5nZXRBdHQoJ091dHB1dHMuTGF5ZXJWZXJzaW9uQXJuJykudG9TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIGBQeXRob25fWDg2NjRgIOKAlCBhIGNvbnN0cnVjdC1pZC1zYWZlIHN1ZmZpeCB0aGF0IGtlZXBzIGlkcyBzdGFibGUgYW5kIHJlYWRhYmxlIGluIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpdGxlZCA9IGxhbmd1YWdlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbGFuZ3VhZ2Uuc2xpY2UoMSk7XG4gICAgcmV0dXJuIGAke3RpdGxlZH0ke2FyY2hpdGVjdHVyZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJycpfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbGF5ZXIgbmFtZSB0aGlzIHBhY2thZ2UgYXR0YWNoZXMsIGV4cG9zZWQgc28gYSBzdGFjayBjYW4gYXNzZXJ0IG9uIGl0IG9yIGJ1aWxkIGFuIGFsbG93bGlzdC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgaWRlbnRpY2FsIHRvIHRoZSBuYW1lIHRoZSBjb25uZWN0b3IgcHVibGlzaGVzIGludG8gYW4gYWNjb3VudFxuICogKGBzdG9yZS5PZGlnb3NMYXllck5hbWVQcmVmaXhgICsgbGFuZ3VhZ2UgKyBcIi1cIiArIGFyY2hpdGVjdHVyZSkuIFRoYXQgaXMgd2hhdCBsZXRzIGEgZnVuY3Rpb25cbiAqIGluc3RydW1lbnRlZCBoZXJlIGFuZCBsYXRlciBlbmFibGVkIGFzIGEgY29ubmVjdG9yIHNvdXJjZSBjb252ZXJnZTogdGhlIGNvbm5lY3RvciBzZWVzIHRoZSBzYW1lIGxheWVyXG4gKiBOQU1FLCBzd2FwcyBpdHMgb3duIHZlcnNpb24gaW4gcmF0aGVyIHRoYW4gYXR0YWNoaW5nIGEgc2Vjb25kIE9wZW5UZWxlbWV0cnkgbGF5ZXIsIGFuZCByZWNvZ25pc2VzIHRoZVxuICogbGF5ZXIgYXMgb25lIGl0IG1heSBtYW5hZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZGlnb3NMYXllck5hbWUobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGF5ZXJOYW1lRm9yKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xufVxuXG4vKiogU3RhYmxlLCBodW1hbi1yZWFkYWJsZSBjb25zdHJ1Y3QgaWQgZnJhZ21lbnQgZm9yIGEgZnVuY3Rpb24uIEV4cG9ydGVkIGZvciB0aGUgYXNwZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uU2NvcGVJZChmbjogQ29uc3RydWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIE5hbWVzLm5vZGVVbmlxdWVJZChmbi5ub2RlKTtcbn1cbiJdfQ==
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXItcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMklBLDBDQUVDO0FBR0QsMENBRUM7QUFsSkQsNkNBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRCwyQ0FBMkM7QUFFM0MsK0NBQXdHO0FBQ3hHLHVDQUF5QztBQUN6QyxtQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCLFlBQ21CLEtBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFKM0IsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBSzlELENBQUM7SUFFRyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsVUFBVTtZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLFFBQWdCLEVBQUUsWUFB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LEVBQUUsaUJBQWlCLE1BQU0sRUFBRSxFQUFFO1lBQ3hFLFFBQVEsRUFBRTtnQkFDUixhQUFhO2dCQUNiLGVBQWUsRUFBRSw2QkFBb0I7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQzVDLElBQUksQ0FBQyxLQUFLLEVBQ1YsY0FBYyxNQUFNLEVBQUUsRUFDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVELHNHQUFzRztJQUM5RixlQUFlLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUM1RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsT0FBTyxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQW5IRCxrREFtSEM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxRQUFnQixFQUFFLFlBQW9CO0lBQ3BFLE9BQU8sSUFBQSxzQkFBWSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsNEZBQTRGO0FBQzVGLFNBQWdCLGVBQWUsQ0FBQyxFQUFhO0lBQzNDLE9BQU8sbUJBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYW1lcywgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgc2FtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBMQVlFUl9BUk5TLCBPRElHT1NfVkVSU0lPTiwgU0FSX0FQUExJQ0FUSU9OUywgU0FSX1NFTUFOVElDX1ZFUlNJT04gfSBmcm9tICcuL2dlbmVyYXRlZC9sYXllcnMnO1xuaW1wb3J0IHsgbGF5ZXJOYW1lRm9yIH0gZnJvbSAnLi9ydW50aW1lJztcbmltcG9ydCB7IE9kaWdvc0xheWVyU291cmNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIE9kaWdvcyBsYXllciBmb3IgYSAobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSkgdG8gYW4gYElMYXllclZlcnNpb25gLCBhbmQgY2FjaGVzIGl0IHNvIE5cbiAqIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBsYW5ndWFnZSBhbmQgYXJjaGl0ZWN0dXJlIHNoYXJlIG9uZSBsYXllciBjb25zdHJ1Y3Qg4oCUIGFuZCwgaW4gYElOX0FDQ09VTlRgIG1vZGUsXG4gKiBvbmUgbmVzdGVkIFNBUiBhcHBsaWNhdGlvbiByYXRoZXIgdGhhbiBOIGNvcGllcyBvZiB0aGUgc2FtZSBsYXllci5cbiAqL1xuZXhwb3J0IGNsYXNzIE9kaWdvc0xheWVyUmVzb2x2ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZTogT2RpZ29zTGF5ZXJTb3VyY2UsXG4gICkge31cblxuICBwdWJsaWMgcmVzb2x2ZShsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YDtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxheWVyID1cbiAgICAgIHRoaXMuc291cmNlID09PSBPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5UXG4gICAgICAgID8gdGhpcy5mcm9tU2FyKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpXG4gICAgICAgIDogdGhpcy5mcm9tUHVibGljQXJuKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgbGF5ZXIpO1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGxheWVyIHZlcnNpb24gT2RpZ29zIHB1Ymxpc2hlZCBpbiB0aGlzIHN0YWNrJ3MgcmVnaW9uLCByZXNvbHZlZCBmcm9tIHRoZSB0YWJsZSBiYWtlZCBpbnRvXG4gICAqIHRoaXMgcGFja2FnZSBhdCBidWlsZCB0aW1lLlxuICAgKlxuICAgKiBBIHJlZ2lvbiB3aXRoIG5vIGVudHJ5IHRocm93cyByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG8gYW5vdGhlciByZWdpb24ncyBBUk4sIHdoaWNoIHdvdWxkIG5vdFxuICAgKiByZXNvbHZlLCBvciB0byBubyBsYXllciwgd2hpY2ggd291bGQgbGVhdmUgdGhlIGZ1bmN0aW9uIHJlcG9ydGluZyBoZWFsdGh5IGFuZCBleHBvcnRpbmcgbm90aGluZy5cbiAgICovXG4gIHByaXZhdGUgZnJvbVB1YmxpY0FybihsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMuc2NvcGUpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLnJlZ2lvbjtcblxuICAgIC8vIEFuIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrIGhhcyBhIHRva2VuIGZvciBpdHMgcmVnaW9uLCBzbyB0aGVyZSBpcyBubyB0YWJsZSBsb29rdXAgdG8gZG8uIFRoaXNcbiAgICAvLyBpcyB3b3J0aCBjYXRjaGluZyBleHBsaWNpdGx5OiB0aGUgYWx0ZXJuYXRpdmUgbWVzc2FnZSB3b3VsZCBiZSBhYm91dCBhIHJlZ2lvbiBsaXRlcmFsbHkgbmFtZWRcbiAgICAvLyBcIiR7VG9rZW5bQVdTLlJlZ2lvbi42XX1cIiwgd2hpY2ggc2VuZHMgcGVvcGxlIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIGVudGlyZWx5LlxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnT2RpZ29zOiBPZGlnb3NMYXllclNvdXJjZS5PRElHT1NfUFVCTElDIG5lZWRzIGEgY29uY3JldGUgcmVnaW9uIHRvIGxvb2sgdXAgdGhlIGxheWVyIEFSTiwgYnV0ICcgK1xuICAgICAgICAgICd0aGlzIHN0YWNrIGlzIGVudmlyb25tZW50LWFnbm9zdGljLiBTZXQgYGVudjogeyByZWdpb246IFwiLi4uXCIgfWAgb24gdGhlIHN0YWNrLCBvciB1c2UgJyArXG4gICAgICAgICAgJ09kaWdvc0xheWVyU291cmNlLklOX0FDQ09VTlQsIHdoaWNoIHJlc29sdmVzIHRoZSBsYXllciBhdCBkZXBsb3kgdGltZSBpbiBzdXBwb3J0ZWQgY29tbWVyY2lhbCBBV1MgcmVnaW9ucy4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcm4gPSBMQVlFUl9BUk5TW2Ake3JlZ2lvbn0vJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YF07XG4gICAgaWYgKCFhcm4pIHtcbiAgICAgIGNvbnN0IGtub3duID0gbmV3IFNldChPYmplY3Qua2V5cyhMQVlFUl9BUk5TKS5tYXAoKGspID0+IGsuc3BsaXQoJy8nKVswXSkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgT2RpZ29zOiBubyBwdWJsaWMgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9IGxheWVyIHB1Ymxpc2hlZCBpbiAke3JlZ2lvbn0gYCArXG4gICAgICAgICAgYChAb2RpZ29zL2F3cy1jZGsgJHtPRElHT1NfVkVSU0lPTiB8fCAndW5yZWxlYXNlZCd9KS4gYCArXG4gICAgICAgICAgKGtub3duLnNpemUgPT09IDBcbiAgICAgICAgICAgID8gJ1RoaXMgYnVpbGQgb2YgdGhlIHBhY2thZ2UgaGFzIGFuIGVtcHR5IGxheWVyIHRhYmxlIOKAlCBpdCB3YXMgYnVpbHQgYmVmb3JlIHRoZSBmaXJzdCByZWxlYXNlLidcbiAgICAgICAgICAgIDogYFB1Ymxpc2hlZCByZWdpb25zOiAke1suLi5rbm93bl0uc29ydCgpLmpvaW4oJywgJyl9LmApICtcbiAgICAgICAgICAnIFVzZSBPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5UIHRvIGRlcGxveSB0aGUgbGF5ZXIgaW50byB5b3VyIG93biBhY2NvdW50IGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbWJkYS5MYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgT2RpZ29zTGF5ZXIke3RoaXMuY29uc3RydWN0U3VmZml4KGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpfWAsXG4gICAgICBhcm4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3lzIHRoZSBPZGlnb3MgU0FSIGFwcGxpY2F0aW9uIGludG8gdGhpcyBhY2NvdW50IGFzIGEgbmVzdGVkIHN0YWNrIGFuZCBhdHRhY2hlcyB0aGUgbGF5ZXIgaXRcbiAgICogY3JlYXRlcy5cbiAgICpcbiAgICogUGlubmluZyBgc2VtYW50aWNWZXJzaW9uYCBpcyB3aGF0IG1ha2VzIHRoaXMgcmVwcm9kdWNpYmxlOiBhIFNBUiBhcHBsaWNhdGlvbiB2ZXJzaW9uIGlzIGltbXV0YWJsZSwgc29cbiAgICogdGhlIHBpbm5lZCB2ZXJzaW9uIHJlc29sdmVzIHRvIHRoZSBzYW1lIGxheWVyIGJ5dGVzIGZvcmV2ZXIuIExlYXZpbmcgaXQgdW5waW5uZWQgd291bGQgbGV0IGEgbGF0ZXJcbiAgICogYGNkayBkZXBsb3lgIG9mIHVuY2hhbmdlZCBjb2RlIHBpY2sgdXAgYSBkaWZmZXJlbnQgbGF5ZXIuXG4gICAqL1xuICBwcml2YXRlIGZyb21TYXIobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcy5zY29wZSkucmVnaW9uO1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikgJiYgL14odXMtZ292LXx1cy1pc298Y24tKS8udGVzdChyZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09kaWdvczogdGhlIHB1YmxpYyBTQVIgYXBwbGljYXRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGNvbW1lcmNpYWwgQVdTIHBhcnRpdGlvbiBvbmx5LiBTdXBwbHkgYSBjb21wYXRpYmxlIGxheWVyVmVyc2lvbiBmcm9tIHRoaXMgcGFydGl0aW9uIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBTQVJfQVBQTElDQVRJT05TW2Ake2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX1gXTtcbiAgICBpZiAoIWFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE9kaWdvczogbm8gU0FSIGFwcGxpY2F0aW9uIHB1Ymxpc2hlZCBmb3IgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9IGAgK1xuICAgICAgICAgIGAoQG9kaWdvcy9hd3MtY2RrICR7T0RJR09TX1ZFUlNJT04gfHwgJ3VucmVsZWFzZWQnfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghU0FSX1NFTUFOVElDX1ZFUlNJT04pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ09kaWdvczogdGhpcyBidWlsZCBvZiBAb2RpZ29zL2F3cy1jZGsgaGFzIG5vIFNBUiBzZW1hbnRpYyB2ZXJzaW9uIGJha2VkIGluLCBzbyB0aGUgYXBwbGljYXRpb24gJyArXG4gICAgICAgICAgJ2NvdWxkIG9ubHkgYmUgZGVwbG95ZWQgdW5waW5uZWQuIFVzZSBhIHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2ZuQXBwbGljYXRpb24gaXMgYSBTQU0gcmVzb3VyY2UsIHNvIHRoZSBzdGFjayBuZWVkcyB0aGUgU2VydmVybGVzcyB0cmFuc2Zvcm0uIGFkZFRyYW5zZm9ybSBpc1xuICAgIC8vIGlkZW1wb3RlbnQsIHNvIGRlY2xhcmluZyBpdCBoZXJlIGlzIHNhZmUgd2hldGhlciBvciBub3QgdGhlIGFwcCBhbHJlYWR5IHVzZXMgU0FNIGVsc2V3aGVyZS5cbiAgICBTdGFjay5vZih0aGlzLnNjb3BlKS5hZGRUcmFuc2Zvcm0oJ0FXUzo6U2VydmVybGVzcy0yMDE2LTEwLTMxJyk7XG5cbiAgICBjb25zdCBzdWZmaXggPSB0aGlzLmNvbnN0cnVjdFN1ZmZpeChsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKTtcbiAgICBjb25zdCBhcHAgPSBuZXcgc2FtLkNmbkFwcGxpY2F0aW9uKHRoaXMuc2NvcGUsIGBPZGlnb3NMYXllckFwcCR7c3VmZml4fWAsIHtcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogU0FSX1NFTUFOVElDX1ZFUlNJT04sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhbWJkYS5MYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgT2RpZ29zTGF5ZXIke3N1ZmZpeH1gLFxuICAgICAgYXBwLmdldEF0dCgnT3V0cHV0cy5MYXllclZlcnNpb25Bcm4nKS50b1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICAvKiogYFB5dGhvbl9YODY2NGAg4oCUIGEgY29uc3RydWN0LWlkLXNhZmUgc3VmZml4IHRoYXQga2VlcHMgaWRzIHN0YWJsZSBhbmQgcmVhZGFibGUgaW4gdGhlIHRlbXBsYXRlLiAqL1xuICBwcml2YXRlIGNvbnN0cnVjdFN1ZmZpeChsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGl0bGVkID0gbGFuZ3VhZ2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsYW5ndWFnZS5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7dGl0bGVkfSR7YXJjaGl0ZWN0dXJlLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJyl9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXllciBuYW1lIHRoaXMgcGFja2FnZSBhdHRhY2hlcywgZXhwb3NlZCBzbyBhIHN0YWNrIGNhbiBhc3NlcnQgb24gaXQgb3IgYnVpbGQgYW4gYWxsb3dsaXN0LlxuICpcbiAqIERlbGliZXJhdGVseSBpZGVudGljYWwgdG8gdGhlIG5hbWUgdGhlIGNvbm5lY3RvciBwdWJsaXNoZXMgaW50byBhbiBhY2NvdW50XG4gKiAoYHN0b3JlLk9kaWdvc0xheWVyTmFtZVByZWZpeGAgKyBsYW5ndWFnZSArIFwiLVwiICsgYXJjaGl0ZWN0dXJlKS4gVGhhdCBpcyB3aGF0IGxldHMgYSBmdW5jdGlvblxuICogaW5zdHJ1bWVudGVkIGhlcmUgYW5kIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGNvbnZlcmdlOiB0aGUgY29ubmVjdG9yIHNlZXMgdGhlIHNhbWUgbGF5ZXJcbiAqIE5BTUUsIHN3YXBzIGl0cyBvd24gdmVyc2lvbiBpbiByYXRoZXIgdGhhbiBhdHRhY2hpbmcgYSBzZWNvbmQgT3BlblRlbGVtZXRyeSBsYXllciwgYW5kIHJlY29nbmlzZXMgdGhlXG4gKiBsYXllciBhcyBvbmUgaXQgbWF5IG1hbmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9kaWdvc0xheWVyTmFtZShsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYXllck5hbWVGb3IobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSk7XG59XG5cbi8qKiBTdGFibGUsIGh1bWFuLXJlYWRhYmxlIGNvbnN0cnVjdCBpZCBmcmFnbWVudCBmb3IgYSBmdW5jdGlvbi4gRXhwb3J0ZWQgZm9yIHRoZSBhc3BlY3QuICovXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25TY29wZUlkKGZuOiBDb25zdHJ1Y3QpOiBzdHJpbmcge1xuICByZXR1cm4gTmFtZXMubm9kZVVuaXF1ZUlkKGZuLm5vZGUpO1xufVxuIl19
|