@aws-cdk-testing/cli-integ 2.164.1 → 2.166.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aws.d.ts +3 -2
- package/lib/aws.js +9 -8
- package/lib/corking.d.ts +0 -3
- package/lib/files.js +10 -11
- package/lib/github.js +2 -3
- package/lib/integ-test.d.ts +0 -1
- package/lib/integ-test.js +3 -4
- package/lib/lists.js +2 -3
- package/lib/memoize.js +2 -3
- package/lib/npm.d.ts +4 -0
- package/lib/npm.js +26 -3
- package/lib/package-sources/release-source.d.ts +1 -0
- package/lib/package-sources/release-source.js +4 -1
- package/lib/package-sources/repo-source.d.ts +1 -0
- package/lib/package-sources/repo-source.js +7 -4
- package/lib/package-sources/source.d.ts +4 -0
- package/lib/package-sources/source.js +1 -1
- package/lib/package-sources/subprocess.js +3 -4
- package/lib/shell.d.ts +2 -6
- package/lib/shell.js +23 -21
- package/lib/staging/maven.js +5 -6
- package/lib/staging/npm.js +4 -5
- package/lib/staging/nuget.js +4 -5
- package/lib/staging/parallel-shell.d.ts +0 -1
- package/lib/staging/parallel-shell.js +2 -3
- package/lib/staging/pypi.js +4 -5
- package/lib/with-aws.d.ts +1 -1
- package/lib/with-aws.js +3 -4
- package/lib/with-cdk-app.d.ts +2 -2
- package/lib/with-cdk-app.js +26 -17
- package/lib/with-cli-lib.js +4 -4
- package/lib/with-packages.js +2 -3
- package/lib/with-sam.js +19 -14
- package/lib/with-temporary-directory.js +2 -3
- package/lib/with-timeout.js +2 -3
- package/package.json +5 -5
- package/resources/cdk-apps/app/app.js +14 -0
- package/resources/cdk-apps/rollback-test-app/app.js +12 -2
- package/tests/cli-integ-tests/cli.integtest.js +117 -2
- package/tests/cli-integ-tests/garbage-collection.integtest.js +153 -6
- package/tests/init-typescript-app/init-typescript-app.integtest.js +7 -2
- package/tests/tool-integrations/amplify.integtest.d.ts +1 -0
- package/tests/tool-integrations/amplify.integtest.js +39 -0
- package/tests/tool-integrations/with-tool-context.d.ts +9 -0
- package/tests/tool-integrations/with-tool-context.js +13 -0
|
@@ -7,6 +7,7 @@ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
|
7
7
|
const client_ecs_1 = require("@aws-sdk/client-ecs");
|
|
8
8
|
const client_iam_1 = require("@aws-sdk/client-iam");
|
|
9
9
|
const client_lambda_1 = require("@aws-sdk/client-lambda");
|
|
10
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
10
11
|
const client_sns_1 = require("@aws-sdk/client-sns");
|
|
11
12
|
const client_sts_1 = require("@aws-sdk/client-sts");
|
|
12
13
|
const lib_1 = require("../../lib");
|
|
@@ -885,6 +886,39 @@ Rules:
|
|
|
885
886
|
}));
|
|
886
887
|
expect(JSON.stringify(output.Payload?.transformToString())).toContain('dear asset');
|
|
887
888
|
}));
|
|
889
|
+
(0, lib_1.integTest)('deploy stack with Lambda Asset to Object Lock-enabled asset bucket', (0, lib_1.withoutBootstrap)(async (fixture) => {
|
|
890
|
+
// Bootstrapping with custom toolkit stack name and qualifier
|
|
891
|
+
const qualifier = fixture.qualifier;
|
|
892
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
893
|
+
await fixture.cdkBootstrapModern({
|
|
894
|
+
verbose: true,
|
|
895
|
+
toolkitStackName: toolkitStackName,
|
|
896
|
+
qualifier: qualifier,
|
|
897
|
+
});
|
|
898
|
+
const bucketName = `cdk-${qualifier}-assets-${await fixture.aws.account()}-${fixture.aws.region}`;
|
|
899
|
+
await fixture.aws.s3.send(new client_s3_1.PutObjectLockConfigurationCommand({
|
|
900
|
+
Bucket: bucketName,
|
|
901
|
+
ObjectLockConfiguration: {
|
|
902
|
+
ObjectLockEnabled: 'Enabled',
|
|
903
|
+
Rule: {
|
|
904
|
+
DefaultRetention: {
|
|
905
|
+
Days: 1,
|
|
906
|
+
Mode: 'GOVERNANCE',
|
|
907
|
+
},
|
|
908
|
+
},
|
|
909
|
+
},
|
|
910
|
+
}));
|
|
911
|
+
// Deploy a stack that definitely contains a file asset
|
|
912
|
+
await fixture.cdkDeploy('lambda', {
|
|
913
|
+
options: [
|
|
914
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
915
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${qualifier}`,
|
|
916
|
+
],
|
|
917
|
+
});
|
|
918
|
+
// THEN - should not fail. Now clean the bucket with governance bypass: a regular delete
|
|
919
|
+
// operation will fail.
|
|
920
|
+
await fixture.aws.emptyBucket(bucketName, { bypassGovernance: true });
|
|
921
|
+
}));
|
|
888
922
|
(0, lib_1.integTest)('cdk ls', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
889
923
|
const listing = await fixture.cdk(['ls'], { captureStderr: false });
|
|
890
924
|
const expectedStacks = [
|
|
@@ -1134,7 +1168,7 @@ Rules:
|
|
|
1134
1168
|
const targetName = template.replace(/.js$/, '');
|
|
1135
1169
|
await (0, lib_1.shell)([process.execPath, template, '>', targetName], {
|
|
1136
1170
|
cwd: cxAsmDir,
|
|
1137
|
-
|
|
1171
|
+
outputs: [fixture.output],
|
|
1138
1172
|
modEnv: {
|
|
1139
1173
|
TEST_ACCOUNT: await fixture.aws.account(),
|
|
1140
1174
|
TEST_REGION: fixture.aws.region,
|
|
@@ -1718,6 +1752,87 @@ async function listChildDirs(parent) {
|
|
|
1718
1752
|
await fixture.cdkDestroy('test-rollback');
|
|
1719
1753
|
}
|
|
1720
1754
|
}));
|
|
1755
|
+
(0, lib_1.integTest)('automatic rollback if paused and change contains a replacement', (0, lib_1.withSpecificFixture)('rollback-test-app', async (fixture) => {
|
|
1756
|
+
let phase = '1';
|
|
1757
|
+
// Should succeed
|
|
1758
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1759
|
+
options: ['--no-rollback'],
|
|
1760
|
+
modEnv: { PHASE: phase },
|
|
1761
|
+
verbose: false,
|
|
1762
|
+
});
|
|
1763
|
+
try {
|
|
1764
|
+
phase = '2a';
|
|
1765
|
+
// Should fail
|
|
1766
|
+
const deployOutput = await fixture.cdkDeploy('test-rollback', {
|
|
1767
|
+
options: ['--no-rollback'],
|
|
1768
|
+
modEnv: { PHASE: phase },
|
|
1769
|
+
verbose: false,
|
|
1770
|
+
allowErrExit: true,
|
|
1771
|
+
});
|
|
1772
|
+
expect(deployOutput).toContain('UPDATE_FAILED');
|
|
1773
|
+
// Do a deployment with a replacement and --force: this will roll back first and then deploy normally
|
|
1774
|
+
phase = '3';
|
|
1775
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1776
|
+
options: ['--no-rollback', '--force'],
|
|
1777
|
+
modEnv: { PHASE: phase },
|
|
1778
|
+
verbose: false,
|
|
1779
|
+
});
|
|
1780
|
+
}
|
|
1781
|
+
finally {
|
|
1782
|
+
await fixture.cdkDestroy('test-rollback');
|
|
1783
|
+
}
|
|
1784
|
+
}));
|
|
1785
|
+
(0, lib_1.integTest)('automatic rollback if paused and --no-rollback is removed from flags', (0, lib_1.withSpecificFixture)('rollback-test-app', async (fixture) => {
|
|
1786
|
+
let phase = '1';
|
|
1787
|
+
// Should succeed
|
|
1788
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1789
|
+
options: ['--no-rollback'],
|
|
1790
|
+
modEnv: { PHASE: phase },
|
|
1791
|
+
verbose: false,
|
|
1792
|
+
});
|
|
1793
|
+
try {
|
|
1794
|
+
phase = '2a';
|
|
1795
|
+
// Should fail
|
|
1796
|
+
const deployOutput = await fixture.cdkDeploy('test-rollback', {
|
|
1797
|
+
options: ['--no-rollback'],
|
|
1798
|
+
modEnv: { PHASE: phase },
|
|
1799
|
+
verbose: false,
|
|
1800
|
+
allowErrExit: true,
|
|
1801
|
+
});
|
|
1802
|
+
expect(deployOutput).toContain('UPDATE_FAILED');
|
|
1803
|
+
// Do a deployment removing --no-rollback: this will roll back first and then deploy normally
|
|
1804
|
+
phase = '1';
|
|
1805
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1806
|
+
options: ['--force'],
|
|
1807
|
+
modEnv: { PHASE: phase },
|
|
1808
|
+
verbose: false,
|
|
1809
|
+
});
|
|
1810
|
+
}
|
|
1811
|
+
finally {
|
|
1812
|
+
await fixture.cdkDestroy('test-rollback');
|
|
1813
|
+
}
|
|
1814
|
+
}));
|
|
1815
|
+
(0, lib_1.integTest)('automatic rollback if replacement and --no-rollback is removed from flags', (0, lib_1.withSpecificFixture)('rollback-test-app', async (fixture) => {
|
|
1816
|
+
let phase = '1';
|
|
1817
|
+
// Should succeed
|
|
1818
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1819
|
+
options: ['--no-rollback'],
|
|
1820
|
+
modEnv: { PHASE: phase },
|
|
1821
|
+
verbose: false,
|
|
1822
|
+
});
|
|
1823
|
+
try {
|
|
1824
|
+
// Do a deployment with a replacement and removing --no-rollback: this will do a regular rollback deploy
|
|
1825
|
+
phase = '3';
|
|
1826
|
+
await fixture.cdkDeploy('test-rollback', {
|
|
1827
|
+
options: ['--force'],
|
|
1828
|
+
modEnv: { PHASE: phase },
|
|
1829
|
+
verbose: false,
|
|
1830
|
+
});
|
|
1831
|
+
}
|
|
1832
|
+
finally {
|
|
1833
|
+
await fixture.cdkDestroy('test-rollback');
|
|
1834
|
+
}
|
|
1835
|
+
}));
|
|
1721
1836
|
(0, lib_1.integTest)('test cdk rollback --force', (0, lib_1.withSpecificFixture)('rollback-test-app', async (fixture) => {
|
|
1722
1837
|
let phase = '1';
|
|
1723
1838
|
// Should succeed
|
|
@@ -1784,4 +1899,4 @@ async function listChildDirs(parent) {
|
|
|
1784
1899
|
// assert dynamic environments are resolved
|
|
1785
1900
|
expect(output).toContain(`AffectedEnvironments:<aws://${await fixture.aws.account()}/${fixture.aws.region}>`);
|
|
1786
1901
|
}));
|
|
1787
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFNd0M7QUFDeEMsb0RBQThEO0FBQzlELG9EQU02QjtBQUM3QiwwREFBdUQ7QUFDdkQsb0RBQTZFO0FBQzdFLG9EQUFrRjtBQUNsRixtQ0FlbUI7QUFFbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLElBQUEsZUFBUyxFQUNQLGtCQUFrQixFQUNsQixJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1lBQzlFLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FB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QkFDRjtnQkFDRCxhQUFhLEVBQUUsR0FBRzthQUNuQjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxNQUFNLGFBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUIsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVsRixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2hELE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFFO1lBQ04sUUFBUSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1NBQy9CO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRS9ELDJDQUEyQztJQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLCtCQUErQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWhILENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBDcmVhdGVTdGFja0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrc0NvbW1hbmQsXG4gIEdldFRlbXBsYXRlQ29tbWFuZCxcbiAgTGlzdENoYW5nZVNldHNDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7XG4gIENyZWF0ZVJvbGVDb21tYW5kLFxuICBEZWxldGVSb2xlQ29tbWFuZCxcbiAgRGVsZXRlUm9sZVBvbGljeUNvbW1hbmQsXG4gIExpc3RSb2xlUG9saWNpZXNDb21tYW5kLFxuICBQdXRSb2xlUG9saWN5Q29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQgeyBJbnZva2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBDcmVhdGVUb3BpY0NvbW1hbmQsIERlbGV0ZVRvcGljQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xuaW1wb3J0IHsgQXNzdW1lUm9sZUNvbW1hbmQsIEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0IHtcbiAgaW50ZWdUZXN0LFxuICBjbG9uZURpcmVjdG9yeSxcbiAgc2hlbGwsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZSxcbiAgcmV0cnksXG4gIHNsZWVwLFxuICByYW5kb21JbnRlZ2VyLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlLFxuICBSRVNPVVJDRVNfRElSLFxuICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUsXG4gIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlLFxuICByYW5kb21TdHJpbmcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUsXG4gIHdpdGhvdXRCb290c3RyYXAsXG59IGZyb20gJy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmRlc2NyaWJlKCdjaScsICgpID0+IHtcbiAgaW50ZWdUZXN0KFxuICAgICdvdXRwdXQgdG8gc3RkZXJyJyxcbiAgICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7IGNhcHR1cmVTdGRlcnI6IHRydWUsIG9ubHlTdGRlcnI6IHRydWUgfSk7XG4gICAgICBjb25zdCBkaWZmT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdHJveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGRlc3Ryb3lPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkaWZmT3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgfSksXG4gICk7XG4gIGRlc2NyaWJlKCdjaT10cnVlJywgKCkgPT4ge1xuICAgIGludGVnVGVzdChcbiAgICAgICdvdXRwdXQgdG8gc3Rkb3V0JyxcbiAgICAgIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBleGVjT3B0aW9ucyA9IHtcbiAgICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfS05PV05fQlJPS0VOX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfVU5URVNURURfTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgICAgICBKU0lJX1NJTEVOQ0VfV0FSTklOR19ERVBSRUNBVEVEX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCBleGVjT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9FcXVhbCgnJyk7XG4gICAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KGRpZmZPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfSk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnVlBDIExvb2t1cCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGZpeHR1cmUubG9nKCdNYWtpbmcgc3VyZSB3ZSBhcmUgY2xlYW4gYmVmb3JlIHN0YXJ0aW5nLicpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcblxuICAgIGZpeHR1cmUubG9nKCdTZXR0aW5nIHVwOiBjcmVhdGluZyBhIFZQQyB3aXRoIGtub3duIHRhZ3MnKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG5cbiAgICBmaXh0dXJlLmxvZygnVmVyaWZ5aW5nIHdlIGNhbiBub3cgaW1wb3J0IHRoYXQgVlBDJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdJTVBPUlQnIH0gfSk7XG4gIH0pLFxuKTtcblxuLy8gdGVzdGluZyBhIGNvbnN0cnVjdCB3aXRoIGEgYnVpbHRpbiBOb2RlanMgTGFtYmRhIEZ1bmN0aW9uLlxuLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSB0ZXN0aW5nIHRoZSBzMy5CdWNrZXQgY29uc3RydWN0IHdpdGggdGhlXG4vLyBhdXRvRGVsZXRlT2JqZWN0cyBwcm9wIHNldCB0byB0cnVlLCB3aGljaCBjcmVhdGVzIGEgTGFtYmRhIGJhY2tlZFxuLy8gQ3VzdG9tUmVzb3VyY2UuIFNpbmNlIHRoZSBjb21waWxlZCBMYW1iZGEgY29kZSAoZS5nLiBfX2VudHJ5cG9pbnRfXy5qcylcbi8vIGlzIGJ1bmRsZWQgYXMgcGFydCBvZiB0aGUgQ0RLIHBhY2thZ2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0XG4vLyBpbnRyb2R1Y2UgY2hhbmdlcyB0byB0aGUgY29tcGlsZWQgY29kZSB0aGF0IGNvdWxkIHByZXZlbnQgdGhlIExhbWJkYSBmcm9tXG4vLyBleGVjdXRpbmcuIElmIHdlIGRvLCB0aGlzIHRlc3Qgd2lsbCB0aW1lb3V0IGFuZCBmYWlsLlxuaW50ZWdUZXN0KFxuICAnQ29uc3RydWN0IHdpdGggYnVpbHRpbiBMYW1iZGEgZnVuY3Rpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVpbHRpbi1sYW1iZGEtZnVuY3Rpb24nKTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xuICB9KSxcbik7XG5cbi8vIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYXNzZXQgYnVuZGxpbmcgZm9yIGFwcHMgdW5kZXIgYSBzdGFnZSBkb2VzIG5vdCBicmVha1xuaW50ZWdUZXN0KFxuICAnU3RhZ2Ugd2l0aCBidW5kbGVkIExhbWJkYSBmdW5jdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidW5kbGluZy1zdGFnZS9CdW5kbGluZ1N0YWNrJyk7XG4gICAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ1R3byB3YXlzIG9mIHNob3dpbmcgdGhlIHZlcnNpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9uMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsndmVyc2lvbiddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHZlcnNpb24yID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLXZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdCh2ZXJzaW9uMSkudG9FcXVhbCh2ZXJzaW9uMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnVGVybWluYXRpb24gcHJvdGVjdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICd0ZXJtaW5hdGlvbi1wcm90ZWN0aW9uJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUpO1xuXG4gICAgLy8gVHJ5IGEgZGVzdHJveSB0aGF0IHNob3VsZCBmYWlsXG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVzdHJveShzdGFja05hbWUpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBDYW4gdXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBzZXQgZG9lc24ndCBjb250YWluIGNoYW5nZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHsgbW9kRW52OiB7IFRFUk1JTkFUSU9OX1BST1RFQ1RJT046ICdGQUxTRScgfSB9KTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGgnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTEnKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdG9waWM2OTgzMTQ5MToge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMS90b3BpYy9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIG9wdGlvbnM6IFtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSxcbiAgICAgIH0pLFxuICAgICkubm90LnRvRXF1YWwoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhgXG5SdWxlczpcbiAgQ2hlY2tCb290c3RyYXBWZXJzaW9uOmApLFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3Rlc3QtMicpKS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0b3BpYzE1MkQ4NEEzNzoge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMi90b3BpYzEvUmVzb3VyY2VgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcGljMkE0RkI1NDdGOiB7XG4gICAgICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMi9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NzbSBwYXJhbWV0ZXIgcHJvdmlkZXIgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhcbiAgICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlzc2luZy1zc20tcGFyYW1ldGVyJyksICctYycsICd0ZXN0OnNzbS1wYXJhbWV0ZXItbmFtZT0vZG9lcy9ub3QvZXhpc3QnXSxcbiAgICAgICAge1xuICAgICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oJ1NTTSBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBpbiBhY2NvdW50Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnYXV0b21hdGljIG9yZGVyaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJyk7XG5cbiAgICAvLyBEZXN0cm95IHRoZSBwcm92aWRpbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBjb25zdW1pbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ29yZGVyLXByb3ZpZGluZycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyBvcmRlcmluZyB3aXRoIGNvbmN1cnJlbmN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJywgeyBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddIH0pO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdvcmRlci1wcm92aWRpbmcnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICctLWV4Y2x1c2l2ZWx5IHNlbGVjdHMgb25seSBzZWxlY3RlZCBzdGFjaycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSB0aGUgXCJkZXBlbmRzLW9uLWZhaWxlZFwiIHN0YWNrLCB3aXRoIC0tZXhjbHVzaXZlbHkuIEl0IHdpbGwgTk9UIGZhaWwgKGJlY2F1c2VcbiAgICAvLyBvZiAtLWV4Y2x1c2l2ZWx5KSBhbmQgaXQgV0lMTCBjcmVhdGUgYW4gb3V0cHV0IHdlIGNhbiBjaGVjayBmb3IgdG8gY29uZmlybSB0aGF0IGl0IGRpZFxuICAgIC8vIGdldCBkZXBsb3llZC5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVwZW5kcy1vbi1mYWlsZWQnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tZXhjbHVzaXZlbHknLCAnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIG91dHB1dCB0byBzZWUgdGhhdCB0aGUgc3RhY2sgZGVwbG95ZWRcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tZGVwZW5kcy1vbi1mYWlsZWRgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZE15VG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjb250ZXh0IHNldHRpbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbnRleHRrZXk6ICd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2NvbnRleHQnXSkpLnJlc29sdmVzLnRvQ29udGFpbigndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScpO1xuXG4gICAgICAvLyBUZXN0IHRoYXQgZGVsZXRpbmcgdGhlIGNvbnRleHRrZXkgd29ya3NcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG4gICAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydjb250ZXh0J10pKS5yZXNvbHZlcy5ub3QudG9Db250YWluKCd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyk7XG5cbiAgICAgIC8vIFRlc3QgdGhhdCBmb3JjZWQgZGVsZXRlIG9mIHRoZSBjb250ZXh0IGtleSBkb2VzIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydjb250ZXh0JywgJy1mJywgJy0tcmVzZXQnLCAnY29udGV4dGtleSddKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5jb250ZXh0Lmpzb24nKSk7XG4gICAgfVxuICB9KSxcbik7XG5cbi8vIGJvb3RzdHJhcHBpbmcgYWxzbyBwZXJmb3JtcyBzeW50aGVzaXMuIEFzIGl0IHR1cm5zIG91dCwgYm9vdHN0cmFwLXN0YWdlIHN5bnRoZXNpcyBzdGlsbCBjYXVzZXMgdGhlIGxvb2t1cHMgdG8gYmUgY2FjaGVkLCBtZWFuaW5nIHRoYXQgdGhlIGxvb2t1cCBuZXZlclxuLy8gaGFwcGVucyB3aGVuIHdlIGFjdHVhbGx5IGNhbGwgYGNkayBzeW50aCAtLW5vLWxvb2t1cHNgLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGVycm9yIG5ldmVyIGJlaW5nIHRocm93biwgYmVjYXVzZSBpdCBuZXZlciB0cmllcyB0byBsb29rdXAgYW55dGhpbmcuXG4vLyBGaXggdGhpcyBieSBub3QgdHJ5aW5nIHRvIGJvb3RzdHJhcDsgdGhlcmUncyBubyBuZWVkIHRvIGJvb3RzdHJhcCBhbnl3YXksIHNpbmNlIHRoZSB0ZXN0IG5ldmVyIHRyaWVzIHRvIGRlcGxveSBhbnl0aGluZy5cbmludGVnVGVzdChcbiAgJ2NvbnRleHQgaW4gc3RhZ2UgcHJvcGFnYXRlcyB0byB0b3AnLFxuICB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGl0IGVycm9yIHRvIHByb3ZlIHRoYXQgdGhlIGNvbnRleHQgYnViYmxlcyB1cCwgYW5kIGFsc28gdGhhdCB3ZSBjYW4gZmFpbCBvbiBjb21tYW5kXG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1sb29rdXBzJ10sXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbignQ29udGV4dCBsb29rdXBzIGhhdmUgYmVlbiBkaXNhYmxlZCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IC0tbWV0aG9kPWRpcmVjdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9ZGlyZWN0J10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbGwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBhcm5zID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtKicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGJvdGggc3RhY2tzICh0aGVyZSBhcmUgMiBBUk5zIGluIHRoZSBvdXRwdXQpXG4gICAgZXhwZWN0KGFybnMuc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYWxsIGNvbmN1cnJlbnRseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChhcm5zLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkb3VibHkgbmVzdGVkIHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtZG91Ymx5LW5lc3RlZC1zdGFjaycsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KSk7XG5cbmludGVnVGVzdChcbiAgJ25lc3RlZCBzdGFjayB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTVEFDS19OQU1FX1BSRUZJWCBpcyB1c2VkIGluIE15VG9waWNQYXJhbSB0byBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXNcbiAgICAvLyBvZiB0aGlzIHRlc3QgdG8gcnVuIGluIHBhcmFsbGVsLCBvdGhld2lzZSB0aGV5IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHNhbWUgU05TIHRvcGljLlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBNeVRvcGljUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1UaGVyZUlzTm9TcG9vbmBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gICAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRob3V0IGV4ZWN1dGUgYSBuYW1lZCBjaGFuZ2Ugc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9ICdjdXN0b20tY2hhbmdlLXNldC1uYW1lJztcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tZXhlY3V0ZScsICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWVdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy92ZXJpZnkgYSBjaGFuZ2Ugc2V0IHdhcyBjcmVhdGVkIHdpdGggdGhlIHByb3ZpZGVkIG5hbWVcbiAgICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgTGlzdENoYW5nZVNldHNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgY2hhbmdlU2V0cyA9IGNoYW5nZVNldFJlc3BvbnNlLlN1bW1hcmllcyB8fCBbXTtcbiAgICBleHBlY3QoY2hhbmdlU2V0cy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGNoYW5nZVNldHNbMF0uQ2hhbmdlU2V0TmFtZSkudG9FcXVhbChjaGFuZ2VTZXROYW1lKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0c1swXS5TdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NlY3VyaXR5IHJlbGF0ZWQgY2hhbmdlcyB3aXRob3V0IGEgQ0xJIGFyZSBleHBlY3RlZCB0byBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gcmVkaXJlY3QgL2Rldi9udWxsIHRvIHN0ZGluLCB3aGljaCBtZWFucyB0aGVyZSB3aWxsIG5vdCBiZSB0dHkgYXR0YWNoZWRcbiAgICAvLyBzaW5jZSB0aGlzIHN0YWNrIGluY2x1ZGVzIHNlY3VyaXR5LXJlbGF0ZWQgY2hhbmdlcywgdGhlIGRlcGxveW1lbnQgc2hvdWxkXG4gICAgLy8gaW1tZWRpYXRlbHkgZmFpbCBiZWNhdXNlIHdlIGNhbid0IGNvbmZpcm0gdGhlIGNoYW5nZXNcbiAgICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgICBvcHRpb25zOiBbJzwnLCAnL2Rldi9udWxsJ10sIC8vIEg0eCwgdGhpcyBvbmx5IHdvcmtzIGJlY2F1c2UgSSBoYXBwZW4gdG8ga25vdyB3ZSBwYXNzIHNoZWxsOiB0cnVlLlxuICAgICAgICBuZXZlclJlcXVpcmVBcHByb3ZhbDogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIC8vIEVuc3VyZSBzdGFjayB3YXMgbm90IGRlcGxveWVkXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aWxkY2FyZCB3aXRoIG91dHB1dHMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShbJ291dHB1dHMtdGVzdC0qJ10sIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMU15VG9waWNgLFxuICAgICAgfSxcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMk15T3RoZXJUb3BpY2AsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd1cGRhdGUgdG8gc3RhY2sgaW4gUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgd2lsbCBkZWxldGUgc3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBvbmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QGF3d2BdLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdwYXJhbS10ZXN0LTEnKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrSWQ7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdST0xMQkFDS19DT01QTEVURScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IG5ld1N0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXdTdGFja1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IG5ld1N0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2tBcm4pLm5vdC50b0VxdWFsKG5ld1N0YWNrQXJuKTsgLy8gbmV3IHN0YWNrIHdhcyBjcmVhdGVkXG4gICAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIGV4cGVjdChuZXdTdGFja1Jlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1hbGxnb29kYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzdGFjayBpbiBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgY2FuIGJlIHVwZGF0ZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9bmljZWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIGJhZCBwYXJhbWV0ZXIgbmFtZSB3aXRoIEAgd2lsbCBwdXQgc3RhY2sgaW50byBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEVcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUBhd3dgXSxcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHdpbGRjYXJkIGFuZCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtKicsIHtcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTE6VG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTI6T3RoZXJUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoYXRzTXlTcG90YCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6RGlzcGxheU5hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUhleVRoZXJlYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6T3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QW5vdGhlck9uZWAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMgbXVsdGknLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwYXJhbVZhbDEgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYDtcbiAgICBjb25zdCBwYXJhbVZhbDIgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH09amFnc2hlbWFzaGA7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwxfWAsICctLXBhcmFtZXRlcnMnLCBgT3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwyfWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnRGlzcGxheU5hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogcGFyYW1WYWwxLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdPdGhlckRpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMixcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIGZsYWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC10b3BpYy1mbGFnYDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgICAgb3B0aW9uczogWyctLW5vdGlmaWNhdGlvbi1hcm5zJywgdG9waWNBcm5dLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICAgIGNvbnN0IGRlc2NyaWJlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKFxuICAgICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgICBUb3BpY0FybjogdG9waWNBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIHByb3AnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdG9waWNOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtdG9waWMtcHJvcGA7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChuZXcgQ3JlYXRlVG9waWNDb21tYW5kKHsgTmFtZTogdG9waWNOYW1lIH0pKTtcbiAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbm90aWZpY2F0aW9uLWFybi1wcm9wJyk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB0aGUgc3RhY2sgd2UgZGVwbG95ZWQgaGFzIG91ciBub3RpZmljYXRpb24gQVJOXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm4tcHJvcCcpLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXS5Ob3RpZmljYXRpb25BUk5zKS50b0VxdWFsKFt0b3BpY0Fybl0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVRvcGljQ29tbWFuZCh7XG4gICAgICAgIFRvcGljQXJuOiB0b3BpY0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn0pKTtcblxuLy8gTk9URTogdGhpcyBkb2Vzbid0IGN1cnJlbnRseSB3b3JrIHdpdGggbW9kZXJuLXN0eWxlIHN5bnRoZXNpcywgYXMgdGhlIGJvb3RzdHJhcFxuLy8gcm9sZSBieSBkZWZhdWx0IHdpbGwgbm90IGhhdmUgcGVybWlzc2lvbiB0byBpYW06UGFzc1JvbGUgdGhlIGNyZWF0ZWQgcm9sZS5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHJvbGUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBpZiAoZml4dHVyZS5wYWNrYWdlcy5tYWpvclZlcnNpb24oKSAhPT0gJzEnKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cbiAgICB9XG5cbiAgICBjb25zdCByb2xlTmFtZSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LXJvbGVgO1xuXG4gICAgYXdhaXQgZGVsZXRlUm9sZSgpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgIG5ldyBDcmVhdGVSb2xlQ29tbWFuZCh7XG4gICAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgICAgIFByaW5jaXBhbDogeyBTZXJ2aWNlOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbScgfSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAgICAgICBQcmluY2lwYWw6IHsgQVdTOiAoYXdhaXQgZml4dHVyZS5hd3Muc3RzLnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpKS5Bcm4gfSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoIWNyZWF0ZVJlc3BvbnNlLlJvbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9sZSBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50ISEnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZVJlc3BvbnNlLlJvbGUuQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvbGUgYXJuIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQhIScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVBcm4gPSBjcmVhdGVSZXNwb25zZS5Sb2xlLkFybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQoXG4gICAgICAgIG5ldyBQdXRSb2xlUG9saWN5Q29tbWFuZCh7XG4gICAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICAgIFBvbGljeU5hbWU6ICdEZWZhdWx0UG9saWN5JyxcbiAgICAgICAgICBQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBY3Rpb246ICcqJyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgcmV0cnkoZml4dHVyZS5vdXRwdXQsICdUcnlpbmcgdG8gYXNzdW1lIGZyZXNoIHJvbGUnLCByZXRyeS5mb3JTZWNvbmRzKDMwMCksIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3Muc3RzLnNlbmQoXG4gICAgICAgICAgbmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgICAgICAgIFJvbGVBcm46IHJvbGVBcm4sXG4gICAgICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd0ZXN0aW5nJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbiBwcmluY2lwbGUsIHRoZSByb2xlIGhhcyByZXBsaWNhdGVkIGZyb20gJ3VzLWVhc3QtMScgdG8gd2hlcmV2ZXIgd2UncmUgdGVzdGluZy5cbiAgICAgIC8vIEdpdmUgaXQgYSBsaXR0bGUgbW9yZSBzbGVlcCB0byBtYWtlIHN1cmUgQ2xvdWRGb3JtYXRpb24gaXMgbm90IGhpdHRpbmcgYSBib3hcbiAgICAgIC8vIHRoYXQgZG9lc24ndCBoYXZlIGl0IHlldC5cbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcm9sZS1hcm4nLCByb2xlQXJuXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbW1lZGlhdGVseSBkZWxldGUgdGhlIHN0YWNrIGFnYWluIGJlZm9yZSB3ZSBkZWxldGUgdGhlIHJvbGUuXG4gICAgICAvL1xuICAgICAgLy8gU2luY2Ugcm9sZXMgYXJlIHN0aWNreSwgaWYgd2UgZGVsZXRlIHRoZSByb2xlIGJlZm9yZSB0aGUgc3RhY2ssIHN1YnNlcXVlbnQgRGVsZXRlU3RhY2tcbiAgICAgIC8vIG9wZXJhdGlvbnMgd2lsbCBmYWlsIHdoZW4gQ2xvdWRGb3JtYXRpb24gdHJpZXMgdG8gYXNzdW1lIHRoZSByb2xlIHRoYXQncyBhbHJlYWR5IGdvbmUuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBkZWxldGVSb2xlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUm9sZSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQobmV3IExpc3RSb2xlUG9saWNpZXNDb21tYW5kKHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLlBvbGljeU5hbWVzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2xpY3kgbmFtZXMgY2Fubm90IGJlIHVuZGVmaW5lZCBmb3IgZGVsZXRlUm9sZSgpIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHBvbGljeU5hbWUgb2YgcmVzcG9uc2UuUG9saWN5TmFtZXMpIHtcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgICAgICAgIG5ldyBEZWxldGVSb2xlUG9saWN5Q29tbWFuZCh7XG4gICAgICAgICAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgICAgICAgICAgUG9saWN5TmFtZTogcG9saWN5TmFtZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQobmV3IERlbGV0ZVJvbGVDb21tYW5kKHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5tZXNzYWdlLmluZGV4T2YoJ2Nhbm5vdCBiZSBmb3VuZCcpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcblxuLy8gVE9ETyBhZGQgbW9yZSB0ZXN0aW5nIHRoYXQgZW5zdXJlcyB0aGUgc3ltbWV0cnkgb2YgdGhlIGdlbmVyYXRlZCBjb25zdHJ1Y3RzIHRvIHRoZSByZXNvdXJjZXMuXG5bJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2NzaGFycCcsICdqYXZhJ10uZm9yRWFjaCgobGFuZ3VhZ2UpID0+IHtcbiAgaW50ZWdUZXN0KFxuICAgIGBjZGsgbWlncmF0ZSAke2xhbmd1YWdlfSBkZXBsb3lzIHN1Y2Nlc3NmdWxseWAsXG4gICAgd2l0aENES01pZ3JhdGVGaXh0dXJlKGxhbmd1YWdlLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgaWYgKGxhbmd1YWdlID09PSAncHl0aG9uJykge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsncGlwJywgJ2luc3RhbGwnLCAnLXInLCAncmVxdWlyZW1lbnRzLnR4dCddKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShcbiAgICAgICAgZml4dHVyZS5zdGFja05hbWVQcmVmaXgsXG4gICAgICAgIHsgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgpO1xuICAgIH0pLFxuICApO1xufSk7XG5cbmludGVnVGVzdChcbiAgJ2NkayBtaWdyYXRlIGdlbmVyYXRlcyBtaWdyYXRlLmpzb24nLFxuICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUoJ3R5cGVzY3JpcHQnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG1pZ3JhdGVGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnbWlncmF0ZS5qc29uJyksICd1dGY4Jyk7XG4gICAgY29uc3QgZXhwZWN0ZWRGaWxlID0gYHtcbiAgICBcXFwiLy9cXFwiOiBcXFwiVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBjZGsgbWlncmF0ZS4gSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgZGVwbG95bWVudCBvZiB0aGlzIGFwcCB0byB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIG9yaWdpbmFsIHJlc291cmNlcy5cXFwiLFxuICAgIFxcXCJTb3VyY2VcXFwiOiBcXFwibG9jYWxmaWxlXFxcIlxuICB9YDtcbiAgICBleHBlY3QoSlNPTi5wYXJzZShtaWdyYXRlRmlsZSkpLnRvRXF1YWwoSlNPTi5wYXJzZShleHBlY3RlZEZpbGUpKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgpO1xuICB9KSxcbik7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gd2l0aCBBTkQvT1IgZmlsdGVycyBjb3JyZWN0bHkgZmlsdGVycyByZXNvdXJjZXMnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjogeyBTQU1QTEVfUkVTT1VSQ0VTOiAnMScgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OlNOUzo6VG9waWMsdGFnLWtleT10YWcxJywgJ3R5cGU9QVdTOjpTUVM6OlF1ZXVlLHRhZy1rZXk9dGFnMyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG4vLyAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICAgIGNvbnN0IHJlc291cmNlTmFtZXMgPSBbXTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc3BvbnNlLlJlc291cmNlcyB8fCBbXSkge1xuLy8gICAgICAgaWYgKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRldG9waWMxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgICAgZXhwZWN0KHJlc291cmNlTmFtZXMuc29tZShlbGUgPT4gZWxlICYmIGVsZS5pbmNsdWRlcygnbWlncmF0ZXF1ZXVlMScpKSkudG9CZVRydXRoeSgpO1xuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gZm9yIHJlc291cmNlcyB3aXRoIFdyaXRlIE9ubHkgUHJvcGVydGllcyBnZW5lcmF0ZXMgd2FybmluZ3MnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjoge1xuLy8gICAgICAgTEFNQkRBX1JFU09VUkNFUzogJzEnLFxuLy8gICAgIH0sXG4vLyAgIH0pO1xuLy8gICBhd2FpdCBmaXh0dXJlLmNkayhcbi8vICAgICBbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgc3RhY2tOYW1lLCAnLS1mcm9tLXNjYW4nLCAnbmV3JywgJy0tZmlsdGVyJywgJ3R5cGU9QVdTOjpMYW1iZGE6OkZ1bmN0aW9uLHRhZy1rZXk9bGFtYmRhLXRhZyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG5cbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQgJiYgcmVzb3VyY2UuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuLy8gICAgICAgICByZXNvdXJjZU5hbWVzLnB1c2gocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBmaXh0dXJlLmxvZyhgUmVzb3VyY2VzOiAke3Jlc291cmNlTmFtZXN9YCk7XG4vLyAgICAgY29uc3QgcmVhZG1lUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgc3RhY2tOYW1lLCAnUkVBRE1FLm1kJyk7XG4vLyAgICAgY29uc3QgcmVhZG1lID0gYXdhaXQgZnMucmVhZEZpbGUocmVhZG1lUGF0aCwgJ3V0ZjgnKTtcbi8vICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oJyMjIFdhcm5pbmdzJyk7XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZU5hbWUgb2YgcmVzb3VyY2VOYW1lcykge1xuLy8gICAgICAgZXhwZWN0KHJlYWRtZSkudG9Db250YWluKGAjIyMgJHtyZXNvdXJjZU5hbWV9YCk7XG4vLyAgICAgfVxuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cblsndHlwZXNjcmlwdCcsICdweXRob24nLCAnY3NoYXJwJywgJ2phdmEnXS5mb3JFYWNoKChsYW5ndWFnZSkgPT4ge1xuICBpbnRlZ1Rlc3QoXG4gICAgYGNkayBtaWdyYXRlIC0tZnJvbS1zdGFjayBjcmVhdGVzIGRlcGxveWFibGUgJHtsYW5ndWFnZX0gYXBwYCxcbiAgICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgY29uc3QgbWlncmF0ZVN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IENyZWF0ZVN0YWNrQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgICAgIFRlbXBsYXRlQm9keTogYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncmVzb3VyY2VzJywgJ3RlbXBsYXRlcycsICdzcXMtdGVtcGxhdGUuanNvbicpLFxuICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBzdGFja1N0YXR1cyA9ICdDUkVBVEVfSU5fUFJPR1JFU1MnO1xuICAgICAgICB3aGlsZSAoc3RhY2tTdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICAgICAgc3RhY2tTdGF0dXMgPSBhd2FpdCAoXG4gICAgICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUgfSkpXG4gICAgICAgICAgKS5TdGFja3M/LlswXS5TdGFja1N0YXR1cyE7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIG1pZ3JhdGVTdGFja05hbWUsICctLWZyb20tc3RhY2snXSwge1xuICAgICAgICAgIG1vZEVudjogeyBNSUdSQVRFX0lOVEVHX1RFU1Q6ICcxJyB9LFxuICAgICAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2QnLCBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIG1pZ3JhdGVTdGFja05hbWUpXSk7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnZGVwbG95JywgbWlncmF0ZVN0YWNrTmFtZV0sIHtcbiAgICAgICAgICBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSxcbiAgICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX0NPTVBMRVRFJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcbn0pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdlIGNhbiBtYWtlIGl0IGZhaWwgYnkgcGFzc2luZyAtLWZhaWxcbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2VuYWJsZURpZmZOb0ZhaWwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiBmYWxzZSwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogZmFsc2UsIGVuYWJsZURpZmZOb0ZhaWw6IHRydWUgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZEZhaWxXaXRoKHsgZmFpbDogdHJ1ZSwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZEZhaWxXaXRoKHsgZmFpbDogdHJ1ZSwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB1bmRlZmluZWQsIGVuYWJsZURpZmZOb0ZhaWw6IGZhbHNlIH0pO1xuICAgIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRTdWNjZWVkV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVzb2x2ZXMubm90LnRvVGhyb3dFcnJvcigpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRGYWlsV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmYocHJvcHM6IERpZmZQYXJhbWV0ZXJzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHVwZGF0ZUNvbnRleHQocHJvcHMuZW5hYmxlRGlmZk5vRmFpbCk7XG4gICAgICBjb25zdCBmbGFnID0gcHJvcHMuZmFpbCAhPSBudWxsID8gKHByb3BzLmZhaWwgPyAnLS1mYWlsJyA6ICctLW5vLWZhaWwnKSA6ICcnO1xuXG4gICAgICByZXR1cm4gZml4dHVyZS5jZGsoWydkaWZmJywgZmxhZywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgICBjZGtKc29uLmNvbnRleHQgPSB7XG4gICAgICAgIC4uLmNka0pzb24uY29udGV4dCxcbiAgICAgICAgJ2F3cy1jZGs6ZW5hYmxlRGlmZk5vRmFpbCc6IGVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICB9O1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICB9XG5cbiAgICB0eXBlIERpZmZQYXJhbWV0ZXJzID0geyBmYWlsPzogYm9vbGVhbjsgZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbiB9O1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCBvbiBtdWx0aXBsZSBzdGFja3MgZXhpdHMgd2l0aCBlcnJvciBpZiBhbnkgb2YgdGhlIHN0YWNrcyBjb250YWlucyBhIGRpZmYnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInKTtcbiAgICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gICAgLy8gV0hFTiAvIFRIRU5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCB3aXRoIG11bHRpcGxlIHN0YWNrIGV4aXRzIHdpdGggaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdIRU4gLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiB3aXRoIGxhcmdlIGNoYW5nZXNldCBkb2VzIG5vdCBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU4gLSBhZGRpbmcgYW4gYWRkaXRpb25hbCByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICAgIGV4cGVjdChkaWZmKS50b01hdGNoKC9Bc3N1bWluZyByb2xlIC4qZmlsZS1wdWJsaXNoaW5nLXJvbGUvKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIHdpdGggbGFyZ2UgY2hhbmdlc2V0IGFuZCBjdXN0b20gdG9vbGtpdCBzdGFjayBuYW1lIGFuZCBxdWFsaWZpZXIgZG9lcyBub3QgZmFpbCcsIHdpdGhvdXRCb290c3RyYXAoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gQm9vdHN0cmFwcGluZyB3aXRoIGN1c3RvbSB0b29sa2l0IHN0YWNrIG5hbWUgYW5kIHF1YWxpZmllclxuICBjb25zdCBxdWFsaWZpZXIgPSAnYWJjMTExMSc7XG4gIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSAnY3VzdG9tLXN0YWNrMic7XG4gIGF3YWl0IGZpeHR1cmUuY2RrQm9vdHN0cmFwTW9kZXJuKHtcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgcXVhbGlmaWVyOiBxdWFsaWZpZXIsXG4gIH0pO1xuXG4gIC8vIERlcGxveWluZyBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2lhbS1yb2xlcycsIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgIH0sXG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtxdWFsaWZpZXJ9YCxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOIC0gYWRkaW5nIGEgcm9sZSB3aXRoIGEgdG9uIG9mIG1ldGFkYXRhIHRvIGNyZWF0ZSBhIGxhcmdlIGRpZmZcbiAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXRvb2xraXQtc3RhY2stbmFtZScsIHRvb2xraXRTdGFja05hbWUsICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtxdWFsaWZpZXJ9YCwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpYW0tcm9sZXMnKV0sIHtcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgIG1vZEVudjoge1xuICAgICAgTlVNQkVSX09GX1JPTEVTOiAnMicsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gQXNzZXJ0IHRoYXQgdGhlIENMSSBhc3N1bWVzIHRoZSBmaWxlIHB1Ymxpc2hpbmcgcm9sZTpcbiAgZXhwZWN0KGRpZmYpLnRvTWF0Y2goL0Fzc3VtaW5nIHJvbGUgLipmaWxlLXB1Ymxpc2hpbmctcm9sZS8pO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1wZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkaWZmJyxcbiAgICAgICctLXNlY3VyaXR5LW9ubHknLFxuICAgICAgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpLFxuICAgIF0pO1xuICAgIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAg4pSCIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHtwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5fSDilIIgYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUg4pSCIHRlc3ROYW1lICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlOiB7IOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCICAgTmFtZTogd2h5LCBQYXRoOiAvaG93LyAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgIOKUgiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG5gO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigndGVzdE5hbWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25zQm91bmRhcnknKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U6IHsnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiB3aHksIFBhdGg6IC9ob3cvJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignfScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tcGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeSBpbmZvcm1hdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbXG4gICAgICAnZGlmZicsXG4gICAgICAnLS1zZWN1cml0eS1vbmx5JyxcbiAgICAgIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKSxcbiAgICBdKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICAgICAgICAgICAg4pSCIFBlcm1pc3Npb25TZXQgbmFtZSDilIIgUGVybWlzc2lvbnNCb3VuZGFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke3Blcm1pc3Npb24tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3l9ICAgIOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgbmljZVdvcmsgICAgICAgICAgIOKUgiBNYW5hZ2VkUG9saWN5QXJuOiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzIOKUgiBOYW1lOiBmb3JTU08sIFBhdGg6ICAgICAgICAgICAgIOKUglxuYDtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignbmljZVdvcmsnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25zQm91bmRhcnknKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdNYW5hZ2VkUG9saWN5QXJuOiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignTmFtZTogZm9yU1NPLCBQYXRoOicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYXNzaWdubWVudCBpbmZvcm1hdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0QXJuICAgICAgICDilIIgUHJpbmNpcGFsSWQgICAgICAgICAgICAgICAgICDilIIgUHJpbmNpcGFsVHlwZSDilIIgVGFyZ2V0SWQgICAgIOKUgiBUYXJnZXRUeXBlICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2Fzc2lnbm1lbnR9IOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUg4pSCIDExMTExMTExLTIyMjItMzMzMy00NDQ0LXRlc3Qg4pSCIFVTRVIgICAgICAgICAg4pSCIDExMTExMTExMTExMSDilIIgQVdTX0FDQ09VTlQg4pSCXG4gICDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbmA7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhc3NpZ25tZW50Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0QXJuJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1ByaW5jaXBhbElkJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtdGVzdCcpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsVHlwZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1VTRVInKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldElkJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTExMTExJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdUYXJnZXRUeXBlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQVdTX0FDQ09VTlQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLWFjY2Vzcy1jb250cm9sIGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICDilIIgQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMgICAgICAgICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZ30g4pSCIGFybjphd3M6dGVzdDp0ZXN0dmFsdWUg4pSCIEtleTogZmlyc3QsIFZhbHVlczogW2FdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHNlY29uZCwgVmFsdWVzOiBbYl0gICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogZm91cnRoLCBWYWx1ZXM6IFtkXSAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBzaXh0aCwgVmFsdWVzOiBbZl0gICAgICAgICDilIJcbiAgIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuYDtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZycpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpcnN0LCBWYWx1ZXM6IFthXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogc2Vjb25kLCBWYWx1ZXM6IFtiXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogdGhpcmQsIFZhbHVlczogW2NdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmb3VydGgsIFZhbHVlczogW2RdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmaWZ0aCwgVmFsdWVzOiBbZV0nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IHNpeHRoLCBWYWx1ZXM6IFtmXScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28gYWNjZXNzIGNvbnRyb2wgY29uZmlnJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tYXNzaWdubWVudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGNoYW5nZXMgYXJlIHByZXNlbnQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpXSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgICdleGl0ZWQgd2l0aCBlcnJvcicsXG4gICAgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gIFwiY2RrIGRpZmYgLS1xdWlldCBkb2VzIG5vdCBwcmludCAnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycgbWVzc2FnZSBmb3Igc3RhY2tzIHdoaWNoIGhhdmUgbm8gZGlmZmVyZW5jZXNcIixcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXF1aWV0JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdTdGFjayB0ZXN0LTEnKTtcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBzdGFjayB3aXRoIGRvY2tlciBhc3NldCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkb2NrZXInKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYW5kIHRlc3Qgc3RhY2sgd2l0aCBsYW1iZGEgYXNzZXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEnLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGxhbWJkYUFybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcbiAgICBpZiAobGFtYmRhQXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RhY2sgZGlkIG5vdCBoYXZlIGV4cGVjdGVkIExhbWJkYSBBUk4gb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5hd3MubGFtYmRhLnNlbmQoXG4gICAgICBuZXcgSW52b2tlQ29tbWFuZCh7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogbGFtYmRhQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvdXRwdXQuUGF5bG9hZD8udHJhbnNmb3JtVG9TdHJpbmcoKSkpLnRvQ29udGFpbignZGVhciBhc3NldCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBscycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2xzJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICAgICdjb25kaXRpb25hbC1yZXNvdXJjZScsXG4gICAgICAnZG9ja2VyJyxcbiAgICAgICdkb2NrZXItd2l0aC1jdXN0b20tZmlsZScsXG4gICAgICAnZmFpbGVkJyxcbiAgICAgICdpYW0tdGVzdCcsXG4gICAgICAnbGFtYmRhJyxcbiAgICAgICdtaXNzaW5nLXNzbS1wYXJhbWV0ZXInLFxuICAgICAgJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAnb3V0cHV0cy10ZXN0LTEnLFxuICAgICAgJ291dHB1dHMtdGVzdC0yJyxcbiAgICAgICdwYXJhbS10ZXN0LTEnLFxuICAgICAgJ3BhcmFtLXRlc3QtMicsXG4gICAgICAncGFyYW0tdGVzdC0zJyxcbiAgICAgICd0ZXJtaW5hdGlvbi1wcm90ZWN0aW9uJyxcbiAgICAgICd0ZXN0LTEnLFxuICAgICAgJ3Rlc3QtMicsXG4gICAgICAnd2l0aC1uZXN0ZWQtc3RhY2snLFxuICAgICAgJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLFxuICAgICAgJ29yZGVyLWNvbnN1bWluZycsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrKSk7XG4gICAgfVxuICB9KSxcbik7XG5cbi8qKlxuICogVHlwZSB0byBzdG9yZSBzdGFjayBkZXBlbmRlbmNpZXMgcmVjdXJzaXZlbHlcbiAqL1xudHlwZSBEZXBlbmRlbmN5RGV0YWlscyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdO1xufTtcblxudHlwZSBTdGFja0RldGFpbHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXTtcbn07XG5cbmludGVnVGVzdChcbiAgJ2NkayBscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2xzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd0ZXN0LTEnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdvcmRlci1jb25zdW1pbmcnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3dpdGgtbmVzdGVkLXN0YWNrJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbGlzdC1zdGFja3MnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzL0RlcGVuZGVudFN0YWNrJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICdsaXN0LXN0YWNrcy9EZXBlbmRlbnRTdGFjay9Jbm5lckRlcGVuZGVudFN0YWNrJyxcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2xpc3QtbXVsdGlwbGUtZGVwZW5kZW50LXN0YWNrcy9EZXBlbmRlbnRTdGFjazEnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzL0RlcGVuZGVudFN0YWNrMicsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN0YWNrRGVwZW5kZW5jaWVzKHN0YWNrOiBTdGFja0RldGFpbHMpIHtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suaWQpO1xuXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZURlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lEZXRhaWxzW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZGVwZW5kZW5jeS5pZCk7XG4gICAgICAgICAgaWYgKGRlcGVuZGVuY3kuZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRGVwZW5kZW5jaWVzKGRlcGVuZGVuY3kuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YWNrLmRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbGlkYXRlRGVwZW5kZW5jaWVzKHN0YWNrLmRlcGVuZGVuY2llcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBleHBlY3RlZFN0YWNrcykge1xuICAgICAgdmFsaWRhdGVTdGFja0RlcGVuZGVuY2llcyhzdGFjayk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbiAtLWxvbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbiAtLWxvbmcnXSwgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGV4cGVjdGVkU3RhY2tzID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgIG5hbWU6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICBlbnZpcm9tZW50OiB7XG4gICAgICAgICAgYWNjb3VudDogJ3Vua25vd24tYWNjb3VudCcsXG4gICAgICAgICAgcmVnaW9uOiAndW5rbm93bi1yZWdpb24nLFxuICAgICAgICAgIG5hbWU6ICdhd3M6Ly91bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nLFxuICAgICAgICB9LFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdvcmRlci1jb25zdW1pbmcnLFxuICAgICAgICBuYW1lOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgICAgZW52aXJvbWVudDoge1xuICAgICAgICAgIGFjY291bnQ6ICd1bmtub3duLWFjY291bnQnLFxuICAgICAgICAgIHJlZ2lvbjogJ3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgICBuYW1lOiAnYXdzOi8vdW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBleHBlY3RlZFN0YWNrcykge1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2suaWQpKTtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrLm5hbWUpKTtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suZW52aXJvbWVudC5hY2NvdW50KTtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suZW52aXJvbWVudC5uYW1lKTtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suZW52aXJvbWVudC5yZWdpb24pO1xuICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHN0YWNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShkZXBlbmRlbmN5LmlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3N5bnRoaW5nIGEgc3RhZ2Ugd2l0aCBlcnJvcnMgbGVhZHMgdG8gZmFpbHVyZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnXSwge1xuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtZXJyb3JzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ1RoaXMgaXMgYW4gZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzeW50aGluZyBhIHN0YWdlIHdpdGggZXJyb3JzIGNhbiBiZSBzdXBwcmVzc2VkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsICctLW5vLXZhbGlkYXRpb24nXSwge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtZXJyb3JzJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc3ludGggLS1xdWlldCBjYW4gYmUgc3BlY2lmaWVkIGluIGNkay5qc29uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgbGV0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICAgIGNka0pzb24gPSB7XG4gICAgICAuLi5jZGtKc29uLFxuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgfTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbikpO1xuICAgIGNvbnN0IHN5bnRoT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgICBleHBlY3Qoc3ludGhPdXRwdXQpLm5vdC50b0NvbnRhaW4oJ3RvcGljMTUyRDg0QTM3Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHN0YWNrIHdpdGhvdXQgcmVzb3VyY2UnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIHdpdGhvdXQgcmVzb3VyY2VzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJywgeyBtb2RFbnY6IHsgTk9fUkVTT1VSQ0U6ICdUUlVFJyB9IH0pO1xuXG4gICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBzdWNjZWVkZWQgYnV0IG5vdCBkZXBsb3llZCB0aGUgc3RhY2suXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdjb25kaXRpb25hbC1yZXNvdXJjZScpIH0pLFxuICAgICAgKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnY29uZGl0aW9uYWwtcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QnKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aCByZXNvdXJjZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKTtcblxuICAgIC8vIFRoZW4gYWdhaW4gV0lUSE9VVCByZXNvdXJjZXMgKHRoaXMgc2hvdWxkIGRlc3Ryb3kgdGhlIHN0YWNrKVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdjb25kaXRpb25hbC1yZXNvdXJjZScsIHsgbW9kRW52OiB7IE5PX1JFU09VUkNFOiAnVFJVRScgfSB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKSB9KSxcbiAgICAgICksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2NvbmRpdGlvbmFsLXJlc291cmNlIGRvZXMgbm90IGV4aXN0Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IG5vIHN0YWNrcyB3aXRoIC0taWdub3JlLW5vLXN0YWNrcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIGVtcHR5IGFycmF5IGZvciBzdGFjayBuYW1lc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KFtdLCB7XG4gICAgICBvcHRpb25zOiBbJy0taWdub3JlLW5vLXN0YWNrcyddLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtbm8tc3RhY2tzJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IG5vIHN0YWNrcyBlcnJvcicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIGVtcHR5IGFycmF5IGZvciBzdGFjayBuYW1lc1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KFtdLCB7XG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtbm8tc3RhY2tzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ0lBTSBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpYW0tdGVzdCcpXSk7XG5cbiAgICAvLyBSb3VnaGx5IGNoZWNrIGZvciBhIHRhYmxlIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vIOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC3ilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICAvLyDilIIgICDilIIgUmVzb3VyY2UgICAgICAgIOKUgiBFZmZlY3Qg4pSCIEFjdGlvbiAgICAgICAgIOKUgiBQcmluY2lwYWwgICAgICAgICAgICAgICAgICAgICDilIIgQ29uZGl0aW9uIOKUglxuICAgIC8vIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAgIC8vIOKUgiArIOKUgiAke1NvbWVSb2xlLkFybn0g4pSCIEFsbG93ICDilIIgc3RzOkFzc3VtZVJvbGUg4pSCIFNlcnZpY2U6ZWMyLmFtYXpvbmF3cy5jb20gICAgIOKUgiAgICAgICAgICAg4pSCXG4gICAgLy8g4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5cbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJyR7U29tZVJvbGUuQXJufScpO1xuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ2VjMi5hbWF6b25hd3MuY29tJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZmFzdCBkZXBsb3knLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyB3ZSBhcmUgdXNpbmcgYSBzdGFjayB3aXRoIGEgbmVzdGVkIHN0YWNrIGJlY2F1c2UgQ0ZOIHdpbGwgYWx3YXlzIGF0dGVtcHQgdG9cbiAgICAvLyB1cGRhdGUgYSBuZXN0ZWQgc3RhY2ssIHdoaWNoIHdpbGwgYWxsb3cgdXMgdG8gdmVyaWZ5IHRoYXQgdXBkYXRlcyBhcmUgYWN0dWFsbHlcbiAgICAvLyBza2lwcGVkIHVubGVzcyAtLWZvcmNlIGlzIHNwZWNpZmllZC5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gICAgY29uc3QgY2hhbmdlU2V0MSA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzYW1lIHN0YWNrIGFnYWluLCB0aGVyZSBzaG91bGQgYmUgbm8gbmV3IGNoYW5nZSBzZXQgY3JlYXRlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycpO1xuICAgIGNvbnN0IGNoYW5nZVNldDIgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCkudG9FcXVhbChjaGFuZ2VTZXQxLkNoYW5nZVNldElkKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgYWdhaW4gd2l0aCAtLWZvcmNlLCBub3cgd2Ugc2hvdWxkIGNyZWF0ZSBhIGNoYW5nZXNldFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgb3B0aW9uczogWyctLWZvcmNlJ10gfSk7XG4gICAgY29uc3QgY2hhbmdlU2V0MyA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXQzLkNoYW5nZVNldElkKS5ub3QudG9FcXVhbChjaGFuZ2VTZXQyLkNoYW5nZVNldElkKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgYWdhaW4gd2l0aCB0YWdzLCBleHBlY3RlZCB0byBjcmVhdGUgYSBuZXcgY2hhbmdlc2V0XG4gICAgLy8gZXZlbiB0aG91Z2ggdGhlIHJlc291cmNlcyBkaWRuJ3QgY2hhbmdlLlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgb3B0aW9uczogWyctLXRhZ3MnLCAna2V5PXZhbHVlJ10gfSk7XG4gICAgY29uc3QgY2hhbmdlU2V0NCA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXQ0LkNoYW5nZVNldElkKS5ub3QudG9FcXVhbChjaGFuZ2VTZXQzLkNoYW5nZVNldElkKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdENoYW5nZVNldCgpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBzdGFja0FybiB9KSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLlN0YWNrcz8uWzBdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBnZXQgYSBDaGFuZ2VTZXQgYXQgYWxsJyk7XG4gICAgICB9XG4gICAgICBmaXh0dXJlLmxvZyhgRm91bmQgQ2hhbmdlIFNldCAke3Jlc3BvbnNlLlN0YWNrcz8uWzBdLkNoYW5nZVNldElkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLlN0YWNrcz8uWzBdO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdmYWlsZWQgZGVwbG95IGRvZXMgbm90IGhhbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyB0aGlzIHdpbGwgaGFuZyBpZiB3ZSBpbnRyb2R1Y2UgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82NDAzIGFnYWluLlxuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0RlcGxveSgnZmFpbGVkJykpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjYW4gc3RpbGwgbG9hZCBvbGQgYXNzZW1ibGllcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGN4QXNtRGlyID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLWludGVnLWN4Jyk7XG5cbiAgICBjb25zdCB0ZXN0QXNzZW1ibGllc0RpcmVjdG9yeSA9IHBhdGguam9pbihSRVNPVVJDRVNfRElSLCAnY2xvdWQtYXNzZW1ibGllcycpO1xuICAgIGZvciAoY29uc3QgYXNtZGlyIG9mIGF3YWl0IGxpc3RDaGlsZERpcnModGVzdEFzc2VtYmxpZXNEaXJlY3RvcnkpKSB7XG4gICAgICBmaXh0dXJlLmxvZyhgQVNTRU1CTFkgJHthc21kaXJ9YCk7XG4gICAgICBhd2FpdCBjbG9uZURpcmVjdG9yeShhc21kaXIsIGN4QXNtRGlyKTtcblxuICAgICAgLy8gU29tZSBmaWxlcyBpbiB0aGUgYXNtIGRpcmVjdG9yeSB0aGF0IGhhdmUgYSAuanMgZXh0ZW5zaW9uIGFyZVxuICAgICAgLy8gYWN0dWFsbHkgdHJlYXRlZCBhcyB0ZW1wbGF0ZXMuIEV2YWx1YXRlIHRoZW0gdXNpbmcgTm9kZUpTLlxuICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgbGlzdENoaWxkcmVuKGN4QXNtRGlyLCAoZnVsbFBhdGgpID0+IFByb21pc2UucmVzb2x2ZShmdWxsUGF0aC5lbmRzV2l0aCgnLmpzJykpKTtcbiAgICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC8uanMkLywgJycpO1xuICAgICAgICBhd2FpdCBzaGVsbChbcHJvY2Vzcy5leGVjUGF0aCwgdGVtcGxhdGUsICc+JywgdGFyZ2V0TmFtZV0sIHtcbiAgICAgICAgICBjd2Q6IGN4QXNtRGlyLFxuICAgICAgICAgIG91dHB1dDogZml4dHVyZS5vdXRwdXQsXG4gICAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgICBURVNUX0FDQ09VTlQ6IGF3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKSxcbiAgICAgICAgICAgIFRFU1RfUkVHSU9OOiBmaXh0dXJlLmF3cy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSB0aGlzIGRpcmVjdG9yeSBhcyBhIENsb3VkIEFzc2VtYmx5XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgY3hBc21EaXIsICctdicsICdzeW50aCddKTtcblxuICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlcmUgd2FzIG5vIHByb3ZpZGVyRXJyb3IgaW4gQ0RLJ3Mgc3RkZXJyXG4gICAgICAvLyBCZWNhdXNlIHdlIHJlbHkgb24gdGhlIGFwcC9mcmFtZXdvcmsgdG8gYWN0dWFsbHkgZXJyb3IgaW4gY2FzZSB0aGVcbiAgICAgIC8vIHByb3ZpZGVyIGZhaWxzLCB3ZSBpbnNwZWN0IHRoZSBsb2dzIGhlcmUuXG4gICAgICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCckcHJvdmlkZXJFcnJvcicpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdnZW5lcmF0aW5nIGFuZCBsb2FkaW5nIGFzc2VtYmx5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgYXNtT3V0cHV0RGlyID0gYCR7Zml4dHVyZS5pbnRlZ1Rlc3REaXJ9LWNkay1pbnRlZy1hc21gO1xuICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydybScsICctcmYnLCBhc21PdXRwdXREaXJdKTtcblxuICAgIC8vIFN5bnRoZXNpemUgYSBDbG91ZCBBc3NlbWJseSB0b3RoZSBkZWZhdWx0IGRpcmVjdG9yeSAoY2RrLm91dCkgYW5kIGEgc3BlY2lmaWMgZGlyZWN0b3J5LlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnXSk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsICctLW91dHB1dCcsIGFzbU91dHB1dERpcl0pO1xuXG4gICAgLy8gY2RrLm91dCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIHRoZSBpbmRpY2F0ZWQgLS1vdXRwdXQgc2hvdWxkIGJlIHRoZSBzYW1lXG4gICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ2RpZmYnLCAnY2RrLm91dCcsIGFzbU91dHB1dERpcl0pO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gJ2xzJyB0aGUgc3ludGhlc2l6ZWQgYXNtLlxuICAgIC8vIENoYW5nZSB0byBzb21lIHJhbmRvbSBkaXJlY3RvcnkgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgbG9hZGluZyBjZGsuanNvblxuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgYXNtT3V0cHV0RGlyLCAnbHMnXSwgeyBjd2Q6IG9zLnRtcGRpcigpIH0pO1xuICAgIC8vIFNhbWUgc3RhY2tzIHdlIGtub3cgYXJlIGluIHRoZSBhcHBcbiAgICBleHBlY3QobGlzdCkudG9Db250YWluKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1sYW1iZGFgKTtcbiAgICBleHBlY3QobGlzdCkudG9Db250YWluKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LTFgKTtcbiAgICBleHBlY3QobGlzdCkudG9Db250YWluKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LTJgKTtcblxuICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIHVzZSAnLicgYW5kIGp1c3Qgc3ludGggLHRoZSBnZW5lcmF0ZWQgYXNtXG4gICAgY29uc3Qgc3RhY2tUZW1wbGF0ZSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnLS1hcHAnLCAnLicsICdzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCB7XG4gICAgICBjd2Q6IGFzbU91dHB1dERpcixcbiAgICB9KTtcbiAgICBleHBlY3Qoc3RhY2tUZW1wbGF0ZSkudG9Db250YWluKCd0b3BpYzE1MkQ4NEEzNycpO1xuXG4gICAgLy8gRGVwbG95IGEgTGFtYmRhIGZyb20gdGhlIGNvcGllZCBhc21cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhJywgeyBvcHRpb25zOiBbJy1hJywgJy4nXSwgY3dkOiBhc21PdXRwdXREaXIgfSk7XG5cbiAgICAvLyBSZW1vdmUgKHJlbmFtZSkgdGhlIG9yaWdpbmFsIGN1c3RvbSBkb2NrZXIgZmlsZSB0aGF0IHdhcyB1c2VkIGR1cmluZyBzeW50aC5cbiAgICAvLyB0aGlzIHZlcmlmaWVzIHRoYXQgdGhlIGFzc2VtbHkgaGFzIGEgY29weSBvZiBpdCBhbmQgdGhhdCB0aGUgbWFuaWZlc3QgdXNlc1xuICAgIC8vIHJlbGF0aXZlIHBhdGhzIHRvIHJlZmVyZW5jZSB0byBpdC5cbiAgICBjb25zdCBjdXN0b21Eb2NrZXJGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnZG9ja2VyJywgJ0RvY2tlcmZpbGUuQ3VzdG9tJyk7XG4gICAgYXdhaXQgZnMucmVuYW1lKGN1c3RvbURvY2tlckZpbGUsIGAke2N1c3RvbURvY2tlckZpbGV9fmApO1xuICAgIHRyeSB7XG4gICAgICAvLyBkZXBsb3kgYSBkb2NrZXIgaW1hZ2Ugd2l0aCBjdXN0b20gZmlsZSB3aXRob3V0IHN5bnRoICh1c2VzIGFzc2V0cylcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkb2NrZXItd2l0aC1jdXN0b20tZmlsZScsIHsgb3B0aW9uczogWyctYScsICcuJ10sIGN3ZDogYXNtT3V0cHV0RGlyIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZW5hbWUgYmFjayB0byByZXN0b3JlIGZpeHR1cmUgdG8gb3JpZ2luYWwgc3RhdGVcbiAgICAgIGF3YWl0IGZzLnJlbmFtZShgJHtjdXN0b21Eb2NrZXJGaWxlfX5gLCBjdXN0b21Eb2NrZXJGaWxlKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAndGVtcGxhdGVzIG9uIGRpc2sgY29udGFpbiBtZXRhZGF0YSByZXNvdXJjZSwgYWxzbyBpbiBuZXN0ZWQgYXNzZW1ibGllcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0LCBhbmQgc3dpdGNoIG9uIHZlcnNpb24gcmVwb3J0aW5nIGJlY2F1c2UgY2RrLmpzb24gaXMgZGlzYWJsaW5nIGl0XG4gICAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsICctLXZlcnNpb24tcmVwb3J0aW5nPXRydWUnXSk7XG5cbiAgICAvLyBMb2FkIHRlbXBsYXRlIGZyb20gZGlzayBmcm9tIHJvb3QgYXNzZW1ibHlcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbnRlbnRzID0gYXdhaXQgZml4dHVyZS5zaGVsbChbJ2NhdCcsICdjZGsub3V0LyotbGFtYmRhLnRlbXBsYXRlLmpzb24nXSk7XG5cbiAgICBleHBlY3QoSlNPTi5wYXJzZSh0ZW1wbGF0ZUNvbnRlbnRzKS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEpLnRvQmVUcnV0aHkoKTtcblxuICAgIC8vIExvYWQgdGVtcGxhdGUgZnJvbSBuZXN0ZWQgYXNzZW1ibHlcbiAgICBjb25zdCBuZXN0ZWRUZW1wbGF0ZUNvbnRlbnRzID0gYXdhaXQgZml4dHVyZS5zaGVsbChbXG4gICAgICAnY2F0JyxcbiAgICAgICdjZGsub3V0L2Fzc2VtYmx5LSotc3RhZ2UvKlN0YWNrSW5TdGFnZSoudGVtcGxhdGUuanNvbicsXG4gICAgXSk7XG5cbiAgICBleHBlY3QoSlNPTi5wYXJzZShuZXN0ZWRUZW1wbGF0ZUNvbnRlbnRzKS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEpLnRvQmVUcnV0aHkoKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdDREsgc3ludGggYWRkIHRoZSBtZXRhZGF0YSBwcm9wZXJ0aWVzIGV4cGVjdGVkIGJ5IHNhbScsXG4gIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTeW50aCBmaXJzdFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gZml4dHVyZS50ZW1wbGF0ZSgnVGVzdFN0YWNrJyk7XG5cbiAgICBjb25zdCBleHBlY3RlZFJlc291cmNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdQeXRob25MYXllclZlcnNpb24zOTQ5NUNFRicsXG4gICAgICAgIGNka0lkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5ZXIgVmVyc2lvblxuICAgICAgICBpZDogJ0xheWVyVmVyc2lvbjM4NzhEQTNBJyxcbiAgICAgICAgY2RrSWQ6ICdMYXllclZlcnNpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBsYXllciB2ZXJzaW9uXG4gICAgICAgIGlkOiAnQnVuZGxlZExheWVyVmVyc2lvblB5dGhvblJ1bnRpbWU2QkFEQkQ2RScsXG4gICAgICAgIGNka0lkOiAnQnVuZGxlZExheWVyVmVyc2lvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29udGVudCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBQeXRob24gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdQeXRob25GdW5jdGlvbjBCQ0Y3N0ZEJyxcbiAgICAgICAgY2RrSWQ6ICdQeXRob25GdW5jdGlvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIExvZyBSZXRlbnRpb24gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdMb2dSZXRlbnRpb25hYWUwYWEzYzViNGQ0Zjg3YjAyZDg1YjIwMWVmZGQ4YUZENEJGQzhBJyxcbiAgICAgICAgY2RrSWQ6ICdMb2dSZXRlbnRpb25hYWUwYWEzYzViNGQ0Zjg3YjAyZDg1YjIwMWVmZGQ4YScsXG4gICAgICAgIGlzQnVuZGxlZDogZmFsc2UsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBGdW5jdGlvblxuICAgICAgICBpZDogJ0Z1bmN0aW9uUHl0aG9uUnVudGltZTI4Q0JEQTA1JyxcbiAgICAgICAgY2RrSWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBGdW5jdGlvblxuICAgICAgICBpZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWU0RDlBMDkxOCcsXG4gICAgICAgIGNka0lkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZScsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE5vZGVKcyBGdW5jdGlvblxuICAgICAgICBpZDogJ05vZGVqc0Z1bmN0aW9uMDlDMUYyMEYnLFxuICAgICAgICBjZGtJZDogJ05vZGVqc0Z1bmN0aW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gR28gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdHb0Z1bmN0aW9uQ0E5NUZCQUEnLFxuICAgICAgICBjZGtJZDogJ0dvRnVuY3Rpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBEb2NrZXIgSW1hZ2UgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uMjhCNzczRTYnLFxuICAgICAgICBjZGtJZDogJ0RvY2tlckltYWdlRnVuY3Rpb24nLFxuICAgICAgICBkb2NrZXJGaWxlUGF0aDogJ0RvY2tlcmZpbGUnLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUuSW1hZ2VVcmknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gU3BlYyBSZXN0IEFwaVxuICAgICAgICBpZDogJ1NwZWNSZXN0QVBJN0Q0QjNBMzQnLFxuICAgICAgICBjZGtJZDogJ1NwZWNSZXN0QVBJJyxcbiAgICAgICAgcHJvcGVydHk6ICdCb2R5UzNMb2NhdGlvbicsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGV4cGVjdGVkUmVzb3VyY2VzKSB7XG4gICAgICBmaXh0dXJlLm91dHB1dC53cml0ZShgdmFsaWRhdGUgYXNzZXRzIG1ldGFkYXRhIGZvciByZXNvdXJjZSAke3Jlc291cmNlfWApO1xuICAgICAgZXhwZWN0KHJlc291cmNlLmlkIGluIHRlbXBsYXRlLlJlc291cmNlcykudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLlJlc291cmNlc1tyZXNvdXJjZS5pZF0pLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnVGVzdFN0YWNrJyl9LyR7cmVzb3VyY2UuY2RrSWR9L1Jlc291cmNlYCxcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6IGV4cGVjdC5zdHJpbmdNYXRjaGluZygvYXNzZXRcXC5bMC05YS16QS1aXXs2NH0vKSxcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6aXMtYnVuZGxlZCc6IHJlc291cmNlLmlzQnVuZGxlZCxcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6ZG9ja2VyZmlsZS1wYXRoJzogcmVzb3VyY2UuZG9ja2VyRmlsZVBhdGgsXG4gICAgICAgICAgICAnYXdzOmFzc2V0OnByb3BlcnR5JzogcmVzb3VyY2UucHJvcGVydHksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIE5lc3RlZCBTdGFja1xuICAgIGZpeHR1cmUub3V0cHV0LndyaXRlKCd2YWxpZGF0ZSBhc3NldHMgbWV0YWRhdGEgZm9yIG5lc3RlZCBzdGFjayByZXNvdXJjZScpO1xuICAgIGV4cGVjdCgnTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tSZXNvdXJjZUI3MDgzNEZEJyBpbiB0ZW1wbGF0ZS5SZXNvdXJjZXMpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QodGVtcGxhdGUuUmVzb3VyY2VzLk5lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrUmVzb3VyY2VCNzA4MzRGRCkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lKFxuICAgICAgICAgICAgJ1Rlc3RTdGFjaycsXG4gICAgICAgICAgKX0vTmVzdGVkU3RhY2suTmVzdGVkU3RhY2svTmVzdGVkU3RhY2suTmVzdGVkU3RhY2tSZXNvdXJjZWAsXG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKFxuICAgICAgICAgICAgYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXgucmVwbGFjZSgvLS8sICcnKX1UZXN0U3RhY2tOZXN0ZWRTdGFja1swLTlBLVpdezh9XFwubmVzdGVkXFwudGVtcGxhdGVcXC5qc29uYCxcbiAgICAgICAgICApLFxuICAgICAgICAgICdhd3M6YXNzZXQ6cHJvcGVydHknOiAnVGVtcGxhdGVVUkwnLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdDREsgc3ludGggYnVuZGxlZCBmdW5jdGlvbnMgYXMgZXhwZWN0ZWQnLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gU3ludGggZmlyc3RcbiAgICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGZpeHR1cmUudGVtcGxhdGUoJ1Rlc3RTdGFjaycpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRCdW5kbGVkQXNzZXRzID0gW1xuICAgICAge1xuICAgICAgICAvLyBQeXRob24gTGF5ZXIgVmVyc2lvblxuICAgICAgICBpZDogJ1B5dGhvbkxheWVyVmVyc2lvbjM5NDk1Q0VGJyxcbiAgICAgICAgZmlsZXM6IFtcbiAgICAgICAgICAncHl0aG9uL2xheWVyX3ZlcnNpb25fZGVwZW5kZW5jeS5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdMYXllclZlcnNpb24zODc4REEzQScsXG4gICAgICAgIGZpbGVzOiBbJ2xheWVyX3ZlcnNpb25fZGVwZW5kZW5jeS5weScsICdyZXF1aXJlbWVudHMudHh0J10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBCdW5kbGVkIGxheWVyIHZlcnNpb25cbiAgICAgICAgaWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZTZCQURCRDZFJyxcbiAgICAgICAgZmlsZXM6IFtcbiAgICAgICAgICAncHl0aG9uL2xheWVyX3ZlcnNpb25fZGVwZW5kZW5jeS5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFB5dGhvbiBGdW5jdGlvblxuICAgICAgICBpZDogJ1B5dGhvbkZ1bmN0aW9uMEJDRjc3RkQnLFxuICAgICAgICBmaWxlczogWydhcHAucHknLCAnZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsICdnZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbyddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUyOENCREEwNScsXG4gICAgICAgIGZpbGVzOiBbJ2FwcC5weScsICdyZXF1aXJlbWVudHMudHh0J10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBCdW5kbGVkIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZTREOUEwOTE4JyxcbiAgICAgICAgZmlsZXM6IFsnYXBwLnB5JywgJ2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLCAnZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE5vZGVKcyBGdW5jdGlvblxuICAgICAgICBpZDogJ05vZGVqc0Z1bmN0aW9uMDlDMUYyMEYnLFxuICAgICAgICBmaWxlczogWydpbmRleC5qcyddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gR28gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdHb0Z1bmN0aW9uQ0E5NUZCQUEnLFxuICAgICAgICBmaWxlczogWydib290c3RyYXAnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIERvY2tlciBJbWFnZSBGdW5jdGlvblxuICAgICAgICBpZDogJ0RvY2tlckltYWdlRnVuY3Rpb24yOEI3NzNFNicsXG4gICAgICAgIGZpbGVzOiBbJ2FwcC5qcycsICdEb2NrZXJmaWxlJywgJ3BhY2thZ2UuanNvbiddLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBleHBlY3RlZEJ1bmRsZWRBc3NldHMpIHtcbiAgICAgIGNvbnN0IGFzc2V0UGF0aCA9IHRlbXBsYXRlLlJlc291cmNlc1tyZXNvdXJjZS5pZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcmVzb3VyY2UuZmlsZXMpIHtcbiAgICAgICAgZml4dHVyZS5vdXRwdXQud3JpdGUoYHZhbGlkYXRlIFBhdGggJHtmaWxlfSBmb3IgcmVzb3VyY2UgJHtyZXNvdXJjZX1gKTtcbiAgICAgICAgZXhwZWN0KGV4aXN0c1N5bmMocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGFzc2V0UGF0aCwgZmlsZSkpKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NhbSBjYW4gbG9jYWxseSB0ZXN0IHRoZSBzeW50aGVzaXplZCBjZGsgYXBwbGljYXRpb24nLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gU3ludGggZmlyc3RcbiAgICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXh0dXJlLnNhbUxvY2FsU3RhcnRBcGkoXG4gICAgICAnVGVzdFN0YWNrJyxcbiAgICAgIGZhbHNlLFxuICAgICAgcmFuZG9tSW50ZWdlcigzMDAwMCwgNDAwMDApLFxuICAgICAgJy9yZXN0YXBpcy9zcGVjL3B5dGhvbkZ1bmN0aW9uJyxcbiAgICApO1xuICAgIGV4cGVjdChyZXN1bHQuYWN0aW9uU3VjY2VlZGVkKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHJlc3VsdC5hY3Rpb25PdXRwdXQpLnRvRXF1YWwoXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIG1lc3NhZ2U6ICdIZWxsbyBXb3JsZCcsXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NraXBzIG5vdGljZSByZWZyZXNoJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tbm90aWNlcyddLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgICAgfSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIE5laXRoZXIgc3VjY2VlZHMgbm9yIGZhaWxzLCBidXQgc2tpcHMgdGhlIHJlZnJlc2hcbiAgICBhd2FpdCBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdOb3RpY2VzIHJlZnJlc2hlZCcpO1xuICAgIGF3YWl0IGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ05vdGljZXMgcmVmcmVzaCBmYWlsZWQnKTtcbiAgfSksXG4pO1xuXG4vKipcbiAqIENyZWF0ZSBhIHF1ZXVlLCBvcnBoYW4gdGhhdCBxdWV1ZSwgdGhlbiBpbXBvcnQgdGhlIHF1ZXVlLlxuICpcbiAqIFdlIHdhbnQgdG8gdGVzdCB3aXRoIGEgbGFyZ2UgdGVtcGxhdGUgdG8gbWFrZSBzdXJlIGxhcmdlIHRlbXBsYXRlcyBjYW4gd29yayB3aXRoIGltcG9ydC5cbiAqL1xuaW50ZWdUZXN0KFxuICAndGVzdCByZXNvdXJjZSBpbXBvcnQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHJhbmRvbVByZWZpeCA9IHJhbmRvbVN0cmluZygpO1xuICAgIGNvbnN0IHVuaXF1ZU91dHB1dHNGaWxlTmFtZSA9IGAke3JhbmRvbVByZWZpeH1PdXRwdXRzLmpzb25gOyAvLyBvdGhlciB0ZXN0cyB1c2UgdGhlIG91dHB1dHMgZmlsZS4gTWFrZSBzdXJlIHdlIGRvbid0IGNvbGxpZGUuXG4gICAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgdW5pcXVlT3V0cHV0c0ZpbGVOYW1lKTtcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIEZpcnN0LCBjcmVhdGUgYSBzdGFjayB0aGF0IGluY2x1ZGVzIG1hbnkgcXVldWVzLCBhbmQgb25lIHF1ZXVlIHRoYXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN0YWNrIGJ1dCBOT1QgZGVsZXRlZCBmcm9tIEFXUy5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgIG1vZEVudjogeyBMQVJHRV9URU1QTEFURTogJzEnLCBJTkNMVURFX1NJTkdMRV9RVUVVRTogJzEnLCBSRVRBSU5fU0lOR0xFX1FVRVVFOiAnMScgfSxcbiAgICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU2Vjb25kLCBub3cgdGhlIHF1ZXVlIHdlIHdpbGwgcmVtb3ZlIGlzIGluIHRoZSBzdGFjayBhbmQgaGFzIGEgbG9naWNhbElkLiBXZSBjYW4gbm93IG1ha2UgdGhlIHJlc291cmNlIG1hcHBpbmcgZmlsZS5cbiAgICAgIC8vIFRoaXMgcmVzb3VyY2UgbWFwcGluZyBmaWxlIHdpbGwgYmUgdXNlZCB0byB0ZWxsIHRoZSBpbXBvcnQgb3BlcmF0aW9uIHdoYXQgcXVldWUgdG8gYnJpbmcgaW50byB0aGUgc3RhY2suXG4gICAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc3QgcXVldWVMb2dpY2FsSWQgPSBvdXRwdXRzW2Z1bGxTdGFja05hbWVdLlF1ZXVlTG9naWNhbElkO1xuICAgICAgY29uc3QgcXVldWVSZXNvdXJjZU1hcCA9IHtcbiAgICAgICAgW3F1ZXVlTG9naWNhbElkXTogeyBRdWV1ZVVybDogb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5RdWV1ZVVybCB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcHBpbmdGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsIGAke3JhbmRvbVByZWZpeH1NYXBwaW5nLmpzb25gKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShtYXBwaW5nRmlsZSwgSlNPTi5zdHJpbmdpZnkocXVldWVSZXNvdXJjZU1hcCksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAgIC8vIFRoaXJkLCByZW1vdmUgdGhlIHF1ZXVlIGZyb20gdGhlIHN0YWNrLCBidXQgZG9uJ3QgZGVsZXRlIHRoZSBxdWV1ZSBmcm9tIEFXUy5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnRhYmxlLXN0YWNrJywge1xuICAgICAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcwJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzAnIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoY2ZuVGVtcGxhdGVCZWZvcmVJbXBvcnQuVGVtcGxhdGVCb2R5KS5ub3QudG9Db250YWluKHF1ZXVlTG9naWNhbElkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydpbXBvcnQnLCAnLS1yZXNvdXJjZS1tYXBwaW5nJywgbWFwcGluZ0ZpbGUsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaW1wb3J0YWJsZS1zdGFjaycpXSwge1xuICAgICAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcxJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzAnIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgY29uc3QgZGVzY3JpYmVTdGFja3NSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgY2ZuVGVtcGxhdGVBZnRlckltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzIVswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnSU1QT1JUX0NPTVBMRVRFJyk7XG4gICAgICBleHBlY3QoY2ZuVGVtcGxhdGVBZnRlckltcG9ydC5UZW1wbGF0ZUJvZHkpLnRvQ29udGFpbihxdWV1ZUxvZ2ljYWxJZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAndGVzdCBtaWdyYXRlIGRlcGxveW1lbnQgZm9yIGFwcCB3aXRoIGxvY2FsZmlsZSBzb3VyY2UgaW4gbWlncmF0ZS5qc29uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBkZXBsb3lcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbWlncmF0ZS1zdGFjaycsIHtcbiAgICAgIG1vZEVudjogeyBPUlBIQU5fVE9QSUM6ICcxJyB9LFxuICAgICAgb3B0aW9uczogWyctLW91dHB1dHMtZmlsZScsIG91dHB1dHNGaWxlXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKChhd2FpdCBmcy5yZWFkRmlsZShvdXRwdXRzRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgY29uc3QgcXVldWVOYW1lID0gb3V0cHV0c1tzdGFja05hbWVdLlF1ZXVlTmFtZTtcbiAgICBjb25zdCBxdWV1ZVVybCA9IG91dHB1dHNbc3RhY2tOYW1lXS5RdWV1ZVVybDtcbiAgICBjb25zdCBxdWV1ZUxvZ2ljYWxJZCA9IG91dHB1dHNbc3RhY2tOYW1lXS5RdWV1ZUxvZ2ljYWxJZDtcbiAgICBmaXh0dXJlLmxvZyhgQ3JlYXRlZCBxdWV1ZSAke3F1ZXVlVXJsfSBpbiBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX1gKTtcblxuICAgIC8vIFdyaXRlIHRoZSBtaWdyYXRlIGZpbGUgYmFzZWQgb24gdGhlIElEIGZyb20gc3RlcCBvbmUsIHRoZW4gZGVwbG95IHRoZSBhcHAgd2l0aCBtaWdyYXRlXG4gICAgY29uc3QgbWlncmF0ZUZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdtaWdyYXRlLmpzb24nKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBtaWdyYXRlRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgU291cmNlOiAnbG9jYWxmaWxlJyxcbiAgICAgICAgUmVzb3VyY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpTUVM6OlF1ZXVlJyxcbiAgICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBxdWV1ZUxvZ2ljYWxJZCxcbiAgICAgICAgICAgIFJlc291cmNlSWRlbnRpZmllcjogeyBRdWV1ZVVybDogcXVldWVVcmwgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICB7IGVuY29kaW5nOiAndXRmLTgnIH0sXG4gICAgKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIGZpeHR1cmUubG9nKGBEZWxldGVkIHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfSwgb3JwaGFuaW5nICR7cXVldWVOYW1lfWApO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBzdGFjayBmcm9tIGV4aXN0aW5nIHF1ZXVlXG4gICAgdHJ5IHtcbiAgICAgIGZpeHR1cmUubG9nKGBEZXBsb3lpbmcgbmV3IHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfSwgbWlncmF0aW5nICR7cXVldWVOYW1lfSBpbnRvIHN0YWNrYCk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbnVwXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICBcImhvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBMYW1iZGEgZnVuY3Rpb24ncyBkZXNjcmlwdGlvbiBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzXCIsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ29yaWdpbmFsIHZhbHVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuXG4gICAgLy8gVEhFTlxuXG4gICAgLy8gVGhlIGRlcGxveW1lbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgZnVsbCBkZXBsb3ltZW50LCB0aHVzIHRoZSBzdGFjaydzIHN0YXR1cyBtdXN0IHJlbWFpbnNcbiAgICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYExhbWJkYSBGdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBob3Rzd2FwcGVkIWApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBGbjo6SW1wb3J0VmFsdWUgaW50cmluc2ljJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2V4cG9ydC12YWx1ZS1zdGFjaycpO1xuICAgICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ29yaWdpbmFsIHZhbHVlJyxcbiAgICAgICAgICBVU0VfSU1QT1JUX1ZBTFVFX0xBTUJEQV9QUk9QRVJUWTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSByZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5bMF0uT3V0cHV0VmFsdWU7XG5cbiAgICAgIC8vIFRIRU5cblxuICAgICAgLy8gVGhlIGRlcGxveW1lbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgZnVsbCBkZXBsb3ltZW50LCB0aHVzIHRoZSBzdGFjaydzIHN0YXR1cyBtdXN0IHJlbWFpbnNcbiAgICAgIC8vIFwiQ1JFQVRFX0NPTVBMRVRFXCJcbiAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYExhbWJkYSBGdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBob3Rzd2FwcGVkIWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBFbnN1cmUgY2xlYW51cCBpbiByZXZlcnNlIG9yZGVyIGR1ZSB0byB1c2Ugb2YgaW1wb3J0L2V4cG9ydFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdsYW1iZGEtaG90c3dhcCcpO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdleHBvcnQtdmFsdWUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIGVjcyBzZXJ2aWNlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09ICdTZXJ2aWNlTmFtZScpPy5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cblxuICAgIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5zXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGBFQ1MgU2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nIGhvdHN3YXBwZWQhYCk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSB3YWl0cyBmb3IgZGVwbG95bWVudCB0byBjb21wbGV0ZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfRUNTX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBjbHVzdGVyTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09ICdDbHVzdGVyTmFtZScpXG4gICAgICA/Lk91dHB1dFZhbHVlITtcbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09ICdTZXJ2aWNlTmFtZScpXG4gICAgICA/Lk91dHB1dFZhbHVlITtcblxuICAgIC8vIFRIRU5cblxuICAgIGNvbnN0IGRlc2NyaWJlU2VydmljZXNSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmVjcy5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU2VydmljZXNDb21tYW5kKHtcbiAgICAgICAgY2x1c3RlcjogY2x1c3Rlck5hbWUsXG4gICAgICAgIHNlcnZpY2VzOiBbc2VydmljZU5hbWVdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlLnNlcnZpY2VzPy5bMF0uZGVwbG95bWVudHMpLnRvSGF2ZUxlbmd0aCgxKTsgLy8gb25seSBvbmUgZGVwbG95bWVudCBwcmVzZW50XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSBkZXRlY3RzIGZhaWxlZCBkZXBsb3ltZW50IGFuZCBlcnJvcnMnLFxuICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBVU0VfSU5WQUxJRF9FQ1NfSE9UU1dBUF9JTUFHRTogJ3RydWUnLFxuICAgICAgfSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4cGVjdGVkU3Vic3RyaW5nID0gJ1Jlc291cmNlIGlzIG5vdCBpbiB0aGUgc3RhdGUgZGVwbG95bWVudENvbXBsZXRlZCc7XG5cbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oZXhwZWN0ZWRTdWJzdHJpbmcpO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLm5vdC50b0NvbnRhaW4oJ2hvdHN3YXBwZWQhJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgQXBwU3luYyBBUElzIHdpdGggbWFueSBmdW5jdGlvbnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2FwcHN5bmMtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdhcHBzeW5jLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19BUFBTWU5DX1BST1BFUlRZX1ZBTFVFOiAnJHV0aWwucXIoJGN0eC5zdGFzaC5wdXQoXCJuZXdUZW1wbGF0ZVwiLCBbXSkpXFxuJHV0aWwudG9Kc29uKHt9KScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAvLyBhc3NlcnQgYWxsIDUwIGZ1bmN0aW9ucyB3ZXJlIGhvdHN3YXBwZWRcbiAgICBmb3IgKGNvbnN0IGkgb2YgQXJyYXkoNTApLmtleXMoKSkge1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGBBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbiAnYXBwc3luY19mdW5jdGlvbiR7aX0nIGhvdHN3YXBwZWQhYCk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnaG90c3dhcCBFQ1MgZGVwbG95bWVudCByZXNwZWN0cyBwcm9wZXJ0aWVzIG92ZXJyaWRlJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIFVwZGF0ZSB0aGUgQ0RLIGNvbnRleHQgd2l0aCB0aGUgbmV3IEVDUyBwcm9wZXJ0aWVzXG4gIGxldCBlY3NNaW5pbXVtSGVhbHRoeVBlcmNlbnQgPSAxMDA7XG4gIGxldCBlY3NNYXhpbXVtSGVhbHRoeVBlcmNlbnQgPSAyMDA7XG4gIGxldCBjZGtKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpLCAndXRmOCcpKTtcbiAgY2RrSnNvbiA9IHtcbiAgICAuLi5jZGtKc29uLFxuICAgIGhvdHN3YXA6IHtcbiAgICAgIGVjczoge1xuICAgICAgICBtaW5pbXVtSGVhbHRoeVBlcmNlbnQ6IGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCxcbiAgICAgICAgbWF4aW11bUhlYWx0aHlQZXJjZW50OiBlY3NNYXhpbXVtSGVhbHRoeVBlcmNlbnQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcblxuICAvLyBHSVZFTlxuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0taG90c3dhcCcsXG4gICAgXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIERZTkFNSUNfRUNTX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgY2x1c3Rlck5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ0NsdXN0ZXJOYW1lJyk/Lk91dHB1dFZhbHVlITtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ1NlcnZpY2VOYW1lJyk/Lk91dHB1dFZhbHVlITtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGRlc2NyaWJlU2VydmljZXNSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmVjcy5zZW5kKFxuICAgIG5ldyBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZCh7XG4gICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgIHNlcnZpY2VzOiBbc2VydmljZU5hbWVdLFxuICAgIH0pLFxuICApO1xuICBleHBlY3QoZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlLnNlcnZpY2VzPy5bMF0uZGVwbG95bWVudENvbmZpZ3VyYXRpb24/Lm1pbmltdW1IZWFsdGh5UGVyY2VudCkudG9FcXVhbChlY3NNaW5pbXVtSGVhbHRoeVBlcmNlbnQpO1xuICBleHBlY3QoZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlLnNlcnZpY2VzPy5bMF0uZGVwbG95bWVudENvbmZpZ3VyYXRpb24/Lm1heGltdW1QZXJjZW50KS50b0VxdWFsKGVjc01heGltdW1IZWFsdGh5UGVyY2VudCk7XG59KSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDaGlsZHJlbihwYXJlbnQ6IHN0cmluZywgcHJlZDogKHg6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGF3YWl0IGZzLnJlYWRkaXIocGFyZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocGFyZW50LCBjaGlsZC50b1N0cmluZygpKTtcbiAgICBpZiAoYXdhaXQgcHJlZChmdWxsUGF0aCkpIHtcbiAgICAgIHJldC5wdXNoKGZ1bGxQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkRGlycyhwYXJlbnQ6IHN0cmluZykge1xuICByZXR1cm4gbGlzdENoaWxkcmVuKHBhcmVudCwgYXN5bmMgKGZ1bGxQYXRoOiBzdHJpbmcpID0+IChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmludGVnVGVzdChcbiAgJ2NkayBub3RpY2VzIHdpdGggLS11bmFja25vd2xlZGdlZCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG5vdGljZXNVbmFja25vd2xlZGdlZCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbm90aWNlcycsICctLXVuYWNrbm93bGVkZ2VkJ10sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gICAgY29uc3Qgbm90aWNlc1VuYWNrbm93bGVkZ2VkQWxpYXMgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ25vdGljZXMnLCAnLXUnXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgICBleHBlY3Qobm90aWNlc1VuYWNrbm93bGVkZ2VkKS50b0VxdWFsKGV4cGVjdC5zdHJpbmdNYXRjaGluZygvVGhlcmUgYXJlIFxcZHsxLH0gdW5hY2tub3dsZWRnZWQgbm90aWNlXFwoc1xcKS4vKSk7XG4gICAgZXhwZWN0KG5vdGljZXNVbmFja25vd2xlZGdlZCkudG9FcXVhbChub3RpY2VzVW5hY2tub3dsZWRnZWRBbGlhcyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAndGVzdCBjZGsgcm9sbGJhY2snLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyb2xsYmFjay10ZXN0LWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgbGV0IHBoYXNlID0gJzEnO1xuXG4gICAgLy8gU2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHBoYXNlID0gJzJhJztcblxuICAgICAgLy8gU2hvdWxkIGZhaWxcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ1VQREFURV9GQUlMRUQnKTtcblxuICAgICAgLy8gUm9sbGJhY2tcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snXSwge1xuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IGNkayByb2xsYmFjayAtLWZvcmNlJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBwaGFzZSA9ICcyYic7IC8vIEZhaWwgdXBkYXRlIGFuZCBhbHNvIGZhaWwgcm9sbGJhY2tcblxuICAgICAgLy8gU2hvdWxkIGZhaWxcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBTaG91bGQgc3RpbGwgZmFpbFxuICAgICAgY29uc3Qgcm9sbGJhY2tPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3JvbGxiYWNrJ10sIHtcbiAgICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyb2xsYmFja091dHB1dCkudG9Db250YWluKCdGYWlsaW5nIHJvbGxiYWNrJyk7XG5cbiAgICAgIC8vIFJvbGxiYWNrIGFuZCBmb3JjZSBjbGVhbnVwXG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3JvbGxiYWNrJywgJy0tZm9yY2UnXSwge1xuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2NkayBub3RpY2VzIGFyZSBkaXNwbGF5ZWQgY29ycmVjdGx5Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG5cbiAgY29uc3QgY2FjaGUgPSB7XG4gICAgZXhwaXJhdGlvbjogNDEyNTk2MzI2NDAwMCwgLy8geWVhciAyMTAwIHNvIHdlIG5ldmVyIG92ZXJ3cml0ZSB0aGUgY2FjaGVcbiAgICBub3RpY2VzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQm9vdHN0cmFwIDE5OTkgTm90aWNlJyxcbiAgICAgICAgaXNzdWVOdW1iZXI6IDQ0NDQsXG4gICAgICAgIG92ZXJ2aWV3OiAnT3ZlcnZpZXcgZm9yIEJvb3RzdHJhcCAxOTk5IE5vdGljZS4gQWZmZWN0ZWRFbnZpcm9ubWVudHM6PHtyZXNvbHZlOkVOVklST05NRU5UU30+JyxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdib290c3RyYXAnLFxuICAgICAgICAgICAgdmVyc2lvbjogJzwxOTk5JywgLy8gc28gd2UgaW5jbHVkZSBhbGwgcG9zc2libGUgZW52aXJvbm1lbnRzXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IGNka0NhY2hlRGlyID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2FjaGUnKTtcbiAgYXdhaXQgZnMubWtkaXIoY2RrQ2FjaGVEaXIpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGNka0NhY2hlRGlyLCAnbm90aWNlcy5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNhY2hlKSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGljZXMnLCB7XG4gICAgdmVyYm9zZTogZmFsc2UsXG4gICAgbW9kRW52OiB7XG4gICAgICBDREtfSE9NRTogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdPdmVydmlldyBmb3IgQm9vdHN0cmFwIDE5OTkgTm90aWNlJyk7XG5cbiAgLy8gYXNzZXJ0IGR5bmFtaWMgZW52aXJvbm1lbnRzIGFyZSByZXNvbHZlZFxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oYEFmZmVjdGVkRW52aXJvbm1lbnRzOjxhd3M6Ly8ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0vJHtmaXh0dXJlLmF3cy5yZWdpb259PmApO1xuXG59KSk7XG4iXX0=
|
|
1902
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFNd0M7QUFDeEMsb0RBQThEO0FBQzlELG9EQU02QjtBQUM3QiwwREFBdUQ7QUFDdkQsa0RBQXVFO0FBQ3ZFLG9EQUE2RTtBQUM3RSxvREFBa0Y7QUFDbEYsbUNBZW1CO0FBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUNsQixJQUFBLGVBQVMsRUFDUCxrQkFBa0IsRUFDbEIsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUM5RSxhQUFhLEVBQUUsSUFBSTtZQUNuQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMs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aEQsT0FBTyxFQUFFLEtBQUs7UUFDZCxNQUFNLEVBQUU7WUFDTixRQUFRLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDL0I7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFL0QsMkNBQTJDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsK0JBQStCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFaEgsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIENyZWF0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kLFxuICBMaXN0Q2hhbmdlU2V0c0NvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3MnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlUm9sZUNvbW1hbmQsXG4gIERlbGV0ZVJvbGVDb21tYW5kLFxuICBEZWxldGVSb2xlUG9saWN5Q29tbWFuZCxcbiAgTGlzdFJvbGVQb2xpY2llc0NvbW1hbmQsXG4gIFB1dFJvbGVQb2xpY3lDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7IEludm9rZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7IFB1dE9iamVjdExvY2tDb25maWd1cmF0aW9uQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQgeyBDcmVhdGVUb3BpY0NvbW1hbmQsIERlbGV0ZVRvcGljQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xuaW1wb3J0IHsgQXNzdW1lUm9sZUNvbW1hbmQsIEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0IHtcbiAgaW50ZWdUZXN0LFxuICBjbG9uZURpcmVjdG9yeSxcbiAgc2hlbGwsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZSxcbiAgcmV0cnksXG4gIHNsZWVwLFxuICByYW5kb21JbnRlZ2VyLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlLFxuICBSRVNPVVJDRVNfRElSLFxuICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUsXG4gIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlLFxuICByYW5kb21TdHJpbmcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUsXG4gIHdpdGhvdXRCb290c3RyYXAsXG59IGZyb20gJy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmRlc2NyaWJlKCdjaScsICgpID0+IHtcbiAgaW50ZWdUZXN0KFxuICAgICdvdXRwdXQgdG8gc3RkZXJyJyxcbiAgICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7IGNhcHR1cmVTdGRlcnI6IHRydWUsIG9ubHlTdGRlcnI6IHRydWUgfSk7XG4gICAgICBjb25zdCBkaWZmT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdHJveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGRlc3Ryb3lPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkaWZmT3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgfSksXG4gICk7XG4gIGRlc2NyaWJlKCdjaT10cnVlJywgKCkgPT4ge1xuICAgIGludGVnVGVzdChcbiAgICAgICdvdXRwdXQgdG8gc3Rkb3V0JyxcbiAgICAgIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBleGVjT3B0aW9ucyA9IHtcbiAgICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfS05PV05fQlJPS0VOX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfVU5URVNURURfTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgICAgICBKU0lJX1NJTEVOQ0VfV0FSTklOR19ERVBSRUNBVEVEX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCBleGVjT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9FcXVhbCgnJyk7XG4gICAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KGRpZmZPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfSk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnVlBDIExvb2t1cCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGZpeHR1cmUubG9nKCdNYWtpbmcgc3VyZSB3ZSBhcmUgY2xlYW4gYmVmb3JlIHN0YXJ0aW5nLicpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcblxuICAgIGZpeHR1cmUubG9nKCdTZXR0aW5nIHVwOiBjcmVhdGluZyBhIFZQQyB3aXRoIGtub3duIHRhZ3MnKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG5cbiAgICBmaXh0dXJlLmxvZygnVmVyaWZ5aW5nIHdlIGNhbiBub3cgaW1wb3J0IHRoYXQgVlBDJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdJTVBPUlQnIH0gfSk7XG4gIH0pLFxuKTtcblxuLy8gdGVzdGluZyBhIGNvbnN0cnVjdCB3aXRoIGEgYnVpbHRpbiBOb2RlanMgTGFtYmRhIEZ1bmN0aW9uLlxuLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSB0ZXN0aW5nIHRoZSBzMy5CdWNrZXQgY29uc3RydWN0IHdpdGggdGhlXG4vLyBhdXRvRGVsZXRlT2JqZWN0cyBwcm9wIHNldCB0byB0cnVlLCB3aGljaCBjcmVhdGVzIGEgTGFtYmRhIGJhY2tlZFxuLy8gQ3VzdG9tUmVzb3VyY2UuIFNpbmNlIHRoZSBjb21waWxlZCBMYW1iZGEgY29kZSAoZS5nLiBfX2VudHJ5cG9pbnRfXy5qcylcbi8vIGlzIGJ1bmRsZWQgYXMgcGFydCBvZiB0aGUgQ0RLIHBhY2thZ2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0XG4vLyBpbnRyb2R1Y2UgY2hhbmdlcyB0byB0aGUgY29tcGlsZWQgY29kZSB0aGF0IGNvdWxkIHByZXZlbnQgdGhlIExhbWJkYSBmcm9tXG4vLyBleGVjdXRpbmcuIElmIHdlIGRvLCB0aGlzIHRlc3Qgd2lsbCB0aW1lb3V0IGFuZCBmYWlsLlxuaW50ZWdUZXN0KFxuICAnQ29uc3RydWN0IHdpdGggYnVpbHRpbiBMYW1iZGEgZnVuY3Rpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVpbHRpbi1sYW1iZGEtZnVuY3Rpb24nKTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xuICB9KSxcbik7XG5cbi8vIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYXNzZXQgYnVuZGxpbmcgZm9yIGFwcHMgdW5kZXIgYSBzdGFnZSBkb2VzIG5vdCBicmVha1xuaW50ZWdUZXN0KFxuICAnU3RhZ2Ugd2l0aCBidW5kbGVkIExhbWJkYSBmdW5jdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidW5kbGluZy1zdGFnZS9CdW5kbGluZ1N0YWNrJyk7XG4gICAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ1R3byB3YXlzIG9mIHNob3dpbmcgdGhlIHZlcnNpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9uMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsndmVyc2lvbiddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHZlcnNpb24yID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLXZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdCh2ZXJzaW9uMSkudG9FcXVhbCh2ZXJzaW9uMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnVGVybWluYXRpb24gcHJvdGVjdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICd0ZXJtaW5hdGlvbi1wcm90ZWN0aW9uJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUpO1xuXG4gICAgLy8gVHJ5IGEgZGVzdHJveSB0aGF0IHNob3VsZCBmYWlsXG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVzdHJveShzdGFja05hbWUpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBDYW4gdXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBzZXQgZG9lc24ndCBjb250YWluIGNoYW5nZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHsgbW9kRW52OiB7IFRFUk1JTkFUSU9OX1BST1RFQ1RJT046ICdGQUxTRScgfSB9KTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGgnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTEnKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdG9waWM2OTgzMTQ5MToge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMS90b3BpYy9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIG9wdGlvbnM6IFtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSxcbiAgICAgIH0pLFxuICAgICkubm90LnRvRXF1YWwoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhgXG5SdWxlczpcbiAgQ2hlY2tCb290c3RyYXBWZXJzaW9uOmApLFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3Rlc3QtMicpKS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0b3BpYzE1MkQ4NEEzNzoge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMi90b3BpYzEvUmVzb3VyY2VgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcGljMkE0RkI1NDdGOiB7XG4gICAgICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMi9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NzbSBwYXJhbWV0ZXIgcHJvdmlkZXIgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhcbiAgICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlzc2luZy1zc20tcGFyYW1ldGVyJyksICctYycsICd0ZXN0OnNzbS1wYXJhbWV0ZXItbmFtZT0vZG9lcy9ub3QvZXhpc3QnXSxcbiAgICAgICAge1xuICAgICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oJ1NTTSBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBpbiBhY2NvdW50Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnYXV0b21hdGljIG9yZGVyaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJyk7XG5cbiAgICAvLyBEZXN0cm95IHRoZSBwcm92aWRpbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBjb25zdW1pbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ29yZGVyLXByb3ZpZGluZycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyBvcmRlcmluZyB3aXRoIGNvbmN1cnJlbmN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJywgeyBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddIH0pO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdvcmRlci1wcm92aWRpbmcnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICctLWV4Y2x1c2l2ZWx5IHNlbGVjdHMgb25seSBzZWxlY3RlZCBzdGFjaycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSB0aGUgXCJkZXBlbmRzLW9uLWZhaWxlZFwiIHN0YWNrLCB3aXRoIC0tZXhjbHVzaXZlbHkuIEl0IHdpbGwgTk9UIGZhaWwgKGJlY2F1c2VcbiAgICAvLyBvZiAtLWV4Y2x1c2l2ZWx5KSBhbmQgaXQgV0lMTCBjcmVhdGUgYW4gb3V0cHV0IHdlIGNhbiBjaGVjayBmb3IgdG8gY29uZmlybSB0aGF0IGl0IGRpZFxuICAgIC8vIGdldCBkZXBsb3llZC5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVwZW5kcy1vbi1mYWlsZWQnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tZXhjbHVzaXZlbHknLCAnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIG91dHB1dCB0byBzZWUgdGhhdCB0aGUgc3RhY2sgZGVwbG95ZWRcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tZGVwZW5kcy1vbi1mYWlsZWRgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZE15VG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjb250ZXh0IHNldHRpbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbnRleHRrZXk6ICd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2NvbnRleHQnXSkpLnJlc29sdmVzLnRvQ29udGFpbigndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScpO1xuXG4gICAgICAvLyBUZXN0IHRoYXQgZGVsZXRpbmcgdGhlIGNvbnRleHRrZXkgd29ya3NcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG4gICAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydjb250ZXh0J10pKS5yZXNvbHZlcy5ub3QudG9Db250YWluKCd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyk7XG5cbiAgICAgIC8vIFRlc3QgdGhhdCBmb3JjZWQgZGVsZXRlIG9mIHRoZSBjb250ZXh0IGtleSBkb2VzIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydjb250ZXh0JywgJy1mJywgJy0tcmVzZXQnLCAnY29udGV4dGtleSddKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5jb250ZXh0Lmpzb24nKSk7XG4gICAgfVxuICB9KSxcbik7XG5cbi8vIGJvb3RzdHJhcHBpbmcgYWxzbyBwZXJmb3JtcyBzeW50aGVzaXMuIEFzIGl0IHR1cm5zIG91dCwgYm9vdHN0cmFwLXN0YWdlIHN5bnRoZXNpcyBzdGlsbCBjYXVzZXMgdGhlIGxvb2t1cHMgdG8gYmUgY2FjaGVkLCBtZWFuaW5nIHRoYXQgdGhlIGxvb2t1cCBuZXZlclxuLy8gaGFwcGVucyB3aGVuIHdlIGFjdHVhbGx5IGNhbGwgYGNkayBzeW50aCAtLW5vLWxvb2t1cHNgLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGVycm9yIG5ldmVyIGJlaW5nIHRocm93biwgYmVjYXVzZSBpdCBuZXZlciB0cmllcyB0byBsb29rdXAgYW55dGhpbmcuXG4vLyBGaXggdGhpcyBieSBub3QgdHJ5aW5nIHRvIGJvb3RzdHJhcDsgdGhlcmUncyBubyBuZWVkIHRvIGJvb3RzdHJhcCBhbnl3YXksIHNpbmNlIHRoZSB0ZXN0IG5ldmVyIHRyaWVzIHRvIGRlcGxveSBhbnl0aGluZy5cbmludGVnVGVzdChcbiAgJ2NvbnRleHQgaW4gc3RhZ2UgcHJvcGFnYXRlcyB0byB0b3AnLFxuICB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGl0IGVycm9yIHRvIHByb3ZlIHRoYXQgdGhlIGNvbnRleHQgYnViYmxlcyB1cCwgYW5kIGFsc28gdGhhdCB3ZSBjYW4gZmFpbCBvbiBjb21tYW5kXG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1sb29rdXBzJ10sXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbignQ29udGV4dCBsb29rdXBzIGhhdmUgYmVlbiBkaXNhYmxlZCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IC0tbWV0aG9kPWRpcmVjdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9ZGlyZWN0J10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbGwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBhcm5zID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtKicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGJvdGggc3RhY2tzICh0aGVyZSBhcmUgMiBBUk5zIGluIHRoZSBvdXRwdXQpXG4gICAgZXhwZWN0KGFybnMuc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYWxsIGNvbmN1cnJlbnRseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChhcm5zLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkb3VibHkgbmVzdGVkIHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtZG91Ymx5LW5lc3RlZC1zdGFjaycsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KSk7XG5cbmludGVnVGVzdChcbiAgJ25lc3RlZCBzdGFjayB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTVEFDS19OQU1FX1BSRUZJWCBpcyB1c2VkIGluIE15VG9waWNQYXJhbSB0byBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXNcbiAgICAvLyBvZiB0aGlzIHRlc3QgdG8gcnVuIGluIHBhcmFsbGVsLCBvdGhld2lzZSB0aGV5IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHNhbWUgU05TIHRvcGljLlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBNeVRvcGljUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1UaGVyZUlzTm9TcG9vbmBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gICAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRob3V0IGV4ZWN1dGUgYSBuYW1lZCBjaGFuZ2Ugc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9ICdjdXN0b20tY2hhbmdlLXNldC1uYW1lJztcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tZXhlY3V0ZScsICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWVdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy92ZXJpZnkgYSBjaGFuZ2Ugc2V0IHdhcyBjcmVhdGVkIHdpdGggdGhlIHByb3ZpZGVkIG5hbWVcbiAgICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgTGlzdENoYW5nZVNldHNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgY2hhbmdlU2V0cyA9IGNoYW5nZVNldFJlc3BvbnNlLlN1bW1hcmllcyB8fCBbXTtcbiAgICBleHBlY3QoY2hhbmdlU2V0cy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGNoYW5nZVNldHNbMF0uQ2hhbmdlU2V0TmFtZSkudG9FcXVhbChjaGFuZ2VTZXROYW1lKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0c1swXS5TdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NlY3VyaXR5IHJlbGF0ZWQgY2hhbmdlcyB3aXRob3V0IGEgQ0xJIGFyZSBleHBlY3RlZCB0byBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gcmVkaXJlY3QgL2Rldi9udWxsIHRvIHN0ZGluLCB3aGljaCBtZWFucyB0aGVyZSB3aWxsIG5vdCBiZSB0dHkgYXR0YWNoZWRcbiAgICAvLyBzaW5jZSB0aGlzIHN0YWNrIGluY2x1ZGVzIHNlY3VyaXR5LXJlbGF0ZWQgY2hhbmdlcywgdGhlIGRlcGxveW1lbnQgc2hvdWxkXG4gICAgLy8gaW1tZWRpYXRlbHkgZmFpbCBiZWNhdXNlIHdlIGNhbid0IGNvbmZpcm0gdGhlIGNoYW5nZXNcbiAgICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgICBvcHRpb25zOiBbJzwnLCAnL2Rldi9udWxsJ10sIC8vIEg0eCwgdGhpcyBvbmx5IHdvcmtzIGJlY2F1c2UgSSBoYXBwZW4gdG8ga25vdyB3ZSBwYXNzIHNoZWxsOiB0cnVlLlxuICAgICAgICBuZXZlclJlcXVpcmVBcHByb3ZhbDogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIC8vIEVuc3VyZSBzdGFjayB3YXMgbm90IGRlcGxveWVkXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aWxkY2FyZCB3aXRoIG91dHB1dHMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShbJ291dHB1dHMtdGVzdC0qJ10sIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMU15VG9waWNgLFxuICAgICAgfSxcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMk15T3RoZXJUb3BpY2AsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd1cGRhdGUgdG8gc3RhY2sgaW4gUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgd2lsbCBkZWxldGUgc3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBvbmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QGF3d2BdLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdwYXJhbS10ZXN0LTEnKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrSWQ7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdST0xMQkFDS19DT01QTEVURScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IG5ld1N0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXdTdGFja1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IG5ld1N0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2tBcm4pLm5vdC50b0VxdWFsKG5ld1N0YWNrQXJuKTsgLy8gbmV3IHN0YWNrIHdhcyBjcmVhdGVkXG4gICAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIGV4cGVjdChuZXdTdGFja1Jlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1hbGxnb29kYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzdGFjayBpbiBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgY2FuIGJlIHVwZGF0ZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9bmljZWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIGJhZCBwYXJhbWV0ZXIgbmFtZSB3aXRoIEAgd2lsbCBwdXQgc3RhY2sgaW50byBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEVcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUBhd3dgXSxcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHdpbGRjYXJkIGFuZCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtKicsIHtcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTE6VG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTI6T3RoZXJUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoYXRzTXlTcG90YCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6RGlzcGxheU5hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUhleVRoZXJlYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6T3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QW5vdGhlck9uZWAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMgbXVsdGknLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwYXJhbVZhbDEgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYDtcbiAgICBjb25zdCBwYXJhbVZhbDIgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH09amFnc2hlbWFzaGA7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwxfWAsICctLXBhcmFtZXRlcnMnLCBgT3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwyfWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnRGlzcGxheU5hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogcGFyYW1WYWwxLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdPdGhlckRpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMixcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIGZsYWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC10b3BpYy1mbGFnYDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgICAgb3B0aW9uczogWyctLW5vdGlmaWNhdGlvbi1hcm5zJywgdG9waWNBcm5dLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICAgIGNvbnN0IGRlc2NyaWJlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKFxuICAgICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgICBUb3BpY0FybjogdG9waWNBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIHByb3AnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdG9waWNOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtdG9waWMtcHJvcGA7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChuZXcgQ3JlYXRlVG9waWNDb21tYW5kKHsgTmFtZTogdG9waWNOYW1lIH0pKTtcbiAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbm90aWZpY2F0aW9uLWFybi1wcm9wJyk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB0aGUgc3RhY2sgd2UgZGVwbG95ZWQgaGFzIG91ciBub3RpZmljYXRpb24gQVJOXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm4tcHJvcCcpLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXS5Ob3RpZmljYXRpb25BUk5zKS50b0VxdWFsKFt0b3BpY0Fybl0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVRvcGljQ29tbWFuZCh7XG4gICAgICAgIFRvcGljQXJuOiB0b3BpY0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn0pKTtcblxuLy8gTk9URTogdGhpcyBkb2Vzbid0IGN1cnJlbnRseSB3b3JrIHdpdGggbW9kZXJuLXN0eWxlIHN5bnRoZXNpcywgYXMgdGhlIGJvb3RzdHJhcFxuLy8gcm9sZSBieSBkZWZhdWx0IHdpbGwgbm90IGhhdmUgcGVybWlzc2lvbiB0byBpYW06UGFzc1JvbGUgdGhlIGNyZWF0ZWQgcm9sZS5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHJvbGUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBpZiAoZml4dHVyZS5wYWNrYWdlcy5tYWpvclZlcnNpb24oKSAhPT0gJzEnKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cbiAgICB9XG5cbiAgICBjb25zdCByb2xlTmFtZSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LXJvbGVgO1xuXG4gICAgYXdhaXQgZGVsZXRlUm9sZSgpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgIG5ldyBDcmVhdGVSb2xlQ29tbWFuZCh7XG4gICAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgICAgIFByaW5jaXBhbDogeyBTZXJ2aWNlOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbScgfSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAgICAgICBQcmluY2lwYWw6IHsgQVdTOiAoYXdhaXQgZml4dHVyZS5hd3Muc3RzLnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpKS5Bcm4gfSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoIWNyZWF0ZVJlc3BvbnNlLlJvbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9sZSBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50ISEnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZVJlc3BvbnNlLlJvbGUuQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvbGUgYXJuIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQhIScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVBcm4gPSBjcmVhdGVSZXNwb25zZS5Sb2xlLkFybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQoXG4gICAgICAgIG5ldyBQdXRSb2xlUG9saWN5Q29tbWFuZCh7XG4gICAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICAgIFBvbGljeU5hbWU6ICdEZWZhdWx0UG9saWN5JyxcbiAgICAgICAgICBQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBY3Rpb246ICcqJyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgcmV0cnkoZml4dHVyZS5vdXRwdXQsICdUcnlpbmcgdG8gYXNzdW1lIGZyZXNoIHJvbGUnLCByZXRyeS5mb3JTZWNvbmRzKDMwMCksIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3Muc3RzLnNlbmQoXG4gICAgICAgICAgbmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgICAgICAgIFJvbGVBcm46IHJvbGVBcm4sXG4gICAgICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd0ZXN0aW5nJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbiBwcmluY2lwbGUsIHRoZSByb2xlIGhhcyByZXBsaWNhdGVkIGZyb20gJ3VzLWVhc3QtMScgdG8gd2hlcmV2ZXIgd2UncmUgdGVzdGluZy5cbiAgICAgIC8vIEdpdmUgaXQgYSBsaXR0bGUgbW9yZSBzbGVlcCB0byBtYWtlIHN1cmUgQ2xvdWRGb3JtYXRpb24gaXMgbm90IGhpdHRpbmcgYSBib3hcbiAgICAgIC8vIHRoYXQgZG9lc24ndCBoYXZlIGl0IHlldC5cbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcm9sZS1hcm4nLCByb2xlQXJuXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbW1lZGlhdGVseSBkZWxldGUgdGhlIHN0YWNrIGFnYWluIGJlZm9yZSB3ZSBkZWxldGUgdGhlIHJvbGUuXG4gICAgICAvL1xuICAgICAgLy8gU2luY2Ugcm9sZXMgYXJlIHN0aWNreSwgaWYgd2UgZGVsZXRlIHRoZSByb2xlIGJlZm9yZSB0aGUgc3RhY2ssIHN1YnNlcXVlbnQgRGVsZXRlU3RhY2tcbiAgICAgIC8vIG9wZXJhdGlvbnMgd2lsbCBmYWlsIHdoZW4gQ2xvdWRGb3JtYXRpb24gdHJpZXMgdG8gYXNzdW1lIHRoZSByb2xlIHRoYXQncyBhbHJlYWR5IGdvbmUuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBkZWxldGVSb2xlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUm9sZSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQobmV3IExpc3RSb2xlUG9saWNpZXNDb21tYW5kKHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLlBvbGljeU5hbWVzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2xpY3kgbmFtZXMgY2Fubm90IGJlIHVuZGVmaW5lZCBmb3IgZGVsZXRlUm9sZSgpIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHBvbGljeU5hbWUgb2YgcmVzcG9uc2UuUG9saWN5TmFtZXMpIHtcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgICAgICAgIG5ldyBEZWxldGVSb2xlUG9saWN5Q29tbWFuZCh7XG4gICAgICAgICAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgICAgICAgICAgUG9saWN5TmFtZTogcG9saWN5TmFtZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQobmV3IERlbGV0ZVJvbGVDb21tYW5kKHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5tZXNzYWdlLmluZGV4T2YoJ2Nhbm5vdCBiZSBmb3VuZCcpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcblxuLy8gVE9ETyBhZGQgbW9yZSB0ZXN0aW5nIHRoYXQgZW5zdXJlcyB0aGUgc3ltbWV0cnkgb2YgdGhlIGdlbmVyYXRlZCBjb25zdHJ1Y3RzIHRvIHRoZSByZXNvdXJjZXMuXG5bJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2NzaGFycCcsICdqYXZhJ10uZm9yRWFjaCgobGFuZ3VhZ2UpID0+IHtcbiAgaW50ZWdUZXN0KFxuICAgIGBjZGsgbWlncmF0ZSAke2xhbmd1YWdlfSBkZXBsb3lzIHN1Y2Nlc3NmdWxseWAsXG4gICAgd2l0aENES01pZ3JhdGVGaXh0dXJlKGxhbmd1YWdlLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgaWYgKGxhbmd1YWdlID09PSAncHl0aG9uJykge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsncGlwJywgJ2luc3RhbGwnLCAnLXInLCAncmVxdWlyZW1lbnRzLnR4dCddKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShcbiAgICAgICAgZml4dHVyZS5zdGFja05hbWVQcmVmaXgsXG4gICAgICAgIHsgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgpO1xuICAgIH0pLFxuICApO1xufSk7XG5cbmludGVnVGVzdChcbiAgJ2NkayBtaWdyYXRlIGdlbmVyYXRlcyBtaWdyYXRlLmpzb24nLFxuICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUoJ3R5cGVzY3JpcHQnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG1pZ3JhdGVGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnbWlncmF0ZS5qc29uJyksICd1dGY4Jyk7XG4gICAgY29uc3QgZXhwZWN0ZWRGaWxlID0gYHtcbiAgICBcXFwiLy9cXFwiOiBcXFwiVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBjZGsgbWlncmF0ZS4gSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgZGVwbG95bWVudCBvZiB0aGlzIGFwcCB0byB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIG9yaWdpbmFsIHJlc291cmNlcy5cXFwiLFxuICAgIFxcXCJTb3VyY2VcXFwiOiBcXFwibG9jYWxmaWxlXFxcIlxuICB9YDtcbiAgICBleHBlY3QoSlNPTi5wYXJzZShtaWdyYXRlRmlsZSkpLnRvRXF1YWwoSlNPTi5wYXJzZShleHBlY3RlZEZpbGUpKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgpO1xuICB9KSxcbik7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gd2l0aCBBTkQvT1IgZmlsdGVycyBjb3JyZWN0bHkgZmlsdGVycyByZXNvdXJjZXMnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjogeyBTQU1QTEVfUkVTT1VSQ0VTOiAnMScgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OlNOUzo6VG9waWMsdGFnLWtleT10YWcxJywgJ3R5cGU9QVdTOjpTUVM6OlF1ZXVlLHRhZy1rZXk9dGFnMyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG4vLyAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICAgIGNvbnN0IHJlc291cmNlTmFtZXMgPSBbXTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc3BvbnNlLlJlc291cmNlcyB8fCBbXSkge1xuLy8gICAgICAgaWYgKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRldG9waWMxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgICAgZXhwZWN0KHJlc291cmNlTmFtZXMuc29tZShlbGUgPT4gZWxlICYmIGVsZS5pbmNsdWRlcygnbWlncmF0ZXF1ZXVlMScpKSkudG9CZVRydXRoeSgpO1xuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gZm9yIHJlc291cmNlcyB3aXRoIFdyaXRlIE9ubHkgUHJvcGVydGllcyBnZW5lcmF0ZXMgd2FybmluZ3MnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjoge1xuLy8gICAgICAgTEFNQkRBX1JFU09VUkNFUzogJzEnLFxuLy8gICAgIH0sXG4vLyAgIH0pO1xuLy8gICBhd2FpdCBmaXh0dXJlLmNkayhcbi8vICAgICBbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgc3RhY2tOYW1lLCAnLS1mcm9tLXNjYW4nLCAnbmV3JywgJy0tZmlsdGVyJywgJ3R5cGU9QVdTOjpMYW1iZGE6OkZ1bmN0aW9uLHRhZy1rZXk9bGFtYmRhLXRhZyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG5cbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQgJiYgcmVzb3VyY2UuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuLy8gICAgICAgICByZXNvdXJjZU5hbWVzLnB1c2gocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBmaXh0dXJlLmxvZyhgUmVzb3VyY2VzOiAke3Jlc291cmNlTmFtZXN9YCk7XG4vLyAgICAgY29uc3QgcmVhZG1lUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgc3RhY2tOYW1lLCAnUkVBRE1FLm1kJyk7XG4vLyAgICAgY29uc3QgcmVhZG1lID0gYXdhaXQgZnMucmVhZEZpbGUocmVhZG1lUGF0aCwgJ3V0ZjgnKTtcbi8vICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oJyMjIFdhcm5pbmdzJyk7XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZU5hbWUgb2YgcmVzb3VyY2VOYW1lcykge1xuLy8gICAgICAgZXhwZWN0KHJlYWRtZSkudG9Db250YWluKGAjIyMgJHtyZXNvdXJjZU5hbWV9YCk7XG4vLyAgICAgfVxuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cblsndHlwZXNjcmlwdCcsICdweXRob24nLCAnY3NoYXJwJywgJ2phdmEnXS5mb3JFYWNoKChsYW5ndWFnZSkgPT4ge1xuICBpbnRlZ1Rlc3QoXG4gICAgYGNkayBtaWdyYXRlIC0tZnJvbS1zdGFjayBjcmVhdGVzIGRlcGxveWFibGUgJHtsYW5ndWFnZX0gYXBwYCxcbiAgICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgY29uc3QgbWlncmF0ZVN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IENyZWF0ZVN0YWNrQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgICAgIFRlbXBsYXRlQm9keTogYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncmVzb3VyY2VzJywgJ3RlbXBsYXRlcycsICdzcXMtdGVtcGxhdGUuanNvbicpLFxuICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBzdGFja1N0YXR1cyA9ICdDUkVBVEVfSU5fUFJPR1JFU1MnO1xuICAgICAgICB3aGlsZSAoc3RhY2tTdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICAgICAgc3RhY2tTdGF0dXMgPSBhd2FpdCAoXG4gICAgICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUgfSkpXG4gICAgICAgICAgKS5TdGFja3M/LlswXS5TdGFja1N0YXR1cyE7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIG1pZ3JhdGVTdGFja05hbWUsICctLWZyb20tc3RhY2snXSwge1xuICAgICAgICAgIG1vZEVudjogeyBNSUdSQVRFX0lOVEVHX1RFU1Q6ICcxJyB9LFxuICAgICAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2QnLCBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIG1pZ3JhdGVTdGFja05hbWUpXSk7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnZGVwbG95JywgbWlncmF0ZVN0YWNrTmFtZV0sIHtcbiAgICAgICAgICBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSxcbiAgICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX0NPTVBMRVRFJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcbn0pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdlIGNhbiBtYWtlIGl0IGZhaWwgYnkgcGFzc2luZyAtLWZhaWxcbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2VuYWJsZURpZmZOb0ZhaWwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiBmYWxzZSwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogZmFsc2UsIGVuYWJsZURpZmZOb0ZhaWw6IHRydWUgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZEZhaWxXaXRoKHsgZmFpbDogdHJ1ZSwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZEZhaWxXaXRoKHsgZmFpbDogdHJ1ZSwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB1bmRlZmluZWQsIGVuYWJsZURpZmZOb0ZhaWw6IGZhbHNlIH0pO1xuICAgIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRTdWNjZWVkV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVzb2x2ZXMubm90LnRvVGhyb3dFcnJvcigpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRGYWlsV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmYocHJvcHM6IERpZmZQYXJhbWV0ZXJzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHVwZGF0ZUNvbnRleHQocHJvcHMuZW5hYmxlRGlmZk5vRmFpbCk7XG4gICAgICBjb25zdCBmbGFnID0gcHJvcHMuZmFpbCAhPSBudWxsID8gKHByb3BzLmZhaWwgPyAnLS1mYWlsJyA6ICctLW5vLWZhaWwnKSA6ICcnO1xuXG4gICAgICByZXR1cm4gZml4dHVyZS5jZGsoWydkaWZmJywgZmxhZywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgICBjZGtKc29uLmNvbnRleHQgPSB7XG4gICAgICAgIC4uLmNka0pzb24uY29udGV4dCxcbiAgICAgICAgJ2F3cy1jZGs6ZW5hYmxlRGlmZk5vRmFpbCc6IGVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICB9O1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICB9XG5cbiAgICB0eXBlIERpZmZQYXJhbWV0ZXJzID0geyBmYWlsPzogYm9vbGVhbjsgZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbiB9O1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCBvbiBtdWx0aXBsZSBzdGFja3MgZXhpdHMgd2l0aCBlcnJvciBpZiBhbnkgb2YgdGhlIHN0YWNrcyBjb250YWlucyBhIGRpZmYnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInKTtcbiAgICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gICAgLy8gV0hFTiAvIFRIRU5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCB3aXRoIG11bHRpcGxlIHN0YWNrIGV4aXRzIHdpdGggaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdIRU4gLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiB3aXRoIGxhcmdlIGNoYW5nZXNldCBkb2VzIG5vdCBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU4gLSBhZGRpbmcgYW4gYWRkaXRpb25hbCByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICAgIGV4cGVjdChkaWZmKS50b01hdGNoKC9Bc3N1bWluZyByb2xlIC4qZmlsZS1wdWJsaXNoaW5nLXJvbGUvKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIHdpdGggbGFyZ2UgY2hhbmdlc2V0IGFuZCBjdXN0b20gdG9vbGtpdCBzdGFjayBuYW1lIGFuZCBxdWFsaWZpZXIgZG9lcyBub3QgZmFpbCcsIHdpdGhvdXRCb290c3RyYXAoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gQm9vdHN0cmFwcGluZyB3aXRoIGN1c3RvbSB0b29sa2l0IHN0YWNrIG5hbWUgYW5kIHF1YWxpZmllclxuICBjb25zdCBxdWFsaWZpZXIgPSAnYWJjMTExMSc7XG4gIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSAnY3VzdG9tLXN0YWNrMic7XG4gIGF3YWl0IGZpeHR1cmUuY2RrQm9vdHN0cmFwTW9kZXJuKHtcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgcXVhbGlmaWVyOiBxdWFsaWZpZXIsXG4gIH0pO1xuXG4gIC8vIERlcGxveWluZyBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2lhbS1yb2xlcycsIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgIH0sXG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtxdWFsaWZpZXJ9YCxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOIC0gYWRkaW5nIGEgcm9sZSB3aXRoIGEgdG9uIG9mIG1ldGFkYXRhIHRvIGNyZWF0ZSBhIGxhcmdlIGRpZmZcbiAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXRvb2xraXQtc3RhY2stbmFtZScsIHRvb2xraXRTdGFja05hbWUsICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtxdWFsaWZpZXJ9YCwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpYW0tcm9sZXMnKV0sIHtcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgIG1vZEVudjoge1xuICAgICAgTlVNQkVSX09GX1JPTEVTOiAnMicsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gQXNzZXJ0IHRoYXQgdGhlIENMSSBhc3N1bWVzIHRoZSBmaWxlIHB1Ymxpc2hpbmcgcm9sZTpcbiAgZXhwZWN0KGRpZmYpLnRvTWF0Y2goL0Fzc3VtaW5nIHJvbGUgLipmaWxlLXB1Ymxpc2hpbmctcm9sZS8pO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1wZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkaWZmJyxcbiAgICAgICctLXNlY3VyaXR5LW9ubHknLFxuICAgICAgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpLFxuICAgIF0pO1xuICAgIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAg4pSCIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHtwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5fSDilIIgYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUg4pSCIHRlc3ROYW1lICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlOiB7IOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCICAgTmFtZTogd2h5LCBQYXRoOiAvaG93LyAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgIOKUgiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG5gO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigndGVzdE5hbWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25zQm91bmRhcnknKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U6IHsnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiB3aHksIFBhdGg6IC9ob3cvJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignfScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tcGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeSBpbmZvcm1hdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbXG4gICAgICAnZGlmZicsXG4gICAgICAnLS1zZWN1cml0eS1vbmx5JyxcbiAgICAgIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKSxcbiAgICBdKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICAgICAgICAgICAg4pSCIFBlcm1pc3Npb25TZXQgbmFtZSDilIIgUGVybWlzc2lvbnNCb3VuZGFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke3Blcm1pc3Npb24tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3l9ICAgIOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgbmljZVdvcmsgICAgICAgICAgIOKUgiBNYW5hZ2VkUG9saWN5QXJuOiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzIOKUgiBOYW1lOiBmb3JTU08sIFBhdGg6ICAgICAgICAgICAgIOKUglxuYDtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignbmljZVdvcmsnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25zQm91bmRhcnknKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdNYW5hZ2VkUG9saWN5QXJuOiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignTmFtZTogZm9yU1NPLCBQYXRoOicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYXNzaWdubWVudCBpbmZvcm1hdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0QXJuICAgICAgICDilIIgUHJpbmNpcGFsSWQgICAgICAgICAgICAgICAgICDilIIgUHJpbmNpcGFsVHlwZSDilIIgVGFyZ2V0SWQgICAgIOKUgiBUYXJnZXRUeXBlICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2Fzc2lnbm1lbnR9IOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUg4pSCIDExMTExMTExLTIyMjItMzMzMy00NDQ0LXRlc3Qg4pSCIFVTRVIgICAgICAgICAg4pSCIDExMTExMTExMTExMSDilIIgQVdTX0FDQ09VTlQg4pSCXG4gICDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbmA7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhc3NpZ25tZW50Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0QXJuJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1ByaW5jaXBhbElkJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtdGVzdCcpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsVHlwZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1VTRVInKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldElkJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTExMTExJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdUYXJnZXRUeXBlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQVdTX0FDQ09VTlQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLWFjY2Vzcy1jb250cm9sIGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICDilIIgQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMgICAgICAgICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZ30g4pSCIGFybjphd3M6dGVzdDp0ZXN0dmFsdWUg4pSCIEtleTogZmlyc3QsIFZhbHVlczogW2FdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHNlY29uZCwgVmFsdWVzOiBbYl0gICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogZm91cnRoLCBWYWx1ZXM6IFtkXSAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBzaXh0aCwgVmFsdWVzOiBbZl0gICAgICAgICDilIJcbiAgIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuYDtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZycpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpcnN0LCBWYWx1ZXM6IFthXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogc2Vjb25kLCBWYWx1ZXM6IFtiXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogdGhpcmQsIFZhbHVlczogW2NdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmb3VydGgsIFZhbHVlczogW2RdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmaWZ0aCwgVmFsdWVzOiBbZV0nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IHNpeHRoLCBWYWx1ZXM6IFtmXScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28gYWNjZXNzIGNvbnRyb2wgY29uZmlnJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tYXNzaWdubWVudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGNoYW5nZXMgYXJlIHByZXNlbnQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpXSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgICdleGl0ZWQgd2l0aCBlcnJvcicsXG4gICAgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gIFwiY2RrIGRpZmYgLS1xdWlldCBkb2VzIG5vdCBwcmludCAnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycgbWVzc2FnZSBmb3Igc3RhY2tzIHdoaWNoIGhhdmUgbm8gZGlmZmVyZW5jZXNcIixcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXF1aWV0JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdTdGFjayB0ZXN0LTEnKTtcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBzdGFjayB3aXRoIGRvY2tlciBhc3NldCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkb2NrZXInKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYW5kIHRlc3Qgc3RhY2sgd2l0aCBsYW1iZGEgYXNzZXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEnLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGxhbWJkYUFybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcbiAgICBpZiAobGFtYmRhQXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RhY2sgZGlkIG5vdCBoYXZlIGV4cGVjdGVkIExhbWJkYSBBUk4gb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5hd3MubGFtYmRhLnNlbmQoXG4gICAgICBuZXcgSW52b2tlQ29tbWFuZCh7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogbGFtYmRhQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvdXRwdXQuUGF5bG9hZD8udHJhbnNmb3JtVG9TdHJpbmcoKSkpLnRvQ29udGFpbignZGVhciBhc3NldCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdCgnZGVwbG95IHN0YWNrIHdpdGggTGFtYmRhIEFzc2V0IHRvIE9iamVjdCBMb2NrLWVuYWJsZWQgYXNzZXQgYnVja2V0Jywgd2l0aG91dEJvb3RzdHJhcChhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBCb290c3RyYXBwaW5nIHdpdGggY3VzdG9tIHRvb2xraXQgc3RhY2sgbmFtZSBhbmQgcXVhbGlmaWVyXG4gIGNvbnN0IHF1YWxpZmllciA9IGZpeHR1cmUucXVhbGlmaWVyO1xuICBjb25zdCB0b29sa2l0U3RhY2tOYW1lID0gZml4dHVyZS5ib290c3RyYXBTdGFja05hbWU7XG4gIGF3YWl0IGZpeHR1cmUuY2RrQm9vdHN0cmFwTW9kZXJuKHtcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgcXVhbGlmaWVyOiBxdWFsaWZpZXIsXG4gIH0pO1xuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBgY2RrLSR7cXVhbGlmaWVyfS1hc3NldHMtJHthd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCl9LSR7Zml4dHVyZS5hd3MucmVnaW9ufWA7XG4gIGF3YWl0IGZpeHR1cmUuYXdzLnMzLnNlbmQobmV3IFB1dE9iamVjdExvY2tDb25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgIE9iamVjdExvY2tDb25maWd1cmF0aW9uOiB7XG4gICAgICBPYmplY3RMb2NrRW5hYmxlZDogJ0VuYWJsZWQnLFxuICAgICAgUnVsZToge1xuICAgICAgICBEZWZhdWx0UmV0ZW50aW9uOiB7XG4gICAgICAgICAgRGF5czogMSxcbiAgICAgICAgICBNb2RlOiAnR09WRVJOQU5DRScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pKTtcblxuICAvLyBEZXBsb3kgYSBzdGFjayB0aGF0IGRlZmluaXRlbHkgY29udGFpbnMgYSBmaWxlIGFzc2V0XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtxdWFsaWZpZXJ9YCxcbiAgICBdLFxuICB9KTtcblxuICAvLyBUSEVOIC0gc2hvdWxkIG5vdCBmYWlsLiBOb3cgY2xlYW4gdGhlIGJ1Y2tldCB3aXRoIGdvdmVybmFuY2UgYnlwYXNzOiBhIHJlZ3VsYXIgZGVsZXRlXG4gIC8vIG9wZXJhdGlvbiB3aWxsIGZhaWwuXG4gIGF3YWl0IGZpeHR1cmUuYXdzLmVtcHR5QnVja2V0KGJ1Y2tldE5hbWUsIHsgYnlwYXNzR292ZXJuYW5jZTogdHJ1ZSB9KTtcbn0pKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGxzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMnXSwgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGV4cGVjdGVkU3RhY2tzID0gW1xuICAgICAgJ2NvbmRpdGlvbmFsLXJlc291cmNlJyxcbiAgICAgICdkb2NrZXInLFxuICAgICAgJ2RvY2tlci13aXRoLWN1c3RvbS1maWxlJyxcbiAgICAgICdmYWlsZWQnLFxuICAgICAgJ2lhbS10ZXN0JyxcbiAgICAgICdsYW1iZGEnLFxuICAgICAgJ21pc3Npbmctc3NtLXBhcmFtZXRlcicsXG4gICAgICAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICdvdXRwdXRzLXRlc3QtMScsXG4gICAgICAnb3V0cHV0cy10ZXN0LTInLFxuICAgICAgJ3BhcmFtLXRlc3QtMScsXG4gICAgICAncGFyYW0tdGVzdC0yJyxcbiAgICAgICdwYXJhbS10ZXN0LTMnLFxuICAgICAgJ3Rlcm1pbmF0aW9uLXByb3RlY3Rpb24nLFxuICAgICAgJ3Rlc3QtMScsXG4gICAgICAndGVzdC0yJyxcbiAgICAgICd3aXRoLW5lc3RlZC1zdGFjaycsXG4gICAgICAnd2l0aC1uZXN0ZWQtc3RhY2stdXNpbmctcGFyYW1ldGVycycsXG4gICAgICAnb3JkZXItY29uc3VtaW5nJyxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBleHBlY3RlZFN0YWNrcykge1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2spKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBUeXBlIHRvIHN0b3JlIHN0YWNrIGRlcGVuZGVuY2llcyByZWN1cnNpdmVseVxuICovXG50eXBlIERlcGVuZGVuY3lEZXRhaWxzID0ge1xuICBpZDogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lEZXRhaWxzW107XG59O1xuXG50eXBlIFN0YWNrRGV0YWlscyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdO1xufTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGxzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24nXSwgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGV4cGVjdGVkU3RhY2tzID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ3Rlc3QtMScsXG4gICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnd2l0aC1uZXN0ZWQtc3RhY2snLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdsaXN0LXN0YWNrcycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbGlzdC1zdGFja3MvRGVwZW5kZW50U3RhY2snLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzL0RlcGVuZGVudFN0YWNrL0lubmVyRGVwZW5kZW50U3RhY2snLFxuICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ2xpc3QtbXVsdGlwbGUtZGVwZW5kZW50LXN0YWNrcycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzL0RlcGVuZGVudFN0YWNrMScsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MvRGVwZW5kZW50U3RhY2syJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3RhY2tEZXBlbmRlbmNpZXMoc3RhY2s6IFN0YWNrRGV0YWlscykge1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5pZCk7XG5cbiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihkZXBlbmRlbmN5LmlkKTtcbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsaWRhdGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeS5kZXBlbmRlbmNpZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhY2suZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFsaWRhdGVEZXBlbmRlbmNpZXMoc3RhY2suZGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgICB2YWxpZGF0ZVN0YWNrRGVwZW5kZW5jaWVzKHN0YWNrKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGxzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uIC0tbG9uZycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2xzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uIC0tbG9uZyddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgbmFtZTogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgIGVudmlyb21lbnQ6IHtcbiAgICAgICAgICBhY2NvdW50OiAndW5rbm93bi1hY2NvdW50JyxcbiAgICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicsXG4gICAgICAgICAgbmFtZTogJ2F3czovL3Vua25vd24tYWNjb3VudC91bmtub3duLXJlZ2lvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICAgIG5hbWU6ICdvcmRlci1jb25zdW1pbmcnLFxuICAgICAgICBlbnZpcm9tZW50OiB7XG4gICAgICAgICAgYWNjb3VudDogJ3Vua25vd24tYWNjb3VudCcsXG4gICAgICAgICAgcmVnaW9uOiAndW5rbm93bi1yZWdpb24nLFxuICAgICAgICAgIG5hbWU6ICdhd3M6Ly91bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nLFxuICAgICAgICB9LFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjay5pZCkpO1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2submFtZSkpO1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5lbnZpcm9tZW50LmFjY291bnQpO1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5lbnZpcm9tZW50Lm5hbWUpO1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5lbnZpcm9tZW50LnJlZ2lvbik7XG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygc3RhY2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKGRlcGVuZGVuY3kuaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc3ludGhpbmcgYSBzdGFnZSB3aXRoIGVycm9ycyBsZWFkcyB0byBmYWlsdXJlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCddLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignVGhpcyBpcyBhbiBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3N5bnRoaW5nIGEgc3RhZ2Ugd2l0aCBlcnJvcnMgY2FuIGJlIHN1cHByZXNzZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tbm8tdmFsaWRhdGlvbiddLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzeW50aCAtLXF1aWV0IGNhbiBiZSBzcGVjaWZpZWQgaW4gY2RrLmpzb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgY2RrSnNvbiA9IHtcbiAgICAgIC4uLmNka0pzb24sXG4gICAgICBxdWlldDogdHJ1ZSxcbiAgICB9O1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpLCBKU09OLnN0cmluZ2lmeShjZGtKc29uKSk7XG4gICAgY29uc3Qgc3ludGhPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChzeW50aE91dHB1dCkubm90LnRvQ29udGFpbigndG9waWMxNTJEODRBMzcnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgc3RhY2sgd2l0aG91dCByZXNvdXJjZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aG91dCByZXNvdXJjZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnLCB7IG1vZEVudjogeyBOT19SRVNPVVJDRTogJ1RSVUUnIH0gfSk7XG5cbiAgICAvLyBUaGlzIHNob3VsZCBoYXZlIHN1Y2NlZWRlZCBidXQgbm90IGRlcGxveWVkIHRoZSBzdGFjay5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2NvbmRpdGlvbmFsLXJlc291cmNlJykgfSksXG4gICAgICApLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdjb25kaXRpb25hbC1yZXNvdXJjZSBkb2VzIG5vdCBleGlzdCcpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRoIHJlc291cmNlc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdjb25kaXRpb25hbC1yZXNvdXJjZScpO1xuXG4gICAgLy8gVGhlbiBhZ2FpbiBXSVRIT1VUIHJlc291cmNlcyAodGhpcyBzaG91bGQgZGVzdHJveSB0aGUgc3RhY2spXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJywgeyBtb2RFbnY6IHsgTk9fUkVTT1VSQ0U6ICdUUlVFJyB9IH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdjb25kaXRpb25hbC1yZXNvdXJjZScpIH0pLFxuICAgICAgKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnY29uZGl0aW9uYWwtcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgbm8gc3RhY2tzIHdpdGggLS1pZ25vcmUtbm8tc3RhY2tzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gZW1wdHkgYXJyYXkgZm9yIHN0YWNrIG5hbWVzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koW10sIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1pZ25vcmUtbm8tc3RhY2tzJ10sXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1uby1zdGFja3MnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgbm8gc3RhY2tzIGVycm9yJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gZW1wdHkgYXJyYXkgZm9yIHN0YWNrIG5hbWVzXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGtEZXBsb3koW10sIHtcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1uby1zdGFja3MnLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnSUFNIGRpZmYnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS10ZXN0JyldKTtcblxuICAgIC8vIFJvdWdobHkgY2hlY2sgZm9yIGEgdGFibGUgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8g4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALeKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgIC8vIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAg4pSCIEVmZmVjdCDilIIgQWN0aW9uICAgICAgICAg4pSCIFByaW5jaXBhbCAgICAgICAgICAgICAgICAgICAgIOKUgiBDb25kaXRpb24g4pSCXG4gICAgLy8g4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICAgLy8g4pSCICsg4pSCICR7U29tZVJvbGUuQXJufSDilIIgQWxsb3cgIOKUgiBzdHM6QXNzdW1lUm9sZSDilIIgU2VydmljZTplYzIuYW1hem9uYXdzLmNvbSAgICAg4pSCICAgICAgICAgICDilIJcbiAgICAvLyDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignJHtTb21lUm9sZS5Bcm59Jyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdzdHM6QXNzdW1lUm9sZScpO1xuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignZWMyLmFtYXpvbmF3cy5jb20nKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdmYXN0IGRlcGxveScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIHdlIGFyZSB1c2luZyBhIHN0YWNrIHdpdGggYSBuZXN0ZWQgc3RhY2sgYmVjYXVzZSBDRk4gd2lsbCBhbHdheXMgYXR0ZW1wdCB0b1xuICAgIC8vIHVwZGF0ZSBhIG5lc3RlZCBzdGFjaywgd2hpY2ggd2lsbCBhbGxvdyB1cyB0byB2ZXJpZnkgdGhhdCB1cGRhdGVzIGFyZSBhY3R1YWxseVxuICAgIC8vIHNraXBwZWQgdW5sZXNzIC0tZm9yY2UgaXMgc3BlY2lmaWVkLlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcbiAgICBjb25zdCBjaGFuZ2VTZXQxID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHNhbWUgc3RhY2sgYWdhaW4sIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgY2hhbmdlIHNldCBjcmVhdGVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJyk7XG4gICAgY29uc3QgY2hhbmdlU2V0MiA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXQyLkNoYW5nZVNldElkKS50b0VxdWFsKGNoYW5nZVNldDEuQ2hhbmdlU2V0SWQpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayBhZ2FpbiB3aXRoIC0tZm9yY2UsIG5vdyB3ZSBzaG91bGQgY3JlYXRlIGEgY2hhbmdlc2V0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBvcHRpb25zOiBbJy0tZm9yY2UnXSB9KTtcbiAgICBjb25zdCBjaGFuZ2VTZXQzID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDMuQ2hhbmdlU2V0SWQpLm5vdC50b0VxdWFsKGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayBhZ2FpbiB3aXRoIHRhZ3MsIGV4cGVjdGVkIHRvIGNyZWF0ZSBhIG5ldyBjaGFuZ2VzZXRcbiAgICAvLyBldmVuIHRob3VnaCB0aGUgcmVzb3VyY2VzIGRpZG4ndCBjaGFuZ2UuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBvcHRpb25zOiBbJy0tdGFncycsICdrZXk9dmFsdWUnXSB9KTtcbiAgICBjb25zdCBjaGFuZ2VTZXQ0ID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDQuQ2hhbmdlU2V0SWQpLm5vdC50b0VxdWFsKGNoYW5nZVNldDMuQ2hhbmdlU2V0SWQpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0Q2hhbmdlU2V0KCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IHN0YWNrQXJuIH0pKTtcbiAgICAgIGlmICghcmVzcG9uc2UuU3RhY2tzPy5bMF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGdldCBhIENoYW5nZVNldCBhdCBhbGwnKTtcbiAgICAgIH1cbiAgICAgIGZpeHR1cmUubG9nKGBGb3VuZCBDaGFuZ2UgU2V0ICR7cmVzcG9uc2UuU3RhY2tzPy5bMF0uQ2hhbmdlU2V0SWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuU3RhY2tzPy5bMF07XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2ZhaWxlZCBkZXBsb3kgZG9lcyBub3QgaGFuZycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIHRoaXMgd2lsbCBoYW5nIGlmIHdlIGludHJvZHVjZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzY0MDMgYWdhaW4uXG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVwbG95KCdmYWlsZWQnKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NhbiBzdGlsbCBsb2FkIG9sZCBhc3NlbWJsaWVzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY3hBc21EaXIgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstaW50ZWctY3gnKTtcblxuICAgIGNvbnN0IHRlc3RBc3NlbWJsaWVzRGlyZWN0b3J5ID0gcGF0aC5qb2luKFJFU09VUkNFU19ESVIsICdjbG91ZC1hc3NlbWJsaWVzJyk7XG4gICAgZm9yIChjb25zdCBhc21kaXIgb2YgYXdhaXQgbGlzdENoaWxkRGlycyh0ZXN0QXNzZW1ibGllc0RpcmVjdG9yeSkpIHtcbiAgICAgIGZpeHR1cmUubG9nKGBBU1NFTUJMWSAke2FzbWRpcn1gKTtcbiAgICAgIGF3YWl0IGNsb25lRGlyZWN0b3J5KGFzbWRpciwgY3hBc21EaXIpO1xuXG4gICAgICAvLyBTb21lIGZpbGVzIGluIHRoZSBhc20gZGlyZWN0b3J5IHRoYXQgaGF2ZSBhIC5qcyBleHRlbnNpb24gYXJlXG4gICAgICAvLyBhY3R1YWxseSB0cmVhdGVkIGFzIHRlbXBsYXRlcy4gRXZhbHVhdGUgdGhlbSB1c2luZyBOb2RlSlMuXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBsaXN0Q2hpbGRyZW4oY3hBc21EaXIsIChmdWxsUGF0aCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZ1bGxQYXRoLmVuZHNXaXRoKCcuanMnKSkpO1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRlbXBsYXRlLnJlcGxhY2UoLy5qcyQvLCAnJyk7XG4gICAgICAgIGF3YWl0IHNoZWxsKFtwcm9jZXNzLmV4ZWNQYXRoLCB0ZW1wbGF0ZSwgJz4nLCB0YXJnZXROYW1lXSwge1xuICAgICAgICAgIGN3ZDogY3hBc21EaXIsXG4gICAgICAgICAgb3V0cHV0czogW2ZpeHR1cmUub3V0cHV0XSxcbiAgICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICAgIFRFU1RfQUNDT1VOVDogYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpLFxuICAgICAgICAgICAgVEVTVF9SRUdJT046IGZpeHR1cmUuYXdzLnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoaXMgZGlyZWN0b3J5IGFzIGEgQ2xvdWQgQXNzZW1ibHlcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnLS1hcHAnLCBjeEFzbURpciwgJy12JywgJ3N5bnRoJ10pO1xuXG4gICAgICAvLyBBc3NlcnQgdGhhdCB0aGVyZSB3YXMgbm8gcHJvdmlkZXJFcnJvciBpbiBDREsncyBzdGRlcnJcbiAgICAgIC8vIEJlY2F1c2Ugd2UgcmVseSBvbiB0aGUgYXBwL2ZyYW1ld29yayB0byBhY3R1YWxseSBlcnJvciBpbiBjYXNlIHRoZVxuICAgICAgLy8gcHJvdmlkZXIgZmFpbHMsIHdlIGluc3BlY3QgdGhlIGxvZ3MgaGVyZS5cbiAgICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJyRwcm92aWRlckVycm9yJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2dlbmVyYXRpbmcgYW5kIGxvYWRpbmcgYXNzZW1ibHknLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBhc21PdXRwdXREaXIgPSBgJHtmaXh0dXJlLmludGVnVGVzdERpcn0tY2RrLWludGVnLWFzbWA7XG4gICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ3JtJywgJy1yZicsIGFzbU91dHB1dERpcl0pO1xuXG4gICAgLy8gU3ludGhlc2l6ZSBhIENsb3VkIEFzc2VtYmx5IHRvdGhlIGRlZmF1bHQgZGlyZWN0b3J5IChjZGsub3V0KSBhbmQgYSBzcGVjaWZpYyBkaXJlY3RvcnkuXG4gICAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCddKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tb3V0cHV0JywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgICAvLyBjZGsub3V0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlIGluZGljYXRlZCAtLW91dHB1dCBzaG91bGQgYmUgdGhlIHNhbWVcbiAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnZGlmZicsICdjZGsub3V0JywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiAnbHMnIHRoZSBzeW50aGVzaXplZCBhc20uXG4gICAgLy8gQ2hhbmdlIHRvIHNvbWUgcmFuZG9tIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgd2UncmUgbm90IGFjY2lkZW50YWxseSBsb2FkaW5nIGNkay5qc29uXG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnLS1hcHAnLCBhc21PdXRwdXREaXIsICdscyddLCB7IGN3ZDogb3MudG1wZGlyKCkgfSk7XG4gICAgLy8gU2FtZSBzdGFja3Mgd2Uga25vdyBhcmUgaW4gdGhlIGFwcFxuICAgIGV4cGVjdChsaXN0KS50b0NvbnRhaW4oYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWxhbWJkYWApO1xuICAgIGV4cGVjdChsaXN0KS50b0NvbnRhaW4oYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMWApO1xuICAgIGV4cGVjdChsaXN0KS50b0NvbnRhaW4oYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMmApO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gdXNlICcuJyBhbmQganVzdCBzeW50aCAsdGhlIGdlbmVyYXRlZCBhc21cbiAgICBjb25zdCBzdGFja1RlbXBsYXRlID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsICcuJywgJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHtcbiAgICAgIGN3ZDogYXNtT3V0cHV0RGlyLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdGFja1RlbXBsYXRlKS50b0NvbnRhaW4oJ3RvcGljMTUyRDg0QTM3Jyk7XG5cbiAgICAvLyBEZXBsb3kgYSBMYW1iZGEgZnJvbSB0aGUgY29waWVkIGFzbVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEnLCB7IG9wdGlvbnM6IFsnLWEnLCAnLiddLCBjd2Q6IGFzbU91dHB1dERpciB9KTtcblxuICAgIC8vIFJlbW92ZSAocmVuYW1lKSB0aGUgb3JpZ2luYWwgY3VzdG9tIGRvY2tlciBmaWxlIHRoYXQgd2FzIHVzZWQgZHVyaW5nIHN5bnRoLlxuICAgIC8vIHRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgYXNzZW1seSBoYXMgYSBjb3B5IG9mIGl0IGFuZCB0aGF0IHRoZSBtYW5pZmVzdCB1c2VzXG4gICAgLy8gcmVsYXRpdmUgcGF0aHMgdG8gcmVmZXJlbmNlIHRvIGl0LlxuICAgIGNvbnN0IGN1c3RvbURvY2tlckZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdkb2NrZXInLCAnRG9ja2VyZmlsZS5DdXN0b20nKTtcbiAgICBhd2FpdCBmcy5yZW5hbWUoY3VzdG9tRG9ja2VyRmlsZSwgYCR7Y3VzdG9tRG9ja2VyRmlsZX1+YCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGRlcGxveSBhIGRvY2tlciBpbWFnZSB3aXRoIGN1c3RvbSBmaWxlIHdpdGhvdXQgc3ludGggKHVzZXMgYXNzZXRzKVxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RvY2tlci13aXRoLWN1c3RvbS1maWxlJywgeyBvcHRpb25zOiBbJy1hJywgJy4nXSwgY3dkOiBhc21PdXRwdXREaXIgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlbmFtZSBiYWNrIHRvIHJlc3RvcmUgZml4dHVyZSB0byBvcmlnaW5hbCBzdGF0ZVxuICAgICAgYXdhaXQgZnMucmVuYW1lKGAke2N1c3RvbURvY2tlckZpbGV9fmAsIGN1c3RvbURvY2tlckZpbGUpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZW1wbGF0ZXMgb24gZGlzayBjb250YWluIG1ldGFkYXRhIHJlc291cmNlLCBhbHNvIGluIG5lc3RlZCBhc3NlbWJsaWVzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gU3ludGggZmlyc3QsIGFuZCBzd2l0Y2ggb24gdmVyc2lvbiByZXBvcnRpbmcgYmVjYXVzZSBjZGsuanNvbiBpcyBkaXNhYmxpbmcgaXRcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tdmVyc2lvbi1yZXBvcnRpbmc9dHJ1ZSddKTtcblxuICAgIC8vIExvYWQgdGVtcGxhdGUgZnJvbSBkaXNrIGZyb20gcm9vdCBhc3NlbWJseVxuICAgIGNvbnN0IHRlbXBsYXRlQ29udGVudHMgPSBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2F0JywgJ2Nkay5vdXQvKi1sYW1iZGEudGVtcGxhdGUuanNvbiddKTtcblxuICAgIGV4cGVjdChKU09OLnBhcnNlKHRlbXBsYXRlQ29udGVudHMpLlJlc291cmNlcy5DREtNZXRhZGF0YSkudG9CZVRydXRoeSgpO1xuXG4gICAgLy8gTG9hZCB0ZW1wbGF0ZSBmcm9tIG5lc3RlZCBhc3NlbWJseVxuICAgIGNvbnN0IG5lc3RlZFRlbXBsYXRlQ29udGVudHMgPSBhd2FpdCBmaXh0dXJlLnNoZWxsKFtcbiAgICAgICdjYXQnLFxuICAgICAgJ2Nkay5vdXQvYXNzZW1ibHktKi1zdGFnZS8qU3RhY2tJblN0YWdlKi50ZW1wbGF0ZS5qc29uJyxcbiAgICBdKTtcblxuICAgIGV4cGVjdChKU09OLnBhcnNlKG5lc3RlZFRlbXBsYXRlQ29udGVudHMpLlJlc291cmNlcy5DREtNZXRhZGF0YSkudG9CZVRydXRoeSgpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ0NESyBzeW50aCBhZGQgdGhlIG1ldGFkYXRhIHByb3BlcnRpZXMgZXhwZWN0ZWQgYnkgc2FtJyxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBmaXh0dXJlLnRlbXBsYXRlKCdUZXN0U3RhY2snKTtcblxuICAgIGNvbnN0IGV4cGVjdGVkUmVzb3VyY2VzID0gW1xuICAgICAge1xuICAgICAgICAvLyBQeXRob24gTGF5ZXIgVmVyc2lvblxuICAgICAgICBpZDogJ1B5dGhvbkxheWVyVmVyc2lvbjM5NDk1Q0VGJyxcbiAgICAgICAgY2RrSWQ6ICdQeXRob25MYXllclZlcnNpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29udGVudCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnTGF5ZXJWZXJzaW9uMzg3OERBM0EnLFxuICAgICAgICBjZGtJZDogJ0xheWVyVmVyc2lvbicsXG4gICAgICAgIGlzQnVuZGxlZDogZmFsc2UsXG4gICAgICAgIHByb3BlcnR5OiAnQ29udGVudCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBCdW5kbGVkIGxheWVyIHZlcnNpb25cbiAgICAgICAgaWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZTZCQURCRDZFJyxcbiAgICAgICAgY2RrSWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZScsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFB5dGhvbiBGdW5jdGlvblxuICAgICAgICBpZDogJ1B5dGhvbkZ1bmN0aW9uMEJDRjc3RkQnLFxuICAgICAgICBjZGtJZDogJ1B5dGhvbkZ1bmN0aW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTG9nIFJldGVudGlvbiBGdW5jdGlvblxuICAgICAgICBpZDogJ0xvZ1JldGVudGlvbmFhZTBhYTNjNWI0ZDRmODdiMDJkODViMjAxZWZkZDhhRkQ0QkZDOEEnLFxuICAgICAgICBjZGtJZDogJ0xvZ1JldGVudGlvbmFhZTBhYTNjNWI0ZDRmODdiMDJkODViMjAxZWZkZDhhJyxcbiAgICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lMjhDQkRBMDUnLFxuICAgICAgICBjZGtJZDogJ0Z1bmN0aW9uUHl0aG9uUnVudGltZScsXG4gICAgICAgIGlzQnVuZGxlZDogZmFsc2UsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBCdW5kbGVkIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZTREOUEwOTE4JyxcbiAgICAgICAgY2RrSWQ6ICdCdW5kbGVkRnVuY3Rpb25QeXRob25SdW50aW1lJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTm9kZUpzIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnTm9kZWpzRnVuY3Rpb24wOUMxRjIwRicsXG4gICAgICAgIGNka0lkOiAnTm9kZWpzRnVuY3Rpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBHbyBGdW5jdGlvblxuICAgICAgICBpZDogJ0dvRnVuY3Rpb25DQTk1RkJBQScsXG4gICAgICAgIGNka0lkOiAnR29GdW5jdGlvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIERvY2tlciBJbWFnZSBGdW5jdGlvblxuICAgICAgICBpZDogJ0RvY2tlckltYWdlRnVuY3Rpb24yOEI3NzNFNicsXG4gICAgICAgIGNka0lkOiAnRG9ja2VySW1hZ2VGdW5jdGlvbicsXG4gICAgICAgIGRvY2tlckZpbGVQYXRoOiAnRG9ja2VyZmlsZScsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZS5JbWFnZVVyaScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBTcGVjIFJlc3QgQXBpXG4gICAgICAgIGlkOiAnU3BlY1Jlc3RBUEk3RDRCM0EzNCcsXG4gICAgICAgIGNka0lkOiAnU3BlY1Jlc3RBUEknLFxuICAgICAgICBwcm9wZXJ0eTogJ0JvZHlTM0xvY2F0aW9uJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZXhwZWN0ZWRSZXNvdXJjZXMpIHtcbiAgICAgIGZpeHR1cmUub3V0cHV0LndyaXRlKGB2YWxpZGF0ZSBhc3NldHMgbWV0YWRhdGEgZm9yIHJlc291cmNlICR7cmVzb3VyY2V9YCk7XG4gICAgICBleHBlY3QocmVzb3VyY2UuaWQgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QodGVtcGxhdGUuUmVzb3VyY2VzW3Jlc291cmNlLmlkXSkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lKCdUZXN0U3RhY2snKX0vJHtyZXNvdXJjZS5jZGtJZH0vUmVzb3VyY2VgLFxuICAgICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9hc3NldFxcLlswLTlhLXpBLVpdezY0fS8pLFxuICAgICAgICAgICAgJ2F3czphc3NldDppcy1idW5kbGVkJzogcmVzb3VyY2UuaXNCdW5kbGVkLFxuICAgICAgICAgICAgJ2F3czphc3NldDpkb2NrZXJmaWxlLXBhdGgnOiByZXNvdXJjZS5kb2NrZXJGaWxlUGF0aCxcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cHJvcGVydHknOiByZXNvdXJjZS5wcm9wZXJ0eSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTmVzdGVkIFN0YWNrXG4gICAgZml4dHVyZS5vdXRwdXQud3JpdGUoJ3ZhbGlkYXRlIGFzc2V0cyBtZXRhZGF0YSBmb3IgbmVzdGVkIHN0YWNrIHJlc291cmNlJyk7XG4gICAgZXhwZWN0KCdOZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja1Jlc291cmNlQjcwODM0RkQnIGluIHRlbXBsYXRlLlJlc291cmNlcykudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdCh0ZW1wbGF0ZS5SZXNvdXJjZXMuTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tSZXNvdXJjZUI3MDgzNEZEKS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWUoXG4gICAgICAgICAgICAnVGVzdFN0YWNrJyxcbiAgICAgICAgICApfS9OZXN0ZWRTdGFjay5OZXN0ZWRTdGFjay9OZXN0ZWRTdGFjay5OZXN0ZWRTdGFja1Jlc291cmNlYCxcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoXG4gICAgICAgICAgICBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeC5yZXBsYWNlKC8tLywgJycpfVRlc3RTdGFja05lc3RlZFN0YWNrWzAtOUEtWl17OH1cXC5uZXN0ZWRcXC50ZW1wbGF0ZVxcLmpzb25gLFxuICAgICAgICAgICksXG4gICAgICAgICAgJ2F3czphc3NldDpwcm9wZXJ0eSc6ICdUZW1wbGF0ZVVSTCcsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ0NESyBzeW50aCBidW5kbGVkIGZ1bmN0aW9ucyBhcyBleHBlY3RlZCcsXG4gIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTeW50aCBmaXJzdFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gZml4dHVyZS50ZW1wbGF0ZSgnVGVzdFN0YWNrJyk7XG5cbiAgICBjb25zdCBleHBlY3RlZEJ1bmRsZWRBc3NldHMgPSBbXG4gICAgICB7XG4gICAgICAgIC8vIFB5dGhvbiBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uMzk0OTVDRUYnLFxuICAgICAgICBmaWxlczogW1xuICAgICAgICAgICdweXRob24vbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JyxcbiAgICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5ZXIgVmVyc2lvblxuICAgICAgICBpZDogJ0xheWVyVmVyc2lvbjM4NzhEQTNBJyxcbiAgICAgICAgZmlsZXM6IFsnbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JywgJ3JlcXVpcmVtZW50cy50eHQnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgbGF5ZXIgdmVyc2lvblxuICAgICAgICBpZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lNkJBREJENkUnLFxuICAgICAgICBmaWxlczogW1xuICAgICAgICAgICdweXRob24vbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JyxcbiAgICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnUHl0aG9uRnVuY3Rpb24wQkNGNzdGRCcsXG4gICAgICAgIGZpbGVzOiBbJ2FwcC5weScsICdnZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JywgJ2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBGdW5jdGlvblxuICAgICAgICBpZDogJ0Z1bmN0aW9uUHl0aG9uUnVudGltZTI4Q0JEQTA1JyxcbiAgICAgICAgZmlsZXM6IFsnYXBwLnB5JywgJ3JlcXVpcmVtZW50cy50eHQnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdCdW5kbGVkRnVuY3Rpb25QeXRob25SdW50aW1lNEQ5QTA5MTgnLFxuICAgICAgICBmaWxlczogWydhcHAucHknLCAnZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsICdnZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbyddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTm9kZUpzIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnTm9kZWpzRnVuY3Rpb24wOUMxRjIwRicsXG4gICAgICAgIGZpbGVzOiBbJ2luZGV4LmpzJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBHbyBGdW5jdGlvblxuICAgICAgICBpZDogJ0dvRnVuY3Rpb25DQTk1RkJBQScsXG4gICAgICAgIGZpbGVzOiBbJ2Jvb3RzdHJhcCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRG9ja2VyIEltYWdlIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRG9ja2VySW1hZ2VGdW5jdGlvbjI4Qjc3M0U2JyxcbiAgICAgICAgZmlsZXM6IFsnYXBwLmpzJywgJ0RvY2tlcmZpbGUnLCAncGFja2FnZS5qc29uJ10sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGV4cGVjdGVkQnVuZGxlZEFzc2V0cykge1xuICAgICAgY29uc3QgYXNzZXRQYXRoID0gdGVtcGxhdGUuUmVzb3VyY2VzW3Jlc291cmNlLmlkXS5NZXRhZGF0YVsnYXdzOmFzc2V0OnBhdGgnXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByZXNvdXJjZS5maWxlcykge1xuICAgICAgICBmaXh0dXJlLm91dHB1dC53cml0ZShgdmFsaWRhdGUgUGF0aCAke2ZpbGV9IGZvciByZXNvdXJjZSAke3Jlc291cmNlfWApO1xuICAgICAgICBleHBlY3QoZXhpc3RzU3luYyhwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgYXNzZXRQYXRoLCBmaWxlKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc2FtIGNhbiBsb2NhbGx5IHRlc3QgdGhlIHN5bnRoZXNpemVkIGNkayBhcHBsaWNhdGlvbicsXG4gIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTeW50aCBmaXJzdFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpeHR1cmUuc2FtTG9jYWxTdGFydEFwaShcbiAgICAgICdUZXN0U3RhY2snLFxuICAgICAgZmFsc2UsXG4gICAgICByYW5kb21JbnRlZ2VyKDMwMDAwLCA0MDAwMCksXG4gICAgICAnL3Jlc3RhcGlzL3NwZWMvcHl0aG9uRnVuY3Rpb24nLFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5hY3Rpb25TdWNjZWVkZWQpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QocmVzdWx0LmFjdGlvbk91dHB1dCkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgbWVzc2FnZTogJ0hlbGxvIFdvcmxkJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc2tpcHMgbm90aWNlIHJlZnJlc2gnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1ub3RpY2VzJ10sXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2UtdXNpbmctY29udGV4dCcsXG4gICAgICB9LFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gTmVpdGhlciBzdWNjZWVkcyBub3IgZmFpbHMsIGJ1dCBza2lwcyB0aGUgcmVmcmVzaFxuICAgIGF3YWl0IGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ05vdGljZXMgcmVmcmVzaGVkJyk7XG4gICAgYXdhaXQgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignTm90aWNlcyByZWZyZXNoIGZhaWxlZCcpO1xuICB9KSxcbik7XG5cbi8qKlxuICogQ3JlYXRlIGEgcXVldWUsIG9ycGhhbiB0aGF0IHF1ZXVlLCB0aGVuIGltcG9ydCB0aGUgcXVldWUuXG4gKlxuICogV2Ugd2FudCB0byB0ZXN0IHdpdGggYSBsYXJnZSB0ZW1wbGF0ZSB0byBtYWtlIHN1cmUgbGFyZ2UgdGVtcGxhdGVzIGNhbiB3b3JrIHdpdGggaW1wb3J0LlxuICovXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IHJlc291cmNlIGltcG9ydCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgcmFuZG9tUHJlZml4ID0gcmFuZG9tU3RyaW5nKCk7XG4gICAgY29uc3QgdW5pcXVlT3V0cHV0c0ZpbGVOYW1lID0gYCR7cmFuZG9tUHJlZml4fU91dHB1dHMuanNvbmA7IC8vIG90aGVyIHRlc3RzIHVzZSB0aGUgb3V0cHV0cyBmaWxlLiBNYWtlIHN1cmUgd2UgZG9uJ3QgY29sbGlkZS5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCB1bmlxdWVPdXRwdXRzRmlsZU5hbWUpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gRmlyc3QsIGNyZWF0ZSBhIHN0YWNrIHRoYXQgaW5jbHVkZXMgbWFueSBxdWV1ZXMsIGFuZCBvbmUgcXVldWUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgYnV0IE5PVCBkZWxldGVkIGZyb20gQVdTLlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnRhYmxlLXN0YWNrJywge1xuICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMScsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcxJyB9LFxuICAgICAgb3B0aW9uczogWyctLW91dHB1dHMtZmlsZScsIG91dHB1dHNGaWxlXSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTZWNvbmQsIG5vdyB0aGUgcXVldWUgd2Ugd2lsbCByZW1vdmUgaXMgaW4gdGhlIHN0YWNrIGFuZCBoYXMgYSBsb2dpY2FsSWQuIFdlIGNhbiBub3cgbWFrZSB0aGUgcmVzb3VyY2UgbWFwcGluZyBmaWxlLlxuICAgICAgLy8gVGhpcyByZXNvdXJjZSBtYXBwaW5nIGZpbGUgd2lsbCBiZSB1c2VkIHRvIHRlbGwgdGhlIGltcG9ydCBvcGVyYXRpb24gd2hhdCBxdWV1ZSB0byBicmluZyBpbnRvIHRoZSBzdGFjay5cbiAgICAgIGNvbnN0IGZ1bGxTdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKChhd2FpdCBmcy5yZWFkRmlsZShvdXRwdXRzRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkudG9TdHJpbmcoKSk7XG4gICAgICBjb25zdCBxdWV1ZUxvZ2ljYWxJZCA9IG91dHB1dHNbZnVsbFN0YWNrTmFtZV0uUXVldWVMb2dpY2FsSWQ7XG4gICAgICBjb25zdCBxdWV1ZVJlc291cmNlTWFwID0ge1xuICAgICAgICBbcXVldWVMb2dpY2FsSWRdOiB7IFF1ZXVlVXJsOiBvdXRwdXRzW2Z1bGxTdGFja05hbWVdLlF1ZXVlVXJsIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgbWFwcGluZ0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgYCR7cmFuZG9tUHJlZml4fU1hcHBpbmcuanNvbmApO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKG1hcHBpbmdGaWxlLCBKU09OLnN0cmluZ2lmeShxdWV1ZVJlc291cmNlTWFwKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAgICAgLy8gVGhpcmQsIHJlbW92ZSB0aGUgcXVldWUgZnJvbSB0aGUgc3RhY2ssIGJ1dCBkb24ndCBkZWxldGUgdGhlIHF1ZXVlIGZyb20gQVdTLlxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICAgIG1vZEVudjogeyBMQVJHRV9URU1QTEFURTogJzEnLCBJTkNMVURFX1NJTkdMRV9RVUVVRTogJzAnLCBSRVRBSU5fU0lOR0xFX1FVRVVFOiAnMCcgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2ZuVGVtcGxhdGVCZWZvcmVJbXBvcnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgR2V0VGVtcGxhdGVDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydC5UZW1wbGF0ZUJvZHkpLm5vdC50b0NvbnRhaW4ocXVldWVMb2dpY2FsSWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2ltcG9ydCcsICctLXJlc291cmNlLW1hcHBpbmcnLCBtYXBwaW5nRmlsZSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyldLCB7XG4gICAgICAgIG1vZEVudjogeyBMQVJHRV9URU1QTEFURTogJzEnLCBJTkNMVURFX1NJTkdMRV9RVUVVRTogJzEnLCBSRVRBSU5fU0lOR0xFX1FVRVVFOiAnMCcgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUFmdGVySW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZGVzY3JpYmVTdGFja3NSZXNwb25zZS5TdGFja3MhWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdJTVBPUlRfQ09NUExFVEUnKTtcbiAgICAgIGV4cGVjdChjZm5UZW1wbGF0ZUFmdGVySW1wb3J0LlRlbXBsYXRlQm9keSkudG9Db250YWluKHF1ZXVlTG9naWNhbElkKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXBcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnaW1wb3J0YWJsZS1zdGFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IG1pZ3JhdGUgZGVwbG95bWVudCBmb3IgYXBwIHdpdGggbG9jYWxmaWxlIHNvdXJjZSBpbiBtaWdyYXRlLmpzb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBJbml0aWFsIGRlcGxveVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuICAgICAgbW9kRW52OiB7IE9SUEhBTl9UT1BJQzogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ21pZ3JhdGUtc3RhY2snKTtcbiAgICBjb25zdCBxdWV1ZU5hbWUgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVOYW1lO1xuICAgIGNvbnN0IHF1ZXVlVXJsID0gb3V0cHV0c1tzdGFja05hbWVdLlF1ZXVlVXJsO1xuICAgIGNvbnN0IHF1ZXVlTG9naWNhbElkID0gb3V0cHV0c1tzdGFja05hbWVdLlF1ZXVlTG9naWNhbElkO1xuICAgIGZpeHR1cmUubG9nKGBDcmVhdGVkIHF1ZXVlICR7cXVldWVVcmx9IGluIHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfWApO1xuXG4gICAgLy8gV3JpdGUgdGhlIG1pZ3JhdGUgZmlsZSBiYXNlZCBvbiB0aGUgSUQgZnJvbSBzdGVwIG9uZSwgdGhlbiBkZXBsb3kgdGhlIGFwcCB3aXRoIG1pZ3JhdGVcbiAgICBjb25zdCBtaWdyYXRlRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ21pZ3JhdGUuanNvbicpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIG1pZ3JhdGVGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBTb3VyY2U6ICdsb2NhbGZpbGUnLFxuICAgICAgICBSZXNvdXJjZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZXNvdXJjZVR5cGU6ICdBV1M6OlNRUzo6UXVldWUnLFxuICAgICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IHF1ZXVlTG9naWNhbElkLFxuICAgICAgICAgICAgUmVzb3VyY2VJZGVudGlmaWVyOiB7IFF1ZXVlVXJsOiBxdWV1ZVVybCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSxcbiAgICApO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgZml4dHVyZS5sb2coYERlbGV0ZWQgc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9LCBvcnBoYW5pbmcgJHtxdWV1ZU5hbWV9YCk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IHN0YWNrIGZyb20gZXhpc3RpbmcgcXVldWVcbiAgICB0cnkge1xuICAgICAgZml4dHVyZS5sb2coYERlcGxveWluZyBuZXcgc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9LCBtaWdyYXRpbmcgJHtxdWV1ZU5hbWV9IGludG8gc3RhY2tgKTtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFudXBcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gIFwiaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIExhbWJkYSBmdW5jdGlvbidzIGRlc2NyaXB0aW9uIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcIixcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnb3JpZ2luYWwgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSByZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5bMF0uT3V0cHV0VmFsdWU7XG5cbiAgICAvLyBUSEVOXG5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgIC8vIFwiQ1JFQVRFX0NPTVBMRVRFXCJcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihgTGFtYmRhIEZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nIGhvdHN3YXBwZWQhYCk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIEZuOjpJbXBvcnRWYWx1ZSBpbnRyaW5zaWMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZXhwb3J0LXZhbHVlLXN0YWNrJyk7XG4gICAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnb3JpZ2luYWwgdmFsdWUnLFxuICAgICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICAgICAgVVNFX0lNUE9SVF9WQUxVRV9MQU1CREFfUFJPUEVSVFk6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgICAgLy8gVEhFTlxuXG4gICAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihgTGFtYmRhIEZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nIGhvdHN3YXBwZWQhYCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEVuc3VyZSBjbGVhbnVwIGluIHJldmVyc2Ugb3JkZXIgZHVlIHRvIHVzZSBvZiBpbXBvcnQvZXhwb3J0XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2xhbWJkYS1ob3Rzd2FwJyk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2V4cG9ydC12YWx1ZS1zdGFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgZWNzIHNlcnZpY2UnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfRUNTX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSByZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ1NlcnZpY2VOYW1lJyk/Lk91dHB1dFZhbHVlO1xuXG4gICAgLy8gVEhFTlxuXG4gICAgLy8gVGhlIGRlcGxveW1lbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgZnVsbCBkZXBsb3ltZW50LCB0aHVzIHRoZSBzdGFjaydzIHN0YXR1cyBtdXN0IHJlbWFpbnNcbiAgICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYEVDUyBTZXJ2aWNlICcke3NlcnZpY2VOYW1lfScgaG90c3dhcHBlZCFgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgZm9yIGVjcyBzZXJ2aWNlIHdhaXRzIGZvciBkZXBsb3ltZW50IHRvIGNvbXBsZXRlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19FQ1NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGNsdXN0ZXJOYW1lID0gZGVzY3JpYmVTdGFja3NSZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ0NsdXN0ZXJOYW1lJylcbiAgICAgID8uT3V0cHV0VmFsdWUhO1xuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gZGVzY3JpYmVTdGFja3NSZXNwb25zZS5TdGFja3M/LlswXS5PdXRwdXRzPy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ1NlcnZpY2VOYW1lJylcbiAgICAgID8uT3V0cHV0VmFsdWUhO1xuXG4gICAgLy8gVEhFTlxuXG4gICAgY29uc3QgZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuZWNzLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmQoe1xuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50cykudG9IYXZlTGVuZ3RoKDEpOyAvLyBvbmx5IG9uZSBkZXBsb3ltZW50IHByZXNlbnRcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgZm9yIGVjcyBzZXJ2aWNlIGRldGVjdHMgZmFpbGVkIGRlcGxveW1lbnQgYW5kIGVycm9ycycsXG4gIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIFVTRV9JTlZBTElEX0VDU19IT1RTV0FQX0lNQUdFOiAndHJ1ZScsXG4gICAgICB9LFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdWJzdHJpbmcgPSAnUmVzb3VyY2UgaXMgbm90IGluIHRoZSBzdGF0ZSBkZXBsb3ltZW50Q29tcGxldGVkJztcblxuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihleHBlY3RlZFN1YnN0cmluZyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvQ29udGFpbignaG90c3dhcHBlZCEnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBBcHBTeW5jIEFQSXMgd2l0aCBtYW55IGZ1bmN0aW9ucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYXBwc3luYy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2FwcHN5bmMtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0FQUFNZTkNfUFJPUEVSVFlfVkFMVUU6ICckdXRpbC5xcigkY3R4LnN0YXNoLnB1dChcIm5ld1RlbXBsYXRlXCIsIFtdKSlcXG4kdXRpbC50b0pzb24oe30pJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIC8vIGFzc2VydCBhbGwgNTAgZnVuY3Rpb25zIHdlcmUgaG90c3dhcHBlZFxuICAgIGZvciAoY29uc3QgaSBvZiBBcnJheSg1MCkua2V5cygpKSB7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYEFXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uICdhcHBzeW5jX2Z1bmN0aW9uJHtpfScgaG90c3dhcHBlZCFgKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIEVDUyBkZXBsb3ltZW50IHJlc3BlY3RzIHByb3BlcnRpZXMgb3ZlcnJpZGUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gVXBkYXRlIHRoZSBDREsgY29udGV4dCB3aXRoIHRoZSBuZXcgRUNTIHByb3BlcnRpZXNcbiAgbGV0IGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCA9IDEwMDtcbiAgbGV0IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCA9IDIwMDtcbiAgbGV0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICBjZGtKc29uID0ge1xuICAgIC4uLmNka0pzb24sXG4gICAgaG90c3dhcDoge1xuICAgICAgZWNzOiB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5UGVyY2VudDogZWNzTWluaW11bUhlYWx0aHlQZXJjZW50LFxuICAgICAgICBtYXhpbXVtSGVhbHRoeVBlcmNlbnQ6IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbikpO1xuXG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1ob3Rzd2FwJyxcbiAgICBdLFxuICAgIG1vZEVudjoge1xuICAgICAgRFlOQU1JQ19FQ1NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBjbHVzdGVyTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuZWNzLnNlbmQoXG4gICAgbmV3IERlc2NyaWJlU2VydmljZXNDb21tYW5kKHtcbiAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gICAgfSksXG4gICk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWluaW11bUhlYWx0aHlQZXJjZW50KS50b0VxdWFsKGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWF4aW11bVBlcmNlbnQpLnRvRXF1YWwoZWNzTWF4aW11bUhlYWx0aHlQZXJjZW50KTtcbn0pKTtcblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkcmVuKHBhcmVudDogc3RyaW5nLCBwcmVkOiAoeDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgYXdhaXQgZnMucmVhZGRpcihwYXJlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwYXJlbnQsIGNoaWxkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChhd2FpdCBwcmVkKGZ1bGxQYXRoKSkge1xuICAgICAgcmV0LnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0Q2hpbGREaXJzKHBhcmVudDogc3RyaW5nKSB7XG4gIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFyZW50LCBhc3luYyAoZnVsbFBhdGg6IHN0cmluZykgPT4gKGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuaW50ZWdUZXN0KFxuICAnY2RrIG5vdGljZXMgd2l0aCAtLXVuYWNrbm93bGVkZ2VkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgbm90aWNlc1VuYWNrbm93bGVkZ2VkID0gYXdhaXQgZml4dHVyZS5jZGsoWydub3RpY2VzJywgJy0tdW5hY2tub3dsZWRnZWQnXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBub3RpY2VzVW5hY2tub3dsZWRnZWRBbGlhcyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbm90aWNlcycsICctdSddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGV4cGVjdChub3RpY2VzVW5hY2tub3dsZWRnZWQpLnRvRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9UaGVyZSBhcmUgXFxkezEsfSB1bmFja25vd2xlZGdlZCBub3RpY2VcXChzXFwpLi8pKTtcbiAgICBleHBlY3Qobm90aWNlc1VuYWNrbm93bGVkZ2VkKS50b0VxdWFsKG5vdGljZXNVbmFja25vd2xlZGdlZEFsaWFzKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IGNkayByb2xsYmFjaycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBSb2xsYmFja1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydyb2xsYmFjayddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyByb2xsYmFjayBpZiBwYXVzZWQgYW5kIGNoYW5nZSBjb250YWlucyBhIHJlcGxhY2VtZW50JyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBwaGFzZSA9ICcyYSc7XG5cbiAgICAgIC8vIFNob3VsZCBmYWlsXG4gICAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIERvIGEgZGVwbG95bWVudCB3aXRoIGEgcmVwbGFjZW1lbnQgYW5kIC0tZm9yY2U6IHRoaXMgd2lsbCByb2xsIGJhY2sgZmlyc3QgYW5kIHRoZW4gZGVwbG95IG5vcm1hbGx5XG4gICAgICBwaGFzZSA9ICczJztcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snLCAnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcGF1c2VkIGFuZCAtLW5vLXJvbGxiYWNrIGlzIHJlbW92ZWQgZnJvbSBmbGFncycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgcmVtb3ZpbmcgLS1uby1yb2xsYmFjazogdGhpcyB3aWxsIHJvbGwgYmFjayBmaXJzdCBhbmQgdGhlbiBkZXBsb3kgbm9ybWFsbHlcbiAgICAgIHBoYXNlID0gJzEnO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcmVwbGFjZW1lbnQgYW5kIC0tbm8tcm9sbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIGZsYWdzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgd2l0aCBhIHJlcGxhY2VtZW50IGFuZCByZW1vdmluZyAtLW5vLXJvbGxiYWNrOiB0aGlzIHdpbGwgZG8gYSByZWd1bGFyIHJvbGxiYWNrIGRlcGxveVxuICAgICAgcGhhc2UgPSAnMyc7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLWZvcmNlJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3Rlc3QgY2RrIHJvbGxiYWNrIC0tZm9yY2UnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyb2xsYmFjay10ZXN0LWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgbGV0IHBoYXNlID0gJzEnO1xuXG4gICAgLy8gU2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHBoYXNlID0gJzJiJzsgLy8gRmFpbCB1cGRhdGUgYW5kIGFsc28gZmFpbCByb2xsYmFja1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIFNob3VsZCBzdGlsbCBmYWlsXG4gICAgICBjb25zdCByb2xsYmFja091dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snXSwge1xuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJvbGxiYWNrT3V0cHV0KS50b0NvbnRhaW4oJ0ZhaWxpbmcgcm9sbGJhY2snKTtcblxuICAgICAgLy8gUm9sbGJhY2sgYW5kIGZvcmNlIGNsZWFudXBcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snLCAnLS1mb3JjZSddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnY2RrIG5vdGljZXMgYXJlIGRpc3BsYXllZCBjb3JyZWN0bHknLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcblxuICBjb25zdCBjYWNoZSA9IHtcbiAgICBleHBpcmF0aW9uOiA0MTI1OTYzMjY0MDAwLCAvLyB5ZWFyIDIxMDAgc28gd2UgbmV2ZXIgb3ZlcndyaXRlIHRoZSBjYWNoZVxuICAgIG5vdGljZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdCb290c3RyYXAgMTk5OSBOb3RpY2UnLFxuICAgICAgICBpc3N1ZU51bWJlcjogNDQ0NCxcbiAgICAgICAgb3ZlcnZpZXc6ICdPdmVydmlldyBmb3IgQm9vdHN0cmFwIDE5OTkgTm90aWNlLiBBZmZlY3RlZEVudmlyb25tZW50czo8e3Jlc29sdmU6RU5WSVJPTk1FTlRTfT4nLFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2Jvb3RzdHJhcCcsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnPDE5OTknLCAvLyBzbyB3ZSBpbmNsdWRlIGFsbCBwb3NzaWJsZSBlbnZpcm9ubWVudHNcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzY2hlbWFWZXJzaW9uOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgY29uc3QgY2RrQ2FjaGVEaXIgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjYWNoZScpO1xuICBhd2FpdCBmcy5ta2RpcihjZGtDYWNoZURpcik7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oY2RrQ2FjaGVEaXIsICdub3RpY2VzLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2FjaGUpKTtcblxuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbm90aWNlcycsIHtcbiAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIENES19IT01FOiBmaXh0dXJlLmludGVnVGVzdERpcixcbiAgICB9LFxuICB9KTtcblxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ092ZXJ2aWV3IGZvciBCb290c3RyYXAgMTk5OSBOb3RpY2UnKTtcblxuICAvLyBhc3NlcnQgZHluYW1pYyBlbnZpcm9ubWVudHMgYXJlIHJlc29sdmVkXG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbihgQWZmZWN0ZWRFbnZpcm9ubWVudHM6PGF3czovLyR7YXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpfS8ke2ZpeHR1cmUuYXdzLnJlZ2lvbn0+YCk7XG5cbn0pKTtcbiJdfQ==
|