cdk-nextjs 0.7.6 → 0.7.8
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 +3 -3
- package/.jsii.tabl.json +1 -1
- package/README.md +12 -3
- package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +31 -13
- package/docs/adapter-runtime.md +1 -1
- package/docs/caching-guide.md +11 -1
- package/docs/harness-coverage.md +154 -73
- package/lib/adapter/adapter.mjs +12 -3
- package/lib/adapter/aws-cache-store.d.ts +221 -3
- package/lib/adapter/aws-cache-store.js +481 -35
- package/lib/adapter/aws-cache-store.test.js +706 -3
- package/lib/adapter/cache-handler.d.ts +5 -3
- package/lib/adapter/cache-handler.js +16 -10
- package/lib/adapter/cache-handler.mjs +517 -49
- package/lib/adapter/cache-handler.test.js +44 -1
- package/lib/adapter/cache-utils.d.ts +22 -0
- package/lib/adapter/cache-utils.js +44 -1
- package/lib/adapter/function-groups.js +17 -4
- package/lib/adapter/function-groups.test.js +33 -1
- package/lib/adapter/memory-cache-handler.d.ts +5 -1
- package/lib/adapter/memory-cache-handler.js +6 -2
- package/lib/adapter/s3-cache-handler.d.ts +12 -1
- package/lib/adapter/s3-cache-handler.js +30 -8
- package/lib/adapter/s3-cache-handler.test.js +84 -2
- package/lib/adapter/use-cache-common.d.ts +66 -1
- package/lib/adapter/use-cache-common.js +142 -19
- package/lib/adapter/use-cache-common.test.js +174 -1
- package/lib/adapter/use-cache-default-handler.js +36 -6
- package/lib/adapter/use-cache-default-handler.mjs +553 -47
- package/lib/adapter/use-cache-handlers.test.js +247 -7
- package/lib/adapter/use-cache-remote-handler.js +9 -7
- package/lib/adapter/use-cache-remote-handler.mjs +542 -45
- package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +2 -1
- package/lib/lambdas/post-deploy/prune-revalidation-table.js +35 -13
- package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +19 -1
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.js +20 -4
- package/lib/runtime/core.test.js +17 -1
- package/lib/runtime/image-utils.d.ts +8 -9
- package/lib/runtime/image-utils.js +16 -1
- package/lib/runtime/image-utils.test.js +13 -1
- package/lib/runtime/image.js +9 -3
- package/lib/runtime/lambda.mjs +66 -18
- package/lib/runtime/server.mjs +66 -18
- package/lib/runtime/tag-manifest.d.ts +40 -0
- package/lib/runtime/tag-manifest.js +59 -0
- package/lib/runtime/tag-manifest.test.d.ts +1 -0
- package/lib/runtime/tag-manifest.test.js +47 -0
- package/package.json +3 -3
- package/scripts/e2e-deploy.sh +7 -2
- package/scripts/e2e-harness/README.md +72 -35
- package/scripts/e2e-harness/screen.mjs +148 -7
- package/scripts/playwright-install-deps.sh +40 -0
|
@@ -34,10 +34,6 @@ function bucketFromEnv() {
|
|
|
34
34
|
}
|
|
35
35
|
return new aws_cache_store_1.CacheBucket(new client_s3_1.S3Client({ region }), bucketName);
|
|
36
36
|
}
|
|
37
|
-
/** Whether `stored` is past `revalidate`, so a fresher copy may exist. */
|
|
38
|
-
function isPastRevalidate(stored, at) {
|
|
39
|
-
return at > stored.timestamp + stored.revalidate * 1000;
|
|
40
|
-
}
|
|
41
37
|
/** Whether `stored` is past `expire`, and may no longer be served at all. */
|
|
42
38
|
function isPastExpire(stored, at) {
|
|
43
39
|
return at > stored.timestamp + stored.expire * 1000;
|
|
@@ -123,7 +119,7 @@ function createRemoteUseCacheHandler(options = {}) {
|
|
|
123
119
|
// regenerating it here too. An expired entry S3 has nothing newer for is
|
|
124
120
|
// dropped below.
|
|
125
121
|
if (!stored ||
|
|
126
|
-
isPastRevalidate(stored, at) ||
|
|
122
|
+
(0, use_cache_common_1.isPastRevalidate)(stored, at) ||
|
|
127
123
|
tags.state(stored.tags, stored.timestamp) !== "fresh") {
|
|
128
124
|
const fromS3 = await readFromS3(cacheKey);
|
|
129
125
|
if (fromS3 && (!stored || fromS3.timestamp > stored.timestamp)) {
|
|
@@ -178,8 +174,14 @@ function createRemoteUseCacheHandler(options = {}) {
|
|
|
178
174
|
done();
|
|
179
175
|
await writeToS3(cacheKey, stored);
|
|
180
176
|
},
|
|
181
|
-
|
|
177
|
+
// Waits for the log query on every request: an entry read from S3 may
|
|
178
|
+
// predate this instance, so what the query says applies to it at once.
|
|
179
|
+
...(0, use_cache_common_1.tagMethods)(tags, { blocking: true }),
|
|
180
|
+
async getExpiration(implicitTags) {
|
|
181
|
+
await tags.ensure(implicitTags);
|
|
182
|
+
return tags.expiration(implicitTags);
|
|
183
|
+
},
|
|
182
184
|
};
|
|
183
185
|
}
|
|
184
186
|
exports.default = (0, use_cache_common_1.lazyHandler)(() => createRemoteUseCacheHandler());
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0dBLGtFQXlKQztBQXpQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxrREFBNkI7QUFLN0IsdURBSzJCO0FBQzNCLCtDQUFnRjtBQUNoRix5REFjNEI7QUFxQjVCLFNBQVMsYUFBYTtJQUNwQixJQUFJLElBQUEsK0JBQVksR0FBRSxFQUFFLENBQUM7UUFDbkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sSUFBSSw2QkFBVyxDQUFDLElBQUksb0JBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxTQUFTLGdCQUFnQixDQUFDLE1BQW1CLEVBQUUsRUFBVTtJQUN2RCxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFELENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsU0FBUyxZQUFZLENBQUMsTUFBbUIsRUFBRSxFQUFVO0lBQ25ELE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEQsQ0FBQztB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QyxHQUFHLENBQ1AsUUFBZ0IsRUFDaEIsWUFBaUM7WUFFakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQW1CLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxNQUFNLElBQUEsZ0NBQWEsRUFBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixpRUFBaUU7Z0JBQ2pFLEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksSUFBQSxpQ0FBYyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixzRUFBc0U7WUFDdEUsb0NBQW9DO1lBQ3BDLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxHQUFHLElBQUEsNkJBQVUsRUFBQyxJQUFJLENBQUM7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZSxJQUFBLDhCQUFXLEVBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgVGhlIGBjYWNoZUhhbmRsZXJzLnJlbW90ZWAgaGFuZGxlciwgZm9yIGAndXNlIGNhY2hlOiByZW1vdGUnYC5cbiAgU2VlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9jb25maWcvbmV4dC1jb25maWctanMvY2FjaGVIYW5kbGVyc1xuXG4gIEVudHJpZXMgYXJlIHN0b3JlZCBpbiB0aGUgY2FjaGUgYnVja2V0LCBzbyBldmVyeSBpbnN0YW5jZSByZWFkcyB3aGF0IGFueVxuICBpbnN0YW5jZSB3cm90ZSwgd2l0aCBhIGJvdW5kZWQgaW4tbWVtb3J5IHRpZXIgaW4gZnJvbnQuIFRhZ3MgZ28gdGhyb3VnaCB0aGVcbiAgcmV2YWxpZGF0aW9uIHRhYmxlJ3MgbWFya2VyIHJvd3MsIHNoYXJlZCB3aXRoIHBsYWluIGAndXNlIGNhY2hlJ2AgYW5kIHdpdGggdGhlXG4gIGluY3JlbWVudGFsIGNhY2hlLiBXaXRob3V0IHRoaXMsIE5leHQuanMgbWFwcyBgcmVtb3RlYCB0byBpdHMgaW4tbWVtb3J5XG4gIGRlZmF1bHQgaGFuZGxlciwgYW5kIGAndXNlIGNhY2hlOiByZW1vdGUnYCBpcyBubyBtb3JlIHNoYXJlZCB0aGFuXG4gIGAndXNlIGNhY2hlJ2AuXG4qL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCBnZXREZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIYW5kbGVyLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvY2FjaGUtaGFuZGxlcnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIENhY2hlQnVja2V0LFxuICByZXNvbHZlQXdzQ2FjaGVDb25maWcsXG4gIFRyYWNrZWRUYWdNYXJrZXJzLFxuICB1c2VDYWNoZVMzS2V5LFxufSBmcm9tIFwiLi9hd3MtY2FjaGUtc3RvcmVcIjtcbmltcG9ydCB7IHBhcnNlQ2FjaGVWYWx1ZSwgc2VyaWFsaXplQ2FjaGVWYWx1ZSwgc2hhMjU2SGV4IH0gZnJvbSBcIi4vY2FjaGUtdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNhY2hlRW50cnlPZixcbiAgREVGQVVMVF9NRU1PUllfQllURVMsXG4gIEVudHJ5THJ1LFxuICBpc0J1aWxkUGhhc2UsXG4gIGlzRHluYW1pY0VudHJ5LFxuICBsYXp5SGFuZGxlcixcbiAgbm93LFxuICBudW1iZXJGcm9tRW52LFxuICBQZW5kaW5nU2V0cyxcbiAgc2hhcmVkVGFnTWFuaWZlc3QsXG4gIFN0b3JlZEVudHJ5LFxuICBzdG9yZWRFbnRyeU9mLFxuICB0YWdNZXRob2RzLFxufSBmcm9tIFwiLi91c2UtY2FjaGUtY29tbW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlVXNlQ2FjaGVIYW5kbGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGVudHJpZXMgYXJlIHN0b3JlZCBpbiwgb3IgYG51bGxgIGZvciBtZW1vcnkgb25seS4gRnJvbVxuICAgKiBgQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRWAgYnkgZGVmYXVsdCwgYW5kIG5ldmVyIGF0IGJ1aWxkIHRpbWUuXG4gICAqL1xuICBidWNrZXQ/OiBDYWNoZUJ1Y2tldCB8IG51bGw7XG4gIC8qKiBQcmVmaXhlcyBldmVyeSBTMyBrZXk7IGBDREtfTkVYVEpTX0JVSUxEX0lEYCBieSBkZWZhdWx0LiAqL1xuICBidWlsZElkPzogc3RyaW5nO1xuICAvKiogVGFnIHN0YXRlOyB0aGUgcHJvY2Vzcy13aWRlIG9uZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBieSBkZWZhdWx0LiAqL1xuICB0YWdzPzogVHJhY2tlZFRhZ01hcmtlcnM7XG59XG5cbi8qKiBXaGF0IGlzIHdyaXR0ZW4gdG8gUzMgZm9yIG9uZSBlbnRyeS4gKi9cbmludGVyZmFjZSBTZXJpYWxpemVkRW50cnkgZXh0ZW5kcyBPbWl0PFN0b3JlZEVudHJ5LCBcInZhbHVlXCI+IHtcbiAgLyoqIFRoZSBmdWxsIGNhY2hlIGtleSwgY2hlY2tlZCBvbiByZWFkOyB0aGUgb2JqZWN0IGtleSBpcyBvbmx5IGl0cyBoYXNoLiAqL1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gYnVja2V0RnJvbUVudigpOiBDYWNoZUJ1Y2tldCB8IG51bGwge1xuICBpZiAoaXNCdWlsZFBoYXNlKCkpIHtcbiAgICAvLyBObyBjcmVkZW50aWFscywgYW5kIG5vdGhpbmcgYSBidWlsZC10aW1lIGVudHJ5IGNvdWxkIGJlIHJlYWQgYmFjayBieTpcbiAgICAvLyBwcmVyZW5kZXJzIGtlZXAgd2hhdCB0aGV5IG5lZWQgaW4gdGhlaXIgb3duIHJlc3VtZSBkYXRhIGNhY2hlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHsgYnVja2V0TmFtZSwgcmVnaW9uIH0gPSByZXNvbHZlQXdzQ2FjaGVDb25maWcoKTtcbiAgaWYgKCFidWNrZXROYW1lKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJDREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQsICd1c2UgY2FjaGU6IHJlbW90ZScgZW50cmllcyBhcmUgbG9jYWwgdG8gZWFjaCBpbnN0YW5jZVwiLFxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBDYWNoZUJ1Y2tldChuZXcgUzNDbGllbnQoeyByZWdpb24gfSksIGJ1Y2tldE5hbWUpO1xufVxuXG4vKiogV2hldGhlciBgc3RvcmVkYCBpcyBwYXN0IGByZXZhbGlkYXRlYCwgc28gYSBmcmVzaGVyIGNvcHkgbWF5IGV4aXN0LiAqL1xuZnVuY3Rpb24gaXNQYXN0UmV2YWxpZGF0ZShzdG9yZWQ6IFN0b3JlZEVudHJ5LCBhdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdCA+IHN0b3JlZC50aW1lc3RhbXAgKyBzdG9yZWQucmV2YWxpZGF0ZSAqIDEwMDA7XG59XG5cbi8qKiBXaGV0aGVyIGBzdG9yZWRgIGlzIHBhc3QgYGV4cGlyZWAsIGFuZCBtYXkgbm8gbG9uZ2VyIGJlIHNlcnZlZCBhdCBhbGwuICovXG5mdW5jdGlvbiBpc1Bhc3RFeHBpcmUoc3RvcmVkOiBTdG9yZWRFbnRyeSwgYXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gYXQgPiBzdG9yZWQudGltZXN0YW1wICsgc3RvcmVkLmV4cGlyZSAqIDEwMDA7XG59XG5cbi8qKlxuICogQSBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AgaGFuZGxlcjogUzMgZm9yIHN0b3JhZ2UsIG1lbW9yeSBpbiBmcm9udCwgYW5kIHRoZVxuICogcmV2YWxpZGF0aW9uIHRhYmxlIGZvciB0YWdzLlxuICpcbiAqIFVubGlrZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuIGVudHJ5IGlzIHNlcnZlZCB1bnRpbCBgZXhwaXJlYCwgbm90IGRyb3BwZWQgYXRcbiAqIGByZXZhbGlkYXRlYDogYSByZW1vdGUgcmVhZCBpcyB3b3J0aCBzZXJ2aW5nIHN0YWxlIHdoaWxlIE5leHQuanMncyB3cmFwcGVyXG4gKiByZWdlbmVyYXRlcyBpdCBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggaXMgd2hhdCBgcmV2YWxpZGF0ZWAgaXMgZm9yLiBBIG1lbW9yeVxuICogY29weSBwYXN0IGByZXZhbGlkYXRlYCBpcyBjaGVja2VkIGFnYWluc3QgUzMgZmlyc3QsIHNpbmNlIGFub3RoZXIgaW5zdGFuY2UgbWF5XG4gKiBhbHJlYWR5IGhhdmUgd3JpdHRlbiB0aGUgcmVnZW5lcmF0ZWQgZW50cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW1vdGVVc2VDYWNoZUhhbmRsZXIoXG4gIG9wdGlvbnM6IFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMgPSB7fSxcbik6IENhY2hlSGFuZGxlciB7XG4gIGNvbnN0IGJ1Y2tldCA9XG4gICAgb3B0aW9ucy5idWNrZXQgPT09IHVuZGVmaW5lZCA/IGJ1Y2tldEZyb21FbnYoKSA6IG9wdGlvbnMuYnVja2V0O1xuICBjb25zdCBidWlsZElkID0gb3B0aW9ucy5idWlsZElkID8/IHJlc29sdmVBd3NDYWNoZUNvbmZpZygpLmJ1aWxkSWQ7XG4gIGNvbnN0IHRhZ3MgPSBvcHRpb25zLnRhZ3MgPz8gc2hhcmVkVGFnTWFuaWZlc3QoKTtcbiAgY29uc3QgbWVtb3J5ID0gbmV3IEVudHJ5THJ1KFxuICAgIG51bWJlckZyb21FbnYoXCJDREtfTkVYVEpTX1VTRV9DQUNIRV9NRU1PUllfQllURVNcIiwgREVGQVVMVF9NRU1PUllfQllURVMpLFxuICApO1xuICBjb25zdCBwZW5kaW5nID0gbmV3IFBlbmRpbmdTZXRzKCk7XG4gIGNvbnN0IGRlYnVnID0gZ2V0RGVidWcoXCJjZGstbmV4dGpzOmNhY2hlLWhhbmRsZXI6dXNlLWNhY2hlOnJlbW90ZVwiKTtcblxuICBjb25zdCBzM0tleSA9IChjYWNoZUtleTogc3RyaW5nKSA9PlxuICAgIHVzZUNhY2hlUzNLZXkoYnVpbGRJZCwgc2hhMjU2SGV4KGNhY2hlS2V5KSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyb21TMyhcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICApOiBQcm9taXNlPFN0b3JlZEVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHMzS2V5KGNhY2hlS2V5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gYXdhaXQgYnVja2V0LmdldChrZXkpO1xuICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgZGVidWcoYFMzIE1JU1MgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2FjaGVWYWx1ZShvYmplY3QpIGFzIFNlcmlhbGl6ZWRFbnRyeTtcbiAgICAgIGlmIChwYXJzZWQua2V5ICE9PSBjYWNoZUtleSkge1xuICAgICAgICAvLyBBIGhhc2ggY29sbGlzaW9uLCBvciBhbiBvYmplY3QgdGhhdCBpcyBub3Qgb3VyczogbmV2ZXIgc2VydmUgaXQuXG4gICAgICAgIGNvbnNvbGUud2FybihgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gaXMgZm9yIGFub3RoZXIga2V5YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWdzOiBwYXJzZWQudGFncyxcbiAgICAgICAgc3RhbGU6IHBhcnNlZC5zdGFsZSxcbiAgICAgICAgdGltZXN0YW1wOiBwYXJzZWQudGltZXN0YW1wLFxuICAgICAgICBleHBpcmU6IHBhcnNlZC5leHBpcmUsXG4gICAgICAgIHJldmFsaWRhdGU6IHBhcnNlZC5yZXZhbGlkYXRlLFxuICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkocGFyc2VkLnZhbHVlKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvciByZWFkaW5nICd1c2UgY2FjaGU6IHJlbW90ZScgZW50cnkgJHtrZXl9IGZyb20gUzM6YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3cml0ZVRvUzMoY2FjaGVLZXk6IHN0cmluZywgc3RvcmVkOiBTdG9yZWRFbnRyeSkge1xuICAgIGlmICghYnVja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHMzS2V5KGNhY2hlS2V5KTtcbiAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkRW50cnkgPSB7XG4gICAgICAuLi5zdG9yZWQsXG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgdmFsdWU6IEJ1ZmZlci5mcm9tKHN0b3JlZC52YWx1ZSksXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYnVja2V0LnB1dEpzb24oa2V5LCBzZXJpYWxpemVDYWNoZVZhbHVlKHNlcmlhbGl6ZWQpKTtcbiAgICAgIGRlYnVnKGBTMyBTRVQgJHtjYWNoZUtleX0gKCR7a2V5fSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGVudHJ5IGlzIHN0aWxsIGluIG1lbW9yeSBoZXJlOyBvdGhlciBpbnN0YW5jZXMganVzdCBtaXNzLlxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yIHdyaXRpbmcgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gdG8gUzM6YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGNhY2hlS2V5OiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgIGF3YWl0IHBlbmRpbmcud2FpdChjYWNoZUtleSk7XG4gICAgICBjb25zdCBhdCA9IG5vdygpO1xuXG4gICAgICBsZXQgc3RvcmVkID0gbWVtb3J5LmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKHN0b3JlZC50YWdzKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFzdCBgcmV2YWxpZGF0ZWAsIG9yIHN0YWxlIG9yIGV4cGlyZWQgYnkgdGFnOiBhbm90aGVyIGluc3RhbmNlIG1heVxuICAgICAgLy8gYWxyZWFkeSBoYXZlIHdyaXR0ZW4gdGhlIHJlZ2VuZXJhdGVkIGVudHJ5LCBhbmQgc2VydmluZyB0aGF0IGJlYXRzXG4gICAgICAvLyByZWdlbmVyYXRpbmcgaXQgaGVyZSB0b28uIEFuIGV4cGlyZWQgZW50cnkgUzMgaGFzIG5vdGhpbmcgbmV3ZXIgZm9yIGlzXG4gICAgICAvLyBkcm9wcGVkIGJlbG93LlxuICAgICAgaWYgKFxuICAgICAgICAhc3RvcmVkIHx8XG4gICAgICAgIGlzUGFzdFJldmFsaWRhdGUoc3RvcmVkLCBhdCkgfHxcbiAgICAgICAgdGFncy5zdGF0ZShzdG9yZWQudGFncywgc3RvcmVkLnRpbWVzdGFtcCkgIT09IFwiZnJlc2hcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZyb21TMyA9IGF3YWl0IHJlYWRGcm9tUzMoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoZnJvbVMzICYmICghc3RvcmVkIHx8IGZyb21TMy50aW1lc3RhbXAgPiBzdG9yZWQudGltZXN0YW1wKSkge1xuICAgICAgICAgIHN0b3JlZCA9IGZyb21TMztcbiAgICAgICAgICAvLyBBbiBlbnRyeSB3cml0dGVuIGJ5IGFub3RoZXIgaW5zdGFuY2U6IGl0cyB0YWdzIG1heSBoYXZlIGJlZW5cbiAgICAgICAgICAvLyByZXZhbGlkYXRlZCBhdCBhbnkgdGltZSBzaW5jZSwgc28gdGhleSBhcmUgcmVhZCBiZWZvcmUganVkZ2luZyBpdC5cbiAgICAgICAgICBhd2FpdCB0YWdzLmVuc3VyZShzdG9yZWQudGFncyk7XG4gICAgICAgICAgbWVtb3J5LnNldChjYWNoZUtleSwgc3RvcmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXN0b3JlZCkge1xuICAgICAgICBkZWJ1ZyhgTUlTUyAke2NhY2hlS2V5fWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGFzdEV4cGlyZShzdG9yZWQsIGF0KSkge1xuICAgICAgICBkZWJ1ZyhgRVhQSVJFRCAke2NhY2hlS2V5fWApO1xuICAgICAgICBtZW1vcnkuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXRlID0gdGFncy5zdGF0ZShzdG9yZWQudGFncywgc3RvcmVkLnRpbWVzdGFtcCk7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiZXhwaXJlZFwiKSB7XG4gICAgICAgIGRlYnVnKGBFWFBJUkVEIEJZIFRBRyAke2NhY2hlS2V5fWApO1xuICAgICAgICBtZW1vcnkuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGRlYnVnKGBISVQgJHtjYWNoZUtleX0ke3N0YXRlID09PSBcInN0YWxlXCIgPyBcIiAoc3RhbGUgdGFnKVwiIDogXCJcIn1gKTtcbiAgICAgIC8vIGByZXZhbGlkYXRlOiAtMWAgbWFrZXMgdGhlIHdyYXBwZXIgc2VydmUgdGhlIGVudHJ5IGFuZCByZWdlbmVyYXRlIGl0IGluXG4gICAgICAvLyB0aGUgYmFja2dyb3VuZCwgdGhlIGJ1aWx0LWluIGhhbmRsZXIncyBhbnN3ZXIgdG8gYSBzdGFsZSB0YWcuXG4gICAgICByZXR1cm4gY2FjaGVFbnRyeU9mKHN0b3JlZCwgc3RhdGUgPT09IFwic3RhbGVcIiA/IC0xIDogc3RvcmVkLnJldmFsaWRhdGUpO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZXQoXG4gICAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgICAgcGVuZGluZ0VudHJ5OiBQcm9taXNlPENhY2hlRW50cnk+LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgZG9uZSA9IHBlbmRpbmcuYmVnaW4oY2FjaGVLZXkpO1xuICAgICAgbGV0IHN0b3JlZDogU3RvcmVkRW50cnk7XG4gICAgICB0cnkge1xuICAgICAgICBzdG9yZWQgPSBhd2FpdCBzdG9yZWRFbnRyeU9mKHBlbmRpbmdFbnRyeSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBUaGUgc3RyZWFtIGVycm9yZWQ6IHN0b3JlIG5vdGhpbmcgcmF0aGVyIHRoYW4gYSBwYXJ0aWFsIGVudHJ5LlxuICAgICAgICBkZWJ1ZyhgU0VUIEZBSUxFRCAke2NhY2hlS2V5fWAsIGVycm9yKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNEeW5hbWljRW50cnkoc3RvcmVkKSkge1xuICAgICAgICBkZWJ1ZyhgU0tJUCBkeW5hbWljIGVudHJ5ICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWVtb3J5LnNldChjYWNoZUtleSwgc3RvcmVkKTtcbiAgICAgIHRhZ3MudHJhY2soc3RvcmVkLnRhZ3MpO1xuICAgICAgLy8gQSBgZ2V0YCB3YWl0aW5nIG9uIHRoaXMgYHNldGAgY2FuIGJlIGFuc3dlcmVkIGZyb20gbWVtb3J5IG5vdzsgb25seVxuICAgICAgLy8gb3RoZXIgaW5zdGFuY2VzIG5lZWQgdGhlIFMzIGNvcHkuXG4gICAgICBkb25lKCk7XG4gICAgICBhd2FpdCB3cml0ZVRvUzMoY2FjaGVLZXksIHN0b3JlZCk7XG4gICAgfSxcblxuICAgIC4uLnRhZ01ldGhvZHModGFncyksXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlIYW5kbGVyKCgpID0+IGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcigpKTtcbiJdfQ==
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNEZBLGtFQWdLQztBQTVQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxrREFBNkI7QUFLN0IsdURBSzJCO0FBQzNCLCtDQUFnRjtBQUNoRix5REFlNEI7QUFxQjVCLFNBQVMsYUFBYTtJQUNwQixJQUFJLElBQUEsK0JBQVksR0FBRSxFQUFFLENBQUM7UUFDbkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sSUFBSSw2QkFBVyxDQUFDLElBQUksb0JBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxTQUFTLFlBQVksQ0FBQyxNQUFtQixFQUFFLEVBQVU7SUFDbkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQ3pDLFVBQXdDLEVBQUU7SUFFMUMsTUFBTSxNQUFNLEdBQ1YsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMs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IGZvciBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AuXG4gIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29uZmlnL25leHQtY29uZmlnLWpzL2NhY2hlSGFuZGxlcnNcblxuICBFbnRyaWVzIGFyZSBzdG9yZWQgaW4gdGhlIGNhY2hlIGJ1Y2tldCwgc28gZXZlcnkgaW5zdGFuY2UgcmVhZHMgd2hhdCBhbnlcbiAgaW5zdGFuY2Ugd3JvdGUsIHdpdGggYSBib3VuZGVkIGluLW1lbW9yeSB0aWVyIGluIGZyb250LiBUYWdzIGdvIHRocm91Z2ggdGhlXG4gIHJldmFsaWRhdGlvbiB0YWJsZSdzIG1hcmtlciByb3dzLCBzaGFyZWQgd2l0aCBwbGFpbiBgJ3VzZSBjYWNoZSdgIGFuZCB3aXRoIHRoZVxuICBpbmNyZW1lbnRhbCBjYWNoZS4gV2l0aG91dCB0aGlzLCBOZXh0LmpzIG1hcHMgYHJlbW90ZWAgdG8gaXRzIGluLW1lbW9yeVxuICBkZWZhdWx0IGhhbmRsZXIsIGFuZCBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AgaXMgbm8gbW9yZSBzaGFyZWQgdGhhblxuICBgJ3VzZSBjYWNoZSdgLlxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENhY2hlRW50cnksXG4gIENhY2hlSGFuZGxlcixcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2NhY2hlLWhhbmRsZXJzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBDYWNoZUJ1Y2tldCxcbiAgcmVzb2x2ZUF3c0NhY2hlQ29uZmlnLFxuICBUcmFja2VkVGFnTWFya2VycyxcbiAgdXNlQ2FjaGVTM0tleSxcbn0gZnJvbSBcIi4vYXdzLWNhY2hlLXN0b3JlXCI7XG5pbXBvcnQgeyBwYXJzZUNhY2hlVmFsdWUsIHNlcmlhbGl6ZUNhY2hlVmFsdWUsIHNoYTI1NkhleCB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQge1xuICBjYWNoZUVudHJ5T2YsXG4gIERFRkFVTFRfTUVNT1JZX0JZVEVTLFxuICBFbnRyeUxydSxcbiAgaXNCdWlsZFBoYXNlLFxuICBpc0R5bmFtaWNFbnRyeSxcbiAgaXNQYXN0UmV2YWxpZGF0ZSxcbiAgbGF6eUhhbmRsZXIsXG4gIG5vdyxcbiAgbnVtYmVyRnJvbUVudixcbiAgUGVuZGluZ1NldHMsXG4gIHNoYXJlZFRhZ01hbmlmZXN0LFxuICBTdG9yZWRFbnRyeSxcbiAgc3RvcmVkRW50cnlPZixcbiAgdGFnTWV0aG9kcyxcbn0gZnJvbSBcIi4vdXNlLWNhY2hlLWNvbW1vblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4sIG9yIGBudWxsYCBmb3IgbWVtb3J5IG9ubHkuIEZyb21cbiAgICogYENES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUVgIGJ5IGRlZmF1bHQsIGFuZCBuZXZlciBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgYnVja2V0PzogQ2FjaGVCdWNrZXQgfCBudWxsO1xuICAvKiogUHJlZml4ZXMgZXZlcnkgUzMga2V5OyBgQ0RLX05FWFRKU19CVUlMRF9JRGAgYnkgZGVmYXVsdC4gKi9cbiAgYnVpbGRJZD86IHN0cmluZztcbiAgLyoqIFRhZyBzdGF0ZTsgdGhlIHByb2Nlc3Mtd2lkZSBvbmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYnkgZGVmYXVsdC4gKi9cbiAgdGFncz86IFRyYWNrZWRUYWdNYXJrZXJzO1xufVxuXG4vKiogV2hhdCBpcyB3cml0dGVuIHRvIFMzIGZvciBvbmUgZW50cnkuICovXG5pbnRlcmZhY2UgU2VyaWFsaXplZEVudHJ5IGV4dGVuZHMgT21pdDxTdG9yZWRFbnRyeSwgXCJ2YWx1ZVwiPiB7XG4gIC8qKiBUaGUgZnVsbCBjYWNoZSBrZXksIGNoZWNrZWQgb24gcmVhZDsgdGhlIG9iamVjdCBrZXkgaXMgb25seSBpdHMgaGFzaC4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldEZyb21FbnYoKTogQ2FjaGVCdWNrZXQgfCBudWxsIHtcbiAgaWYgKGlzQnVpbGRQaGFzZSgpKSB7XG4gICAgLy8gTm8gY3JlZGVudGlhbHMsIGFuZCBub3RoaW5nIGEgYnVpbGQtdGltZSBlbnRyeSBjb3VsZCBiZSByZWFkIGJhY2sgYnk6XG4gICAgLy8gcHJlcmVuZGVycyBrZWVwIHdoYXQgdGhleSBuZWVkIGluIHRoZWlyIG93biByZXN1bWUgZGF0YSBjYWNoZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGJ1Y2tldE5hbWUsIHJlZ2lvbiB9ID0gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCk7XG4gIGlmICghYnVja2V0TmFtZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJpZXMgYXJlIGxvY2FsIHRvIGVhY2ggaW5zdGFuY2VcIixcbiAgICApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQ2FjaGVCdWNrZXQobmV3IFMzQ2xpZW50KHsgcmVnaW9uIH0pLCBidWNrZXROYW1lKTtcbn1cblxuLyoqIFdoZXRoZXIgYHN0b3JlZGAgaXMgcGFzdCBgZXhwaXJlYCwgYW5kIG1heSBubyBsb25nZXIgYmUgc2VydmVkIGF0IGFsbC4gKi9cbmZ1bmN0aW9uIGlzUGFzdEV4cGlyZShzdG9yZWQ6IFN0b3JlZEVudHJ5LCBhdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdCA+IHN0b3JlZC50aW1lc3RhbXAgKyBzdG9yZWQuZXhwaXJlICogMTAwMDtcbn1cblxuLyoqXG4gKiBBIGAndXNlIGNhY2hlOiByZW1vdGUnYCBoYW5kbGVyOiBTMyBmb3Igc3RvcmFnZSwgbWVtb3J5IGluIGZyb250LCBhbmQgdGhlXG4gKiByZXZhbGlkYXRpb24gdGFibGUgZm9yIHRhZ3MuXG4gKlxuICogVW5saWtlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW4gZW50cnkgaXMgc2VydmVkIHVudGlsIGBleHBpcmVgLCBub3QgZHJvcHBlZCBhdFxuICogYHJldmFsaWRhdGVgOiBhIHJlbW90ZSByZWFkIGlzIHdvcnRoIHNlcnZpbmcgc3RhbGUgd2hpbGUgTmV4dC5qcydzIHdyYXBwZXJcbiAqIHJlZ2VuZXJhdGVzIGl0IGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBpcyB3aGF0IGByZXZhbGlkYXRlYCBpcyBmb3IuIEEgbWVtb3J5XG4gKiBjb3B5IHBhc3QgYHJldmFsaWRhdGVgIGlzIGNoZWNrZWQgYWdhaW5zdCBTMyBmaXJzdCwgc2luY2UgYW5vdGhlciBpbnN0YW5jZSBtYXlcbiAqIGFscmVhZHkgaGF2ZSB3cml0dGVuIHRoZSByZWdlbmVyYXRlZCBlbnRyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcihcbiAgb3B0aW9uczogUmVtb3RlVXNlQ2FjaGVIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogQ2FjaGVIYW5kbGVyIHtcbiAgY29uc3QgYnVja2V0ID1cbiAgICBvcHRpb25zLmJ1Y2tldCA9PT0gdW5kZWZpbmVkID8gYnVja2V0RnJvbUVudigpIDogb3B0aW9ucy5idWNrZXQ7XG4gIGNvbnN0IGJ1aWxkSWQgPSBvcHRpb25zLmJ1aWxkSWQgPz8gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCkuYnVpbGRJZDtcbiAgY29uc3QgdGFncyA9IG9wdGlvbnMudGFncyA/PyBzaGFyZWRUYWdNYW5pZmVzdCgpO1xuICBjb25zdCBtZW1vcnkgPSBuZXcgRW50cnlMcnUoXG4gICAgbnVtYmVyRnJvbUVudihcIkNES19ORVhUSlNfVVNFX0NBQ0hFX01FTU9SWV9CWVRFU1wiLCBERUZBVUxUX01FTU9SWV9CWVRFUyksXG4gICk7XG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgUGVuZGluZ1NldHMoKTtcbiAgY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6Y2FjaGUtaGFuZGxlcjp1c2UtY2FjaGU6cmVtb3RlXCIpO1xuXG4gIGNvbnN0IHMzS2V5ID0gKGNhY2hlS2V5OiBzdHJpbmcpID0+XG4gICAgdXNlQ2FjaGVTM0tleShidWlsZElkLCBzaGEyNTZIZXgoY2FjaGVLZXkpKTtcblxuICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVMzKFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICk6IFByb21pc2U8U3RvcmVkRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmplY3QgPSBhd2FpdCBidWNrZXQuZ2V0KGtleSk7XG4gICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICBkZWJ1ZyhgUzMgTUlTUyAke2NhY2hlS2V5fWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDYWNoZVZhbHVlKG9iamVjdCkgYXMgU2VyaWFsaXplZEVudHJ5O1xuICAgICAgaWYgKHBhcnNlZC5rZXkgIT09IGNhY2hlS2V5KSB7XG4gICAgICAgIC8vIEEgaGFzaCBjb2xsaXNpb24sIG9yIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvdXJzOiBuZXZlciBzZXJ2ZSBpdC5cbiAgICAgICAgY29uc29sZS53YXJuKGAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSBpcyBmb3IgYW5vdGhlciBrZXlgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZ3M6IHBhcnNlZC50YWdzLFxuICAgICAgICBzdGFsZTogcGFyc2VkLnN0YWxlLFxuICAgICAgICB0aW1lc3RhbXA6IHBhcnNlZC50aW1lc3RhbXAsXG4gICAgICAgIGV4cGlyZTogcGFyc2VkLmV4cGlyZSxcbiAgICAgICAgcmV2YWxpZGF0ZTogcGFyc2VkLnJldmFsaWRhdGUsXG4gICAgICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShwYXJzZWQudmFsdWUpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yIHJlYWRpbmcgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gZnJvbSBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlVG9TMyhjYWNoZUtleTogc3RyaW5nLCBzdG9yZWQ6IFN0b3JlZEVudHJ5KSB7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRFbnRyeSA9IHtcbiAgICAgIC4uLnN0b3JlZCxcbiAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICB2YWx1ZTogQnVmZmVyLmZyb20oc3RvcmVkLnZhbHVlKSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBidWNrZXQucHV0SnNvbihrZXksIHNlcmlhbGl6ZUNhY2hlVmFsdWUoc2VyaWFsaXplZCkpO1xuICAgICAgZGVidWcoYFMzIFNFVCAke2NhY2hlS2V5fSAoJHtrZXl9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGUgZW50cnkgaXMgc3RpbGwgaW4gbWVtb3J5IGhlcmU7IG90aGVyIGluc3RhbmNlcyBqdXN0IG1pc3MuXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3Igd3JpdGluZyAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSB0byBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXQoY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgYXdhaXQgcGVuZGluZy53YWl0KGNhY2hlS2V5KTtcbiAgICAgIGNvbnN0IGF0ID0gbm93KCk7XG5cbiAgICAgIGxldCBzdG9yZWQgPSBtZW1vcnkuZ2V0KGNhY2hlS2V5KTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgYXdhaXQgdGFncy5lbnN1cmUoc3RvcmVkLnRhZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXN0IGByZXZhbGlkYXRlYCwgb3Igc3RhbGUgb3IgZXhwaXJlZCBieSB0YWc6IGFub3RoZXIgaW5zdGFuY2UgbWF5XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgd3JpdHRlbiB0aGUgcmVnZW5lcmF0ZWQgZW50cnksIGFuZCBzZXJ2aW5nIHRoYXQgYmVhdHNcbiAgICAgIC8vIHJlZ2VuZXJhdGluZyBpdCBoZXJlIHRvby4gQW4gZXhwaXJlZCBlbnRyeSBTMyBoYXMgbm90aGluZyBuZXdlciBmb3IgaXNcbiAgICAgIC8vIGRyb3BwZWQgYmVsb3cuXG4gICAgICBpZiAoXG4gICAgICAgICFzdG9yZWQgfHxcbiAgICAgICAgaXNQYXN0UmV2YWxpZGF0ZShzdG9yZWQsIGF0KSB8fFxuICAgICAgICB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKSAhPT0gXCJmcmVzaFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZnJvbVMzID0gYXdhaXQgcmVhZEZyb21TMyhjYWNoZUtleSk7XG4gICAgICAgIGlmIChmcm9tUzMgJiYgKCFzdG9yZWQgfHwgZnJvbVMzLnRpbWVzdGFtcCA+IHN0b3JlZC50aW1lc3RhbXApKSB7XG4gICAgICAgICAgc3RvcmVkID0gZnJvbVMzO1xuICAgICAgICAgIC8vIEFuIGVudHJ5IHdyaXR0ZW4gYnkgYW5vdGhlciBpbnN0YW5jZTogaXRzIHRhZ3MgbWF5IGhhdmUgYmVlblxuICAgICAgICAgIC8vIHJldmFsaWRhdGVkIGF0IGFueSB0aW1lIHNpbmNlLCBzbyB0aGV5IGFyZSByZWFkIGJlZm9yZSBqdWRnaW5nIGl0LlxuICAgICAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKHN0b3JlZC50YWdzKTtcbiAgICAgICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RvcmVkKSB7XG4gICAgICAgIGRlYnVnKGBNSVNTICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYXN0RXhwaXJlKHN0b3JlZCwgYXQpKSB7XG4gICAgICAgIGRlYnVnKGBFWFBJUkVEICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJleHBpcmVkXCIpIHtcbiAgICAgICAgZGVidWcoYEVYUElSRUQgQlkgVEFHICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgZGVidWcoYEhJVCAke2NhY2hlS2V5fSR7c3RhdGUgPT09IFwic3RhbGVcIiA/IFwiIChzdGFsZSB0YWcpXCIgOiBcIlwifWApO1xuICAgICAgLy8gYHJldmFsaWRhdGU6IC0xYCBtYWtlcyB0aGUgd3JhcHBlciBzZXJ2ZSB0aGUgZW50cnkgYW5kIHJlZ2VuZXJhdGUgaXQgaW5cbiAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kLCB0aGUgYnVpbHQtaW4gaGFuZGxlcidzIGFuc3dlciB0byBhIHN0YWxlIHRhZy5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5T2Yoc3RvcmVkLCBzdGF0ZSA9PT0gXCJzdGFsZVwiID8gLTEgOiBzdG9yZWQucmV2YWxpZGF0ZSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNldChcbiAgICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgICBwZW5kaW5nRW50cnk6IFByb21pc2U8Q2FjaGVFbnRyeT4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBkb25lID0gcGVuZGluZy5iZWdpbihjYWNoZUtleSk7XG4gICAgICBsZXQgc3RvcmVkOiBTdG9yZWRFbnRyeTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0b3JlZCA9IGF3YWl0IHN0b3JlZEVudHJ5T2YocGVuZGluZ0VudHJ5KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoZSBzdHJlYW0gZXJyb3JlZDogc3RvcmUgbm90aGluZyByYXRoZXIgdGhhbiBhIHBhcnRpYWwgZW50cnkuXG4gICAgICAgIGRlYnVnKGBTRVQgRkFJTEVEICR7Y2FjaGVLZXl9YCwgZXJyb3IpO1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0R5bmFtaWNFbnRyeShzdG9yZWQpKSB7XG4gICAgICAgIGRlYnVnKGBTS0lQIGR5bmFtaWMgZW50cnkgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgdGFncy50cmFjayhzdG9yZWQudGFncyk7XG4gICAgICAvLyBBIGBnZXRgIHdhaXRpbmcgb24gdGhpcyBgc2V0YCBjYW4gYmUgYW5zd2VyZWQgZnJvbSBtZW1vcnkgbm93OyBvbmx5XG4gICAgICAvLyBvdGhlciBpbnN0YW5jZXMgbmVlZCB0aGUgUzMgY29weS5cbiAgICAgIGRvbmUoKTtcbiAgICAgIGF3YWl0IHdyaXRlVG9TMyhjYWNoZUtleSwgc3RvcmVkKTtcbiAgICB9LFxuXG4gICAgLy8gV2FpdHMgZm9yIHRoZSBsb2cgcXVlcnkgb24gZXZlcnkgcmVxdWVzdDogYW4gZW50cnkgcmVhZCBmcm9tIFMzIG1heVxuICAgIC8vIHByZWRhdGUgdGhpcyBpbnN0YW5jZSwgc28gd2hhdCB0aGUgcXVlcnkgc2F5cyBhcHBsaWVzIHRvIGl0IGF0IG9uY2UuXG4gICAgLi4udGFnTWV0aG9kcyh0YWdzLCB7IGJsb2NraW5nOiB0cnVlIH0pLFxuXG4gICAgYXN5bmMgZ2V0RXhwaXJhdGlvbihpbXBsaWNpdFRhZ3MpIHtcbiAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKGltcGxpY2l0VGFncyk7XG4gICAgICByZXR1cm4gdGFncy5leHBpcmF0aW9uKGltcGxpY2l0VGFncyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGF6eUhhbmRsZXIoKCkgPT4gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKCkpO1xuIl19
|