construct-hub 0.4.520 → 0.4.522
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 +20 -20
- package/.yarn/install-state.gz +0 -0
- package/docs/operator-runbook.md +15 -0
- package/lib/backend/ingestion/re-ingest.lambda.bundle/index.js.map +1 -1
- package/lib/backend/shared/time.lambda-shared.d.ts +1 -0
- package/lib/backend/shared/time.lambda-shared.js +5 -1
- package/lib/construct-hub.js +1 -1
- package/lib/deep-link.d.ts +1 -0
- package/lib/deep-link.js +15 -1
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs/canary/index.d.ts +4 -0
- package/lib/package-sources/npmjs/canary/index.js +7 -1
- package/lib/package-sources/npmjs/stage-and-notify.lambda.bundle/index.js +77 -36
- package/lib/package-sources/npmjs/stage-and-notify.lambda.bundle/index.js.map +4 -4
- package/lib/package-sources/npmjs/stage-and-notify.lambda.js +47 -10
- package/lib/package-sources/npmjs.js +23 -9
- package/lib/package-tag/index.js +3 -3
- package/lib/package-tag-group/index.js +2 -2
- package/lib/preload-file/index.js +1 -1
- package/lib/s3/storage.js +1 -1
- package/lib/spdx-license.js +1 -1
- package/package.json +1 -1
|
@@ -42,8 +42,17 @@ const client_lambda_shared_1 = require("../../backend/deny-list/client.lambda-sh
|
|
|
42
42
|
const aws_lambda_shared_1 = require("../../backend/shared/aws.lambda-shared");
|
|
43
43
|
const env_lambda_shared_1 = require("../../backend/shared/env.lambda-shared");
|
|
44
44
|
const integrity_lambda_shared_1 = require("../../backend/shared/integrity.lambda-shared");
|
|
45
|
+
const time_lambda_shared_1 = require("../../backend/shared/time.lambda-shared");
|
|
45
46
|
class HttpNotFoundError extends Error {
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Retry configuration for tarball downloads that return HTTP 404.
|
|
50
|
+
*/
|
|
51
|
+
const NOT_FOUND_RETRY = {
|
|
52
|
+
baseDelayMs: 1_000,
|
|
53
|
+
maxDelayMs: 8_000,
|
|
54
|
+
deadlineMs: 60_000,
|
|
55
|
+
};
|
|
47
56
|
/**
|
|
48
57
|
* This function is invoked by the `npm-js-follower.lambda` with a `PackageVersion` object, or by
|
|
49
58
|
* an SQS trigger feeding from this function's Dead-Letter Queue (for re-trying purposes).
|
|
@@ -68,19 +77,20 @@ async function handler(event, context) {
|
|
|
68
77
|
console.log(`Package was deny-listed: ${denyRule.reason}`);
|
|
69
78
|
return;
|
|
70
79
|
}
|
|
71
|
-
let tarball
|
|
80
|
+
let tarball;
|
|
72
81
|
try {
|
|
73
|
-
|
|
74
|
-
console.log(`Downloading tarball from URL: ${event.tarballUrl}`);
|
|
75
|
-
tarball = await httpGet(event.tarballUrl);
|
|
82
|
+
tarball = await downloadTarball(event);
|
|
76
83
|
}
|
|
77
84
|
catch (e) {
|
|
78
85
|
if (e instanceof HttpNotFoundError) {
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
86
|
+
// The tarball is still not available, even after retrying for a while
|
|
87
|
+
// (see `downloadTarball`). It is probably permanently missing (e.g: the
|
|
88
|
+
// version was unpublished). If we throw an error, the message will be
|
|
89
|
+
// sent to the DLQ, to be processed again in a re-drive. But given that
|
|
90
|
+
// this file will probably never be available, the re-drives will also
|
|
91
|
+
// fail, and we'll never be able to get rid of the message in the DLQ.
|
|
92
|
+
// Instead, we ignore this version by returning silently.
|
|
93
|
+
console.log(`Tarball not found for ${event.name}@${event.version} (modified ${event.modified}), ignoring this version: ${event.tarballUrl}`);
|
|
84
94
|
return;
|
|
85
95
|
}
|
|
86
96
|
else {
|
|
@@ -141,6 +151,33 @@ async function handler(event, context) {
|
|
|
141
151
|
QueueUrl: queueUrl,
|
|
142
152
|
}));
|
|
143
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Downloads the tarball for a package version, retrying HTTP 404 responses
|
|
156
|
+
* for a while: npm metadata may propagate faster than tarballs, so a freshly
|
|
157
|
+
* published version can transiently 404 even though it will be available
|
|
158
|
+
* shortly.
|
|
159
|
+
*/
|
|
160
|
+
async function downloadTarball(event) {
|
|
161
|
+
const startTime = (0, time_lambda_shared_1.now)();
|
|
162
|
+
let attempt = 0;
|
|
163
|
+
while (true) {
|
|
164
|
+
try {
|
|
165
|
+
console.log(`Downloading tarball from URL: ${event.tarballUrl}`);
|
|
166
|
+
return await httpGet(event.tarballUrl);
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
if (!(e instanceof HttpNotFoundError) ||
|
|
170
|
+
(0, time_lambda_shared_1.now)() - startTime >= NOT_FOUND_RETRY.deadlineMs) {
|
|
171
|
+
throw e;
|
|
172
|
+
}
|
|
173
|
+
const delay = Math.max(NOT_FOUND_RETRY.baseDelayMs, Math.floor(Math.random() *
|
|
174
|
+
Math.min(NOT_FOUND_RETRY.baseDelayMs * Math.pow(2, attempt), NOT_FOUND_RETRY.maxDelayMs)));
|
|
175
|
+
console.log(`Tarball not found (HTTP 404), retrying in ${delay} ms: ${event.tarballUrl}`);
|
|
176
|
+
await (0, time_lambda_shared_1.sleep)(delay);
|
|
177
|
+
attempt++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
144
181
|
/**
|
|
145
182
|
* Makes an HTTP GET request, and returns the resulting payload.
|
|
146
183
|
*
|
|
@@ -165,4 +202,4 @@ function httpGet(url) {
|
|
|
165
202
|
});
|
|
166
203
|
});
|
|
167
204
|
}
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYW5kLW5vdGlmeS5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFja2FnZS1zb3VyY2VzL25wbWpzL3N0YWdlLWFuZC1ub3RpZnkubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLDBCQThHQztBQXBJRCw2Q0FBK0I7QUFDL0IsNkJBQTBCO0FBQzFCLGtEQUFzRDtBQUN0RCxvREFBeUQ7QUFHekQsdUZBQThFO0FBQzlFLDhFQUErRTtBQUMvRSw4RUFBb0U7QUFDcEUsMEZBQXlFO0FBRXpFLE1BQU0saUJBQWtCLFNBQVEsS0FBSztDQUFHO0FBRXhDOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FDM0IsS0FBZ0MsRUFDaEMsT0FBZ0I7SUFFaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFeEQsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdkIsK0RBQStEO1FBQy9ELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFtQixDQUFDO1FBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLElBQUEsOEJBQVUsRUFBQyxhQUFhLENBQUMsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFBLDhCQUFVLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFFekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxxQ0FBYyxDQUFDLFNBQVMsRUFB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QUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixRQUFRLENBQUMsRUFBRSxDQUNULE1BQU0sRUFDTixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5RCxDQUFDO1lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgUHV0T2JqZWN0Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQgeyBTZW5kTWVzc2FnZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3FzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgU1FTRXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB7IFMzS2V5UHJlZml4IH0gZnJvbSAnLi9jb25zdGFudHMubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBEZW55TGlzdENsaWVudCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvZGVueS1saXN0L2NsaWVudC5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IFMzX0NMSUVOVCwgU1FTX0NMSUVOVCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL2F3cy5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IHJlcXVpcmVFbnYgfSBmcm9tICcuLi8uLi9iYWNrZW5kL3NoYXJlZC9lbnYubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBpbnRlZ3JpdHkgfSBmcm9tICcuLi8uLi9iYWNrZW5kL3NoYXJlZC9pbnRlZ3JpdHkubGFtYmRhLXNoYXJlZCc7XG5cbmNsYXNzIEh0dHBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgdGhlIGBucG0tanMtZm9sbG93ZXIubGFtYmRhYCAgd2l0aCBhIGBQYWNrYWdlVmVyc2lvbmAgb2JqZWN0LCBvciBieVxuICogYW4gU1FTIHRyaWdnZXIgZmVlZGluZyBmcm9tIHRoaXMgZnVuY3Rpb24ncyBEZWFkLUxldHRlciBRdWV1ZSAoZm9yIHJlLXRyeWluZyBwdXJwb3NlcykuXG4gKlxuICogVGhlIHBheWxvYWQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBkaXNjb3ZlcmVkIG5ldyBwYWNrYWdlIHZlcnNpb24uIFRoaXMgaGFuZGxlciB3aWxsXG4gKiBjaGVjayB0aGUgcGFja2FnZSBpcyBub3QgZGVueS1saXN0ZWQsIGRvd25sb2FkIHRoZSB0YXJiYWxsIGZyb20gdGhlIHBheWxvYWQncyBgdGFyYmFsbFVybGAsIHN0b3JlXG4gKiBpdCBpbiB0aGUgc3RhZ2luZyBidWNrZXQsIHRoZW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIENvbnN0cnVjdEh1YiBpbmdlc3Rpb24gU1FTIHF1ZXVlIGluIG9yZGVyIHRvXG4gKiB0cmlnZ2VyIGluZ2VzdGlvbiBvZiB0aGlzIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKFxuICBldmVudDogUGFja2FnZVZlcnNpb24gfCBTUVNFdmVudCxcbiAgY29udGV4dDogQ29udGV4dFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKGBFdmVudDogJHtKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMil9YCk7XG5cbiAgaWYgKCdSZWNvcmRzJyBpbiBldmVudCkge1xuICAgIC8vIEFUVEVOVElPTjogQXNzdW1lcyB0aGVyZSBpcyBvbmx5IGV4YWN0bHkgMSBldmVudCBpbiB0aGVyZS4uLlxuICAgIGV2ZW50ID0gSlNPTi5wYXJzZShldmVudC5SZWNvcmRzWzBdLmJvZHkpIGFzIFBhY2thZ2VWZXJzaW9uO1xuICAgIGNvbnNvbGUubG9nKGBFdmVudCAoZXh0cmFjdGVkKTogJHtKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMil9YCk7XG4gIH1cblxuICBjb25zdCBzdGFnaW5nQnVja2V0ID0gcmVxdWlyZUVudignQlVDS0VUX05BTUUnKTtcbiAgY29uc3QgcXVldWVVcmwgPSByZXF1aXJlRW52KCdRVUVVRV9VUkwnKTtcblxuICBjb25zdCBkZW55TGlzdCA9IGF3YWl0IERlbnlMaXN0Q2xpZW50Lm5ld0NsaWVudCgpO1xuICBjb25zdCBkZW55UnVsZSA9IGRlbnlMaXN0Lmxvb2t1cChldmVudC5uYW1lLCBldmVudC52ZXJzaW9uKTtcbiAgaWYgKGRlbnlSdWxlICE9IG51bGwpIHtcbiAgICBjb25zb2xlLmxvZyhgUGFja2FnZSB3YXMgZGVueS1saXN0ZWQ6ICR7ZGVueVJ1bGUucmVhc29ufWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCB0YXJiYWxsOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSgnJyk7XG4gIHRyeSB7XG4gICAgLy8gRG93bmxvYWQgdGhlIHRhcmJhbGxcbiAgICBjb25zb2xlLmxvZyhgRG93bmxvYWRpbmcgdGFyYmFsbCBmcm9tIFVSTDogJHtldmVudC50YXJiYWxsVXJsfWApO1xuICAgIHRhcmJhbGwgPSBhd2FpdCBodHRwR2V0KGV2ZW50LnRhcmJhbGxVcmwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBIdHRwTm90Rm91bmRFcnJvcikge1xuICAgICAgLy8gV2UgcmVjZWl2ZWQgYSBtZXNzYWdlIHRvIGRvd25sb2FkIGEgZmlsZSB0aGF0IHNob3VsZCBleGlzdCBidXQgZG9lc24ndC5cbiAgICAgIC8vIElmIHdlIHRocm93IGFuIGVycm9yLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQgdG8gdGhlIERMUSwgdG8gYmUgcHJvY2Vzc2VkXG4gICAgICAvLyBhZ2FpbiBpbiBhIHJlLWRyaXZlLiBCdXQgZ2l2ZW4gdGhhdCB0aGlzIGZpbGUgd2lsbCBwcm9iYWJseSBuZXZlciBiZVxuICAgICAgLy8gYXZhaWxhYmxlLCB0aGUgcmUtZHJpdmVzIHdpbGwgYWxzbyBmYWlsLCBhbmQgd2UnbGwgbmV2ZXIgYmUgYWJsZSB0byBnZXQgcmlkXG4gICAgICAvLyBvZiB0aGUgbWVzc2FnZSBpbiB0aGUgRExRLiBJbnN0ZWFkLCB3ZSBpZ25vcmUgdGhpcyB2ZXJzaW9uIGJ5IHJldHVybmluZyBzaWxlbnRseS5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgdGFyYmFsbCBpbnRvIHRoZSBzdGFnaW5nIGJ1Y2tldFxuICAvLyAtIGluZm9zLmRpc3QudGFyYmFsbCA9PiBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy88QHNjb3BlPi88bmFtZT4vLS88bmFtZT4tPHZlcnNpb24+LnRnelxuICAvLyAtIHN0YWdpbmdLZXkgICAgICAgICA9PiAgICAgICAgICAgICAgICAgICAgIHN0YWdlZC88QHNjb3BlPi88bmFtZT4vLS88bmFtZT4tPHZlcnNpb24+LnRnelxuICBjb25zdCBzdGFnaW5nS2V5ID0gYCR7UzNLZXlQcmVmaXguU1RBR0VEX0tFWV9QUkVGSVh9JHtcbiAgICBuZXcgVVJMKGV2ZW50LnRhcmJhbGxVcmwpLnBhdGhuYW1lXG4gIH1gLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKTtcbiAgY29uc29sZS5sb2coYFN0b3JpbmcgdGFyYmFsbCBpbiBzdGFnaW5nIGJ1Y2tldCB3aXRoIGtleSAke3N0YWdpbmdLZXl9YCk7XG4gIGF3YWl0IFMzX0NMSUVOVC5zZW5kKFxuICAgIG5ldyBQdXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogc3RhZ2luZ0J1Y2tldCxcbiAgICAgIEtleTogc3RhZ2luZ0tleSxcbiAgICAgIEJvZHk6IHRhcmJhbGwsXG4gICAgICBDb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICAnTGFtYmRhLUxvZy1Hcm91cCc6IGNvbnRleHQubG9nR3JvdXBOYW1lLFxuICAgICAgICAnTGFtYmRhLUxvZy1TdHJlYW0nOiBjb250ZXh0LmxvZ1N0cmVhbU5hbWUsXG4gICAgICAgICdMYW1iZGEtUnVuLUlkJzogY29udGV4dC5hd3NSZXF1ZXN0SWQsXG4gICAgICAgICdNb2RpZmllZC1BdCc6IGV2ZW50Lm1vZGlmaWVkLFxuICAgICAgICAnT3JpZ2luLUludGVncml0eSc6IGV2ZW50LmludGVncml0eSxcbiAgICAgICAgJ09yaWdpbi1VUkknOiBldmVudC50YXJiYWxsVXJsLFxuICAgICAgICAvLyBTZXEgbWlnaHQgbm90IGJlIHByZXNlbnQuLi4gc28gc2tpcCBpdCBpZiBhYnNlbnQuLi5cbiAgICAgICAgLi4uKGV2ZW50LnNlcSA/IHsgU2VxdWVuY2U6IGV2ZW50LnNlcSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9KVxuICApO1xuXG4gIC8vIFByZXBhcmUgaW5nZXN0aW9uIHJlcXVlc3RcbiAgY29uc3QgbWVzc2FnZSA9IGludGVncml0eShcbiAgICB7XG4gICAgICB0YXJiYWxsVXJpOiBgczM6Ly8ke3N0YWdpbmdCdWNrZXR9LyR7c3RhZ2luZ0tleX1gLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZGlzdDogZXZlbnQudGFyYmFsbFVybCxcbiAgICAgICAgaW50ZWdyaXR5OiBldmVudC5pbnRlZ3JpdHksXG4gICAgICAgIG1vZGlmaWVkOiBldmVudC5tb2RpZmllZCxcbiAgICAgICAgLy8gU2VxIG1pZ2h0IG5vdCBiZSBwcmVzZW50Li4uIHNvIHNraXAgaXQgaWYgYWJzZW50Li4uXG4gICAgICAgIC4uLihldmVudC5zZXEgPyB7IHNlcTogZXZlbnQuc2VxIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgdGltZTogZXZlbnQubW9kaWZpZWQsXG4gICAgfSxcbiAgICB0YXJiYWxsXG4gICk7XG5cbiAgLy8gU2VuZCBtZXNzYWdlIHRvIFNRU1xuICBjb25zb2xlLmxvZyhcbiAgICBgU2VuZGluZyBtZXNzYWdlIHRvIENvbnN0cnVjdEh1YiBpbmdlc3Rpb24gcXVldWU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBtZXNzYWdlLFxuICAgICAgbnVsbCxcbiAgICAgIDJcbiAgICApfWBcbiAgKTtcbiAgYXdhaXQgU1FTX0NMSUVOVC5zZW5kKFxuICAgIG5ldyBTZW5kTWVzc2FnZUNvbW1hbmQoe1xuICAgICAgTWVzc2FnZUJvZHk6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICAgICAgTWVzc2FnZUF0dHJpYnV0ZXM6IHtcbiAgICAgICAgJ0xhbWJkYS1Mb2ctR3JvdXAnOiB7XG4gICAgICAgICAgRGF0YVR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgIFN0cmluZ1ZhbHVlOiBjb250ZXh0LmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgJ0xhbWJkYS1Mb2ctU3RyZWFtJzoge1xuICAgICAgICAgIERhdGFUeXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICBTdHJpbmdWYWx1ZTogY29udGV4dC5sb2dTdHJlYW1OYW1lLFxuICAgICAgICB9LFxuICAgICAgICAnTGFtYmRhLVJ1bi1JZCc6IHtcbiAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgU3RyaW5nVmFsdWU6IGNvbnRleHQuYXdzUmVxdWVzdElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFF1ZXVlVXJsOiBxdWV1ZVVybCxcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VWZXJzaW9uIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGlmaWVkOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgdGFyYmFsbFVybDogc3RyaW5nO1xuICByZWFkb25seSBpbnRlZ3JpdHk6IHN0cmluZztcblxuICByZWFkb25seSBzZXE/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWFrZXMgYW4gSFRUUCBHRVQgcmVxdWVzdCwgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBwYXlsb2FkLlxuICpcbiAqIEBwYXJhbSB1cmwgdGhlIFVSTCB0byBnZXQuXG4gKlxuICogQHJldHVybnMgYSBCdWZmZXIgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZGF0YS5cbiAqL1xuZnVuY3Rpb24gaHR0cEdldCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigob2ssIGtvKSA9PiB7XG4gICAgaHR0cHMuZ2V0KHVybCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAga28obmV3IEh0dHBOb3RGb3VuZEVycm9yKCkpO1xuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAga28oXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VjY2Vzc2Z1bCBHRVQ6ICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0gLSAke3Jlc3BvbnNlLnN0YXR1c01lc3NhZ2V9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHkgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICByZXNwb25zZS5vbihcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAoY2h1bmspID0+IChib2R5ID0gQnVmZmVyLmNvbmNhdChbYm9keSwgQnVmZmVyLmZyb20oY2h1bmspXSkpXG4gICAgICApO1xuICAgICAgcmVzcG9uc2Uub25jZSgnY2xvc2UnLCAoKSA9PiBvayhib2R5KSk7XG4gICAgICByZXNwb25zZS5vbmNlKCdlcnJvcicsIGtvKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYW5kLW5vdGlmeS5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFja2FnZS1zb3VyY2VzL25wbWpzL3N0YWdlLWFuZC1ub3RpZnkubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBLDBCQWlIQztBQWpKRCw2Q0FBK0I7QUFDL0IsNkJBQTBCO0FBQzFCLGtEQUFzRDtBQUN0RCxvREFBeUQ7QUFHekQsdUZBQThFO0FBQzlFLDhFQUErRTtBQUMvRSw4RUFBb0U7QUFDcEUsMEZBQXlFO0FBQ3pFLGdGQUFxRTtBQUVyRSxNQUFNLGlCQUFrQixTQUFRLEtBQUs7Q0FBRztBQUV4Qzs7R0FFRztBQUNILE1BQU0sZUFBZSxHQUFHO0lBQ3RCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFVBQVUsRUFBRSxNQUFNO0NBQ25CLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQzNCLEtBQWdDLEVBQ2hDLE9BQWdCO0lBRWhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXhELElBQUksU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLCtEQUErRDtRQUMvRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBbUIsQ0FBQztRQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFBLDhCQUFV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LENBQUMsVUFBVSxNQUFNLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FDdkUsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsUUFBUSxDQUFDLEVBQUUsQ0FDVCxNQUFNLEVBQ04sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztZQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IFB1dE9iamVjdENvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNxcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFNRU0V2ZW50IH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTM0tleVByZWZpeCB9IGZyb20gJy4vY29uc3RhbnRzLmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgRGVueUxpc3RDbGllbnQgfSBmcm9tICcuLi8uLi9iYWNrZW5kL2RlbnktbGlzdC9jbGllbnQubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBTM19DTElFTlQsIFNRU19DTElFTlQgfSBmcm9tICcuLi8uLi9iYWNrZW5kL3NoYXJlZC9hd3MubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyByZXF1aXJlRW52IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgaW50ZWdyaXR5IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9zaGFyZWQvaW50ZWdyaXR5LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgbm93LCBzbGVlcCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL3RpbWUubGFtYmRhLXNoYXJlZCc7XG5cbmNsYXNzIEh0dHBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBSZXRyeSBjb25maWd1cmF0aW9uIGZvciB0YXJiYWxsIGRvd25sb2FkcyB0aGF0IHJldHVybiBIVFRQIDQwNC5cbiAqL1xuY29uc3QgTk9UX0ZPVU5EX1JFVFJZID0ge1xuICBiYXNlRGVsYXlNczogMV8wMDAsXG4gIG1heERlbGF5TXM6IDhfMDAwLFxuICBkZWFkbGluZU1zOiA2MF8wMDAsXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0aGUgYG5wbS1qcy1mb2xsb3dlci5sYW1iZGFgICB3aXRoIGEgYFBhY2thZ2VWZXJzaW9uYCBvYmplY3QsIG9yIGJ5XG4gKiBhbiBTUVMgdHJpZ2dlciBmZWVkaW5nIGZyb20gdGhpcyBmdW5jdGlvbidzIERlYWQtTGV0dGVyIFF1ZXVlIChmb3IgcmUtdHJ5aW5nIHB1cnBvc2VzKS5cbiAqXG4gKiBUaGUgcGF5bG9hZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGRpc2NvdmVyZWQgbmV3IHBhY2thZ2UgdmVyc2lvbi4gVGhpcyBoYW5kbGVyIHdpbGxcbiAqIGNoZWNrIHRoZSBwYWNrYWdlIGlzIG5vdCBkZW55LWxpc3RlZCwgZG93bmxvYWQgdGhlIHRhcmJhbGwgZnJvbSB0aGUgcGF5bG9hZCdzIGB0YXJiYWxsVXJsYCwgc3RvcmVcbiAqIGl0IGluIHRoZSBzdGFnaW5nIGJ1Y2tldCwgdGhlbiBzZW5kIGEgbWVzc2FnZSB0byB0aGUgQ29uc3RydWN0SHViIGluZ2VzdGlvbiBTUVMgcXVldWUgaW4gb3JkZXIgdG9cbiAqIHRyaWdnZXIgaW5nZXN0aW9uIG9mIHRoaXMgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoXG4gIGV2ZW50OiBQYWNrYWdlVmVyc2lvbiB8IFNRU0V2ZW50LFxuICBjb250ZXh0OiBDb250ZXh0XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS5sb2coYEV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKX1gKTtcblxuICBpZiAoJ1JlY29yZHMnIGluIGV2ZW50KSB7XG4gICAgLy8gQVRURU5USU9OOiBBc3N1bWVzIHRoZXJlIGlzIG9ubHkgZXhhY3RseSAxIGV2ZW50IGluIHRoZXJlLi4uXG4gICAgZXZlbnQgPSBKU09OLnBhcnNlKGV2ZW50LlJlY29yZHNbMF0uYm9keSkgYXMgUGFja2FnZVZlcnNpb247XG4gICAgY29uc29sZS5sb2coYEV2ZW50IChleHRyYWN0ZWQpOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHN0YWdpbmdCdWNrZXQgPSByZXF1aXJlRW52KCdCVUNLRVRfTkFNRScpO1xuICBjb25zdCBxdWV1ZVVybCA9IHJlcXVpcmVFbnYoJ1FVRVVFX1VSTCcpO1xuXG4gIGNvbnN0IGRlbnlMaXN0ID0gYXdhaXQgRGVueUxpc3RDbGllbnQubmV3Q2xpZW50KCk7XG4gIGNvbnN0IGRlbnlSdWxlID0gZGVueUxpc3QubG9va3VwKGV2ZW50Lm5hbWUsIGV2ZW50LnZlcnNpb24pO1xuICBpZiAoZGVueVJ1bGUgIT0gbnVsbCkge1xuICAgIGNvbnNvbGUubG9nKGBQYWNrYWdlIHdhcyBkZW55LWxpc3RlZDogJHtkZW55UnVsZS5yZWFzb259YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHRhcmJhbGw6IEJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICB0YXJiYWxsID0gYXdhaXQgZG93bmxvYWRUYXJiYWxsKGV2ZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgSHR0cE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgIC8vIFRoZSB0YXJiYWxsIGlzIHN0aWxsIG5vdCBhdmFpbGFibGUsIGV2ZW4gYWZ0ZXIgcmV0cnlpbmcgZm9yIGEgd2hpbGVcbiAgICAgIC8vIChzZWUgYGRvd25sb2FkVGFyYmFsbGApLiBJdCBpcyBwcm9iYWJseSBwZXJtYW5lbnRseSBtaXNzaW5nIChlLmc6IHRoZVxuICAgICAgLy8gdmVyc2lvbiB3YXMgdW5wdWJsaXNoZWQpLiBJZiB3ZSB0aHJvdyBhbiBlcnJvciwgdGhlIG1lc3NhZ2Ugd2lsbCBiZVxuICAgICAgLy8gc2VudCB0byB0aGUgRExRLCB0byBiZSBwcm9jZXNzZWQgYWdhaW4gaW4gYSByZS1kcml2ZS4gQnV0IGdpdmVuIHRoYXRcbiAgICAgIC8vIHRoaXMgZmlsZSB3aWxsIHByb2JhYmx5IG5ldmVyIGJlIGF2YWlsYWJsZSwgdGhlIHJlLWRyaXZlcyB3aWxsIGFsc29cbiAgICAgIC8vIGZhaWwsIGFuZCB3ZSdsbCBuZXZlciBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhlIG1lc3NhZ2UgaW4gdGhlIERMUS5cbiAgICAgIC8vIEluc3RlYWQsIHdlIGlnbm9yZSB0aGlzIHZlcnNpb24gYnkgcmV0dXJuaW5nIHNpbGVudGx5LlxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBUYXJiYWxsIG5vdCBmb3VuZCBmb3IgJHtldmVudC5uYW1lfUAke2V2ZW50LnZlcnNpb259IChtb2RpZmllZCAke2V2ZW50Lm1vZGlmaWVkfSksIGlnbm9yaW5nIHRoaXMgdmVyc2lvbjogJHtldmVudC50YXJiYWxsVXJsfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RvcmUgdGhlIHRhcmJhbGwgaW50byB0aGUgc3RhZ2luZyBidWNrZXRcbiAgLy8gLSBpbmZvcy5kaXN0LnRhcmJhbGwgPT4gaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvPEBzY29wZT4vPG5hbWU+Ly0vPG5hbWU+LTx2ZXJzaW9uPi50Z3pcbiAgLy8gLSBzdGFnaW5nS2V5ICAgICAgICAgPT4gICAgICAgICAgICAgICAgICAgICBzdGFnZWQvPEBzY29wZT4vPG5hbWU+Ly0vPG5hbWU+LTx2ZXJzaW9uPi50Z3pcbiAgY29uc3Qgc3RhZ2luZ0tleSA9IGAke1MzS2V5UHJlZml4LlNUQUdFRF9LRVlfUFJFRklYfSR7XG4gICAgbmV3IFVSTChldmVudC50YXJiYWxsVXJsKS5wYXRobmFtZVxuICB9YC5yZXBsYWNlKC9cXC97Mix9L2csICcvJyk7XG4gIGNvbnNvbGUubG9nKGBTdG9yaW5nIHRhcmJhbGwgaW4gc3RhZ2luZyBidWNrZXQgd2l0aCBrZXkgJHtzdGFnaW5nS2V5fWApO1xuICBhd2FpdCBTM19DTElFTlQuc2VuZChcbiAgICBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IHN0YWdpbmdCdWNrZXQsXG4gICAgICBLZXk6IHN0YWdpbmdLZXksXG4gICAgICBCb2R5OiB0YXJiYWxsLFxuICAgICAgQ29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgJ0xhbWJkYS1Mb2ctR3JvdXAnOiBjb250ZXh0LmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgJ0xhbWJkYS1Mb2ctU3RyZWFtJzogY29udGV4dC5sb2dTdHJlYW1OYW1lLFxuICAgICAgICAnTGFtYmRhLVJ1bi1JZCc6IGNvbnRleHQuYXdzUmVxdWVzdElkLFxuICAgICAgICAnTW9kaWZpZWQtQXQnOiBldmVudC5tb2RpZmllZCxcbiAgICAgICAgJ09yaWdpbi1JbnRlZ3JpdHknOiBldmVudC5pbnRlZ3JpdHksXG4gICAgICAgICdPcmlnaW4tVVJJJzogZXZlbnQudGFyYmFsbFVybCxcbiAgICAgICAgLy8gU2VxIG1pZ2h0IG5vdCBiZSBwcmVzZW50Li4uIHNvIHNraXAgaXQgaWYgYWJzZW50Li4uXG4gICAgICAgIC4uLihldmVudC5zZXEgPyB7IFNlcXVlbmNlOiBldmVudC5zZXEgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKTtcblxuICAvLyBQcmVwYXJlIGluZ2VzdGlvbiByZXF1ZXN0XG4gIGNvbnN0IG1lc3NhZ2UgPSBpbnRlZ3JpdHkoXG4gICAge1xuICAgICAgdGFyYmFsbFVyaTogYHMzOi8vJHtzdGFnaW5nQnVja2V0fS8ke3N0YWdpbmdLZXl9YCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGRpc3Q6IGV2ZW50LnRhcmJhbGxVcmwsXG4gICAgICAgIGludGVncml0eTogZXZlbnQuaW50ZWdyaXR5LFxuICAgICAgICBtb2RpZmllZDogZXZlbnQubW9kaWZpZWQsXG4gICAgICAgIC8vIFNlcSBtaWdodCBub3QgYmUgcHJlc2VudC4uLiBzbyBza2lwIGl0IGlmIGFic2VudC4uLlxuICAgICAgICAuLi4oZXZlbnQuc2VxID8geyBzZXE6IGV2ZW50LnNlcSB9IDoge30pLFxuICAgICAgfSxcbiAgICAgIHRpbWU6IGV2ZW50Lm1vZGlmaWVkLFxuICAgIH0sXG4gICAgdGFyYmFsbFxuICApO1xuXG4gIC8vIFNlbmQgbWVzc2FnZSB0byBTUVNcbiAgY29uc29sZS5sb2coXG4gICAgYFNlbmRpbmcgbWVzc2FnZSB0byBDb25zdHJ1Y3RIdWIgaW5nZXN0aW9uIHF1ZXVlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKX1gXG4gICk7XG4gIGF3YWl0IFNRU19DTElFTlQuc2VuZChcbiAgICBuZXcgU2VuZE1lc3NhZ2VDb21tYW5kKHtcbiAgICAgIE1lc3NhZ2VCb2R5OiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgICAgIE1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAgICAgICdMYW1iZGEtTG9nLUdyb3VwJzoge1xuICAgICAgICAgIERhdGFUeXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICBTdHJpbmdWYWx1ZTogY29udGV4dC5sb2dHcm91cE5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgICdMYW1iZGEtTG9nLVN0cmVhbSc6IHtcbiAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgU3RyaW5nVmFsdWU6IGNvbnRleHQubG9nU3RyZWFtTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgJ0xhbWJkYS1SdW4tSWQnOiB7XG4gICAgICAgICAgRGF0YVR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgIFN0cmluZ1ZhbHVlOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBRdWV1ZVVybDogcXVldWVVcmwsXG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlVmVyc2lvbiB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2RpZmllZDogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHRhcmJhbGxVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaW50ZWdyaXR5OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgc2VxPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyB0aGUgdGFyYmFsbCBmb3IgYSBwYWNrYWdlIHZlcnNpb24sIHJldHJ5aW5nIEhUVFAgNDA0IHJlc3BvbnNlc1xuICogZm9yIGEgd2hpbGU6IG5wbSBtZXRhZGF0YSBtYXkgcHJvcGFnYXRlIGZhc3RlciB0aGFuIHRhcmJhbGxzLCBzbyBhIGZyZXNobHlcbiAqIHB1Ymxpc2hlZCB2ZXJzaW9uIGNhbiB0cmFuc2llbnRseSA0MDQgZXZlbiB0aG91Z2ggaXQgd2lsbCBiZSBhdmFpbGFibGVcbiAqIHNob3J0bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkVGFyYmFsbChldmVudDogUGFja2FnZVZlcnNpb24pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBzdGFydFRpbWUgPSBub3coKTtcbiAgbGV0IGF0dGVtcHQgPSAwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhgRG93bmxvYWRpbmcgdGFyYmFsbCBmcm9tIFVSTDogJHtldmVudC50YXJiYWxsVXJsfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBHZXQoZXZlbnQudGFyYmFsbFVybCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhKGUgaW5zdGFuY2VvZiBIdHRwTm90Rm91bmRFcnJvcikgfHxcbiAgICAgICAgbm93KCkgLSBzdGFydFRpbWUgPj0gTk9UX0ZPVU5EX1JFVFJZLmRlYWRsaW5lTXNcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1heChcbiAgICAgICAgTk9UX0ZPVU5EX1JFVFJZLmJhc2VEZWxheU1zLFxuICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgIE1hdGgucmFuZG9tKCkgKlxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIE5PVF9GT1VORF9SRVRSWS5iYXNlRGVsYXlNcyAqIE1hdGgucG93KDIsIGF0dGVtcHQpLFxuICAgICAgICAgICAgICBOT1RfRk9VTkRfUkVUUlkubWF4RGVsYXlNc1xuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBUYXJiYWxsIG5vdCBmb3VuZCAoSFRUUCA0MDQpLCByZXRyeWluZyBpbiAke2RlbGF5fSBtczogJHtldmVudC50YXJiYWxsVXJsfWBcbiAgICAgICk7XG4gICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFrZXMgYW4gSFRUUCBHRVQgcmVxdWVzdCwgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBwYXlsb2FkLlxuICpcbiAqIEBwYXJhbSB1cmwgdGhlIFVSTCB0byBnZXQuXG4gKlxuICogQHJldHVybnMgYSBCdWZmZXIgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZGF0YS5cbiAqL1xuZnVuY3Rpb24gaHR0cEdldCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigob2ssIGtvKSA9PiB7XG4gICAgaHR0cHMuZ2V0KHVybCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAga28obmV3IEh0dHBOb3RGb3VuZEVycm9yKCkpO1xuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAga28oXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VjY2Vzc2Z1bCBHRVQ6ICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0gLSAke3Jlc3BvbnNlLnN0YXR1c01lc3NhZ2V9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHkgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICByZXNwb25zZS5vbihcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAoY2h1bmspID0+IChib2R5ID0gQnVmZmVyLmNvbmNhdChbYm9keSwgQnVmZmVyLmZyb20oY2h1bmspXSkpXG4gICAgICApO1xuICAgICAgcmVzcG9uc2Uub25jZSgnY2xvc2UnLCAoKSA9PiBvayhib2R5KSk7XG4gICAgICByZXNwb25zZS5vbmNlKCdlcnJvcicsIGtvKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -45,7 +45,7 @@ const NO_CHANGES_ALARM_DURATION = aws_cdk_lib_1.Duration.hours(24);
|
|
|
45
45
|
*/
|
|
46
46
|
class NpmJs {
|
|
47
47
|
props;
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.sources.NpmJs", version: "0.4.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.sources.NpmJs", version: "0.4.522" };
|
|
49
49
|
constructor(props = {}) {
|
|
50
50
|
this.props = props;
|
|
51
51
|
}
|
|
@@ -155,6 +155,16 @@ class NpmJs {
|
|
|
155
155
|
},
|
|
156
156
|
{ name: 'Stager', url: (0, deep_link_1.lambdaFunctionUrl)(stager) },
|
|
157
157
|
{ name: 'Stager DLQ', url: (0, deep_link_1.sqsQueueUrl)(stager.deadLetterQueue) },
|
|
158
|
+
{
|
|
159
|
+
name: 'Pipeline Trace (Log Analytics)',
|
|
160
|
+
url: (0, deep_link_1.logAnalyticsUrl)([follower, stager], [
|
|
161
|
+
'fields @timestamp, @log, @message',
|
|
162
|
+
`| filter @message like /${this.props.canaryPackage ?? 'construct-hub-probe'}/`,
|
|
163
|
+
'# filter @message like /<version>/ <- narrow down to a stuck version',
|
|
164
|
+
'| sort @timestamp desc',
|
|
165
|
+
'| limit 100',
|
|
166
|
+
].join('\n')),
|
|
167
|
+
},
|
|
158
168
|
],
|
|
159
169
|
dashboardWidgets: [
|
|
160
170
|
[
|
|
@@ -547,15 +557,19 @@ class NpmJs {
|
|
|
547
557
|
],
|
|
548
558
|
leftYAxis: { min: 0 },
|
|
549
559
|
}),
|
|
550
|
-
new aws_cloudwatch_1.
|
|
560
|
+
new aws_cloudwatch_1.LogQueryWidget({
|
|
551
561
|
height: 6,
|
|
552
562
|
width: 12,
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
'
|
|
557
|
-
'
|
|
558
|
-
|
|
563
|
+
title: 'Stuck Versions (still not visible in ConstructHub)',
|
|
564
|
+
logGroupNames: [canary.logGroupName],
|
|
565
|
+
queryLines: [
|
|
566
|
+
'fields @timestamp, @message',
|
|
567
|
+
'filter @message like /"DwellTime"/',
|
|
568
|
+
`parse @message '"PackageVersion":"*"' as version`,
|
|
569
|
+
`parse @message '"DwellTime":*,' as dwellTimeSec`,
|
|
570
|
+
'stats max(dwellTimeSec) as maxDwellTimeSec by version',
|
|
571
|
+
'sort maxDwellTimeSec desc',
|
|
572
|
+
],
|
|
559
573
|
}),
|
|
560
574
|
];
|
|
561
575
|
}
|
|
@@ -567,4 +581,4 @@ exports.NpmJs = NpmJs;
|
|
|
567
581
|
function howOften(rate, duration) {
|
|
568
582
|
return Math.ceil(duration.toSeconds() / rate.toSeconds());
|
|
569
583
|
}
|
|
570
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtanMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFja2FnZS1zb3VyY2VzL25wbWpzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBdUM7QUFDdkMsK0RBWW9DO0FBQ3BDLHVEQUF3RDtBQUN4RCx1RUFBZ0U7QUFDaEUsdURBQWlEO0FBQ2pELG1GQUFzRTtBQUN0RSwrQ0FBZ0U7QUFDaEUsaURBQTZEO0FBRTdELGdDQUF1QztBQUN2Qyw0Q0FBMkU7QUFDM0Usa0RBQTZDO0FBQzdDLDhDQUF5QztBQUN6QywyQ0FBb0Q7QUFDcEQsNkVBTXlDO0FBQ3pDLDZEQUF3RDtBQUN4RCwrREFBMEQ7QUFPMUQsZ0RBQTZDO0FBQzdDLDJDQUFpRDtBQUNqRCwrRUFBeUU7QUFFekU7Ozs7R0FJRztBQUNILE1BQU0saUJBQWlCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLHNCQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBOENyRDs7R0FFRztBQUNILE1BQWEsS0FBSztJQUNvQjs7SUFBcEMsWUFBb0MsUUFBb0IsRUFBRTtRQUF0QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUNULEtBQWdCLEVBQ2hCLEVBQ0UsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixLQUFLLEVBQ0wsVUFBVSxFQUNWLGlCQUFpQixHQUNRO1FBRTNCLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsRCxNQUFNLGNBQWMsR0FBRywwQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3hCLGNBQWMsQ0FBQyxTQUFTLENB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cm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBbGFybVJ1bGUsXG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgQ29tcG9zaXRlQWxhcm0sXG4gIEdyYXBoV2lkZ2V0LFxuICBJV2lkZ2V0LFxuICBNYXRoRXhwcmVzc2lvbixcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBTdGF0aXN0aWMsXG4gIFRleHRXaWRnZXQsXG4gIFRyZWF0TWlzc2luZ0RhdGEsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBUcmFjaW5nIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBCbG9ja1B1YmxpY0FjY2VzcywgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFsYXJtU2V2ZXJpdHkgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgbGFtYmRhRnVuY3Rpb25VcmwsIHMzT2JqZWN0VXJsLCBzcXNRdWV1ZVVybCB9IGZyb20gJy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBmaWxsTWV0cmljIH0gZnJvbSAnLi4vbWV0cmljLXV0aWxzJztcbmltcG9ydCB7IGFkZEFsYXJtIH0gZnJvbSAnLi4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBOcG1Kc1BhY2thZ2VDYW5hcnkgfSBmcm9tICcuL25wbWpzL2NhbmFyeSc7XG5pbXBvcnQge1xuICBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG4gIE1BUktFUl9GSUxFX05BTUUsXG4gIE1FVFJJQ1NfTkFNRVNQQUNFLFxuICBNZXRyaWNOYW1lLFxuICBTM0tleVByZWZpeCxcbn0gZnJvbSAnLi9ucG1qcy9jb25zdGFudHMubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBOcG1Kc0ZvbGxvd2VyIH0gZnJvbSAnLi9ucG1qcy9ucG0tanMtZm9sbG93ZXInO1xuaW1wb3J0IHsgU3RhZ2VBbmROb3RpZnkgfSBmcm9tICcuL25wbWpzL3N0YWdlLWFuZC1ub3RpZnknO1xuaW1wb3J0IHsgSU1vbml0b3JpbmcgfSBmcm9tICcuLi9tb25pdG9yaW5nL2FwaSc7XG5pbXBvcnQgdHlwZSB7XG4gIElQYWNrYWdlU291cmNlLFxuICBQYWNrYWdlU291cmNlQmluZE9wdGlvbnMsXG4gIFBhY2thZ2VTb3VyY2VCaW5kUmVzdWx0LFxufSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZSc7XG5pbXBvcnQgeyBSVU5CT09LX1VSTCB9IGZyb20gJy4uL3J1bmJvb2stdXJsJztcbmltcG9ydCB7IFMzU3RvcmFnZUZhY3RvcnkgfSBmcm9tICcuLi9zMy9zdG9yYWdlJztcbmltcG9ydCB7IFJlU3RhZ2VQYWNrYWdlVmVyc2lvbiB9IGZyb20gJy4vbnBtanMvcmUtc3RhZ2UtcGFja2FnZS12ZXJzaW9uJztcblxuLyoqXG4gKiBUaGUgcGVyaW9kaWNpdHkgYXQgd2hpY2ggdGhlIE5wbUpzIGZvbGxvd2VyIHdpbGwgcnVuLiBUaGlzIE1VU1QgYmUgYSB2YWxpZFxuICogQ2xvdWRXYXRjaCBNZXRyaWMgZ3JhaW4sIGFzIHRoaXMgd2lsbCBhbHNvIGJlIHRoZSBwZXJpb2Qgb2YgdGhlIENsb3VkV2F0Y2hcbiAqIGFsYXJtIHRoYXQgbW9uaXRvcnMgdGhlIGhlYWx0aCBvZiB0aGUgZm9sbG93ZXIuXG4gKi9cbmNvbnN0IEZPTExPV0VSX1JVTl9SQVRFID0gRHVyYXRpb24ubWludXRlcyg1KTtcblxuLyoqXG4gKiBBbGFybSBpZiB3ZSBoYXZlbid0IHNlZW4gY2hhbmdlcyBvdmVyIHRoaXMgdGltZVxuICpcbiAqIFRoZSBDb3VjaERCIGxlYWRlciBvY2Nhc2lvbmFsbHkganVzdCBzdGFydHMgdG9zc2luZyBvdXQgdGltZW91dHMgYW5kIHRoZXlcbiAqIG1heSBsYXN0IGZvciBhIGdvb2Qgd2hpbGUuXG4gKlxuICogLSBPbiAyMDIyLTA5LTI5IGl0IHdhcyBzbG93IGZvciAxMiBob3Vycy5cbiAqIC0gT24gMjAyMi0xMC0wNCBpdCB3YXMgc2xvdyBmb3IgMiBob3Vycy5cbiAqXG4gKiBUaGlzIGlzIGxlYWRpbmcgdG8gZXh0cmVtZSBhbGFybSBmYXRpZ3VlLCBhbmQgYWxzbyB0aGlzIGFsYXJtIGlzIG5vbi1hY3Rpb25hYmxlLlxuICogTGV0J3MgYmUgdmVyeSB2ZXJ5IGNvbnNlcnZhdGl2ZSBoZXJlLlxuICovXG5jb25zdCBOT19DSEFOR0VTX0FMQVJNX0RVUkFUSU9OID0gRHVyYXRpb24uaG91cnMoMjQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5wbUpzUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCB0byB1c2UgZm9yIHN0YWdpbmcgbnBtIHBhY2thZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nQnVja2V0PzogSUJ1Y2tldDtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGFja2FnZSBjYW5hcnksIHdoaWNoIHdpbGwgdHJhY2sgYXZhaWxhYmlsaXR5IG9mIGEgY2FuYXJ5XG4gICAqIHBhY2thZ2UgaW4gQ29uc3RydWN0SHViLCBhbmQgZW1pdCBkZWRpY2F0ZWQgbWV0cmljcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQ2FuYXJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgdGhhdCBpcyBtb25pdG9yZWQgYnkgdGhlIHBhY2thZ2UgY2FuYXJ5LCBpZiBlbmFibGVkIGJ5XG4gICAqIGBlbmFibGVDYW5hcnlgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnY29uc3RydWN0LWh1Yi1wcm9iZSdcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeVBhY2thZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIGl0IGlzIHN1cHBvc2VkIHRvIHRha2UgZm9yIHBhY2thZ2VzIHRvIGJlY29tZVxuICAgKiB2aXNpYmxlIGluIHRoaXMgQ29uc3RydWN0SHViIGluc3RhbmNlLiBJZiBgZW5hYmxlQ2FuYXJ5YCBpcyBlbmFibGVkLCBhblxuICAgKiBhbGFybSB3aWxsIHRyaWdnZXIgaWYgdGhpcyBTTEEgaXMgYnJlYWNoZWQgYnkgdGhlIGBjYW5hcnlQYWNrYWdlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5U2xhPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBjYW5hcnkgcGFja2FnZSBpcyBleHBlY3RlZCB0byBnbyB3aXRob3V0XG4gICAqIHB1Ymxpc2hpbmcgYSBuZXcgdmVyc2lvbi4gSWYgZXhjZWVkZWQsIGFuIGFsYXJtIHdpbGwgZmlyZSBpbmRpY2F0aW5nIHRoZVxuICAgKiBjYW5hcnkgcGFja2FnZSBtYXkgaGF2ZSBzdG9wcGVkIHB1Ymxpc2hpbmcsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBTTEFcbiAgICogYWxhcm0gYmxpbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmRheXMoMSlcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeU1heFN0YWxlPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogQSBwYWNrYWdlIHNvdXJjZSB0aGF0IGdldHMgcGFja2FnZSBkYXRhIGZyb20gdGhlIG5wbWpzLmNvbSBwYWNrYWdlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY2xhc3MgTnBtSnMgaW1wbGVtZW50cyBJUGFja2FnZVNvdXJjZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBOcG1Kc1Byb3BzID0ge30pIHt9XG5cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB7XG4gICAgICBiYXNlVXJsLFxuICAgICAgZGVueUxpc3QsXG4gICAgICBpbmdlc3Rpb24sXG4gICAgICBsaWNlbnNlTGlzdCxcbiAgICAgIG1vbml0b3JpbmcsXG4gICAgICBxdWV1ZSxcbiAgICAgIHJlcG9zaXRvcnksXG4gICAgICBvdmVydmlld0Rhc2hib2FyZCxcbiAgICB9OiBQYWNrYWdlU291cmNlQmluZE9wdGlvbnNcbiAgKTogUGFja2FnZVNvdXJjZUJpbmRSZXN1bHQge1xuICAgIHJlcG9zaXRvcnk/LmFkZEV4dGVybmFsQ29ubmVjdGlvbigncHVibGljOm5wbWpzJyk7XG5cbiAgICBjb25zdCBzdG9yYWdlRmFjdG9yeSA9IFMzU3RvcmFnZUZhY3RvcnkuZ2V0T3JDcmVhdGUoc2NvcGUpO1xuICAgIGNvbnN0IGJ1Y2tldCA9XG4gICAgICB0aGlzLnByb3BzLnN0YWdpbmdCdWNrZXQgfHxcbiAgICAgIHN0b3JhZ2VGYWN0b3J5Lm5ld0J1Y2tldChzY29wZSwgJ05wbUpzL1N0YWdpbmdCdWNrZXQnLCB7XG4gICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmVmaXg6IFMzS2V5UHJlZml4LlNUQUdFRF9LRVlfUFJFRklYLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBQZXJtYW5lbnRseSBkZWxldGUgbWFya2VyIGZpbGUgdXBkYXRlcyBhZnRlciAxIGRheSAod2UgZG9uJ3QgbmVlZCB0aGVzZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmVmaXg6IE1BUktFUl9GSUxFX05BTUUsXG4gICAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMSksXG4gICAgICAgICAgICBleHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gUGVybWFuZW50bHkgZGVsZXRlIGtub3duIHZlcnNpb24gYmFja3VwcyBhZnRlciAzMCBkYXlzXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4OiBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG4gICAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgICAgZXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgYnVja2V0LmdyYW50UmVhZChpbmdlc3Rpb24pO1xuXG4gICAgY29uc3Qgc3RhZ2VyID0gbmV3IFN0YWdlQW5kTm90aWZ5KHNjb3BlLCAnTnBtSnMtU3RhZ2VBbmROb3RpZnknLCB7XG4gICAgICBkZWFkTGV0dGVyUXVldWU6IG5ldyBRdWV1ZShzY29wZSwgJ1N0YWdlckRMUScsIHtcbiAgICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IER1cmF0aW9uLmRheXMoMTQpLFxuICAgICAgICB2aXNpYmlsaXR5VGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7c2NvcGUubm9kZS5wYXRofS9OcG1KUy1TdGFnZUFuZE5vdGlmeV0gU3RhZ2VzIHRhcmJhbGxzIHRvIFMzIGFuZCBub3RpZmllcyBDb25zdHJ1Y3RIdWJgLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgICAgQlVDS0VUX05BTUU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBRVUVVRV9VUkw6IHF1ZXVlLnF1ZXVlVXJsLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzAyNCwgLy8gMTBHaUJcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgfSk7XG5cbiAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUoc3RhZ2VyKTtcbiAgICBkZW55TGlzdD8uZ3JhbnRSZWFkKHN0YWdlcik7XG4gICAgcXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoc3RhZ2VyKTtcblxuICAgIHN0YWdlci5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZShzdGFnZXIuZGVhZExldHRlclF1ZXVlISwge1xuICAgICAgICBiYXRjaFNpemU6IDEsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9sbG93ZXIgPSBuZXcgTnBtSnNGb2xsb3dlcihzY29wZSwgJ05wbUpzJywge1xuICAgICAgZGVzY3JpcHRpb246IGBbJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzXSBQZXJpb2RpY2FsbHkgcXVlcnkgbnBtanMuY29tIGluZGV4IGZvciBuZXcgcGFja2FnZXNgLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgICAgQlVDS0VUX05BTUU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBGVU5DVElPTl9OQU1FOiBzdGFnZXIuZnVuY3Rpb25OYW1lLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzAyNCwgLy8gMTAgR2lCXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxLCAvLyBPbmx5IG9uZSBleGVjdXRpb24gYXQgYSB0aW1lLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb24gdGhlIFMzIG1hcmtlciBvYmplY3RcbiAgICAgIHRpbWVvdXQ6IEZPTExPV0VSX1JVTl9SQVRFLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgfSk7XG5cbiAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUoZm9sbG93ZXIsIE1BUktFUl9GSUxFX05BTUUpO1xuICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZShmb2xsb3dlciwgS05PV05fVkVSU0lPTlNfRklMRV9OQU1FKTtcbiAgICBkZW55TGlzdD8uZ3JhbnRSZWFkKGZvbGxvd2VyKTtcbiAgICBsaWNlbnNlTGlzdC5ncmFudFJlYWQoZm9sbG93ZXIpO1xuICAgIHN0YWdlci5ncmFudEludm9rZShmb2xsb3dlcik7XG5cbiAgICBjb25zdCByZXN0YWdlciA9IG5ldyBSZVN0YWdlUGFja2FnZVZlcnNpb24oc2NvcGUsICdSZVN0YWdlUGFja2FnZVZlcnNpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYE1hbnVhbGx5IHJlLXN0YWdlIGEgcGFja2FnZSB2ZXJzaW9uYCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEZVTkNUSU9OX05BTUU6IHN0YWdlci5mdW5jdGlvbk5hbWUsXG4gICAgICAgIFJFR0lTVFJZX1VSTDogJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJyxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgfSk7XG4gICAgc3RhZ2VyLmdyYW50SW52b2tlKHJlc3RhZ2VyKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShzY29wZSwgJ05wbUpzL1NjaGVkdWxlJywge1xuICAgICAgZGVzY3JpcHRpb246IGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvU2NoZWR1bGVgLFxuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRk9MTE9XRVJfUlVOX1JBVEUpLFxuICAgICAgdGFyZ2V0czogW25ldyBMYW1iZGFGdW5jdGlvbihmb2xsb3dlcildLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckFsYXJtcyhzY29wZSwgZm9sbG93ZXIsIHN0YWdlciwgbW9uaXRvcmluZywgcnVsZSk7XG5cbiAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlICYmXG4gICAgICBvdmVydmlld0Rhc2hib2FyZC5hZGRETFFNZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgICAgJ05QTSBKUyBTdGFnZXIgRExRJyxcbiAgICAgICAgc3RhZ2VyLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgKTtcbiAgICBmb2xsb3dlci5kZWFkTGV0dGVyUXVldWUgJiZcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkLmFkZERMUU1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgICAnTlBNIEpTIEZvbGxvd2VyIERMUScsXG4gICAgICAgIGZvbGxvd2VyLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgKTtcbiAgICBvdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBmb2xsb3dlcixcbiAgICAgICdOcG1Kc0xhbWJkYSdcbiAgICApO1xuICAgIG92ZXJ2aWV3RGFzaGJvYXJkLmFkZENvbmN1cnJlbnRFeGVjdXRpb25NZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgIHN0YWdlcixcbiAgICAgICdOcG1Kcy1TdGFnZUFuZE5vdGlmeUxhbWJkYSdcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGZvbGxvd2VyLm5vZGUucGF0aCxcbiAgICAgIGxpbmtzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnTnBtSnMgRm9sbG93ZXInLFxuICAgICAgICAgIHVybDogbGFtYmRhRnVuY3Rpb25VcmwoZm9sbG93ZXIpLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogJ01hcmtlciBPYmplY3QnLCB1cmw6IHMzT2JqZWN0VXJsKGJ1Y2tldCwgTUFSS0VSX0ZJTEVfTkFNRSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdLbm93biBWZXJzaW9ucycsXG4gICAgICAgICAgdXJsOiBzM09iamVjdFVybChidWNrZXQsIEtOT1dOX1ZFUlNJT05TX0ZJTEVfTkFNRSksXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogJ1N0YWdlcicsIHVybDogbGFtYmRhRnVuY3Rpb25Vcmwoc3RhZ2VyKSB9LFxuICAgICAgICB7IG5hbWU6ICdTdGFnZXIgRExRJywgdXJsOiBzcXNRdWV1ZVVybChzdGFnZXIuZGVhZExldHRlclF1ZXVlISkgfSxcbiAgICAgIF0sXG4gICAgICBkYXNoYm9hcmRXaWRnZXRzOiBbXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICAgICAgdGl0bGU6ICdGb2xsb3dlciBIZWFsdGgnLFxuICAgICAgICAgICAgbGVmdDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKGZvbGxvd2VyLm1ldHJpY0ludm9jYXRpb25zKHsgbGFiZWw6ICdJbnZvY2F0aW9ucycgfSkpLFxuICAgICAgICAgICAgICBmaWxsTWV0cmljKGZvbGxvd2VyLm1ldHJpY0Vycm9ycyh7IGxhYmVsOiAnRXJyb3JzJyB9KSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbGVmdFlBeGlzOiB7IG1pbjogMCB9LFxuICAgICAgICAgICAgcmlnaHQ6IFt0aGlzLm1ldHJpY1JlbWFpbmluZ1RpbWUoeyBsYWJlbDogJ1JlbWFpbmluZyBUaW1lJyB9KV0sXG4gICAgICAgICAgICByaWdodFlBeGlzOiB7IG1pbjogMCB9LFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ1N0YWdlciBIZWFsdGgnLFxuICAgICAgICAgICAgbGVmdDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKHN0YWdlci5tZXRyaWNJbnZvY2F0aW9ucyh7IGxhYmVsOiAnSW52b2NhdGlvbnMnIH0pKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhzdGFnZXIubWV0cmljRXJyb3JzKHsgbGFiZWw6ICdFcnJvcnMnIH0pKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZWZ0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICByaWdodDogW3N0YWdlci5tZXRyaWNEdXJhdGlvbih7IGxhYmVsOiAnRHVyYXRpb24nIH0pXSxcbiAgICAgICAgICAgIHJpZ2h0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICAgICAgdGl0bGU6ICdDb3VjaERCIEZvbGxvd2VyJyxcbiAgICAgICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyh0aGlzLm1ldHJpY0NoYW5nZUNvdW50KHsgbGFiZWw6ICdDaGFuZ2UgQ291bnQnIH0pLCAwKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY1VucHJvY2Vzc2FibGVFbnRpdHkoeyBsYWJlbDogJ1VucHJvY2Vzc2FibGUnIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZWZ0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICByaWdodDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKFxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljTnBtSnNDaGFuZ2VBZ2UoeyBsYWJlbDogJ0xhZyB0byBucG1qcy5jb20nIH0pLFxuICAgICAgICAgICAgICAgICdSRVBFQVQnXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNQYWNrYWdlVmVyc2lvbkFnZSh7IGxhYmVsOiAnUGFja2FnZSBWZXJzaW9uIEFnZScgfSksXG4gICAgICAgICAgICAgICAgJ1JFUEVBVCdcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByaWdodFlBeGlzOiB7IGxhYmVsOiAnTWlsbGlzZWNvbmRzJywgbWluOiAwLCBzaG93VW5pdHM6IGZhbHNlIH0sXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgICAgIHRpdGxlOiAnQ291Y2hEQiBDaGFuZ2VzJyxcbiAgICAgICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0xhc3RTZXEoeyBsYWJlbDogJ0xhc3QgU2VxdWVuY2UgTnVtYmVyJyB9KSxcbiAgICAgICAgICAgICAgICAnUkVQRUFUJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ1N0YWdlciBEZWFkLUxldHRlciBRdWV1ZScsXG4gICAgICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoXG4gICAgICAgICAgICAgICAgc3RhZ2VyLmRlYWRMZXR0ZXJRdWV1ZSEubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzVmlzaWJsZShcbiAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdWaXNpYmxlIE1lc3NhZ2VzJyB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoXG4gICAgICAgICAgICAgICAgc3RhZ2VyLmRlYWRMZXR0ZXJRdWV1ZSEubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzTm90VmlzaWJsZShcbiAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdJbnZpc2libGUgTWVzc2FnZXMnIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZWZ0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICByaWdodDogW1xuICAgICAgICAgICAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlIS5tZXRyaWNBcHByb3hpbWF0ZUFnZU9mT2xkZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdPbGRlc3QgTWVzc2FnZScsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJpZ2h0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKHRoaXMucHJvcHMuZW5hYmxlQ2FuYXJ5ID8/IHRydWVcbiAgICAgICAgICAgID8gdGhpcy5yZWdpc3RlckNhbmFyeShcbiAgICAgICAgICAgICAgICBmb2xsb3dlcixcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmNhbmFyeVBhY2thZ2UgPz8gJ2NvbnN0cnVjdC1odWItcHJvYmUnLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuY2FuYXJ5U2xhID8/IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jYW5hcnlNYXhTdGFsZSA/PyBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICAgICAgICBiYXNlVXJsLFxuICAgICAgICAgICAgICAgIG1vbml0b3JpbmdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBbXSksXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGF2ZXJhZ2UgdGltZSBpdCB0b29rIHRvIHByb2Nlc3MgYSBjaGFuZ2VzIGJhdGNoLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0JhdGNoUHJvY2Vzc2luZ1RpbWUob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5CQVRDSF9QUk9DRVNTSU5HX1RJTUUsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBjb3VudCBvZiBjaGFuZ2VzIHRoYXQgd2VyZSBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ2hhbmdlQ291bnQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLkNIQU5HRV9DT1VOVCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHRoYXQgd2FzIHByb2Nlc3NlZC4gVGhpcyBtZXRyaWMgY2FuIGJlIHVzZWQgdG9cbiAgICogZGlzY292ZXIgd2hlbiBhIHNlcXVlbmNlIHJlc2V0IGhhcyBoYXBwZW5lZCBpbiB0aGUgQ291Y2hEQiBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNMYXN0U2VxKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTEFTVF9TRVEsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY05wbUpzQ2hhbmdlQWdlKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NSU5JTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTlBNSlNfQ0hBTkdFX0FHRSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFnZSBvZiB0aGUgb2xkZXN0IHBhY2thZ2UgdmVyc2lvbiB0aGF0IHdhcyBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljUGFja2FnZVZlcnNpb25BZ2Uob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5QQUNLQUdFX1ZFUlNJT05fQUdFLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY291bnQgb2YgcGFja2FnZSB2ZXJzaW9ucyB0aGF0IHdlcmUgaW5zcGVjdGVkLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1BhY2thZ2VWZXJzaW9uQ291bnQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLlBBQ0tBR0VfVkVSU0lPTl9DT1VOVCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvdGFsIGNvdW50IG9mIHBhY2thZ2UgdmVyc2lvbnMgdGhhdCB3ZXJlIGRlZW1lZCByZWxldmFudC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNSZWxldmFudFBhY2thZ2VWZXJzaW9ucyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuUkVMRVZBTlRfUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgd2FzIHJlbWFpbmluZyB3aGVuIHRoZSBsYW1iZGEgcmV0dXJuZWQgaW4gb3JkZXIgdG9cbiAgICogYXZvaWQgaGl0dGluZyBhIHRpbWVvdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljUmVtYWluaW5nVGltZShvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUlOSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLlJFTUFJTklOR19USU1FLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNoYW5nZXMgdGhhdCB3ZXJlIG5vdCBwcm9jZXNzZWQgZHVlIHRvIGhhdmluZyBhbiBpbnZhbGlkXG4gICAqIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNVbnByb2Nlc3NhYmxlRW50aXR5KG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5VTlBST0NFU1NBQkxFX0VOVElUWSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQWxhcm1zKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZm9sbG93ZXI6IE5wbUpzRm9sbG93ZXIsXG4gICAgc3RhZ2VyOiBTdGFnZUFuZE5vdGlmeSxcbiAgICBtb25pdG9yaW5nOiBJTW9uaXRvcmluZyxcbiAgICBzY2hlZHVsZTogUnVsZVxuICApIHtcbiAgICBjb25zdCBmYWlsdXJlQWxhcm0gPSBmb2xsb3dlclxuICAgICAgLm1ldHJpY0Vycm9ycygpXG4gICAgICAuY3JlYXRlQWxhcm0oc2NvcGUsICdOcG1Kcy9Gb2xsb3dlci9GYWlsdXJlcycsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzL0ZvbGxvd2VyL0ZhaWx1cmVzYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgTnBtSnMgZm9sbG93ZXIgZnVuY3Rpb24gZmFpbGVkIScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gTGFtYmRhIGZ1bmN0aW9uOiAke2xhbWJkYUZ1bmN0aW9uVXJsKGZvbGxvd2VyKX1gLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAzLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTUlTU0lORyxcbiAgICAgIH0pO1xuICAgIG1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybSgnTnBtSnMvRm9sbG93ZXIgRmFpbHVyZXMnLCBmYWlsdXJlQWxhcm0pO1xuXG4gICAgY29uc3Qgbm90UnVubmluZ0FsYXJtID0gZm9sbG93ZXJcbiAgICAgIC5tZXRyaWNJbnZvY2F0aW9ucyh7IHBlcmlvZDogRk9MTE9XRVJfUlVOX1JBVEUgfSlcbiAgICAgIC5jcmVhdGVBbGFybShzY29wZSwgJ05wbUpzL0ZvbGxvd2VyL05vdFJ1bm5pbmcnLCB7XG4gICAgICAgIGFsYXJtTmFtZTogYCR7c2NvcGUubm9kZS5wYXRofS9OcG1Kcy9Gb2xsb3dlci9Ob3RSdW5uaW5nYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgTnBtSnMgZm9sbG93ZXIgZnVuY3Rpb24gaXMgbm90IHJ1bm5pbmchJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBEaXJlY3QgbGluayB0byBMYW1iZGEgZnVuY3Rpb246ICR7bGFtYmRhRnVuY3Rpb25VcmwoZm9sbG93ZXIpfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuQlJFQUNISU5HLFxuICAgICAgfSk7XG4gICAgbW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdOcG1Kcy9Gb2xsb3dlciBOb3QgUnVubmluZycsXG4gICAgICBub3RSdW5uaW5nQWxhcm1cbiAgICApO1xuXG4gICAgLy8gVGhlIHBlcmlvZCBmb3IgdGhpcyBhbGFybSBuZWVkcyB0byBtYXRjaCB0aGUgc2NoZWR1bGluZyBpbnRlcnZhbCBvZiB0aGVcbiAgICAvLyBmb2xsb3dlciwgb3RoZXJ3aXNlIHRoZSBtZXRyaWMgd2lsbCBiZSB0b28gc3BhcnNlIHRvIHByb3Blcmx5IGRldGVjdFxuICAgIC8vIHByb2JsZW1zLlxuICAgIGNvbnN0IG5vQ2hhbmdlQWxhcm0gPSB0aGlzLm1ldHJpY0NoYW5nZUNvdW50KHtcbiAgICAgIHBlcmlvZDogRk9MTE9XRVJfUlVOX1JBVEUsXG4gICAgfSkuY3JlYXRlQWxhcm0oc2NvcGUsICdOcG1Kcy9Gb2xsb3dlci9Ob0NoYW5nZXMnLCB7XG4gICAgICBhbGFybU5hbWU6IGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvRm9sbG93ZXIvTm9DaGFuZ2VzYCxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgJ1RoZSBOcG1KcyBmb2xsb3dlciBmdW5jdGlvbiBpcyBub3QgZGlzY292ZXJpbmcgYW55IGNoYW5nZXMgZnJvbSBDb3VjaERCIScsXG4gICAgICAgICcnLFxuICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAnJyxcbiAgICAgICAgYERpcmVjdCBsaW5rIHRvIExhbWJkYSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChmb2xsb3dlcil9YCxcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IGhvd09mdGVuKEZPTExPV0VSX1JVTl9SQVRFLCBOT19DSEFOR0VTX0FMQVJNX0RVUkFUSU9OKSxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIC8vIElmIHRoZSBtZXRyaWMgaXMgbm90IGVtaXR0ZWQsIGl0IGNhbiBiZSBhc3N1bWVkIHRvIGJlIHplcm8uXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLkJSRUFDSElORyxcbiAgICB9KTtcbiAgICBtb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnTnAgbnBtanMuY29tIGNoYW5nZXMgZGlzY292ZXJlZCcsXG4gICAgICBub0NoYW5nZUFsYXJtXG4gICAgKTtcblxuICAgIGNvbnN0IGRscU5vdEVtcHR5QWxhcm0gPSBzdGFnZXJcbiAgICAgIC5kZWFkTGV0dGVyUXVldWUhLm1ldHJpY0FwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlc1Zpc2libGUoe1xuICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICB9KVxuICAgICAgLmNyZWF0ZUFsYXJtKHNjb3BlLCBgJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzL1N0YWdlci9ETFFOb3RFbXB0eWAsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzL1N0YWdlci9ETFFOb3RFbXB0eWAsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAnVGhlIE5wbUpTIHBhY2thZ2Ugc3RhZ2VyIGlzIGZhaWxpbmcgLSBpdHMgZGVhZCBsZXR0ZXIgcXVldWUgaXMgbm90IGVtcHR5JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgTGluayB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uOiAke2xhbWJkYUZ1bmN0aW9uVXJsKHN0YWdlcil9YCxcbiAgICAgICAgICBgTGluayB0byB0aGUgZGVhZCBsZXR0ZXIgcXVldWU6ICR7c3FzUXVldWVVcmwoXG4gICAgICAgICAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlIVxuICAgICAgICAgICl9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuYm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICBdLmpvaW4oJy9uJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgfSk7XG4gICAgbW9uaXRvcmluZy5hZGRMb3dTZXZlcml0eUFsYXJtKFxuICAgICAgJ05wbUpzL1N0YWdlciBETFEgTm90IEVtcHR5JyxcbiAgICAgIGRscU5vdEVtcHR5QWxhcm1cbiAgICApO1xuXG4gICAgLy8gRmluYWxseSAtIHRoZSBcIm5vdCBydW5uaW5nXCIgYWxhcm0gZGVwZW5kcyBvbiB0aGUgc2NoZWR1bGUgKGl0IHdvbid0IHJ1biB1bnRpbCB0aGUgc2NoZWR1bGVcbiAgICAvLyBleGlzdHMhKSwgYW5kIHRoZSBzY2hlZHVsZSBkZXBlbmRzIG9uIHRoZSBmYWlsdXJlIGFsYXJtIGV4aXN0aW5nICh3ZSBkb24ndCB3YW50IGl0IHRvIHJ1blxuICAgIC8vIGJlZm9yZSB3ZSBjYW4ga25vdyBpdCBpcyBmYWlsaW5nKS4gVGhpcyBtZWFucyB0aGUgcmV0dXJuZWQgYElEZXBlbmRhYmxlYCBlZmZlY3RpdmVseSBlbnN1cmVzXG4gICAgLy8gYWxsIGFsYXJtcyBoYXZlIGJlZW4gcHJvdmlzaW9uZWQgYWxyZWFkeSEgSXNuJ3QgaXQgbmljZSFcbiAgICBub3RSdW5uaW5nQWxhcm0ubm9kZS5hZGREZXBlbmRlbmN5KHNjaGVkdWxlKTtcbiAgICBzY2hlZHVsZS5ub2RlLmFkZERlcGVuZGVuY3koZmFpbHVyZUFsYXJtKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDYW5hcnkoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIC8vIEEgZHVyYXRpb24gc3BlY2lmeWluZyBob3cgbG9uZyB3ZSBleHBlY3QgdGhlIHByb2JlIHBhY2thZ2UgdG8gYXBwZWFyIG9uXG4gICAgLy8gQ29uc3RydWN0IEh1YiBhZnRlciBpdCBnZXRzIHB1Ymxpc2hlZCB0byBucG0sIGFzc3VtaW5nIHRoZSBucG0gcmVwbGljYVxuICAgIC8vIGlzIHVwIHRvIGRhdGUgZXRjLlxuICAgIHZpc2liaWxpdHlTbGE6IER1cmF0aW9uLFxuICAgIC8vIEEgZHVyYXRpb24gc3BlY2lmeWluZyBob3cgbG9uZyB0aGUgY2FuYXJ5IHBhY2thZ2UgY2FuIGdvIHdpdGhvdXRcbiAgICAvLyBwdWJsaXNoaW5nIGEgbmV3IHZlcnNpb24gYmVmb3JlIHdlIGFsYXJtLlxuICAgIG1heFN0YWxlOiBEdXJhdGlvbixcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgY29uc3RydWN0SHViQmFzZVVybDogc3RyaW5nLFxuICAgIG1vbml0b3Jpbmc6IElNb25pdG9yaW5nXG4gICk6IElXaWRnZXRbXSB7XG4gICAgY29uc3QgY2FuYXJ5ID0gbmV3IE5wbUpzUGFja2FnZUNhbmFyeShzY29wZSwgJ0NhbmFyeScsIHtcbiAgICAgIGJ1Y2tldCxcbiAgICAgIGNvbnN0cnVjdEh1YkJhc2VVcmwsXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBlcmlvZCA9IER1cmF0aW9uLm1pbnV0ZXMoMTApOyAvLyB3ZSBydW4gY2FuYXJ5IG9uY2UgcGVyIGhvdXIsIGJ1dCBub3QgZ3VhcmFudGVlZCBleGFjdCB0aW1lc1xuICAgIGNvbnN0IGFsYXJtID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246ICdNQVgoW21Ed2VsbCwgbVRUQ10pJyxcbiAgICAgIHBlcmlvZCxcbiAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICBtRHdlbGw6IGNhbmFyeS5tZXRyaWNEd2VsbFRpbWUoKSxcbiAgICAgICAgbVRUQzogY2FuYXJ5Lm1ldHJpY1RpbWVUb0NhdGFsb2coKSxcbiAgICAgIH0sXG4gICAgfSkuY3JlYXRlQWxhcm0oY2FuYXJ5LCAnQWxhcm0nLCB7XG4gICAgICBhbGFybU5hbWU6IGAke2NhbmFyeS5ub2RlLnBhdGh9L1NMQS1CcmVhY2hlZGAsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgIGBOZXcgdmVyc2lvbnMgb2YgJHtwYWNrYWdlTmFtZX0gaGF2ZSBiZWVuIHB1Ymxpc2hlZCBvdmVyICR7dmlzaWJpbGl0eVNsYS50b0h1bWFuU3RyaW5nKCl9IGFnbyBhbmQgYXJlIHN0aWxsIG5vdCB2aXNpYmxlIGluIGNvbnN0cnVjdCBodWJgLFxuICAgICAgICBgUnVuYm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIHRocmVzaG9sZDogdmlzaWJpbGl0eVNsYS50b1NlY29uZHMoKSxcbiAgICB9KTtcbiAgICAvLyBUaGlzIGlzIGRlZW1lZCBsb3cgc2V2ZXJpdHksIGJlY2F1c2UgdGhlIG5wbSByZWdpc3RyeSByZXBsaWNhIChyZXBsaWNhdGUubnBtanMuY29tKSBjYW5cbiAgICAvLyBvY2Nhc2lvbmFsbHkgbGFnIHNldmVyYWwgaG91cnMgYmVoaW5kIHRoZSBwcmltYXJ5IChyZWdpc3RyeS5ucG1qcy5jb20pLCBhbmQgd2UgY2Fubm90IGVhc2lseVxuICAgIC8vIHRlbGwgYWJvdXQgdGhhdC4gU29tZW9uZSBzaG91bGQgaGF2ZSBhIGxvb2ssIGJ1dCBpbiB2aXJ0dWFsbHkgYWxsIGNhc2VzIHdlIGhhdmUgc2VlbiBzbyBmYXIsXG4gICAgLy8gdGhlcmUgaXMgbm90aGluZyB0aGF0IGNhbiBiZSBkb25lIGZyb20gb3VyIGVuZCwgYmVzaWRlcyB3YWl0aW5nIGZvciB0aGUgcmVwbGljYSB0byBiZSBhbGxcbiAgICAvLyBjYXVnaHQgdXAuXG4gICAgYWRkQWxhcm0oXG4gICAgICAnTmV3IHZlcnNpb24gdmlzaWJpbGl0eSBTTEEgYnJlYWNoZWQnLFxuICAgICAgYWxhcm0sXG4gICAgICBBbGFybVNldmVyaXR5LkxPVyxcbiAgICAgIG1vbml0b3JpbmdcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhbGVBbGFybSA9IGNhbmFyeVxuICAgICAgLm1ldHJpY1RpbWVTaW5jZUxhc3RQdWJsaXNoKHsgcGVyaW9kIH0pXG4gICAgICAuY3JlYXRlQWxhcm0oY2FuYXJ5LCAnU3RhbGVDYW5hcnlQYWNrYWdlJywge1xuICAgICAgICBhbGFybU5hbWU6IGAke2NhbmFyeS5ub2RlLnBhdGh9L1N0YWxlQ2FuYXJ5UGFja2FnZWAsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICBgVGhlIGNhbmFyeSBwYWNrYWdlICR7cGFja2FnZU5hbWV9IGhhcyBub3QgcHVibGlzaGVkIGEgbmV3IHZlcnNpb24gaW4gb3ZlciAke21heFN0YWxlLnRvSHVtYW5TdHJpbmcoKX0uYCxcbiAgICAgICAgICAnVGhpcyBtZWFucyB0aGUgU0xBIGFsYXJtIGlzIGJsaW5kIOKAlCBubyBuZXcgdmVyc2lvbnMgYXJlIGJlaW5nIHRyYWNrZWQsIHNvIFNMQSBicmVhY2hlcyBjYW5ub3QgYmUgZGV0ZWN0ZWQuJyxcbiAgICAgICAgICAnTWV0cmljOiBDb25zdHJ1Y3RIdWIvUGFja2FnZUNhbmFyeSAvIFRpbWVTaW5jZUxhc3RQdWJsaXNoJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuYm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5NSVNTSU5HLFxuICAgICAgICB0aHJlc2hvbGQ6IG1heFN0YWxlLnRvU2Vjb25kcygpLFxuICAgICAgfSk7XG4gICAgbW9uaXRvcmluZy5hZGRNZWRpdW1TZXZlcml0eUFsYXJtKFxuICAgICAgJ0NhbmFyeSBwYWNrYWdlIGhhcyBzdG9wcGVkIHB1Ymxpc2hpbmcgbmV3IHZlcnNpb25zJyxcbiAgICAgIHN0YWxlQWxhcm1cbiAgICApO1xuXG4gICAgY29uc3Qgbm90UnVubmluZ09yRmFpbGluZ0FsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgY2FuYXJ5LFxuICAgICAgJ05vdFJ1bm5pbmdPckZhaWxpbmcnLFxuICAgICAge1xuICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICBjYW5hcnlcbiAgICAgICAgICAgIC5tZXRyaWNFcnJvcnMoeyBwZXJpb2QsIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSB9KVxuICAgICAgICAgICAgLmNyZWF0ZUFsYXJtKGNhbmFyeSwgJ0ZhaWxpbmcnLCB7XG4gICAgICAgICAgICAgIGFsYXJtTmFtZTogYCR7Y2FuYXJ5Lm5vZGUucGF0aH0vRmFpbGluZ2AsXG4gICAgICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuQlJFQUNISU5HLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgY2FuYXJ5XG4gICAgICAgICAgICAubWV0cmljSW52b2NhdGlvbnMoeyBwZXJpb2QsIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSB9KVxuICAgICAgICAgICAgLmNyZWF0ZUFsYXJtKGNhbmFyeSwgJ05vdFJ1bm5pbmcnLCB7XG4gICAgICAgICAgICAgIGFsYXJtTmFtZTogYCR7Y2FuYXJ5Lm5vZGUucGF0aH0vTm90UnVubmluZ2AsXG4gICAgICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuQlJFQUNISU5HLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgTnBtSnMgcGFja2FnZSBjYW5hcnkgaXMgbm90IHJ1bm5pbmcgb3IgaXMgZmFpbGluZy4gVGhpcyBwcmV2ZW50cyBhbGFybWluZyB3aGVuIHRoaXMgaW5zdGFuY2Ugb2YnLFxuICAgICAgICAgICdDb25zdHJ1Y3RIdWIgZmFsbHMgb3V0IG9mIFNMQSBmb3IgbmV3IHBhY2thZ2UgaW5nZXN0aW9uIScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJ1bmJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOiBgJHtjYW5hcnkubm9kZS5wYXRofS9Ob3RSdW5uaW5nT3JGYWlsaW5nYCxcbiAgICAgIH1cbiAgICApO1xuICAgIG1vbml0b3JpbmcuYWRkSGlnaFNldmVyaXR5QWxhcm0oXG4gICAgICAnTnBtSnMgRm9sbG93ZXIgQ2FuYXJ5IGlzIG5vdCBydW5uaW5nIG9yIGZhaWxzJyxcbiAgICAgIG5vdFJ1bm5pbmdPckZhaWxpbmdBbGFybVxuICAgICk7XG5cbiAgICAvLyBVc2luZyBNSU4gc3RhdGlzdGljLCBzbyBpZiBhIHJ1biBpcyBzdWNjZXNzZnVsIChhbmQgaGVuY2UgZW1pdHMgYSAwKSwgdGhpcyBhbGFybSB3aWxsIG5vdCB0cmlnZ2VyLlxuICAgIGNvbnN0IGdhdGV3YXlFcnJvcnNBbGFybSA9IGNhbmFyeVxuICAgICAgLm1ldHJpY0h0dHBHYXRld2F5RXJyb3JzKHsgcGVyaW9kLCBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NSU5JTVVNIH0pXG4gICAgICAuY3JlYXRlQWxhcm0oY2FuYXJ5LCAnR2F0ZXdheUVycm9ycycsIHtcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgTnBtSnMgcGFja2FnZSBjYW5hcnkgaGFzIGJlZW4gZW5jb3VudGVyaW5nIGNvbnNpc3RlbnQgSFRUUCBnYXRld2F5IGVycm9ycyB3aGVuIGNvbnRhY3RpbmcgbnBtanMgc2VydmVycycsXG4gICAgICAgICAgJ2ZvciBhbiBob3VyIG9yIG1vcmUuIFRoaXMgbWVhbnMgdGhlIGNhbmFyeSBoYXMgYmVlbiB1bmFibGUgdG8gZXZhbHVhdGUgU0xBIGNvbXBsaWFuY2UgZm9yIHRoYXQgbXVjaCB0aW1lLicsXG4gICAgICAgICAgJ0l0IGlzIHByb2JhYmxlIHRoYXQgbm90aGluZyBjYW4gYmUgZG9uZSBleGNlcHQgZm9yIHdhaXRpbmcgZm9yIG5wbSBzZXJ2ZXJzIHRvIGNvbWUgYmFjayBvbmxpbmUsIGJ1dCB0aGUnLFxuICAgICAgICAgICdzaXR1YXRpb24gc2hvdWxkIGJlIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbm90aGVyIHByb2JsZW0uJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuYm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBhbGFybU5hbWU6IGAke2NhbmFyeS5ub2RlLnBhdGh9L0dhdGV3YXlFcnJvcnNgLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogNjAsXG4gICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgICB9KTtcbiAgICBtb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnTnBtSnMgRm9sbG93ZXIgQ2FuYXJ5IGlzIGV4cGVyaWVuY2luZyBIVFRQIEdhdGV3YXkgZXJyb3JzJyxcbiAgICAgIGdhdGV3YXlFcnJvcnNBbGFybVxuICAgICk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgIHRpdGxlOiAnUGFja2FnZSBDYW5hcnknLFxuICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgY2FuYXJ5Lm1ldHJpY0R3ZWxsVGltZSh7IGxhYmVsOiAnRHdlbGwgVGltZScgfSksXG4gICAgICAgICAgY2FuYXJ5Lm1ldHJpY1RpbWVUb0NhdGFsb2coeyBsYWJlbDogJ1RpbWUgdG8gQ2F0YWxvZycgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGxlZnRBbm5vdGF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiAnI2ZmMDAwMCcsXG4gICAgICAgICAgICBsYWJlbDogYFNMQSAoJHt2aXNpYmlsaXR5U2xhLnRvSHVtYW5TdHJpbmcoKX0pYCxcbiAgICAgICAgICAgIHZhbHVlOiB2aXNpYmlsaXR5U2xhLnRvU2Vjb25kcygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGxlZnRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFRleHRXaWRnZXQoe1xuICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgbWFya2Rvd246IFtcbiAgICAgICAgICAnT2JzZXJ2ZWQgbGFnIG9mIHJlcGxpY2F0ZS5ucG1qcy5jb20nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICctLS0tJyxcbiAgICAgICAgICAncmVwbGljYSBsYWcgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBkdWUgdG8gTlBNIHByb3RvY29sIGNoYW5nZXMnLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxufVxuXG4vKipcbiAqIEhvdyBvZnRlbiAncmF0ZScgZ29lcyBpbnRvICdkdXJhdGlvbicgKHJvdW5kZWQgdXApXG4gKi9cbmZ1bmN0aW9uIGhvd09mdGVuKHJhdGU6IER1cmF0aW9uLCBkdXJhdGlvbjogRHVyYXRpb24pIHtcbiAgcmV0dXJuIE1hdGguY2VpbChkdXJhdGlvbi50b1NlY29uZHMoKSAvIHJhdGUudG9TZWNvbmRzKCkpO1xufVxuIl19
|
|
584
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtanMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFja2FnZS1zb3VyY2VzL25wbWpzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBdUM7QUFDdkMsK0RBWW9DO0FBQ3BDLHVEQUF3RDtBQUN4RCx1RUFBZ0U7QUFDaEUsdURBQWlEO0FBQ2pELG1GQUFzRTtBQUN0RSwrQ0FBZ0U7QUFDaEUsaURBQTZEO0FBRTdELGdDQUF1QztBQUN2Qyw0Q0FLc0I7QUFDdEIsa0RBQTZDO0FBQzdDLDhDQUF5QztBQUN6QywyQ0FBb0Q7QUFDcEQsNkVBTXlDO0FBQ3pDLDZEQUF3RDtBQUN4RCwrREFBMEQ7QUFPMUQsZ0RBQTZDO0FBQzdDLDJDQUFpRDtBQUNqRCwrRUFBeUU7QUFFekU7Ozs7R0FJRztBQUNILE1BQU0saUJBQWlCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLHNCQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBOENyRDs7R0FFRztBQUNILE1BQWEsS0FBSztJQUNvQjs7SUFBcEMsWUFBb0MsUUFBb0IsRUFBRTtRQUF0QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUNULEtBQWdCLEVBQ2hCLEVBQ0UsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixLQUFLLEVBQ0wsVUFBVSxFQUNWLGlCQUFpQixHQUNRO1FBRTNCLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsRCxNQUFNLGNBQWMsR0FBRywwQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3hCLGNBQWMsQ0FBQyxTQUFTLENB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QUNWLDZCQUE2QjtvQkFDN0Isb0NBQW9DO29CQUNwQyxrREFBa0Q7b0JBQ2xELGlEQUFpRDtvQkFDakQsdURBQXVEO29CQUN2RCwyQkFBMkI7aUJBQzVCO2FBQ0YsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDOztBQXpwQkgsc0JBMHBCQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBYyxFQUFFLFFBQWtCO0lBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQWxhcm1SdWxlLFxuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIENvbXBvc2l0ZUFsYXJtLFxuICBHcmFwaFdpZGdldCxcbiAgSVdpZGdldCxcbiAgTG9nUXVlcnlXaWRnZXQsXG4gIE1hdGhFeHByZXNzaW9uLFxuICBNZXRyaWMsXG4gIE1ldHJpY09wdGlvbnMsXG4gIFN0YXRpc3RpYyxcbiAgVHJlYXRNaXNzaW5nRGF0YSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IFRyYWNpbmcgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFNxc0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZUVuY3J5cHRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQWxhcm1TZXZlcml0eSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQge1xuICBsYW1iZGFGdW5jdGlvblVybCxcbiAgbG9nQW5hbHl0aWNzVXJsLFxuICBzM09iamVjdFVybCxcbiAgc3FzUXVldWVVcmwsXG59IGZyb20gJy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBmaWxsTWV0cmljIH0gZnJvbSAnLi4vbWV0cmljLXV0aWxzJztcbmltcG9ydCB7IGFkZEFsYXJtIH0gZnJvbSAnLi4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBOcG1Kc1BhY2thZ2VDYW5hcnkgfSBmcm9tICcuL25wbWpzL2NhbmFyeSc7XG5pbXBvcnQge1xuICBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG4gIE1BUktFUl9GSUxFX05BTUUsXG4gIE1FVFJJQ1NfTkFNRVNQQUNFLFxuICBNZXRyaWNOYW1lLFxuICBTM0tleVByZWZpeCxcbn0gZnJvbSAnLi9ucG1qcy9jb25zdGFudHMubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBOcG1Kc0ZvbGxvd2VyIH0gZnJvbSAnLi9ucG1qcy9ucG0tanMtZm9sbG93ZXInO1xuaW1wb3J0IHsgU3RhZ2VBbmROb3RpZnkgfSBmcm9tICcuL25wbWpzL3N0YWdlLWFuZC1ub3RpZnknO1xuaW1wb3J0IHsgSU1vbml0b3JpbmcgfSBmcm9tICcuLi9tb25pdG9yaW5nL2FwaSc7XG5pbXBvcnQgdHlwZSB7XG4gIElQYWNrYWdlU291cmNlLFxuICBQYWNrYWdlU291cmNlQmluZE9wdGlvbnMsXG4gIFBhY2thZ2VTb3VyY2VCaW5kUmVzdWx0LFxufSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZSc7XG5pbXBvcnQgeyBSVU5CT09LX1VSTCB9IGZyb20gJy4uL3J1bmJvb2stdXJsJztcbmltcG9ydCB7IFMzU3RvcmFnZUZhY3RvcnkgfSBmcm9tICcuLi9zMy9zdG9yYWdlJztcbmltcG9ydCB7IFJlU3RhZ2VQYWNrYWdlVmVyc2lvbiB9IGZyb20gJy4vbnBtanMvcmUtc3RhZ2UtcGFja2FnZS12ZXJzaW9uJztcblxuLyoqXG4gKiBUaGUgcGVyaW9kaWNpdHkgYXQgd2hpY2ggdGhlIE5wbUpzIGZvbGxvd2VyIHdpbGwgcnVuLiBUaGlzIE1VU1QgYmUgYSB2YWxpZFxuICogQ2xvdWRXYXRjaCBNZXRyaWMgZ3JhaW4sIGFzIHRoaXMgd2lsbCBhbHNvIGJlIHRoZSBwZXJpb2Qgb2YgdGhlIENsb3VkV2F0Y2hcbiAqIGFsYXJtIHRoYXQgbW9uaXRvcnMgdGhlIGhlYWx0aCBvZiB0aGUgZm9sbG93ZXIuXG4gKi9cbmNvbnN0IEZPTExPV0VSX1JVTl9SQVRFID0gRHVyYXRpb24ubWludXRlcyg1KTtcblxuLyoqXG4gKiBBbGFybSBpZiB3ZSBoYXZlbid0IHNlZW4gY2hhbmdlcyBvdmVyIHRoaXMgdGltZVxuICpcbiAqIFRoZSBDb3VjaERCIGxlYWRlciBvY2Nhc2lvbmFsbHkganVzdCBzdGFydHMgdG9zc2luZyBvdXQgdGltZW91dHMgYW5kIHRoZXlcbiAqIG1heSBsYXN0IGZvciBhIGdvb2Qgd2hpbGUuXG4gKlxuICogLSBPbiAyMDIyLTA5LTI5IGl0IHdhcyBzbG93IGZvciAxMiBob3Vycy5cbiAqIC0gT24gMjAyMi0xMC0wNCBpdCB3YXMgc2xvdyBmb3IgMiBob3Vycy5cbiAqXG4gKiBUaGlzIGlzIGxlYWRpbmcgdG8gZXh0cmVtZSBhbGFybSBmYXRpZ3VlLCBhbmQgYWxzbyB0aGlzIGFsYXJtIGlzIG5vbi1hY3Rpb25hYmxlLlxuICogTGV0J3MgYmUgdmVyeSB2ZXJ5IGNvbnNlcnZhdGl2ZSBoZXJlLlxuICovXG5jb25zdCBOT19DSEFOR0VTX0FMQVJNX0RVUkFUSU9OID0gRHVyYXRpb24uaG91cnMoMjQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5wbUpzUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCB0byB1c2UgZm9yIHN0YWdpbmcgbnBtIHBhY2thZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nQnVja2V0PzogSUJ1Y2tldDtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGFja2FnZSBjYW5hcnksIHdoaWNoIHdpbGwgdHJhY2sgYXZhaWxhYmlsaXR5IG9mIGEgY2FuYXJ5XG4gICAqIHBhY2thZ2UgaW4gQ29uc3RydWN0SHViLCBhbmQgZW1pdCBkZWRpY2F0ZWQgbWV0cmljcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQ2FuYXJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgdGhhdCBpcyBtb25pdG9yZWQgYnkgdGhlIHBhY2thZ2UgY2FuYXJ5LCBpZiBlbmFibGVkIGJ5XG4gICAqIGBlbmFibGVDYW5hcnlgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnY29uc3RydWN0LWh1Yi1wcm9iZSdcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeVBhY2thZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIGl0IGlzIHN1cHBvc2VkIHRvIHRha2UgZm9yIHBhY2thZ2VzIHRvIGJlY29tZVxuICAgKiB2aXNpYmxlIGluIHRoaXMgQ29uc3RydWN0SHViIGluc3RhbmNlLiBJZiBgZW5hYmxlQ2FuYXJ5YCBpcyBlbmFibGVkLCBhblxuICAgKiBhbGFybSB3aWxsIHRyaWdnZXIgaWYgdGhpcyBTTEEgaXMgYnJlYWNoZWQgYnkgdGhlIGBjYW5hcnlQYWNrYWdlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5U2xhPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBjYW5hcnkgcGFja2FnZSBpcyBleHBlY3RlZCB0byBnbyB3aXRob3V0XG4gICAqIHB1Ymxpc2hpbmcgYSBuZXcgdmVyc2lvbi4gSWYgZXhjZWVkZWQsIGFuIGFsYXJtIHdpbGwgZmlyZSBpbmRpY2F0aW5nIHRoZVxuICAgKiBjYW5hcnkgcGFja2FnZSBtYXkgaGF2ZSBzdG9wcGVkIHB1Ymxpc2hpbmcsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBTTEFcbiAgICogYWxhcm0gYmxpbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmRheXMoMSlcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeU1heFN0YWxlPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogQSBwYWNrYWdlIHNvdXJjZSB0aGF0IGdldHMgcGFja2FnZSBkYXRhIGZyb20gdGhlIG5wbWpzLmNvbSBwYWNrYWdlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY2xhc3MgTnBtSnMgaW1wbGVtZW50cyBJUGFja2FnZVNvdXJjZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBOcG1Kc1Byb3BzID0ge30pIHt9XG5cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB7XG4gICAgICBiYXNlVXJsLFxuICAgICAgZGVueUxpc3QsXG4gICAgICBpbmdlc3Rpb24sXG4gICAgICBsaWNlbnNlTGlzdCxcbiAgICAgIG1vbml0b3JpbmcsXG4gICAgICBxdWV1ZSxcbiAgICAgIHJlcG9zaXRvcnksXG4gICAgICBvdmVydmlld0Rhc2hib2FyZCxcbiAgICB9OiBQYWNrYWdlU291cmNlQmluZE9wdGlvbnNcbiAgKTogUGFja2FnZVNvdXJjZUJpbmRSZXN1bHQge1xuICAgIHJlcG9zaXRvcnk/LmFkZEV4dGVybmFsQ29ubmVjdGlvbigncHVibGljOm5wbWpzJyk7XG5cbiAgICBjb25zdCBzdG9yYWdlRmFjdG9yeSA9IFMzU3RvcmFnZUZhY3RvcnkuZ2V0T3JDcmVhdGUoc2NvcGUpO1xuICAgIGNvbnN0IGJ1Y2tldCA9XG4gICAgICB0aGlzLnByb3BzLnN0YWdpbmdCdWNrZXQgfHxcbiAgICAgIHN0b3JhZ2VGYWN0b3J5Lm5ld0J1Y2tldChzY29wZSwgJ05wbUpzL1N0YWdpbmdCdWNrZXQnLCB7XG4gICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmVmaXg6IFMzS2V5UHJlZml4LlNUQUdFRF9LRVlfUFJFRklYLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBQZXJtYW5lbnRseSBkZWxldGUgbWFya2VyIGZpbGUgdXBkYXRlcyBhZnRlciAxIGRheSAod2UgZG9uJ3QgbmVlZCB0aGVzZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmVmaXg6IE1BUktFUl9GSUxFX05BTUUsXG4gICAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMSksXG4gICAgICAgICAgICBleHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gUGVybWFuZW50bHkgZGVsZXRlIGtub3duIHZlcnNpb24gYmFja3VwcyBhZnRlciAzMCBkYXlzXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4OiBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG4gICAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgICAgZXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgYnVja2V0LmdyYW50UmVhZChpbmdlc3Rpb24pO1xuXG4gICAgY29uc3Qgc3RhZ2VyID0gbmV3IFN0YWdlQW5kTm90aWZ5KHNjb3BlLCAnTnBtSnMtU3RhZ2VBbmROb3RpZnknLCB7XG4gICAgICBkZWFkTGV0dGVyUXVldWU6IG5ldyBRdWV1ZShzY29wZSwgJ1N0YWdlckRMUScsIHtcbiAgICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IER1cmF0aW9uLmRheXMoMTQpLFxuICAgICAgICB2aXNpYmlsaXR5VGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7c2NvcGUubm9kZS5wYXRofS9OcG1KUy1TdGFnZUFuZE5vdGlmeV0gU3RhZ2VzIHRhcmJhbGxzIHRvIFMzIGFuZCBub3RpZmllcyBDb25zdHJ1Y3RIdWJgLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgICAgQlVDS0VUX05BTUU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBRVUVVRV9VUkw6IHF1ZXVlLnF1ZXVlVXJsLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzAyNCwgLy8gMTBHaUJcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgfSk7XG5cbiAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUoc3RhZ2VyKTtcbiAgICBkZW55TGlzdD8uZ3JhbnRSZWFkKHN0YWdlcik7XG4gICAgcXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoc3RhZ2VyKTtcblxuICAgIHN0YWdlci5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZShzdGFnZXIuZGVhZExldHRlclF1ZXVlISwge1xuICAgICAgICBiYXRjaFNpemU6IDEsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9sbG93ZXIgPSBuZXcgTnBtSnNGb2xsb3dlcihzY29wZSwgJ05wbUpzJywge1xuICAgICAgZGVzY3JpcHRpb246IGBbJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzXSBQZXJpb2RpY2FsbHkgcXVlcnkgbnBtanMuY29tIGluZGV4IGZvciBuZXcgcGFja2FnZXNgLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgICAgQlVDS0VUX05BTUU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBGVU5DVElPTl9OQU1FOiBzdGFnZXIuZnVuY3Rpb25OYW1lLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzAyNCwgLy8gMTAgR2lCXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxLCAvLyBPbmx5IG9uZSBleGVjdXRpb24gYXQgYSB0aW1lLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb24gdGhlIFMzIG1hcmtlciBvYmplY3RcbiAgICAgIHRpbWVvdXQ6IEZPTExPV0VSX1JVTl9SQVRFLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgfSk7XG5cbiAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUoZm9sbG93ZXIsIE1BUktFUl9GSUxFX05BTUUpO1xuICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZShmb2xsb3dlciwgS05PV05fVkVSU0lPTlNfRklMRV9OQU1FKTtcbiAgICBkZW55TGlzdD8uZ3JhbnRSZWFkKGZvbGxvd2VyKTtcbiAgICBsaWNlbnNlTGlzdC5ncmFudFJlYWQoZm9sbG93ZXIpO1xuICAgIHN0YWdlci5ncmFudEludm9rZShmb2xsb3dlcik7XG5cbiAgICBjb25zdCByZXN0YWdlciA9IG5ldyBSZVN0YWdlUGFja2FnZVZlcnNpb24oc2NvcGUsICdSZVN0YWdlUGFja2FnZVZlcnNpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYE1hbnVhbGx5IHJlLXN0YWdlIGEgcGFja2FnZSB2ZXJzaW9uYCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEZVTkNUSU9OX05BTUU6IHN0YWdlci5mdW5jdGlvbk5hbWUsXG4gICAgICAgIFJFR0lTVFJZX1VSTDogJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJyxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgfSk7XG4gICAgc3RhZ2VyLmdyYW50SW52b2tlKHJlc3RhZ2VyKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShzY29wZSwgJ05wbUpzL1NjaGVkdWxlJywge1xuICAgICAgZGVzY3JpcHRpb246IGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvU2NoZWR1bGVgLFxuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRk9MTE9XRVJfUlVOX1JBVEUpLFxuICAgICAgdGFyZ2V0czogW25ldyBMYW1iZGFGdW5jdGlvbihmb2xsb3dlcildLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckFsYXJtcyhzY29wZSwgZm9sbG93ZXIsIHN0YWdlciwgbW9uaXRvcmluZywgcnVsZSk7XG5cbiAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlICYmXG4gICAgICBvdmVydmlld0Rhc2hib2FyZC5hZGRETFFNZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgICAgJ05QTSBKUyBTdGFnZXIgRExRJyxcbiAgICAgICAgc3RhZ2VyLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgKTtcbiAgICBmb2xsb3dlci5kZWFkTGV0dGVyUXVldWUgJiZcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkLmFkZERMUU1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgICAnTlBNIEpTIEZvbGxvd2VyIERMUScsXG4gICAgICAgIGZvbGxvd2VyLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgKTtcbiAgICBvdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBmb2xsb3dlcixcbiAgICAgICdOcG1Kc0xhbWJkYSdcbiAgICApO1xuICAgIG92ZXJ2aWV3RGFzaGJvYXJkLmFkZENvbmN1cnJlbnRFeGVjdXRpb25NZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgIHN0YWdlcixcbiAgICAgICdOcG1Kcy1TdGFnZUFuZE5vdGlmeUxhbWJkYSdcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGZvbGxvd2VyLm5vZGUucGF0aCxcbiAgICAgIGxpbmtzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnTnBtSnMgRm9sbG93ZXInLFxuICAgICAgICAgIHVybDogbGFtYmRhRnVuY3Rpb25VcmwoZm9sbG93ZXIpLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogJ01hcmtlciBPYmplY3QnLCB1cmw6IHMzT2JqZWN0VXJsKGJ1Y2tldCwgTUFSS0VSX0ZJTEVfTkFNRSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdLbm93biBWZXJzaW9ucycsXG4gICAgICAgICAgdXJsOiBzM09iamVjdFVybChidWNrZXQsIEtOT1dOX1ZFUlNJT05TX0ZJTEVfTkFNRSksXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogJ1N0YWdlcicsIHVybDogbGFtYmRhRnVuY3Rpb25Vcmwoc3RhZ2VyKSB9LFxuICAgICAgICB7IG5hbWU6ICdTdGFnZXIgRExRJywgdXJsOiBzcXNRdWV1ZVVybChzdGFnZXIuZGVhZExldHRlclF1ZXVlISkgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQaXBlbGluZSBUcmFjZSAoTG9nIEFuYWx5dGljcyknLFxuICAgICAgICAgIHVybDogbG9nQW5hbHl0aWNzVXJsKFxuICAgICAgICAgICAgW2ZvbGxvd2VyLCBzdGFnZXJdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAnZmllbGRzIEB0aW1lc3RhbXAsIEBsb2csIEBtZXNzYWdlJyxcbiAgICAgICAgICAgICAgYHwgZmlsdGVyIEBtZXNzYWdlIGxpa2UgLyR7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jYW5hcnlQYWNrYWdlID8/ICdjb25zdHJ1Y3QtaHViLXByb2JlJ1xuICAgICAgICAgICAgICB9L2AsXG4gICAgICAgICAgICAgICcjIGZpbHRlciBAbWVzc2FnZSBsaWtlIC88dmVyc2lvbj4vIDwtIG5hcnJvdyBkb3duIHRvIGEgc3R1Y2sgdmVyc2lvbicsXG4gICAgICAgICAgICAgICd8IHNvcnQgQHRpbWVzdGFtcCBkZXNjJyxcbiAgICAgICAgICAgICAgJ3wgbGltaXQgMTAwJyxcbiAgICAgICAgICAgIF0uam9pbignXFxuJylcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhc2hib2FyZFdpZGdldHM6IFtcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ0ZvbGxvd2VyIEhlYWx0aCcsXG4gICAgICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoZm9sbG93ZXIubWV0cmljSW52b2NhdGlvbnMoeyBsYWJlbDogJ0ludm9jYXRpb25zJyB9KSksXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoZm9sbG93ZXIubWV0cmljRXJyb3JzKHsgbGFiZWw6ICdFcnJvcnMnIH0pKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZWZ0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICByaWdodDogW3RoaXMubWV0cmljUmVtYWluaW5nVGltZSh7IGxhYmVsOiAnUmVtYWluaW5nIFRpbWUnIH0pXSxcbiAgICAgICAgICAgIHJpZ2h0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgICAgIHRpdGxlOiAnU3RhZ2VyIEhlYWx0aCcsXG4gICAgICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoc3RhZ2VyLm1ldHJpY0ludm9jYXRpb25zKHsgbGFiZWw6ICdJbnZvY2F0aW9ucycgfSkpLFxuICAgICAgICAgICAgICBmaWxsTWV0cmljKHN0YWdlci5tZXRyaWNFcnJvcnMoeyBsYWJlbDogJ0Vycm9ycycgfSkpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxlZnRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHJpZ2h0OiBbc3RhZ2VyLm1ldHJpY0R1cmF0aW9uKHsgbGFiZWw6ICdEdXJhdGlvbicgfSldLFxuICAgICAgICAgICAgcmlnaHRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ0NvdWNoREIgRm9sbG93ZXInLFxuICAgICAgICAgICAgbGVmdDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKHRoaXMubWV0cmljQ2hhbmdlQ291bnQoeyBsYWJlbDogJ0NoYW5nZSBDb3VudCcgfSksIDApLFxuICAgICAgICAgICAgICBmaWxsTWV0cmljKFxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljVW5wcm9jZXNzYWJsZUVudGl0eSh7IGxhYmVsOiAnVW5wcm9jZXNzYWJsZScgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxlZnRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHJpZ2h0OiBbXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNOcG1Kc0NoYW5nZUFnZSh7IGxhYmVsOiAnTGFnIHRvIG5wbWpzLmNvbScgfSksXG4gICAgICAgICAgICAgICAgJ1JFUEVBVCdcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY1BhY2thZ2VWZXJzaW9uQWdlKHsgbGFiZWw6ICdQYWNrYWdlIFZlcnNpb24gQWdlJyB9KSxcbiAgICAgICAgICAgICAgICAnUkVQRUFUJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJpZ2h0WUF4aXM6IHsgbGFiZWw6ICdNaWxsaXNlY29uZHMnLCBtaW46IDAsIHNob3dVbml0czogZmFsc2UgfSxcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICAgICAgdGl0bGU6ICdDb3VjaERCIENoYW5nZXMnLFxuICAgICAgICAgICAgbGVmdDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKFxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljTGFzdFNlcSh7IGxhYmVsOiAnTGFzdCBTZXF1ZW5jZSBOdW1iZXInIH0pLFxuICAgICAgICAgICAgICAgICdSRVBFQVQnXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgICAgIHRpdGxlOiAnU3RhZ2VyIERlYWQtTGV0dGVyIFF1ZXVlJyxcbiAgICAgICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlIS5tZXRyaWNBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNWaXNpYmxlKFxuICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ1Zpc2libGUgTWVzc2FnZXMnIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICBzdGFnZXIuZGVhZExldHRlclF1ZXVlIS5tZXRyaWNBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNOb3RWaXNpYmxlKFxuICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ0ludmlzaWJsZSBNZXNzYWdlcycgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxlZnRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHJpZ2h0OiBbXG4gICAgICAgICAgICAgIHN0YWdlci5kZWFkTGV0dGVyUXVldWUhLm1ldHJpY0FwcHJveGltYXRlQWdlT2ZPbGRlc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ09sZGVzdCBNZXNzYWdlJyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmlnaHRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4odGhpcy5wcm9wcy5lbmFibGVDYW5hcnkgPz8gdHJ1ZVxuICAgICAgICAgICAgPyB0aGlzLnJlZ2lzdGVyQ2FuYXJ5KFxuICAgICAgICAgICAgICAgIGZvbGxvd2VyLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuY2FuYXJ5UGFja2FnZSA/PyAnY29uc3RydWN0LWh1Yi1wcm9iZScsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jYW5hcnlTbGEgPz8gRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmNhbmFyeU1heFN0YWxlID8/IER1cmF0aW9uLmRheXMoMSksXG4gICAgICAgICAgICAgICAgYnVja2V0LFxuICAgICAgICAgICAgICAgIGJhc2VVcmwsXG4gICAgICAgICAgICAgICAgbW9uaXRvcmluZ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXZlcmFnZSB0aW1lIGl0IHRvb2sgdG8gcHJvY2VzcyBhIGNoYW5nZXMgYmF0Y2guXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQmF0Y2hQcm9jZXNzaW5nVGltZShvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuQVZFUkFHRSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLkJBVENIX1BST0NFU1NJTkdfVElNRSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvdGFsIGNvdW50IG9mIGNoYW5nZXMgdGhhdCB3ZXJlIHByb2Nlc3NlZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDaGFuZ2VDb3VudChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuQ0hBTkdFX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgdGhhdCB3YXMgcHJvY2Vzc2VkLiBUaGlzIG1ldHJpYyBjYW4gYmUgdXNlZCB0b1xuICAgKiBkaXNjb3ZlciB3aGVuIGEgc2VxdWVuY2UgcmVzZXQgaGFzIGhhcHBlbmVkIGluIHRoZSBDb3VjaERCIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0xhc3RTZXEob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5MQVNUX1NFUSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljTnBtSnNDaGFuZ2VBZ2Uob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1JTklNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5OUE1KU19DSEFOR0VfQUdFLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWdlIG9mIHRoZSBvbGRlc3QgcGFja2FnZSB2ZXJzaW9uIHRoYXQgd2FzIHByb2Nlc3NlZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNQYWNrYWdlVmVyc2lvbkFnZShvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLlBBQ0tBR0VfVkVSU0lPTl9BR0UsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBjb3VudCBvZiBwYWNrYWdlIHZlcnNpb25zIHRoYXQgd2VyZSBpbnNwZWN0ZWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljUGFja2FnZVZlcnNpb25Db3VudChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuUEFDS0FHRV9WRVJTSU9OX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY291bnQgb2YgcGFja2FnZSB2ZXJzaW9ucyB0aGF0IHdlcmUgZGVlbWVkIHJlbGV2YW50LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1JlbGV2YW50UGFja2FnZVZlcnNpb25zKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5SRUxFVkFOVF9QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdGhhdCB3YXMgcmVtYWluaW5nIHdoZW4gdGhlIGxhbWJkYSByZXR1cm5lZCBpbiBvcmRlciB0b1xuICAgKiBhdm9pZCBoaXR0aW5nIGEgdGltZW91dC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNSZW1haW5pbmdUaW1lKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NSU5JTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuUkVNQUlOSU5HX1RJTUUsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgY2hhbmdlcyB0aGF0IHdlcmUgbm90IHByb2Nlc3NlZCBkdWUgdG8gaGF2aW5nIGFuIGludmFsaWRcbiAgICogZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1VucHJvY2Vzc2FibGVFbnRpdHkob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLlVOUFJPQ0VTU0FCTEVfRU5USVRZLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJBbGFybXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBmb2xsb3dlcjogTnBtSnNGb2xsb3dlcixcbiAgICBzdGFnZXI6IFN0YWdlQW5kTm90aWZ5LFxuICAgIG1vbml0b3Jpbmc6IElNb25pdG9yaW5nLFxuICAgIHNjaGVkdWxlOiBSdWxlXG4gICkge1xuICAgIGNvbnN0IGZhaWx1cmVBbGFybSA9IGZvbGxvd2VyXG4gICAgICAubWV0cmljRXJyb3JzKClcbiAgICAgIC5jcmVhdGVBbGFybShzY29wZSwgJ05wbUpzL0ZvbGxvd2VyL0ZhaWx1cmVzJywge1xuICAgICAgICBhbGFybU5hbWU6IGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvRm9sbG93ZXIvRmFpbHVyZXNgLFxuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgJ1RoZSBOcG1KcyBmb2xsb3dlciBmdW5jdGlvbiBmYWlsZWQhJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBEaXJlY3QgbGluayB0byBMYW1iZGEgZnVuY3Rpb246ICR7bGFtYmRhRnVuY3Rpb25VcmwoZm9sbG93ZXIpfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5NSVNTSU5HLFxuICAgICAgfSk7XG4gICAgbW9uaXRvcmluZy5hZGRMb3dTZXZlcml0eUFsYXJtKCdOcG1Kcy9Gb2xsb3dlciBGYWlsdXJlcycsIGZhaWx1cmVBbGFybSk7XG5cbiAgICBjb25zdCBub3RSdW5uaW5nQWxhcm0gPSBmb2xsb3dlclxuICAgICAgLm1ldHJpY0ludm9jYXRpb25zKHsgcGVyaW9kOiBGT0xMT1dFUl9SVU5fUkFURSB9KVxuICAgICAgLmNyZWF0ZUFsYXJtKHNjb3BlLCAnTnBtSnMvRm9sbG93ZXIvTm90UnVubmluZycsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHtzY29wZS5ub2RlLnBhdGh9L05wbUpzL0ZvbGxvd2VyL05vdFJ1bm5pbmdgLFxuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgJ1RoZSBOcG1KcyBmb2xsb3dlciBmdW5jdGlvbiBpcyBub3QgcnVubmluZyEnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5Cb29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYERpcmVjdCBsaW5rIHRvIExhbWJkYSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChmb2xsb3dlcil9YCxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgICB9KTtcbiAgICBtb25pdG9yaW5nLmFkZEhpZ2hTZXZlcml0eUFsYXJtKFxuICAgICAgJ05wbUpzL0ZvbGxvd2VyIE5vdCBSdW5uaW5nJyxcbiAgICAgIG5vdFJ1bm5pbmdBbGFybVxuICAgICk7XG5cbiAgICAvLyBUaGUgcGVyaW9kIGZvciB0aGlzIGFsYXJtIG5lZWRzIHRvIG1hdGNoIHRoZSBzY2hlZHVsaW5nIGludGVydmFsIG9mIHRoZVxuICAgIC8vIGZvbGxvd2VyLCBvdGhlcndpc2UgdGhlIG1ldHJpYyB3aWxsIGJlIHRvbyBzcGFyc2UgdG8gcHJvcGVybHkgZGV0ZWN0XG4gICAgLy8gcHJvYmxlbXMuXG4gICAgY29uc3Qgbm9DaGFuZ2VBbGFybSA9IHRoaXMubWV0cmljQ2hhbmdlQ291bnQoe1xuICAgICAgcGVyaW9kOiBGT0xMT1dFUl9SVU5fUkFURSxcbiAgICB9KS5jcmVhdGVBbGFybShzY29wZSwgJ05wbUpzL0ZvbGxvd2VyL05vQ2hhbmdlcycsIHtcbiAgICAgIGFsYXJtTmFtZTogYCR7c2NvcGUubm9kZS5wYXRofS9OcG1Kcy9Gb2xsb3dlci9Ob0NoYW5nZXNgLFxuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAnVGhlIE5wbUpzIGZvbGxvd2VyIGZ1bmN0aW9uIGlzIG5vdCBkaXNjb3ZlcmluZyBhbnkgY2hhbmdlcyBmcm9tIENvdWNoREIhJyxcbiAgICAgICAgJycsXG4gICAgICAgIGBSdW5Cb29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgICcnLFxuICAgICAgICBgRGlyZWN0IGxpbmsgdG8gTGFtYmRhIGZ1bmN0aW9uOiAke2xhbWJkYUZ1bmN0aW9uVXJsKGZvbGxvd2VyKX1gLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogaG93T2Z0ZW4oRk9MTE9XRVJfUlVOX1JBVEUsIE5PX0NIQU5HRVNfQUxBUk1fRFVSQVRJT04pLFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgLy8gSWYgdGhlIG1ldHJpYyBpcyBub3QgZW1pdHRlZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgemVyby5cbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuQlJFQUNISU5HLFxuICAgIH0pO1xuICAgIG1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybShcbiAgICAgICdOcCBucG1qcy5jb20gY2hhbmdlcyBkaXNjb3ZlcmVkJyxcbiAgICAgIG5vQ2hhbmdlQWxhcm1cbiAgICApO1xuXG4gICAgY29uc3QgZGxxTm90RW1wdHlBbGFybSA9IHN0YWdlclxuICAgICAgLmRlYWRMZXR0ZXJRdWV1ZSEubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzVmlzaWJsZSh7XG4gICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIH0pXG4gICAgICAuY3JlYXRlQWxhcm0oc2NvcGUsIGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvU3RhZ2VyL0RMUU5vdEVtcHR5YCwge1xuICAgICAgICBhbGFybU5hbWU6IGAke3Njb3BlLm5vZGUucGF0aH0vTnBtSnMvU3RhZ2VyL0RMUU5vdEVtcHR5YCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgTnBtSlMgcGFja2FnZSBzdGFnZXIgaXMgZmFpbGluZyAtIGl0cyBkZWFkIGxldHRlciBxdWV1ZSBpcyBub3QgZW1wdHknLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBMaW5rIHRvIHRoZSBsYW1iZGEgZnVuY3Rpb246ICR7bGFtYmRhRnVuY3Rpb25Vcmwoc3RhZ2VyKX1gLFxuICAgICAgICAgIGBMaW5rIHRvIHRoZSBkZWFkIGxldHRlciBxdWV1ZTogJHtzcXNRdWV1ZVVybChcbiAgICAgICAgICAgIHN0YWdlci5kZWFkTGV0dGVyUXVldWUhXG4gICAgICAgICAgKX1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5ib29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgIF0uam9pbignL24nKSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICB9KTtcbiAgICBtb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnTnBtSnMvU3RhZ2VyIERMUSBOb3QgRW1wdHknLFxuICAgICAgZGxxTm90RW1wdHlBbGFybVxuICAgICk7XG5cbiAgICAvLyBGaW5hbGx5IC0gdGhlIFwibm90IHJ1bm5pbmdcIiBhbGFybSBkZXBlbmRzIG9uIHRoZSBzY2hlZHVsZSAoaXQgd29uJ3QgcnVuIHVudGlsIHRoZSBzY2hlZHVsZVxuICAgIC8vIGV4aXN0cyEpLCBhbmQgdGhlIHNjaGVkdWxlIGRlcGVuZHMgb24gdGhlIGZhaWx1cmUgYWxhcm0gZXhpc3RpbmcgKHdlIGRvbid0IHdhbnQgaXQgdG8gcnVuXG4gICAgLy8gYmVmb3JlIHdlIGNhbiBrbm93IGl0IGlzIGZhaWxpbmcpLiBUaGlzIG1lYW5zIHRoZSByZXR1cm5lZCBgSURlcGVuZGFibGVgIGVmZmVjdGl2ZWx5IGVuc3VyZXNcbiAgICAvLyBhbGwgYWxhcm1zIGhhdmUgYmVlbiBwcm92aXNpb25lZCBhbHJlYWR5ISBJc24ndCBpdCBuaWNlIVxuICAgIG5vdFJ1bm5pbmdBbGFybS5ub2RlLmFkZERlcGVuZGVuY3koc2NoZWR1bGUpO1xuICAgIHNjaGVkdWxlLm5vZGUuYWRkRGVwZW5kZW5jeShmYWlsdXJlQWxhcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckNhbmFyeShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgLy8gQSBkdXJhdGlvbiBzcGVjaWZ5aW5nIGhvdyBsb25nIHdlIGV4cGVjdCB0aGUgcHJvYmUgcGFja2FnZSB0byBhcHBlYXIgb25cbiAgICAvLyBDb25zdHJ1Y3QgSHViIGFmdGVyIGl0IGdldHMgcHVibGlzaGVkIHRvIG5wbSwgYXNzdW1pbmcgdGhlIG5wbSByZXBsaWNhXG4gICAgLy8gaXMgdXAgdG8gZGF0ZSBldGMuXG4gICAgdmlzaWJpbGl0eVNsYTogRHVyYXRpb24sXG4gICAgLy8gQSBkdXJhdGlvbiBzcGVjaWZ5aW5nIGhvdyBsb25nIHRoZSBjYW5hcnkgcGFja2FnZSBjYW4gZ28gd2l0aG91dFxuICAgIC8vIHB1Ymxpc2hpbmcgYSBuZXcgdmVyc2lvbiBiZWZvcmUgd2UgYWxhcm0uXG4gICAgbWF4U3RhbGU6IER1cmF0aW9uLFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBjb25zdHJ1Y3RIdWJCYXNlVXJsOiBzdHJpbmcsXG4gICAgbW9uaXRvcmluZzogSU1vbml0b3JpbmdcbiAgKTogSVdpZGdldFtdIHtcbiAgICBjb25zdCBjYW5hcnkgPSBuZXcgTnBtSnNQYWNrYWdlQ2FuYXJ5KHNjb3BlLCAnQ2FuYXJ5Jywge1xuICAgICAgYnVja2V0LFxuICAgICAgY29uc3RydWN0SHViQmFzZVVybCxcbiAgICAgIHBhY2thZ2VOYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVyaW9kID0gRHVyYXRpb24ubWludXRlcygxMCk7IC8vIHdlIHJ1biBjYW5hcnkgb25jZSBwZXIgaG91ciwgYnV0IG5vdCBndWFyYW50ZWVkIGV4YWN0IHRpbWVzXG4gICAgY29uc3QgYWxhcm0gPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjogJ01BWChbbUR3ZWxsLCBtVFRDXSknLFxuICAgICAgcGVyaW9kLFxuICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgIG1Ed2VsbDogY2FuYXJ5Lm1ldHJpY0R3ZWxsVGltZSgpLFxuICAgICAgICBtVFRDOiBjYW5hcnkubWV0cmljVGltZVRvQ2F0YWxvZygpLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybShjYW5hcnksICdBbGFybScsIHtcbiAgICAgIGFsYXJtTmFtZTogYCR7Y2FuYXJ5Lm5vZGUucGF0aH0vU0xBLUJyZWFjaGVkYCxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgYE5ldyB2ZXJzaW9ucyBvZiAke3BhY2thZ2VOYW1lfSBoYXZlIGJlZW4gcHVibGlzaGVkIG92ZXIgJHt2aXNpYmlsaXR5U2xhLnRvSHVtYW5TdHJpbmcoKX0gYWdvIGFuZCBhcmUgc3RpbGwgbm90IHZpc2libGUgaW4gY29uc3RydWN0IGh1YmAsXG4gICAgICAgIGBSdW5ib29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgdGhyZXNob2xkOiB2aXNpYmlsaXR5U2xhLnRvU2Vjb25kcygpLFxuICAgIH0pO1xuICAgIC8vIFRoaXMgaXMgZGVlbWVkIGxvdyBzZXZlcml0eSwgYmVjYXVzZSB0aGUgbnBtIHJlZ2lzdHJ5IHJlcGxpY2EgKHJlcGxpY2F0ZS5ucG1qcy5jb20pIGNhblxuICAgIC8vIG9jY2FzaW9uYWxseSBsYWcgc2V2ZXJhbCBob3VycyBiZWhpbmQgdGhlIHByaW1hcnkgKHJlZ2lzdHJ5Lm5wbWpzLmNvbSksIGFuZCB3ZSBjYW5ub3QgZWFzaWx5XG4gICAgLy8gdGVsbCBhYm91dCB0aGF0LiBTb21lb25lIHNob3VsZCBoYXZlIGEgbG9vaywgYnV0IGluIHZpcnR1YWxseSBhbGwgY2FzZXMgd2UgaGF2ZSBzZWVuIHNvIGZhcixcbiAgICAvLyB0aGVyZSBpcyBub3RoaW5nIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSBvdXIgZW5kLCBiZXNpZGVzIHdhaXRpbmcgZm9yIHRoZSByZXBsaWNhIHRvIGJlIGFsbFxuICAgIC8vIGNhdWdodCB1cC5cbiAgICBhZGRBbGFybShcbiAgICAgICdOZXcgdmVyc2lvbiB2aXNpYmlsaXR5IFNMQSBicmVhY2hlZCcsXG4gICAgICBhbGFybSxcbiAgICAgIEFsYXJtU2V2ZXJpdHkuTE9XLFxuICAgICAgbW9uaXRvcmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBzdGFsZUFsYXJtID0gY2FuYXJ5XG4gICAgICAubWV0cmljVGltZVNpbmNlTGFzdFB1Ymxpc2goeyBwZXJpb2QgfSlcbiAgICAgIC5jcmVhdGVBbGFybShjYW5hcnksICdTdGFsZUNhbmFyeVBhY2thZ2UnLCB7XG4gICAgICAgIGFsYXJtTmFtZTogYCR7Y2FuYXJ5Lm5vZGUucGF0aH0vU3RhbGVDYW5hcnlQYWNrYWdlYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgIGBUaGUgY2FuYXJ5IHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gaGFzIG5vdCBwdWJsaXNoZWQgYSBuZXcgdmVyc2lvbiBpbiBvdmVyICR7bWF4U3RhbGUudG9IdW1hblN0cmluZygpfS5gLFxuICAgICAgICAgICdUaGlzIG1lYW5zIHRoZSBTTEEgYWxhcm0gaXMgYmxpbmQg4oCUIG5vIG5ldyB2ZXJzaW9ucyBhcmUgYmVpbmcgdHJhY2tlZCwgc28gU0xBIGJyZWFjaGVzIGNhbm5vdCBiZSBkZXRlY3RlZC4nLFxuICAgICAgICAgICdNZXRyaWM6IENvbnN0cnVjdEh1Yi9QYWNrYWdlQ2FuYXJ5IC8gVGltZVNpbmNlTGFzdFB1Ymxpc2gnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5ib29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk1JU1NJTkcsXG4gICAgICAgIHRocmVzaG9sZDogbWF4U3RhbGUudG9TZWNvbmRzKCksXG4gICAgICB9KTtcbiAgICBtb25pdG9yaW5nLmFkZE1lZGl1bVNldmVyaXR5QWxhcm0oXG4gICAgICAnQ2FuYXJ5IHBhY2thZ2UgaGFzIHN0b3BwZWQgcHVibGlzaGluZyBuZXcgdmVyc2lvbnMnLFxuICAgICAgc3RhbGVBbGFybVxuICAgICk7XG5cbiAgICBjb25zdCBub3RSdW5uaW5nT3JGYWlsaW5nQWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICBjYW5hcnksXG4gICAgICAnTm90UnVubmluZ09yRmFpbGluZycsXG4gICAgICB7XG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgIGNhbmFyeVxuICAgICAgICAgICAgLm1ldHJpY0Vycm9ycyh7IHBlcmlvZCwgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNIH0pXG4gICAgICAgICAgICAuY3JlYXRlQWxhcm0oY2FuYXJ5LCAnRmFpbGluZycsIHtcbiAgICAgICAgICAgICAgYWxhcm1OYW1lOiBgJHtjYW5hcnkubm9kZS5wYXRofS9GYWlsaW5nYCxcbiAgICAgICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBjYW5hcnlcbiAgICAgICAgICAgIC5tZXRyaWNJbnZvY2F0aW9ucyh7IHBlcmlvZCwgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNIH0pXG4gICAgICAgICAgICAuY3JlYXRlQWxhcm0oY2FuYXJ5LCAnTm90UnVubmluZycsIHtcbiAgICAgICAgICAgICAgYWxhcm1OYW1lOiBgJHtjYW5hcnkubm9kZS5wYXRofS9Ob3RSdW5uaW5nYCxcbiAgICAgICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgJ1RoZSBOcG1KcyBwYWNrYWdlIGNhbmFyeSBpcyBub3QgcnVubmluZyBvciBpcyBmYWlsaW5nLiBUaGlzIHByZXZlbnRzIGFsYXJtaW5nIHdoZW4gdGhpcyBpbnN0YW5jZSBvZicsXG4gICAgICAgICAgJ0NvbnN0cnVjdEh1YiBmYWxscyBvdXQgb2YgU0xBIGZvciBuZXcgcGFja2FnZSBpbmdlc3Rpb24hJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuYm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6IGAke2NhbmFyeS5ub2RlLnBhdGh9L05vdFJ1bm5pbmdPckZhaWxpbmdgLFxuICAgICAgfVxuICAgICk7XG4gICAgbW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdOcG1KcyBGb2xsb3dlciBDYW5hcnkgaXMgbm90IHJ1bm5pbmcgb3IgZmFpbHMnLFxuICAgICAgbm90UnVubmluZ09yRmFpbGluZ0FsYXJtXG4gICAgKTtcblxuICAgIC8vIFVzaW5nIE1JTiBzdGF0aXN0aWMsIHNvIGlmIGEgcnVuIGlzIHN1Y2Nlc3NmdWwgKGFuZCBoZW5jZSBlbWl0cyBhIDApLCB0aGlzIGFsYXJtIHdpbGwgbm90IHRyaWdnZXIuXG4gICAgY29uc3QgZ2F0ZXdheUVycm9yc0FsYXJtID0gY2FuYXJ5XG4gICAgICAubWV0cmljSHR0cEdhdGV3YXlFcnJvcnMoeyBwZXJpb2QsIHN0YXRpc3RpYzogU3RhdGlzdGljLk1JTklNVU0gfSlcbiAgICAgIC5jcmVhdGVBbGFybShjYW5hcnksICdHYXRld2F5RXJyb3JzJywge1xuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgJ1RoZSBOcG1KcyBwYWNrYWdlIGNhbmFyeSBoYXMgYmVlbiBlbmNvdW50ZXJpbmcgY29uc2lzdGVudCBIVFRQIGdhdGV3YXkgZXJyb3JzIHdoZW4gY29udGFjdGluZyBucG1qcyBzZXJ2ZXJzJyxcbiAgICAgICAgICAnZm9yIGFuIGhvdXIgb3IgbW9yZS4gVGhpcyBtZWFucyB0aGUgY2FuYXJ5IGhhcyBiZWVuIHVuYWJsZSB0byBldmFsdWF0ZSBTTEEgY29tcGxpYW5jZSBmb3IgdGhhdCBtdWNoIHRpbWUuJyxcbiAgICAgICAgICAnSXQgaXMgcHJvYmFibGUgdGhhdCBub3RoaW5nIGNhbiBiZSBkb25lIGV4Y2VwdCBmb3Igd2FpdGluZyBmb3IgbnBtIHNlcnZlcnMgdG8gY29tZSBiYWNrIG9ubGluZSwgYnV0IHRoZScsXG4gICAgICAgICAgJ3NpdHVhdGlvbiBzaG91bGQgYmUgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFub3RoZXIgcHJvYmxlbS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5ib29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGFsYXJtTmFtZTogYCR7Y2FuYXJ5Lm5vZGUucGF0aH0vR2F0ZXdheUVycm9yc2AsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiA2MCxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLkJSRUFDSElORyxcbiAgICAgIH0pO1xuICAgIG1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybShcbiAgICAgICdOcG1KcyBGb2xsb3dlciBDYW5hcnkgaXMgZXhwZXJpZW5jaW5nIEhUVFAgR2F0ZXdheSBlcnJvcnMnLFxuICAgICAgZ2F0ZXdheUVycm9yc0FsYXJtXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgdGl0bGU6ICdQYWNrYWdlIENhbmFyeScsXG4gICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICBjYW5hcnkubWV0cmljRHdlbGxUaW1lKHsgbGFiZWw6ICdEd2VsbCBUaW1lJyB9KSxcbiAgICAgICAgICBjYW5hcnkubWV0cmljVGltZVRvQ2F0YWxvZyh7IGxhYmVsOiAnVGltZSB0byBDYXRhbG9nJyB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgbGVmdEFubm90YXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6ICcjZmYwMDAwJyxcbiAgICAgICAgICAgIGxhYmVsOiBgU0xBICgke3Zpc2liaWxpdHlTbGEudG9IdW1hblN0cmluZygpfSlgLFxuICAgICAgICAgICAgdmFsdWU6IHZpc2liaWxpdHlTbGEudG9TZWNvbmRzKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGVmdFlBeGlzOiB7IG1pbjogMCB9LFxuICAgICAgfSksXG4gICAgICBuZXcgTG9nUXVlcnlXaWRnZXQoe1xuICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgdGl0bGU6ICdTdHVjayBWZXJzaW9ucyAoc3RpbGwgbm90IHZpc2libGUgaW4gQ29uc3RydWN0SHViKScsXG4gICAgICAgIGxvZ0dyb3VwTmFtZXM6IFtjYW5hcnkubG9nR3JvdXBOYW1lXSxcbiAgICAgICAgcXVlcnlMaW5lczogW1xuICAgICAgICAgICdmaWVsZHMgQHRpbWVzdGFtcCwgQG1lc3NhZ2UnLFxuICAgICAgICAgICdmaWx0ZXIgQG1lc3NhZ2UgbGlrZSAvXCJEd2VsbFRpbWVcIi8nLFxuICAgICAgICAgIGBwYXJzZSBAbWVzc2FnZSAnXCJQYWNrYWdlVmVyc2lvblwiOlwiKlwiJyBhcyB2ZXJzaW9uYCxcbiAgICAgICAgICBgcGFyc2UgQG1lc3NhZ2UgJ1wiRHdlbGxUaW1lXCI6KiwnIGFzIGR3ZWxsVGltZVNlY2AsXG4gICAgICAgICAgJ3N0YXRzIG1heChkd2VsbFRpbWVTZWMpIGFzIG1heER3ZWxsVGltZVNlYyBieSB2ZXJzaW9uJyxcbiAgICAgICAgICAnc29ydCBtYXhEd2VsbFRpbWVTZWMgZGVzYycsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG59XG5cbi8qKlxuICogSG93IG9mdGVuICdyYXRlJyBnb2VzIGludG8gJ2R1cmF0aW9uJyAocm91bmRlZCB1cClcbiAqL1xuZnVuY3Rpb24gaG93T2Z0ZW4ocmF0ZTogRHVyYXRpb24sIGR1cmF0aW9uOiBEdXJhdGlvbikge1xuICByZXR1cm4gTWF0aC5jZWlsKGR1cmF0aW9uLnRvU2Vjb25kcygpIC8gcmF0ZS50b1NlY29uZHMoKSk7XG59XG4iXX0=
|
package/lib/package-tag/index.js
CHANGED
|
@@ -11,7 +11,7 @@ var TagConditionSource;
|
|
|
11
11
|
* Condition for applying a custom tag to a package.
|
|
12
12
|
*/
|
|
13
13
|
class TagCondition {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagCondition", version: "0.4.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagCondition", version: "0.4.522" };
|
|
15
15
|
/**
|
|
16
16
|
* Create an && condition which applies only when all condition arguments are
|
|
17
17
|
* true.
|
|
@@ -107,7 +107,7 @@ class TagConditionPredicate extends TagCondition {
|
|
|
107
107
|
*/
|
|
108
108
|
class TagConditionField {
|
|
109
109
|
field;
|
|
110
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagConditionField", version: "0.4.
|
|
110
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagConditionField", version: "0.4.522" };
|
|
111
111
|
constructor(field) {
|
|
112
112
|
this.field = field;
|
|
113
113
|
}
|
|
@@ -140,7 +140,7 @@ exports.TagConditionField = TagConditionField;
|
|
|
140
140
|
* Target the README of the package to dictate whether a tag is relevant.
|
|
141
141
|
*/
|
|
142
142
|
class TagConditionReadme {
|
|
143
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagConditionReadme", version: "0.4.
|
|
143
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.TagConditionReadme", version: "0.4.522" };
|
|
144
144
|
constructor() { }
|
|
145
145
|
/**
|
|
146
146
|
* Create a `readme.includes(value)` condition which applies if the README
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PackageTagGroup = exports.FilterType = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
class FilterType {
|
|
6
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.FilterType", version: "0.4.
|
|
6
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.FilterType", version: "0.4.522" };
|
|
7
7
|
static checkbox() {
|
|
8
8
|
return new FilterTypeCheckbox();
|
|
9
9
|
}
|
|
@@ -27,7 +27,7 @@ class FilterTypeCheckbox extends FilterType {
|
|
|
27
27
|
*/
|
|
28
28
|
class PackageTagGroup {
|
|
29
29
|
id;
|
|
30
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.PackageTagGroup", version: "0.4.
|
|
30
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.PackageTagGroup", version: "0.4.522" };
|
|
31
31
|
label;
|
|
32
32
|
tooltip;
|
|
33
33
|
filterType;
|
|
@@ -9,7 +9,7 @@ const fs_1 = require("fs");
|
|
|
9
9
|
*/
|
|
10
10
|
class PreloadFile {
|
|
11
11
|
data;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.PreloadFile", version: "0.4.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.PreloadFile", version: "0.4.522" };
|
|
13
13
|
/**
|
|
14
14
|
* Creates a PreloadFile instance from a filepath to load
|
|
15
15
|
*/
|
package/lib/s3/storage.js
CHANGED
|
@@ -42,7 +42,7 @@ const constructs_1 = require("constructs");
|
|
|
42
42
|
* Create s3 storage resources.
|
|
43
43
|
*/
|
|
44
44
|
class S3StorageFactory extends constructs_1.Construct {
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.S3StorageFactory", version: "0.4.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.S3StorageFactory", version: "0.4.522" };
|
|
46
46
|
/**
|
|
47
47
|
* Retrieve or create the storage factory for the current scope.
|
|
48
48
|
*
|
package/lib/spdx-license.js
CHANGED
|
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
9
9
|
*/
|
|
10
10
|
class SpdxLicense {
|
|
11
11
|
id;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.SpdxLicense", version: "0.4.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "construct-hub.SpdxLicense", version: "0.4.522" };
|
|
13
13
|
static _ALL = new Map();
|
|
14
14
|
//#region Individual SPDX Licenses
|
|
15
15
|
/**
|