@rudderstack/integrations-lib 0.2.1 → 0.2.4
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/build/constants.js +1 -1
- package/build/errors/aborted_error.d.ts +1 -1
- package/build/errors/aborted_error.d.ts.map +1 -1
- package/build/errors/aborted_error.js +1 -1
- package/build/errors/base.d.ts.map +1 -1
- package/build/errors/base.js +2 -2
- package/build/errors/configuration_auth_error.d.ts +2 -2
- package/build/errors/configuration_auth_error.d.ts.map +1 -1
- package/build/errors/configuration_auth_error.js +3 -3
- package/build/errors/configuration_error.d.ts +1 -1
- package/build/errors/configuration_error.js +1 -1
- package/build/errors/instrumentation_error.d.ts +1 -1
- package/build/errors/instrumentation_error.js +1 -1
- package/build/errors/invalid_auth_token_error.d.ts +1 -1
- package/build/errors/invalid_auth_token_error.d.ts.map +1 -1
- package/build/errors/invalid_auth_token_error.js +1 -1
- package/build/errors/network_error.d.ts +1 -1
- package/build/errors/network_error.d.ts.map +1 -1
- package/build/errors/network_error.js +2 -2
- package/build/errors/oauth_secret_error.d.ts +1 -1
- package/build/errors/oauth_secret_error.js +1 -1
- package/build/errors/platform_error.d.ts +1 -1
- package/build/errors/platform_error.js +1 -1
- package/build/errors/redis_error.d.ts +1 -1
- package/build/errors/redis_error.js +1 -1
- package/build/errors/retryable_error.d.ts +1 -1
- package/build/errors/retryable_error.d.ts.map +1 -1
- package/build/errors/retryable_error.js +1 -1
- package/build/errors/throttled_error.d.ts +1 -1
- package/build/errors/throttled_error.js +1 -1
- package/build/errors/unauthorized_error.d.ts +1 -1
- package/build/errors/unauthorized_error.d.ts.map +1 -1
- package/build/errors/unauthorized_error.js +1 -1
- package/build/errors/unhandled_status_code_error.d.ts +1 -1
- package/build/errors/unhandled_status_code_error.js +1 -1
- package/build/errors/unsupported_event_error.d.ts +1 -1
- package/build/errors/unsupported_event_error.js +1 -1
- package/build/logger.js +1 -1
- package/build/network/clients/axios_client.d.ts.map +1 -1
- package/build/network/clients/axios_client.js +9 -7
- package/build/network/clients/axios_client.test.js +12 -24
- package/build/network/clients/types.d.ts.map +1 -1
- package/build/network/clients/types.js +1 -1
- package/build/network/factory.d.ts +1 -1
- package/build/network/factory.d.ts.map +1 -1
- package/build/network/factory.js +1 -1
- package/build/network/factory.test.js +3 -2
- package/build/network/index.d.ts.map +1 -1
- package/build/network/index.js +1 -1
- package/build/structured-logger.js +1 -1
- package/build/tags.js +43 -43
- package/build/types.d.ts.map +1 -1
- package/build/types.js +4 -10
- package/build/utils/json.d.ts.map +1 -1
- package/build/utils/json.js +5 -2
- package/build/utils/json.test.js +1 -1
- package/build/utils/misc.d.ts +8 -1
- package/build/utils/misc.d.ts.map +1 -1
- package/build/utils/misc.js +16 -10
- package/build/utils/misc.test.js +33 -1
- package/build/utils/sem.d.ts.map +1 -1
- package/build/utils/sem.js +1 -1
- package/mock/index.d.ts.map +1 -1
- package/mock/index.js +1 -1
- package/package.json +22 -6
package/build/utils/misc.test.js
CHANGED
|
@@ -1094,6 +1094,7 @@ describe('misc', () => {
|
|
|
1094
1094
|
});
|
|
1095
1095
|
// Tests that getType returns 'function' when the input is a generator function
|
|
1096
1096
|
it('should return function when the input is a generator function', () => {
|
|
1097
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
1097
1098
|
const input = function* () { };
|
|
1098
1099
|
const result = (0, misc_1.getType)(input);
|
|
1099
1100
|
expect(result).toBe('function');
|
|
@@ -2055,5 +2056,36 @@ describe('misc', () => {
|
|
|
2055
2056
|
expect(dashCount).toBe(4);
|
|
2056
2057
|
});
|
|
2057
2058
|
});
|
|
2059
|
+
describe('getErrorRespEvents -- metadata tests', () => {
|
|
2060
|
+
const metadata1 = {
|
|
2061
|
+
sourceId: 's3',
|
|
2062
|
+
workspaceId: 'wsp1',
|
|
2063
|
+
destinationId: 'd1',
|
|
2064
|
+
jobRunId: '123',
|
|
2065
|
+
jobId: 1,
|
|
2066
|
+
};
|
|
2067
|
+
const metadata2 = {
|
|
2068
|
+
sourceId: 's2',
|
|
2069
|
+
workspaceId: 'wsp1',
|
|
2070
|
+
destinationId: 'd2',
|
|
2071
|
+
jobRunId: '122',
|
|
2072
|
+
jobId: 4,
|
|
2073
|
+
};
|
|
2074
|
+
it('should return proper object, when we send proper metadata structure', () => {
|
|
2075
|
+
const out = (0, misc_1.getErrorRespEvents)([metadata1, metadata2], 400, 'err-1', {}, false);
|
|
2076
|
+
expect(Array.isArray(out.metadata)).toBe(true);
|
|
2077
|
+
expect(out.metadata?.length).toBe(2);
|
|
2078
|
+
});
|
|
2079
|
+
it('should return proper object, when we send metadata as object', () => {
|
|
2080
|
+
const out = (0, misc_1.getErrorRespEvents)([metadata2], 400, 'err-1', {}, false);
|
|
2081
|
+
expect(Array.isArray(out.metadata)).toBe(true);
|
|
2082
|
+
expect(out.metadata?.length).toBe(1);
|
|
2083
|
+
});
|
|
2084
|
+
it('should return proper object(metadata empty array), when we send metadata as null', () => {
|
|
2085
|
+
const out = (0, misc_1.getErrorRespEvents)([], 400, 'err-1', {}, false);
|
|
2086
|
+
expect(Array.isArray(out.metadata)).toBe(true);
|
|
2087
|
+
expect(out.metadata?.length).toBe(0);
|
|
2088
|
+
});
|
|
2089
|
+
});
|
|
2058
2090
|
});
|
|
2059
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFpRDtBQUNqRCxpQ0ErQmdCO0FBRWhCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FB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RUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcs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RyxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVksR0FBRSxDQUFDO1lBQzVCLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge1xuICBiYXNlNjRDb252ZXJ0b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldEV2ZW50VGltZSxcbiAgZ2V0VHlwZSxcbiAgaXNCbGFuayxcbiAgaXNEZWZpbmVkLFxuICBpc0RlZmluZWRBbmROb3ROdWxsLFxuICBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHksXG4gIGlzTm90RW1wdHksXG4gIGlzTm90TnVsbCxcbiAgaXNQcmltaXRpdmUsXG4gIGlzVmFsaWRVcmwsXG4gIHJlbW92ZU51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkVmFsdWVzLFxuICBzdHJpcFRyYWlsaW5nU2xhc2gsXG4gIGlzT2JqZWN0LFxuICBpc0VtcHR5LFxuICBpc0VtcHR5T2JqZWN0LFxuICBpc0RlZmluZWROb3ROdWxsTm90RW1wdHksXG4gIHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50LFxuICBnZXRIYXNoRnJvbUFycmF5LFxuICBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZSxcbiAgZmxhdHRlbkpzb24sXG4gIGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyxcbiAgZ2V0T2Zmc2V0SW5TZWMsXG4gIGZvcm1hdFRpbWVTdGFtcCxcbiAgaGFzaFRvU2hhMjU2LFxuICBnZW5lcmF0ZVVVSUQsXG59IGZyb20gJy4vbWlzYyc7XG5cbmRlc2NyaWJlKCdtaXNjJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNEZWZpbmVkJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBkZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoNSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoJ2hlbGxvJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKDEwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQobnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUbyB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKG1hcCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgb2JqZWN0aXZlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgU2V0IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IFNldCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2V0T2JqID0gbmV3IFNldCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChzZXRPYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IFdlYWtNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgV2Vha01hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlXZWFrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoZW1wdHlXZWFrTWFwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzTm90RW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBub24temVybyBudW1iZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSBub24temVybyBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHplcm9cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyB6ZXJvJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIE5hTicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoTmFOKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGZhbHNlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgdHJ1ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSB0cnVlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc05vdE51bGwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCd0ZXN0JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoMTIzKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChudWxsKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChzeW1ib2wpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkQW5kTm90TnVsbCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoe30pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCdoZWxsbycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KFsxLCAyLCAzXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkodHJ1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhIG51bWJlciB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgbnVtYmVyIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSg0MikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCcnKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoe30pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoW10pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KG51bGwpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnICAgJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IHByb3AxOiBudWxsLCBwcm9wMjogdW5kZWZpbmVkIH0pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNCbGFuaycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHt9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnaGVsbG8nKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoWzEsIDIsIDNdKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh7IGtleTogJ3ZhbHVlJyB9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKG51bGwpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHVuZGVmaW5lZCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh0cnVlKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuayhmYWxzZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbnVtYmVyIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKDEyMykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoMCkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoLTEpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIHdoaXRlc3BhY2Ugc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJyAgICcpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdcXHQnKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygnXFxuJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhOYU4pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCBpZiBpdCBpcyBub3QgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIG5vdCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6IHVuZGVmaW5lZCwgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGlucHV0IGlzIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiB1bmRlZmluZWQgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IG51bGwgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogbnVsbCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGZhbHNlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB6ZXJvXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgemVybycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IDAgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogMCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBOYU4gfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogTmFOIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZU51bGxWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgb2JqZWN0IGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbm8gbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgbm8gbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHVuZGVmaW5lZCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIG51bWJlciBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG51bWJlciB3aGVuIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGFycmF5IHdoZW4gaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyAnMCc6IDEsICcxJzogMiwgJzInOiAzIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGlucHV0IGhhcyBvbmx5IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwsIGI6IG51bGwsIGM6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbmVzdGVkIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGZyb20gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IG51bGwgfSwgYzogeyBkOiB7IGU6IG51bGwgfSB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYToge30sIGM6IHsgZDoge30gfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG5lc3RlZCBub24tbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxIH0sIGM6IHsgZDogeyBlOiAnaGVsbG8nIH0gfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBjOiB7IGQ6IHsgZTogJ2hlbGxvJyB9IH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBtaXhlZCBuZXN0ZWQgbnVsbCBhbmQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGFuZCBrZWVwIG5vbi1udWxsIHZhbHVlcyBpbiB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogbnVsbCwgYzogMSB9LCBkOiB7IGU6IG51bGwsIGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYzogMSB9LCBkOiB7IGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlcyBhbmQgZmFsc3kgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbnVsbCB2YWx1ZXMgYW5kIGtlZXAgZmFsc3kgbm9uLW51bGwgdmFsdWVzIGluIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCwgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHRydWUgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gMTIzO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXModmFsdWUpKS50b0VxdWFsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdpdGggbmVzdGVkIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aXRoIG5lc3RlZCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggbmVzdGVkIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IHsgYzogJ3Rlc3QnLCBkOiB0cnVlIH0sIGU6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUT0RPOiBORUVEIFRPIEZJWCBUSElTIFRFU1RTXG4gICAgLy8gLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkLCBub3QgbnVsbCwgYW5kIG5vdCBlbXB0eVxuICAgIC8vIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQsIG5vdCBudWxsLCBhbmQgbm90IGVtcHR5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb2JqID0ge1xuICAgIC8vICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgLy8gICAgIHByb3AyOiAxMjMsXG4gICAgLy8gICAgIHByb3AzOiBbMSwgMiwgM10sXG4gICAgLy8gICAgIHByb3A0OiB7IG5lc3RlZFByb3A6ICduZXN0ZWRWYWx1ZScgfSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAgICAvLyBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkIGFuZCBub3QgbnVsbCcsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9iaiA9IHtcbiAgICAvLyAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgIC8vICAgICBwcm9wMjogMTIzLFxuICAgIC8vICAgICBwcm9wMzogWzEsIDIsIDNdLFxuICAgIC8vICAgICBwcm9wNDogeyBuZXN0ZWRQcm9wOiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgLy8gICB9O1xuICAgIC8vICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBudWxsO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgb2JqZWN0IGhhcyBvbmx5IGVtcHR5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBvYmplY3QgaGFzIG9ubHkgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBwcm9wMTogJycsXG4gICAgICAgIHByb3AyOiAnICAgICcsXG4gICAgICAgIHByb3AzOiBbXSxcbiAgICAgICAgcHJvcDQ6IHt9LFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbCh7IHByb3AyOiAnICAgICcgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIG5ldyBvYmplY3QgYW5kIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgICAgICBwcm9wMjogbnVsbCxcbiAgICAgICAgcHJvcDM6ICcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHByb3AxOiAndmFsdWUxJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKG9iaik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmbGF0dGVuTWFwJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGlucHV0IGlmIGl0IGlzIG5vdCBhbiBhcnJheSBvciBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW5wdXQgd2hlbiBpdCBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA1O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5XG4gICAgLy8gT25seSAxIGxldmVsIG9mIGZsYXR0ZW5pbmcgaXMgcGVyZm9ybWVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgM10sIFs0LCBbNSwgNl1dXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNCwgWzUsIDZdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogWzEsIDJdLCBiOiBbMywgNF0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBjb2xsZWN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtudWxsXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW3VuZGVmaW5lZF07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogdW5kZWZpbmVkIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW05hTl07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogTmFOIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWycnXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1LCBpc1N0dWRlbnQ6IHRydWUsIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWydKb2huJywgMjUsIHRydWUsICdyZWFkaW5nJywgJ3BhaW50aW5nJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgWzMsIDRdXSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIFszLCA0XSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMjUsIGlzU3R1ZGVudDogdHJ1ZSwgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJ0pvaG4nLCAyNSwgdHJ1ZSwgJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCBbMywgNF1dLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgWzMsIDRdLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFdmVudFRpbWUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGEgdGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhIHRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjItMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gb3JpZ2luYWxUaW1lc3RhbXAgcHJvcGVydHlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgb3JpZ2luYWxUaW1lc3RhbXA6ICcyMDIyLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RXZlbnRUaW1lKG1lc3NhZ2UgYXMgYW55KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVJbnN0YW5jZU9mKERhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIEluc3RydW1lbnRhdGlvbkVycm9yIHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5laXRoZXIgYSB0aW1lc3RhbXAgbm9yIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBJbnN0cnVtZW50YXRpb25FcnJvciB3aGVuIHRoZSBtZXNzYWdlIGhhcyBuZWl0aGVyIGEgdGltZXN0YW1wIG5vciBhbiBvcmlnaW5hbFRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGV4cGVjdCgoKSA9PiBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpKS50b1Rocm93KEluc3RydW1lbnRhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaW52YWxpZCBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbiBpbnZhbGlkIHRpbWVzdGFtcCBwcm9wZXJ0eVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGludmFsaWQgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gaW52YWxpZCB0aW1lc3RhbXAgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0aW1lc3RhbXA6ICdpbnZhbGlkJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KGV2ZW50VGltZSkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgICBleHBlY3QoZXZlbnRUaW1lLnRvU3RyaW5nKCkpLnRvQmUoJ0ludmFsaWQgRGF0ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZTY0Q29udmVydG9yJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGVtcHR5IHN0cmluZyBpbnB1dCBhbmQgcmV0dXJucyBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYmFzZTY0IHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn44GT44KT44Gr44Gh44GvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzQ0R1Q0NEtUNDRHcjQ0R2g0NEd2JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICchQCMkJV4mKigpJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lVQWpKQ1ZlSmlvb0tRPT0nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgIEhlbGxvIFdvcmxkICAgJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lDQWdTR1ZzYkc4Z1YyOXliR1FnSUNBPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggbGluZSBicmVha3MgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ0hlbGxvXFxuV29ybGQnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnU0dWc2JHOEtWMjl5YkdRPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkVXJsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIG9iamVjdCByZXR1cm5zIHRoZSBzYW1lIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCk/LnRvSlNPTigpKS50b0JlKHVybC50b0pTT04oKSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbT9wYXJhbTE9dmFsdWUxJnBhcmFtMj12YWx1ZTInO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIGhhc2ggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGEgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSNzZWN0aW9uMSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgcG9ydCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOjgwODAnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhbiBlbXB0eSBzdHJpbmcgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICcnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzVmFsaWRVcmwnIHJldHVybnMgbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgVVJMIHN0cmluZy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2ludmFsaWQtdXJsJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIFVSTCB3aXRoIGEgZGlmZmVyZW50IHByb3RvY29sIHJldHVybnMgdmFsaWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnZnRwOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGludmFsaWQgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0IHJldHVybnMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgcG9ydCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbTphYmMnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBpbnZhbGlkIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhbiBpbnZhbGlkIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2ludmFsaWQuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3BhdGgnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBzdWJkb21haW4gcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3N1YmRvbWFpbi5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpcFRyYWlsaW5nU2xhc2gnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgaWYgaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZyB3aGVuIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBpdFxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSBvbmx5IG9uZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggbXVsdGlwbGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8vJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlLycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG9ubHkgJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGNvbnRhaW5zIG9ubHkgJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIHdoZW4gdGhleSBleGlzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGVuZHMgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gdGhlIHN0cmluZyBlbmRzIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ByaW1pdGl2ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgnaGVsbG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgbnVtYmVyXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUobmV3IERhdGUoKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gY2xhc3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIEN1c3RvbUNsYXNzIHt9XG4gICAgICBjb25zdCBhcmcgPSBuZXcgQ3VzdG9tQ2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKGFyZyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYSBmdW5jdGlvbiB3aXRoIHByb3BlcnRpZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7fTtcbiAgICAgIGZ1bmMucHJvcGVydHkgPSAndmFsdWUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoZnVuYyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShTeW1ib2woJ3Rlc3QnKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VHlwZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBzdHJpbmcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgbnVtYmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVtYmVyIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA0MjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnbnVtYmVyJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBib29sZWFuIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYm9vbGVhbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGJvb2xlYW4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VHlwZSh0cnVlKSkudG9CZSgnYm9vbGVhbicpO1xuICAgICAgZXhwZWN0KGdldFR5cGUoZmFsc2UpKS50b0JlKCdib29sZWFuJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdvYmplY3QnIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBiaWdpbnQgaW5wdXRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ2JpZ2ludCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBiaWdpbnRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCaWdJbnQoMTApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdiaWdpbnQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gU3ltYm9sKCd0ZXN0Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N5bWJvbCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3VuZGVmaW5lZCcgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGFycm93IGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyb3cgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICgpID0+IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSBvYmplY3QgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY2xhc3MgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIE15Q2xhc3Mge31cbiAgICAgIGNvbnN0IGlucHV0ID0gbmV3IE15Q2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnZnVuY3Rpb24nIHdoZW4gdGhlIGlucHV0IGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGZ1bmN0aW9uKiAoKSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXN5bmMgKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc09iamVjdCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYSBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoKSA9PiB7fTtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhbiBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFtdO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICd0ZXN0JztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAxMjM7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0cnVlO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHZhbHVlIGlzIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBOYU47XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGtleTogJ3ZhbHVlJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIG51bGwgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzRW1wdHknIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTiBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBOYU47XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgd2hpdGVzcGFjZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgICc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0VtcHR5T2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCB7fVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3Qge2E6ICcxJ31cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAnMScgfTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KG9iaikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXkgW11cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3QoYXJyKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheSBbMSwgMiwgM11cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBbMSwgMiwgM107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZyAnJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICcnO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcgJ2hlbGxvJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAnaGVsbG8nO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAyO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZE5vdE51bGxOb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi16ZXJvIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoMTIzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZmFsc2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpdCBkb2VzIG5vdCBjb250YWluIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHsgZDogJ25lc3RlZCcgfSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBjbGVhbmVkIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiBudWxsLCBkOiAnJywgZToge30sIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBmOiB0cnVlLCBnOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQobnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh7fSkpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBjb250YWlucyBvbmx5IHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4gb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IHVuZGVmaW5lZCwgYjogbnVsbCwgYzogJycsIGQ6IHt9LCBlOiB0cnVlLCBmOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbCh7IGU6IHRydWUsIGY6IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzEnLCBiOiAnMicsIGM6ICczJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBwcm9wZXJ0eVxuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllcyBhbmQgZGlmZmVyZW50ICd0bycgdmFsdWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdBJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMycsIGI6ICcyJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbm9uLXN0cmluZyAnZnJvbScgYW5kICd0bycgcHJvcGVydGllc1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAxLCB0bzogdHJ1ZSB9LFxuICAgICAgICB7IGZyb206IG51bGwsIHRvOiB1bmRlZmluZWQgfSxcbiAgICAgICAgeyBmcm9tOiBbMSwgMiwgM10sIHRvOiB7IGE6ICdBJywgYjogJ0InIH0gfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgJzEnOiB0cnVlLCBudWxsOiB1bmRlZmluZWQsICcxLDIsMyc6IHsgYTogJ0EnLCBiOiAnQicgfSB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSAnZnJvbScgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIHRoZSBoYXNoTWFwIHdoZW4gdGhlIGlzTG93ZXJDYXNlIHBhcmFtZXRlciBpcyB0cnVlXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFwiZnJvbVwiIHByb3BlcnR5IHRvIGxvd2VyY2FzZSBpbiBoYXNoTWFwIHdoZW4gaXNMb3dlckNhc2UgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUxJywgdG86ICdWYWx1ZTEnIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMicsIHRvOiAnVmFsdWUyJyB9LFxuICAgICAgICB7IGZyb206ICdWQUxVRTMnLCB0bzogJ1ZhbHVlMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICAgICAgdmFsdWUxOiAnVmFsdWUxJyxcbiAgICAgICAgdmFsdWUyOiAnVmFsdWUyJyxcbiAgICAgICAgdmFsdWUzOiAnVmFsdWUzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggb25seSBvbmUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW3sgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHsgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICAgIHByb3AzOiBuZXcgU2V0KFsndmFsMyddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIHRoZSAndG8nIGtleSBpcyBlbXB0eSBpbiBhbGwgb2JqZWN0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICcnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJyddKSwgcHJvcDI6IG5ldyBTZXQoWycnXSksIHByb3AzOiBuZXcgU2V0KFsnJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCBmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCBjdXN0b20gZnJvbUtleSBhbmQgdG9LZXkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMsICdmcm9tJywgJ3RvJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIHRydWVcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBwcm9wZXJ0aWVzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyBpZiBpdCBleGlzdHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIG1lc3NhZ2UgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBudWxsO1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGtleSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIGFueSBvZiB0aGUga2V5U2V0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAnbm9uZXhpc3RlbnRLZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5Kc29uJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgc2ltcGxlIEpTT04gb2JqZWN0IHdpdGggbm8gbmVzdGVkIG9iamVjdHMgb3IgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBzaW1wbGUgSlNPTiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgY291bnRyeTogJ1VTQScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBudWxsLCBhZ2U6IHVuZGVmaW5lZCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBlbXB0eSBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBbXSwgYWdlOiB7fSwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gLy8gTmVlZCB0byBmaXggdGhpcyB0ZXN0XG4gICAgLy8gLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBoYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gYSBKU09OIG9iamVjdCBjb3JyZWN0bHkuXG4gICAgLy8gaXQoJ3Nob3VsZCBoYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgIC8vICAgZGF0YVsnc2VsZiddID0gZGF0YTtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIHNlbGY6ICdbQ2lyY3VsYXJdJyB9O1xuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgLy8gICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJ25hbWUuZmlyc3QnOiAnSm9obicsICduYW1lLmxhc3QnOiAnRG9lJywgJ2FnZUAnOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3QgdGhhdCB0aGUgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLXN0cmluZyBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgMTogJ29uZScsIDI6ICd0d28nLCAzOiAndGhyZWUnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJzEnOiAnb25lJywgJzInOiAndHdvJywgJzMnOiAndGhyZWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCBhZ2U6IDMwLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgJ25hbWUuZmlyc3QnOiAnSm9obicsXG4gICAgICAgICduYW1lLmxhc3QnOiAnRG9lJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgdGhhdCBhcmUgcmVzZXJ2ZWQgd29yZHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggcmVzZXJ2ZWQgd29yZCBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSAnZmxhdHRlbkpzb24nIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBzdGF0ZTogJ05ZJyxcbiAgICAgICAgICB6aXA6ICcxMDAwMScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZycsICdjb29raW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSmFuZScsXG4gICAgICAgICAgICBhZ2U6IDI4LFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc0NTYgRWxtIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0xvcyBBbmdlbGVzJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdDQScsXG4gICAgICAgICAgICAgIHppcDogJzkwMDAxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ2hpa2luZycsICdwaG90b2dyYXBoeSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ01pa2UnLFxuICAgICAgICAgICAgYWdlOiAzMixcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgc3RyZWV0OiAnNzg5IE9hayBTdCcsXG4gICAgICAgICAgICAgIGNpdHk6ICdDaGljYWdvJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdJTCcsXG4gICAgICAgICAgICAgIHppcDogJzYwMDA3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ3J1bm5pbmcnLCAnZ2FtaW5nJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RhdGUnOiAnTlknLFxuICAgICAgICAnYWRkcmVzcy56aXAnOiAnMTAwMDEnLFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdjb29raW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdKYW5lJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RyZWV0JzogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLmNpdHknOiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnN0YXRlJzogJ0NBJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy56aXAnOiAnOTAwMDEnLFxuICAgICAgICAnZnJpZW5kc1swXS5ob2JiaWVzWzBdJzogJ2hpa2luZycsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMV0nOiAncGhvdG9ncmFwaHknLFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdHJlZXQnOiAnNzg5IE9hayBTdCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuY2l0eSc6ICdDaGljYWdvJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdGF0ZSc6ICdJTCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuemlwJzogJzYwMDA3JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1swXSc6ICdydW5uaW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1sxXSc6ICdnYW1pbmcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4ga2V5cyBhbmQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICBhZGRyZXNzOiB7IHN0cmVldDogJzEyMyBNYWluIFN0JywgY2l0eTogJ1NhbiBGcmFuY2lzY28nIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdTYW4gRnJhbmNpc2NvJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzLCBpbmNsdWRpbmcgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgemlwOiAxMjM0NSxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgICBjb29yZGluYXRlczoge1xuICAgICAgICAgICAgbGF0aXR1ZGU6IDQwLjcxMjgsXG4gICAgICAgICAgICBsb25naXR1ZGU6IC03NC4wMDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ3N3aW1taW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdKYW5lJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ01pa2UnLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnU2FyYWgnLCBhZ2U6IDI3IH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBldDogbnVsbCxcbiAgICAgICAgZmF2b3JpdGVDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLnppcCc6IDEyMzQ1LFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdhZGRyZXNzLmNvb3JkaW5hdGVzLmxhdGl0dWRlJzogNDAuNzEyOCxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubG9uZ2l0dWRlJzogLTc0LjAwNixcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0nOiAnc3dpbW1pbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMV0ubmFtZSc6ICdNaWtlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnU2FyYWgnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBhcnJheXMgY29udGFpbmluZyBvYmplY3RzIHdpdGggZGlmZmVyZW50IG5lc3RpbmcgbGV2ZWxzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGhvYmJpZXM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdSZWFkaW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdSdW5uaW5nJywgdHlwZTogJ091dGRvb3InIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ29va2luZycsIHR5cGU6ICdJbmRvb3InIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIGFnZTogMjggfSxcbiAgICAgICAgICB7IG5hbWU6ICdCb2InLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnaG9iYmllc1swXS5uYW1lJzogJ1JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1swXS50eXBlJzogJ0luZG9vcicsXG4gICAgICAgICdob2JiaWVzWzFdLm5hbWUnOiAnUnVubmluZycsXG4gICAgICAgICdob2JiaWVzWzFdLnR5cGUnOiAnT3V0ZG9vcicsXG4gICAgICAgICdob2JiaWVzWzJdLm5hbWUnOiAnQ29va2luZycsXG4gICAgICAgICdob2JiaWVzWzJdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdBbGljZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ0JvYicsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1syXS5uYW1lJzogJ0NoYXJsaWUnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0T2Zmc2V0SW5TZWMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9mZnNldCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBhIHZhbGlkIHRpbWV6b25lIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0tvbGthdGEnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMTk4MDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdVVEMnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIlVUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnRXRjL1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiRXRjL1VUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0V0Yy9VVEMnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGFuIGludmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0ludmFsaWQvVGltZXpvbmUnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVuZGVmaW5lZCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJyswNTozMCcgaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIiswNTozMFwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJyswNTozMCcpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ0FtZXJpY2EvTmV3X1lvcmsnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3Qgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiQW1lcmljYS9OZXdfWW9ya1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FtZXJpY2EvTmV3X1lvcmsnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoLTE4MDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zvcm1hdFRpbWVTdGFtcCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgxNjQwOTk1MjAwMDAwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb21lbnQgZm9ybWF0IHdoZW4gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgbW9tZW50IGZvcm1hdCB3aGVuIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyLCBmb3JtYXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMjAyMi0wMS0wMScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGV4cGVjdChmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cikpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHByb3ZpZGVkIGFzIHRoZSBkYXRlIHN0cmluZyBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwcm92aWRlZCBhcyB0aGUgZGF0ZSBzdHJpbmcgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCBmb3JtYXQgPSAnaW52YWxpZEZvcm1hdCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0ciwgZm9ybWF0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2ludmFtMS8xLzIwMjJpNkZvcjBhbXQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBhIHZhbGlkIHRpbWVzdGFtcCBzdHJpbmcgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIGRhdGUgc3RyaW5nLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gYSB2YWxpZCB0aW1lc3RhbXAgc3RyaW5nIGlzIHByb3ZpZGVkIGluc3RlYWQgb2YgYSBkYXRlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMTY0MDk5NTIwMDAwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdoYXNoVG9TaGEyNTYnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICd0ZXN0IHN0cmluZyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdkNTU3OWM0NmRmY2M3ZjE4MjA3MDEzZTY1YjQ0ZTRjYjRlMmMyMjk4ZjRhYzQ1N2JhOGY4Mjc0M2YzMWU5MzBiJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbSgndGVzdCBidWZmZXInKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUyNWVmNWY3YmFmNTY1MjhiNDg3NzA5MjJlOThlODAwMzEwZDM2ODU2ODFkMzRlZTU5MjkwMmFhMjUyNDU4YjMnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgbnVtYmVyIGFycmF5IGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBCdWZmZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbShbXSk7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIDIsIDMsIDQsIDVdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNzRmODFmZTE2N2Q5OWI0Y2I0MWQ2ZDBjY2RhODIyNzhjYWVlOWYzZTJmMjVkNWU1YTM5MzZmZjNkY2VjNjBkMCc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG5vbi1BU0NJSSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBub24tQVNDSUkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn5L2g5aW95LiW55WMJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUwOGQ2OWRjMjFiZjVkMmY4MDQwMTRiMTY4ODk1M2ExMmQ1ZGZkZTcxYmU2Y2Q5NTQxNzc5ODBkNWQxNzQxYmInO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVVVUlEJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodHlwZW9mIHV1aWQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIFVVSUQgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUgVVVJRCBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZDEgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnN0IHV1aWQyID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZDEpLm5vdC50b0JlKHV1aWQyKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZyB3aXRoIGxlbmd0aCAzNlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcgd2l0aCBsZW5ndGggMzYnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZC5sZW5ndGgpLnRvQmUoMzYpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zdCBkYXNoQ291bnQgPSAodXVpZC5tYXRjaCgvLS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgZXhwZWN0KGRhc2hDb3VudCkudG9CZSg0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
2091
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHNDQUFpRDtBQUNqRCxpQ0FnQ2dCO0FBRWhCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FB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RUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcs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Qyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7WUFDdEUsTUFBTSxHQUFHLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsR0FBRyxFQUFFO1lBQzFGLE1BQU0sR0FBRyxHQUFHLElBQUEseUJBQWtCLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge1xuICBiYXNlNjRDb252ZXJ0b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldEV2ZW50VGltZSxcbiAgZ2V0VHlwZSxcbiAgaXNCbGFuayxcbiAgaXNEZWZpbmVkLFxuICBpc0RlZmluZWRBbmROb3ROdWxsLFxuICBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHksXG4gIGlzTm90RW1wdHksXG4gIGlzTm90TnVsbCxcbiAgaXNQcmltaXRpdmUsXG4gIGlzVmFsaWRVcmwsXG4gIHJlbW92ZU51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkVmFsdWVzLFxuICBzdHJpcFRyYWlsaW5nU2xhc2gsXG4gIGlzT2JqZWN0LFxuICBpc0VtcHR5LFxuICBpc0VtcHR5T2JqZWN0LFxuICBpc0RlZmluZWROb3ROdWxsTm90RW1wdHksXG4gIHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50LFxuICBnZXRIYXNoRnJvbUFycmF5LFxuICBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZSxcbiAgZmxhdHRlbkpzb24sXG4gIGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyxcbiAgZ2V0T2Zmc2V0SW5TZWMsXG4gIGZvcm1hdFRpbWVTdGFtcCxcbiAgaGFzaFRvU2hhMjU2LFxuICBnZW5lcmF0ZVVVSUQsXG4gIGdldEVycm9yUmVzcEV2ZW50cyxcbn0gZnJvbSAnLi9taXNjJztcblxuZGVzY3JpYmUoJ21pc2MnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc0RlZmluZWQnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBkZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCg1KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLW51bGwgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLW51bGwgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgnaGVsbG8nKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoMTApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBhbiB1bmRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiB1bmRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChudWxsKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoe30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoW10pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCgpID0+IHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKFN5bWJvbCgpKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQobWFwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBvYmplY3RpdmUgb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBTZXQgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgU2V0IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXRPYmogPSBuZXcgU2V0KCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHNldE9iaikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgb2JqZWN0aXZlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgV2Vha01hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBXZWFrTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbXB0eVdlYWtNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChlbXB0eVdlYWtNYXApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNOb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyB0cnVlIGZvciBub24tZW1wdHkgYXJyYXlzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoWzEsIDIsIDNdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgZW1wdHkgYXJyYXlzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KFtdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IG9iamVjdHNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbm9uLWVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IG9iamVjdHNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHt9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IHN0cmluZ3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoJ2hlbGxvJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IHN0cmluZ3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KCcnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIG5vbi16ZXJvIG51bWJlcnNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi16ZXJvIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoNDIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgemVyb1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIHplcm8nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KDApO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgTmFOXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgZmFsc2UgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciB0cnVlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBhIHRydWUgYm9vbGVhbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzTm90TnVsbCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoJ3Rlc3QnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgdHJ1dGh5IHZhbHVlIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHRydWUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgnJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgxMjMpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKG51bGwpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoe30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoW10pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCgpID0+IHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKFN5bWJvbCgpKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sKCk7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHN5bWJvbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0RlZmluZWRBbmROb3ROdWxsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKCd0ZXN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoMTIzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoWzEsIDIsIDNdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKCcnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHVuZGVmaW5lZCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHVuZGVmaW5lZCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKE5hTik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoJ2hlbGxvJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH0pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoWzEsIDIsIDNdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYSBib29sZWFuIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgYSBib29sZWFuIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh0cnVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGEgbnVtYmVyIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgYSBudW1iZXIgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KDQyKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoJycpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7fSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eShbXSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkobnVsbCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KHVuZGVmaW5lZCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgc3RyaW5nIHdpdGggb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGEgc3RyaW5nIHdpdGggb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCcgICAnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBvbmx5IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KHsgcHJvcDE6IG51bGwsIHByb3AyOiB1bmRlZmluZWQgfSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0JsYW5rJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoe30pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdoZWxsbycpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhbMSwgMiwgM10pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHsga2V5OiAndmFsdWUnIH0pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIHRydWUgZm9yIGEgbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsobnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsodW5kZWZpbmVkKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIGJvb2xlYW4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgYm9vbGVhbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHRydWUpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKGZhbHNlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBudW1iZXIgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoMTIzKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygwKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygtMSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgd2hpdGVzcGFjZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgd2hpdGVzcGFjZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnICAgJykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJ1xcdCcpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdcXG4nKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgTmFOIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIE5hTicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKE5hTikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkVmFsdWVzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGlmIGl0IGlzIG5vdCBhbiBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgbm90IGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gMTIzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiAxLCBiOiAnaGVsbG8nLCBjOiB0cnVlIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSB2YWx1ZXMgYXJlIGRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSB2YWx1ZXMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiB0cnVlIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBpbnB1dCBpcyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IHVuZGVmaW5lZCB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogbnVsbCB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBudWxsIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogJycgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogJycgfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZmFsc2VcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IGZhbHNlIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6IGZhbHNlIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIHplcm9cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB6ZXJvJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogMCB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiAwIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIE5hTicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IE5hTiB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBOYU4gfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlTnVsbFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBlbXB0eSBvYmplY3QgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBubyBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGlucHV0IGhhcyBubyBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiAxLCBiOiAnaGVsbG8nLCBjOiBbMSwgMiwgM10gfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBiOiAnaGVsbG8nLCBjOiBbMSwgMiwgM10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBudWxsIGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgdW5kZWZpbmVkIGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZyB3aGVuIGlucHV0IGlzIGEgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgbnVtYmVyIGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgbnVtYmVyIHdoZW4gaW5wdXQgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDEyMztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gMTIzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGFycmF5IGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgYXJyYXkgd2hlbiBpbnB1dCBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIDIsIDNdO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7ICcwJzogMSwgJzEnOiAyLCAnMic6IDMgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBvbmx5IG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG9ubHkgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCwgYjogbnVsbCwgYzogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBuZXN0ZWQgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogbnVsbCB9LCBjOiB7IGQ6IHsgZTogbnVsbCB9IH0gfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7fSwgYzogeyBkOiB7fSB9IH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG5lc3RlZCBub24tbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgbmVzdGVkIG5vbi1udWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEgfSwgYzogeyBkOiB7IGU6ICdoZWxsbycgfSB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxIH0sIGM6IHsgZDogeyBlOiAnaGVsbG8nIH0gfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG1peGVkIG5lc3RlZCBudWxsIGFuZCBub24tbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBuZXN0ZWQgbnVsbCB2YWx1ZXMgYW5kIGtlZXAgbm9uLW51bGwgdmFsdWVzIGluIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiBudWxsLCBjOiAxIH0sIGQ6IHsgZTogbnVsbCwgZjogJ2hlbGxvJyB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBjOiAxIH0sIGQ6IHsgZjogJ2hlbGxvJyB9IH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG51bGwgdmFsdWVzIGFuZCBmYWxzeSBub24tbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBudWxsIHZhbHVlcyBhbmQga2VlcCBmYWxzeSBub24tbnVsbCB2YWx1ZXMgaW4gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiBudWxsLCBiOiBmYWxzZSwgYzogMCwgZDogJycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBiOiBmYWxzZSwgYzogMCwgZDogJycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IG51bGwsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHBhc3NlZCBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IHVuZGVmaW5lZCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgd2hlbiBwYXNzZWQgYSBub24tb2JqZWN0IHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgd2hlbiBwYXNzZWQgYSBub24tb2JqZWN0IHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAxMjM7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyh2YWx1ZSkpLnRvRXF1YWwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2l0aCBuZXN0ZWQgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG5lc3RlZCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdpdGggbmVzdGVkIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAndGVzdCcsIGQ6IHRydWUgfSwgZTogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogJ3Rlc3QnLCBjOiB0cnVlIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzJywgKCkgPT4ge1xuICAgIC8vIFRPRE86IE5FRUQgVE8gRklYIFRISVMgVEVTVFNcbiAgICAvLyAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQsIG5vdCBudWxsLCBhbmQgbm90IGVtcHR5XG4gICAgLy8gaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCwgbm90IG51bGwsIGFuZCBub3QgZW1wdHknLCAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBvYmogPSB7XG4gICAgLy8gICAgIHByb3AxOiAndmFsdWUxJyxcbiAgICAvLyAgICAgcHJvcDI6IDEyMyxcbiAgICAvLyAgICAgcHJvcDM6IFsxLCAyLCAzXSxcbiAgICAvLyAgICAgcHJvcDQ6IHsgbmVzdGVkUHJvcDogJ25lc3RlZFZhbHVlJyB9LFxuICAgIC8vICAgfTtcbiAgICAvLyAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkIGFuZCBub3QgbnVsbFxuICAgIC8vIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQgYW5kIG5vdCBudWxsJywgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb2JqID0ge1xuICAgIC8vICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgLy8gICAgIHByb3AyOiAxMjMsXG4gICAgLy8gICAgIHByb3AzOiBbMSwgMiwgM10sXG4gICAgLy8gICAgIHByb3A0OiB7IG5lc3RlZFByb3A6ICduZXN0ZWRWYWx1ZScgfSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IG51bGw7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0gdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBvYmplY3QgaGFzIG9ubHkgZW1wdHkgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IG9iamVjdCBoYXMgb25seSBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIHByb3AxOiAnJyxcbiAgICAgICAgcHJvcDI6ICcgICAgJyxcbiAgICAgICAgcHJvcDM6IFtdLFxuICAgICAgICBwcm9wNDoge30sXG4gICAgICB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKHsgcHJvcDI6ICcgICAgJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IGFuZCBkb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgbmV3IG9iamVjdCBhbmQgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgICAgIHByb3AyOiBudWxsLFxuICAgICAgICBwcm9wMzogJycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcHJvcDE6ICd2YWx1ZTEnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUob2JqKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5NYXAnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5wdXQgaWYgaXQgaXMgbm90IGFuIGFycmF5IG9yIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBpbnB1dCB3aGVuIGl0IGlzIG5vdCBhbiBhcnJheSBvciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDU7XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXlcbiAgICAvLyBPbmx5IDEgbGV2ZWwgb2YgZmxhdHRlbmluZyBpcyBwZXJmb3JtZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCAzXSwgWzQsIFs1LCA2XV1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAyLCAzLCA0LCBbNSwgNl1dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIGFycmF5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIGFycmF5IHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiBbMSwgMl0sIGI6IFszLCA0XSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAyLCAzLCA0XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGNvbGxlY3Rpb24gaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGNvbGxlY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgd2l0aCBudWxsIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW251bGxdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtudWxsXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIG51bGwgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIG51bGwgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtudWxsXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggdW5kZWZpbmVkIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggdW5kZWZpbmVkIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdW5kZWZpbmVkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbdW5kZWZpbmVkXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uIHdpdGggdW5kZWZpbmVkIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB1bmRlZmluZWQgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbdW5kZWZpbmVkXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggTmFOIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggTmFOIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggTmFOIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbTmFOXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbTmFOXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggTmFOIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uIHdpdGggTmFOIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiBOYU4gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbTmFOXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggZW1wdHkgc3RyaW5nIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggZW1wdHkgc3RyaW5nIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggZW1wdHkgc3RyaW5nIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbJyddO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsnJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMjUsIGlzU3R1ZGVudDogdHJ1ZSwgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJ0pvaG4nLCAyNSwgdHJ1ZSwgJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCBbMywgNF1dLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgWzMsIDRdLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSwgaXNTdHVkZW50OiB0cnVlLCBob2JiaWVzOiBbJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsnSm9obicsIDI1LCB0cnVlLCAncmVhZGluZycsICdwYWludGluZyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgWzIsIFszLCA0XV0sIHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAyLCBbMywgNF0sIHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH1dKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEV2ZW50VGltZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYSB0aW1lc3RhbXAgcHJvcGVydHlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGEgdGltZXN0YW1wIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdGltZXN0YW1wOiAnMjAyMi0wMS0wMVQwMDowMDowMFonLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEV2ZW50VGltZShtZXNzYWdlIGFzIGFueSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlSW5zdGFuY2VPZihEYXRlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbiBvcmlnaW5hbFRpbWVzdGFtcCBwcm9wZXJ0eVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gb3JpZ2luYWxUaW1lc3RhbXAgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBvcmlnaW5hbFRpbWVzdGFtcDogJzIwMjItMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gSW5zdHJ1bWVudGF0aW9uRXJyb3Igd2hlbiB0aGUgbWVzc2FnZSBoYXMgbmVpdGhlciBhIHRpbWVzdGFtcCBub3IgYW4gb3JpZ2luYWxUaW1lc3RhbXAgcHJvcGVydHlcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIEluc3RydW1lbnRhdGlvbkVycm9yIHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5laXRoZXIgYSB0aW1lc3RhbXAgbm9yIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHt9O1xuICAgICAgZXhwZWN0KCgpID0+IGdldEV2ZW50VGltZShtZXNzYWdlIGFzIGFueSkpLnRvVGhyb3coSW5zdHJ1bWVudGF0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnZhbGlkIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGFuIGludmFsaWQgdGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gaW52YWxpZCBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbiBpbnZhbGlkIHRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRpbWVzdGFtcDogJ2ludmFsaWQnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50VGltZSA9IGdldEV2ZW50VGltZShtZXNzYWdlIGFzIGFueSk7XG4gICAgICBleHBlY3QoZXZlbnRUaW1lKS50b0JlSW5zdGFuY2VPZihEYXRlKTtcbiAgICAgIGV4cGVjdChldmVudFRpbWUudG9TdHJpbmcoKSkudG9CZSgnSW52YWxpZCBEYXRlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdiYXNlNjRDb252ZXJ0b3InLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgc3RyaW5nIGlucHV0IGFuZCByZXR1cm5zIGFuIGVtcHR5IGJhc2U2NCBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBhbmQgY29udmVydHMgaXQgdG8gYmFzZTY0IGZvcm1hdFxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIHN0cmluZyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICfjgZPjgpPjgavjgaHjga8nO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNDRHVDQ0S1Q0NEdyNDRHaDQ0R3YnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyFAIyQlXiYqKCknO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnSVVBakpDVmVKaW9vS1E9PSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhbmQgY29udmVydHMgaXQgdG8gYmFzZTY0IGZvcm1hdFxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIHN0cmluZyB3aXRoIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnICAgSGVsbG8gV29ybGQgICAnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnSUNBZ1NHVnNiRzhnVjI5eWJHUWdJQ0E9JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbGluZSBicmVha3MgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBsaW5lIGJyZWFrcyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnSGVsbG9cXG5Xb3JsZCc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdTR1ZzYkc4S1YyOXliR1E9JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRVcmwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgb2JqZWN0IHJldHVybnMgdGhlIHNhbWUgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCdodHRwczovL3d3dy5leGFtcGxlLmNvbScpO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKT8udG9KU09OKCkpLnRvQmUodXJsLnRvSlNPTigpKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tP3BhcmFtMT12YWx1ZTEmcGFyYW0yPXZhbHVlMic7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgaGFzaCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBoYXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tI3NlY3Rpb24xJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggYSBwb3J0IHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIHBvcnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb206ODA4MCc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXJuYW1lOnBhc3N3b3JkQGV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGVtcHR5IHN0cmluZyByZXR1cm5zIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJyc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiAnaXNWYWxpZFVybCcgcmV0dXJucyBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhbiBpbnZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaW52YWxpZC11cmwnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYW4gVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wgcmV0dXJucyB2YWxpZCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdmdHA6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYW4gaW52YWxpZCBVUkwgd2l0aCBhbiBpbnZhbGlkIHBvcnQgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOmFiYyc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGludmFsaWQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJldHVybnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgc3ViZG9tYWluIHJldHVybnMgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgc3ViZG9tYWluJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vaW52YWxpZC5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHBhdGggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHBhdGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vcGF0aCc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgdmFsaWQgVVJMIHN0cmluZyB3aXRoIGEgc3ViZG9tYWluJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vc3ViZG9tYWluLmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIHN0cmluZyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgdmFsaWQgVVJMIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmlwVHJhaWxpbmdTbGFzaCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XG4gICAgaXQoXCJzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggaXRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgb25seSBvbmUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIG11bHRpcGxlXG4gICAgaXQoXCJzaG91bGQgcmVtb3ZlIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLy8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUvJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgaXQgY29udGFpbnMgb25seSAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gZW1wdHkgc3RyaW5nIHdoZW4gaXQgY29udGFpbnMgb25seSAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1xuICAgIGl0KFwic2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgd2hlbiB0aGV5IGV4aXN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gYSBzdHJpbmcgaWYgaXQgZXhpc3RzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gYSBzdHJpbmcgaWYgaXQgZW5kcyB3aXRoICcvJ1xuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiB0aGUgc3RyaW5nIGVuZHMgd2l0aCAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzUHJpbWl0aXZlJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIGEgcHJpbWl0aXZlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhbiBpbnN0YW5jZSBvZiBhIG5vbi1wcmltaXRpdmUgd3JhcHBlciBjbGFzcyAoRGF0ZSlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIG5vbi1wcmltaXRpdmUgd3JhcHBlciBjbGFzcyAoRGF0ZSknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShuZXcgRGF0ZSgpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIGEgY3VzdG9tIGNsYXNzJywgKCkgPT4ge1xuICAgICAgY2xhc3MgQ3VzdG9tQ2xhc3Mge31cbiAgICAgIGNvbnN0IGFyZyA9IG5ldyBDdXN0b21DbGFzcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoYXJnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24gd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHt9O1xuICAgICAgZnVuYy5wcm9wZXJ0eSA9ICd2YWx1ZSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShmdW5jKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIGEgc3ltYm9sXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHN5bWJvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKFN5bWJvbCgndGVzdCcpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRUeXBlJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBudW1iZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudW1iZXIgd2hlbiB0aGUgaW5wdXQgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDQyO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdudW1iZXInKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGJvb2xlYW4gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBib29sZWFuIHdoZW4gdGhlIGlucHV0IGlzIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRUeXBlKHRydWUpKS50b0JlKCdib29sZWFuJyk7XG4gICAgICBleHBlY3QoZ2V0VHlwZShmYWxzZSkpLnRvQmUoJ2Jvb2xlYW4nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyBudWxsXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyBudWxsXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnTlVMTCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ29iamVjdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgZnVuY3Rpb24gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAoKSA9PiB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGJpZ2ludCBpbnB1dFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnYmlnaW50JyB3aGVuIHRoZSBpbnB1dCBpcyBhIGJpZ2ludFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJpZ0ludCgxMCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2JpZ2ludCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3N5bWJvbCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzeW1ib2xcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ3N5bWJvbCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzeW1ib2xcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBTeW1ib2woJ3Rlc3QnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnc3ltYm9sJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAndW5kZWZpbmVkJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ05VTEwnIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnTlVMTCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgYXJyb3cgZnVuY3Rpb24gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJvdyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnb2JqZWN0JyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ29iamVjdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIG9iamVjdCB0aGUgY29ycmVjdCB0eXBlIGZvciBjbGFzcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhIGNsYXNzJywgKCkgPT4ge1xuICAgICAgY2xhc3MgTXlDbGFzcyB7fVxuICAgICAgY29uc3QgaW5wdXQgPSBuZXcgTXlDbGFzcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGdlbmVyYXRvciBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgIGNvbnN0IGlucHV0ID0gZnVuY3Rpb24qICgpIHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ2Z1bmN0aW9uJyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bmN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFzeW5jIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBhc3luYyAoKSA9PiB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzT2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciBhIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGEgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICgpID0+IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bGw7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGFuIGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gW107XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gJ3Rlc3QnO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIG51bWJlclxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IDEyMztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRydWU7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgc3ltYm9sXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHN5bWJvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gU3ltYm9sKCk7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB0aGUgdmFsdWUgaXMgTmFOXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE5hTjtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsga2V5OiAndmFsdWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgbnVsbCBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgTmFOIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IE5hTjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0IHRoYXQgdGhlIGZ1bmN0aW9uICdpc0VtcHR5JyByZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnICAgJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHlPYmplY3QnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgb2JqZWN0IHt9XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdCB7YTogJzEnfVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6ICcxJyB9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheSBbXVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IGFycmF5IFsxLCAyLCAzXVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFsxLCAyLCAzXTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KGFycikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nICcnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0gJyc7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZyAnaGVsbG8nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICdoZWxsbyc7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIG51bWJlclxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IDI7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7IGtleTogJ3ZhbHVlJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24temVybyBudW1iZXIgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGZhbHNlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIDAgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIDAgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KDApO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KE5hTik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkobnVsbCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KHt9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgaWYgaXQgZG9lcyBub3QgY29udGFpbiB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogeyBkOiAnbmVzdGVkJyB9IH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybnMgdGhlIGNsZWFuZWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlIGNsZWFuZWQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6IG51bGwsIGQ6ICcnLCBlOiB7fSwgZjogdHJ1ZSwgZzogMCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChudWxsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KHt9KSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgY29udGFpbnMgb25seSB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdmFsaWQgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiBvciBpbnRlZ2VyIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogdW5kZWZpbmVkLCBiOiBudWxsLCBjOiAnJywgZDoge30sIGU6IHRydWUsIGY6IDAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChvYmopKS50b0VxdWFsKHsgZTogdHJ1ZSwgZjogMCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEhhc2hGcm9tQXJyYXknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdDJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMScsIGI6ICcyJywgYzogJzMnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAnZnJvbScgcHJvcGVydHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgJ2Zyb20nIHByb3BlcnR5IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgd2l0aCBkdXBsaWNhdGUgJ2Zyb20nIHByb3BlcnRpZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzMnLCBiOiAnMicgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggb25seSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgJ2Zyb20nIHByb3BlcnR5IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgd2l0aCBkdXBsaWNhdGUgJ2Zyb20nIHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCAndG8nIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5vbi1zdHJpbmcgJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206IDEsIHRvOiB0cnVlIH0sXG4gICAgICAgIHsgZnJvbTogbnVsbCwgdG86IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IGZyb206IFsxLCAyLCAzXSwgdG86IHsgYTogJ0EnLCBiOiAnQicgfSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyAnMSc6IHRydWUsIG51bGw6IHVuZGVmaW5lZCwgJzEsMiwzJzogeyBhOiAnQScsIGI6ICdCJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29udmVydHMgdGhlICdmcm9tJyBwcm9wZXJ0eSB0byBsb3dlcmNhc2UgaW4gdGhlIGhhc2hNYXAgd2hlbiB0aGUgaXNMb3dlckNhc2UgcGFyYW1ldGVyIGlzIHRydWVcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgXCJmcm9tXCIgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIGhhc2hNYXAgd2hlbiBpc0xvd2VyQ2FzZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdWQUxVRTEnLCB0bzogJ1ZhbHVlMScgfSxcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUyJywgdG86ICdWYWx1ZTInIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMycsIHRvOiAnVmFsdWUzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgICAgICB2YWx1ZTE6ICdWYWx1ZTEnLFxuICAgICAgICB2YWx1ZTI6ICdWYWx1ZTInLFxuICAgICAgICB2YWx1ZTM6ICdWYWx1ZTMnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzLCAnZnJvbScsICd0bycsIHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG9ubHkgb25lIG9iamVjdFxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH1dO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSkgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHVuaXF1ZSAnZnJvbScga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ3RvJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ3RvJyBrZXlzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMycsIHRvOiAndmFsMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMSddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgICBwcm9wMzogbmV3IFNldChbJ3ZhbDMnXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgaGFzaE1hcCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW107XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgaGFuZGxlIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAnZnJvbScga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBoYXNoTWFwIHdoZW4gdGhlICd0bycga2V5IGlzIGVtcHR5IGluIGFsbCBvYmplY3RzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJycgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJycgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7IHByb3AxOiBuZXcgU2V0KFsnJ10pLCBwcm9wMjogbmV3IFNldChbJyddKSwgcHJvcDM6IG5ldyBTZXQoWycnXSkgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIGZhbHNlXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIGZhbHNlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzLCAnZnJvbScsICd0bycsIGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggY3VzdG9tIGZyb21LZXkgYW5kIHRvS2V5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byB0cnVlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzLCAnZnJvbScsICd0bycsIHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgaWYgaXQgZXhpc3RzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gcHJvcGVydGllcyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSB0cmFpdHMgaWYgaXQgZXhpc3RzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge1xuICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWx1ZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIGNvbnRleHQudHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIGNvbnRleHQudHJhaXRzIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgbWVzc2FnZSBpcyBudWxsLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWVzc2FnZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG51bGw7XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGtleSBpcyBudWxsLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbnkgb2YgdGhlIGtleVNldHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdub25leGlzdGVudEtleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmxhdHRlbkpzb24nLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBzaW1wbGUgSlNPTiBvYmplY3Qgd2l0aCBubyBuZXN0ZWQgb2JqZWN0cyBvciBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIHNpbXBsZSBKU09OIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLmNvdW50cnknOiAnVVNBJyxcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgbmFtZTogbnVsbCwgYWdlOiB1bmRlZmluZWQsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZW1wdHkgYXJyYXlzIGFuZCBvYmplY3RzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgbmFtZTogW10sIGFnZToge30sIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyAvLyBOZWVkIHRvIGZpeCB0aGlzIHRlc3RcbiAgICAvLyAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseS5cbiAgICAvLyBpdCgnc2hvdWxkIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIGEgSlNPTiBvYmplY3QgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZGF0YSA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gICAgLy8gICBkYXRhWydzZWxmJ10gPSBkYXRhO1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgc2VsZjogJ1tDaXJjdWxhcl0nIH07XG4gICAgLy8gICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAvLyAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7ICduYW1lLmZpcnN0JzogJ0pvaG4nLCAnbmFtZS5sYXN0JzogJ0RvZScsICdhZ2VAJzogMzAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG5vbi1zdHJpbmcga2V5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAxOiAnb25lJywgMjogJ3R3bycsIDM6ICd0aHJlZScgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyAnMSc6ICdvbmUnLCAnMic6ICd0d28nLCAnMyc6ICd0aHJlZScgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyBjb250YWluaW5nIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7ICduYW1lLmZpcnN0JzogJ0pvaG4nLCAnbmFtZS5sYXN0JzogJ0RvZScsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAnbmFtZS5maXJzdCc6ICdKb2huJyxcbiAgICAgICAgJ25hbWUubGFzdCc6ICdEb2UnLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyB0aGF0IGFyZSByZXNlcnZlZCB3b3Jkcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCByZXNlcnZlZCB3b3JkIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBjbGFzczogJ01hdGgnLCBmdW5jdGlvbjogJ2FkZCcsIHJldHVybjogJ3Jlc3VsdCcgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBjbGFzczogJ01hdGgnLCBmdW5jdGlvbjogJ2FkZCcsIHJldHVybjogJ3Jlc3VsdCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAgIHN0YXRlOiAnTlknLFxuICAgICAgICAgIHppcDogJzEwMDAxJyxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ2Nvb2tpbmcnXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdKYW5lJyxcbiAgICAgICAgICAgIGFnZTogMjgsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIHN0cmVldDogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAgICAgICBjaXR5OiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAgICAgICBzdGF0ZTogJ0NBJyxcbiAgICAgICAgICAgICAgemlwOiAnOTAwMDEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvYmJpZXM6IFsnaGlraW5nJywgJ3Bob3RvZ3JhcGh5J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnTWlrZScsXG4gICAgICAgICAgICBhZ2U6IDMyLFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc3ODkgT2FrIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0NoaWNhZ28nLFxuICAgICAgICAgICAgICBzdGF0ZTogJ0lMJyxcbiAgICAgICAgICAgICAgemlwOiAnNjAwMDcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvYmJpZXM6IFsncnVubmluZycsICdnYW1pbmcnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5zdGF0ZSc6ICdOWScsXG4gICAgICAgICdhZGRyZXNzLnppcCc6ICcxMDAwMScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICAgICdob2JiaWVzWzJdJzogJ2Nvb2tpbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy5zdHJlZXQnOiAnNDU2IEVsbSBTdCcsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3MuY2l0eSc6ICdMb3MgQW5nZWxlcycsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RhdGUnOiAnQ0EnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnppcCc6ICc5MDAwMScsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMF0nOiAnaGlraW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uaG9iYmllc1sxXSc6ICdwaG90b2dyYXBoeScsXG4gICAgICAgICdmcmllbmRzWzFdLm5hbWUnOiAnTWlrZScsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZGRyZXNzLnN0cmVldCc6ICc3ODkgT2FrIFN0JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5jaXR5JzogJ0NoaWNhZ28nLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZGRyZXNzLnN0YXRlJzogJ0lMJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy56aXAnOiAnNjAwMDcnLFxuICAgICAgICAnZnJpZW5kc1sxXS5ob2JiaWVzWzBdJzogJ3J1bm5pbmcnLFxuICAgICAgICAnZnJpZW5kc1sxXS5ob2JiaWVzWzFdJzogJ2dhbWluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgJ2ZsYXR0ZW5Kc29uJyBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGtleXMgYW5kIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHsgc3RyZWV0OiAnMTIzIE1haW4gU3QnLCBjaXR5OiAnU2FuIEZyYW5jaXNjbycgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ1NhbiBGcmFuY2lzY28nLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMsIGluY2x1ZGluZyBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdpdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICB6aXA6IDEyMzQ1LFxuICAgICAgICAgIGNvdW50cnk6ICdVU0EnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICBsYXRpdHVkZTogNDAuNzEyOCxcbiAgICAgICAgICAgIGxvbmdpdHVkZTogLTc0LjAwNixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob2JiaWVzOiBbJ3JlYWRpbmcnLCAncGFpbnRpbmcnLCAnc3dpbW1pbmcnXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHsgbmFtZTogJ0phbmUnLCBhZ2U6IDI4IH0sXG4gICAgICAgICAgeyBuYW1lOiAnTWlrZScsIGFnZTogMzIgfSxcbiAgICAgICAgICB7IG5hbWU6ICdTYXJhaCcsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuemlwJzogMTIzNDUsXG4gICAgICAgICdhZGRyZXNzLmNvdW50cnknOiAnVVNBJyxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubGF0aXR1ZGUnOiA0MC43MTI4LFxuICAgICAgICAnYWRkcmVzcy5jb29yZGluYXRlcy5sb25naXR1ZGUnOiAtNzQuMDA2LFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdzd2ltbWluZycsXG4gICAgICAgICdmcmllbmRzWzBdLm5hbWUnOiAnSmFuZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMl0ubmFtZSc6ICdTYXJhaCcsXG4gICAgICAgICdmcmllbmRzWzJdLmFnZSc6IDI3LFxuICAgICAgICBwZXQ6IG51bGwsXG4gICAgICAgIGZhdm9yaXRlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggYXJyYXlzIGNvbnRhaW5pbmcgb2JqZWN0cyB3aXRoIGRpZmZlcmVudCBuZXN0aW5nIGxldmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgaG9iYmllczogW1xuICAgICAgICAgIHsgbmFtZTogJ1JlYWRpbmcnLCB0eXBlOiAnSW5kb29yJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ1J1bm5pbmcnLCB0eXBlOiAnT3V0ZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdDb29raW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ0JvYicsIGFnZTogMzIgfSxcbiAgICAgICAgICB7IG5hbWU6ICdDaGFybGllJywgYWdlOiAyNyB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdob2JiaWVzWzBdLm5hbWUnOiAnUmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzBdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0ubmFtZSc6ICdSdW5uaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0udHlwZSc6ICdPdXRkb29yJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0ubmFtZSc6ICdDb29raW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0udHlwZSc6ICdJbmRvb3InLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0FsaWNlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzFdLm5hbWUnOiAnQm9iJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnQ2hhcmxpZScsXG4gICAgICAgICdmcmllbmRzWzJdLmFnZSc6IDI3LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRPZmZzZXRJblNlYycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgYSB2YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FzaWEvS29sa2F0YScpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgxOTgwMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiVVRDXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnVVRDJyk7XG4gICAgICBleHBlY3Qob2Zmc2V0KS50b0JlKDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdFdGMvVVRDJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDAgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgXCJFdGMvVVRDXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnRXRjL1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGZvciBhbiBpbnZhbGlkIHRpbWV6b25lIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnSW52YWxpZC9UaW1lem9uZScpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnKzA1OjMwJyBpbnZhbGlkIHRpbWV6b25lIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB1bmRlZmluZWQgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiKzA1OjMwXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnKzA1OjMwJyk7XG4gICAgICBleHBlY3Qob2Zmc2V0KS50b0JlKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb3JyZWN0IG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnQW1lcmljYS9OZXdfWW9yaydcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgXCJBbWVyaWNhL05ld19Zb3JrXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnQW1lcmljYS9OZXdfWW9yaycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgtMTgwMDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0VGltZVN0YW1wJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBubyBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKDE2NDA5OTUyMDAwMDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXN0YW1wIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIG1vbWVudCBmb3JtYXQgd2hlbiBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb21lbnQgZm9ybWF0IHdoZW4gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgZm9ybWF0ID0gJ1lZWVktTU0tREQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIsIGZvcm1hdCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcyMDIyLTAxLTAxJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3Igd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICdpbnZhbGlkLWRhdGUnO1xuICAgICAgZXhwZWN0KGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKSkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICdpbnZhbGlkLWRhdGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcHJvdmlkZWQgYXMgdGhlIGRhdGUgc3RyaW5nIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHByb3ZpZGVkIGFzIHRoZSBkYXRlIHN0cmluZyBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBpbnZhbGlkIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBOYU4gd2hlbiBhbiBpbnZhbGlkIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9ICdpbnZhbGlkRm9ybWF0JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyLCBmb3JtYXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaW52YW0xLzEvMjAyMmk2Rm9yMGFtdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB3aGVuIGEgdmFsaWQgdGltZXN0YW1wIHN0cmluZyBpcyBwcm92aWRlZCBpbnN0ZWFkIG9mIGEgZGF0ZSBzdHJpbmcuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBhIHZhbGlkIHRpbWVzdGFtcCBzdHJpbmcgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIGRhdGUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgxNjQwOTk1MjAwMDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hhc2hUb1NoYTI1NicsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIHN0cmluZyBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ3Rlc3Qgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2Q1NTc5YzQ2ZGZjYzdmMTgyMDcwMTNlNjViNDRlNGNiNGUyYzIyOThmNGFjNDU3YmE4ZjgyNzQzZjMxZTkzMGInO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBCdWZmZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBCdWZmZXIgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKCd0ZXN0IGJ1ZmZlcicpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNTI1ZWY1ZjdiYWY1NjUyOGI0ODc3MDkyMmU5OGU4MDAzMTBkMzY4NTY4MWQzNGVlNTkyOTAyYWEyNTI0NThiMyc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBudW1iZXIgYXJyYXkgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgbnVtYmVyIGFycmF5IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQ6IG51bWJlcltdID0gW107XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IEJ1ZmZlciBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBCdWZmZXIgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2UzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgc3RyaW5nIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IHN0cmluZyBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgbnVtYmVyIGFycmF5IGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgbnVtYmVyIGFycmF5IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgMywgNCwgNV07XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICc3NGY4MWZlMTY3ZDk5YjRjYjQxZDZkMGNjZGE4MjI3OGNhZWU5ZjNlMmYyNWQ1ZTVhMzkzNmZmM2RjZWM2MGQwJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgbm9uLUFTQ0lJIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG5vbi1BU0NJSSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICfkvaDlpb3kuJbnlYwnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNTA4ZDY5ZGMyMWJmNWQyZjgwNDAxNGIxNjg4OTUzYTEyZDVkZmRlNzFiZTZjZDk1NDE3Nzk4MGQ1ZDE3NDFiYic7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZVVVSUQnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVVUlEIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgdXVpZCkudG9CZSgnc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiBnZW5lcmF0ZXMgYSB1bmlxdWUgVVVJRCBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHVuaXF1ZSBVVUlEIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkMSA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgY29uc3QgdXVpZDIgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh1dWlkMSkubm90LnRvQmUodXVpZDIpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nIHdpdGggbGVuZ3RoIDM2XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVVUlEIHN0cmluZyB3aXRoIGxlbmd0aCAzNicsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh1dWlkLmxlbmd0aCkudG9CZSgzNik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiByZXR1cm5zIGEgVVVJRCBzdHJpbmcgd2l0aCA0IGRhc2hlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcgd2l0aCA0IGRhc2hlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnN0IGRhc2hDb3VudCA9ICh1dWlkLm1hdGNoKC8tL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBleHBlY3QoZGFzaENvdW50KS50b0JlKDQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RXJyb3JSZXNwRXZlbnRzIC0tIG1ldGFkYXRhIHRlc3RzJywgKCkgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhMSA9IHtcbiAgICAgIHNvdXJjZUlkOiAnczMnLFxuICAgICAgd29ya3NwYWNlSWQ6ICd3c3AxJyxcbiAgICAgIGRlc3RpbmF0aW9uSWQ6ICdkMScsXG4gICAgICBqb2JSdW5JZDogJzEyMycsXG4gICAgICBqb2JJZDogMSxcbiAgICB9IGFzIE1ldGFkYXRhO1xuICAgIGNvbnN0IG1ldGFkYXRhMiA9IHtcbiAgICAgIHNvdXJjZUlkOiAnczInLFxuICAgICAgd29ya3NwYWNlSWQ6ICd3c3AxJyxcbiAgICAgIGRlc3RpbmF0aW9uSWQ6ICdkMicsXG4gICAgICBqb2JSdW5JZDogJzEyMicsXG4gICAgICBqb2JJZDogNCxcbiAgICB9IGFzIE1ldGFkYXRhO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHByb3BlciBvYmplY3QsIHdoZW4gd2Ugc2VuZCBwcm9wZXIgbWV0YWRhdGEgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0ID0gZ2V0RXJyb3JSZXNwRXZlbnRzKFttZXRhZGF0YTEsIG1ldGFkYXRhMl0sIDQwMCwgJ2Vyci0xJywge30sIGZhbHNlKTtcbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KG91dC5tZXRhZGF0YSkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3Qob3V0Lm1ldGFkYXRhPy5sZW5ndGgpLnRvQmUoMik7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvcGVyIG9iamVjdCwgd2hlbiB3ZSBzZW5kIG1ldGFkYXRhIGFzIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG91dCA9IGdldEVycm9yUmVzcEV2ZW50cyhbbWV0YWRhdGEyXSwgNDAwLCAnZXJyLTEnLCB7fSwgZmFsc2UpO1xuICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkob3V0Lm1ldGFkYXRhKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChvdXQubWV0YWRhdGE/Lmxlbmd0aCkudG9CZSgxKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBwcm9wZXIgb2JqZWN0KG1ldGFkYXRhIGVtcHR5IGFycmF5KSwgd2hlbiB3ZSBzZW5kIG1ldGFkYXRhIGFzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvdXQgPSBnZXRFcnJvclJlc3BFdmVudHMoW10sIDQwMCwgJ2Vyci0xJywge30sIGZhbHNlKTtcbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KG91dC5tZXRhZGF0YSkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3Qob3V0Lm1ldGFkYXRhPy5sZW5ndGgpLnRvQmUoMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|