aws-delivlib 14.6.5 → 14.7.1
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/lib/pipeline.d.ts +7 -2
- package/lib/pipeline.js +8 -6
- package/lib/signing/nuget/sign.sh +2 -2
- package/lib/signing.d.ts +1 -1
- package/lib/signing.js +2 -2
- package/package.json +2 -2
package/lib/pipeline.d.ts
CHANGED
|
@@ -158,6 +158,7 @@ export declare class Pipeline extends Construct {
|
|
|
158
158
|
readonly pipeline: cpipeline.Pipeline;
|
|
159
159
|
private readonly branch;
|
|
160
160
|
private readonly notify?;
|
|
161
|
+
private defaultArtifact;
|
|
161
162
|
private stages;
|
|
162
163
|
private _signingOutput?;
|
|
163
164
|
private readonly concurrency?;
|
|
@@ -274,7 +275,9 @@ export interface AddPublishOptions {
|
|
|
274
275
|
/**
|
|
275
276
|
* The input artifact to use
|
|
276
277
|
*
|
|
277
|
-
* @default
|
|
278
|
+
* @default Signing output artifact when a signing stage is added to the
|
|
279
|
+
* pipeline via `addSigning` or `signNuGetWithSigner`. Otherwise, the default
|
|
280
|
+
* will be the build output artifact.
|
|
278
281
|
*/
|
|
279
282
|
inputArtifact?: cpipeline.Artifact;
|
|
280
283
|
/**
|
|
@@ -307,7 +310,9 @@ export interface AddShellableOptions extends ShellableProps {
|
|
|
307
310
|
/**
|
|
308
311
|
* The input artifact to use
|
|
309
312
|
*
|
|
310
|
-
* @default
|
|
313
|
+
* @default Signing output artifact when a signing stage is added to the
|
|
314
|
+
* pipeline via `addSigning` or `signNuGetWithSigner`. Otherwise, the default
|
|
315
|
+
* will be the build output artifact.
|
|
311
316
|
*/
|
|
312
317
|
inputArtifact?: cpipeline.Artifact;
|
|
313
318
|
}
|
package/lib/pipeline.js
CHANGED
|
@@ -39,7 +39,7 @@ const shellable_1 = require("./shellable");
|
|
|
39
39
|
const signing = __importStar(require("./signing"));
|
|
40
40
|
const util_1 = require("./util");
|
|
41
41
|
const PUBLISH_STAGE_NAME = 'Publish';
|
|
42
|
-
const
|
|
42
|
+
const SIGNING_STAGE_NAME = 'Sign';
|
|
43
43
|
const TEST_STAGE_NAME = 'Test';
|
|
44
44
|
const METRIC_NAMESPACE = 'CDK/Delivlib';
|
|
45
45
|
const FAILURE_METRIC_NAME = 'Failures';
|
|
@@ -84,6 +84,7 @@ class Pipeline extends constructs_1.Construct {
|
|
|
84
84
|
outputs: [buildOutput],
|
|
85
85
|
}));
|
|
86
86
|
this.buildOutput = buildOutput;
|
|
87
|
+
this.defaultArtifact = buildOutput;
|
|
87
88
|
if (props.notificationEmail) {
|
|
88
89
|
this.notify = new aws_cdk_lib_1.aws_sns.Topic(this, 'NotificationsTopic');
|
|
89
90
|
this.notify.addSubscription(new aws_cdk_lib_1.aws_sns_subscriptions.EmailSubscription(props.notificationEmail));
|
|
@@ -123,7 +124,7 @@ class Pipeline extends constructs_1.Construct {
|
|
|
123
124
|
addShellable(stageName, id, options) {
|
|
124
125
|
const stage = this.getOrCreateStage(stageName);
|
|
125
126
|
const sh = new shellable_1.Shellable(this, id, options);
|
|
126
|
-
const action = sh.addToPipeline(stage, options.actionName || `Action${id}`, options.inputArtifact || this.
|
|
127
|
+
const action = sh.addToPipeline(stage, options.actionName || `Action${id}`, options.inputArtifact || this.defaultArtifact, this.determineRunOrderForNewAction(stage));
|
|
127
128
|
if (options.failureNotification) {
|
|
128
129
|
this.addBuildFailureNotification(sh.project, options.failureNotification);
|
|
129
130
|
}
|
|
@@ -152,7 +153,7 @@ class Pipeline extends constructs_1.Construct {
|
|
|
152
153
|
}
|
|
153
154
|
const stage = this.getOrCreateStage(publishStageName);
|
|
154
155
|
publisher.addToPipeline(stage, `${publisher.node.id}Publish`, {
|
|
155
|
-
inputArtifact: options.inputArtifact || this.
|
|
156
|
+
inputArtifact: options.inputArtifact || this.defaultArtifact,
|
|
156
157
|
runOrder: this.determineRunOrderForNewAction(stage),
|
|
157
158
|
});
|
|
158
159
|
}
|
|
@@ -173,12 +174,13 @@ class Pipeline extends constructs_1.Construct {
|
|
|
173
174
|
}
|
|
174
175
|
addSigning(signer, options = {}) {
|
|
175
176
|
var _a;
|
|
176
|
-
const signingStageName = (_a = options.stageName) !== null && _a !== void 0 ? _a :
|
|
177
|
+
const signingStageName = (_a = options.stageName) !== null && _a !== void 0 ? _a : SIGNING_STAGE_NAME;
|
|
177
178
|
const stage = this.getOrCreateStage(signingStageName);
|
|
178
179
|
this._signingOutput = signer.addToPipeline(stage, `${signer.node.id}Sign`, {
|
|
179
|
-
inputArtifact: options.inputArtifact || this.
|
|
180
|
+
inputArtifact: options.inputArtifact || this.defaultArtifact,
|
|
180
181
|
runOrder: this.determineRunOrderForNewAction(stage),
|
|
181
182
|
});
|
|
183
|
+
this.defaultArtifact = this._signingOutput;
|
|
182
184
|
}
|
|
183
185
|
signNuGetWithSigner(options) {
|
|
184
186
|
this.addSigning(new signing.SignNuGetWithSigner(this, 'NuGetSigning', {
|
|
@@ -364,4 +366,4 @@ class Pipeline extends constructs_1.Construct {
|
|
|
364
366
|
}
|
|
365
367
|
}
|
|
366
368
|
exports.Pipeline = Pipeline;
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELG1EQUFxQztBQUNyQyxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7QUFDbkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBZ0NyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9COztRQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBWGQsV0FBTSxHQUF5QyxFQUFHLENBQUM7UUFhekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw4QkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzVELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdC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bnQiOlsiaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHNuc19zdWJzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgQXV0b0J1aWxkLCBBdXRvQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWJ1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL2J1aWxkLWVudic7XG5pbXBvcnQgeyBDYW5hcnksIENhbmFyeVByb3BzIH0gZnJvbSAnLi9jYW5hcnknO1xuaW1wb3J0IHsgQ2hhbmdlQ29udHJvbGxlciB9IGZyb20gJy4vY2hhbmdlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2hpbWVOb3RpZmllciB9IGZyb20gJy4vY2hpbWUtbm90aWZpZXInO1xuaW1wb3J0IHsgUGlwZWxpbmVXYXRjaGVyIH0gZnJvbSAnLi9waXBlbGluZS13YXRjaGVyJztcbmltcG9ydCAqIGFzIHB1Ymxpc2hpbmcgZnJvbSAnLi9wdWJsaXNoaW5nJztcbmltcG9ydCB7IEF1dG9CdW1wLCBBdXRvTWVyZ2VCYWNrLCBBdXRvQnVtcFByb3BzIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QnO1xuaW1wb3J0IHsgQXV0b01lcmdlQmFja1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0L21lcmdlLWJhY2snO1xuaW1wb3J0IHsgSVJlcG8sIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4vcmVwbyc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsYWJsZVByb3BzIH0gZnJvbSAnLi9zaGVsbGFibGUnO1xuaW1wb3J0ICogYXMgc2lnbmluZyBmcm9tICcuL3NpZ25pbmcnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lUnVuT3JkZXIsIGZsYXRNYXAgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBQVUJMSVNIX1NUQUdFX05BTUUgPSAnUHVibGlzaCc7XG5jb25zdCBTSUdJTklOR19TVEFHRV9OQU1FID0gJ1NpZ24nO1xuY29uc3QgVEVTVF9TVEFHRV9OQU1FID0gJ1Rlc3QnO1xuY29uc3QgTUVUUklDX05BTUVTUEFDRSA9ICdDREsvRGVsaXZsaWInO1xuY29uc3QgRkFJTFVSRV9NRVRSSUNfTkFNRSA9ICdGYWlsdXJlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHJlcG9zaXRvcnkgdG8gYnVpbGQgKGUuZy4gR2l0SHViUmVwbykuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBJUmVwbztcblxuICAvKipcbiAgICogQSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwaHlzaWNhbCBuYW1lIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byBidWlsZC5cbiAgICogQGRlZmF1bHQgbWFzdGVyXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRvIHNlbmQgZmFpbHVyZSBub3RpZmljYXRpb25zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVtYWlsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCBmb3IgdGhlIGJ1aWxkcy5cbiAgICpcbiAgICogQGRlZmF1bHQganNpaS9zdXBlcmNoYWluIChzZWUgZG9jcylcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBjYnVpbGQuSUJ1aWxkSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDb2RlQnVpbGQgcHJvamVjdCB0aGF0IHdpbGwgYmUgcGFydCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGAke3BpcGVsaW5lTmFtZX0tQnVpbGRgLCBpZiBgcGlwZWxpbmVOYW1lYCBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQ7IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBidWlsZFByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjb21wdXRlIHRvIHVzZSBmb3IgdGhpcyBidWlsZC5cbiAgICogU2VlIHRoZSB7QGxpbmsgQ29tcHV0ZVR5cGV9IGVudW0gZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRha2VuIGZyb20ge0BsaW5rICNidWlsZEltYWdlI2RlZmF1bHRDb21wdXRlVHlwZX1cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogY2J1aWxkLkNvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBwcm9qZWN0IGJ1aWxkcyBEb2NrZXIgaW1hZ2VzLiBTcGVjaWZ5IHRydWUgdG8gZW5hYmxlXG4gICAqIHJ1bm5pbmcgdGhlIERvY2tlciBkYWVtb24gaW5zaWRlIGEgRG9ja2VyIGNvbnRhaW5lci4gVGhpcyB2YWx1ZSBtdXN0IGJlXG4gICAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhpcyBidWlsZCBwcm9qZWN0IHdpbGwgYmUgdXNlZCB0byBidWlsZCBEb2NrZXJcbiAgICogaW1hZ2VzLCBhbmQgdGhlIHNwZWNpZmllZCBidWlsZCBlbnZpcm9ubWVudCBpbWFnZSBpcyBub3Qgb25lIHByb3ZpZGVkIGJ5XG4gICAqIEFXUyBDb2RlQnVpbGQgd2l0aCBEb2NrZXIgc3VwcG9ydC4gT3RoZXJ3aXNlLCBhbGwgYXNzb2NpYXRlZCBidWlsZHMgdGhhdFxuICAgKiBhdHRlbXB0IHRvIGludGVyYWN0IHdpdGggdGhlIERvY2tlciBkYWVtb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGJ1aWxkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1aWxkc3BlYywgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBidWlsZHNwZWMueW1sIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlLXJ1biB0aGUgcGlwZWxpbmUgYWZ0ZXIgeW91J3ZlIHVwZGF0ZWQgaXQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29uY3VycmVuY3kgbGltaXQgdGVzdCBhbmQgcHVibGlzaCBzdGFnZXMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDIsIHRoZW4gb25seSB0d28gYWN0aW9ucyB3aWxsIGV4ZWN1dGUgY29uY3VycmVudGx5LlxuICAgKiBJZiB0aGlzIHZhbHVlIGlzIDEsIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBoYXZlIGFueSBjb25jdXJyZW50IGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBkcnlSdW4gZm9yIGFsbCBwdWJsaXNoaW5nIHN0ZXBzXG4gICAqXG4gICAqIChDYW4gc3RpbGwgYmUgY2hhbmdlZCB3aGVuIGFkZGluZyBhIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidWlsZCBjb21taXRzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGlzIHJlcG9zaXRvcnksIGluY2x1ZGluZyBQUiBidWlsZHMgb24gZ2l0aHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYXV0by1idWlsZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtICdhdXRvQnVpbGRPcHRpb25zLnB1YmxpY0xvZ3MnIHdpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0LiAnYXV0b0J1aWxkT3B0aW9ucy5idWlsZHNwZWMnIHdpbGwgYmUgY29uZmlndXJlZCB0byBtYXRjaCB3aXRoIHRoZVxuICAgKiAnYnVpbGRTcGVjJyBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9CdWlsZE9wdGlvbnM/OiBBdXRvQnVpbGRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQb3N0IGEgbm90aWZpY2F0aW9uIHRvIHRoZSBnaXZlbiBDaGltZSB3ZWJob29rcyBpZiB0aGUgcGlwZWxpbmUgZmFpbHNcbiAgICogQGRlZmF1bHQgLSBubyBDaGltZSBub3RpZmljYXRpb25zIG9uIHBpcGVsaW5lIGZhaWx1cmVcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYG5vdGlmeU9uRmFpbHVyZSgpYCBpbnN0ZWFkIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpcGVsaW5lTm90aWZpY2F0aW9uLmNoaW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbWVGYWlsdXJlV2ViaG9va3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENoaW1lIG1lc3NhZ2UgdG8gcG9zdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBjaGltZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRpbWVvdXRcbiAgICpcbiAgICogSG93IGxvbmcgdGhlIGJ1aWxkIGNhbiB0YWtlIGF0IG1heGltdW0gKGJlZm9yZSBmYWlsaW5nIHdpdGggYW4gZXJyb3IpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLmhvdXJzKDgpXG4gICAqL1xuICByZWFkb25seSBidWlsZFRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZU5vdGlmaWNhdGlvbkJpbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXBlbGluZU5vdGlmaWNhdGlvbiB7XG4gIGJpbmQocGlwZWxpbmU6IFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIGF1dG8gYnVtcCBmb3IgdGhpcyBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQnVtcE9wdGlvbnMgZXh0ZW5kcyBPbWl0PEF1dG9CdW1wUHJvcHMsICdyZXBvJz4ge1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBkZWxpdmxpYiBDSS9DRCBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGJ1aWxkUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVBbGFybTogY2xvdWR3YXRjaC5BbGFybTtcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkT3V0cHV0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VBcnRpZmFjdDogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBDb2RlQnVpbGQgcHJvamVjdCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0byBidWlsZCBwcm9qZWN0LiB1bmRlZmluZWQgaWYgJ2F1dG9CdWlsZCcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0J1aWxkUHJvamVjdD86IGNidWlsZC5Qcm9qZWN0O1xuXG4gIC8qXG4gICAqIFRoZSB1bmRlcmx5aW5nIENvZGVQaXBlbGluZSBQaXBlbGluZSBvYmplY3QgdGhhdCBtb2RlbHMgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogY3BpcGVsaW5lLlBpcGVsaW5lO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeT86IHNucy5Ub3BpYztcbiAgcHJpdmF0ZSBzdGFnZXM6IHsgW25hbWU6IHN0cmluZ106IGNwaXBlbGluZS5JU3RhZ2UgfSA9IHsgfTtcbiAgcHJpdmF0ZSBfc2lnbmluZ091dHB1dD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZEVudmlyb25tZW50OiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFNwZWM/OiBjYnVpbGQuQnVpbGRTcGVjO1xuICBwcml2YXRlIGZpcnN0UHVibGlzaFN0YWdlTmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gcHJvcHMuY29uY3VycmVuY3k7XG4gICAgdGhpcy5yZXBvID0gcHJvcHMucmVwbztcbiAgICB0aGlzLmRyeVJ1biA9ICEhcHJvcHMuZHJ5UnVuO1xuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBjcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ0J1aWxkUGlwZWxpbmUnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5icmFuY2ggPSBwcm9wcy5icmFuY2ggfHwgJ21hc3Rlcic7XG4gICAgdGhpcy5zb3VyY2VBcnRpZmFjdCA9IHByb3BzLnJlcG8uY3JlYXRlU291cmNlU3RhZ2UodGhpcy5waXBlbGluZSwgdGhpcy5icmFuY2gpO1xuXG4gICAgdGhpcy5idWlsZEVudmlyb25tZW50ID0gY3JlYXRlQnVpbGRFbnZpcm9ubWVudChwcm9wcyk7XG4gICAgdGhpcy5idWlsZFNwZWMgPSBwcm9wcy5idWlsZFNwZWM7XG5cbiAgICBsZXQgYnVpbGRQcm9qZWN0TmFtZSA9IHByb3BzLmJ1aWxkUHJvamVjdE5hbWU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdE5hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5waXBlbGluZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVpbGRQcm9qZWN0TmFtZSA9IGAke3Byb3BzLnBpcGVsaW5lTmFtZX0tQnVpbGRgO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUHJvamVjdCA9IG5ldyBjYnVpbGQuUGlwZWxpbmVQcm9qZWN0KHRoaXMsICdCdWlsZFByb2plY3QnLCB7XG4gICAgICBwcm9qZWN0TmFtZTogYnVpbGRQcm9qZWN0TmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkRW52aXJvbm1lbnQsXG4gICAgICBidWlsZFNwZWM6IHRoaXMuYnVpbGRTcGVjLFxuICAgICAgdGltZW91dDogcHJvcHMuYnVpbGRUaW1lb3V0ID8/IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJvbGUgPSB0aGlzLmJ1aWxkUHJvamVjdC5yb2xlO1xuICAgIHRoaXMuYnVpbGRSb2xlIS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUmVhZE9ubHknKSk7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG5cbiAgICBpZiAocHJvcHMubm90aWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMubm90aWZ5ID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnTm90aWZpY2F0aW9uc1RvcGljJyk7XG4gICAgICB0aGlzLm5vdGlmeS5hZGRTdWJzY3JpcHRpb24obmV3IHNuc19zdWJzLkVtYWlsU3Vic2NyaXB0aW9uKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgZmFpbHVyZSBhbGFybSBmb3IgdGhlIGVudGlyZSBwaXBlbGluZS5cbiAgICB0aGlzLmZhaWx1cmVBbGFybSA9IHRoaXMuYWRkRmFpbHVyZUFsYXJtKHByb3BzLnRpdGxlKTtcblxuICAgIC8vIGVtaXQgYW4gU05TIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGJ1aWxkIGZhaWxzLlxuICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHRoaXMuYnVpbGRQcm9qZWN0LCBgJHtwcm9wcy50aXRsZX0gYnVpbGQgZmFpbGVkYCk7XG5cbiAgICAvLyBBbHNvIGVtaXQgdG8gQ2hpbWUgd2ViaG9va3MgaWYgY29uZmlndXJlZFxuICAgIGlmIChwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcykge1xuICAgICAgbmV3IENoaW1lTm90aWZpZXIodGhpcywgJ0NoaW1lTm90aWZpZXInLCB7XG4gICAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgICBtZXNzYWdlOiBwcm9wcy5jaGltZU1lc3NhZ2UsXG4gICAgICAgIHdlYmhvb2tVcmxzOiBwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hdXRvQnVpbGQpIHtcbiAgICAgIHRoaXMuYXV0b0J1aWxkUHJvamVjdCA9IHRoaXMuYXV0b0J1aWxkKHByb3BzLmF1dG9CdWlsZE9wdGlvbnMpLnByb2plY3Q7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25pbmcgb3V0cHV0IGFydGlmYWN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpZ25pbmdPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdPdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgbm90aWZ5T25GYWlsdXJlKG5vdGlmaWNhdGlvbjogSVBpcGVsaW5lTm90aWZpY2F0aW9uKSB7XG4gICAgbm90aWZpY2F0aW9uLmJpbmQoe1xuICAgICAgcGlwZWxpbmU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFjdGlvbiB0byBydW4gYSBzaGVsbCBzY3JpcHQgdG8gdGhlIHBpcGVsaW5lXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIFNoZWxsYWJsZSBhbmQgdGhlIEFjdGlvbiBhZGRlZCB0byB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgYWRkU2hlbGxhYmxlKHN0YWdlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRTaGVsbGFibGVPcHRpb25zKToge1xuICAgIHNoZWxsYWJsZTogU2hlbGxhYmxlOyBhY3Rpb246IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbjt9IHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWUpO1xuXG4gICAgY29uc3Qgc2ggPSBuZXcgU2hlbGxhYmxlKHRoaXMsIGlkLCBvcHRpb25zKTtcbiAgICBjb25zdCBhY3Rpb24gPSBzaC5hZGRUb1BpcGVsaW5lKFxuICAgICAgc3RhZ2UsXG4gICAgICBvcHRpb25zLmFjdGlvbk5hbWUgfHwgYEFjdGlvbiR7aWR9YCxcbiAgICAgIG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmJ1aWxkT3V0cHV0LFxuICAgICAgdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbikge1xuICAgICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oc2gucHJvamVjdCwgb3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzaGVsbGFibGU6IHNoLCBhY3Rpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXN0KGlkOiBzdHJpbmcsIHByb3BzOiBTaGVsbGFibGVQcm9wcyk6IHtzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb259IHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaGVsbGFibGUoVEVTVF9TVEFHRV9OQU1FLCBpZCwge1xuICAgICAgYWN0aW9uTmFtZTogYFRlc3Qke2lkfWAsXG4gICAgICBmYWlsdXJlTm90aWZpY2F0aW9uOiBgVGVzdCAke2lkfSBmYWlsZWRgLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UvZGlzY292ZXJ5IG1ldGhvZCB0aGF0IGRlZmluZXMgYSBjYW5hcnkgdGVzdCBpbiB5b3VyIGFjY291bnQuXG4gICAqIEBwYXJhbSBpZCB0aGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBjYW5hcnkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZENhbmFyeShpZDogc3RyaW5nLCBwcm9wczogQ2FuYXJ5UHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IENhbmFyeSh0aGlzLCBgQ2FuYXJ5JHtpZH1gLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHVibGlzaChwdWJsaXNoZXI6IElQdWJsaXNoZXIsIG9wdGlvbnM6IEFkZFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gUFVCTElTSF9TVEFHRV9OQU1FO1xuICAgIGlmICghdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUpIHtcbiAgICAgIHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID0gcHVibGlzaFN0YWdlTmFtZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2UocHVibGlzaFN0YWdlTmFtZSk7XG5cbiAgICBwdWJsaXNoZXIuYWRkVG9QaXBlbGluZShzdGFnZSwgYCR7cHVibGlzaGVyLm5vZGUuaWR9UHVibGlzaGAsIHtcbiAgICAgIGlucHV0QXJ0aWZhY3Q6IG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmJ1aWxkT3V0cHV0LFxuICAgICAgcnVuT3JkZXI6IHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgY29udHJvbCBwb2xpY3kgdG8gYmxvY2sgdHJhbnNpdGlvbnMgaW50byB0aGUgcHVibGlzaCBzdGFnZSBkdXJpbmcgY2VydGFpbiB0aW1lIHdpbmRvd3MuXG4gICAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY2hhbmdlIGNvbnRyb2wgcG9saWN5LlxuICAgKi9cbiAgcHVibGljIGFkZENoYW5nZUNvbnRyb2wob3B0aW9uczogQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMgPSB7IH0pOiBDaGFuZ2VDb250cm9sbGVyIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2UgPSB0aGlzLmdldFN0YWdlKHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID8/IFBVQkxJU0hfU1RBR0VfTkFNRSk7XG4gICAgaWYgKCFwdWJsaXNoU3RhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBwaXBlbGluZSBkb2VzIG5vdCBoYXZlIGEgJHtQVUJMSVNIX1NUQUdFX05BTUV9IHN0YWdlIHlldC4gQWRkIG9uZSBmaXJzdC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5nZUNvbnRyb2xsZXIodGhpcywgJ0NoYW5nZUNvbnRyb2xsZXInLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGlwZWxpbmVTdGFnZTogcHVibGlzaFN0YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFNpZ25pbmcoc2lnbmVyOiBzaWduaW5nLklTaWduZXIsIG9wdGlvbnM6IHNpZ25pbmcuQWRkU2lnbmluZ09wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHNpZ25pbmdTdGFnZU5hbWUgPSBvcHRpb25zLnN0YWdlTmFtZSA/PyBTSUdJTklOR19TVEFHRV9OQU1FO1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHNpZ25pbmdTdGFnZU5hbWUpO1xuXG4gICAgdGhpcy5fc2lnbmluZ091dHB1dCA9IHNpZ25lci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtzaWduZXIubm9kZS5pZH1TaWduYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuYnVpbGRPdXRwdXQsXG4gICAgICBydW5PcmRlcjogdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2lnbk51R2V0V2l0aFNpZ25lcihvcHRpb25zOiBzaWduaW5nLlNpZ25OdUdldFdpdGhTaWduZXJQcm9wcyAmIHNpZ25pbmcuQWRkU2lnbmluZ09wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFNpZ25pbmcobmV3IHNpZ25pbmcuU2lnbk51R2V0V2l0aFNpZ25lcih0aGlzLCAnTnVHZXRTaWduaW5nJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnBtKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdCh0aGlzLCAnTnBtJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTWF2ZW5Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3QodGhpcywgJ01hdmVuJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb051R2V0KG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnVHZXRQcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3QodGhpcywgJ051R2V0Jywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlBhZ2VzKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hEb2NzVG9HaXRIdWJQcm9qZWN0KHRoaXMsICdHaXRIdWJQYWdlcycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWIob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9HaXRIdWJQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1Yih0aGlzLCAnR2l0SHViJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1B5UEkob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpUHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpKHRoaXMsICdQeVBJJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1MzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzNQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1MzKHRoaXMsIGlkLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBHb2xhbmcgY29kZSBmcm9tIGBnb2AgZGlyZWN0b3J5IGluIGJ1aWxkIGFydGlmYWN0IHRvIGEgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcHVibGlzaFRvR29sYW5nKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nUHJvcHMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nKHRoaXMsICdHb2xhbmcnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVtcHMgZm9yIHRoZSBzb3VyY2UgcmVwby5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgYXV0byBidW1wIChzZWUgQXV0b0J1bXBPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvQnVtcChvcHRpb25zPzogQXV0b0J1bXBPcHRpb25zKTogQXV0b0J1bXAge1xuICAgIGlmICghV3JpdGFibGVHaXRIdWJSZXBvLmlzV3JpdGFibGVHaXRIdWJSZXBvKHRoaXMucmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZXBvXCIgbXVzdCBiZSBhIFdyaXRhYmxlR2l0SHViUmVwbyBpbiBvcmRlciB0byBlbmFibGUgYXV0by1idW1wJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b0J1bXAgPSBuZXcgQXV0b0J1bXAodGhpcywgJ0F1dG9CdW1wJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhdXRvQnVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBtZXJnZSBiYWNrcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvTWVyZ2VCYWNrKG9wdGlvbnM/OiBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLW1lcmdlLWJhY2snKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZUJhY2sgPSBuZXcgQXV0b01lcmdlQmFjayh0aGlzLCAnTWVyZ2VCYWNrJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zPy5zdGFnZSkge1xuXG4gICAgICBjb25zdCBhZnRlclN0YWdlID0gdGhpcy5nZXRTdGFnZShvcHRpb25zLnN0YWdlLmFmdGVyKTtcblxuICAgICAgaWYgKCFhZnRlclN0YWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ29wdGlvbnMuc3RhZ2UuYWZ0ZXInIG11c3QgYmUgY29uZmlndXJlZCB0byBhbiBleGlzdGluZyBzdGFnZTogJHtvcHRpb25zLnN0YWdlLmFmdGVyfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShvcHRpb25zLnN0YWdlLm5hbWUgPz8gJ01lcmdlQmFjaycsIHsganVzdEFmdGVyOiBhZnRlclN0YWdlIH0pO1xuICAgICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgICBhY3Rpb25OYW1lOiAnQ3JlYXRlTWVyZ2VCYWNrUHVsbFJlcXVlc3QnLFxuICAgICAgICBwcm9qZWN0OiBtZXJnZUJhY2sucHIucHJvamVjdCxcbiAgICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIGJ1aWxkcyBvZiBwdWxsIHJlcXVlc3RzIGluIHRoZSBHaXRodWIgcmVwb3NpdG9yeSBhbmQgcG9zdHMgdGhlXG4gICAqIHJlc3VsdHMgYmFjayBhcyBhIGNvbW1lbnQgd2l0aCBhIHB1YmxpYyBsaW5rIHRvIHRoZSBidWlsZCBsb2dzLlxuICAgKi9cbiAgcHVibGljIGF1dG9CdWlsZChvcHRpb25zOiBBdXRvQnVpbGRPcHRpb25zID0geyB9KTogQXV0b0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IEF1dG9CdWlsZCh0aGlzLCAnQXV0b0J1aWxkJywge1xuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIHJlcG86IHRoaXMucmVwbyxcbiAgICAgIGJ1aWxkU3BlYzogb3B0aW9ucy5idWlsZFNwZWMgfHwgdGhpcy5idWlsZFNwZWMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgdGhhdCB0cmFja3MgcGlwZWxpbmUgZmFpbHVyZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWNzIHRoYXQgdHJhY2sgZmFpbHVyZSBvZiBlYWNoIGFjdGlvbiB3aXRoaW4gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0FjdGlvbkZhaWx1cmVzKG9wdGlvbnM6IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljW10ge1xuICAgIHJldHVybiBmbGF0TWFwKHRoaXMucGlwZWxpbmUuc3RhZ2VzLCBzdGFnZSA9PiBzdGFnZS5hY3Rpb25zLm1hcChhY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgIFBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBBY3Rpb246IGFjdGlvbi5hY3Rpb25Qcm9wZXJ0aWVzLmFjdGlvbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWFudWFsQXBwcm92YWxUb1N0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwcm9wcz86IGNwaXBlbGluZV9hY3Rpb25zLk1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWUpO1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb24ocHJvcHMgPz8ge1xuICAgICAgYWN0aW9uTmFtZTogJ01hbnVhbEFwcHJvdmFsQWN0aW9uJyxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZhaWx1cmVBbGFybSh0aXRsZT86IHN0cmluZyk6IGNsb3Vkd2F0Y2guQWxhcm0ge1xuICAgIHJldHVybiBuZXcgUGlwZWxpbmVXYXRjaGVyKHRoaXMsICdQaXBlbGluZVdhdGNoZXInLCB7XG4gICAgICBwaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIG1ldHJpY05hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgIGZhaWx1cmVNZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgdGl0bGUsXG4gICAgfSkuYWxhcm07XG4gIH1cblxuICBwcml2YXRlIGFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbihidWlsZFByb2plY3Q6IGNidWlsZC5JUHJvamVjdCwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm5vdGlmeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkUHJvamVjdC5vbkJ1aWxkRmFpbGVkKCdPbkJ1aWxkRmFpbGVkJykuYWRkVGFyZ2V0KG5ldyBldmVudHNfdGFyZ2V0cy5TbnNUb3BpYyh0aGlzLm5vdGlmeSwge1xuICAgICAgbWVzc2FnZTogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tVGV4dChtZXNzYWdlKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgdGhlIHN0YWdlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RhZ2UgZG9lc24ndCBleGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdGFnZShzdGFnZU5hbWU6IHN0cmluZyk6IGNwaXBlbGluZS5JU3RhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YWdlc1tzdGFnZU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwbGFjZW1lbnQ/OiBjcGlwZWxpbmUuU3RhZ2VQbGFjZW1lbnQpOiBjcGlwZWxpbmUuSVN0YWdlIHtcbiAgICAvLyBvdGhlcndpc2UsIGdyb3VwIGFsbCBhY3Rpb25zIHNvIHRoZXkgcnVuIGNvbmN1cnJlbnRseS5cbiAgICBsZXQgc3RhZ2UgPSB0aGlzLmdldFN0YWdlKHN0YWdlTmFtZSk7XG4gICAgaWYgKCFzdGFnZSkge1xuICAgICAgc3RhZ2UgPSB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV0gPSBzdGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZTogY3BpcGVsaW5lLklTdGFnZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRldGVybWluZVJ1bk9yZGVyKHN0YWdlLmFjdGlvbnMubGVuZ3RoLCB0aGlzLmNvbmN1cnJlbmN5KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQdWJsaXNoZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgYWRkVG9QaXBlbGluZShzdGFnZTogY3BpcGVsaW5lLklTdGFnZSwgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkVG9QaXBlbGluZU9wdGlvbnMpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFRvUGlwZWxpbmVPcHRpb25zIHtcbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcnVuT3JkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBpbiB3aGljaCB0aGUgQ2hhbmdlQ29udHJvbCBpQ2FsIGRvY3VtZW50IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIG5ldyBidWNrZXQgd2lsbCBiZSBwcm92aXNpb25lZC5cbiAgICovXG4gIGNoYW5nZUNvbnRyb2xCdWNrZXQ/OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IGluIHdoaWNoIHRoZSBpQ2FsIGZpbGxlIHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnY2hhbmdlLWNvbnRyb2wuaWNhbCdcbiAgICovXG4gIGNoYW5nZUNvbnRyb2xPYmplY3RLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHRvIHJ1biB0aGUgY2hhbmdlIGNvbnRyb2xsZXIgb25cbiAgICpcbiAgICogQGRlZmF1bHQgcmF0ZSgxNSBtaW51dGVzKVxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhcnRpZmFjdCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgQnVpbGQgb3V0cHV0IGFydGlmYWN0XG4gICAqL1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIHRvIGFkZCBwdWJsaXNoaW5nIGpvYiB0b1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHN0YWdlIG5hbWUgYCdQdWJsaXNoJ2AsIGJ1dCBpZiB5b3Ugd2FudCB0b1xuICAgKiBzZXBhcmF0ZSBvdXQgdGhlIHB1Ymxpc2hpbmcgYWN0aW9ucyBpbnRvIGRpZmZlcmVudCBzdGFnZXMgKGluIG9yZGVyIHRvXG4gICAqIGJsb2NrL3VuYmxvY2sgdGhlbSBzZXBhcmF0ZWx5IGZvciBleGFtcGxlKSB5b3UgY2FuIGNoYW5nZSB0aGlzLlxuICAgKlxuICAgKiBTdGFnZXMgYXBwZWFyIGluIHRoZSBwaXBlbGluZSBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmVmZXJlbmNlZCBmb3JcbiAgICogdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUHVibGlzaFwiXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU2hlbGxhYmxlT3B0aW9ucyBleHRlbmRzIFNoZWxsYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0cmluZyB0byB1c2UgYXMgYWN0aW9uIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgSWRcbiAgICovXG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gdXNlIGFzIGZhaWx1cmUgbm90aWZpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgZmFpbHVyZU5vdGlmaWNhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG59XG4iXX0=
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELG1EQUFxQztBQUNyQyxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFDbEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBaUNyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9COztRQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBWGQsV0FBTSxHQUF5QyxFQUFHLENBQUM7UUFhekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw4QkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzVELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0I7U0FDL0csQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUEsa0NBQXNCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBRWpDLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQzlDLElBQUksZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ3RFLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDJCQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDbkUsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsT0FBTyxFQUFFLE1BQUEsS0FBSyxDQUFDLFlBQVksbUNBQUksc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hELHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBVSxDQUFDLGdCQUFnQixDQUFDLHFCQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDhDQUE4QyxDQUFDLENBQUMsQ0FBQztRQUU3SCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSw4QkFBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBaUIsQ0FBQyxlQUFlLENBQUM7WUFDekQsVUFBVSxFQUFFLE9BQU87WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYztZQUMxQixPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUVuQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUkscUJBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxtQ0FBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7U0FDdEY7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0RCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FBQztRQUVuRiw0Q0FBNEM7UUFDNUMsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUU7WUFDOUIsSUFBSSw4QkFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjthQUN4QyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTSxlQUFlLENBQUMsWUFBbUM7UUFDeEQsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNoQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLFNBQWlCLEVBQUUsRUFBVSxFQUFFLE9BQTRCO1FBRTdFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUM3QixLQUFLLEVBQ0wsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUNuQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQzdDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQy9CLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxFQUFVLEVBQUUsS0FBcUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUU7WUFDNUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3ZCLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxTQUFTO1lBQ3hDLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLEVBQVUsRUFBRSxLQUFrQjtRQUM3QyxPQUFPLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxVQUFVLENBQUMsU0FBcUIsRUFBRSxVQUE2QixFQUFFOztRQUN0RSxNQUFNLGdCQUFnQixHQUFHLE1BQUEsT0FBTyxDQUFDLFNBQVMsbUNBQUksa0JBQWtCLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7U0FDL0M7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RCxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUU7WUFDNUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDNUQsUUFBUSxFQUFFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUM7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFVBQW1DLEVBQUc7O1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBQSxJQUFJLENBQUMscUJBQXFCLG1DQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxrQkFBa0IsNEJBQTRCLENBQUMsQ0FBQztTQUNsRztRQUVELE9BQU8sSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsR0FBRyxPQUFPO1lBQ1YsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUF1QixFQUFFLFVBQXFDLEVBQUU7O1FBQ2hGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBQSxPQUFPLENBQUMsU0FBUyxtQ0FBSSxrQkFBa0IsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUN6RSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUM1RCxRQUFRLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0MsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE9BQXFFO1FBQzlGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNwRSxHQUFHLE9BQU87U0FDWCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU0sWUFBWSxDQUFDLE9BQWdFO1FBQ2xGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUM5RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGNBQWMsQ0FBQyxPQUFrRTtRQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDbEUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxjQUFjLENBQUMsT0FBa0U7UUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2xFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLE9BQU87U0FDWCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU0sb0JBQW9CLENBQUMsT0FBdUU7UUFDakcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQzdFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLE9BQU87U0FDWCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU0sZUFBZSxDQUFDLE9BQTREO1FBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDN0QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBMEQ7UUFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN6RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUFVLEVBQUUsT0FBd0Q7UUFDckYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNuRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLE9BQXdDO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDN0QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxPQUF5QjtRQUN2QyxJQUFJLENBQUMseUJBQWtCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztTQUNyRjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsT0FBc0M7O1FBQ3pELElBQUksQ0FBQyx5QkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1NBQzNGO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSw0QkFBYSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDckQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxFQUFFO1lBRWxCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV0RCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUMxRztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxtQ0FBSSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNsRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksc0NBQWlCLENBQUMsZUFBZSxDQUFDO2dCQUNwRCxVQUFVLEVBQUUsNEJBQTRCO2dCQUN4QyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPO2dCQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsVUFBNEIsRUFBRztRQUM5QyxPQUFPLElBQUksc0JBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2xDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQzlDLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxPQUFpQztRQUNyRCxPQUFPLElBQUksNEJBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO2FBQ3JDO1lBQ0QsU0FBUyxFQUFFLEtBQUs7WUFDaEIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsT0FBaUM7UUFDM0QsT0FBTyxJQUFBLGNBQU8sRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZFLE9BQU8sSUFBSSw0QkFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsU0FBUyxFQUFFLGdCQUFnQjtnQkFDM0IsVUFBVSxFQUFFLG1CQUFtQjtnQkFDL0IsYUFBYSxFQUFFO29CQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7b0JBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtpQkFDM0M7Z0JBQ0QsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLEdBQUcsT0FBTzthQUNYLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU0sd0JBQXdCLENBQUMsU0FBaUIsRUFBRSxLQUFtRDtRQUNwRyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLHNDQUFpQixDQUFDLG9CQUFvQixDQUFDLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJO1lBQ2xFLFVBQVUsRUFBRSxzQkFBc0I7U0FDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWM7UUFDcEMsT0FBTyxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ2xELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixlQUFlLEVBQUUsZ0JBQWdCO1lBQ2pDLGlCQUFpQixFQUFFLG1CQUFtQjtZQUN0QyxLQUFLO1NBQ04sQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNYLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxZQUE2QixFQUFFLE9BQWU7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxnQ0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzdGLE9BQU8sRUFBRSx3QkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUSxDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxTQUFvQztRQUM5RSx5REFBeUQ7UUFDekQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM3QixTQUFTO2dCQUNULFNBQVM7YUFDVixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQXVCO1FBQzNELE9BQU8sSUFBQSx3QkFBaUIsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBblpELDRCQW1aQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIER1cmF0aW9uLFxuICBhd3NfY2xvdWR3YXRjaCBhcyBjbG91ZHdhdGNoLFxuICBhd3NfY29kZWJ1aWxkIGFzIGNidWlsZCxcbiAgYXdzX2NvZGVwaXBlbGluZSBhcyBjcGlwZWxpbmUsXG4gIGF3c19jb2RlcGlwZWxpbmVfYWN0aW9ucyBhcyBjcGlwZWxpbmVfYWN0aW9ucyxcbiAgYXdzX2V2ZW50cyBhcyBldmVudHMsXG4gIGF3c19ldmVudHNfdGFyZ2V0cyBhcyBldmVudHNfdGFyZ2V0cyxcbiAgYXdzX2lhbSBhcyBpYW0sIGF3c19zMyBhcyBzMyxcbiAgYXdzX3NucyBhcyBzbnMsXG4gIGF3c19zbnNfc3Vic2NyaXB0aW9ucyBhcyBzbnNfc3Vicyxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IEF1dG9CdWlsZCwgQXV0b0J1aWxkT3B0aW9ucyB9IGZyb20gJy4vYXV0by1idWlsZCc7XG5pbXBvcnQgeyBjcmVhdGVCdWlsZEVudmlyb25tZW50IH0gZnJvbSAnLi9idWlsZC1lbnYnO1xuaW1wb3J0IHsgQ2FuYXJ5LCBDYW5hcnlQcm9wcyB9IGZyb20gJy4vY2FuYXJ5JztcbmltcG9ydCB7IENoYW5nZUNvbnRyb2xsZXIgfSBmcm9tICcuL2NoYW5nZS1jb250cm9sbGVyJztcbmltcG9ydCB7IENoaW1lTm90aWZpZXIgfSBmcm9tICcuL2NoaW1lLW5vdGlmaWVyJztcbmltcG9ydCB7IFBpcGVsaW5lV2F0Y2hlciB9IGZyb20gJy4vcGlwZWxpbmUtd2F0Y2hlcic7XG5pbXBvcnQgKiBhcyBwdWJsaXNoaW5nIGZyb20gJy4vcHVibGlzaGluZyc7XG5pbXBvcnQgeyBBdXRvQnVtcCwgQXV0b01lcmdlQmFjaywgQXV0b0J1bXBQcm9wcyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0JztcbmltcG9ydCB7IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL3B1bGwtcmVxdWVzdC9tZXJnZS1iYWNrJztcbmltcG9ydCB7IElSZXBvLCBXcml0YWJsZUdpdEh1YlJlcG8gfSBmcm9tICcuL3JlcG8nO1xuaW1wb3J0IHsgU2hlbGxhYmxlLCBTaGVsbGFibGVQcm9wcyB9IGZyb20gJy4vc2hlbGxhYmxlJztcbmltcG9ydCAqIGFzIHNpZ25pbmcgZnJvbSAnLi9zaWduaW5nJztcbmltcG9ydCB7IGRldGVybWluZVJ1bk9yZGVyLCBmbGF0TWFwIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgUFVCTElTSF9TVEFHRV9OQU1FID0gJ1B1Ymxpc2gnO1xuY29uc3QgU0lHTklOR19TVEFHRV9OQU1FID0gJ1NpZ24nO1xuY29uc3QgVEVTVF9TVEFHRV9OQU1FID0gJ1Rlc3QnO1xuY29uc3QgTUVUUklDX05BTUVTUEFDRSA9ICdDREsvRGVsaXZsaWInO1xuY29uc3QgRkFJTFVSRV9NRVRSSUNfTkFNRSA9ICdGYWlsdXJlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHJlcG9zaXRvcnkgdG8gYnVpbGQgKGUuZy4gR2l0SHViUmVwbykuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBJUmVwbztcblxuICAvKipcbiAgICogQSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwaHlzaWNhbCBuYW1lIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byBidWlsZC5cbiAgICogQGRlZmF1bHQgbWFzdGVyXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRvIHNlbmQgZmFpbHVyZSBub3RpZmljYXRpb25zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVtYWlsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCBmb3IgdGhlIGJ1aWxkcy5cbiAgICpcbiAgICogQGRlZmF1bHQganNpaS9zdXBlcmNoYWluIChzZWUgZG9jcylcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBjYnVpbGQuSUJ1aWxkSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDb2RlQnVpbGQgcHJvamVjdCB0aGF0IHdpbGwgYmUgcGFydCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGAke3BpcGVsaW5lTmFtZX0tQnVpbGRgLCBpZiBgcGlwZWxpbmVOYW1lYCBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQ7IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBidWlsZFByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjb21wdXRlIHRvIHVzZSBmb3IgdGhpcyBidWlsZC5cbiAgICogU2VlIHRoZSB7QGxpbmsgQ29tcHV0ZVR5cGV9IGVudW0gZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRha2VuIGZyb20ge0BsaW5rICNidWlsZEltYWdlI2RlZmF1bHRDb21wdXRlVHlwZX1cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogY2J1aWxkLkNvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBwcm9qZWN0IGJ1aWxkcyBEb2NrZXIgaW1hZ2VzLiBTcGVjaWZ5IHRydWUgdG8gZW5hYmxlXG4gICAqIHJ1bm5pbmcgdGhlIERvY2tlciBkYWVtb24gaW5zaWRlIGEgRG9ja2VyIGNvbnRhaW5lci4gVGhpcyB2YWx1ZSBtdXN0IGJlXG4gICAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhpcyBidWlsZCBwcm9qZWN0IHdpbGwgYmUgdXNlZCB0byBidWlsZCBEb2NrZXJcbiAgICogaW1hZ2VzLCBhbmQgdGhlIHNwZWNpZmllZCBidWlsZCBlbnZpcm9ubWVudCBpbWFnZSBpcyBub3Qgb25lIHByb3ZpZGVkIGJ5XG4gICAqIEFXUyBDb2RlQnVpbGQgd2l0aCBEb2NrZXIgc3VwcG9ydC4gT3RoZXJ3aXNlLCBhbGwgYXNzb2NpYXRlZCBidWlsZHMgdGhhdFxuICAgKiBhdHRlbXB0IHRvIGludGVyYWN0IHdpdGggdGhlIERvY2tlciBkYWVtb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGJ1aWxkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1aWxkc3BlYywgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBidWlsZHNwZWMueW1sIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlLXJ1biB0aGUgcGlwZWxpbmUgYWZ0ZXIgeW91J3ZlIHVwZGF0ZWQgaXQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29uY3VycmVuY3kgbGltaXQgdGVzdCBhbmQgcHVibGlzaCBzdGFnZXMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDIsIHRoZW4gb25seSB0d28gYWN0aW9ucyB3aWxsIGV4ZWN1dGUgY29uY3VycmVudGx5LlxuICAgKiBJZiB0aGlzIHZhbHVlIGlzIDEsIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBoYXZlIGFueSBjb25jdXJyZW50IGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBkcnlSdW4gZm9yIGFsbCBwdWJsaXNoaW5nIHN0ZXBzXG4gICAqXG4gICAqIChDYW4gc3RpbGwgYmUgY2hhbmdlZCB3aGVuIGFkZGluZyBhIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidWlsZCBjb21taXRzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGlzIHJlcG9zaXRvcnksIGluY2x1ZGluZyBQUiBidWlsZHMgb24gZ2l0aHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYXV0by1idWlsZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtICdhdXRvQnVpbGRPcHRpb25zLnB1YmxpY0xvZ3MnIHdpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0LiAnYXV0b0J1aWxkT3B0aW9ucy5idWlsZHNwZWMnIHdpbGwgYmUgY29uZmlndXJlZCB0byBtYXRjaCB3aXRoIHRoZVxuICAgKiAnYnVpbGRTcGVjJyBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9CdWlsZE9wdGlvbnM/OiBBdXRvQnVpbGRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQb3N0IGEgbm90aWZpY2F0aW9uIHRvIHRoZSBnaXZlbiBDaGltZSB3ZWJob29rcyBpZiB0aGUgcGlwZWxpbmUgZmFpbHNcbiAgICogQGRlZmF1bHQgLSBubyBDaGltZSBub3RpZmljYXRpb25zIG9uIHBpcGVsaW5lIGZhaWx1cmVcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYG5vdGlmeU9uRmFpbHVyZSgpYCBpbnN0ZWFkIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpcGVsaW5lTm90aWZpY2F0aW9uLmNoaW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbWVGYWlsdXJlV2ViaG9va3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENoaW1lIG1lc3NhZ2UgdG8gcG9zdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBjaGltZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRpbWVvdXRcbiAgICpcbiAgICogSG93IGxvbmcgdGhlIGJ1aWxkIGNhbiB0YWtlIGF0IG1heGltdW0gKGJlZm9yZSBmYWlsaW5nIHdpdGggYW4gZXJyb3IpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLmhvdXJzKDgpXG4gICAqL1xuICByZWFkb25seSBidWlsZFRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZU5vdGlmaWNhdGlvbkJpbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXBlbGluZU5vdGlmaWNhdGlvbiB7XG4gIGJpbmQocGlwZWxpbmU6IFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIGF1dG8gYnVtcCBmb3IgdGhpcyBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQnVtcE9wdGlvbnMgZXh0ZW5kcyBPbWl0PEF1dG9CdW1wUHJvcHMsICdyZXBvJz4ge1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBkZWxpdmxpYiBDSS9DRCBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGJ1aWxkUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVBbGFybTogY2xvdWR3YXRjaC5BbGFybTtcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkT3V0cHV0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VBcnRpZmFjdDogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBDb2RlQnVpbGQgcHJvamVjdCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0byBidWlsZCBwcm9qZWN0LiB1bmRlZmluZWQgaWYgJ2F1dG9CdWlsZCcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0J1aWxkUHJvamVjdD86IGNidWlsZC5Qcm9qZWN0O1xuXG4gIC8qXG4gICAqIFRoZSB1bmRlcmx5aW5nIENvZGVQaXBlbGluZSBQaXBlbGluZSBvYmplY3QgdGhhdCBtb2RlbHMgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogY3BpcGVsaW5lLlBpcGVsaW5lO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeT86IHNucy5Ub3BpYztcbiAgcHJpdmF0ZSBkZWZhdWx0QXJ0aWZhY3Q6IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcHJpdmF0ZSBzdGFnZXM6IHsgW25hbWU6IHN0cmluZ106IGNwaXBlbGluZS5JU3RhZ2UgfSA9IHsgfTtcbiAgcHJpdmF0ZSBfc2lnbmluZ091dHB1dD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZEVudmlyb25tZW50OiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFNwZWM/OiBjYnVpbGQuQnVpbGRTcGVjO1xuICBwcml2YXRlIGZpcnN0UHVibGlzaFN0YWdlTmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gcHJvcHMuY29uY3VycmVuY3k7XG4gICAgdGhpcy5yZXBvID0gcHJvcHMucmVwbztcbiAgICB0aGlzLmRyeVJ1biA9ICEhcHJvcHMuZHJ5UnVuO1xuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBjcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ0J1aWxkUGlwZWxpbmUnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5icmFuY2ggPSBwcm9wcy5icmFuY2ggfHwgJ21hc3Rlcic7XG4gICAgdGhpcy5zb3VyY2VBcnRpZmFjdCA9IHByb3BzLnJlcG8uY3JlYXRlU291cmNlU3RhZ2UodGhpcy5waXBlbGluZSwgdGhpcy5icmFuY2gpO1xuXG4gICAgdGhpcy5idWlsZEVudmlyb25tZW50ID0gY3JlYXRlQnVpbGRFbnZpcm9ubWVudChwcm9wcyk7XG4gICAgdGhpcy5idWlsZFNwZWMgPSBwcm9wcy5idWlsZFNwZWM7XG5cbiAgICBsZXQgYnVpbGRQcm9qZWN0TmFtZSA9IHByb3BzLmJ1aWxkUHJvamVjdE5hbWU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdE5hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5waXBlbGluZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVpbGRQcm9qZWN0TmFtZSA9IGAke3Byb3BzLnBpcGVsaW5lTmFtZX0tQnVpbGRgO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUHJvamVjdCA9IG5ldyBjYnVpbGQuUGlwZWxpbmVQcm9qZWN0KHRoaXMsICdCdWlsZFByb2plY3QnLCB7XG4gICAgICBwcm9qZWN0TmFtZTogYnVpbGRQcm9qZWN0TmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkRW52aXJvbm1lbnQsXG4gICAgICBidWlsZFNwZWM6IHRoaXMuYnVpbGRTcGVjLFxuICAgICAgdGltZW91dDogcHJvcHMuYnVpbGRUaW1lb3V0ID8/IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJvbGUgPSB0aGlzLmJ1aWxkUHJvamVjdC5yb2xlO1xuICAgIHRoaXMuYnVpbGRSb2xlIS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUmVhZE9ubHknKSk7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG4gICAgdGhpcy5kZWZhdWx0QXJ0aWZhY3QgPSBidWlsZE91dHB1dDtcblxuICAgIGlmIChwcm9wcy5ub3RpZmljYXRpb25FbWFpbCkge1xuICAgICAgdGhpcy5ub3RpZnkgPSBuZXcgc25zLlRvcGljKHRoaXMsICdOb3RpZmljYXRpb25zVG9waWMnKTtcbiAgICAgIHRoaXMubm90aWZ5LmFkZFN1YnNjcmlwdGlvbihuZXcgc25zX3N1YnMuRW1haWxTdWJzY3JpcHRpb24ocHJvcHMubm90aWZpY2F0aW9uRW1haWwpKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBmYWlsdXJlIGFsYXJtIGZvciB0aGUgZW50aXJlIHBpcGVsaW5lLlxuICAgIHRoaXMuZmFpbHVyZUFsYXJtID0gdGhpcy5hZGRGYWlsdXJlQWxhcm0ocHJvcHMudGl0bGUpO1xuXG4gICAgLy8gZW1pdCBhbiBTTlMgbm90aWZpY2F0aW9uIGV2ZXJ5IHRpbWUgYnVpbGQgZmFpbHMuXG4gICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24odGhpcy5idWlsZFByb2plY3QsIGAke3Byb3BzLnRpdGxlfSBidWlsZCBmYWlsZWRgKTtcblxuICAgIC8vIEFsc28gZW1pdCB0byBDaGltZSB3ZWJob29rcyBpZiBjb25maWd1cmVkXG4gICAgaWYgKHByb3BzLmNoaW1lRmFpbHVyZVdlYmhvb2tzKSB7XG4gICAgICBuZXcgQ2hpbWVOb3RpZmllcih0aGlzLCAnQ2hpbWVOb3RpZmllcicsIHtcbiAgICAgICAgcGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICAgIG1lc3NhZ2U6IHByb3BzLmNoaW1lTWVzc2FnZSxcbiAgICAgICAgd2ViaG9va1VybHM6IHByb3BzLmNoaW1lRmFpbHVyZVdlYmhvb2tzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmF1dG9CdWlsZCkge1xuICAgICAgdGhpcy5hdXRvQnVpbGRQcm9qZWN0ID0gdGhpcy5hdXRvQnVpbGQocHJvcHMuYXV0b0J1aWxkT3B0aW9ucykucHJvamVjdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbmluZyBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIHB1YmxpYyBnZXQgc2lnbmluZ091dHB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmluZ091dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBub3RpZnlPbkZhaWx1cmUobm90aWZpY2F0aW9uOiBJUGlwZWxpbmVOb3RpZmljYXRpb24pIHtcbiAgICBub3RpZmljYXRpb24uYmluZCh7XG4gICAgICBwaXBlbGluZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYWN0aW9uIHRvIHJ1biBhIHNoZWxsIHNjcmlwdCB0byB0aGUgcGlwZWxpbmVcbiAgICpcbiAgICogQHJldHVybiBUaGUgU2hlbGxhYmxlIGFuZCB0aGUgQWN0aW9uIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTaGVsbGFibGUoc3RhZ2VOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFNoZWxsYWJsZU9wdGlvbnMpOiB7XG4gICAgc2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uO30ge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG5cbiAgICBjb25zdCBzaCA9IG5ldyBTaGVsbGFibGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHNoLmFkZFRvUGlwZWxpbmUoXG4gICAgICBzdGFnZSxcbiAgICAgIG9wdGlvbnMuYWN0aW9uTmFtZSB8fCBgQWN0aW9uJHtpZH1gLFxuICAgICAgb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbikge1xuICAgICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oc2gucHJvamVjdCwgb3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzaGVsbGFibGU6IHNoLCBhY3Rpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXN0KGlkOiBzdHJpbmcsIHByb3BzOiBTaGVsbGFibGVQcm9wcyk6IHtzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb259IHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaGVsbGFibGUoVEVTVF9TVEFHRV9OQU1FLCBpZCwge1xuICAgICAgYWN0aW9uTmFtZTogYFRlc3Qke2lkfWAsXG4gICAgICBmYWlsdXJlTm90aWZpY2F0aW9uOiBgVGVzdCAke2lkfSBmYWlsZWRgLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UvZGlzY292ZXJ5IG1ldGhvZCB0aGF0IGRlZmluZXMgYSBjYW5hcnkgdGVzdCBpbiB5b3VyIGFjY291bnQuXG4gICAqIEBwYXJhbSBpZCB0aGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBjYW5hcnkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZENhbmFyeShpZDogc3RyaW5nLCBwcm9wczogQ2FuYXJ5UHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IENhbmFyeSh0aGlzLCBgQ2FuYXJ5JHtpZH1gLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHVibGlzaChwdWJsaXNoZXI6IElQdWJsaXNoZXIsIG9wdGlvbnM6IEFkZFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gUFVCTElTSF9TVEFHRV9OQU1FO1xuICAgIGlmICghdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUpIHtcbiAgICAgIHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID0gcHVibGlzaFN0YWdlTmFtZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2UocHVibGlzaFN0YWdlTmFtZSk7XG5cbiAgICBwdWJsaXNoZXIuYWRkVG9QaXBlbGluZShzdGFnZSwgYCR7cHVibGlzaGVyLm5vZGUuaWR9UHVibGlzaGAsIHtcbiAgICAgIGlucHV0QXJ0aWZhY3Q6IG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmRlZmF1bHRBcnRpZmFjdCxcbiAgICAgIHJ1bk9yZGVyOiB0aGlzLmRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGNvbnRyb2wgcG9saWN5IHRvIGJsb2NrIHRyYW5zaXRpb25zIGludG8gdGhlIHB1Ymxpc2ggc3RhZ2UgZHVyaW5nIGNlcnRhaW4gdGltZSB3aW5kb3dzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNoYW5nZSBjb250cm9sIHBvbGljeS5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGFuZ2VDb250cm9sKG9wdGlvbnM6IEFkZENoYW5nZUNvbnRyb2xPcHRpb25zID0geyB9KTogQ2hhbmdlQ29udHJvbGxlciB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlID0gdGhpcy5nZXRTdGFnZSh0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUUpO1xuICAgIGlmICghcHVibGlzaFN0YWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcGlwZWxpbmUgZG9lcyBub3QgaGF2ZSBhICR7UFVCTElTSF9TVEFHRV9OQU1FfSBzdGFnZSB5ZXQuIEFkZCBvbmUgZmlyc3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VDb250cm9sbGVyKHRoaXMsICdDaGFuZ2VDb250cm9sbGVyJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBpcGVsaW5lU3RhZ2U6IHB1Ymxpc2hTdGFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTaWduaW5nKHNpZ25lcjogc2lnbmluZy5JU2lnbmVyLCBvcHRpb25zOiBzaWduaW5nLkFkZFNpZ25pbmdPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzaWduaW5nU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gU0lHTklOR19TVEFHRV9OQU1FO1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHNpZ25pbmdTdGFnZU5hbWUpO1xuXG4gICAgdGhpcy5fc2lnbmluZ091dHB1dCA9IHNpZ25lci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtzaWduZXIubm9kZS5pZH1TaWduYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgcnVuT3JkZXI6IHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpLFxuICAgIH0pO1xuICAgIHRoaXMuZGVmYXVsdEFydGlmYWN0ID0gdGhpcy5fc2lnbmluZ091dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzaWduTnVHZXRXaXRoU2lnbmVyKG9wdGlvbnM6IHNpZ25pbmcuU2lnbk51R2V0V2l0aFNpZ25lclByb3BzICYgc2lnbmluZy5BZGRTaWduaW5nT3B0aW9ucykge1xuICAgIHRoaXMuYWRkU2lnbmluZyhuZXcgc2lnbmluZy5TaWduTnVHZXRXaXRoU2lnbmVyKHRoaXMsICdOdUdldFNpZ25pbmcnLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0KHRoaXMsICdOcG0nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb01hdmVuUHJvamVjdCh0aGlzLCAnTWF2ZW4nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnVHZXQob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb051R2V0UHJvamVjdCh0aGlzLCAnTnVHZXQnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvR2l0SHViUGFnZXMob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoRG9jc1RvR2l0SHViUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3QodGhpcywgJ0dpdEh1YlBhZ2VzJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YihvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1YlByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR2l0SHViKHRoaXMsICdHaXRIdWInLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUHlQSShvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGlQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGkodGhpcywgJ1B5UEknLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUzMoaWQ6IHN0cmluZywgb3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9TM1Byb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzModGhpcywgaWQsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIEdvbGFuZyBjb2RlIGZyb20gYGdvYCBkaXJlY3RvcnkgaW4gYnVpbGQgYXJ0aWZhY3QgdG8gYSBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9Hb2xhbmcob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmdQcm9wcykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmcodGhpcywgJ0dvbGFuZycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBidW1wcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvQnVtcE9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9CdW1wKG9wdGlvbnM/OiBBdXRvQnVtcE9wdGlvbnMpOiBBdXRvQnVtcCB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLWJ1bXAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQnVtcCA9IG5ldyBBdXRvQnVtcCh0aGlzLCAnQXV0b0J1bXAnLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF1dG9CdW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIG1lcmdlIGJhY2tzIGZvciB0aGUgc291cmNlIHJlcG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGF1dG8gYnVtcCAoc2VlIEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9NZXJnZUJhY2sob3B0aW9ucz86IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBpZiAoIVdyaXRhYmxlR2l0SHViUmVwby5pc1dyaXRhYmxlR2l0SHViUmVwbyh0aGlzLnJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVwb1wiIG11c3QgYmUgYSBXcml0YWJsZUdpdEh1YlJlcG8gaW4gb3JkZXIgdG8gZW5hYmxlIGF1dG8tbWVyZ2UtYmFjaycpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQmFjayA9IG5ldyBBdXRvTWVyZ2VCYWNrKHRoaXMsICdNZXJnZUJhY2snLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlKSB7XG5cbiAgICAgIGNvbnN0IGFmdGVyU3RhZ2UgPSB0aGlzLmdldFN0YWdlKG9wdGlvbnMuc3RhZ2UuYWZ0ZXIpO1xuXG4gICAgICBpZiAoIWFmdGVyU3RhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnb3B0aW9ucy5zdGFnZS5hZnRlcicgbXVzdCBiZSBjb25maWd1cmVkIHRvIGFuIGV4aXN0aW5nIHN0YWdlOiAke29wdGlvbnMuc3RhZ2UuYWZ0ZXJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKG9wdGlvbnMuc3RhZ2UubmFtZSA/PyAnTWVyZ2VCYWNrJywgeyBqdXN0QWZ0ZXI6IGFmdGVyU3RhZ2UgfSk7XG4gICAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgIGFjdGlvbk5hbWU6ICdDcmVhdGVNZXJnZUJhY2tQdWxsUmVxdWVzdCcsXG4gICAgICAgIHByb2plY3Q6IG1lcmdlQmFjay5wci5wcm9qZWN0LFxuICAgICAgICBpbnB1dDogdGhpcy5zb3VyY2VBcnRpZmFjdCxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVpbGRzIG9mIHB1bGwgcmVxdWVzdHMgaW4gdGhlIEdpdGh1YiByZXBvc2l0b3J5IGFuZCBwb3N0cyB0aGVcbiAgICogcmVzdWx0cyBiYWNrIGFzIGEgY29tbWVudCB3aXRoIGEgcHVibGljIGxpbmsgdG8gdGhlIGJ1aWxkIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYXV0b0J1aWxkKG9wdGlvbnM6IEF1dG9CdWlsZE9wdGlvbnMgPSB7IH0pOiBBdXRvQnVpbGQge1xuICAgIHJldHVybiBuZXcgQXV0b0J1aWxkKHRoaXMsICdBdXRvQnVpbGQnLCB7XG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgYnVpbGRTcGVjOiBvcHRpb25zLmJ1aWxkU3BlYyB8fCB0aGlzLmJ1aWxkU3BlYyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpYyB0aGF0IHRyYWNrcyBwaXBlbGluZSBmYWlsdXJlcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGYWlsdXJlcyhvcHRpb25zOiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBQaXBlbGluZTogdGhpcy5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpY3MgdGhhdCB0cmFjayBmYWlsdXJlIG9mIGVhY2ggYWN0aW9uIHdpdGhpbiB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aW9uRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWNbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAodGhpcy5waXBlbGluZS5zdGFnZXMsIHN0YWdlID0+IHN0YWdlLmFjdGlvbnMubWFwKGFjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgIEFjdGlvbjogYWN0aW9uLmFjdGlvblByb3BlcnRpZXMuYWN0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNYW51YWxBcHByb3ZhbFRvU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHByb3BzPzogY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG4gICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5NYW51YWxBcHByb3ZhbEFjdGlvbihwcm9wcyA/PyB7XG4gICAgICBhY3Rpb25OYW1lOiAnTWFudWFsQXBwcm92YWxBY3Rpb24nLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRmFpbHVyZUFsYXJtKHRpdGxlPzogc3RyaW5nKTogY2xvdWR3YXRjaC5BbGFybSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVdhdGNoZXIodGhpcywgJ1BpcGVsaW5lV2F0Y2hlcicsIHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgbWV0cmljTmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgZmFpbHVyZU1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICB0aXRsZSxcbiAgICB9KS5hbGFybTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubm90aWZ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbGRQcm9qZWN0Lm9uQnVpbGRGYWlsZWQoJ09uQnVpbGRGYWlsZWQnKS5hZGRUYXJnZXQobmV3IGV2ZW50c190YXJnZXRzLlNuc1RvcGljKHRoaXMubm90aWZ5LCB7XG4gICAgICBtZXNzYWdlOiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21UZXh0KG1lc3NhZ2UpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgc3RhZ2Ugb3IgdW5kZWZpbmVkIGlmIHRoZSBzdGFnZSBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwcml2YXRlIGdldFN0YWdlKHN0YWdlTmFtZTogc3RyaW5nKTogY3BpcGVsaW5lLklTdGFnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHBsYWNlbWVudD86IGNwaXBlbGluZS5TdGFnZVBsYWNlbWVudCk6IGNwaXBlbGluZS5JU3RhZ2Uge1xuICAgIC8vIG90aGVyd2lzZSwgZ3JvdXAgYWxsIGFjdGlvbnMgc28gdGhleSBydW4gY29uY3VycmVudGx5LlxuICAgIGxldCBzdGFnZSA9IHRoaXMuZ2V0U3RhZ2Uoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIXN0YWdlKSB7XG4gICAgICBzdGFnZSA9IHRoaXMucGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGFnZXNbc3RhZ2VOYW1lXSA9IHN0YWdlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhZ2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lUnVuT3JkZXIoc3RhZ2UuYWN0aW9ucy5sZW5ndGgsIHRoaXMuY29uY3VycmVuY3kpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVB1Ymxpc2hlciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICBhZGRUb1BpcGVsaW5lKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRUb1BpcGVsaW5lT3B0aW9ucyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVG9QaXBlbGluZU9wdGlvbnMge1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBydW5PcmRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRDaGFuZ2VDb250cm9sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRoZSBDaGFuZ2VDb250cm9sIGlDYWwgZG9jdW1lbnQgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IGJ1Y2tldCB3aWxsIGJlIHByb3Zpc2lvbmVkLlxuICAgKi9cbiAgY2hhbmdlQ29udHJvbEJ1Y2tldD86IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gd2hpY2ggdGhlIGlDYWwgZmlsbGUgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UtY29udHJvbC5pY2FsJ1xuICAgKi9cbiAgY2hhbmdlQ29udHJvbE9iamVjdEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIHRoZSBjaGFuZ2UgY29udHJvbGxlciBvblxuICAgKlxuICAgKiBAZGVmYXVsdCByYXRlKDE1IG1pbnV0ZXMpXG4gICAqL1xuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBTaWduaW5nIG91dHB1dCBhcnRpZmFjdCB3aGVuIGEgc2lnbmluZyBzdGFnZSBpcyBhZGRlZCB0byB0aGVcbiAgICogcGlwZWxpbmUgdmlhIGBhZGRTaWduaW5nYCBvciBgc2lnbk51R2V0V2l0aFNpZ25lcmAuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHRcbiAgICogd2lsbCBiZSB0aGUgYnVpbGQgb3V0cHV0IGFydGlmYWN0LlxuICAgKi9cbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSB0byBhZGQgcHVibGlzaGluZyBqb2IgdG9cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIGJlIHRoZSBzdGFnZSBuYW1lIGAnUHVibGlzaCdgLCBidXQgaWYgeW91IHdhbnQgdG9cbiAgICogc2VwYXJhdGUgb3V0IHRoZSBwdWJsaXNoaW5nIGFjdGlvbnMgaW50byBkaWZmZXJlbnQgc3RhZ2VzIChpbiBvcmRlciB0b1xuICAgKiBibG9jay91bmJsb2NrIHRoZW0gc2VwYXJhdGVseSBmb3IgZXhhbXBsZSkgeW91IGNhbiBjaGFuZ2UgdGhpcy5cbiAgICpcbiAgICogU3RhZ2VzIGFwcGVhciBpbiB0aGUgcGlwZWxpbmUgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHJlZmVyZW5jZWQgZm9yXG4gICAqIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlB1Ymxpc2hcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNoZWxsYWJsZU9wdGlvbnMgZXh0ZW5kcyBTaGVsbGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTdHJpbmcgdG8gdXNlIGFzIGFjdGlvbiBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IElkXG4gICAqL1xuICBhY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIHVzZSBhcyBmYWlsdXJlIG5vdGlmaWNhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBub3RpZmljYXRpb25cbiAgICovXG4gIGZhaWx1cmVOb3RpZmljYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhcnRpZmFjdCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgU2lnbmluZyBvdXRwdXQgYXJ0aWZhY3Qgd2hlbiBhIHNpZ25pbmcgc3RhZ2UgaXMgYWRkZWQgdG8gdGhlXG4gICAqIHBpcGVsaW5lIHZpYSBgYWRkU2lnbmluZ2Agb3IgYHNpZ25OdUdldFdpdGhTaWduZXJgLiBPdGhlcndpc2UsIHRoZSBkZWZhdWx0XG4gICAqIHdpbGwgYmUgdGhlIGJ1aWxkIG91dHB1dCBhcnRpZmFjdC5cbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG59XG4iXX0=
|
|
@@ -11,8 +11,8 @@ else
|
|
|
11
11
|
echo "!!! Neither an apt nor yum distribution - could not install jq, things might break!"
|
|
12
12
|
fi
|
|
13
13
|
|
|
14
|
-
if [ -n "${
|
|
15
|
-
ROLE=$(aws sts assume-role --role-arn "${
|
|
14
|
+
if [ -n "${ACCESS_ROLE_ARN:-}" ]; then
|
|
15
|
+
ROLE=$(aws sts assume-role --role-arn "${ACCESS_ROLE_ARN:-}" --role-session-name "signer_access")
|
|
16
16
|
export AWS_ACCESS_KEY_ID=$(echo $ROLE | jq -r .Credentials.AccessKeyId)
|
|
17
17
|
export AWS_SECRET_ACCESS_KEY=$(echo $ROLE | jq -r .Credentials.SecretAccessKey)
|
|
18
18
|
export AWS_SESSION_TOKEN=$(echo $ROLE | jq -r .Credentials.SessionToken)
|
package/lib/signing.d.ts
CHANGED
package/lib/signing.js
CHANGED
|
@@ -38,7 +38,7 @@ class SignNuGetWithSigner extends constructs_1.Construct {
|
|
|
38
38
|
const environment = {
|
|
39
39
|
SIGNING_BUCKET_NAME: props.signingBucket.bucketName,
|
|
40
40
|
SIGNING_LAMBDA_ARN: props.signingLambda.functionArn,
|
|
41
|
-
|
|
41
|
+
ACCESS_ROLE_ARN: props.accessRole.roleArn,
|
|
42
42
|
};
|
|
43
43
|
const shellable = new shellable_1.Shellable(this, 'Default', {
|
|
44
44
|
platform: new shellable_1.LinuxPlatform((_a = props.buildImage) !== null && _a !== void 0 ? _a : aws_codebuild_1.LinuxBuildImage.fromDockerRegistry('public.ecr.aws/jsii/superchain:1-buster-slim-node18')),
|
|
@@ -70,4 +70,4 @@ class SignNuGetWithSigner extends constructs_1.Construct {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
exports.SignNuGetWithSigner = SignNuGetWithSigner;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsNkRBQWtGO0FBQ2xGLG1FQUFnRTtBQUNoRSxtRkFBdUU7QUFJdkUsMkNBQW1EO0FBQ25ELDZDQUF5QztBQUV6QywyQ0FBdUQ7QUFnRHZELE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFJaEQsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7O1FBQzlFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVO1lBQ25ELGtCQUFrQixFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVztZQUNuRCxlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1NBQzFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUMvQyxRQUFRLEVBQUUsSUFBSSx5QkFBYSxDQUFDLE1BQUEsS0FBSyxDQUFDLFVBQVUsbUNBQUksK0JBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQzFJLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDO1lBQ3pELFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFNBQVMsRUFBRSxzQkFBUyxDQUFDLE9BQU8sQ0FBQztnQkFDM0IsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDZixDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRztpQkFDeEI7YUFDRixDQUFDO1lBQ0YsV0FBVztTQUNaLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFhLEVBQUUsRUFBVSxFQUFFLE9BQTZCO1FBQzNFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSwyQkFBUSxFQUFFLENBQUM7UUFDN0QsTUFBTSxhQUFhLEdBQUcsSUFBSSwyQkFBUSxFQUFFLENBQUM7UUFFckMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLDBDQUFlLENBQUM7WUFDbEMsVUFBVSxFQUFFLEVBQUU7WUFDZCxLQUFLLEVBQUUsWUFBWTtZQUNuQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUN6QixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTdDRCxrREE2Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSUJ1aWxkSW1hZ2UsIExpbnV4QnVpbGRJbWFnZSwgUHJvamVjdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQXJ0aWZhY3QsIElTdGFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkQWN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWlsZFNwZWMgfSBmcm9tICcuL2J1aWxkLXNwZWMnO1xuaW1wb3J0IHsgQWRkVG9QaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL3BpcGVsaW5lJztcbmltcG9ydCB7IExpbnV4UGxhdGZvcm0sIFNoZWxsYWJsZSB9IGZyb20gJy4vc2hlbGxhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmVyIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIGFkZFRvUGlwZWxpbmUoc3RhZ2U6IElTdGFnZSwgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkVG9QaXBlbGluZU9wdGlvbnMpOiBBcnRpZmFjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRTaWduaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgYXJ0aWZhY3QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1aWxkIG91dHB1dCBhcnRpZmFjdFxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRBcnRpZmFjdD86IEFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIHRvIGFkZCBzaWduaW5nIGpvYiB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBcIlNpZ25cIlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25OdUdldFdpdGhTaWduZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBBbiBTMyBidWNrZXQgdXNlZCB0byBzdG9yZSBzaWduZWQgYW5kIHVuc2lnbmVkIERMTCBmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgc2lnbmluZ0J1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogQSBMYW1iZGEgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHNpZ25pbmcgb3BlcmF0aW9ucyB3aXRoIEFXUyBTaWduZXJcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25pbmdMYW1iZGE6IElGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSByb2xlIHVzZWQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHNpZ25pbmcgYnVja2V0IGFuZCBzaWduaW5nIGxhbWJkYVxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzUm9sZTogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBpbWFnZSB0byBkbyB0aGUgc2lnbmluZyBpblxuICAgKlxuICAgKiBOZWVkcyB0byBoYXZlIE51R2V0IHByZWluc3RhbGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTGF0ZXN0IHN1cGVyY2hhaW5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBJQnVpbGRJbWFnZTtcbn1cblxuZXhwb3J0IGNsYXNzIFNpZ25OdUdldFdpdGhTaWduZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU2lnbmVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IElSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdDtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNpZ25OdUdldFdpdGhTaWduZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHtcbiAgICAgIFNJR05JTkdfQlVDS0VUX05BTUU6IHByb3BzLnNpZ25pbmdCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIFNJR05JTkdfTEFNQkRBX0FSTjogcHJvcHMuc2lnbmluZ0xhbWJkYS5mdW5jdGlvbkFybixcbiAgICAgIEFDQ0VTU19ST0xFX0FSTjogcHJvcHMuYWNjZXNzUm9sZS5yb2xlQXJuLFxuICAgIH07XG5cbiAgICBjb25zdCBzaGVsbGFibGUgPSBuZXcgU2hlbGxhYmxlKHRoaXMsICdEZWZhdWx0Jywge1xuICAgICAgcGxhdGZvcm06IG5ldyBMaW51eFBsYXRmb3JtKHByb3BzLmJ1aWxkSW1hZ2UgPz8gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeSgncHVibGljLmVjci5hd3MvanNpaS9zdXBlcmNoYWluOjEtYnVzdGVyLXNsaW0tbm9kZTE4JykpLFxuICAgICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2lnbmluZycsICdudWdldCcpLFxuICAgICAgZW50cnlwb2ludDogJ3NpZ24uc2gnLFxuICAgICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMubGl0ZXJhbCh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBhcnRpZmFjdHM6IHtcbiAgICAgICAgICBmaWxlczogWycqKi8qJ10sXG4gICAgICAgICAgWydiYXNlLWRpcmVjdG9yeSddOiAnLicsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb2xlID0gc2hlbGxhYmxlLnJvbGU7XG4gICAgdGhpcy5wcm9qZWN0ID0gc2hlbGxhYmxlLnByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9QaXBlbGluZShzdGFnZTogSVN0YWdlLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRUb1BpcGVsaW5lT3B0aW9ucykge1xuICAgIGNvbnN0IHNpZ25pbmdJbnB1dCA9IG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCBuZXcgQXJ0aWZhY3QoKTtcbiAgICBjb25zdCBzaWduaW5nT3V0cHV0ID0gbmV3IEFydGlmYWN0KCk7XG5cbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IENvZGVCdWlsZEFjdGlvbih7XG4gICAgICBhY3Rpb25OYW1lOiBpZCxcbiAgICAgIGlucHV0OiBzaWduaW5nSW5wdXQsXG4gICAgICBydW5PcmRlcjogb3B0aW9ucy5ydW5PcmRlcixcbiAgICAgIHByb2plY3Q6IHRoaXMucHJvamVjdCxcbiAgICAgIG91dHB1dHM6IFtzaWduaW5nT3V0cHV0XSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gc2lnbmluZ091dHB1dDtcbiAgfVxufSJdfQ==
|
package/package.json
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"minipass": "3.2.1",
|
|
67
67
|
"node-ical": "0.15.1",
|
|
68
68
|
"npm-check-updates": "^16",
|
|
69
|
-
"projen": "^0.74.
|
|
69
|
+
"projen": "^0.74.9",
|
|
70
70
|
"rrule": "^2.7.2",
|
|
71
71
|
"standard-version": "^9",
|
|
72
72
|
"tar": "^6.2.0",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
},
|
|
93
93
|
"main": "lib/index.js",
|
|
94
94
|
"license": "Apache-2.0",
|
|
95
|
-
"version": "14.
|
|
95
|
+
"version": "14.7.1",
|
|
96
96
|
"jest": {
|
|
97
97
|
"testMatch": [
|
|
98
98
|
"**/lib/__tests__/**/?(*.)+(spec|test).js?(x)"
|