cdk-nextjs 0.7.4 → 0.7.6
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 +37 -37
- package/docs/adapter-runtime.md +1 -1
- package/docs/harness-coverage.md +9 -8
- package/lib/adapter/adapter.mjs +220 -149
- package/lib/adapter/aws-cache-store.d.ts +28 -4
- package/lib/adapter/aws-cache-store.js +52 -21
- package/lib/adapter/aws-cache-store.test.js +36 -1
- package/lib/adapter/build-outputs.js +23 -1
- package/lib/adapter/build-outputs.test.js +18 -1
- package/lib/adapter/cache-handler.d.ts +4 -3
- package/lib/adapter/cache-handler.js +1 -1
- package/lib/adapter/cache-handler.mjs +131 -61
- package/lib/adapter/cache-handler.test.js +31 -1
- package/lib/adapter/cache-utils.d.ts +68 -2
- package/lib/adapter/cache-utils.js +108 -2
- package/lib/adapter/cache-utils.test.js +45 -1
- package/lib/adapter/init-cache.d.ts +1 -1
- package/lib/adapter/init-cache.js +60 -37
- package/lib/adapter/init-cache.test.js +55 -2
- package/lib/adapter/local-file-cache-handler.d.ts +2 -2
- package/lib/adapter/local-file-cache-handler.js +4 -5
- package/lib/adapter/s3-cache-handler.d.ts +23 -7
- package/lib/adapter/s3-cache-handler.js +63 -27
- package/lib/adapter/s3-cache-handler.test.js +168 -1
- package/lib/adapter/use-cache-default-handler.mjs +32 -9
- package/lib/adapter/use-cache-remote-handler.js +2 -3
- package/lib/adapter/use-cache-remote-handler.mjs +81 -61
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.d.ts +0 -7
- package/lib/nextjs-build/nextjs-build.js +4 -11
- package/lib/nextjs-build/nextjs-build.test.js +4 -3
- 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/image.d.ts +19 -0
- package/lib/runtime/image.js +28 -2
- package/lib/runtime/image.test.js +43 -1
- package/lib/runtime/lambda.mjs +14 -3
- package/lib/runtime/server.mjs +14 -3
- package/lib/utils/deployment-build-id.d.ts +11 -0
- package/lib/utils/deployment-build-id.js +15 -0
- package/package.json +3 -3
- package/scripts/e2e-harness/README.md +1 -1
|
@@ -708,6 +708,78 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
708
708
|
.sort();
|
|
709
709
|
expect(mappingKeys).toEqual(["ctx-tag#test-build-id/isr/1.json"]);
|
|
710
710
|
});
|
|
711
|
+
it("hashes a mapping row's sort key past DynamoDB's 1024 bytes, keeping the key in s3Key", async () => {
|
|
712
|
+
const testData = {
|
|
713
|
+
kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */,
|
|
714
|
+
html: "<html>tagged</html>",
|
|
715
|
+
rscData: undefined,
|
|
716
|
+
headers: {},
|
|
717
|
+
postponed: undefined,
|
|
718
|
+
segmentData: undefined,
|
|
719
|
+
status: undefined,
|
|
720
|
+
};
|
|
721
|
+
const tag = "t".repeat(256);
|
|
722
|
+
const cacheKey = `/route-cache/APP_PAGE/${"a".repeat(64)}/$/${"p".repeat(700)}`;
|
|
723
|
+
mockS3Send.mockResolvedValue({});
|
|
724
|
+
mockDynamoSend.mockResolvedValue({});
|
|
725
|
+
await handler.set(cacheKey, testData, createSetContext([tag]));
|
|
726
|
+
const [input] = client_dynamodb_1.UpdateItemCommand.mock.calls[0];
|
|
727
|
+
expect(input.Key.sk.S).toMatch(new RegExp(`^${tag}#test-build-id/#[0-9a-f]{64}$`));
|
|
728
|
+
expect(input.ExpressionAttributeValues[":s3Key"].S).toBe(`test-build-id${cacheKey}.json`);
|
|
729
|
+
});
|
|
730
|
+
it("hashes the tag into a mapping row's prefix when even a hashed row would pass 1024 bytes", async () => {
|
|
731
|
+
// An implicit tag is as long as its path.
|
|
732
|
+
const tag = `_N_T_/${"p".repeat(1000)}`;
|
|
733
|
+
const testData = {
|
|
734
|
+
kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */,
|
|
735
|
+
html: "<html>tagged</html>",
|
|
736
|
+
rscData: undefined,
|
|
737
|
+
headers: {},
|
|
738
|
+
postponed: undefined,
|
|
739
|
+
segmentData: undefined,
|
|
740
|
+
status: undefined,
|
|
741
|
+
};
|
|
742
|
+
mockS3Send.mockResolvedValue({});
|
|
743
|
+
mockDynamoSend.mockResolvedValue({});
|
|
744
|
+
await handler.set("/isr/1", testData, createSetContext([tag]));
|
|
745
|
+
const [input] = client_dynamodb_1.UpdateItemCommand.mock.calls[0];
|
|
746
|
+
const sk = input.Key.sk.S;
|
|
747
|
+
expect(sk).toMatch(/^#[0-9a-f]{64}#test-build-id\/isr\/1\.json$/);
|
|
748
|
+
expect(Buffer.byteLength(sk)).toBeLessThanOrEqual(1024);
|
|
749
|
+
// `revalidateTag` queries the same prefix.
|
|
750
|
+
dynamoResponses({ query: { Items: [] } });
|
|
751
|
+
await handler.revalidateTag(tag);
|
|
752
|
+
const queried = client_dynamodb_1.QueryCommand.mock.calls.map(([query]) => query.ExpressionAttributeValues[":skPrefix"]?.S);
|
|
753
|
+
expect(queried).toContain(sk.slice(0, 66));
|
|
754
|
+
});
|
|
755
|
+
it("stores an entry whose S3 key would pass 1024 bytes under a hashed object key", async () => {
|
|
756
|
+
const testData = {
|
|
757
|
+
kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */,
|
|
758
|
+
html: "<html>long</html>",
|
|
759
|
+
rscData: undefined,
|
|
760
|
+
headers: {},
|
|
761
|
+
postponed: undefined,
|
|
762
|
+
segmentData: undefined,
|
|
763
|
+
status: undefined,
|
|
764
|
+
};
|
|
765
|
+
const cacheKey = `/route-cache/APP_PAGE/${"a".repeat(64)}/$/${"p".repeat(950)}`;
|
|
766
|
+
mockS3Send.mockResolvedValue({});
|
|
767
|
+
mockDynamoSend.mockResolvedValue({});
|
|
768
|
+
await handler.set(cacheKey, testData, createSetContext(["t"]));
|
|
769
|
+
const [put] = client_s3_1.PutObjectCommand.mock.calls[0];
|
|
770
|
+
expect(put.Key).toMatch(/^test-build-id\/_long-key\/[0-9a-f]{64}\.long$/);
|
|
771
|
+
// The mapping keeps the name a CloudFront path is recovered from.
|
|
772
|
+
const [mapping] = client_dynamodb_1.UpdateItemCommand.mock
|
|
773
|
+
.calls[0];
|
|
774
|
+
expect(mapping.ExpressionAttributeValues[":s3Key"].S).toBe(`test-build-id${cacheKey}.json`);
|
|
775
|
+
client_s3_1.GetObjectCommand.mockClear();
|
|
776
|
+
await handler.get(cacheKey, {
|
|
777
|
+
kind: "APP_PAGE" /* IncrementalCacheKind.APP_PAGE */,
|
|
778
|
+
isFallback: false,
|
|
779
|
+
});
|
|
780
|
+
const [get] = client_s3_1.GetObjectCommand.mock.calls[0];
|
|
781
|
+
expect(get.Key).toBe(put.Key);
|
|
782
|
+
});
|
|
711
783
|
it("removes a deleted page's mapping rows, reading its tags from S3", async () => {
|
|
712
784
|
// A response delete - a cached route that starts answering `notFound()` -
|
|
713
785
|
// arrives as `set(key, null, { cacheControl, ... })` with no tags at all,
|
|
@@ -871,6 +943,101 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
871
943
|
"/isr/2*",
|
|
872
944
|
]);
|
|
873
945
|
});
|
|
946
|
+
/**
|
|
947
|
+
* next >= 16.3.8 scopes a page's key by its source route:
|
|
948
|
+
* `route-cache/<kind>/<hash>/$<pathname>`, the pathname through
|
|
949
|
+
* `normalizePagePath`. Read as a path, it named no URI the distribution has.
|
|
950
|
+
*/
|
|
951
|
+
it("invalidates the pathname inside a next 16.3.8 route-cache key", async () => {
|
|
952
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
953
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
954
|
+
context: mockContext,
|
|
955
|
+
});
|
|
956
|
+
const key = (pathname) => `test-tag#test-build-id/route-cache/APP_PAGE/${"a".repeat(64)}/$${pathname}.json`;
|
|
957
|
+
dynamoResponses({
|
|
958
|
+
query: {
|
|
959
|
+
Items: [
|
|
960
|
+
{ sk: { S: key("/isr/1") } },
|
|
961
|
+
{ sk: { S: key("/index/index") } },
|
|
962
|
+
],
|
|
963
|
+
},
|
|
964
|
+
});
|
|
965
|
+
mockS3Send.mockResolvedValue({});
|
|
966
|
+
mockSsmSend.mockResolvedValue({
|
|
967
|
+
Parameter: { Value: "test-distribution-id" },
|
|
968
|
+
});
|
|
969
|
+
mockCloudFrontSend.mockResolvedValue({});
|
|
970
|
+
await handlerWithDistribution.revalidateTag("test-tag");
|
|
971
|
+
const [invalidationInput] = client_cloudfront_1.CreateInvalidationCommand.mock.calls[0];
|
|
972
|
+
expect(invalidationInput.InvalidationBatch.Paths.Items).toEqual([
|
|
973
|
+
"/isr/1*",
|
|
974
|
+
"/index*",
|
|
975
|
+
]);
|
|
976
|
+
});
|
|
977
|
+
it("invalidates the path of a mapping row whose key is in s3Key", async () => {
|
|
978
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
979
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
980
|
+
context: mockContext,
|
|
981
|
+
});
|
|
982
|
+
dynamoResponses({
|
|
983
|
+
query: {
|
|
984
|
+
Items: [
|
|
985
|
+
{
|
|
986
|
+
sk: { S: `test-tag#test-build-id/#${"b".repeat(64)}` },
|
|
987
|
+
s3Key: { S: "test-build-id/long/page.json" },
|
|
988
|
+
},
|
|
989
|
+
],
|
|
990
|
+
},
|
|
991
|
+
});
|
|
992
|
+
mockS3Send.mockResolvedValue({});
|
|
993
|
+
mockSsmSend.mockResolvedValue({
|
|
994
|
+
Parameter: { Value: "test-distribution-id" },
|
|
995
|
+
});
|
|
996
|
+
mockCloudFrontSend.mockResolvedValue({});
|
|
997
|
+
await handlerWithDistribution.revalidateTag("test-tag");
|
|
998
|
+
const [invalidationInput] = client_cloudfront_1.CreateInvalidationCommand.mock.calls[0];
|
|
999
|
+
expect(invalidationInput.InvalidationBatch.Paths.Items).toEqual([
|
|
1000
|
+
"/long/page*",
|
|
1001
|
+
]);
|
|
1002
|
+
});
|
|
1003
|
+
it("does not read a marker row one `#` longer as a mapping row", async () => {
|
|
1004
|
+
// No build ID leaves no key prefix to tell the two apart by, and the
|
|
1005
|
+
// marker row of tag `test-tag#` (sk `test-tag#`) matches `test-tag#`.
|
|
1006
|
+
process.env.CDK_NEXTJS_BUILD_ID = "";
|
|
1007
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
1008
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
1009
|
+
context: mockContext,
|
|
1010
|
+
});
|
|
1011
|
+
dynamoResponses({ query: { Items: [{ sk: { S: "test-tag#" } }] } });
|
|
1012
|
+
mockS3Send.mockResolvedValue({});
|
|
1013
|
+
mockSsmSend.mockResolvedValue({
|
|
1014
|
+
Parameter: { Value: "test-distribution-id" },
|
|
1015
|
+
});
|
|
1016
|
+
mockCloudFrontSend.mockResolvedValue({});
|
|
1017
|
+
await handlerWithDistribution.revalidateTag("test-tag");
|
|
1018
|
+
expect(client_cloudfront_1.CreateInvalidationCommand).not.toHaveBeenCalled();
|
|
1019
|
+
});
|
|
1020
|
+
it("invalidates an older app's route named /route-cache", async () => {
|
|
1021
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
1022
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
1023
|
+
context: mockContext,
|
|
1024
|
+
});
|
|
1025
|
+
dynamoResponses({
|
|
1026
|
+
query: {
|
|
1027
|
+
Items: [{ sk: { S: "test-tag#test-build-id/route-cache/foo.json" } }],
|
|
1028
|
+
},
|
|
1029
|
+
});
|
|
1030
|
+
mockS3Send.mockResolvedValue({});
|
|
1031
|
+
mockSsmSend.mockResolvedValue({
|
|
1032
|
+
Parameter: { Value: "test-distribution-id" },
|
|
1033
|
+
});
|
|
1034
|
+
mockCloudFrontSend.mockResolvedValue({});
|
|
1035
|
+
await handlerWithDistribution.revalidateTag("test-tag");
|
|
1036
|
+
const [invalidationInput] = client_cloudfront_1.CreateInvalidationCommand.mock.calls[0];
|
|
1037
|
+
expect(invalidationInput.InvalidationBatch.Paths.Items).toEqual([
|
|
1038
|
+
"/route-cache/foo*",
|
|
1039
|
+
]);
|
|
1040
|
+
});
|
|
874
1041
|
it("invalidates a distribution whose ID is in the environment without SSM", async () => {
|
|
875
1042
|
// NextjsGlobalContainers: the task can name the distribution directly.
|
|
876
1043
|
process.env.CDK_NEXTJS_DISTRIBUTION_ID = "direct-distribution-id";
|
|
@@ -1431,4 +1598,4 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
1431
1598
|
});
|
|
1432
1599
|
});
|
|
1433
1600
|
});
|
|
1434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUE2RDtBQUM3RCxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUE0QixFQUFFLENBQUM7QUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0NBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0osZUFBZTtBQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqQyxrRUFHb0M7QUFDcEMsOERBT2tDO0FBQ2xDLGtEQUs0QjtBQUM1QixvREFBZ0Q7QUFPaEQseURBQW9EO0FBQ3BELHlEQUF1RDtBQUN2RCxrREFBNEQ7QUFFNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxF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LENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxRQUFRO2dCQUNSLHlDQUF5QztnQkFDekMsV0FBVzthQUNaLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuLy8gV2hhdCBgcmVxdWlyZS5jYWNoZWAgaG9sZHMgaW4gYSBydW5uaW5nIHNlcnZlci4gSmVzdCdzIGBjcmVhdGVSZXF1aXJlYCBoYW5kc1xuLy8gb3V0IGEgY2FjaGUgb2YgaXRzIG93biB0aGF0IG5vdGhpbmcgaXMgZXZlciBsb2FkZWQgaW50bywgc28gdGhlIGhhbmRsZXInc1xuLy8gbG9va3VwIG9mIE5leHQuanMncyB0YWcgbWFuaWZlc3QgcmVhZHMgdGhpcyBzdGFuZC1pbiBpbnN0ZWFkLlxuY29uc3QgbW9ja01vZHVsZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuamVzdC5tb2NrKFwibm9kZTptb2R1bGVcIiwgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKFwibm9kZTptb2R1bGVcIiksXG4gIGNyZWF0ZVJlcXVpcmU6ICgpID0+ICh7IGNhY2hlOiBtb2NrTW9kdWxlQ2FjaGUgfSksXG59KSk7XG4vLyBNb2NrIEFXUyBTREtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKTtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1jbG91ZGZyb250XCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiKTtcblxuaW1wb3J0IHtcbiAgQ2xvdWRGcm9udENsaWVudCxcbiAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1jbG91ZGZyb250XCI7XG5pbXBvcnQge1xuICBCYXRjaEdldEl0ZW1Db21tYW5kLFxuICBEZWxldGVJdGVtQ29tbWFuZCxcbiAgRHluYW1vREJDbGllbnQsXG4gIFB1dEl0ZW1Db21tYW5kLFxuICBRdWVyeUNvbW1hbmQsXG4gIFVwZGF0ZUl0ZW1Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBTM0NsaWVudCxcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgUHV0T2JqZWN0Q29tbWFuZCxcbiAgRGVsZXRlT2JqZWN0Q29tbWFuZCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgU1NNQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zc21cIjtcbmltcG9ydCB7IENhY2hlSGFuZGxlckNvbnRleHQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvaW5jcmVtZW50YWwtY2FjaGVcIjtcbmltcG9ydCB7XG4gIEluY3JlbWVudGFsQ2FjaGVWYWx1ZSxcbiAgQ2FjaGVkUm91dGVLaW5kLFxuICBJbmNyZW1lbnRhbENhY2hlS2luZCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGVcIjtcbmltcG9ydCB7IFMzQ2FjaGVIYW5kbGVyIH0gZnJvbSBcIi4vczMtY2FjaGUtaGFuZGxlclwiO1xuaW1wb3J0IHsgc2hhcmVkVGFnTWFuaWZlc3QgfSBmcm9tIFwiLi91c2UtY2FjaGUtY29tbW9uXCI7XG5pbXBvcnQgeyBSRVZBTElEQVRFRF9QQUdFX0hPT0sgfSBmcm9tIFwiLi4vcnVudGltZS9tYW5pZmVzdFwiO1xuXG5jb25zdCBtb2NrUzNTZW5kID0gamVzdC5mbigpO1xuY29uc3QgbW9ja0R5bmFtb1NlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrQ2xvdWRGcm9udFNlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrU3NtU2VuZCA9IGplc3QuZm4oKTtcblxuKFMzQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tTM1NlbmQsXG59KSk7XG5cbihEeW5hbW9EQkNsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICBzZW5kOiBtb2NrRHluYW1vU2VuZCxcbn0pKTtcblxuKENsb3VkRnJvbnRDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja0Nsb3VkRnJvbnRTZW5kLFxufSkpO1xuXG4oU1NNQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tTc21TZW5kLFxufSkpO1xuXG5kZXNjcmliZShcIlMzRHluYW1vQ2FjaGVIYW5kbGVyXCIsICgpID0+IHtcbiAgbGV0IGhhbmRsZXI6IFMzQ2FjaGVIYW5kbGVyO1xuICBsZXQgbW9ja0NvbnRleHQ6IENhY2hlSGFuZGxlckNvbnRleHQ7XG4gIGxldCBkaXN0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFN0YWdlIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgZm9yIGFuIGFwcCB3aXRoIGBiYXNlUGF0aDogXCIvYmFzZVwiYC4gKi9cbiAgY29uc3QgdXNlQmFzZVBhdGggPSAoKSA9PiB7XG4gICAgZGlzdERpciA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiczMtY2FjaGUtaGFuZGxlci1cIikpO1xuICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICBqb2luKGRpc3REaXIsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IGNvbmZpZzogeyBiYXNlUGF0aDogXCIvYmFzZVwiIH0gfSksXG4gICAgKTtcbiAgICBtb2NrQ29udGV4dC5zZXJ2ZXJEaXN0RGlyID0gam9pbihkaXN0RGlyLCBcInNlcnZlclwiKTtcbiAgfTtcblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIHNldCBjb250ZXh0IHdpdGggdGFnc1xuICBjb25zdCBjcmVhdGVTZXRDb250ZXh0ID0gKHRhZ3M6IHN0cmluZ1tdKSA9PiAoe1xuICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgdGFncyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhIG1vY2tlZCBjb21tYW5kIHdhcyBjb25zdHJ1Y3RlZCB3aXRoLiBUaGUgU0RLJ3MgY29tbWFuZCBjbGFzc2VzXG4gICAqIGFyZSBhdXRvbW9ja2VkLCBzbyBhbiBpbnN0YW5jZSBjYXJyaWVzIG5vdGhpbmcgb2YgaXRzIG93bi5cbiAgICovXG4gIGNvbnN0IGNvbW1hbmRJbnB1dCA9IChjb21tYW5kOiB1bmtub3duLCB0eXBlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbW9jayA9IHR5cGUgYXMgamVzdC5Nb2NrO1xuICAgIHJldHVybiBtb2NrLm1vY2suY2FsbHNbbW9jay5tb2NrLmluc3RhbmNlcy5pbmRleE9mKGNvbW1hbmQpXVswXTtcbiAgfTtcblxuICAvKipcbiAgICogQW5zd2VyIER5bmFtb0RCIGJ5IGNvbW1hbmQgdHlwZSByYXRoZXIgdGhhbiBieSBjYWxsIG9yZGVyOiBgcmV2YWxpZGF0ZVRhZ2BcbiAgICogd3JpdGVzIGl0cyB0YWcgbWFya2VyIGJlZm9yZSBxdWVyeWluZyB0aGUgdGFnJ3MgbWFwcGluZyByb3dzLCBhbmQgd2hpY2ggb2ZcbiAgICogdGhvc2UgY29tZXMgZmlyc3QgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBgZ2V0YCBpcyB0aGUgbWFya2VyIHJvdyBldmVyeVxuICAgKiByZXF1ZXN0ZWQgdGFnIGhhcywgYXMgYSBgR2V0SXRlbWAgd291bGQgaGF2ZSByZXR1cm5lZCBpdC5cbiAgICovXG4gIGNvbnN0IGR5bmFtb1Jlc3BvbnNlcyA9IChyZXNwb25zZXM6IHtcbiAgICBxdWVyeT86IHVua25vd247XG4gICAgZ2V0PzogeyBJdGVtPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgfSkgPT4ge1xuICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZXMucXVlcnkgPz8ge30pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBCYXRjaEdldEl0ZW1Db21tYW5kKSB7XG4gICAgICAgIGNvbnN0IHsgUmVxdWVzdEl0ZW1zIH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgQmF0Y2hHZXRJdGVtQ29tbWFuZCk7XG4gICAgICAgIGNvbnN0IFtbdGFibGUsIHsgS2V5cyB9XV0gPSBPYmplY3QuZW50cmllcyhSZXF1ZXN0SXRlbXMpIGFzIFtcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgeyBLZXlzOiB7IHNrOiB1bmtub3duIH1bXSB9LFxuICAgICAgICBdW107XG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZXNwb25zZXMuZ2V0Py5JdGVtO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBSZXNwb25zZXM6IHtcbiAgICAgICAgICAgIFt0YWJsZV06IGl0ZW0gPyBLZXlzLm1hcCgoeyBzayB9KSA9PiAoeyAuLi5pdGVtLCBzayB9KSkgOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEcm9wIHRoZSBwcm9jZXNzJ3MgdGFnIG1hbmlmZXN0LCBzbyB0aGUgbmV4dCBoYW5kbGVyIHN0YXJ0cyB3aXRoIG9uZSBvZlxuICAgKiBpdHMgb3duLCBhcyBhIG5ldyBpbnN0YW5jZSBkb2VzLlxuICAgKi9cbiAgY29uc3QgcmVzZXRUYWdNYW5pZmVzdCA9ICgpID0+IHtcbiAgICBkZWxldGUgKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgU3ltYm9sLmZvcihcImNkay1uZXh0anMudXNlLWNhY2hlLnRhZy1tYW5pZmVzdFwiKVxuICAgIF07XG4gIH07XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja0NvbnRleHQgPSB7IGRldjogZmFsc2UgfSBhcyBDYWNoZUhhbmRsZXJDb250ZXh0O1xuICAgIHJlc2V0VGFnTWFuaWZlc3QoKTtcblxuICAgIC8vIFNldCB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FID0gXCJ0ZXN0LWJ1Y2tldFwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUUgPSBcInRlc3QtdGFibGVcIjtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEID0gXCJ0ZXN0LWJ1aWxkLWlkXCI7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA9IFwidXMtZWFzdC0xXCI7XG5cbiAgICAvLyBTdXBwcmVzcyBleHBlY3RlZCB3YXJuaW5ncyBnbG9iYWxseSAodGVzdHMgZGVsaWJlcmF0ZWx5IHRyaWdnZXIgd2FybmluZ3MpXG4gICAgamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICBoYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgbW9ja3NcbiAgICBtb2NrUzNTZW5kLm1vY2tSZXNldCgpO1xuICAgIC8vIEFuIGVtcHR5IGJ1Y2tldDogbm8gb2JqZWN0LCBzdWNoIGFzIG5vIGJ1aWxkIHRhZyBtYW5pZmVzdC5cbiAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzZXQoKTtcbiAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc2V0KCk7XG4gICAgbW9ja1NzbVNlbmQubW9ja1Jlc2V0KCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgLy8gQ2xlYW4gdXAgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUU7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUU7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQ7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19SRUdJT047XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUU7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEO1xuICAgIGlmIChkaXN0RGlyKSB7XG4gICAgICBybVN5bmMoZGlzdERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgZGlzdERpciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGNvbnNvbGUud2FyblxuICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiZ2V0XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXR1cm4gbnVsbCB3aGVuIFMzIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcblxuICAgICAgY29uc3QgaGFuZGxlcldpdGhvdXRCdWNrZXQgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyV2l0aG91dEJ1Y2tldC5nZXQoXCJ0ZXN0LWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJldHJpZXZlIGFuZCBwYXJzZSBjYWNoZSB2YWx1ZSBmcm9tIFMzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD50ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY2FjaGVWYWx1ZSA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSksXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcInRlc3Qta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoY2FjaGVWYWx1ZSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShHZXRPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gbnVsbCB3aGVuIFMzIG9iamVjdCBub3QgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICBCb2R5OiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwibWlzc2luZy1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGEgc2VlZGVkIHByZXJlbmRlciBvbmx5IHdoZW4gaXRzIHRhZyBtYXJrZXIgaXMgbmV3ZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBidWlsZC10aW1lIHByZXJlbmRlciBpcyB3cml0dGVuIGFzIGEgZmlsZSBieSB0aGUgYWRhcHRlcidzXG4gICAgICAvLyBgb25CdWlsZENvbXBsZXRlYCwgbmV2ZXIgdGhyb3VnaCBgc2V0YCwgc28gaXQgaGFzIG5vIGB0YWdzYCBhcnJheSBhbmQgbm9cbiAgICAgIC8vIER5bmFtb0RCIG1hcHBpbmcgcm93cyAtIGl0cyB0YWdzIGxpdmUgaW4gdGhlIHJlbmRlcidzXG4gICAgICAvLyBgeC1uZXh0LWNhY2hlLXRhZ3NgIGhlYWRlci4gVHdvIGJ1Z3MgbWV0IGhlcmU6IHRob3NlIGhlYWRlciB0YWdzIHdlcmVcbiAgICAgIC8vIGlnbm9yZWQsIHNvIGByZXZhbGlkYXRlVGFnYCBjb3VsZCBub3QgcmVhY2ggYW55IHN0YXRpYyBwYWdlOyBhbmQgdGhlXG4gICAgICAvLyBtYXBwaW5nIHJvd3MgYHNldGAgd3JpdGVzIHdlcmUgc3RhbXBlZCBgcmV2YWxpZGF0ZWRBdCA9IG5vd2AsIHdoaWNoIGlzXG4gICAgICAvLyAqYWZ0ZXIqIHRoZSBlbnRyeSdzIG93biBgbGFzdE1vZGlmaWVkYCwgc28gYSB0YWdnZWQgZW50cnkgbG9va2VkXG4gICAgICAvLyByZXZhbGlkYXRlZCB0aGUgbW9tZW50IGl0IHdhcyBzdG9yZWQgYW5kIGV2ZXJ5IHJlcXVlc3QgcmUtcmVuZGVyZWQuXG4gICAgICAvLyBNZWFzdXJlZCBhZ2FpbnN0IG5leHQuanMncyBgdGVzdC9lMmUvYXBwLWRpci9yZXN1bWUtZGF0YS1jYWNoZWAuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc2VlZGVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPGh0bWw+c2VlZGVkPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcIl9OX1RfLyxfTl9UXy9wYWdlLHRlc3RcIiB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHMzQm9keSA9ICgpID0+ICh7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzZWVkZWQpKSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kID8gczNCb2R5KCkgOiB7fSksXG4gICAgICApO1xuICAgICAgY29uc3QgZ2V0Q3R4ID0ge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9IGFzIGNvbnN0O1xuICAgICAgLy8gRWFjaCBzdGVwIGJlbG93IGNoYW5nZXMgdGhlIG1hcmtlcnMgRHluYW1vREIgaG9sZHM7IGEgbmV3IGluc3RhbmNlXG4gICAgICAvLyByZWFkcyB0aGVtIGFmcmVzaC5cbiAgICAgIGNvbnN0IGZyZXNoSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmVzZXRUYWdNYW5pZmVzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBObyBtYXJrZXIgYXQgYWxsOiB0aGUgdGFnIHdhcyBuZXZlciByZXZhbGlkYXRlZC5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7fSk7XG4gICAgICBleHBlY3QoYXdhaXQgZnJlc2hIYW5kbGVyKCkuZ2V0KFwiaW5kZXhcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIG1hcmtlciBvbGRlciB0aGFuIHRoZSBlbnRyeSBtZWFucyB0aGUgZW50cnkgYWxyZWFkeSByZWZsZWN0cyBpdC5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCAtIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoYXdhaXQgZnJlc2hIYW5kbGVyKCkuZ2V0KFwiaW5kZXhcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEEgbmV3ZXIgbWFya2VyOiB0aGUgZW50cnkgY29tZXMgYmFjayBtYXJrZWQgZXhwaXJlZCwgYW5kIHN0YXlzIGluIFMzLlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiAtMSxcbiAgICAgICAgdmFsdWU6IHNlZWRlZC52YWx1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlcG9ydHMgYSByZXZhbGlkYXRlZCByZXNwb25zZSBlbnRyeSBhcyBleHBpcmVkIHJhdGhlciB0aGFuIGFzIGEgbWlzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgbGFzdE1vZGlmaWVkOiAtMWAgaXMgaG93IGEgY2FjaGUgaGFuZGxlciBzYXlzIFwiZXhwaXJlZCwgcmUtcmVuZGVyXG4gICAgICAvLyBiZWZvcmUgYW5zd2VyaW5nXCI6IGBJbmNyZW1lbnRhbENhY2hlLmdldGAgdHVybnMgaXQgaW50byBgaXNTdGFsZTogLTFgLFxuICAgICAgLy8gd2hpY2ggYGFwcC1wYWdlLXJ1bnRpbWVgIHJlYWRzIGFzIGFuIG9uLWRlbWFuZCByZXZhbGlkYXRpb24gYW5kIGFuc3dlcnNcbiAgICAgIC8vIHdpdGggYSBibG9ja2luZyByZW5kZXIgb2YgdGhpcyByb3V0ZSwgdGhlbiBzdG9yZXMgaXQuIFJldHVybmluZyBgbnVsbGBcbiAgICAgIC8vIGlzIG5vdCBlcXVpdmFsZW50LiBBIG1pc3Mgb24gYSBQUFIgcm91dGUgd2hvc2UgYHByZXJlbmRlci1tYW5pZmVzdC5qc29uYFxuICAgICAgLy8gZW50cnkgaGFzIGEgYGZhbGxiYWNrYCAoYGNvbXB1dGU6IFwicmVzdW1pbmdcImApIGlzIGFuc3dlcmVkIGZyb20gdGhlXG4gICAgICAvLyByb3V0ZSdzIGZhbGxiYWNrIHNoZWxsIC0gYGNhY2hlLWNvbnRyb2w6IHByaXZhdGUsIG5vLXN0b3JlYCwgbm9cbiAgICAgIC8vIGB4LW5leHRqcy1jYWNoZWAgLSBhbmQgd2l0aG91dCBgcGFydGlhbFByZWZldGNoaW5nYCBub3RoaW5nIGV2ZXJcbiAgICAgIC8vIHVwZ3JhZGVzIHRoYXQgYmFjayBpbnRvIGEgY29uY3JldGUgZW50cnkuIFNvIHRoZSBmaXJzdCBgcmV2YWxpZGF0ZVRhZ2BcbiAgICAgIC8vIHRvIHJlYWNoIGEgcGFnZSBsZWZ0IGl0IHVuY2FjaGVhYmxlIGFuZCBkeW5hbWljYWxseSByZXN1bWVkIHBlciByZXF1ZXN0XG4gICAgICAvLyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGRlcGxveW1lbnQncyBsaWZlLCB3aGljaCBpcyB3aGF0IHRoZSBpc3IgZTJlJ3NcbiAgICAgIC8vIG1pc3NpbmcgYHgtbmV4dGpzLWNhY2hlYCBoZWFkZXIgd2FzLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgICBodG1sOiBcIjxodG1sPmlzcjwvaHRtbD5cIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJjb2xsZWN0aW9uXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJpc3IvMVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgbGFzdE1vZGlmaWVkOiAtMSwgdmFsdWU6IHN0b3JlZC52YWx1ZSB9KTtcbiAgICAgIC8vIFRoZSBib2R5IGlzIHN0aWxsIHRoZXJlIGZvciB0aGUgcmVuZGVyIHRoYXQgZmFpbHMsIGFuZCBgc2V0YCBvdmVyd3JpdGVzXG4gICAgICAvLyBpdCB3aXRoIGEgYGxhc3RNb2RpZmllZGAgcGFzdCB0aGUgbWFya2VyLlxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlcG9ydHMgYSByZXZhbGlkYXRlZCBmZXRjaCBlbnRyeSBhcyBhIG1pc3Mgc28gdGhlIHJlcXVlc3QgcmVmZXRjaGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBvcHBvc2l0ZSBvZiBhIHJlc3BvbnNlIGVudHJ5OiByZXVzaW5nIGEgcmV2YWxpZGF0ZWQgYGZldGNoYCBib2R5IGlzXG4gICAgICAvLyBzZXJ2aW5nIHN0YWxlIGRhdGEsIHNvIHRoaXMgcmVhZHMgYXMgYSBtaXNzLCBsaWtlIE5leHQuanMncyBvd25cbiAgICAgIC8vIGBGaWxlU3lzdGVtQ2FjaGVgIGRvZXMgZm9yIGl0cyBgcmV2YWxpZGF0ZWRUYWdzYC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdGFnczogW1wiY29sbGVjdGlvblwiXSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuRkVUQ0gsXG4gICAgICAgICAgZGF0YTogeyBoZWFkZXJzOiB7fSwgYm9keTogXCJzdGFsZVwiLCBzdGF0dXM6IDIwMCwgdXJsOiBcIi9hcGlcIiB9LFxuICAgICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImZldGNoLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkZFVENILFxuICAgICAgICByZXZhbGlkYXRlOiAxMCxcbiAgICAgICAgZmV0Y2hVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLnRlc3QvYXBpXCIsXG4gICAgICAgIGZldGNoSWR4OiAxLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICBzb2Z0VGFnczogW10sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgIC8vIE5vdCBkZWxldGVkOiB0aGUgcmVmZXRjaCB0aGlzIHByb3Zva2VzIG92ZXJ3cml0ZXMgaXQgdGhyb3VnaCBgc2V0YC5cbiAgICAgIC8vIERlbGV0aW5nIGl0IGhlcmUgcmFjZWQgdGhhdCB3cml0ZSwgc28gYSBjb25jdXJyZW50IHJlcXVlc3QncyBmcmVzaFxuICAgICAgLy8gZW50cnkgY291bGQgYmUgdGhlIG9uZSByZW1vdmVkLlxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoRGVsZXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImNoZWNrcyBhIGZldGNoIGVudHJ5IGFnYWluc3QgdGhlIHJlcXVlc3QncyBpbXBsaWNpdCB0YWdzLCBub3QgaXRzIG93blwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBbiB1bnRhZ2dlZCBgY2FjaGU6IFwiZm9yY2UtY2FjaGVcImAgZmV0Y2ggaXMgc3RvcmVkIHdpdGggbm8gdGFncyBhdCBhbGwgLVxuICAgICAgLy8gdGhlIGltcGxpY2l0IGBfTl9UXy88cGF0aD5gIGNoYWluIHJlYWNoZXMgdGhlIGhhbmRsZXIgb25seSBhc1xuICAgICAgLy8gYGN0eC5zb2Z0VGFnc2AsIHdoaWNoIGlzIHRoZSBzb3VyY2UgTmV4dC5qcydzIG93biBgRmlsZVN5c3RlbUNhY2hlYCByZWFkc1xuICAgICAgLy8gZm9yIGEgYEZFVENIYCBnZXQuIENoZWNraW5nIHRoZSBzdG9yZWQgdGFncyBpbnN0ZWFkIGxlZnQgdGhpcyBlbnRyeSB3aXRoXG4gICAgICAvLyBub3RoaW5nIHRvIGNoZWNrIGFuZCBubyBgcmV2YWxpZGF0ZVBhdGhgIGNvdWxkIGV2ZXIgZXZpY3QgaXQuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5GRVRDSCxcbiAgICAgICAgICBkYXRhOiB7IGhlYWRlcnM6IHt9LCBib2R5OiBcInN0YWxlXCIsIHN0YXR1czogMjAwLCB1cmw6IFwiL2FwaVwiIH0sXG4gICAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZmV0Y2gta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuRkVUQ0gsXG4gICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICBmZXRjaFVybDogXCJodHRwczovL25leHQtZGF0YS1hcGktZW5kcG9pbnQudGVzdC9hcGkvcmFuZG9tXCIsXG4gICAgICAgIGZldGNoSWR4OiAxLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgc29mdFRhZ3M6IFtcIl9OX1RfL2xheW91dFwiLCBcIl9OX1RfL2R5bmFtaWNcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgIGNvbnN0IFt7IFJlcXVlc3RJdGVtcyB9XSA9IChCYXRjaEdldEl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKVxuICAgICAgICAubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgUmVxdWVzdEl0ZW1zW1widGVzdC10YWJsZVwiXS5LZXlzLm1hcChcbiAgICAgICAgICAoa2V5OiB7IHNrOiB7IFM6IHN0cmluZyB9IH0pID0+IGtleS5zay5TLFxuICAgICAgICApLFxuICAgICAgKS50b0VxdWFsKFtcIl9OX1RfL2xheW91dFwiLCBcIl9OX1RfL2R5bmFtaWNcIl0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJhIHRhZyByZXZhbGlkYXRlZCB3aXRoIGEgcHJvZmlsZVwiLCAoKSA9PiB7XG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIsIFwibWF4XCIpYCBpcyBzdGFsZS13aGlsZS1yZXZhbGlkYXRlOiB0aGUgZW50cnkgaXNcbiAgICAgIC8vIHNlcnZlZCBvbmNlIG1vcmUgd2hpbGUgYSBiYWNrZ3JvdW5kIHJlbmRlciByZXBsYWNlcyBpdCwgYW5kIGV4cGlyZXNcbiAgICAgIC8vIG91dHJpZ2h0IG9ubHkgYWZ0ZXIgdGhlIHByb2ZpbGUncyBgZXhwaXJlYC4gVHJlYXRpbmcgaXQgYXMgYHVwZGF0ZVRhZ2BcbiAgICAgIC8vIG1hZGUgZXZlcnkgc3VjaCBjYWxsIGEgYmxvY2tpbmcgcmUtcmVuZGVyLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5wb3N0czwvaHRtbD5cIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJwb3N0c1wiIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q3R4ID0ge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9IGFzIGNvbnN0O1xuICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gam9pbihcbiAgICAgICAgXCIvZGVwbG95bWVudC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvaW5jcmVtZW50YWwtY2FjaGVcIixcbiAgICAgICAgXCJ0YWdzLW1hbmlmZXN0LmV4dGVybmFsLmpzXCIsXG4gICAgICApO1xuICAgICAgLy8gVGhlIG1vZHVsZSB0aGUgc2VydmVyIGxvYWRzLCByZXNvbHZlZCBmb3IgcmVhbCwgc28gYSBOZXh0LmpzIHVwZ3JhZGVcbiAgICAgIC8vIHRoYXQgbW92ZXMgb3IgcmVzaGFwZXMgaXQgZmFpbHMgaGVyZSByYXRoZXIgdGhhbiBzaWxlbnRseSB0dXJuaW5nXG4gICAgICAvLyBzdGFsZS13aGlsZS1yZXZhbGlkYXRlIGludG8gYmxvY2tpbmcgcmVuZGVycy5cbiAgICAgIGNvbnN0IHJlYWxNYW5pZmVzdFBhdGggPVxuICAgICAgICByZXF1aXJlLnJlc29sdmUoXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZS90YWdzLW1hbmlmZXN0LmV4dGVybmFsLmpzXCIpO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBtb2NrTW9kdWxlQ2FjaGVbbWFuaWZlc3RQYXRoXTtcbiAgICAgICAgZGVsZXRlIG1vY2tNb2R1bGVDYWNoZVtyZWFsTWFuaWZlc3RQYXRoXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcInNlcnZlcyB0aGUgZW50cnkgYW5kIG1hcmtzIHRoZSB0YWcgc3RhbGUgaW4gTmV4dC5qcydzIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGplc3QucmVxdWlyZUFjdHVhbChyZWFsTWFuaWZlc3RQYXRoKTtcbiAgICAgICAgbW9ja01vZHVsZUNhY2hlW3JlYWxNYW5pZmVzdFBhdGhdID0geyBleHBvcnRzOiBuZXh0IH07XG4gICAgICAgIGNvbnN0IHN0YWxlQXQgPSBsYXN0TW9kaWZpZWQgKyA1MDA7XG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBJdGVtOiB7XG4gICAgICAgICAgICAgIHN0YWxlQXQ6IHsgTjogU3RyaW5nKHN0YWxlQXQpIH0sXG4gICAgICAgICAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcoRGF0ZS5ub3coKSArIDYwXzAwMCkgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicG9zdHNcIiwgZ2V0Q3R4KSkudG9FcXVhbCh7XG4gICAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICAgIHZhbHVlOiBzdG9yZWQudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXaGVyZSBgSW5jcmVtZW50YWxDYWNoZS5nZXRgIHJlYWRzIGl0LCB0byBhbnN3ZXIgYGlzU3RhbGU6IHRydWVgLlxuICAgICAgICBleHBlY3QobmV4dC50YWdzTWFuaWZlc3QuZ2V0KFwicG9zdHNcIikpLnRvRXF1YWwoeyBzdGFsZTogc3RhbGVBdCB9KTtcbiAgICAgICAgZXhwZWN0KG5leHQuYXJlVGFnc1N0YWxlKFtcInBvc3RzXCJdLCBsYXN0TW9kaWZpZWQpKS50b0JlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZXhwaXJlcyB0aGUgZW50cnkgd2hlbiBOZXh0LmpzJ3MgbWFuaWZlc3QgY2Fubm90IGJlIGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQSBzdGFsZSBtYXJrIG5vdGhpbmcgcmVhZHMgd291bGQgc2VydmUgdGhlIGVudHJ5IGFzIGZyZXNoOyBhIGJsb2NraW5nXG4gICAgICAgIC8vIHJlbmRlciBpcyB0aGUgc2FmZSBzaWRlIG9mIHRoYXQuXG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7IEl0ZW06IHsgc3RhbGVBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgNTAwKSB9IH0gfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicG9zdHNcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgICAgbGFzdE1vZGlmaWVkOiAtMSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJleHBpcmVzIHRoZSBlbnRyeSBvbmNlIHRoZSBwcm9maWxlJ3MgZXhwaXJlIGhhcyBwYXNzZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICAgIGdldDoge1xuICAgICAgICAgICAgSXRlbToge1xuICAgICAgICAgICAgICBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDApIH0sXG4gICAgICAgICAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgNTAwKSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZShcImJlaGluZCBhIGRpc3RyaWJ1dGlvblwiLCAoKSA9PiB7XG4gICAgICAgIC8vIGByZXZhbGlkYXRlVGFnYCdzIGludmFsaWRhdGlvbiBnb2VzIG91dCBiZWZvcmUgdGhlIHN0YWxlIGVudHJ5IGlzXG4gICAgICAgIC8vIHNlcnZlZCwgYW5kIHRoZSBzdGFsZSByZXNwb25zZSBjYXJyaWVzIHRoZSBlbnRyeSdzIG9yaWdpbmFsXG4gICAgICAgIC8vIGBzLW1heGFnZWA6IENsb3VkRnJvbnQgY2FjaGVzIGl0IGFnYWluLiBPbmx5IHRoZSByZWdlbmVyYXRpb24ncyBgc2V0YFxuICAgICAgICAvLyBrbm93cyB3aGVuIHRoZSBmcmVzaCBlbnRyeSBleGlzdHMgdG8gYmUgZmV0Y2hlZCBpbnN0ZWFkLlxuICAgICAgICBsZXQgY2RuSGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gICAgICAgIGNvbnN0IHJlZ2VuZXJhdGVkID0gc3RvcmVkLnZhbHVlIGFzIHVua25vd24gYXMgSW5jcmVtZW50YWxDYWNoZVZhbHVlO1xuICAgICAgICBjb25zdCBpbnZhbGlkYXRlZFBhdGhzID0gKCk6IHN0cmluZ1tdW10gPT5cbiAgICAgICAgICAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxscy5tYXAoXG4gICAgICAgICAgICAoW2lucHV0XSkgPT4gaW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMsXG4gICAgICAgICAgKTtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgICAgICBjZG5IYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICAgICAgbW9ja01vZHVsZUNhY2hlW21hbmlmZXN0UGF0aF0gPSB7XG4gICAgICAgICAgICBleHBvcnRzOiB7IHRhZ3NNYW5pZmVzdDogbmV3IE1hcCgpIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICAgICAgZ2V0OiB7IEl0ZW06IHsgc3RhbGVBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgNTAwKSB9IH0gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhZ2UgYWdhaW4gb25jZSBpdHMgcmVnZW5lcmF0aW9uIGlzIHN0b3JlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpO1xuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW10pO1xuXG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IGZhbHNlLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbW1wiL3Bvc3RzKlwiXV0pO1xuXG4gICAgICAgICAgLy8gT25jZTogYSBsYXRlciB3cml0ZSBvZiB0aGUgc2FtZSBwYWdlIGlzIGFuIG9yZGluYXJ5IG9uZS5cbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogZmFsc2UsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInJlbWVtYmVycyBhIHN0YWxlIG1lbW9yeSBoaXQgYnkgdGhlIGtleSBpdCB3YXMgcmVhZCB1bmRlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5pc1JldmFsaWRhdGVkKHN0b3JlZCwgZ2V0Q3R4LCBcInBvc3RzXCIpO1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1tcIi9wb3N0cypcIl1dKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkb2VzIG5vdCBpbnZhbGlkYXRlIGFmdGVyIGFuIG9yZGluYXJ5IHdyaXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJmb3JnZXRzIGEgc3RhbGUgcGFnZSB0aGF0IGlzIGRlbGV0ZWQgaW5zdGVhZCBvZiByZWdlbmVyYXRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpO1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgbnVsbCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW10pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFMzIGVycm9ycyBhbmQgcmV0dXJuIG51bGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiUzMgRXJyb3JcIikpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImVycm9yLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJ0YWcgbWFya2VyIGNhY2hlXCIsICgpID0+IHtcbiAgICAvLyBFdmVyeSBjYWNoZSBoaXQgY2hlY2tzIGl0cyB0YWdzJyBtYXJrZXJzLCBhbmQgYWxsIG9mIGEgZGVwbG95bWVudCdzXG4gICAgLy8gbWFya2VycyBzaGFyZSBvbmUgcGFydGl0aW9uIGtleTogcmVhZCBwZXIgcmVxdWVzdCwgdGhleSBjYXBwZWQgYSByb3V0ZSdzXG4gICAgLy8gY2FjaGUgaGl0cyBhdCB+MSw5MDAgcmVxL3MuIEVhY2ggaW5zdGFuY2UgaG9sZHMgdGhlbSBmb3IgYSBzZWNvbmQuXG4gICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKSAtIDYwXzAwMDtcbiAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+Y2FjaGVkPC9odG1sPlwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJfTl9UXy9wYWdlLHBvc3RzXCIgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBnZXRDdHggPSB7XG4gICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgY29uc3QgbWFya2VyUmVhZHMgPSAoKSA9PlxuICAgICAgbW9ja0R5bmFtb1NlbmQubW9jay5jYWxscy5maWx0ZXIoXG4gICAgICAgIChbY29tbWFuZF0pID0+IGNvbW1hbmQgaW5zdGFuY2VvZiBCYXRjaEdldEl0ZW1Db21tYW5kLFxuICAgICAgKS5sZW5ndGg7XG4gICAgLy8gV2hhdCBgZ2V0YCBhbnN3ZXJzIGZvciBhIHJldmFsaWRhdGVkIHBhZ2U6IGV4cGlyZWQsIG5vdCBhIG1pc3MuXG4gICAgY29uc3QgZXhwaXJlZCA9IHsgbGFzdE1vZGlmaWVkOiAtMSB9O1xuICAgIGNvbnN0IHJldmFsaWRhdGVkQWZ0ZXJTdG9yZSA9IHtcbiAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMDApIH0gfSB9LFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhbnN3ZXJzIGNoZWNrcyB3aXRoaW4gdGhlIFRUTCBmcm9tIHRoZSBtYXJrZXJzIGl0IGFscmVhZHkgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KTtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpO1xuXG4gICAgICBleHBlY3QobWFya2VyUmVhZHMoKSkudG9CZSgxKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hhcmVzIG9uZSByZWFkIGJldHdlZW4gY29uY3VycmVudCBjaGVja3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSxcbiAgICAgICAgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCksXG4gICAgICAgIGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpLFxuICAgICAgXSk7XG5cbiAgICAgIGV4cGVjdChtYXJrZXJSZWFkcygpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzZWVzIGl0cyBvd24gcmV2YWxpZGF0ZVRhZyBhdCBvbmNlLCBhbmQgbG9ncyBpdCBmb3IgdGhlIG90aGVyc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCkpLnRvTWF0Y2hPYmplY3QoeyBsYXN0TW9kaWZpZWQgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyhyZXZhbGlkYXRlZEFmdGVyU3RvcmUpO1xuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG5cbiAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdChleHBpcmVkKTtcbiAgICAgIGNvbnN0IHB1dHMgPSBtb2NrRHluYW1vU2VuZC5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgKFtjb21tYW5kXSkgPT4gY29tbWFuZCBpbnN0YW5jZW9mIFB1dEl0ZW1Db21tYW5kLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChwdXRzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3QoY29tbWFuZElucHV0KHB1dHNbMF1bMF0sIFB1dEl0ZW1Db21tYW5kKS5JdGVtKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgcGs6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkI2xvZ1wiIH0sXG4gICAgICAgIHNrOiB7IFM6IGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlxcZHsxNX0jcG9zdHMkLykgfSxcbiAgICAgICAgcmV2YWxpZGF0ZWRBdDogeyBOOiBleHBlY3QuYW55KFN0cmluZykgfSxcbiAgICAgICAgdHRsOiB7IE46IGV4cGVjdC5hbnkoU3RyaW5nKSB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcIndyaXRlcyBlYWNoIHRhZyBvbmNlIHdoZW4gdGhlICd1c2UgY2FjaGUnIGhhbmRsZXJzIGdldCB0aGUgc2FtZSBjYWxsXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE5leHQuanMgY2FsbHMgYHJldmFsaWRhdGVUYWdgIGhlcmUgYW5kIGB1cGRhdGVUYWdzYCBvbiBldmVyeVxuICAgICAgLy8gYGNhY2hlSGFuZGxlcnNgIGVudHJ5LCBhbmQgYWxsIG9mIHRoZW0gc2hhcmUgb25lIG1hbmlmZXN0LlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBoYW5kbGVyLnJldmFsaWRhdGVUYWcoW1wicG9zdHNcIl0pLFxuICAgICAgICBzaGFyZWRUYWdNYW5pZmVzdCgpLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB3cml0ZXMgPSBtb2NrRHluYW1vU2VuZC5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgKFtjb21tYW5kXSkgPT5cbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgVXBkYXRlSXRlbUNvbW1hbmQgfHxcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUHV0SXRlbUNvbW1hbmQsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHdyaXRlcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInNldFwiLCAoKSA9PiB7XG4gICAgLy8gTWFwcGluZyByb3dzIGV4aXN0IG9ubHkgdG8gbmFtZSBDbG91ZEZyb250IHBhdGhzLCBzbyBvbmx5IGEgZGVwbG95bWVudFxuICAgIC8vIHdpdGggYSBkaXN0cmlidXRpb24ga2VlcHMgdGhlbS5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgaGFuZGxlciA9IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJrZWVwcyBubyBtYXBwaW5nIHJvd3Mgd2l0aG91dCBhIGRpc3RyaWJ1dGlvbiB0byBpbnZhbGlkYXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBSZWdpb25hbCBjb25zdHJ1Y3RzIGhhdmUgbm8gQ2xvdWRGcm9udC4gQSByb3cgcGVyIHRhZyBwZXIgYHNldGAsXG4gICAgICAvLyBhbmQgdGhlIFMzIHJlYWQgYmVmb3JlIGEgZGVsZXRlIHRvIG5hbWUgdGhlbSwgYm91Z2h0IG5vdGhpbmcgdGhlcmUuXG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRTtcbiAgICAgIGNvbnN0IHJlZ2lvbmFsID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgcmVnaW9uYWwuc2V0KFxuICAgICAgICBcIi9pc3IvMVwiLFxuICAgICAgICB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPHAvPlwiLFxuICAgICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJ0YWdcIiB9LFxuICAgICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZVNldENvbnRleHQoW10pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHJlZ2lvbmFsLnNldChcIi9pc3IvMVwiLCBudWxsLCB7IGlzRmFsbGJhY2s6IGZhbHNlIH0pO1xuXG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoR2V0T2JqZWN0Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3RvcmUgY2FjaGUgdmFsdWUgaW4gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnNldCB0ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcInNldC1rZXlcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW1widGFnMVwiXSkpO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShQdXRPYmplY3RDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KFVwZGF0ZUl0ZW1Db21tYW5kKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3Qgc3RvcmUgd2hlbiBTMyBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRob3V0QnVja2V0ID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPm5vIGJ1Y2tldDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRob3V0QnVja2V0LnNldChcbiAgICAgICAgXCJuby1idWNrZXQta2V5XCIsXG4gICAgICAgIHRlc3REYXRhLFxuICAgICAgICBjcmVhdGVTZXRDb250ZXh0KFtdKSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJtYXBzIHRoZSB0YWdzIGEgcGFnZSBjYXJyaWVzIG9ubHkgaW4gaXRzIHgtbmV4dC1jYWNoZS10YWdzIGhlYWRlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgUmVzcG9uc2VDYWNoZS5zZXRgIGJ1aWxkcyBhIHBhZ2UncyBgY3R4YCB3aXRob3V0IHRhZ3MsIHNvIHRoZSByZW5kZXInc1xuICAgICAgLy8gaGVhZGVyIGlzIHRoZSBvbmx5IHBsYWNlIHRoZXkgZXhpc3QuIE5vIG1hcHBpbmcgcm93IG1lYW50IGByZXZhbGlkYXRlVGFnYFxuICAgICAgLy8gZm91bmQgbm90aGluZyB0byBpbnZhbGlkYXRlIGFuZCBDbG91ZEZyb250IGtlcHQgdGhlIHN0YWxlIEhUTUwuXG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGFnZ2VkPC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcImhlYWRlci10YWcsb3RoZXItdGFnXCIgfSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtdKSk7XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdLZXlzID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0LktleS5zay5TKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgZXhwZWN0KG1hcHBpbmdLZXlzKS50b0VxdWFsKFtcbiAgICAgICAgXCJoZWFkZXItdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgICBcIm90aGVyLXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJwcmVmZXJzIHRoZSBjb250ZXh0J3MgdGFncyBvdmVyIHRoZSBoZWFkZXIgd2hlbiBib3RoIGFyZSBwcmVzZW50XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD50YWdnZWQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwiaGVhZGVyLXRhZ1wiIH0sXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXCJjdHgtdGFnXCJdKSk7XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdLZXlzID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0LktleS5zay5TKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgZXhwZWN0KG1hcHBpbmdLZXlzKS50b0VxdWFsKFtcImN0eC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVtb3ZlcyBhIGRlbGV0ZWQgcGFnZSdzIG1hcHBpbmcgcm93cywgcmVhZGluZyBpdHMgdGFncyBmcm9tIFMzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEEgcmVzcG9uc2UgZGVsZXRlIC0gYSBjYWNoZWQgcm91dGUgdGhhdCBzdGFydHMgYW5zd2VyaW5nIGBub3RGb3VuZCgpYCAtXG4gICAgICAvLyBhcnJpdmVzIGFzIGBzZXQoa2V5LCBudWxsLCB7IGNhY2hlQ29udHJvbCwgLi4uIH0pYCB3aXRoIG5vIHRhZ3MgYXQgYWxsLFxuICAgICAgLy8gc28gdGhlIGVudHJ5IGl0c2VsZiBpcyB0aGUgb25seSBwbGFjZSBpdHMgbWFwcGluZyByb3dzIGNhbiBiZSBuYW1lZFxuICAgICAgLy8gZnJvbS4gTGVmdCBiZWhpbmQsIHRoZXkgcmVzb2x2ZSBvbiB0aGUgbmV4dCBgcmV2YWxpZGF0ZVRhZ2AgdG8gYSBjYWNoZVxuICAgICAgLy8ga2V5IHdob3NlIG9iamVjdCBpcyBnb25lIGFuZCBzcGVuZCBhIENsb3VkRnJvbnQgd2lsZGNhcmQgcGF0aCBvbiBpdC5cbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCIsIFwiX05fVF8vaXNyLzFcIl0sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPGh0bWw+Z29uZTwvaHRtbD5cIixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCBudWxsLCB7XG4gICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiA2MCwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgICBjb25zdCBkZWxldGVkS2V5cyA9IChEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1xuICAgICAgICAubWFwKChbaW5wdXRdKSA9PiBpbnB1dC5LZXkuc2suUylcbiAgICAgICAgLnNvcnQoKTtcbiAgICAgIC8vIE1hcHBpbmcgcm93cyBvbmx5LiBUaGUgYmFyZS10YWcgbWFya2VyIHJvdyBiZWxvbmdzIHRvIHRoZSB0YWcsIGFuZFxuICAgICAgLy8gYGNoZWNrSWZSZXZhbGlkYXRlZGAgcmVhZHMgaXQgZm9yIGV2ZXJ5IG90aGVyIGVudHJ5IGNhcnJ5aW5nIGl0LlxuICAgICAgZXhwZWN0KGRlbGV0ZWRLZXlzKS50b0VxdWFsKFtcbiAgICAgICAgXCJfTl9UXy9pc3IvMSN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIixcbiAgICAgICAgXCJjb2xsZWN0aW9uI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImRlbGV0ZXMgYSBmZXRjaCBlbnRyeSdzIG1hcHBpbmcgcm93cyBmcm9tIHRoZSBjb250ZXh0J3MgdGFncyBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgY3R4YCBjYXJyaWVzIHRoZW0gaGVyZSwgc28gdGhlIHByZS1kZWxldGUgcmVhZCBpcyBza2lwcGVkOiBvbmx5IHRoZVxuICAgICAgLy8gRGVsZXRlT2JqZWN0IHJlYWNoZXMgUzMuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJmZXRjaC1rZXlcIiwgbnVsbCwgY3JlYXRlU2V0Q29udGV4dChbXCJjdHgtdGFnXCJdKSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShHZXRPYmplY3RDb21tYW5kKSk7XG4gICAgICBjb25zdCBkZWxldGVkS2V5cyA9IChcbiAgICAgICAgRGVsZXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxscy5tYXAoKFtpbnB1dF0pID0+IGlucHV0LktleS5zay5TKTtcbiAgICAgIGV4cGVjdChkZWxldGVkS2V5cykudG9FcXVhbChbXCJjdHgtdGFnI3Rlc3QtYnVpbGQtaWQvZmV0Y2gta2V5Lmpzb25cIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJkZWxldGVzIG5vIG1hcHBpbmcgcm93cyBmb3IgYW4gdW50YWdnZWQgZW50cnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsIGh0bWw6IFwiPHAvPlwiIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL3VudGFnZ2VkXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RpbGwgZGVsZXRlcyB0aGUgb2JqZWN0IHdoZW4gaXRzIHRhZ3MgY2Fubm90IGJlIHJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgPyBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTMyBHZXQgRXJyb3JcIikpXG4gICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe30pLFxuICAgICAgKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCBudWxsLCB7IGlzRmFsbGJhY2s6IGZhbHNlIH0pLFxuICAgICAgKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgUzMgZXJyb3JzIGdyYWNlZnVsbHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPmVycm9yIHRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTMyBQdXQgRXJyb3JcIikpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXIuc2V0KFwiZXJyb3Ita2V5XCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtdKSksXG4gICAgICApLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwicmV2YWxpZGF0ZVRhZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmVjb3JkIHRoZSByZXZhbGlkYXRpb24gd2l0aG91dCBkZWxldGluZyB0aGUgdGFnJ3MgUzMgZW50cmllc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjY2FjaGUta2V5LTFcIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI2NhY2hlLWtleS0yXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IG1vY2tRdWVyeVJlc3BvbnNlIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICAvLyBObyBkaXN0cmlidXRpb24sIHNvIG5vIG1hcHBpbmcgcm93cyB0byByZWFkOiB0aGUgbWFya2VyIGlzIGFsbCBvZiBpdC5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoUXVlcnlDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KFVwZGF0ZUl0ZW1Db21tYW5kKSxcbiAgICAgICk7XG4gICAgICAvLyBUaGUgbWFya2VyIHJvdyBpcyB0aGUgaW52YWxpZGF0aW9uOyBgZ2V0YCByZWFkcyBpdCBhbmQgaGFuZHMgdGhlIGVudHJ5XG4gICAgICAvLyBiYWNrIGV4cGlyZWQgc28gTmV4dC5qcyByZS1yZW5kZXJzIHRoZSByb3V0ZSBhbmQgcmVwbGFjZXMgdGhlIG9iamVjdC5cbiAgICAgIC8vIERlbGV0aW5nIHRoZSBvYmplY3RzIGhlcmUgbWFkZSB0aGUgbmV4dCByZXF1ZXN0IGEgaGFyZCBtaXNzLCB3aGljaCBvbiBhXG4gICAgICAvLyBQUFIgcm91dGUgaXMgYW5zd2VyZWQgZnJvbSB0aGUgdW5jYWNoZWFibGUgZmFsbGJhY2sgc2hlbGwgZm9yIGdvb2QuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcblxuICAgICAgLy8gVGhlIHRhZyBtYXJrZXIgYGNoZWNrSWZSZXZhbGlkYXRlZGAgcmVhZHM6IGtleWVkIGJ5IHRoZSBiYXJlIHRhZywgc29cbiAgICAgIC8vIGVudHJpZXMgd2l0aCBubyBtYXBwaW5nIHJvdyBvZiB0aGVpciBvd24gc3RpbGwgc2VlIHRoZSByZXZhbGlkYXRpb24uXG4gICAgICBjb25zdCBtYXJrZXJXcml0ZSA9IChVcGRhdGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1xuICAgICAgICAubWFwKChbaW5wdXRdKSA9PiBpbnB1dClcbiAgICAgICAgLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5LZXkuc2suUyA9PT0gXCJ0ZXN0LXRhZ1wiKTtcbiAgICAgIGV4cGVjdChtYXJrZXJXcml0ZSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFwiU0VUIHJldmFsaWRhdGVkQXQgPSA6cmV2YWxpZGF0ZWRBdFwiLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3QgcmV2YWxpZGF0ZSB3aGVuIER5bmFtb0RCIHRhYmxlIGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dFRhYmxlID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhvdXRUYWJsZS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBEeW5hbW9EQiBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiRHluYW1vREIgRXJyb3JcIikpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiZXJyb3ItdGFnXCIpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGEgQ2xvdWRGcm9udCBpbnZhbGlkYXRpb24gZm9yIGFmZmVjdGVkIHBhdGhzIHdoZW4gYSBkaXN0cmlidXRpb24gcGFyYW1ldGVyIGlzIGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzIuanNvblwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiBtb2NrUXVlcnlSZXNwb25zZSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pOyAvLyBGb3IgZGVsZXRlIGNvbW1hbmRzXG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tTc21TZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KE9iamVjdCkpO1xuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCksXG4gICAgICApO1xuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkRpc3RyaWJ1dGlvbklkKS50b0JlKFwidGVzdC1kaXN0cmlidXRpb24taWRcIik7XG4gICAgICAvLyBPbmUgdHJhaWxpbmcgd2lsZGNhcmQgcGVyIHBhZ2U6IGFuIGludmFsaWRhdGlvbiBwYXRoIG1hdGNoZXMgb25seSB0aGVcbiAgICAgIC8vIHF1ZXJ5IHN0cmluZyBpdCBzcGVsbHMgb3V0LCBhbmQgYSBwYWdlJ3MgUlNDIHBheWxvYWQgaXMgY2FjaGVkIHVuZGVyXG4gICAgICAvLyBgP19yc2M9PGhhc2g+YCAtIGAvaXNyLzEqYCBjb3ZlcnMgaXQsIGFuZCB0aGUgc2xhc2ggdmFyaWFudCwgZm9yIG9uZVxuICAgICAgLy8gb2YgdGhlIGZpZnRlZW4gd2lsZGNhcmRzIGluc3RlYWQgb2YgdHdvLlxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvaXNyLzEqXCIsXG4gICAgICAgIFwiL2lzci8yKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGEgZGlzdHJpYnV0aW9uIHdob3NlIElEIGlzIGluIHRoZSBlbnZpcm9ubWVudCB3aXRob3V0IFNTTVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBOZXh0anNHbG9iYWxDb250YWluZXJzOiB0aGUgdGFzayBjYW4gbmFtZSB0aGUgZGlzdHJpYnV0aW9uIGRpcmVjdGx5LlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSUQgPSBcImRpcmVjdC1kaXN0cmlidXRpb24taWRcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7IEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0gfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5EaXN0cmlidXRpb25JZCkudG9CZShcImRpcmVjdC1kaXN0cmlidXRpb24taWRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNwbGl0cyBhIG1hcHBpbmcgcm93IGF0IHRoZSB0YWcncyBsZW5ndGgsIHNvIGEgdGFnIGNvbnRhaW5pbmcgIyBzdGlsbCByZXNvbHZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIHRhZyBpcyBhcHAtZGVmaW5lZDogYHJldmFsaWRhdGVUYWcoXCJ1c2VyIzQyXCIpYCBpcyBsZWdhbC4gU3BsaXR0aW5nIGF0XG4gICAgICAvLyB0aGUgZmlyc3QgXCIjXCIgbGVmdCBcIjQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgYXMgdGhlIFMzIGtleSwgd2hvc2VcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRoIG5hbWVzIG5vdGhpbmcgQ2xvdWRGcm9udCBjYWNoZWQsIHNvIHRoZSBwYWdlIHN0YXllZFxuICAgICAgLy8gc3RhbGUgd2hpbGUgdGhlIHJvdyB3YXMgc3RhbXBlZCByZXZhbGlkYXRlZCBhbmQgbmV2ZXIgcmV0cmllZC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeTogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ1c2VyIzQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgfSB9XSB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ1c2VyIzQyXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9hY2NvdW50KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRoIGEgcmV2YWxpZGF0ZVBhdGggdGFnIG5hbWVzIGV2ZW4gd2l0aCBubyBtYXBwaW5nIHJvd3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBidWlsZC10aW1lIHByZXJlbmRlciBoYXMgbm8gbWFwcGluZyByb3dzLCBzbyB0aGUgcXVlcnkgY29tZXMgYmFja1xuICAgICAgLy8gZW1wdHkgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVyaXZlIGEgQ2xvdWRGcm9udCBwYXRoIGZyb20gLSBleGNlcHQgdGhlXG4gICAgICAvLyB0YWcsIHdoaWNoIGZvciBgcmV2YWxpZGF0ZVBhdGhgIGlzIGBfTl9UXzxwYXRoPmAuIFdpdGhvdXQgdGhpcyB0aGUgQ0ROXG4gICAgICAvLyBhbnN3ZXJzIHdpdGggdGhlIHByZS1yZXZhbGlkYXRpb24gcGFnZSB1bnRpbCBgcy1tYXhhZ2U9MzE1MzYwMDBgXG4gICAgICAvLyBleHBpcmVzLiBNZWFzdXJlZCBhZ2FpbnN0IG5leHQuanMncyBgdGVzdC9lMmUvYXBwLWRpci90cmFpbGluZ3NsYXNoYC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL2VuL2xlZ2FjeS9cIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIC8vIEJvdGggc2xhc2ggdmFyaWFudHMsIHdoaWNoIHRoZSB0cmFpbGluZyB3aWxkY2FyZCBjb3ZlcnM6IGFcbiAgICAgIC8vIGB0cmFpbGluZ1NsYXNoYCBhcHAncyBjYWNoZWQgVVJJIGlzIHRoZSByZWRpcmVjdCB0YXJnZXQsIG5vdCB0aGUgcm91dGUuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9lbi9sZWdhY3kqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIFVSSSB1bmRlciB0aGUgYXBwJ3MgYmFzZVBhdGgsIG5vdCB0aGUgYmFyZSByb3V0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250IGNhY2hlZCBgL2Jhc2UvaXNyLzFgOyB0aGUgY2FjaGUga2V5IGFuZCB0aGUgYHJldmFsaWRhdGVQYXRoYFxuICAgICAgLy8gdGFnIGJvdGggbmFtZSBgL2lzci8xYCwgYmVjYXVzZSBOZXh0LmpzIHN0cmlwcyBgYmFzZVBhdGhgIGJlZm9yZSByb3V0aW5nXG4gICAgICAvLyBhbmQgbmV2ZXIgc2hvd3MgaXQgdG8gdGhlIGNhY2hlIGhhbmRsZXIuIEludmFsaWRhdGluZyB0aGUgYmFyZSByb3V0ZVxuICAgICAgLy8gbWF0Y2hlcyBub3RoaW5nIGF0IHRoZSBlZGdlLCBzbyB0aGUgc3RhbGUgcGFnZSBzdXJ2aXZlcyB1bnRpbFxuICAgICAgLy8gYHMtbWF4YWdlYCBleHBpcmVzLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhCYXNlUGF0aCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pbmRleC5qc29uXCIgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aEJhc2VQYXRoLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFxuICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICBcIi9iYXNlL2lzci8xKlwiLFxuICAgICAgICAgIC8vIFRoZSBhcHAncyByb290IHVuZGVyIGEgYGJhc2VQYXRoYCBpcyBgL2Jhc2VgLCBub3QgYC9iYXNlL2AsIGFuZFxuICAgICAgICAgIC8vIHNwZWxsZWQgb3V0OiBgL2Jhc2UqYCB3b3VsZCBiZSB0aGUgd2hvbGUgYXBwLlxuICAgICAgICAgIFwiL2Jhc2VcIixcbiAgICAgICAgICBcIi9iYXNlPypcIixcbiAgICAgICAgICBcIi9iYXNlL1wiLFxuICAgICAgICAgIFwiL2Jhc2UvPypcIixcbiAgICAgICAgXSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS5ub3QudG9Db250YWluKFxuICAgICAgICBcIi9pc3IvMVwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYWRkcyB0aGUgYmFzZVBhdGggdG8gYSByZXZhbGlkYXRlUGF0aCB0YWcncyBwYXRoIHRvb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIHVzZUJhc2VQYXRoKCk7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aEJhc2VQYXRoID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoQmFzZVBhdGgucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL2Jsb2dcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL2Jhc2UvYmxvZypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJkb2VzIG5vdCBpbnZhbGlkYXRlIGEgQ2xvdWRGcm9udCBwYXRoIGZvciBhbiBhcHAgdGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuXG4gICAgICAvLyBOb3RoaW5nIHRvIGludmFsaWRhdGU6IGFuIGFwcCB0YWcgbmFtZXMgbm8gcGF0aCwgYW5kIG5vIGVudHJ5IGlzIG1hcHBlZFxuICAgICAgLy8gdG8gaXQuXG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IGNhbGwgU1NNIG9yIENsb3VkRnJvbnQgd2hlbiBubyBkaXN0cmlidXRpb24gcGFyYW1ldGVyIGlzIGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgU1NNL0Nsb3VkRnJvbnQgaW52YWxpZGF0aW9uIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgIH07XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiBtb2NrUXVlcnlSZXNwb25zZSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlNTTSBFcnJvclwiKSk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpLFxuICAgICAgKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGFnZSBpdHNlbGYgZm9yIGEgcmV2YWxpZGF0ZVBhdGgocGF0aCwgJ3BhZ2UnKSB0YWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYHJldmFsaWRhdGVQYXRoKHBhdGgsIHR5cGUpYCBhcHBlbmRzIHRoZSB0eXBlIHRvIHRoZSBpbXBsaWNpdCB0YWcsIHNvIHRoZVxuICAgICAgLy8gdGFnIHJlYWRzIGBfTl9UXy9wcmljaW5nL3BhZ2VgIC0gYSBwYXRoIG5vIFVSTCBoYXMuIFRha2luZyBpdCBsaXRlcmFsbHlcbiAgICAgIC8vIGludmFsaWRhdGVkIG5vdGhpbmcgdGhhdCBleGlzdGVkLCB3aGljaCBpcyB0aGUgd2hvbGUgb2YgdGhlIGJ1ZzogdGhlXG4gICAgICAvLyBzZWNvbmQgYXJndW1lbnQgc2lsZW50bHkgdHVybmVkIENETiBpbnZhbGlkYXRpb24gb2ZmLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiB7IEl0ZW1zOiBbXSB9IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwiX05fVF8vcHJpY2luZy9wYWdlXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1wiL3ByaWNpbmcqXCJdKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNraXBzIG1hcHBpbmcgcm93cyB0aGF0IG5hbWUgbm8gY2FjaGVkIFVSSVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIGR5bmFtaWMgdGVtcGxhdGUgYW5kIGEgZmV0Y2gtY2FjaGUgZW50cnkgYXJlIGJvdGggcm93cyBhIHJlYWwgdGFnXG4gICAgICAvLyBjYXJyaWVzLCBhbmQgbmVpdGhlciBpcyBhIFVSTDogYC9ibG9nL1tzbHVnXWAgbWF0Y2hlcyBub3RoaW5nIGF0IHRoZSBlZGdlXG4gICAgICAvLyAoQ2xvdWRGcm9udCBoYXMgbm8gc3VjaCBVUkkpLCBhbmQgYSBmZXRjaCBrZXkgaXMgYSBoYXNoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvW3NsdWddLmpzb25cIiB9IH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNrOiB7XG4gICAgICAgICAgICAgICAgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkLzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmLmpzb25cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvLmpzb25cIiB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgY29uc3QgaXRlbXM6IHN0cmluZ1tdID0gaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXM7XG4gICAgICBleHBlY3QoaXRlbXMpLnRvRXF1YWwoW1wiL2Jsb2cvaGVsbG8qXCJdKTtcbiAgICAgIGV4cGVjdChpdGVtcy5zb21lKChwYXRoKSA9PiBwYXRoLmluY2x1ZGVzKFwiW1wiKSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGl0ZW1zLnNvbWUoKHBhdGgpID0+IHBhdGguaW5jbHVkZXMoXCIwMTIzNDU2Nzg5YWJjZGVmXCIpKSkudG9CZShcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ3YWxrcyBldmVyeSBRdWVyeSBwYWdlIG9mIGEgdGFnJ3MgbWFwcGluZyByb3dzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE9uZSBgUXVlcnlgIGFuc3dlcnMgd2l0aCBhdCBtb3N0IDEgTUIuIEEgdGFnIG9uIGEgbGFyZ2UgYXBwIHJ1bnMgcGFzdFxuICAgICAgLy8gdGhhdCwgYW5kIHRha2luZyBvbmx5IHRoZSBmaXJzdCBwYWdlIGRlbGV0ZWQgc29tZSBvZiB0aGUgdGFnJ3MgZW50cmllc1xuICAgICAgLy8gYW5kIGludmFsaWRhdGVkIG9ubHkgc29tZSBvZiBpdHMgcGF0aHMgLSBhIHBhcnRpYWwgcmV2YWxpZGF0aW9uIHRoYXRcbiAgICAgIC8vIGxvb2tzIGxpa2UgYSBjYWNoZSBidWcuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgbGV0IHF1ZXJpZXMgPSAwO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kKSB7XG4gICAgICAgICAgcXVlcmllcysrO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBxdWVyaWVzID09PSAxXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgICAgICAgICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6IHsgcGs6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkXCIgfSB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7IEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzIuanNvblwiIH0gfV0gfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QocXVlcmllcykudG9CZSgyKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL2lzci8xKlwiLFxuICAgICAgICBcIi9pc3IvMipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjb2xsYXBzZXMgdG8gb25lIGFwcC13aWRlIHdpbGRjYXJkIHJhdGhlciB0aGFuIHNlbmRpbmcgbWFueSBpbnZhbGlkYXRpb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENsb3VkRnJvbnQgY2FwcyBhIHJlcXVlc3QgYXQgMTUgd2lsZGNhcmQgcGF0aHMgYW5kIGFsbG93cyAxNVxuICAgICAgLy8gaW52YWxpZGF0aW9ucyBpbiBwcm9ncmVzcy4gQSB0YWcgY292ZXJpbmcgaHVuZHJlZHMgb2YgcGFnZXMgdGhlcmVmb3JlXG4gICAgICAvLyBjYW5ub3QgYmUgc3BlbGxlZCBvdXQ6IHNlbmRpbmcgYSByZXF1ZXN0IHBlciAxNSBwYXRocyB0aHJvdHRsZXMsIGFuZCBhXG4gICAgICAvLyB0aHJvdHRsZWQgcmVxdWVzdCBpcyBhIHBhZ2UgdGhhdCBzdGF5cyBzdGFsZS5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMDAgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgICAgICBzazogeyBTOiBgdGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvJHtpfS5qc29uYCB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcIi8qXCJdKTtcbiAgICB9KTtcblxuICAgIC8qKiBBIGhhbmRsZXIgd2l0aCBhIGRpc3RyaWJ1dGlvbiwgYW5kIER5bmFtb0RCIGFuc3dlcmluZyBgcXVlcnlgIGZvciBpdC4gKi9cbiAgICBjb25zdCB3aXRoRGlzdHJpYnV0aW9uID0gKHF1ZXJ5OiB1bmtub3duKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgcmV0dXJuIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgIH07XG4gICAgY29uc3QgaW52YWxpZGF0aW9ucyA9ICgpOiBzdHJpbmdbXVtdID0+XG4gICAgICAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxscy5tYXAoXG4gICAgICAgIChbaW5wdXRdKSA9PiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcyxcbiAgICAgICk7XG4gICAgY29uc3QgcGFnZXMgPSAodGFnOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpID0+ICh7XG4gICAgICBJdGVtczogQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgIHNrOiB7IFM6IGAke3RhZ30jdGVzdC1idWlsZC1pZC9pc3IvJHtpfS5qc29uYCB9LFxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgaXQoXCJzZW5kcyBhIHRhZydzIHBhdGhzIGFzIG9uZSByZXF1ZXN0IHdoaWxlIHRoZXkgZml0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENsb3VkRnJvbnQncyB3aWxkY2FyZCBxdW90YSBpcyBzaGFyZWQgYnkgZXZlcnkgaW52YWxpZGF0aW9uIGluXG4gICAgICAvLyBwcm9ncmVzcyBvbiB0aGUgZGlzdHJpYnV0aW9uLiBTcGxpdHRpbmcgdGVuIHBhZ2VzJyB0d2VudHkgd2lsZGNhcmRzXG4gICAgICAvLyBpbnRvIHR3byBiYWNrLXRvLWJhY2sgcmVxdWVzdHMgaGFkIHRoZSBzZWNvbmQgcmVqZWN0ZWQsIGFuZCBpdHMgcGFnZXNcbiAgICAgIC8vIHN0YXllZCBzdGFsZSBhdCB0aGUgZWRnZS5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxMCkpLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKVswXSkudG9IYXZlTGVuZ3RoKDEwKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY29sbGFwc2VzIHRvIHRoZSB3aG9sZSBhcHAgcGFzdCBmaWZ0ZWVuIHdpbGRjYXJkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMTYpKS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvbGxhcHNlcyB0byB0aGUgd2hvbGUgYXBwIHVuZGVyIGEgYmFzZVBhdGgsIGl0cyByb290IGluY2x1ZGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE5vdCBgL2Jhc2UqYCwgd2hpY2ggd291bGQgYWxzbyBpbnZhbGlkYXRlIGEgc2libGluZyBhcHAgYXQgYC9iYXNlMmAuXG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDE2KSkucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgdW5kZXIgYSBiYXNlUGF0aCB3aGVuIGEgdGFnJ3Mgcm93cyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInBlcmNlbnQtZW5jb2RlcyB0aGUgcm91dGVzIGl0IGludmFsaWRhdGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENhY2hlIGtleXMgYXJlIGRlY29kZWQgcGF0aG5hbWVzLCB3aGlsZSBDbG91ZEZyb250IGNhY2hlcyAtIGFuZFxuICAgICAgLy8gaW52YWxpZGF0aW9uIHBhdGhzIG1hdGNoIC0gdGhlIGVuY29kZWQgVVJJIHRoZSBicm93c2VyIHNlbnQuXG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHtcbiAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2jDqWxsby5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvaGVsbG8gd29ybGQuanNvblwiIH0gfSxcbiAgICAgICAgICAvLyBQYXRoIGRlbGltaXRlcnMgTmV4dC5qcyByZS1lc2NhcGVkIGluIHRoZSBrZXkgc3RheSBhcyB0aGV5IGFyZS5cbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9maWxlcy9hJTJGYi5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL0B1c2VyLzUwJS5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSkucmV2YWxpZGF0ZVRhZyhbXCJ0ZXN0LXRhZ1wiLCBcIl9OX1RfL3RhZ3MvYyM/XCJdKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbXG4gICAgICAgIFtcbiAgICAgICAgICBcIi9ibG9nL2glQzMlQTlsbG8qXCIsXG4gICAgICAgICAgXCIvYmxvZy9oZWxsbyUyMHdvcmxkKlwiLFxuICAgICAgICAgIFwiL2ZpbGVzL2ElMkZiKlwiLFxuICAgICAgICAgIFwiL0B1c2VyLzUwJTI1KlwiLFxuICAgICAgICAgIFwiL3RhZ3MvYyUyMyUzRipcIixcbiAgICAgICAgXSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBldmVyeSB0YWcgb2Ygb25lIGNhbGwgaW4gYSBzaW5nbGUgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZ2AgaGFuZHMgdGhlIGhhbmRsZXIgZXZlcnkgdGFnIGEgcmVxdWVzdCByZXZhbGlkYXRlZCBhdFxuICAgICAgLy8gb25jZTsgYSByZXF1ZXN0IHBlciB0YWcgY29tcGV0ZXMgZm9yIHRoZSBzYW1lIHF1b3RhLlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KS5yZXZhbGlkYXRlVGFnKFtcbiAgICAgICAgXCJfTl9UXy9hXCIsXG4gICAgICAgIFwiX05fVF8vYlwiLFxuICAgICAgXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9hKlwiLCBcIi9iKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gYSB0YWcgaGFzIG1vcmUgcm93cyB0aGFuIGl0IHdhbGtzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSByb3dzIHBhc3QgdGhlIGxhc3QgcGFnZSB3YWxrZWQgYXJlIHBhZ2VzIHRvbzsgaW52YWxpZGF0aW5nIG9ubHkgdGhlXG4gICAgICAvLyBvbmVzIHJlYWQgbGVmdCB0aGUgcmVzdCBzdGFsZSBhdCB0aGUgZWRnZSBmb3IgdXAgdG8gYSB5ZWFyLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dLFxuICAgICAgICAgICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6IHsgcGs6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkXCIgfSB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSkucmV2YWxpZGF0ZVRhZyhcbiAgICAgICAgXCJ0ZXN0LXRhZ1wiLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaWdub3JlcyByb3dzIHRoYXQgYW5vdGhlciB0YWcgc2hhcmluZyB0aGUgcHJlZml4IG93bnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYGJlZ2luc193aXRoKHNrLCBcInVzZXIjXCIpYCBhbHNvIG1hdGNoZXMgdGhlIHRhZyBgdXNlciM0MmA6IGl0cyBiYXJlXG4gICAgICAvLyBtYXJrZXIgcm93LCBhbmQgaXRzIG1hcHBpbmcgcm93cy4gUmVhZCBhcyBgdXNlcmAncywgdGhleSBiZWNhbWVcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRocyBsaWtlIGAvNDJgIHRoYXQgbmFtZSBub3RoaW5nLlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjNDJcIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjNDIjdGVzdC1idWlsZC1pZC9hY2NvdW50Lmpzb25cIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjdGVzdC1idWlsZC1pZC9wcm9maWxlLmpzb25cIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9KS5yZXZhbGlkYXRlVGFnKFwidXNlclwiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL3Byb2ZpbGUqXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFkZHMgdGhlIGJ1aWxkLXRpbWUgcHJlcmVuZGVycyB0aGUgYnVpbGQncyB0YWcgbWFuaWZlc3QgbmFtZXMsIHJlYWRpbmcgaXQgb25jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIHByZXJlbmRlciBpcyB3cml0dGVuIGJ5IHRoZSBhZGFwdGVyLCBuZXZlciB0aHJvdWdoIGBzZXRgLCBzbyBpdCBoYXNcbiAgICAgIC8vIG5vIG1hcHBpbmcgcm93OiB0aGUgbWFuaWZlc3QgaXMgdGhlIG9ubHkgcmVjb3JkIG9mIGl0cyB0YWdzLlxuICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oe1xuICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJwb3N0cyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvYi5qc29uXCIgfSB9XSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWFuaWZlc3RHZXRzID0gKCkgPT5cbiAgICAgICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAgIChbaW5wdXRdKSA9PlxuICAgICAgICAgICAgaW5wdXQuS2V5ID09PSBcInRlc3QtYnVpbGQtaWQvX2Nkay1uZXh0anMtdGFnLW1hbmlmZXN0Lmpzb25cIixcbiAgICAgICAgKTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoKSA9PlxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHBvc3RzOiBbXCJibG9nL2FcIiwgXCJpbmRleFwiXSB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJjb25zdHJ1Y3RvclwiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jsb2cvYipcIiwgXCIvYmxvZy9hKlwiLCBcIi9cIiwgXCIvPypcIl1dKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdEdldHMoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gdGhlIGJ1aWxkJ3MgdGFnIG1hbmlmZXN0IGNhbm5vdCBiZSByZWFkLCBhbmQgcmVhZHMgaXQgYWdhaW4gbmV4dCB0aW1lXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHsgSXRlbXM6IFtdIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiQWNjZXNzRGVuaWVkXCIpKTtcblxuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgd2hlbiBhIHRhZydzIG1hcmtlciByb3cgY2Fubm90IGJlIHdyaXR0ZW5cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gT3RoZXIgaW5zdGFuY2VzIHdvdWxkIG5ldmVyIHNlZSB0aGUgcmV2YWxpZGF0aW9uLCBzbyBubyBwYXRoIGxpc3QgaXNcbiAgICAgIC8vIGVub3VnaC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoeyBJdGVtczogW10gfSlcbiAgICAgICAgICA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIGEgdGFnJ3MgbWFwcGluZyByb3dzIGNhbm5vdCBiZSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBtYXJrZXIgcm93IGlzIHdyaXR0ZW4gYmVmb3JlIHRoZSBRdWVyeSwgc28gYSBmYWlsZWQgUXVlcnkgbGVhdmVzXG4gICAgICAvLyB0aGUgdGFnIHJldmFsaWRhdGVkIGF0IHRoZSBvcmlnaW4gd2l0aCBubyBwYXRocyBuYW1lZCBmb3IgdGhlIGVkZ2UuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0RXhjZWVkZWRcIikpXG4gICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe30pLFxuICAgICAgKTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSkucmV2YWxpZGF0ZVRhZyhbXG4gICAgICAgIFwiX05fVF8vYVwiLFxuICAgICAgICBcInBvc3RzXCIsXG4gICAgICBdKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiBDbG91ZEZyb250J3MgaW52YWxpZGF0aW9uIHF1b3RhIGlzIGZ1bGxcIiwgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBxdW90YUVycm9yID0gKCkgPT5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBuZXcgRXJyb3IoXCJZb3VyIHJlcXVlc3QgY29udGFpbnMgdG9vIG1hbnkgaW52YWxpZGF0aW9uc1wiKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlRvb01hbnlJbnZhbGlkYXRpb25zSW5Qcm9ncmVzc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgIGl0KFwicmV0cmllcyBhcyBvbmUgYXBwLXdpZGUgd2lsZGNhcmQgYWZ0ZXIgYSBiYWNrb2ZmXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAyKSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZFxuICAgICAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UocXVvdGFFcnJvcigpKVxuICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuXG4gICAgICAgIGNvbnN0IGRvbmUgPSBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcbiAgICAgICAgYXdhaXQgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lQXN5bmMoMTAwMCk7XG4gICAgICAgIGF3YWl0IGRvbmU7XG5cbiAgICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2lzci8wKlwiLCBcIi9pc3IvMSpcIl0sIFtcIi8qXCJdXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJnaXZlcyB1cCBhZnRlciB0aGUgbGFzdCByZXRyeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMSkpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1JlamVjdGVkVmFsdWUocXVvdGFFcnJvcigpKTtcblxuICAgICAgICBjb25zdCBkb25lID0gY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDMwMDApO1xuICAgICAgICBhd2FpdCBleHBlY3QoZG9uZSkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIl0sIFtcIi8qXCJdLCBbXCIvKlwiXV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZG9lcyBub3QgcmV0cnkgYW55IG90aGVyIGVycm9yXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxKSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZShuZXcgRXJyb3IoXCJBY2Nlc3NEZW5pZWRcIikpO1xuXG4gICAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIl1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcInJldHJpZXMgdGhlIGFwcCdzIHJvb3QgdW5kZXIgYSBiYXNlUGF0aCB0b29cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBgL2Jhc2UvKmAgbWF0Y2hlcyBuZWl0aGVyIGAvYmFzZWAgbm9yIGAvYmFzZT9fcnNjPeKApmA6IHJldHJ5aW5nXG4gICAgICAgIC8vIGByZXZhbGlkYXRlUGF0aChcIi9cIilgIGFzIHRoYXQgbGVmdCB0aGUgaG9tZSBwYWdlIHN0YWxlIGF0IHRoZSBlZGdlLlxuICAgICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KTtcbiAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kXG4gICAgICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZShxdW90YUVycm9yKCkpXG4gICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL1wiKTtcbiAgICAgICAgYXdhaXQgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lQXN5bmMoMTAwMCk7XG4gICAgICAgIGF3YWl0IGRvbmU7XG5cbiAgICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKVsxXSkudG9FcXVhbChbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWNvcmRzIGEgcHJvZmlsZSdzIHJldmFsaWRhdGlvbiBhcyBzdGFsZSBub3csIGV4cGlyaW5nIGxhdGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiLCB7IGV4cGlyZTogNjAgfSk7XG5cbiAgICAgIGNvbnN0IFtpbnB1dF0gPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW5wdXQuS2V5LnNrLlMpLnRvQmUoXCJwb3N0c1wiKTtcbiAgICAgIGV4cGVjdChpbnB1dC5VcGRhdGVFeHByZXNzaW9uKS50b0JlKFxuICAgICAgICBcIlNFVCBzdGFsZUF0ID0gOnN0YWxlQXQsIGV4cGlyZWRBdCA9IDpleHBpcmVkQXRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBzdGFsZUF0ID0gTnVtYmVyKGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6c3RhbGVBdFwiXS5OKTtcbiAgICAgIGV4cGVjdChzdGFsZUF0KS50b0JlR3JlYXRlclRoYW5PckVxdWFsKGJlZm9yZSk7XG4gICAgICBleHBlY3QoTnVtYmVyKGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6ZXhwaXJlZEF0XCJdLk4pKS50b0JlKFxuICAgICAgICBzdGFsZUF0ICsgNjBfMDAwLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBoYW5kbGVyJ3MgaGFsZiBvZiBgcmVzLnJldmFsaWRhdGUoKWAncyBDRE4gaW52YWxpZGF0aW9uOiB0aGUgaG9va1xuICAgKiBpdCByZWdpc3RlcnMgZm9yIGBpbnZhbGlkYXRlUmV2YWxpZGF0ZWRQYWdlYCBpbiBgcnVudGltZS9jb3JlLnRzYC4gVGhlXG4gICAqIHJ1bnRpbWUncyBoYWxmIGlzIGluIGBjb3JlLnRlc3QudHNgLlxuICAgKi9cbiAgZGVzY3JpYmUoXCJ0aGUgcmV2YWxpZGF0ZWQtcGFnZSBob29rXCIsICgpID0+IHtcbiAgICBjb25zdCBIT09LID0gUkVWQUxJREFURURfUEFHRV9IT09LO1xuICAgIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICAgIHR5cGUgSG9vayA9IChyb3V0ZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgZ2xvYmFsc1tIT09LXTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHsgUGFyYW1ldGVyOiB7IFZhbHVlOiBcIkVESVNUUklCVVRJT05cIiB9IH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrQ2xlYXIoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGludmFsaWRhdGVkUGF0aHMoKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgW2lucHV0XSA9IChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrXG4gICAgICAgIC5jYWxsc1swXTtcbiAgICAgIHJldHVybiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcztcbiAgICB9XG5cbiAgICBpdChcImlzIHJlZ2lzdGVyZWQgb25seSBiZWhpbmQgYSBkaXN0cmlidXRpb25cIiwgKCkgPT4ge1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICBleHBlY3QoZ2xvYmFsc1tIT09LXSkudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJwYXJhbVwiO1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICBleHBlY3QodHlwZW9mIGdsb2JhbHNbSE9PS10pLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhZ2UgYW5kIGl0cyBkYXRhIHJvdXRlIHVuZGVyIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCwgYmFzZVBhdGg6IFwiYmFzZVwiIH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9ibG9nL2hlbGxvXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvLmpzb25cIixcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL2Jhc2UvYmxvZy9oZWxsbypcIixcbiAgICAgICAgXCIvYmFzZS9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNwZWxscyBvdXQgdGhlIHJvb3QgcmF0aGVyIHRoYW4gaW52YWxpZGF0aW5nIHRoZSB3aG9sZSBhcHBcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2luZGV4Lmpzb25cIixcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL1wiLFxuICAgICAgICBcIi8/KlwiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvaW5kZXguanNvbipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzZW5kcyBldmVyeSBwYXRoIG9uY2UsIGluIG9uZSBpbnZhbGlkYXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9lbi9ibG9nLmpzb25cIixcbiAgICAgICAgXCIvZW4vYmxvZ1wiLFxuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtcbiAgICAgICAgXCIvYmxvZypcIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2VuL2Jsb2cuanNvbipcIixcbiAgICAgICAgXCIvZW4vYmxvZypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInJlc2V0UmVxdWVzdENhY2hlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjb21wbGV0ZSB3aXRob3V0IGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXNldFJlcXVlc3RDYWNoZSgpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
1601
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUE2RDtBQUM3RCxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUE0QixFQUFFLENBQUM7QUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0NBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0osZUFBZTtBQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqQyxrRUFHb0M7QUFDcEMsOERBT2tDO0FBQ2xDLGtEQUs0QjtBQUM1QixvREFBZ0Q7QUFPaEQseURBQW9EO0FBQ3BELHlEQUF1RDtBQUN2RCxrREFBNEQ7QUFFNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxF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QixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFFBQVE7Z0JBQ1IseUNBQXlDO2dCQUN6QyxXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IG1rZHRlbXBTeW5jLCBybVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG4vLyBXaGF0IGByZXF1aXJlLmNhY2hlYCBob2xkcyBpbiBhIHJ1bm5pbmcgc2VydmVyLiBKZXN0J3MgYGNyZWF0ZVJlcXVpcmVgIGhhbmRzXG4vLyBvdXQgYSBjYWNoZSBvZiBpdHMgb3duIHRoYXQgbm90aGluZyBpcyBldmVyIGxvYWRlZCBpbnRvLCBzbyB0aGUgaGFuZGxlcidzXG4vLyBsb29rdXAgb2YgTmV4dC5qcydzIHRhZyBtYW5pZmVzdCByZWFkcyB0aGlzIHN0YW5kLWluIGluc3RlYWQuXG5jb25zdCBtb2NrTW9kdWxlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5qZXN0Lm1vY2soXCJub2RlOm1vZHVsZVwiLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoXCJub2RlOm1vZHVsZVwiKSxcbiAgY3JlYXRlUmVxdWlyZTogKCkgPT4gKHsgY2FjaGU6IG1vY2tNb2R1bGVDYWNoZSB9KSxcbn0pKTtcbi8vIE1vY2sgQVdTIFNES1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtc3NtXCIpO1xuXG5pbXBvcnQge1xuICBDbG91ZEZyb250Q2xpZW50LFxuICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7XG4gIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBTU01DbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHtcbiAgSW5jcmVtZW50YWxDYWNoZVZhbHVlLFxuICBDYWNoZWRSb3V0ZUtpbmQsXG4gIEluY3JlbWVudGFsQ2FjaGVLaW5kLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgUzNDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi9zMy1jYWNoZS1oYW5kbGVyXCI7XG5pbXBvcnQgeyBzaGFyZWRUYWdNYW5pZmVzdCB9IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IFJFVkFMSURBVEVEX1BBR0VfSE9PSyB9IGZyb20gXCIuLi9ydW50aW1lL21hbmlmZXN0XCI7XG5cbmNvbnN0IG1vY2tTM1NlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrRHluYW1vU2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tDbG91ZEZyb250U2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tTc21TZW5kID0gamVzdC5mbigpO1xuXG4oUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1MzU2VuZCxcbn0pKTtcblxuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tEeW5hbW9TZW5kLFxufSkpO1xuXG4oQ2xvdWRGcm9udENsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICBzZW5kOiBtb2NrQ2xvdWRGcm9udFNlbmQsXG59KSk7XG5cbihTU01DbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1NzbVNlbmQsXG59KSk7XG5cbmRlc2NyaWJlKFwiUzNEeW5hbW9DYWNoZUhhbmRsZXJcIiwgKCkgPT4ge1xuICBsZXQgaGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gIGxldCBtb2NrQ29udGV4dDogQ2FjaGVIYW5kbGVyQ29udGV4dDtcbiAgbGV0IGRpc3REaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogU3RhZ2UgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBmb3IgYW4gYXBwIHdpdGggYGJhc2VQYXRoOiBcIi9iYXNlXCJgLiAqL1xuICBjb25zdCB1c2VCYXNlUGF0aCA9ICgpID0+IHtcbiAgICBkaXN0RGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJzMy1jYWNoZS1oYW5kbGVyLVwiKSk7XG4gICAgd3JpdGVGaWxlU3luYyhcbiAgICAgIGpvaW4oZGlzdERpciwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIi9iYXNlXCIgfSB9KSxcbiAgICApO1xuICAgIG1vY2tDb250ZXh0LnNlcnZlckRpc3REaXIgPSBqb2luKGRpc3REaXIsIFwic2VydmVyXCIpO1xuICB9O1xuXG4gIC8vIEhlbHBlciB0byBjcmVhdGUgc2V0IGNvbnRleHQgd2l0aCB0YWdzXG4gIGNvbnN0IGNyZWF0ZVNldENvbnRleHQgPSAodGFnczogc3RyaW5nW10pID0+ICh7XG4gICAgZmV0Y2hDYWNoZTogdHJ1ZSBhcyBjb25zdCxcbiAgICB0YWdzLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IGEgbW9ja2VkIGNvbW1hbmQgd2FzIGNvbnN0cnVjdGVkIHdpdGguIFRoZSBTREsncyBjb21tYW5kIGNsYXNzZXNcbiAgICogYXJlIGF1dG9tb2NrZWQsIHNvIGFuIGluc3RhbmNlIGNhcnJpZXMgbm90aGluZyBvZiBpdHMgb3duLlxuICAgKi9cbiAgY29uc3QgY29tbWFuZElucHV0ID0gKGNvbW1hbmQ6IHVua25vd24sIHR5cGU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBtb2NrID0gdHlwZSBhcyBqZXN0Lk1vY2s7XG4gICAgcmV0dXJuIG1vY2subW9jay5jYWxsc1ttb2NrLm1vY2suaW5zdGFuY2VzLmluZGV4T2YoY29tbWFuZCldWzBdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbnN3ZXIgRHluYW1vREIgYnkgY29tbWFuZCB0eXBlIHJhdGhlciB0aGFuIGJ5IGNhbGwgb3JkZXI6IGByZXZhbGlkYXRlVGFnYFxuICAgKiB3cml0ZXMgaXRzIHRhZyBtYXJrZXIgYmVmb3JlIHF1ZXJ5aW5nIHRoZSB0YWcncyBtYXBwaW5nIHJvd3MsIGFuZCB3aGljaCBvZlxuICAgKiB0aG9zZSBjb21lcyBmaXJzdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIGBnZXRgIGlzIHRoZSBtYXJrZXIgcm93IGV2ZXJ5XG4gICAqIHJlcXVlc3RlZCB0YWcgaGFzLCBhcyBhIGBHZXRJdGVtYCB3b3VsZCBoYXZlIHJldHVybmVkIGl0LlxuICAgKi9cbiAgY29uc3QgZHluYW1vUmVzcG9uc2VzID0gKHJlc3BvbnNlczoge1xuICAgIHF1ZXJ5PzogdW5rbm93bjtcbiAgICBnZXQ/OiB7IEl0ZW0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICB9KSA9PiB7XG4gICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlcy5xdWVyeSA/PyB7fSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgeyBSZXF1ZXN0SXRlbXMgfSA9IGNvbW1hbmRJbnB1dChjb21tYW5kLCBCYXRjaEdldEl0ZW1Db21tYW5kKTtcbiAgICAgICAgY29uc3QgW1t0YWJsZSwgeyBLZXlzIH1dXSA9IE9iamVjdC5lbnRyaWVzKFJlcXVlc3RJdGVtcykgYXMgW1xuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICB7IEtleXM6IHsgc2s6IHVua25vd24gfVtdIH0sXG4gICAgICAgIF1bXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlcy5nZXQ/Lkl0ZW07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgIFJlc3BvbnNlczoge1xuICAgICAgICAgICAgW3RhYmxlXTogaXRlbSA/IEtleXMubWFwKCh7IHNrIH0pID0+ICh7IC4uLml0ZW0sIHNrIH0pKSA6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERyb3AgdGhlIHByb2Nlc3MncyB0YWcgbWFuaWZlc3QsIHNvIHRoZSBuZXh0IGhhbmRsZXIgc3RhcnRzIHdpdGggb25lIG9mXG4gICAqIGl0cyBvd24sIGFzIGEgbmV3IGluc3RhbmNlIGRvZXMuXG4gICAqL1xuICBjb25zdCByZXNldFRhZ01hbmlmZXN0ID0gKCkgPT4ge1xuICAgIGRlbGV0ZSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgICBTeW1ib2wuZm9yKFwiY2RrLW5leHRqcy51c2UtY2FjaGUudGFnLW1hbmlmZXN0XCIpXG4gICAgXTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrQ29udGV4dCA9IHsgZGV2OiBmYWxzZSB9IGFzIENhY2hlSGFuZGxlckNvbnRleHQ7XG4gICAgcmVzZXRUYWdNYW5pZmVzdCgpO1xuXG4gICAgLy8gU2V0IHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgPSBcInRlc3QtYnVja2V0XCI7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSA9IFwidGVzdC10YWJsZVwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcInRlc3QtYnVpbGQtaWRcIjtcbiAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gXCJ1cy1lYXN0LTFcIjtcblxuICAgIC8vIFN1cHByZXNzIGV4cGVjdGVkIHdhcm5pbmdzIGdsb2JhbGx5ICh0ZXN0cyBkZWxpYmVyYXRlbHkgdHJpZ2dlciB3YXJuaW5ncylcbiAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIGhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBtb2Nrc1xuICAgIG1vY2tTM1NlbmQubW9ja1Jlc2V0KCk7XG4gICAgLy8gQW4gZW1wdHkgYnVja2V0OiBubyBvYmplY3QsIHN1Y2ggYXMgbm8gYnVpbGQgdGFnIG1hbmlmZXN0LlxuICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNldCgpO1xuICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzZXQoKTtcbiAgICBtb2NrU3NtU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAvLyBDbGVhbiB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19CVUlMRF9JRDtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTjtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSUQ7XG4gICAgaWYgKGRpc3REaXIpIHtcbiAgICAgIHJtU3luYyhkaXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICBkaXN0RGlyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgY29uc29sZS53YXJuXG4gICAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJnZXRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBudWxsIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJXaXRob3V0QnVja2V0LmdldChcInRlc3Qta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0cmlldmUgYW5kIHBhcnNlIGNhY2hlIHZhbHVlIGZyb20gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChjYWNoZVZhbHVlKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEdldE9iamVjdENvbW1hbmQpKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiBudWxsIHdoZW4gUzMgb2JqZWN0IG5vdCBmb3VuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgIEJvZHk6IG51bGwsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJtaXNzaW5nLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgYSBzZWVkZWQgcHJlcmVuZGVyIG9ubHkgd2hlbiBpdHMgdGFnIG1hcmtlciBpcyBuZXdlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIGJ1aWxkLXRpbWUgcHJlcmVuZGVyIGlzIHdyaXR0ZW4gYXMgYSBmaWxlIGJ5IHRoZSBhZGFwdGVyJ3NcbiAgICAgIC8vIGBvbkJ1aWxkQ29tcGxldGVgLCBuZXZlciB0aHJvdWdoIGBzZXRgLCBzbyBpdCBoYXMgbm8gYHRhZ3NgIGFycmF5IGFuZCBub1xuICAgICAgLy8gRHluYW1vREIgbWFwcGluZyByb3dzIC0gaXRzIHRhZ3MgbGl2ZSBpbiB0aGUgcmVuZGVyJ3NcbiAgICAgIC8vIGB4LW5leHQtY2FjaGUtdGFnc2AgaGVhZGVyLiBUd28gYnVncyBtZXQgaGVyZTogdGhvc2UgaGVhZGVyIHRhZ3Mgd2VyZVxuICAgICAgLy8gaWdub3JlZCwgc28gYHJldmFsaWRhdGVUYWdgIGNvdWxkIG5vdCByZWFjaCBhbnkgc3RhdGljIHBhZ2U7IGFuZCB0aGVcbiAgICAgIC8vIG1hcHBpbmcgcm93cyBgc2V0YCB3cml0ZXMgd2VyZSBzdGFtcGVkIGByZXZhbGlkYXRlZEF0ID0gbm93YCwgd2hpY2ggaXNcbiAgICAgIC8vICphZnRlciogdGhlIGVudHJ5J3Mgb3duIGBsYXN0TW9kaWZpZWRgLCBzbyBhIHRhZ2dlZCBlbnRyeSBsb29rZWRcbiAgICAgIC8vIHJldmFsaWRhdGVkIHRoZSBtb21lbnQgaXQgd2FzIHN0b3JlZCBhbmQgZXZlcnkgcmVxdWVzdCByZS1yZW5kZXJlZC5cbiAgICAgIC8vIE1lYXN1cmVkIGFnYWluc3QgbmV4dC5qcydzIGB0ZXN0L2UyZS9hcHAtZGlyL3Jlc3VtZS1kYXRhLWNhY2hlYC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzZWVkZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5zZWVkZWQ8L2h0bWw+XCIsXG4gICAgICAgICAgaGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwiX05fVF8vLF9OX1RfL3BhZ2UsdGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgczNCb2R5ID0gKCkgPT4gKHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHNlZWRlZCkpLFxuICAgICAgICB9LFxuICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmQgPyBzM0JvZHkoKSA6IHt9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBnZXRDdHggPSB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgICAvLyBFYWNoIHN0ZXAgYmVsb3cgY2hhbmdlcyB0aGUgbWFya2VycyBEeW5hbW9EQiBob2xkczsgYSBuZXcgaW5zdGFuY2VcbiAgICAgIC8vIHJlYWRzIHRoZW0gYWZyZXNoLlxuICAgICAgY29uc3QgZnJlc2hIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXNldFRhZ01hbmlmZXN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIE5vIG1hcmtlciBhdCBhbGw6IHRoZSB0YWcgd2FzIG5ldmVyIHJldmFsaWRhdGVkLlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHt9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEEgbWFya2VyIG9sZGVyIHRoYW4gdGhlIGVudHJ5IG1lYW5zIHRoZSBlbnRyeSBhbHJlYWR5IHJlZmxlY3RzIGl0LlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkIC0gMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcblxuICAgICAgLy8gQSBuZXdlciBtYXJrZXI6IHRoZSBlbnRyeSBjb21lcyBiYWNrIG1hcmtlZCBleHBpcmVkLCBhbmQgc3RheXMgaW4gUzMuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGF3YWl0IGZyZXNoSGFuZGxlcigpLmdldChcImluZGV4XCIsIGdldEN0eCkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB2YWx1ZTogc2VlZGVkLnZhbHVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVwb3J0cyBhIHJldmFsaWRhdGVkIHJlc3BvbnNlIGVudHJ5IGFzIGV4cGlyZWQgcmF0aGVyIHRoYW4gYXMgYSBtaXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBsYXN0TW9kaWZpZWQ6IC0xYCBpcyBob3cgYSBjYWNoZSBoYW5kbGVyIHNheXMgXCJleHBpcmVkLCByZS1yZW5kZXJcbiAgICAgIC8vIGJlZm9yZSBhbnN3ZXJpbmdcIjogYEluY3JlbWVudGFsQ2FjaGUuZ2V0YCB0dXJucyBpdCBpbnRvIGBpc1N0YWxlOiAtMWAsXG4gICAgICAvLyB3aGljaCBgYXBwLXBhZ2UtcnVudGltZWAgcmVhZHMgYXMgYW4gb24tZGVtYW5kIHJldmFsaWRhdGlvbiBhbmQgYW5zd2Vyc1xuICAgICAgLy8gd2l0aCBhIGJsb2NraW5nIHJlbmRlciBvZiB0aGlzIHJvdXRlLCB0aGVuIHN0b3JlcyBpdC4gUmV0dXJuaW5nIGBudWxsYFxuICAgICAgLy8gaXMgbm90IGVxdWl2YWxlbnQuIEEgbWlzcyBvbiBhIFBQUiByb3V0ZSB3aG9zZSBgcHJlcmVuZGVyLW1hbmlmZXN0Lmpzb25gXG4gICAgICAvLyBlbnRyeSBoYXMgYSBgZmFsbGJhY2tgIChgY29tcHV0ZTogXCJyZXN1bWluZ1wiYCkgaXMgYW5zd2VyZWQgZnJvbSB0aGVcbiAgICAgIC8vIHJvdXRlJ3MgZmFsbGJhY2sgc2hlbGwgLSBgY2FjaGUtY29udHJvbDogcHJpdmF0ZSwgbm8tc3RvcmVgLCBub1xuICAgICAgLy8gYHgtbmV4dGpzLWNhY2hlYCAtIGFuZCB3aXRob3V0IGBwYXJ0aWFsUHJlZmV0Y2hpbmdgIG5vdGhpbmcgZXZlclxuICAgICAgLy8gdXBncmFkZXMgdGhhdCBiYWNrIGludG8gYSBjb25jcmV0ZSBlbnRyeS4gU28gdGhlIGZpcnN0IGByZXZhbGlkYXRlVGFnYFxuICAgICAgLy8gdG8gcmVhY2ggYSBwYWdlIGxlZnQgaXQgdW5jYWNoZWFibGUgYW5kIGR5bmFtaWNhbGx5IHJlc3VtZWQgcGVyIHJlcXVlc3RcbiAgICAgIC8vIGZvciB0aGUgcmVzdCBvZiB0aGUgZGVwbG95bWVudCdzIGxpZmUsIHdoaWNoIGlzIHdoYXQgdGhlIGlzciBlMmUnc1xuICAgICAgLy8gbWlzc2luZyBgeC1uZXh0anMtY2FjaGVgIGhlYWRlciB3YXMuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIl0sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPGh0bWw+aXNyPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcImNvbGxlY3Rpb25cIiB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImlzci8xXCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBsYXN0TW9kaWZpZWQ6IC0xLCB2YWx1ZTogc3RvcmVkLnZhbHVlIH0pO1xuICAgICAgLy8gVGhlIGJvZHkgaXMgc3RpbGwgdGhlcmUgZm9yIHRoZSByZW5kZXIgdGhhdCBmYWlscywgYW5kIGBzZXRgIG92ZXJ3cml0ZXNcbiAgICAgIC8vIGl0IHdpdGggYSBgbGFzdE1vZGlmaWVkYCBwYXN0IHRoZSBtYXJrZXIuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVwb3J0cyBhIHJldmFsaWRhdGVkIGZldGNoIGVudHJ5IGFzIGEgbWlzcyBzbyB0aGUgcmVxdWVzdCByZWZldGNoZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIG9wcG9zaXRlIG9mIGEgcmVzcG9uc2UgZW50cnk6IHJldXNpbmcgYSByZXZhbGlkYXRlZCBgZmV0Y2hgIGJvZHkgaXNcbiAgICAgIC8vIHNlcnZpbmcgc3RhbGUgZGF0YSwgc28gdGhpcyByZWFkcyBhcyBhIG1pc3MsIGxpa2UgTmV4dC5qcydzIG93blxuICAgICAgLy8gYEZpbGVTeXN0ZW1DYWNoZWAgZG9lcyBmb3IgaXRzIGByZXZhbGlkYXRlZFRhZ3NgLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5GRVRDSCxcbiAgICAgICAgICBkYXRhOiB7IGhlYWRlcnM6IHt9LCBib2R5OiBcInN0YWxlXCIsIHN0YXR1czogMjAwLCB1cmw6IFwiL2FwaVwiIH0sXG4gICAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZmV0Y2gta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuRkVUQ0gsXG4gICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICBmZXRjaFVybDogXCJodHRwczovL2V4YW1wbGUudGVzdC9hcGlcIixcbiAgICAgICAgZmV0Y2hJZHg6IDEsXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIl0sXG4gICAgICAgIHNvZnRUYWdzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgLy8gTm90IGRlbGV0ZWQ6IHRoZSByZWZldGNoIHRoaXMgcHJvdm9rZXMgb3ZlcndyaXRlcyBpdCB0aHJvdWdoIGBzZXRgLlxuICAgICAgLy8gRGVsZXRpbmcgaXQgaGVyZSByYWNlZCB0aGF0IHdyaXRlLCBzbyBhIGNvbmN1cnJlbnQgcmVxdWVzdCdzIGZyZXNoXG4gICAgICAvLyBlbnRyeSBjb3VsZCBiZSB0aGUgb25lIHJlbW92ZWQuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIGEgZmV0Y2ggZW50cnkgYWdhaW5zdCB0aGUgcmVxdWVzdCdzIGltcGxpY2l0IHRhZ3MsIG5vdCBpdHMgb3duXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEFuIHVudGFnZ2VkIGBjYWNoZTogXCJmb3JjZS1jYWNoZVwiYCBmZXRjaCBpcyBzdG9yZWQgd2l0aCBubyB0YWdzIGF0IGFsbCAtXG4gICAgICAvLyB0aGUgaW1wbGljaXQgYF9OX1RfLzxwYXRoPmAgY2hhaW4gcmVhY2hlcyB0aGUgaGFuZGxlciBvbmx5IGFzXG4gICAgICAvLyBgY3R4LnNvZnRUYWdzYCwgd2hpY2ggaXMgdGhlIHNvdXJjZSBOZXh0LmpzJ3Mgb3duIGBGaWxlU3lzdGVtQ2FjaGVgIHJlYWRzXG4gICAgICAvLyBmb3IgYSBgRkVUQ0hgIGdldC4gQ2hlY2tpbmcgdGhlIHN0b3JlZCB0YWdzIGluc3RlYWQgbGVmdCB0aGlzIGVudHJ5IHdpdGhcbiAgICAgIC8vIG5vdGhpbmcgdG8gY2hlY2sgYW5kIG5vIGByZXZhbGlkYXRlUGF0aGAgY291bGQgZXZlciBldmljdCBpdC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdGFnczogW10sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkZFVENILFxuICAgICAgICAgIGRhdGE6IHsgaGVhZGVyczoge30sIGJvZHk6IFwic3RhbGVcIiwgc3RhdHVzOiAyMDAsIHVybDogXCIvYXBpXCIgfSxcbiAgICAgICAgICByZXZhbGlkYXRlOiAxMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJmZXRjaC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5GRVRDSCxcbiAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIGZldGNoVXJsOiBcImh0dHBzOi8vbmV4dC1kYXRhLWFwaS1lbmRwb2ludC50ZXN0L2FwaS9yYW5kb21cIixcbiAgICAgICAgZmV0Y2hJZHg6IDEsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICBzb2Z0VGFnczogW1wiX05fVF8vbGF5b3V0XCIsIFwiX05fVF8vZHluYW1pY1wiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgY29uc3QgW3sgUmVxdWVzdEl0ZW1zIH1dID0gKEJhdGNoR2V0SXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spXG4gICAgICAgIC5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBSZXF1ZXN0SXRlbXNbXCJ0ZXN0LXRhYmxlXCJdLktleXMubWFwKFxuICAgICAgICAgIChrZXk6IHsgc2s6IHsgUzogc3RyaW5nIH0gfSkgPT4ga2V5LnNrLlMsXG4gICAgICAgICksXG4gICAgICApLnRvRXF1YWwoW1wiX05fVF8vbGF5b3V0XCIsIFwiX05fVF8vZHluYW1pY1wiXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcImEgdGFnIHJldmFsaWRhdGVkIHdpdGggYSBwcm9maWxlXCIsICgpID0+IHtcbiAgICAgIC8vIGByZXZhbGlkYXRlVGFnKFwicG9zdHNcIiwgXCJtYXhcIilgIGlzIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU6IHRoZSBlbnRyeSBpc1xuICAgICAgLy8gc2VydmVkIG9uY2UgbW9yZSB3aGlsZSBhIGJhY2tncm91bmQgcmVuZGVyIHJlcGxhY2VzIGl0LCBhbmQgZXhwaXJlc1xuICAgICAgLy8gb3V0cmlnaHQgb25seSBhZnRlciB0aGUgcHJvZmlsZSdzIGBleHBpcmVgLiBUcmVhdGluZyBpdCBhcyBgdXBkYXRlVGFnYFxuICAgICAgLy8gbWFkZSBldmVyeSBzdWNoIGNhbGwgYSBibG9ja2luZyByZS1yZW5kZXIuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpIC0gMTAwMDtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgICBodG1sOiBcIjxodG1sPnBvc3RzPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInBvc3RzXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRDdHggPSB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKFxuICAgICAgICBcIi9kZXBsb3ltZW50L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiLFxuICAgICAgICBcInRhZ3MtbWFuaWZlc3QuZXh0ZXJuYWwuanNcIixcbiAgICAgICk7XG4gICAgICAvLyBUaGUgbW9kdWxlIHRoZSBzZXJ2ZXIgbG9hZHMsIHJlc29sdmVkIGZvciByZWFsLCBzbyBhIE5leHQuanMgdXBncmFkZVxuICAgICAgLy8gdGhhdCBtb3ZlcyBvciByZXNoYXBlcyBpdCBmYWlscyBoZXJlIHJhdGhlciB0aGFuIHNpbGVudGx5IHR1cm5pbmdcbiAgICAgIC8vIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgaW50byBibG9ja2luZyByZW5kZXJzLlxuICAgICAgY29uc3QgcmVhbE1hbmlmZXN0UGF0aCA9XG4gICAgICAgIHJlcXVpcmUucmVzb2x2ZShcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlL3RhZ3MtbWFuaWZlc3QuZXh0ZXJuYWwuanNcIik7XG5cbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIG1vY2tNb2R1bGVDYWNoZVttYW5pZmVzdFBhdGhdO1xuICAgICAgICBkZWxldGUgbW9ja01vZHVsZUNhY2hlW3JlYWxNYW5pZmVzdFBhdGhdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwic2VydmVzIHRoZSBlbnRyeSBhbmQgbWFya3MgdGhlIHRhZyBzdGFsZSBpbiBOZXh0LmpzJ3MgbWFuaWZlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5yZXF1aXJlQWN0dWFsKHJlYWxNYW5pZmVzdFBhdGgpO1xuICAgICAgICBtb2NrTW9kdWxlQ2FjaGVbcmVhbE1hbmlmZXN0UGF0aF0gPSB7IGV4cG9ydHM6IG5leHQgfTtcbiAgICAgICAgY29uc3Qgc3RhbGVBdCA9IGxhc3RNb2RpZmllZCArIDUwMDtcbiAgICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgICBnZXQ6IHtcbiAgICAgICAgICAgIEl0ZW06IHtcbiAgICAgICAgICAgICAgc3RhbGVBdDogeyBOOiBTdHJpbmcoc3RhbGVBdCkgfSxcbiAgICAgICAgICAgICAgZXhwaXJlZEF0OiB7IE46IFN0cmluZyhEYXRlLm5vdygpICsgNjBfMDAwKSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b0VxdWFsKHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgICAgdmFsdWU6IHN0b3JlZC52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFdoZXJlIGBJbmNyZW1lbnRhbENhY2hlLmdldGAgcmVhZHMgaXQsIHRvIGFuc3dlciBgaXNTdGFsZTogdHJ1ZWAuXG4gICAgICAgIGV4cGVjdChuZXh0LnRhZ3NNYW5pZmVzdC5nZXQoXCJwb3N0c1wiKSkudG9FcXVhbCh7IHN0YWxlOiBzdGFsZUF0IH0pO1xuICAgICAgICBleHBlY3QobmV4dC5hcmVUYWdzU3RhbGUoW1wicG9zdHNcIl0sIGxhc3RNb2RpZmllZCkpLnRvQmUodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJleHBpcmVzIHRoZSBlbnRyeSB3aGVuIE5leHQuanMncyBtYW5pZmVzdCBjYW5ub3QgYmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBBIHN0YWxlIG1hcmsgbm90aGluZyByZWFkcyB3b3VsZCBzZXJ2ZSB0aGUgZW50cnkgYXMgZnJlc2g7IGEgYmxvY2tpbmdcbiAgICAgICAgLy8gcmVuZGVyIGlzIHRoZSBzYWZlIHNpZGUgb2YgdGhhdC5cbiAgICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgICBnZXQ6IHsgSXRlbTogeyBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0gfSB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcImV4cGlyZXMgdGhlIGVudHJ5IG9uY2UgdGhlIHByb2ZpbGUncyBleHBpcmUgaGFzIHBhc3NlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBJdGVtOiB7XG4gICAgICAgICAgICAgIHN0YWxlQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMCkgfSxcbiAgICAgICAgICAgICAgZXhwaXJlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICAgIGxhc3RNb2RpZmllZDogLTEsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKFwiYmVoaW5kIGEgZGlzdHJpYnV0aW9uXCIsICgpID0+IHtcbiAgICAgICAgLy8gYHJldmFsaWRhdGVUYWdgJ3MgaW52YWxpZGF0aW9uIGdvZXMgb3V0IGJlZm9yZSB0aGUgc3RhbGUgZW50cnkgaXNcbiAgICAgICAgLy8gc2VydmVkLCBhbmQgdGhlIHN0YWxlIHJlc3BvbnNlIGNhcnJpZXMgdGhlIGVudHJ5J3Mgb3JpZ2luYWxcbiAgICAgICAgLy8gYHMtbWF4YWdlYDogQ2xvdWRGcm9udCBjYWNoZXMgaXQgYWdhaW4uIE9ubHkgdGhlIHJlZ2VuZXJhdGlvbidzIGBzZXRgXG4gICAgICAgIC8vIGtub3dzIHdoZW4gdGhlIGZyZXNoIGVudHJ5IGV4aXN0cyB0byBiZSBmZXRjaGVkIGluc3RlYWQuXG4gICAgICAgIGxldCBjZG5IYW5kbGVyOiBTM0NhY2hlSGFuZGxlcjtcbiAgICAgICAgY29uc3QgcmVnZW5lcmF0ZWQgPSBzdG9yZWQudmFsdWUgYXMgdW5rbm93biBhcyBJbmNyZW1lbnRhbENhY2hlVmFsdWU7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGVkUGF0aHMgPSAoKTogc3RyaW5nW11bXSA9PlxuICAgICAgICAgIChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLm1hcChcbiAgICAgICAgICAgIChbaW5wdXRdKSA9PiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcyxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgICAgIGNkbkhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgICAgICBtb2NrTW9kdWxlQ2FjaGVbbWFuaWZlc3RQYXRoXSA9IHtcbiAgICAgICAgICAgIGV4cG9ydHM6IHsgdGFnc01hbmlmZXN0OiBuZXcgTWFwKCkgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgICBnZXQ6IHsgSXRlbTogeyBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0gfSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGFnZSBhZ2FpbiBvbmNlIGl0cyByZWdlbmVyYXRpb24gaXMgc3RvcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG5cbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogZmFsc2UsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtbXCIvcG9zdHMqXCJdXSk7XG5cbiAgICAgICAgICAvLyBPbmNlOiBhIGxhdGVyIHdyaXRlIG9mIHRoZSBzYW1lIHBhZ2UgaXMgYW4gb3JkaW5hcnkgb25lLlxuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiBmYWxzZSwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwicmVtZW1iZXJzIGEgc3RhbGUgbWVtb3J5IGhpdCBieSB0aGUga2V5IGl0IHdhcyByZWFkIHVuZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmlzUmV2YWxpZGF0ZWQoc3RvcmVkLCBnZXRDdHgsIFwicG9zdHNcIik7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbW1wiL3Bvc3RzKlwiXV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImRvZXMgbm90IGludmFsaWRhdGUgYWZ0ZXIgYW4gb3JkaW5hcnkgd3JpdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW10pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImZvcmdldHMgYSBzdGFsZSBwYWdlIHRoYXQgaXMgZGVsZXRlZCBpbnN0ZWFkIG9mIHJlZ2VuZXJhdGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCBudWxsLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgUzMgZXJyb3JzIGFuZCByZXR1cm4gbnVsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTMyBFcnJvclwiKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZXJyb3Ita2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInRhZyBtYXJrZXIgY2FjaGVcIiwgKCkgPT4ge1xuICAgIC8vIEV2ZXJ5IGNhY2hlIGhpdCBjaGVja3MgaXRzIHRhZ3MnIG1hcmtlcnMsIGFuZCBhbGwgb2YgYSBkZXBsb3ltZW50J3NcbiAgICAvLyBtYXJrZXJzIHNoYXJlIG9uZSBwYXJ0aXRpb24ga2V5OiByZWFkIHBlciByZXF1ZXN0LCB0aGV5IGNhcHBlZCBhIHJvdXRlJ3NcbiAgICAvLyBjYWNoZSBoaXRzIGF0IH4xLDkwMCByZXEvcy4gRWFjaCBpbnN0YW5jZSBob2xkcyB0aGVtIGZvciBhIHNlY29uZC5cbiAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpIC0gNjBfMDAwO1xuICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5jYWNoZWQ8L2h0bWw+XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcIl9OX1RfL3BhZ2UscG9zdHNcIiB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGdldEN0eCA9IHtcbiAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgfSBhcyBjb25zdDtcbiAgICBjb25zdCBtYXJrZXJSZWFkcyA9ICgpID0+XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgKFtjb21tYW5kXSkgPT4gY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gICAgICApLmxlbmd0aDtcbiAgICAvLyBXaGF0IGBnZXRgIGFuc3dlcnMgZm9yIGEgcmV2YWxpZGF0ZWQgcGFnZTogZXhwaXJlZCwgbm90IGEgbWlzcy5cbiAgICBjb25zdCBleHBpcmVkID0geyBsYXN0TW9kaWZpZWQ6IC0xIH07XG4gICAgY29uc3QgcmV2YWxpZGF0ZWRBZnRlclN0b3JlID0ge1xuICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7fSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFuc3dlcnMgY2hlY2tzIHdpdGhpbiB0aGUgVFRMIGZyb20gdGhlIG1hcmtlcnMgaXQgYWxyZWFkeSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpO1xuICAgICAgYXdhaXQgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCk7XG5cbiAgICAgIGV4cGVjdChtYXJrZXJSZWFkcygpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaGFyZXMgb25lIHJlYWQgYmV0d2VlbiBjb25jdXJyZW50IGNoZWNrc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpLFxuICAgICAgICBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSxcbiAgICAgICAgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCksXG4gICAgICBdKTtcblxuICAgICAgZXhwZWN0KG1hcmtlclJlYWRzKCkpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNlZXMgaXRzIG93biByZXZhbGlkYXRlVGFnIGF0IG9uY2UsIGFuZCBsb2dzIGl0IGZvciB0aGUgb3RoZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7IGxhc3RNb2RpZmllZCB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHJldmFsaWRhdGVkQWZ0ZXJTdG9yZSk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KGV4cGlyZWQpO1xuICAgICAgY29uc3QgcHV0cyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PiBjb21tYW5kIGluc3RhbmNlb2YgUHV0SXRlbUNvbW1hbmQsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHB1dHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChjb21tYW5kSW5wdXQocHV0c1swXVswXSwgUHV0SXRlbUNvbW1hbmQpLkl0ZW0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBwazogeyBTOiBcInRlc3QtYnVpbGQtaWQjbG9nXCIgfSxcbiAgICAgICAgc2s6IHsgUzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eXFxkezE1fSNwb3N0cyQvKSB9LFxuICAgICAgICByZXZhbGlkYXRlZEF0OiB7IE46IGV4cGVjdC5hbnkoU3RyaW5nKSB9LFxuICAgICAgICB0dGw6IHsgTjogZXhwZWN0LmFueShTdHJpbmcpIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwid3JpdGVzIGVhY2ggdGFnIG9uY2Ugd2hlbiB0aGUgJ3VzZSBjYWNoZScgaGFuZGxlcnMgZ2V0IHRoZSBzYW1lIGNhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTmV4dC5qcyBjYWxscyBgcmV2YWxpZGF0ZVRhZ2AgaGVyZSBhbmQgYHVwZGF0ZVRhZ3NgIG9uIGV2ZXJ5XG4gICAgICAvLyBgY2FjaGVIYW5kbGVyc2AgZW50cnksIGFuZCBhbGwgb2YgdGhlbSBzaGFyZSBvbmUgbWFuaWZlc3QuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhbXCJwb3N0c1wiXSksXG4gICAgICAgIHNoYXJlZFRhZ01hbmlmZXN0KCkudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpLFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlcyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PlxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBVcGRhdGVJdGVtQ29tbWFuZCB8fFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBQdXRJdGVtQ29tbWFuZCxcbiAgICAgICk7XG4gICAgICBleHBlY3Qod3JpdGVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwic2V0XCIsICgpID0+IHtcbiAgICAvLyBNYXBwaW5nIHJvd3MgZXhpc3Qgb25seSB0byBuYW1lIENsb3VkRnJvbnQgcGF0aHMsIHNvIG9ubHkgYSBkZXBsb3ltZW50XG4gICAgLy8gd2l0aCBhIGRpc3RyaWJ1dGlvbiBrZWVwcyB0aGVtLlxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBoYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcImtlZXBzIG5vIG1hcHBpbmcgcm93cyB3aXRob3V0IGEgZGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIFJlZ2lvbmFsIGNvbnN0cnVjdHMgaGF2ZSBubyBDbG91ZEZyb250LiBBIHJvdyBwZXIgdGFnIHBlciBgc2V0YCxcbiAgICAgIC8vIGFuZCB0aGUgUzMgcmVhZCBiZWZvcmUgYSBkZWxldGUgdG8gbmFtZSB0aGVtLCBib3VnaHQgbm90aGluZyB0aGVyZS5cbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FO1xuICAgICAgY29uc3QgcmVnaW9uYWwgPSBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCByZWdpb25hbC5zZXQoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8cC8+XCIsXG4gICAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInRhZ1wiIH0sXG4gICAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuICAgICAgYXdhaXQgcmVnaW9uYWwuc2V0KFwiL2lzci8xXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShHZXRPYmplY3RDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdG9yZSBjYWNoZSB2YWx1ZSBpbiBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+c2V0IHRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwic2V0LWtleVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXCJ0YWcxXCJdKSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KFB1dE9iamVjdENvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoVXBkYXRlSXRlbUNvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBzdG9yZSB3aGVuIFMzIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcblxuICAgICAgY29uc3QgaGFuZGxlcldpdGhvdXRCdWNrZXQgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+bm8gYnVja2V0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhvdXRCdWNrZXQuc2V0KFxuICAgICAgICBcIm5vLWJ1Y2tldC1rZXlcIixcbiAgICAgICAgdGVzdERhdGEsXG4gICAgICAgIGNyZWF0ZVNldENvbnRleHQoW10pLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcIm1hcHMgdGhlIHRhZ3MgYSBwYWdlIGNhcnJpZXMgb25seSBpbiBpdHMgeC1uZXh0LWNhY2hlLXRhZ3MgaGVhZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBSZXNwb25zZUNhY2hlLnNldGAgYnVpbGRzIGEgcGFnZSdzIGBjdHhgIHdpdGhvdXQgdGFncywgc28gdGhlIHJlbmRlcidzXG4gICAgICAvLyBoZWFkZXIgaXMgdGhlIG9ubHkgcGxhY2UgdGhleSBleGlzdC4gTm8gbWFwcGluZyByb3cgbWVhbnQgYHJldmFsaWRhdGVUYWdgXG4gICAgICAvLyBmb3VuZCBub3RoaW5nIHRvIGludmFsaWRhdGUgYW5kIENsb3VkRnJvbnQga2VwdCB0aGUgc3RhbGUgSFRNTC5cbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD50YWdnZWQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwiaGVhZGVyLXRhZyxvdGhlci10YWdcIiB9LFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvaXNyLzFcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKTtcblxuICAgICAgY29uc3QgbWFwcGluZ0tleXMgPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgICBleHBlY3QobWFwcGluZ0tleXMpLnRvRXF1YWwoW1xuICAgICAgICBcImhlYWRlci10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICAgIFwib3RoZXItdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInByZWZlcnMgdGhlIGNvbnRleHQncyB0YWdzIG92ZXIgdGhlIGhlYWRlciB3aGVuIGJvdGggYXJlIHByZXNlbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJoZWFkZXItdGFnXCIgfSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtcImN0eC10YWdcIl0pKTtcblxuICAgICAgY29uc3QgbWFwcGluZ0tleXMgPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgICBleHBlY3QobWFwcGluZ0tleXMpLnRvRXF1YWwoW1wiY3R4LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJoYXNoZXMgYSBtYXBwaW5nIHJvdydzIHNvcnQga2V5IHBhc3QgRHluYW1vREIncyAxMDI0IGJ5dGVzLCBrZWVwaW5nIHRoZSBrZXkgaW4gczNLZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhZyA9IFwidFwiLnJlcGVhdCgyNTYpO1xuICAgICAgY29uc3QgY2FjaGVLZXkgPSBgL3JvdXRlLWNhY2hlL0FQUF9QQUdFLyR7XCJhXCIucmVwZWF0KDY0KX0vJC8ke1wicFwiLnJlcGVhdCg3MDApfWA7XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChjYWNoZUtleSwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW3RhZ10pKTtcblxuICAgICAgY29uc3QgW2lucHV0XSA9IChVcGRhdGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnB1dC5LZXkuc2suUykudG9NYXRjaChcbiAgICAgICAgbmV3IFJlZ0V4cChgXiR7dGFnfSN0ZXN0LWJ1aWxkLWlkLyNbMC05YS1mXXs2NH0kYCksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6czNLZXlcIl0uUykudG9CZShcbiAgICAgICAgYHRlc3QtYnVpbGQtaWQke2NhY2hlS2V5fS5qc29uYCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImhhc2hlcyB0aGUgdGFnIGludG8gYSBtYXBwaW5nIHJvdydzIHByZWZpeCB3aGVuIGV2ZW4gYSBoYXNoZWQgcm93IHdvdWxkIHBhc3MgMTAyNCBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBbiBpbXBsaWNpdCB0YWcgaXMgYXMgbG9uZyBhcyBpdHMgcGF0aC5cbiAgICAgIGNvbnN0IHRhZyA9IGBfTl9UXy8ke1wicFwiLnJlcGVhdCgxMDAwKX1gO1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbdGFnXSkpO1xuXG4gICAgICBjb25zdCBbaW5wdXRdID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgY29uc3Qgc2s6IHN0cmluZyA9IGlucHV0LktleS5zay5TO1xuICAgICAgZXhwZWN0KHNrKS50b01hdGNoKC9eI1swLTlhLWZdezY0fSN0ZXN0LWJ1aWxkLWlkXFwvaXNyXFwvMVxcLmpzb24kLyk7XG4gICAgICBleHBlY3QoQnVmZmVyLmJ5dGVMZW5ndGgoc2spKS50b0JlTGVzc1RoYW5PckVxdWFsKDEwMjQpO1xuXG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZ2AgcXVlcmllcyB0aGUgc2FtZSBwcmVmaXguXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyh0YWcpO1xuICAgICAgY29uc3QgcXVlcmllZCA9IChRdWVyeUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKFxuICAgICAgICAoW3F1ZXJ5XSkgPT4gcXVlcnkuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1tcIjpza1ByZWZpeFwiXT8uUyxcbiAgICAgICk7XG4gICAgICBleHBlY3QocXVlcmllZCkudG9Db250YWluKHNrLnNsaWNlKDAsIDY2KSk7XG4gICAgfSk7XG5cbiAgICBpdChcInN0b3JlcyBhbiBlbnRyeSB3aG9zZSBTMyBrZXkgd291bGQgcGFzcyAxMDI0IGJ5dGVzIHVuZGVyIGEgaGFzaGVkIG9iamVjdCBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPmxvbmc8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAvcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kLyR7XCJwXCIucmVwZWF0KDk1MCl9YDtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChjYWNoZUtleSwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW1widFwiXSkpO1xuXG4gICAgICBjb25zdCBbcHV0XSA9IChQdXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KHB1dC5LZXkpLnRvTWF0Y2goL150ZXN0LWJ1aWxkLWlkXFwvX2xvbmcta2V5XFwvWzAtOWEtZl17NjR9XFwubG9uZyQvKTtcbiAgICAgIC8vIFRoZSBtYXBwaW5nIGtlZXBzIHRoZSBuYW1lIGEgQ2xvdWRGcm9udCBwYXRoIGlzIHJlY292ZXJlZCBmcm9tLlxuICAgICAgY29uc3QgW21hcHBpbmddID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrXG4gICAgICAgIC5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChtYXBwaW5nLkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6czNLZXlcIl0uUykudG9CZShcbiAgICAgICAgYHRlc3QtYnVpbGQtaWQke2NhY2hlS2V5fS5qc29uYCxcbiAgICAgICk7XG5cbiAgICAgIChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrQ2xlYXIoKTtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KGNhY2hlS2V5LCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgW2dldF0gPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChnZXQuS2V5KS50b0JlKHB1dC5LZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZW1vdmVzIGEgZGVsZXRlZCBwYWdlJ3MgbWFwcGluZyByb3dzLCByZWFkaW5nIGl0cyB0YWdzIGZyb20gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSByZXNwb25zZSBkZWxldGUgLSBhIGNhY2hlZCByb3V0ZSB0aGF0IHN0YXJ0cyBhbnN3ZXJpbmcgYG5vdEZvdW5kKClgIC1cbiAgICAgIC8vIGFycml2ZXMgYXMgYHNldChrZXksIG51bGwsIHsgY2FjaGVDb250cm9sLCAuLi4gfSlgIHdpdGggbm8gdGFncyBhdCBhbGwsXG4gICAgICAvLyBzbyB0aGUgZW50cnkgaXRzZWxmIGlzIHRoZSBvbmx5IHBsYWNlIGl0cyBtYXBwaW5nIHJvd3MgY2FuIGJlIG5hbWVkXG4gICAgICAvLyBmcm9tLiBMZWZ0IGJlaGluZCwgdGhleSByZXNvbHZlIG9uIHRoZSBuZXh0IGByZXZhbGlkYXRlVGFnYCB0byBhIGNhY2hlXG4gICAgICAvLyBrZXkgd2hvc2Ugb2JqZWN0IGlzIGdvbmUgYW5kIHNwZW5kIGEgQ2xvdWRGcm9udCB3aWxkY2FyZCBwYXRoIG9uIGl0LlxuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIiwgXCJfTl9UXy9pc3IvMVwiXSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5nb25lPC9odG1sPlwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIG51bGwsIHtcbiAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IDYwLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpKTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRLZXlzID0gKERlbGV0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0LktleS5zay5TKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgLy8gTWFwcGluZyByb3dzIG9ubHkuIFRoZSBiYXJlLXRhZyBtYXJrZXIgcm93IGJlbG9uZ3MgdG8gdGhlIHRhZywgYW5kXG4gICAgICAvLyBgY2hlY2tJZlJldmFsaWRhdGVkYCByZWFkcyBpdCBmb3IgZXZlcnkgb3RoZXIgZW50cnkgY2FycnlpbmcgaXQuXG4gICAgICBleHBlY3QoZGVsZXRlZEtleXMpLnRvRXF1YWwoW1xuICAgICAgICBcIl9OX1RfL2lzci8xI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgICBcImNvbGxlY3Rpb24jdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZGVsZXRlcyBhIGZldGNoIGVudHJ5J3MgbWFwcGluZyByb3dzIGZyb20gdGhlIGNvbnRleHQncyB0YWdzIGFsb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBjdHhgIGNhcnJpZXMgdGhlbSBoZXJlLCBzbyB0aGUgcHJlLWRlbGV0ZSByZWFkIGlzIHNraXBwZWQ6IG9ubHkgdGhlXG4gICAgICAvLyBEZWxldGVPYmplY3QgcmVhY2hlcyBTMy5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcImZldGNoLWtleVwiLCBudWxsLCBjcmVhdGVTZXRDb250ZXh0KFtcImN0eC10YWdcIl0pKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEdldE9iamVjdENvbW1hbmQpKTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRLZXlzID0gKFxuICAgICAgICBEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpO1xuICAgICAgZXhwZWN0KGRlbGV0ZWRLZXlzKS50b0VxdWFsKFtcImN0eC10YWcjdGVzdC1idWlsZC1pZC9mZXRjaC1rZXkuanNvblwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImRlbGV0ZXMgbm8gbWFwcGluZyByb3dzIGZvciBhbiB1bnRhZ2dlZCBlbnRyeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSwgaHRtbDogXCI8cC8+XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvdW50YWdnZWRcIiwgbnVsbCwgeyBpc0ZhbGxiYWNrOiBmYWxzZSB9KTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KERlbGV0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdGlsbCBkZWxldGVzIHRoZSBvYmplY3Qgd2hlbiBpdHMgdGFncyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlMzIEdldCBFcnJvclwiKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICApO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSksXG4gICAgICApLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBTMyBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+ZXJyb3IgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlMzIFB1dCBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlci5zZXQoXCJlcnJvci1rZXlcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXZhbGlkYXRlVGFnXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZWNvcmQgdGhlIHJldmFsaWRhdGlvbiB3aXRob3V0IGRlbGV0aW5nIHRoZSB0YWcncyBTMyBlbnRyaWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyNjYWNoZS1rZXktMVwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjY2FjaGUta2V5LTJcIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIC8vIE5vIGRpc3RyaWJ1dGlvbiwgc28gbm8gbWFwcGluZyByb3dzIHRvIHJlYWQ6IHRoZSBtYXJrZXIgaXMgYWxsIG9mIGl0LlxuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShRdWVyeUNvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoVXBkYXRlSXRlbUNvbW1hbmQpLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSBtYXJrZXIgcm93IGlzIHRoZSBpbnZhbGlkYXRpb247IGBnZXRgIHJlYWRzIGl0IGFuZCBoYW5kcyB0aGUgZW50cnlcbiAgICAgIC8vIGJhY2sgZXhwaXJlZCBzbyBOZXh0LmpzIHJlLXJlbmRlcnMgdGhlIHJvdXRlIGFuZCByZXBsYWNlcyB0aGUgb2JqZWN0LlxuICAgICAgLy8gRGVsZXRpbmcgdGhlIG9iamVjdHMgaGVyZSBtYWRlIHRoZSBuZXh0IHJlcXVlc3QgYSBoYXJkIG1pc3MsIHdoaWNoIG9uIGFcbiAgICAgIC8vIFBQUiByb3V0ZSBpcyBhbnN3ZXJlZCBmcm9tIHRoZSB1bmNhY2hlYWJsZSBmYWxsYmFjayBzaGVsbCBmb3IgZ29vZC5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCksXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgdGFnIG1hcmtlciBgY2hlY2tJZlJldmFsaWRhdGVkYCByZWFkczoga2V5ZWQgYnkgdGhlIGJhcmUgdGFnLCBzb1xuICAgICAgLy8gZW50cmllcyB3aXRoIG5vIG1hcHBpbmcgcm93IG9mIHRoZWlyIG93biBzdGlsbCBzZWUgdGhlIHJldmFsaWRhdGlvbi5cbiAgICAgIGNvbnN0IG1hcmtlcldyaXRlID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0KVxuICAgICAgICAuZmluZCgoaW5wdXQpID0+IGlucHV0LktleS5zay5TID09PSBcInRlc3QtdGFnXCIpO1xuICAgICAgZXhwZWN0KG1hcmtlcldyaXRlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogXCJTRVQgcmV2YWxpZGF0ZWRBdCA9IDpyZXZhbGlkYXRlZEF0XCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCByZXZhbGlkYXRlIHdoZW4gRHluYW1vREIgdGFibGUgaXMgbm90IGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRob3V0VGFibGUgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aG91dFRhYmxlLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIER5bmFtb0RCIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJEeW5hbW9EQiBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJlcnJvci10YWdcIikpLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgYSBDbG91ZEZyb250IGludmFsaWRhdGlvbiBmb3IgYWZmZWN0ZWQgcGF0aHMgd2hlbiBhIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgaXMgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMi5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IG1vY2tRdWVyeVJlc3BvbnNlIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7IC8vIEZvciBkZWxldGUgY29tbWFuZHNcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoT2JqZWN0KSk7XG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuRGlzdHJpYnV0aW9uSWQpLnRvQmUoXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiKTtcbiAgICAgIC8vIE9uZSB0cmFpbGluZyB3aWxkY2FyZCBwZXIgcGFnZTogYW4gaW52YWxpZGF0aW9uIHBhdGggbWF0Y2hlcyBvbmx5IHRoZVxuICAgICAgLy8gcXVlcnkgc3RyaW5nIGl0IHNwZWxscyBvdXQsIGFuZCBhIHBhZ2UncyBSU0MgcGF5bG9hZCBpcyBjYWNoZWQgdW5kZXJcbiAgICAgIC8vIGA/X3JzYz08aGFzaD5gIC0gYC9pc3IvMSpgIGNvdmVycyBpdCwgYW5kIHRoZSBzbGFzaCB2YXJpYW50LCBmb3Igb25lXG4gICAgICAvLyBvZiB0aGUgZmlmdGVlbiB3aWxkY2FyZHMgaW5zdGVhZCBvZiB0d28uXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9pc3IvMSpcIixcbiAgICAgICAgXCIvaXNyLzIqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIG5leHQgPj0gMTYuMy44IHNjb3BlcyBhIHBhZ2UncyBrZXkgYnkgaXRzIHNvdXJjZSByb3V0ZTpcbiAgICAgKiBgcm91dGUtY2FjaGUvPGtpbmQ+LzxoYXNoPi8kPHBhdGhuYW1lPmAsIHRoZSBwYXRobmFtZSB0aHJvdWdoXG4gICAgICogYG5vcm1hbGl6ZVBhZ2VQYXRoYC4gUmVhZCBhcyBhIHBhdGgsIGl0IG5hbWVkIG5vIFVSSSB0aGUgZGlzdHJpYnV0aW9uIGhhcy5cbiAgICAgKi9cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRobmFtZSBpbnNpZGUgYSBuZXh0IDE2LjMuOCByb3V0ZS1jYWNoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBrZXkgPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgYHRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kJHtwYXRobmFtZX0uanNvbmA7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IGtleShcIi9pc3IvMVwiKSB9IH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IGtleShcIi9pbmRleC9pbmRleFwiKSB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvaXNyLzEqXCIsXG4gICAgICAgIFwiL2luZGV4KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRoIG9mIGEgbWFwcGluZyByb3cgd2hvc2Uga2V5IGlzIGluIHMzS2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBJdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzazogeyBTOiBgdGVzdC10YWcjdGVzdC1idWlsZC1pZC8jJHtcImJcIi5yZXBlYXQoNjQpfWAgfSxcbiAgICAgICAgICAgICAgczNLZXk6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkL2xvbmcvcGFnZS5qc29uXCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvbG9uZy9wYWdlKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImRvZXMgbm90IHJlYWQgYSBtYXJrZXIgcm93IG9uZSBgI2AgbG9uZ2VyIGFzIGEgbWFwcGluZyByb3dcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTm8gYnVpbGQgSUQgbGVhdmVzIG5vIGtleSBwcmVmaXggdG8gdGVsbCB0aGUgdHdvIGFwYXJ0IGJ5LCBhbmQgdGhlXG4gICAgICAvLyBtYXJrZXIgcm93IG9mIHRhZyBgdGVzdC10YWcjYCAoc2sgYHRlc3QtdGFnI2ApIG1hdGNoZXMgYHRlc3QtdGFnI2AuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEID0gXCJcIjtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjXCIgfSB9XSB9IH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGFuIG9sZGVyIGFwcCdzIHJvdXRlIG5hbWVkIC9yb3V0ZS1jYWNoZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9yb3V0ZS1jYWNoZS9mb28uanNvblwiIH0gfV0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL3JvdXRlLWNhY2hlL2ZvbypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBhIGRpc3RyaWJ1dGlvbiB3aG9zZSBJRCBpcyBpbiB0aGUgZW52aXJvbm1lbnQgd2l0aG91dCBTU01cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTmV4dGpzR2xvYmFsQ29udGFpbmVyczogdGhlIHRhc2sgY2FuIG5hbWUgdGhlIGRpc3RyaWJ1dGlvbiBkaXJlY3RseS5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEID0gXCJkaXJlY3QtZGlzdHJpYnV0aW9uLWlkXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeTogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuRGlzdHJpYnV0aW9uSWQpLnRvQmUoXCJkaXJlY3QtZGlzdHJpYnV0aW9uLWlkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzcGxpdHMgYSBtYXBwaW5nIHJvdyBhdCB0aGUgdGFnJ3MgbGVuZ3RoLCBzbyBhIHRhZyBjb250YWluaW5nICMgc3RpbGwgcmVzb2x2ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSB0YWcgaXMgYXBwLWRlZmluZWQ6IGByZXZhbGlkYXRlVGFnKFwidXNlciM0MlwiKWAgaXMgbGVnYWwuIFNwbGl0dGluZyBhdFxuICAgICAgLy8gdGhlIGZpcnN0IFwiI1wiIGxlZnQgXCI0MiN0ZXN0LWJ1aWxkLWlkL2FjY291bnQuanNvblwiIGFzIHRoZSBTMyBrZXksIHdob3NlXG4gICAgICAvLyBpbnZhbGlkYXRpb24gcGF0aCBuYW1lcyBub3RoaW5nIENsb3VkRnJvbnQgY2FjaGVkLCBzbyB0aGUgcGFnZSBzdGF5ZWRcbiAgICAgIC8vIHN0YWxlIHdoaWxlIHRoZSByb3cgd2FzIHN0YW1wZWQgcmV2YWxpZGF0ZWQgYW5kIG5ldmVyIHJldHJpZWQuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHsgSXRlbXM6IFt7IHNrOiB7IFM6IFwidXNlciM0MiN0ZXN0LWJ1aWxkLWlkL2FjY291bnQuanNvblwiIH0gfV0gfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidXNlciM0MlwiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvYWNjb3VudCpcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGF0aCBhIHJldmFsaWRhdGVQYXRoIHRhZyBuYW1lcyBldmVuIHdpdGggbm8gbWFwcGluZyByb3dzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEEgYnVpbGQtdGltZSBwcmVyZW5kZXIgaGFzIG5vIG1hcHBpbmcgcm93cywgc28gdGhlIHF1ZXJ5IGNvbWVzIGJhY2tcbiAgICAgIC8vIGVtcHR5IGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIGRlcml2ZSBhIENsb3VkRnJvbnQgcGF0aCBmcm9tIC0gZXhjZXB0IHRoZVxuICAgICAgLy8gdGFnLCB3aGljaCBmb3IgYHJldmFsaWRhdGVQYXRoYCBpcyBgX05fVF88cGF0aD5gLiBXaXRob3V0IHRoaXMgdGhlIENETlxuICAgICAgLy8gYW5zd2VycyB3aXRoIHRoZSBwcmUtcmV2YWxpZGF0aW9uIHBhZ2UgdW50aWwgYHMtbWF4YWdlPTMxNTM2MDAwYFxuICAgICAgLy8gZXhwaXJlcy4gTWVhc3VyZWQgYWdhaW5zdCBuZXh0LmpzJ3MgYHRlc3QvZTJlL2FwcC1kaXIvdHJhaWxpbmdzbGFzaGAuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9lbi9sZWdhY3kvXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICAvLyBCb3RoIHNsYXNoIHZhcmlhbnRzLCB3aGljaCB0aGUgdHJhaWxpbmcgd2lsZGNhcmQgY292ZXJzOiBhXG4gICAgICAvLyBgdHJhaWxpbmdTbGFzaGAgYXBwJ3MgY2FjaGVkIFVSSSBpcyB0aGUgcmVkaXJlY3QgdGFyZ2V0LCBub3QgdGhlIHJvdXRlLlxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvZW4vbGVnYWN5KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBVUkkgdW5kZXIgdGhlIGFwcCdzIGJhc2VQYXRoLCBub3QgdGhlIGJhcmUgcm91dGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQ2xvdWRGcm9udCBjYWNoZWQgYC9iYXNlL2lzci8xYDsgdGhlIGNhY2hlIGtleSBhbmQgdGhlIGByZXZhbGlkYXRlUGF0aGBcbiAgICAgIC8vIHRhZyBib3RoIG5hbWUgYC9pc3IvMWAsIGJlY2F1c2UgTmV4dC5qcyBzdHJpcHMgYGJhc2VQYXRoYCBiZWZvcmUgcm91dGluZ1xuICAgICAgLy8gYW5kIG5ldmVyIHNob3dzIGl0IHRvIHRoZSBjYWNoZSBoYW5kbGVyLiBJbnZhbGlkYXRpbmcgdGhlIGJhcmUgcm91dGVcbiAgICAgIC8vIG1hdGNoZXMgbm90aGluZyBhdCB0aGUgZWRnZSwgc28gdGhlIHN0YWxlIHBhZ2Ugc3Vydml2ZXMgdW50aWxcbiAgICAgIC8vIGBzLW1heGFnZWAgZXhwaXJlcy5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoQmFzZVBhdGggPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9LFxuICAgICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaW5kZXguanNvblwiIH0gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhCYXNlUGF0aC5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChcbiAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgXCIvYmFzZS9pc3IvMSpcIixcbiAgICAgICAgICAvLyBUaGUgYXBwJ3Mgcm9vdCB1bmRlciBhIGBiYXNlUGF0aGAgaXMgYC9iYXNlYCwgbm90IGAvYmFzZS9gLCBhbmRcbiAgICAgICAgICAvLyBzcGVsbGVkIG91dDogYC9iYXNlKmAgd291bGQgYmUgdGhlIHdob2xlIGFwcC5cbiAgICAgICAgICBcIi9iYXNlXCIsXG4gICAgICAgICAgXCIvYmFzZT8qXCIsXG4gICAgICAgICAgXCIvYmFzZS9cIixcbiAgICAgICAgICBcIi9iYXNlLz8qXCIsXG4gICAgICAgIF0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykubm90LnRvQ29udGFpbihcbiAgICAgICAgXCIvaXNyLzFcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImFkZHMgdGhlIGJhc2VQYXRoIHRvIGEgcmV2YWxpZGF0ZVBhdGggdGFnJ3MgcGF0aCB0b29cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhCYXNlUGF0aCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiB7IEl0ZW1zOiBbXSB9IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aEJhc2VQYXRoLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9ibG9nXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9iYXNlL2Jsb2cqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZG9lcyBub3QgaW52YWxpZGF0ZSBhIENsb3VkRnJvbnQgcGF0aCBmb3IgYW4gYXBwIHRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgLy8gTm90aGluZyB0byBpbnZhbGlkYXRlOiBhbiBhcHAgdGFnIG5hbWVzIG5vIHBhdGgsIGFuZCBubyBlbnRyeSBpcyBtYXBwZWRcbiAgICAgIC8vIHRvIGl0LlxuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBjYWxsIFNTTSBvciBDbG91ZEZyb250IHdoZW4gbm8gZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBpcyBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dLFxuICAgICAgfTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IG1vY2tRdWVyeVJlc3BvbnNlIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFNTTS9DbG91ZEZyb250IGludmFsaWRhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTU00gRXJyb3JcIikpO1xuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhZ2UgaXRzZWxmIGZvciBhIHJldmFsaWRhdGVQYXRoKHBhdGgsICdwYWdlJykgdGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGByZXZhbGlkYXRlUGF0aChwYXRoLCB0eXBlKWAgYXBwZW5kcyB0aGUgdHlwZSB0byB0aGUgaW1wbGljaXQgdGFnLCBzbyB0aGVcbiAgICAgIC8vIHRhZyByZWFkcyBgX05fVF8vcHJpY2luZy9wYWdlYCAtIGEgcGF0aCBubyBVUkwgaGFzLiBUYWtpbmcgaXQgbGl0ZXJhbGx5XG4gICAgICAvLyBpbnZhbGlkYXRlZCBub3RoaW5nIHRoYXQgZXhpc3RlZCwgd2hpY2ggaXMgdGhlIHdob2xlIG9mIHRoZSBidWc6IHRoZVxuICAgICAgLy8gc2Vjb25kIGFyZ3VtZW50IHNpbGVudGx5IHR1cm5lZCBDRE4gaW52YWxpZGF0aW9uIG9mZi5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL3ByaWNpbmcvcGFnZVwiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFxuICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcIi9wcmljaW5nKlwiXSksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJza2lwcyBtYXBwaW5nIHJvd3MgdGhhdCBuYW1lIG5vIGNhY2hlZCBVUklcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBkeW5hbWljIHRlbXBsYXRlIGFuZCBhIGZldGNoLWNhY2hlIGVudHJ5IGFyZSBib3RoIHJvd3MgYSByZWFsIHRhZ1xuICAgICAgLy8gY2FycmllcywgYW5kIG5laXRoZXIgaXMgYSBVUkw6IGAvYmxvZy9bc2x1Z11gIG1hdGNoZXMgbm90aGluZyBhdCB0aGUgZWRnZVxuICAgICAgLy8gKENsb3VkRnJvbnQgaGFzIG5vIHN1Y2ggVVJJKSwgYW5kIGEgZmV0Y2gga2V5IGlzIGEgaGFzaCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL1tzbHVnXS5qc29uXCIgfSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzazoge1xuICAgICAgICAgICAgICAgIFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC8wMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZi5qc29uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uXCIgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGNvbnN0IGl0ZW1zOiBzdHJpbmdbXSA9IGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zO1xuICAgICAgZXhwZWN0KGl0ZW1zKS50b0VxdWFsKFtcIi9ibG9nL2hlbGxvKlwiXSk7XG4gICAgICBleHBlY3QoaXRlbXMuc29tZSgocGF0aCkgPT4gcGF0aC5pbmNsdWRlcyhcIltcIikpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpdGVtcy5zb21lKChwYXRoKSA9PiBwYXRoLmluY2x1ZGVzKFwiMDEyMzQ1Njc4OWFiY2RlZlwiKSkpLnRvQmUoXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwid2Fsa3MgZXZlcnkgUXVlcnkgcGFnZSBvZiBhIHRhZydzIG1hcHBpbmcgcm93c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBPbmUgYFF1ZXJ5YCBhbnN3ZXJzIHdpdGggYXQgbW9zdCAxIE1CLiBBIHRhZyBvbiBhIGxhcmdlIGFwcCBydW5zIHBhc3RcbiAgICAgIC8vIHRoYXQsIGFuZCB0YWtpbmcgb25seSB0aGUgZmlyc3QgcGFnZSBkZWxldGVkIHNvbWUgb2YgdGhlIHRhZydzIGVudHJpZXNcbiAgICAgIC8vIGFuZCBpbnZhbGlkYXRlZCBvbmx5IHNvbWUgb2YgaXRzIHBhdGhzIC0gYSBwYXJ0aWFsIHJldmFsaWRhdGlvbiB0aGF0XG4gICAgICAvLyBsb29rcyBsaWtlIGEgY2FjaGUgYnVnLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBxdWVyaWVzID0gMDtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgICAgICAgIHF1ZXJpZXMrKztcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgcXVlcmllcyA9PT0gMVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICAgICAgICAgICAgICBMYXN0RXZhbHVhdGVkS2V5OiB7IHBrOiB7IFM6IFwidGVzdC1idWlsZC1pZFwiIH0gfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8yLmpzb25cIiB9IH1dIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KHF1ZXJpZXMpLnRvQmUoMik7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9pc3IvMSpcIixcbiAgICAgICAgXCIvaXNyLzIqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY29sbGFwc2VzIHRvIG9uZSBhcHAtd2lkZSB3aWxkY2FyZCByYXRoZXIgdGhhbiBzZW5kaW5nIG1hbnkgaW52YWxpZGF0aW9uc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250IGNhcHMgYSByZXF1ZXN0IGF0IDE1IHdpbGRjYXJkIHBhdGhzIGFuZCBhbGxvd3MgMTVcbiAgICAgIC8vIGludmFsaWRhdGlvbnMgaW4gcHJvZ3Jlc3MuIEEgdGFnIGNvdmVyaW5nIGh1bmRyZWRzIG9mIHBhZ2VzIHRoZXJlZm9yZVxuICAgICAgLy8gY2Fubm90IGJlIHNwZWxsZWQgb3V0OiBzZW5kaW5nIGEgcmVxdWVzdCBwZXIgMTUgcGF0aHMgdGhyb3R0bGVzLCBhbmQgYVxuICAgICAgLy8gdGhyb3R0bGVkIHJlcXVlc3QgaXMgYSBwYWdlIHRoYXQgc3RheXMgc3RhbGUuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBJdGVtczogQXJyYXkuZnJvbSh7IGxlbmd0aDogMjAwIH0sIChfLCBpKSA9PiAoe1xuICAgICAgICAgICAgc2s6IHsgUzogYHRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLyR7aX0uanNvbmAgfSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXCIvKlwiXSk7XG4gICAgfSk7XG5cbiAgICAvKiogQSBoYW5kbGVyIHdpdGggYSBkaXN0cmlidXRpb24sIGFuZCBEeW5hbW9EQiBhbnN3ZXJpbmcgYHF1ZXJ5YCBmb3IgaXQuICovXG4gICAgY29uc3Qgd2l0aERpc3RyaWJ1dGlvbiA9IChxdWVyeTogdW5rbm93bikgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIHJldHVybiBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGludmFsaWRhdGlvbnMgPSAoKTogc3RyaW5nW11bXSA9PlxuICAgICAgKENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKFxuICAgICAgICAoW2lucHV0XSkgPT4gaW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMsXG4gICAgICApO1xuICAgIGNvbnN0IHBhZ2VzID0gKHRhZzogc3RyaW5nLCBjb3VudDogbnVtYmVyKSA9PiAoe1xuICAgICAgSXRlbXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBpKSA9PiAoe1xuICAgICAgICBzazogeyBTOiBgJHt0YWd9I3Rlc3QtYnVpbGQtaWQvaXNyLyR7aX0uanNvbmAgfSxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGl0KFwic2VuZHMgYSB0YWcncyBwYXRocyBhcyBvbmUgcmVxdWVzdCB3aGlsZSB0aGV5IGZpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250J3Mgd2lsZGNhcmQgcXVvdGEgaXMgc2hhcmVkIGJ5IGV2ZXJ5IGludmFsaWRhdGlvbiBpblxuICAgICAgLy8gcHJvZ3Jlc3Mgb24gdGhlIGRpc3RyaWJ1dGlvbi4gU3BsaXR0aW5nIHRlbiBwYWdlcycgdHdlbnR5IHdpbGRjYXJkc1xuICAgICAgLy8gaW50byB0d28gYmFjay10by1iYWNrIHJlcXVlc3RzIGhhZCB0aGUgc2Vjb25kIHJlamVjdGVkLCBhbmQgaXRzIHBhZ2VzXG4gICAgICAvLyBzdGF5ZWQgc3RhbGUgYXQgdGhlIGVkZ2UuXG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMTApKS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKClbMF0pLnRvSGF2ZUxlbmd0aCgxMCk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvbGxhcHNlcyB0byB0aGUgd2hvbGUgYXBwIHBhc3QgZmlmdGVlbiB3aWxkY2FyZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDE2KSkucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjb2xsYXBzZXMgdG8gdGhlIHdob2xlIGFwcCB1bmRlciBhIGJhc2VQYXRoLCBpdHMgcm9vdCBpbmNsdWRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBOb3QgYC9iYXNlKmAsIHdoaWNoIHdvdWxkIGFsc28gaW52YWxpZGF0ZSBhIHNpYmxpbmcgYXBwIGF0IGAvYmFzZTJgLlxuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxNikpLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHVuZGVyIGEgYmFzZVBhdGggd2hlbiBhIHRhZydzIHJvd3MgY2Fubm90IGJlIHJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHsgSXRlbXM6IFtdIH0pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgPyBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJQcm92aXNpb25lZFRocm91Z2hwdXRFeGNlZWRlZFwiKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJwZXJjZW50LWVuY29kZXMgdGhlIHJvdXRlcyBpdCBpbnZhbGlkYXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDYWNoZSBrZXlzIGFyZSBkZWNvZGVkIHBhdGhuYW1lcywgd2hpbGUgQ2xvdWRGcm9udCBjYWNoZXMgLSBhbmRcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRocyBtYXRjaCAtIHRoZSBlbmNvZGVkIFVSSSB0aGUgYnJvd3NlciBzZW50LlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvYmxvZy9ow6lsbG8uanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvIHdvcmxkLmpzb25cIiB9IH0sXG4gICAgICAgICAgLy8gUGF0aCBkZWxpbWl0ZXJzIE5leHQuanMgcmUtZXNjYXBlZCBpbiB0aGUga2V5IHN0YXkgYXMgdGhleSBhcmUuXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvZmlsZXMvYSUyRmIuanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9AdXNlci81MCUuanNvblwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLnJldmFsaWRhdGVUYWcoW1widGVzdC10YWdcIiwgXCJfTl9UXy90YWdzL2MjP1wiXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1xuICAgICAgICBbXG4gICAgICAgICAgXCIvYmxvZy9oJUMzJUE5bGxvKlwiLFxuICAgICAgICAgIFwiL2Jsb2cvaGVsbG8lMjB3b3JsZCpcIixcbiAgICAgICAgICBcIi9maWxlcy9hJTJGYipcIixcbiAgICAgICAgICBcIi9AdXNlci81MCUyNSpcIixcbiAgICAgICAgICBcIi90YWdzL2MlMjMlM0YqXCIsXG4gICAgICAgIF0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgZXZlcnkgdGFnIG9mIG9uZSBjYWxsIGluIGEgc2luZ2xlIHJlcXVlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYHJldmFsaWRhdGVUYWdgIGhhbmRzIHRoZSBoYW5kbGVyIGV2ZXJ5IHRhZyBhIHJlcXVlc3QgcmV2YWxpZGF0ZWQgYXRcbiAgICAgIC8vIG9uY2U7IGEgcmVxdWVzdCBwZXIgdGFnIGNvbXBldGVzIGZvciB0aGUgc2FtZSBxdW90YS5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSkucmV2YWxpZGF0ZVRhZyhbXG4gICAgICAgIFwiX05fVF8vYVwiLFxuICAgICAgICBcIl9OX1RfL2JcIixcbiAgICAgIF0pO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYSpcIiwgXCIvYipcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIGEgdGFnIGhhcyBtb3JlIHJvd3MgdGhhbiBpdCB3YWxrc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGUgcm93cyBwYXN0IHRoZSBsYXN0IHBhZ2Ugd2Fsa2VkIGFyZSBwYWdlcyB0b287IGludmFsaWRhdGluZyBvbmx5IHRoZVxuICAgICAgLy8gb25lcyByZWFkIGxlZnQgdGhlIHJlc3Qgc3RhbGUgYXQgdGhlIGVkZ2UgZm9yIHVwIHRvIGEgeWVhci5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgICAgICAgICAgICBMYXN0RXZhbHVhdGVkS2V5OiB7IHBrOiB7IFM6IFwidGVzdC1idWlsZC1pZFwiIH0gfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoXG4gICAgICAgIFwidGVzdC10YWdcIixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImlnbm9yZXMgcm93cyB0aGF0IGFub3RoZXIgdGFnIHNoYXJpbmcgdGhlIHByZWZpeCBvd25zXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBiZWdpbnNfd2l0aChzaywgXCJ1c2VyI1wiKWAgYWxzbyBtYXRjaGVzIHRoZSB0YWcgYHVzZXIjNDJgOiBpdHMgYmFyZVxuICAgICAgLy8gbWFya2VyIHJvdywgYW5kIGl0cyBtYXBwaW5nIHJvd3MuIFJlYWQgYXMgYHVzZXJgJ3MsIHRoZXkgYmVjYW1lXG4gICAgICAvLyBpbnZhbGlkYXRpb24gcGF0aHMgbGlrZSBgLzQyYCB0aGF0IG5hbWUgbm90aGluZy5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24oe1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyIzQyXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyIzQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyI3Rlc3QtYnVpbGQtaWQvcHJvZmlsZS5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSkucmV2YWxpZGF0ZVRhZyhcInVzZXJcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9wcm9maWxlKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhZGRzIHRoZSBidWlsZC10aW1lIHByZXJlbmRlcnMgdGhlIGJ1aWxkJ3MgdGFnIG1hbmlmZXN0IG5hbWVzLCByZWFkaW5nIGl0IG9uY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBwcmVyZW5kZXIgaXMgd3JpdHRlbiBieSB0aGUgYWRhcHRlciwgbmV2ZXIgdGhyb3VnaCBgc2V0YCwgc28gaXQgaGFzXG4gICAgICAvLyBubyBtYXBwaW5nIHJvdzogdGhlIG1hbmlmZXN0IGlzIHRoZSBvbmx5IHJlY29yZCBvZiBpdHMgdGFncy5cbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwicG9zdHMjdGVzdC1idWlsZC1pZC9ibG9nL2IuanNvblwiIH0gfV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1hbmlmZXN0R2V0cyA9ICgpID0+XG4gICAgICAgIChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgICAoW2lucHV0XSkgPT5cbiAgICAgICAgICAgIGlucHV0LktleSA9PT0gXCJ0ZXN0LWJ1aWxkLWlkL19jZGstbmV4dGpzLXRhZy1tYW5pZmVzdC5qc29uXCIsXG4gICAgICAgICk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogYXN5bmMgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBwb3N0czogW1wiYmxvZy9hXCIsIFwiaW5kZXhcIl0gfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiY29uc3RydWN0b3JcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9ibG9nL2IqXCIsIFwiL2Jsb2cvYSpcIiwgXCIvXCIsIFwiLz8qXCJdXSk7XG4gICAgICBleHBlY3QobWFuaWZlc3RHZXRzKCkpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIHRoZSBidWlsZCdzIHRhZyBtYW5pZmVzdCBjYW5ub3QgYmUgcmVhZCwgYW5kIHJlYWRzIGl0IGFnYWluIG5leHQgdGltZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkFjY2Vzc0RlbmllZFwiKSk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gYSB0YWcncyBtYXJrZXIgcm93IGNhbm5vdCBiZSB3cml0dGVuXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE90aGVyIGluc3RhbmNlcyB3b3VsZCBuZXZlciBzZWUgdGhlIHJldmFsaWRhdGlvbiwgc28gbm8gcGF0aCBsaXN0IGlzXG4gICAgICAvLyBlbm91Z2guXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHsgSXRlbXM6IFtdIH0pXG4gICAgICAgICAgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJQcm92aXNpb25lZFRocm91Z2hwdXRFeGNlZWRlZFwiKSksXG4gICAgICApO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KS5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgd2hlbiBhIHRhZydzIG1hcHBpbmcgcm93cyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGUgbWFya2VyIHJvdyBpcyB3cml0dGVuIGJlZm9yZSB0aGUgUXVlcnksIHNvIGEgZmFpbGVkIFF1ZXJ5IGxlYXZlc1xuICAgICAgLy8gdGhlIHRhZyByZXZhbGlkYXRlZCBhdCB0aGUgb3JpZ2luIHdpdGggbm8gcGF0aHMgbmFtZWQgZm9yIHRoZSBlZGdlLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoW1xuICAgICAgICBcIl9OX1RfL2FcIixcbiAgICAgICAgXCJwb3N0c1wiLFxuICAgICAgXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcIndoZW4gQ2xvdWRGcm9udCdzIGludmFsaWRhdGlvbiBxdW90YSBpcyBmdWxsXCIsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgamVzdC51c2VSZWFsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcXVvdGFFcnJvciA9ICgpID0+XG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbmV3IEVycm9yKFwiWW91ciByZXF1ZXN0IGNvbnRhaW5zIHRvbyBtYW55IGludmFsaWRhdGlvbnNcIiksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJUb29NYW55SW52YWxpZGF0aW9uc0luUHJvZ3Jlc3NcIixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICBpdChcInJldHJpZXMgYXMgb25lIGFwcC13aWRlIHdpbGRjYXJkIGFmdGVyIGEgYmFja29mZlwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMikpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmRcbiAgICAgICAgICAubW9ja1JlamVjdGVkVmFsdWVPbmNlKHF1b3RhRXJyb3IoKSlcbiAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHt9KTtcblxuICAgICAgICBjb25zdCBkb25lID0gY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDEwMDApO1xuICAgICAgICBhd2FpdCBkb25lO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIiwgXCIvaXNyLzEqXCJdLCBbXCIvKlwiXV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZ2l2ZXMgdXAgYWZ0ZXIgdGhlIGxhc3QgcmV0cnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDEpKTtcbiAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZWplY3RlZFZhbHVlKHF1b3RhRXJyb3IoKSk7XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuICAgICAgICBhd2FpdCBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWVBc3luYygzMDAwKTtcbiAgICAgICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvaXNyLzAqXCJdLCBbXCIvKlwiXSwgW1wiLypcIl1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcImRvZXMgbm90IHJldHJ5IGFueSBvdGhlciBlcnJvclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMSkpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1JlamVjdGVkVmFsdWUobmV3IEVycm9yKFwiQWNjZXNzRGVuaWVkXCIpKTtcblxuICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvaXNyLzAqXCJdXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJyZXRyaWVzIHRoZSBhcHAncyByb290IHVuZGVyIGEgYmFzZVBhdGggdG9vXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gYC9iYXNlLypgIG1hdGNoZXMgbmVpdGhlciBgL2Jhc2VgIG5vciBgL2Jhc2U/X3JzYz3igKZgOiByZXRyeWluZ1xuICAgICAgICAvLyBgcmV2YWxpZGF0ZVBhdGgoXCIvXCIpYCBhcyB0aGF0IGxlZnQgdGhlIGhvbWUgcGFnZSBzdGFsZSBhdCB0aGUgZWRnZS5cbiAgICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZFxuICAgICAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UocXVvdGFFcnJvcigpKVxuICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuXG4gICAgICAgIGNvbnN0IGRvbmUgPSBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9cIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDEwMDApO1xuICAgICAgICBhd2FpdCBkb25lO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKClbMV0pLnRvRXF1YWwoW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVjb3JkcyBhIHByb2ZpbGUncyByZXZhbGlkYXRpb24gYXMgc3RhbGUgbm93LCBleHBpcmluZyBsYXRlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiZWZvcmUgPSBEYXRlLm5vdygpO1xuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIiwgeyBleHBpcmU6IDYwIH0pO1xuXG4gICAgICBjb25zdCBbaW5wdXRdID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGlucHV0LktleS5zay5TKS50b0JlKFwicG9zdHNcIik7XG4gICAgICBleHBlY3QoaW5wdXQuVXBkYXRlRXhwcmVzc2lvbikudG9CZShcbiAgICAgICAgXCJTRVQgc3RhbGVBdCA9IDpzdGFsZUF0LCBleHBpcmVkQXQgPSA6ZXhwaXJlZEF0XCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RhbGVBdCA9IE51bWJlcihpbnB1dC5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOnN0YWxlQXRcIl0uTik7XG4gICAgICBleHBlY3Qoc3RhbGVBdCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbChiZWZvcmUpO1xuICAgICAgZXhwZWN0KE51bWJlcihpbnB1dC5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOmV4cGlyZWRBdFwiXS5OKSkudG9CZShcbiAgICAgICAgc3RhbGVBdCArIDYwXzAwMCxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgaGFuZGxlcidzIGhhbGYgb2YgYHJlcy5yZXZhbGlkYXRlKClgJ3MgQ0ROIGludmFsaWRhdGlvbjogdGhlIGhvb2tcbiAgICogaXQgcmVnaXN0ZXJzIGZvciBgaW52YWxpZGF0ZVJldmFsaWRhdGVkUGFnZWAgaW4gYHJ1bnRpbWUvY29yZS50c2AuIFRoZVxuICAgKiBydW50aW1lJ3MgaGFsZiBpcyBpbiBgY29yZS50ZXN0LnRzYC5cbiAgICovXG4gIGRlc2NyaWJlKFwidGhlIHJldmFsaWRhdGVkLXBhZ2UgaG9va1wiLCAoKSA9PiB7XG4gICAgY29uc3QgSE9PSyA9IFJFVkFMSURBVEVEX1BBR0VfSE9PSztcbiAgICBjb25zdCBnbG9iYWxzID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPjtcbiAgICB0eXBlIEhvb2sgPSAocm91dGVzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgZGVsZXRlIGdsb2JhbHNbSE9PS107XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IFBhcmFtZXRlcjogeyBWYWx1ZTogXCJFRElTVFJJQlVUSU9OXCIgfSB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9ja0NsZWFyKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkYXRlZFBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IFtpbnB1dF0gPSAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9ja1xuICAgICAgICAuY2FsbHNbMF07XG4gICAgICByZXR1cm4gaW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXM7XG4gICAgfVxuXG4gICAgaXQoXCJpcyByZWdpc3RlcmVkIG9ubHkgYmVoaW5kIGEgZGlzdHJpYnV0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgZXhwZWN0KGdsb2JhbHNbSE9PS10pLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgZXhwZWN0KHR5cGVvZiBnbG9iYWxzW0hPT0tdKS50b0JlKFwiZnVuY3Rpb25cIik7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYWdlIGFuZCBpdHMgZGF0YSByb3V0ZSB1bmRlciBiYXNlUGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJwYXJhbVwiO1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQsIGJhc2VQYXRoOiBcImJhc2VcIiB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvYmxvZy9oZWxsb1wiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1xuICAgICAgICBcIi9iYXNlL2Jsb2cvaGVsbG8qXCIsXG4gICAgICAgIFwiL2Jhc2UvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2Jsb2cvaGVsbG8uanNvbipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzcGVsbHMgb3V0IHRoZSByb290IHJhdGhlciB0aGFuIGludmFsaWRhdGluZyB0aGUgd2hvbGUgYXBwXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9pbmRleC5qc29uXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgXCIvPypcIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2luZGV4Lmpzb24qXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2VuZHMgZXZlcnkgcGF0aCBvbmNlLCBpbiBvbmUgaW52YWxpZGF0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvYmxvZ1wiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvZW4vYmxvZy5qc29uXCIsXG4gICAgICAgIFwiL2VuL2Jsb2dcIixcbiAgICAgICAgXCIvYmxvZ1wiLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL2Jsb2cqXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9lbi9ibG9nLmpzb24qXCIsXG4gICAgICAgIFwiL2VuL2Jsb2cqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXNldFJlcXVlc3RDYWNoZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29tcGxldGUgd2l0aG91dCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZXhwZWN0KGhhbmRsZXIucmVzZXRSZXF1ZXN0Q2FjaGUoKSkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|