aws-cdk 2.8.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +1 -1
- package/build-info.json +2 -2
- package/lib/api/cloudformation-deployments.d.ts +8 -5
- package/lib/api/cloudformation-deployments.js +100 -42
- package/lib/api/hotswap/lambda-functions.js +115 -14
- package/lib/api/hotswap-deployments.js +1 -1
- package/lib/api/logs/logs-monitor.js +5 -4
- package/lib/api/toolkit-info.js +5 -5
- package/lib/api/util/placeholders.d.ts +6 -0
- package/lib/api/util/placeholders.js +25 -0
- package/lib/assets.js +2 -1
- package/lib/cdk-toolkit.js +3 -3
- package/lib/context-providers/ami.d.ts +1 -1
- package/lib/context-providers/ami.js +3 -3
- package/lib/context-providers/availability-zones.d.ts +1 -1
- package/lib/context-providers/availability-zones.js +3 -3
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -1
- package/lib/context-providers/endpoint-service-availability-zones.js +3 -3
- package/lib/context-providers/hosted-zones.d.ts +1 -1
- package/lib/context-providers/hosted-zones.js +3 -3
- package/lib/context-providers/index.d.ts +6 -0
- package/lib/context-providers/index.js +18 -5
- package/lib/context-providers/keys.d.ts +1 -1
- package/lib/context-providers/keys.js +3 -3
- package/lib/context-providers/load-balancers.d.ts +1 -1
- package/lib/context-providers/load-balancers.js +4 -4
- package/lib/context-providers/security-groups.d.ts +1 -1
- package/lib/context-providers/security-groups.js +3 -3
- package/lib/context-providers/ssm-parameters.d.ts +1 -1
- package/lib/context-providers/ssm-parameters.js +3 -3
- package/lib/context-providers/vpcs.d.ts +1 -1
- package/lib/context-providers/vpcs.js +6 -3
- package/lib/init-templates/v1/app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/sample-app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/sample-app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/sample-app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/sample-app/fsharp/cdk.template.json +1 -1
- package/lib/plugin.d.ts +15 -1
- package/lib/plugin.js +17 -3
- package/lib/util/asset-publishing.d.ts +1 -1
- package/lib/util/asset-publishing.js +4 -4
- package/npm-shrinkwrap.json +41 -41
- package/package.json +16 -15
- package/test/api/cloudformation-deployments.test.js +643 -1
- package/test/api/hotswap/hotswap-deployments.test.js +2 -2
- package/test/api/hotswap/hotswap-test-setup.d.ts +6 -1
- package/test/api/hotswap/hotswap-test-setup.js +19 -3
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +121 -0
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +175 -2
- package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.js +139 -0
- package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.js +2 -2
- package/test/api/logs/logs-monitor.test.js +9 -13
- package/test/cdk-toolkit.test.js +42 -1
- package/test/context-providers/generic.test.js +7 -6
- package/test/context-providers/vpcs.test.js +132 -1
- package/test/diff-nested-stacks-templates/one-output-one-param-stack.nested.template.json +20 -0
- package/test/diff-nested-stacks-templates/one-resource-one-stack-stack.nested.template.json +19 -0
- package/test/diff-nested-stacks-templates/one-resource-stack.nested.template.json +10 -0
- package/test/diff-nested-stacks-templates/one-resource-two-stacks-stack.nested.template.json +28 -0
- package/test/diff.test.js +215 -96
- package/test/util/mock-sdk.d.ts +3 -1
- package/test/util/mock-sdk.js +3 -3
- package/test/util.js +18 -1
|
@@ -16,18 +16,13 @@ afterAll(() => {
|
|
|
16
16
|
stderrMock.mockRestore();
|
|
17
17
|
monitor.deactivate();
|
|
18
18
|
});
|
|
19
|
-
let TIMESTAMP;
|
|
20
|
-
let HUMAN_TIME;
|
|
21
|
-
beforeAll(() => {
|
|
22
|
-
TIMESTAMP = new Date().getTime();
|
|
23
|
-
HUMAN_TIME = new Date(TIMESTAMP).toLocaleTimeString();
|
|
24
|
-
});
|
|
25
19
|
test('continue to the next page if it exists', async () => {
|
|
26
20
|
// GIVEN
|
|
21
|
+
const eventDate = new Date(T0 + 102 * 1000);
|
|
27
22
|
sdk.stubCloudWatchLogs({
|
|
28
23
|
filterLogEvents() {
|
|
29
24
|
return {
|
|
30
|
-
events: [event(102, 'message')],
|
|
25
|
+
events: [event(102, 'message', eventDate)],
|
|
31
26
|
nextToken: 'some-token',
|
|
32
27
|
};
|
|
33
28
|
},
|
|
@@ -42,18 +37,19 @@ test('continue to the next page if it exists', async () => {
|
|
|
42
37
|
// need time for the log processing to occur
|
|
43
38
|
await aws_1.sleep(1000);
|
|
44
39
|
// THEN
|
|
40
|
+
const expectedLocaleTimeString = eventDate.toLocaleTimeString();
|
|
45
41
|
expect(stderrMock).toHaveBeenCalledTimes(2);
|
|
46
|
-
expect(stderrMock.mock.calls[0][0]).toContain(`[${chalk_1.blue('loggroup')}] ${chalk_1.yellow(
|
|
47
|
-
expect(stderrMock.mock.calls[1][0]).toContain(`[${chalk_1.blue('loggroup')}] ${chalk_1.yellow(
|
|
42
|
+
expect(stderrMock.mock.calls[0][0]).toContain(`[${chalk_1.blue('loggroup')}] ${chalk_1.yellow(expectedLocaleTimeString)} message`);
|
|
43
|
+
expect(stderrMock.mock.calls[1][0]).toContain(`[${chalk_1.blue('loggroup')}] ${chalk_1.yellow(expectedLocaleTimeString)} >>> \`watch\` shows only the first 100 log messages - the rest have been truncated...`);
|
|
48
44
|
});
|
|
49
45
|
const T0 = 1597837230504;
|
|
50
46
|
const T100 = T0 + 100 * 1000;
|
|
51
|
-
function event(nr, message) {
|
|
47
|
+
function event(nr, message, timestamp) {
|
|
52
48
|
return {
|
|
53
49
|
eventId: `${nr}`,
|
|
54
50
|
message,
|
|
55
|
-
timestamp:
|
|
56
|
-
ingestionTime:
|
|
51
|
+
timestamp: timestamp.getTime(),
|
|
52
|
+
ingestionTime: timestamp.getTime(),
|
|
57
53
|
};
|
|
58
54
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy1tb25pdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2dzLW1vbml0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFxQztBQUNyQyxxRUFBK0U7QUFDL0UsaURBQWdEO0FBQ2hELGtEQUE4QztBQUU5QyxJQUFJLEdBQVksQ0FBQztBQUNqQixJQUFJLFVBQTRCLENBQUM7QUFDakMsSUFBSSxPQUFrQyxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxPQUFPLEdBQUcsSUFBSSx3Q0FBeUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixHQUFHLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsR0FBRyxFQUFFO0lBQ1osVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN4RCxRQUFRO0lBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDckIsZUFBZTtZQUNiLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLFNBQVMsRUFBRSxZQUFZO2FBQ3hCLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLFlBQVksQ0FDbEI7UUFDRSxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLE1BQU0sRUFBRSxXQUFXO0tBQ3BCLEVBQ0QsR0FBRyxFQUNILENBQUMsVUFBVSxDQUFDLENBQ2IsQ0FBQztJQUNGLE9BQU87SUFDUCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsNENBQTRDO0lBQzVDLE1BQU0sV0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxCLE9BQU87SUFDUCxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzNDLElBQUksWUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLGNBQU0sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQ3BFLENBQUM7SUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzNDLElBQUksWUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLGNBQU0sQ0FBQyx3QkFBd0IsQ0FBQyx3RkFBd0YsQ0FDbEosQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFNBQVMsS0FBSyxDQUFDLEVBQVUsRUFBRSxPQUFlLEVBQUUsU0FBZTtJQUN6RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2hCLE9BQU87UUFDUCxTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUM5QixhQUFhLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtLQUNuQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJsdWUsIHllbGxvdyB9IGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2xvZ3MvbG9ncy1tb25pdG9yJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vLi4vaW50ZWcvaGVscGVycy9hd3MnO1xuaW1wb3J0IHsgTW9ja1NkayB9IGZyb20gJy4uLy4uL3V0aWwvbW9jay1zZGsnO1xuXG5sZXQgc2RrOiBNb2NrU2RrO1xubGV0IHN0ZGVyck1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG5sZXQgbW9uaXRvcjogQ2xvdWRXYXRjaExvZ0V2ZW50TW9uaXRvcjtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBtb25pdG9yID0gbmV3IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IobmV3IERhdGUoVDEwMCkpO1xuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xuICBzZGsgPSBuZXcgTW9ja1NkaygpO1xufSk7XG5cbmFmdGVyQWxsKCgpID0+IHtcbiAgc3RkZXJyTW9jay5tb2NrUmVzdG9yZSgpO1xuICBtb25pdG9yLmRlYWN0aXZhdGUoKTtcbn0pO1xuXG50ZXN0KCdjb250aW51ZSB0byB0aGUgbmV4dCBwYWdlIGlmIGl0IGV4aXN0cycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZXZlbnREYXRlID0gbmV3IERhdGUoVDAgKyAxMDIgKiAxMDAwKTtcbiAgc2RrLnN0dWJDbG91ZFdhdGNoTG9ncyh7XG4gICAgZmlsdGVyTG9nRXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnRzOiBbZXZlbnQoMTAyLCAnbWVzc2FnZScsIGV2ZW50RGF0ZSldLFxuICAgICAgICBuZXh0VG9rZW46ICdzb21lLXRva2VuJyxcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG4gIG1vbml0b3IuYWRkTG9nR3JvdXBzKFxuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGFjY291bnQ6ICcxMTExMTExMTExMScsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIH0sXG4gICAgc2RrLFxuICAgIFsnbG9nZ3JvdXAnXSxcbiAgKTtcbiAgLy8gV0hFTlxuICBtb25pdG9yLmFjdGl2YXRlKCk7XG4gIC8vIG5lZWQgdGltZSBmb3IgdGhlIGxvZyBwcm9jZXNzaW5nIHRvIG9jY3VyXG4gIGF3YWl0IHNsZWVwKDEwMDApO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nID0gZXZlbnREYXRlLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICBleHBlY3Qoc3RkZXJyTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzBdWzBdKS50b0NvbnRhaW4oXG4gICAgYFske2JsdWUoJ2xvZ2dyb3VwJyl9XSAke3llbGxvdyhleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcpfSBtZXNzYWdlYCxcbiAgKTtcbiAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9Db250YWluKFxuICAgIGBbJHtibHVlKCdsb2dncm91cCcpfV0gJHt5ZWxsb3coZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nKX0gPj4+IFxcYHdhdGNoXFxgIHNob3dzIG9ubHkgdGhlIGZpcnN0IDEwMCBsb2cgbWVzc2FnZXMgLSB0aGUgcmVzdCBoYXZlIGJlZW4gdHJ1bmNhdGVkLi4uYCxcbiAgKTtcbn0pO1xuXG5jb25zdCBUMCA9IDE1OTc4MzcyMzA1MDQ7XG5jb25zdCBUMTAwID0gVDAgKyAxMDAgKiAxMDAwO1xuZnVuY3Rpb24gZXZlbnQobnI6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiBBV1MuQ2xvdWRXYXRjaExvZ3MuRmlsdGVyZWRMb2dFdmVudCB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogYCR7bnJ9YCxcbiAgICBtZXNzYWdlLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLmdldFRpbWUoKSxcbiAgICBpbmdlc3Rpb25UaW1lOiB0aW1lc3RhbXAuZ2V0VGltZSgpLFxuICB9O1xufVxuIl19
|
package/test/cdk-toolkit.test.js
CHANGED
|
@@ -115,6 +115,13 @@ describe('readCurrentTemplate', () => {
|
|
|
115
115
|
},
|
|
116
116
|
},
|
|
117
117
|
},
|
|
118
|
+
{
|
|
119
|
+
stackName: 'Test-Stack-A',
|
|
120
|
+
template,
|
|
121
|
+
properties: {
|
|
122
|
+
assumeRoleArn: 'bloop:${AWS::Region}:${AWS::AccountId}',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
118
125
|
],
|
|
119
126
|
});
|
|
120
127
|
mockForEnvironment = jest.fn().mockImplementation(() => { return { sdk: mockCloudExecutable.sdkProvider.sdk, didAssumeRole: true }; });
|
|
@@ -133,6 +140,11 @@ describe('readCurrentTemplate', () => {
|
|
|
133
140
|
StackStatus: 'CREATE_COMPLETE',
|
|
134
141
|
CreationTime: new Date(),
|
|
135
142
|
},
|
|
143
|
+
{
|
|
144
|
+
StackName: 'Test-Stack-A',
|
|
145
|
+
StackStatus: 'CREATE_COMPLETE',
|
|
146
|
+
CreationTime: new Date(),
|
|
147
|
+
},
|
|
136
148
|
],
|
|
137
149
|
};
|
|
138
150
|
},
|
|
@@ -302,6 +314,35 @@ describe('readCurrentTemplate', () => {
|
|
|
302
314
|
assumeRoleArn: 'bloop:here:123456789012',
|
|
303
315
|
});
|
|
304
316
|
});
|
|
317
|
+
test('do not print warnings if lookup role not provided in stack artifact', async () => {
|
|
318
|
+
// GIVEN
|
|
319
|
+
mockCloudExecutable.sdkProvider.stubSSM({
|
|
320
|
+
getParameter() {
|
|
321
|
+
return {};
|
|
322
|
+
},
|
|
323
|
+
});
|
|
324
|
+
const cdkToolkit = new cdk_toolkit_1.CdkToolkit({
|
|
325
|
+
cloudExecutable: mockCloudExecutable,
|
|
326
|
+
configuration: mockCloudExecutable.configuration,
|
|
327
|
+
sdkProvider: mockCloudExecutable.sdkProvider,
|
|
328
|
+
cloudFormation: new cloudformation_deployments_1.CloudFormationDeployments({ sdkProvider: mockCloudExecutable.sdkProvider }),
|
|
329
|
+
});
|
|
330
|
+
// WHEN
|
|
331
|
+
await cdkToolkit.deploy({
|
|
332
|
+
selector: { patterns: ['Test-Stack-A'] },
|
|
333
|
+
});
|
|
334
|
+
// THEN
|
|
335
|
+
expect(util_1.flatten(stderrMock.mock.calls)).not.toEqual(expect.arrayContaining([
|
|
336
|
+
expect.stringMatching(/Could not assume/),
|
|
337
|
+
expect.stringMatching(/please upgrade to bootstrap version/),
|
|
338
|
+
]));
|
|
339
|
+
expect(mockCloudExecutable.sdkProvider.sdk.ssm).not.toHaveBeenCalled();
|
|
340
|
+
expect(mockForEnvironment.mock.calls.length).toEqual(2);
|
|
341
|
+
expect(mockForEnvironment.mock.calls[0][2]).toEqual({
|
|
342
|
+
assumeRoleArn: undefined,
|
|
343
|
+
assumeRoleExternalId: undefined,
|
|
344
|
+
});
|
|
345
|
+
});
|
|
305
346
|
});
|
|
306
347
|
describe('deploy', () => {
|
|
307
348
|
test('fails when no valid stack names are given', async () => {
|
|
@@ -731,4 +772,4 @@ class FakeCloudFormation extends cloudformation_deployments_1.CloudFormationDepl
|
|
|
731
772
|
}
|
|
732
773
|
}
|
|
733
774
|
}
|
|
734
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLHNDQUFzQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0IsS0FBSyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDLENBQUMsQ0FBQztBQUNKLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxXQUFXO1FBQ2IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELGlFQUFpRTtRQUNqRSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCwrRUFBK0U7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8saUJBQWlCLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7Q0FDRixDQUFDO0FBRUYsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QyxvREFBb0Q7QUFDcEQsc0ZBQXNHO0FBR3RHLG9EQUFxRDtBQUNyRCxzQ0FBOEM7QUFDOUMsc0NBQXNDO0FBQ3RDLGlDQUFrRjtBQUVsRixJQUFJLGVBQW9DLENBQUM7QUFDekMsSUFBSSxZQUF1QyxDQUFDO0FBQzVDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFFckIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkQsNENBQTRDO0lBQzVDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTNELFlBQVksR0FBRyx1QkFBZ0IsQ0FBQyx3QkFBWSxDQUFDLENBQUM7SUFDOUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFTLENBQUMsQ0FBQztJQUV6RixlQUFlLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztRQUN4QyxNQUFNLEVBQUU7WUFDTixTQUFTLENBQUMsWUFBWTtZQUN0QixTQUFTLENBQUMsWUFBWTtTQUN2QjtRQUNELGdCQUFnQixFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7YUFDakMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUVMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxtQkFBbUI7SUFDMUIsT0FBTyxJQUFJLHdCQUFVLENBQUM7UUFDcEIsZUFBZTtRQUNmLGFBQWEsRUFBRSxlQUFlLENBQUMsYUFBYTtRQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7UUFDeEMsY0FBYyxFQUFFLElBQUksa0JBQWtCLENBQUM7WUFDckMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7U0FDbEMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksUUFBYSxDQUFDO0lBQ2xCLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25DLElBQUksbUJBQXdDLENBQUM7SUFDN0MsSUFBSSxVQUE0QixDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUYsUUFBUSxHQUFHO1lBQ1QsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsdUJBQXVCO29CQUM3QixVQUFVLEVBQUU7d0JBQ1YsR0FBRyxFQUFFLE9BQU87cUJBQ2I7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFDRixtQkFBbUIsR0FBRyxJQUFJLDBCQUFtQixDQUFDO1lBQzVDLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxTQUFTLEVBQUUsY0FBYztvQkFDekIsUUFBUTtvQkFDUixVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLHdDQUF3Qzt3QkFDdkQsVUFBVSxFQUFFOzRCQUNWLEdBQUcsRUFBRSwrQ0FBK0M7NEJBQ3BELDZCQUE2QixFQUFFLENBQUM7NEJBQ2hDLGlDQUFpQyxFQUFFLHNCQUFzQjt5QkFDMUQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkksbUJBQW1CLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztRQUNwRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7WUFDakQsV0FBVztnQkFDVCxPQUFPO29CQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztpQkFDdkMsQ0FBQztZQUNKLENBQUM7WUFDRCxjQUFjO2dCQUNaLE9BQU87b0JBQ0wsTUFBTSxFQUFFO3dCQUNOOzRCQUNFLFNBQVMsRUFBRSxjQUFjOzRCQUN6QixXQUFXLEVBQUUsaUJBQWlCOzRCQUM5QixZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUU7eUJBQ3pCO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckMsUUFBUTtRQUNSLElBQUksc0JBQThCLENBQUM7UUFDbkMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZLENBQUMsT0FBTztnQkFDbEIsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdEMsT0FBTztvQkFDTCxTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLEdBQUc7cUJBQ1g7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7WUFDaEMsZUFBZSxFQUFFLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtZQUNoRCxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM1QyxjQUFjLEVBQUUsSUFBSSxzREFBeUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3pDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsc0JBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLGdDQUFnQztTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxpRUFBaUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRixRQUFRO1FBQ1IsSUFBSSxzQkFBOEIsQ0FBQztRQUNuQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVksQ0FBQyxPQUFPO2dCQUNsQixzQkFBc0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QyxPQUFPO29CQUNMLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsR0FBRztxQkFDWDtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxjQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsaURBQWlELENBQUM7WUFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQztTQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxzQkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsZ0NBQWdDO1NBQ2hELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSx5QkFBeUI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsa0VBQWtFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEYsUUFBUTtRQUNSLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWTtnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7WUFDaEMsZUFBZSxFQUFFLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtZQUNoRCxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM1QyxjQUFjLEVBQUUsSUFBSSxzREFBeUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3pDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsY0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNwRSxNQUFNLENBQUMsY0FBYyxDQUFDLGlEQUFpRCxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsMENBQTBDLENBQUM7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLGdDQUFnQztTQUNoRCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUseUJBQXlCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xFLFFBQVE7UUFDUix3RkFBd0Y7UUFDeEYsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkYsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO1FBQzFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUM7UUFDcEUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZO2dCQUNWLE9BQU8sRUFBRyxDQUFDO1lBQ2IsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxjQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsaURBQWlELENBQUM7WUFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQztTQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsZ0NBQWdDO1NBQ2hELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSx5QkFBeUI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseUVBQXlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekYsUUFBUTtRQUNSLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEksbUJBQW1CLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7WUFDaEMsZUFBZSxFQUFFLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtZQUNoRCxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM1QyxjQUFjLEVBQUUsSUFBSSxzREFBeUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUM7UUFDSCxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVk7Z0JBQ1YsT0FBTyxFQUFHLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLGNBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDcEUsTUFBTSxDQUFDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQztTQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsZ0NBQWdDO1NBQ2hELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSx5QkFBeUI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ3RCLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxRQUFRO1FBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQy9JLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUN2QyxJQUFJLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEcsUUFBUTtZQUNSLE1BQU0sa0JBQWtCLEdBQUcsdUJBQWdCLENBQUMsc0RBQXlCLENBQUMsQ0FBQztZQUN2RSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQzdELElBQUksRUFBRSxLQUFLO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixhQUFhLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDO2FBQ25FLENBQUMsQ0FBQyxDQUFDO1lBQ0osTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO2dCQUNoQyxlQUFlO2dCQUNmLGFBQWEsRUFBRSxlQUFlLENBQUMsYUFBYTtnQkFDNUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXO2dCQUN4QyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DLENBQUMsQ0FBQztZQUVILE9BQU87WUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUN4QyxlQUFlLEVBQUUsc0JBQWUsQ0FBQyxLQUFLO2dCQUN0QyxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQztZQUVILE9BQU87WUFDUCxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2dCQUNsRixPQUFPLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pDLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckUsUUFBUTtZQUNSLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFFdEMsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBR0gsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFDLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RCxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUMsUUFBUTtZQUNSLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1lBQzVGLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQztnQkFDN0IsZUFBZTtnQkFDZixhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQWE7Z0JBQzVDLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztnQkFDeEMsY0FBYyxFQUFFLElBQUksa0JBQWtCLENBQUM7b0JBQ3JDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7b0JBQzlCLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7aUJBQ2xDLEVBQUUsZ0JBQWdCLENBQUM7YUFDckIsQ0FBQyxDQUFDO1lBRUgsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbkIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxFQUFFO2dCQUN4RCxnQkFBZ0I7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsUUFBUTtZQUNSLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFFdEMsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLE9BQU87WUFDUCxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUM7Z0JBQzdELE9BQU8sRUFBRSxPQUFPO2dCQUNoQixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsSUFBSSxFQUFFLHdCQUF3QjthQUMvQixFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0QsUUFBUTtZQUNSLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFakUsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTFFLE9BQU87WUFDUCxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUM7Z0JBQzdELE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixJQUFJLEVBQUUsdUNBQXVDO2FBQzlDLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxxREFBcUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRSxRQUFRO1lBQ1IsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFFdEMsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTVFLE9BQU87WUFDUCxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUM7Z0JBQzdELE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsV0FBVztnQkFDbkIsSUFBSSxFQUFFLDhCQUE4QjthQUNyQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNoQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUZBQXVGO1lBQ3hHLGlEQUFpRCxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0QsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxxREFBcUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsUUFBUTtTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztTQUNyQyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlGQUFpRixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pHLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2xELFlBQVk7WUFDWixPQUFPO1lBQ1AsVUFBVTtZQUNWLG9CQUFvQjtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxxREFBcUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsUUFBUTtTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQztTQUNuQyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxPQUFtQixDQUFDO1FBQ3hCLElBQUksYUFBd0IsQ0FBQztRQUU3QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUQsT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDaEMsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUMvQixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdFQUFnRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hGLE1BQU0scUJBQXFCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRWhFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDeEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCx3REFBd0Q7Z0JBQ3hELDBEQUEwRDtnQkFDMUQsc0JBQXNCO2dCQUN0QixxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDNUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUMzRCxNQUFNLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFaEUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7b0JBQzFELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7aUJBQzlELENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDaEIscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztvQkFDMUQscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztvQkFDN0QscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztvQkFDN0QscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztpQkFDM0QsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2QyxPQUFPO1FBQ1AsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDM0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLGVBQWUsR0FBRyxJQUFJLDBCQUFtQixDQUFDO2dCQUN4QyxNQUFNLEVBQUU7b0JBQ04sU0FBUyxDQUFDLFlBQVk7b0JBQ3RCLFNBQVMsQ0FBQyxZQUFZO2lCQUN2QjtnQkFDRCxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNqQixNQUFNLEVBQUU7NEJBQ04sRUFBRSxVQUFVLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUU7eUJBQzlFO3FCQUNGLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUcsRUFBRTtZQUMxRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBRyxFQUFFO1lBQzlELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUcsRUFBRTtRQUM1RCxlQUFlLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztZQUN4QyxNQUFNLEVBQUU7Z0JBQ04sU0FBUyxDQUFDLFlBQVk7Z0JBQ3RCLFNBQVMsQ0FBQyxZQUFZO2FBQ3ZCO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxFQUFFO3dCQUNOLEVBQUUsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFO3FCQUMvRTtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEcsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7WUFDeEMsTUFBTSxFQUFFO2dCQUNOLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QixTQUFTLENBQUMsWUFBWTthQUN2QjtZQUNELGdCQUFnQixFQUFFLENBQUM7b0JBQ2pCLE1BQU0sRUFBRTt3QkFDTixFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtxQkFDL0U7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEUsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7WUFDeEMsTUFBTSxFQUFFO2dCQUNOLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QixTQUFTLENBQUMsWUFBWTthQUN2QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLFNBQVM7O0FBQ1Usc0JBQVksR0FBc0I7SUFDdkQsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFO0lBQ3pELEdBQUcsRUFBRSx1Q0FBdUM7SUFDNUMsUUFBUSxFQUFFO1FBQ1IsZUFBZSxFQUFFO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNuRCxJQUFJLEVBQUU7b0JBQ0osRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7aUJBQzdCO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUNxQixzQkFBWSxHQUFzQjtJQUN2RCxTQUFTLEVBQUUsY0FBYztJQUN6QixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDekQsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ25ELElBQUksRUFBRTtvQkFDSixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtpQkFDaEM7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBQ3FCLHNCQUFZLEdBQXNCO0lBQ3ZELFNBQVMsRUFBRSxjQUFjO0lBQ3pCLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN6RCxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRTtRQUNSLGVBQWUsRUFBRTtZQUNmO2dCQUNFLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsVUFBVTtnQkFDbkQsSUFBSSxFQUFFO29CQUNKLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2lCQUNoQzthQUNGO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRSwyQkFBMkI7Q0FDekMsQ0FBQztBQUNxQixzQkFBWSxHQUFzQjtJQUN2RCxTQUFTLEVBQUUsY0FBYztJQUN6QixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDekQsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ25ELElBQUksRUFBRTtvQkFDSixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtpQkFDaEM7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztDQUM1QyxDQUFBO0FBQ3NCLCtCQUFxQixHQUFzQjtJQUNoRSxTQUFTLEVBQUUsWUFBWTtJQUN2QixHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7SUFDdkMsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFO1lBQ1g7Z0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLO2dCQUM5QyxJQUFJLEVBQUUsa0JBQWtCO2FBQ3pCO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRSx5QkFBeUI7Q0FDdkMsQ0FBQTtBQUdILE1BQU0sa0JBQW1CLFNBQVEsc0RBQXlCO0lBSXhELFlBQ0UsZUFBbUUsRUFBRSxFQUNyRSx3QkFBbUM7UUFFbkMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBUDFCLGlCQUFZLEdBQW1DLEVBQUUsQ0FBQztRQVNqRSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksd0JBQXdCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzNHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDeEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxrQ0FBa0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLFlBQVk7WUFDL0UsSUFBSSxFQUFFLEtBQUs7WUFDWCxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUF3QztRQUNqRSxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIG5lZWQgdG8gbW9jayB0aGUgY2hva2lkYXIgbGlicmFyeSwgdXNlZCBieSAnY2RrIHdhdGNoJ1xuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2hlck9uID0gamVzdC5mbigpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlciA9IHtcbiAgb246IG1vY2tDaG9raWRhcldhdGNoZXJPbixcbn07XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24gPSB7XG4gIGdldCByZWFkeUNhbGxiYWNrKCk6ICgpID0+IHZvaWQge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgLy8gVGhlIGNhbGwgdG8gdGhlIGZpcnN0ICd3YXRjaGVyLm9uKCknIGluIHRoZSBwcm9kdWN0aW9uIGNvZGUgaXMgdGhlIG9uZSB3ZSBhY3R1YWxseSB3YW50IGhlcmUuXG4gICAgLy8gVGhpcyBpcyBhIHByZXR0eSBmcmFnaWxlLCBidXQgYXQgbGVhc3Qgd2l0aCB0aGlzIGhlbHBlciBjbGFzcyxcbiAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZSBpdCBvbmx5IGluIG9uZSBwbGFjZSBpZiBpdCBldmVyIGJyZWFrc1xuICAgIGNvbnN0IGZpcnN0Q2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzBdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChmaXJzdENhbGxbMF0pLnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gZmlyc3RDYWxsWzFdO1xuICB9LFxuXG4gIGdldCBmaWxlRXZlbnRDYWxsYmFjaygpOiAoZXZlbnQ6ICdhZGQnIHwgJ2FkZERpcicgfCAnY2hhbmdlJyB8ICd1bmxpbmsnIHwgJ3VubGlua0RpcicsIHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgyKTtcbiAgICBjb25zdCBzZWNvbmRDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMV07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChzZWNvbmRDYWxsWzBdKS5ub3QudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBzZWNvbmRDYWxsWzFdO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2ggPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJ2Nob2tpZGFyJywgKCkgPT4gKHtcbiAgd2F0Y2g6IG1vY2tDaG9raWRhcldhdGNoLFxufSkpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2ggPSB7XG4gIGdldCBpbmNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpbmNsdWRlIGFyZ3MgYXJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgcmV0dXJuIG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMF07XG4gIH0sXG5cbiAgZ2V0IGV4Y2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGlnbm9yZSBhcmdzIGFyZSBhIHByb3BlcnR5IG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIGNvbnN0IGNob2tpZGFyV2F0Y2hPcHRzID0gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVsxXTtcbiAgICByZXR1cm4gY2hva2lkYXJXYXRjaE9wdHMuaWdub3JlZDtcbiAgfSxcbn07XG5cbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vbGliL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cywgRGVwbG95U3RhY2tPcHRpb25zIH0gZnJvbSAnLi4vbGliL2FwaS9jbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2xpYi9hcGkvZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENka1Rvb2xraXQsIFRhZyB9IGZyb20gJy4uL2xpYi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi9saWIvZGlmZic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuL3V0aWwnO1xuXG5sZXQgY2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xubGV0IGJvb3RzdHJhcHBlcjogamVzdC5Nb2NrZWQ8Qm9vdHN0cmFwcGVyPjtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcblxuICBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG4gIC8vIG9uKCkgaW4gY2hva2lkYXIncyBXYXRjaGVyIHJldHVybnMgJ3RoaXMnXG4gIG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG5cbiAgYm9vdHN0cmFwcGVyID0gaW5zdGFuY2VNb2NrRnJvbShCb290c3RyYXBwZXIpO1xuICBib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQubW9ja1Jlc29sdmVkVmFsdWUoeyBub09wOiBmYWxzZSwgb3V0cHV0czoge30gfSBhcyBhbnkpO1xuXG4gIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBzdGFja3M6IFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgIF0sXG4gICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0NdLFxuICAgIH1dLFxuICB9KTtcblxufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb29sa2l0U2V0dXAoKSB7XG4gIHJldHVybiBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQic6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQyc6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgIH0pLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ3JlYWRDdXJyZW50VGVtcGxhdGUnLCAoKSA9PiB7XG4gIGxldCB0ZW1wbGF0ZTogYW55O1xuICBsZXQgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpO1xuICBsZXQgbW9ja0Nsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbiAgbGV0IHN0ZGVyck1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4gdHJ1ZTsgfSk7XG5cbiAgICB0ZW1wbGF0ZSA9IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgS2V5OiAnVmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgbG9va3VwUm9sZToge1xuICAgICAgICAgICAgICBhcm46ICdibG9vcC1sb29rdXA6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiAnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIGdldFRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGRlc2NyaWJlU3RhY2tzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xvb2t1cCByb2xlIGlzIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBsZXQgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lID0gcmVxdWVzdC5OYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFBhcmFtZXRlcjoge1xuICAgICAgICAgICAgVmFsdWU6ICc2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gaXMgbm90IHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIG5vdCBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGZvdW5kJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgZm9yRW52aXJvbm1lbnQgdGhyb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgLy8gdGhyb3cgZXJyb3IgZmlyc3QgZm9yIHRoZSAncHJlcGFyZVNka1dpdGhMb29rdXBSb2xlRm9yJyBjYWxsIGFuZCBzdWNjZWVkIGZvciB0aGUgcmVzdFxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdlcnJvcicpOyB9KVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTt9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkb250IGxvb2t1cCBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXIgaWYgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVwbG95JywgKCkgPT4ge1xuICB0ZXN0KCdmYWlscyB3aGVuIG5vIHZhbGlkIHN0YWNrIG5hbWVzIGFyZSBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1EJ10gfSB9KSkucmVqZWN0cy50b1Rocm93KCdObyBzdGFja3MgbWF0Y2ggdGhlIG5hbWUocykgVGVzdC1TdGFjay1EJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGhvdHN3YXAgZGVwbG95bWVudCcsICgpID0+IHtcbiAgICB0ZXN0KFwicGFzc2VzIHRocm91Z2ggdGhlICdob3Rzd2FwJyBvcHRpb24gdG8gQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cy5kZXBsb3lTdGFjaygpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBtb2NrQ2ZuRGVwbG95bWVudHMgPSBpbnN0YW5jZU1vY2tGcm9tKENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMpO1xuICAgICAgbW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBub09wOiBmYWxzZSxcbiAgICAgICAgb3V0cHV0czoge30sXG4gICAgICAgIHN0YWNrQXJuOiAnc3RhY2tBcm4nLFxuICAgICAgICBzdGFja0FydGlmYWN0OiBpbnN0YW5jZU1vY2tGcm9tKGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCksXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbW9ja0NmbkRlcGxveW1lbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWFrZXMgY29ycmVjdCBDbG91ZEZvcm1hdGlvbiBjYWxscycsICgpID0+IHtcbiAgICB0ZXN0KCd3aXRob3V0IG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSB9KTtcbiAgICB9KTtcblxuXG4gICAgdGVzdCgnd2l0aCBvbmUgc3RhY2sgc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKiddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46YXdzOnNuczo6OmNmbi1ub3RpZmljYXRpb25zJywgJ2Fybjphd3M6c25zOjo6bXktY29vbC10b3BpYyddO1xuICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJywgJ1Rlc3QtU3RhY2stQiddIH0sXG4gICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICc1Njc4OScsXG4gICAgICAgIHJlZ2lvbjogJ3NvdXRoLXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vNTY3ODkvc291dGgtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmJ5IGJvb3RzdHJhcCB1c2VzIHdoYXRzIGluIHRoZSBzdGFja3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ2FwcCddLCAnc29tZXRoaW5nJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vKi9iZXJtdWRhLXRyaWFuZ2xlLTEnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib290c3RyYXAgY2FuIGJlIGludm9rZWQgd2l0aG91dCB0aGUgLS1hcHAgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG1vY2tTeW50aGVzaXplID0gamVzdC5mbigpO1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLnN5bnRoZXNpemUgPSBtb2NrU3ludGhlc2l6ZTtcblxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8xMjM0NTY3ODkwMTIvd2VzdC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICd3ZXN0LXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgICBleHBlY3QoY2xvdWRFeGVjdXRhYmxlLmhhc0FwcCkudG9FcXVhbChmYWxzZSk7XG4gICAgICBleHBlY3QobW9ja1N5bnRoZXNpemUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YXRjaCcsICgpID0+IHtcbiAgdGVzdChcImZhaWxzIHdoZW4gbm8gJ3dhdGNoJyBzZXR0aW5ncyBhcmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgdXNlIHRoZSAnd2F0Y2gnIGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgdG8gbW9uaXRvci4gXCIgK1xuICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnb2JzZXJ2ZXMgb25seSB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZXMgdGhlIG91dHB1dCBkaXIsIGRvdCBmaWxlcywgZG90IGRpcmVjdG9yaWVzLCBhbmQgbm9kZV9tb2R1bGVzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ291dHB1dCddLCAnY2RrLm91dCcpO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoW1xuICAgICAgJ2Nkay5vdXQvKionLFxuICAgICAgJyoqLy4qJyxcbiAgICAgICcqKi8uKi8qKicsXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICBdKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDYpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyMScpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1sxXSkudG9CZSgnKiovbXktZGlyMicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBmaWxlIGNoYW5nZSBldmVudHMnLCAoKSA9PiB7XG4gICAgbGV0IHRvb2xraXQ6IENka1Rvb2xraXQ7XG4gICAgbGV0IGNka0RlcGxveU1vY2s6IGplc3QuTW9jaztcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgICAgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNka0RlcGxveU1vY2sgPSBqZXN0LmZuKCk7XG4gICAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG4gICAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KFwiZG9lcyBub3QgdHJpZ2dlciBhICdkZXBsb3knIGJlZm9yZSB0aGUgJ3JlYWR5JyBldmVudCBoYXMgZmlyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiB0aGUgJ3JlYWR5JyBldmVudCBoYXMgYWxyZWFkeSBmaXJlZFwiLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIHJlYWR5IGNhbGxiYWNrIHRyaWdnZXJzIGEgZGVwbG95bWVudCBzbyBlYWNoIHRlc3RcbiAgICAgICAgLy8gdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWUgJ2Nka0RlcGxveU1vY2snIGNhbGxlZFxuICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIHRpbWUuXG4gICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImFuIGluaXRpYWwgJ2RlcGxveScgaXMgdHJpZ2dlcmVkLCB3aXRob3V0IGFueSBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJkb2VzIHRyaWdnZXIgYSAnZGVwbG95JyBmb3IgYSBmaWxlIGNoYW5nZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJ0cmlnZ2VycyBhICdkZXBsb3knIHR3aWNlIGZvciB0d28gZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYmF0Y2hlcyBmaWxlIGNoYW5nZXMgdGhhdCBoYXBwZW4gZHVyaW5nICdkZXBsb3knXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ3VubGluaycsICdteS1maWxlMycpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGU0JyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3N5bnRoJywgKCkgPT4ge1xuICB0ZXN0KCd3aXRoIG5vIHN0ZG91dCBvcHRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRVxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEnXSwgZmFsc2UsIHRydWUpKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuU1RBQ0tTX1RPX1ZBTElEQVRFID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhY2sgd2l0aCBlcnJvciBhbmQgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgICBdLFxuICAgICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogdHJ1ZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBmYWlsIGlmIGF1dG9WYWxpZGF0ZT10cnVlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2F1c2VzIHN5bnRoIHRvIHN1Y2NlZWQgaWYgYXV0b1ZhbGlkYXRlPWZhbHNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSkpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IgfSxcbiAgICAgICAgXSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnXSwgZmFsc2UsIHRydWUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciwgaXMgbm90IGZsYWdnZWQgZm9yIHZhbGlkYXRpb24gYW5kIHdhcyBub3QgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQyxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpKS5yZXNvbHZlcy50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5jbGFzcyBNb2NrU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQTogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1BJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1BJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0I6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQicsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQicgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQic6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19DOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUMnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUMnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BL1Rlc3QtU3RhY2stQycsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19EOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUQnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUQnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUQnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRlcGVuZHM6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZV0sXG4gIH1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX1dJVEhfRVJST1I6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ3dpdGhlcnJvcnMnLFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIHRlbXBsYXRlOiB7IHJlc291cmNlOiAnZXJyb3JyZXNvdXJjZScgfSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9yZXNvdXJjZSc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuRVJST1IsXG4gICAgICAgICAgZGF0YTogJ3RoaXMgaXMgYW4gZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnLFxuICB9XG59XG5cbmNsYXNzIEZha2VDbG91ZEZvcm1hdGlvbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiBUYWdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9LFxuICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdLFxuICApIHtcbiAgICBzdXBlcih7IHNka1Byb3ZpZGVyOiB1bmRlZmluZWQgYXMgYW55IH0pO1xuXG4gICAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCB0YWdzXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZFRhZ3MpKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkVGFnc1tzdGFja05hbWVdID1cbiAgICAgICAgT2JqZWN0LmVudHJpZXModGFncykubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpXG4gICAgICAgICAgLnNvcnQoKGwsIHIpID0+IGwuS2V5LmxvY2FsZUNvbXBhcmUoci5LZXkpKTtcbiAgICB9XG4gICAgaWYgKGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucykge1xuICAgICAgdGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMgPSBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBleHBlY3QoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lLCBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdKVxuICAgICAgLnRvQ29udGFpbihvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG4gICAgZXhwZWN0KG9wdGlvbnMudGFncykudG9FcXVhbCh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChvcHRpb25zLm5vdGlmaWNhdGlvbkFybnMpLnRvRXF1YWwodGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc3RhY2tBcm46IGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOjo6c3RhY2svJHtvcHRpb25zLnN0YWNrLnN0YWNrTmFtZX0vTW9ja2VkT3V0YCxcbiAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgb3V0cHV0czogeyBTdGFja05hbWU6IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lIH0sXG4gICAgICBzdGFja0FydGlmYWN0OiBvcHRpb25zLnN0YWNrLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRDdXJyZW50VGVtcGxhdGUoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBzd2l0Y2ggKHN0YWNrLnN0YWNrTmFtZSkge1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBOb3QgYW4gZXhwZWN0ZWQgbW9jayBzdGFjazogJHtzdGFjay5zdGFja05hbWV9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
775
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLHNDQUFzQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0IsS0FBSyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDLENBQUMsQ0FBQztBQUNKLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxXQUFXO1FBQ2IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELGlFQUFpRTtRQUNqRSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCwrRUFBK0U7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8saUJBQWlCLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7Q0FDRixDQUFDO0FBRUYsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QyxvREFBb0Q7QUFDcEQsc0ZBQXNHO0FBR3RHLG9EQUFxRDtBQUNyRCxzQ0FBOEM7QUFDOUMsc0NBQXNDO0FBQ3RDLGlDQUFrRjtBQUVsRixJQUFJLGVBQW9DLENBQUM7QUFDekMsSUFBSSxZQUF1QyxDQUFDO0FBQzVDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFFckIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkQsNENBQTRDO0lBQzVDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTNELFlBQVksR0FBRyx1QkFBZ0IsQ0FBQyx3QkFBWSxDQUFDLENBQUM7SUFDOUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFTLENBQUMsQ0FBQztJQUV6RixlQUFlLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztRQUN4QyxNQUFNLEVBQUU7WUFDTixTQUFTLENBQUMsWUFBWTtZQUN0QixTQUFTLENBQUMsWUFBWTtTQUN2QjtRQUNELGdCQUFnQixFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7YUFDakMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUVMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxtQkFBbUI7SUFDMUIsT0FBTyxJQUFJLHdCQUFVLENBQUM7UUFDcEIsZUFBZTtRQUNmLGFBQWEsRUFBRSxlQUFlLENBQUMsYUFBYTtRQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7UUFDeEMsY0FBYyxFQUFFLElBQUksa0JBQWtCLENBQUM7WUFDckMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7U0FDbEMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksUUFBYSxDQUFDO0lBQ2xCLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25DLElBQUksbUJBQXdDLENBQUM7SUFDN0MsSUFBSSxVQUE0QixDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUYsUUFBUSxHQUFHO1lBQ1QsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsdUJBQXVCO29CQUM3QixVQUFVLEVBQUU7d0JBQ1YsR0FBRyxFQUFFLE9BQU87cUJBQ2I7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFDRixtQkFBbUIsR0FBRyxJQUFJLDBCQUFtQixDQUFDO1lBQzVDLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxTQUFTLEVBQUUsY0FBYztvQkFDekIsUUFBUTtvQkFDUixVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLHdDQUF3Qzt3QkFDdkQsVUFBVSxFQUFFOzRCQUNWLEdBQUcsRUFBRSwrQ0FBK0M7NEJBQ3BELDZCQUE2QixFQUFFLENBQUM7NEJBQ2hDLGlDQUFpQyxFQUFFLHNCQUFzQjt5QkFDMUQ7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsU0FBUyxFQUFFLGNBQWM7b0JBQ3pCLFFBQVE7b0JBQ1IsVUFBVSxFQUFFO3dCQUNWLGFBQWEsRUFBRSx3Q0FBd0M7cUJBQ3hEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUM7UUFDcEUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELFdBQVc7Z0JBQ1QsT0FBTztvQkFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7aUJBQ3ZDLENBQUM7WUFDSixDQUFDO1lBQ0QsY0FBYztnQkFDWixPQUFPO29CQUNMLE1BQU0sRUFBRTt3QkFDTjs0QkFDRSxTQUFTLEVBQUUsY0FBYzs0QkFDekIsV0FBVyxFQUFFLGlCQUFpQjs0QkFDOUIsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO3lCQUN6Qjt3QkFDRDs0QkFDRSxTQUFTLEVBQUUsY0FBYzs0QkFDekIsV0FBVyxFQUFFLGlCQUFpQjs0QkFDOUIsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO3lCQUN6QjtxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JDLFFBQVE7UUFDUixJQUFJLHNCQUE4QixDQUFDO1FBQ25DLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxDQUFDLE9BQU87Z0JBQ2xCLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLE9BQU87b0JBQ0wsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxHQUFHO3FCQUNYO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLHNCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSxnQ0FBZ0M7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsaUVBQWlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakYsUUFBUTtRQUNSLElBQUksc0JBQThCLENBQUM7UUFDbkMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZLENBQUMsT0FBTztnQkFDbEIsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdEMsT0FBTztvQkFDTCxTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLEdBQUc7cUJBQ1g7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7WUFDaEMsZUFBZSxFQUFFLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtZQUNoRCxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM1QyxjQUFjLEVBQUUsSUFBSSxzREFBeUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3pDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsY0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNwRSxNQUFNLENBQUMsY0FBYyxDQUFDLGlEQUFpRCxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsMENBQTBDLENBQUM7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsc0JBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLGdDQUFnQztTQUNoRCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUseUJBQXlCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xGLFFBQVE7UUFDUixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVk7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLGNBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDcEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQztZQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSxnQ0FBZ0M7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLHlCQUF5QjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxrREFBa0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsRSxRQUFRO1FBQ1Isd0ZBQXdGO1FBQ3hGLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZGLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUMxRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1FBQ3BFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWTtnQkFDVixPQUFPLEVBQUcsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7WUFDaEMsZUFBZSxFQUFFLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtZQUNoRCxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM1QyxjQUFjLEVBQUUsSUFBSSxzREFBeUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3pDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLENBQUMsY0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNwRSxNQUFNLENBQUMsY0FBYyxDQUFDLGlEQUFpRCxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsMENBQTBDLENBQUM7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLGdDQUFnQztTQUNoRCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUseUJBQXlCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHlFQUF5RSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pGLFFBQVE7UUFDUixrQkFBa0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUM7UUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBQ0gsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZO2dCQUNWLE9BQU8sRUFBRyxDQUFDO1lBQ2IsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxjQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsMENBQTBDLENBQUM7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLGdDQUFnQztTQUNoRCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUseUJBQXlCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHFFQUFxRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JGLFFBQVE7UUFDUixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVk7Z0JBQ1YsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLGNBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDekMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsU0FBUztZQUN4QixvQkFBb0IsRUFBRSxTQUFTO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QixJQUFJLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0QsUUFBUTtRQUNSLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUMvSSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxDQUFDLGdGQUFnRixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hHLFFBQVE7WUFDUixNQUFNLGtCQUFrQixHQUFHLHVCQUFnQixDQUFDLHNEQUF5QixDQUFDLENBQUM7WUFDdkUsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUM3RCxJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsYUFBYSxFQUFFLHVCQUFnQixDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQzthQUNuRSxDQUFDLENBQUMsQ0FBQztZQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztnQkFDaEMsZUFBZTtnQkFDZixhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQWE7Z0JBQzVDLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztnQkFDeEMsY0FBYyxFQUFFLGtCQUFrQjthQUNuQyxDQUFDLENBQUM7WUFFSCxPQUFPO1lBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDeEMsZUFBZSxFQUFFLHNCQUFlLENBQUMsS0FBSztnQkFDdEMsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7WUFFSCxPQUFPO1lBQ1AsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEYsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqQyxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JFLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUdILElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxQyxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUQsUUFBUTtZQUNSLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFFdEMsT0FBTztZQUNQLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVDLFFBQVE7WUFDUixNQUFNLGdCQUFnQixHQUFHLENBQUMsaUNBQWlDLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztZQUM1RixNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUM7Z0JBQzdCLGVBQWU7Z0JBQ2YsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO2dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLGNBQWMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO29CQUNyQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO29CQUM5QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2lCQUNsQyxFQUFFLGdCQUFnQixDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUVILE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsRUFBRTtnQkFDeEQsZ0JBQWdCO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RFLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV0RSxPQUFPO1lBQ1AsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsT0FBTztnQkFDaEIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLElBQUksRUFBRSx3QkFBd0I7YUFDL0IsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RDLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRWpFLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUxRSxPQUFPO1lBQ1AsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLG9CQUFvQjtnQkFDNUIsSUFBSSxFQUFFLHVDQUF1QzthQUM5QyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckUsUUFBUTtZQUNSLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxlQUFlLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQztZQUU1QyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUU1RSxPQUFPO1lBQ1AsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLElBQUksRUFBRSw4QkFBOEI7YUFDckMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixJQUFJLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHVGQUF1RjtZQUN4RyxpREFBaUQsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzdELGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxFQUFFLFFBQVE7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxpRkFBaUYsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNsRCxZQUFZO1lBQ1osT0FBTztZQUNQLFVBQVU7WUFDVixvQkFBb0I7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxFQUFFLFFBQVE7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLElBQUksT0FBbUIsQ0FBQztRQUN4QixJQUFJLGFBQXdCLENBQUM7UUFFN0IsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDL0IsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRixNQUFNLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVoRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFO1lBQ3hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2Qsd0RBQXdEO2dCQUN4RCwwREFBMEQ7Z0JBQzFELHNCQUFzQjtnQkFDdEIscUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzVFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDM0QsTUFBTSxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNoQixxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO29CQUMxRCxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO2lCQUM5RCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7b0JBQzFELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzdELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzdELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7aUJBQzNELENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkMsT0FBTztRQUNQLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQzNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxlQUFlLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztnQkFDeEMsTUFBTSxFQUFFO29CQUNOLFNBQVMsQ0FBQyxZQUFZO29CQUN0QixTQUFTLENBQUMsWUFBWTtpQkFDdkI7Z0JBQ0QsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDakIsTUFBTSxFQUFFOzRCQUNOLEVBQUUsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFO3lCQUM5RTtxQkFDRixDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFHLEVBQUU7WUFDMUQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUcsRUFBRTtZQUM5RCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMzQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFHLEVBQUU7UUFDNUQsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7WUFDeEMsTUFBTSxFQUFFO2dCQUNOLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QixTQUFTLENBQUMsWUFBWTthQUN2QjtZQUNELGdCQUFnQixFQUFFLENBQUM7b0JBQ2pCLE1BQU0sRUFBRTt3QkFDTixFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtxQkFDL0U7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdGQUFnRixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hHLGVBQWUsR0FBRyxJQUFJLDBCQUFtQixDQUFDO1lBQ3hDLE1BQU0sRUFBRTtnQkFDTixTQUFTLENBQUMsWUFBWTtnQkFDdEIsU0FBUyxDQUFDLFlBQVk7YUFDdkI7WUFDRCxnQkFBZ0IsRUFBRSxDQUFDO29CQUNqQixNQUFNLEVBQUU7d0JBQ04sRUFBRSxVQUFVLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUU7cUJBQy9FO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xFLGVBQWUsR0FBRyxJQUFJLDBCQUFtQixDQUFDO1lBQ3hDLE1BQU0sRUFBRTtnQkFDTixTQUFTLENBQUMsWUFBWTtnQkFDdEIsU0FBUyxDQUFDLFlBQVk7YUFDdkI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0RyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTOztBQUNVLHNCQUFZLEdBQXNCO0lBQ3ZELFNBQVMsRUFBRSxjQUFjO0lBQ3pCLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN6RCxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRTtRQUNSLGVBQWUsRUFBRTtZQUNmO2dCQUNFLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsVUFBVTtnQkFDbkQsSUFBSSxFQUFFO29CQUNKLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2lCQUM3QjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFDcUIsc0JBQVksR0FBc0I7SUFDdkQsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFO0lBQ3pELEdBQUcsRUFBRSx1Q0FBdUM7SUFDNUMsUUFBUSxFQUFFO1FBQ1IsZUFBZSxFQUFFO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNuRCxJQUFJLEVBQUU7b0JBQ0osRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7aUJBQ2hDO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUNxQixzQkFBWSxHQUFzQjtJQUN2RCxTQUFTLEVBQUUsY0FBYztJQUN6QixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDekQsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ25ELElBQUksRUFBRTtvQkFDSixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtpQkFDaEM7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxXQUFXLEVBQUUsMkJBQTJCO0NBQ3pDLENBQUM7QUFDcUIsc0JBQVksR0FBc0I7SUFDdkQsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFO0lBQ3pELEdBQUcsRUFBRSx1Q0FBdUM7SUFDNUMsUUFBUSxFQUFFO1FBQ1IsZUFBZSxFQUFFO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNuRCxJQUFJLEVBQUU7b0JBQ0osRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7aUJBQ2hDO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7Q0FDNUMsQ0FBQTtBQUNzQiwrQkFBcUIsR0FBc0I7SUFDaEUsU0FBUyxFQUFFLFlBQVk7SUFDdkIsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0lBQ3ZDLFFBQVEsRUFBRTtRQUNSLFdBQVcsRUFBRTtZQUNYO2dCQUNFLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSztnQkFDOUMsSUFBSSxFQUFFLGtCQUFrQjthQUN6QjtTQUNGO0tBQ0Y7SUFDRCxXQUFXLEVBQUUseUJBQXlCO0NBQ3ZDLENBQUE7QUFHSCxNQUFNLGtCQUFtQixTQUFRLHNEQUF5QjtJQUl4RCxZQUNFLGVBQW1FLEVBQUUsRUFDckUsd0JBQW1DO1FBRW5DLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFnQixFQUFFLENBQUMsQ0FBQztRQVAxQixpQkFBWSxHQUFtQyxFQUFFLENBQUM7UUFTakUsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztxQkFDekQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLHdCQUF3QixFQUFFO1lBQzVCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsT0FBMkI7UUFDNUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNyQixRQUFRLEVBQUUsa0NBQWtDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxZQUFZO1lBQy9FLElBQUksRUFBRSxLQUFLO1lBQ1gsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQy9DLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBd0M7UUFDakUsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCO2dCQUNFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSBuZWVkIHRvIG1vY2sgdGhlIGNob2tpZGFyIGxpYnJhcnksIHVzZWQgYnkgJ2NkayB3YXRjaCdcbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoZXJPbiA9IGplc3QuZm4oKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXIgPSB7XG4gIG9uOiBtb2NrQ2hva2lkYXJXYXRjaGVyT24sXG59O1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlck9uID0ge1xuICBnZXQgcmVhZHlDYWxsYmFjaygpOiAoKSA9PiB2b2lkIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDEpO1xuICAgIC8vIFRoZSBjYWxsIHRvIHRoZSBmaXJzdCAnd2F0Y2hlci5vbigpJyBpbiB0aGUgcHJvZHVjdGlvbiBjb2RlIGlzIHRoZSBvbmUgd2UgYWN0dWFsbHkgd2FudCBoZXJlLlxuICAgIC8vIFRoaXMgaXMgYSBwcmV0dHkgZnJhZ2lsZSwgYnV0IGF0IGxlYXN0IHdpdGggdGhpcyBoZWxwZXIgY2xhc3MsXG4gICAgLy8gd2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UgaXQgb25seSBpbiBvbmUgcGxhY2UgaWYgaXQgZXZlciBicmVha3NcbiAgICBjb25zdCBmaXJzdENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1swXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3QoZmlyc3RDYWxsWzBdKS50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIGZpcnN0Q2FsbFsxXTtcbiAgfSxcblxuICBnZXQgZmlsZUV2ZW50Q2FsbGJhY2soKTogKGV2ZW50OiAnYWRkJyB8ICdhZGREaXInIHwgJ2NoYW5nZScgfCAndW5saW5rJyB8ICd1bmxpbmtEaXInLCBwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMik7XG4gICAgY29uc3Qgc2Vjb25kQ2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzFdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3Qoc2Vjb25kQ2FsbFswXSkubm90LnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gc2Vjb25kQ2FsbFsxXTtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCdjaG9raWRhcicsICgpID0+ICh7XG4gIHdhdGNoOiBtb2NrQ2hva2lkYXJXYXRjaCxcbn0pKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoID0ge1xuICBnZXQgaW5jbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaW5jbHVkZSBhcmdzIGFyZSB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIHJldHVybiBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzBdO1xuICB9LFxuXG4gIGdldCBleGNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpZ25vcmUgYXJncyBhcmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICBjb25zdCBjaG9raWRhcldhdGNoT3B0cyA9IG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMV07XG4gICAgcmV0dXJuIGNob2tpZGFyV2F0Y2hPcHRzLmlnbm9yZWQ7XG4gIH0sXG59O1xuXG5pbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IEJvb3RzdHJhcHBlciB9IGZyb20gJy4uL2xpYi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMsIERlcGxveVN0YWNrT3B0aW9ucyB9IGZyb20gJy4uL2xpYi9hcGkvY2xvdWRmb3JtYXRpb24tZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9saWIvYXBpL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL2xpYi9hcGkvdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBDZGtUb29sa2l0LCBUYWcgfSBmcm9tICcuLi9saWIvY2RrLXRvb2xraXQnO1xuaW1wb3J0IHsgUmVxdWlyZUFwcHJvdmFsIH0gZnJvbSAnLi4vbGliL2RpZmYnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uL2xpYi91dGlsJztcbmltcG9ydCB7IGluc3RhbmNlTW9ja0Zyb20sIE1vY2tDbG91ZEV4ZWN1dGFibGUsIFRlc3RTdGFja0FydGlmYWN0IH0gZnJvbSAnLi91dGlsJztcblxubGV0IGNsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbmxldCBib290c3RyYXBwZXI6IGplc3QuTW9ja2VkPEJvb3RzdHJhcHBlcj47XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG5cbiAgbW9ja0Nob2tpZGFyV2F0Y2gubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuICAvLyBvbigpIGluIGNob2tpZGFyJ3MgV2F0Y2hlciByZXR1cm5zICd0aGlzJ1xuICBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuXG4gIGJvb3RzdHJhcHBlciA9IGluc3RhbmNlTW9ja0Zyb20oQm9vdHN0cmFwcGVyKTtcbiAgYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50Lm1vY2tSZXNvbHZlZFZhbHVlKHsgbm9PcDogZmFsc2UsIG91dHB1dHM6IHt9IH0gYXMgYW55KTtcblxuICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgc3RhY2tzOiBbXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICBdLFxuICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DXSxcbiAgICB9XSxcbiAgfSk7XG5cbn0pO1xuXG5mdW5jdGlvbiBkZWZhdWx0VG9vbGtpdFNldHVwKCkge1xuICByZXR1cm4gbmV3IENka1Rvb2xraXQoe1xuICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICdUZXN0LVN0YWNrLUMnOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICB9KSxcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdyZWFkQ3VycmVudFRlbXBsYXRlJywgKCkgPT4ge1xuICBsZXQgdGVtcGxhdGU6IGFueTtcbiAgbGV0IG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKTtcbiAgbGV0IG1vY2tDbG91ZEV4ZWN1dGFibGU6IE1vY2tDbG91ZEV4ZWN1dGFibGU7XG4gIGxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xuXG4gICAgdGVtcGxhdGUgPSB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIEtleTogJ1ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICAgIGxvb2t1cFJvbGU6IHtcbiAgICAgICAgICAgICAgYXJuOiAnYmxvb3AtbG9va3VwOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICAgICAgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb246IDUsXG4gICAgICAgICAgICAgIGJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcjogJy9ib290c3RyYXAvcGFyYW1ldGVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQScsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIGdldFRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGRlc2NyaWJlU3RhY2tzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQScsXG4gICAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbG9va3VwIHJvbGUgaXMgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGxldCByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcihyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3RlZFBhcmFtZXRlck5hbWUgPSByZXF1ZXN0Lk5hbWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBWYWx1ZTogJzYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlcXVlc3RlZFBhcmFtZXRlck5hbWUhKS50b0VxdWFsKCcvYm9vdHN0cmFwL3BhcmFtZXRlcicpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBpcyBub3QgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBsZXQgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lID0gcmVxdWVzdC5OYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFBhcmFtZXRlcjoge1xuICAgICAgICAgICAgVmFsdWU6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KHJlcXVlc3RlZFBhcmFtZXRlck5hbWUhKS50b0VxdWFsKCcvYm9vdHN0cmFwL3BhcmFtZXRlcicpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXIgbm90IGZvdW5kJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgZm91bmQnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBmb3JFbnZpcm9ubWVudCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICAvLyB0aHJvdyBlcnJvciBmaXJzdCBmb3IgdGhlICdwcmVwYXJlU2RrV2l0aExvb2t1cFJvbGVGb3InIGNhbGwgYW5kIHN1Y2NlZWQgZm9yIHRoZSByZXN0XG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yJyk7IH0pXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9O30pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHsgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvbnQgbG9va3VwIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBpZiBkZWZhdWx0IGNyZWRlbnRpYWxzIGFyZSB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IGZhbHNlIH07IH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHsgfTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvIG5vdCBwcmludCB3YXJuaW5ncyBpZiBsb29rdXAgcm9sZSBub3QgcHJvdmlkZWQgaW4gc3RhY2sgYXJ0aWZhY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQSddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkubm90LnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24vKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiB1bmRlZmluZWQsXG4gICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVwbG95JywgKCkgPT4ge1xuICB0ZXN0KCdmYWlscyB3aGVuIG5vIHZhbGlkIHN0YWNrIG5hbWVzIGFyZSBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1EJ10gfSB9KSkucmVqZWN0cy50b1Rocm93KCdObyBzdGFja3MgbWF0Y2ggdGhlIG5hbWUocykgVGVzdC1TdGFjay1EJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGhvdHN3YXAgZGVwbG95bWVudCcsICgpID0+IHtcbiAgICB0ZXN0KFwicGFzc2VzIHRocm91Z2ggdGhlICdob3Rzd2FwJyBvcHRpb24gdG8gQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cy5kZXBsb3lTdGFjaygpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBtb2NrQ2ZuRGVwbG95bWVudHMgPSBpbnN0YW5jZU1vY2tGcm9tKENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMpO1xuICAgICAgbW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBub09wOiBmYWxzZSxcbiAgICAgICAgb3V0cHV0czoge30sXG4gICAgICAgIHN0YWNrQXJuOiAnc3RhY2tBcm4nLFxuICAgICAgICBzdGFja0FydGlmYWN0OiBpbnN0YW5jZU1vY2tGcm9tKGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCksXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbW9ja0NmbkRlcGxveW1lbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWFrZXMgY29ycmVjdCBDbG91ZEZvcm1hdGlvbiBjYWxscycsICgpID0+IHtcbiAgICB0ZXN0KCd3aXRob3V0IG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSB9KTtcbiAgICB9KTtcblxuXG4gICAgdGVzdCgnd2l0aCBvbmUgc3RhY2sgc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKiddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46YXdzOnNuczo6OmNmbi1ub3RpZmljYXRpb25zJywgJ2Fybjphd3M6c25zOjo6bXktY29vbC10b3BpYyddO1xuICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJywgJ1Rlc3QtU3RhY2stQiddIH0sXG4gICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICc1Njc4OScsXG4gICAgICAgIHJlZ2lvbjogJ3NvdXRoLXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vNTY3ODkvc291dGgtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmJ5IGJvb3RzdHJhcCB1c2VzIHdoYXRzIGluIHRoZSBzdGFja3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ2FwcCddLCAnc29tZXRoaW5nJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vKi9iZXJtdWRhLXRyaWFuZ2xlLTEnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib290c3RyYXAgY2FuIGJlIGludm9rZWQgd2l0aG91dCB0aGUgLS1hcHAgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG1vY2tTeW50aGVzaXplID0gamVzdC5mbigpO1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLnN5bnRoZXNpemUgPSBtb2NrU3ludGhlc2l6ZTtcblxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8xMjM0NTY3ODkwMTIvd2VzdC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICd3ZXN0LXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgICBleHBlY3QoY2xvdWRFeGVjdXRhYmxlLmhhc0FwcCkudG9FcXVhbChmYWxzZSk7XG4gICAgICBleHBlY3QobW9ja1N5bnRoZXNpemUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YXRjaCcsICgpID0+IHtcbiAgdGVzdChcImZhaWxzIHdoZW4gbm8gJ3dhdGNoJyBzZXR0aW5ncyBhcmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgdXNlIHRoZSAnd2F0Y2gnIGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgdG8gbW9uaXRvci4gXCIgK1xuICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnb2JzZXJ2ZXMgb25seSB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZXMgdGhlIG91dHB1dCBkaXIsIGRvdCBmaWxlcywgZG90IGRpcmVjdG9yaWVzLCBhbmQgbm9kZV9tb2R1bGVzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ291dHB1dCddLCAnY2RrLm91dCcpO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoW1xuICAgICAgJ2Nkay5vdXQvKionLFxuICAgICAgJyoqLy4qJyxcbiAgICAgICcqKi8uKi8qKicsXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICBdKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDYpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyMScpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1sxXSkudG9CZSgnKiovbXktZGlyMicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBmaWxlIGNoYW5nZSBldmVudHMnLCAoKSA9PiB7XG4gICAgbGV0IHRvb2xraXQ6IENka1Rvb2xraXQ7XG4gICAgbGV0IGNka0RlcGxveU1vY2s6IGplc3QuTW9jaztcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgICAgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNka0RlcGxveU1vY2sgPSBqZXN0LmZuKCk7XG4gICAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG4gICAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KFwiZG9lcyBub3QgdHJpZ2dlciBhICdkZXBsb3knIGJlZm9yZSB0aGUgJ3JlYWR5JyBldmVudCBoYXMgZmlyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiB0aGUgJ3JlYWR5JyBldmVudCBoYXMgYWxyZWFkeSBmaXJlZFwiLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIHJlYWR5IGNhbGxiYWNrIHRyaWdnZXJzIGEgZGVwbG95bWVudCBzbyBlYWNoIHRlc3RcbiAgICAgICAgLy8gdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWUgJ2Nka0RlcGxveU1vY2snIGNhbGxlZFxuICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIHRpbWUuXG4gICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImFuIGluaXRpYWwgJ2RlcGxveScgaXMgdHJpZ2dlcmVkLCB3aXRob3V0IGFueSBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJkb2VzIHRyaWdnZXIgYSAnZGVwbG95JyBmb3IgYSBmaWxlIGNoYW5nZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJ0cmlnZ2VycyBhICdkZXBsb3knIHR3aWNlIGZvciB0d28gZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYmF0Y2hlcyBmaWxlIGNoYW5nZXMgdGhhdCBoYXBwZW4gZHVyaW5nICdkZXBsb3knXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ3VubGluaycsICdteS1maWxlMycpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGU0JyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3N5bnRoJywgKCkgPT4ge1xuICB0ZXN0KCd3aXRoIG5vIHN0ZG91dCBvcHRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRVxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEnXSwgZmFsc2UsIHRydWUpKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuU1RBQ0tTX1RPX1ZBTElEQVRFID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhY2sgd2l0aCBlcnJvciBhbmQgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgICBdLFxuICAgICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogdHJ1ZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBmYWlsIGlmIGF1dG9WYWxpZGF0ZT10cnVlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2F1c2VzIHN5bnRoIHRvIHN1Y2NlZWQgaWYgYXV0b1ZhbGlkYXRlPWZhbHNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSkpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IgfSxcbiAgICAgICAgXSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnXSwgZmFsc2UsIHRydWUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciwgaXMgbm90IGZsYWdnZWQgZm9yIHZhbGlkYXRpb24gYW5kIHdhcyBub3QgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQyxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpKS5yZXNvbHZlcy50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5jbGFzcyBNb2NrU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQTogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1BJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1BJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0I6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQicsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQicgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQic6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19DOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUMnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUMnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BL1Rlc3QtU3RhY2stQycsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19EOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUQnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUQnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUQnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRlcGVuZHM6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZV0sXG4gIH1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX1dJVEhfRVJST1I6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ3dpdGhlcnJvcnMnLFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIHRlbXBsYXRlOiB7IHJlc291cmNlOiAnZXJyb3JyZXNvdXJjZScgfSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9yZXNvdXJjZSc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuRVJST1IsXG4gICAgICAgICAgZGF0YTogJ3RoaXMgaXMgYW4gZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnLFxuICB9XG59XG5cbmNsYXNzIEZha2VDbG91ZEZvcm1hdGlvbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiBUYWdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9LFxuICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdLFxuICApIHtcbiAgICBzdXBlcih7IHNka1Byb3ZpZGVyOiB1bmRlZmluZWQgYXMgYW55IH0pO1xuXG4gICAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCB0YWdzXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZFRhZ3MpKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkVGFnc1tzdGFja05hbWVdID1cbiAgICAgICAgT2JqZWN0LmVudHJpZXModGFncykubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpXG4gICAgICAgICAgLnNvcnQoKGwsIHIpID0+IGwuS2V5LmxvY2FsZUNvbXBhcmUoci5LZXkpKTtcbiAgICB9XG4gICAgaWYgKGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucykge1xuICAgICAgdGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMgPSBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBleHBlY3QoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lLCBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdKVxuICAgICAgLnRvQ29udGFpbihvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG4gICAgZXhwZWN0KG9wdGlvbnMudGFncykudG9FcXVhbCh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChvcHRpb25zLm5vdGlmaWNhdGlvbkFybnMpLnRvRXF1YWwodGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc3RhY2tBcm46IGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOjo6c3RhY2svJHtvcHRpb25zLnN0YWNrLnN0YWNrTmFtZX0vTW9ja2VkT3V0YCxcbiAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgb3V0cHV0czogeyBTdGFja05hbWU6IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lIH0sXG4gICAgICBzdGFja0FydGlmYWN0OiBvcHRpb25zLnN0YWNrLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRDdXJyZW50VGVtcGxhdGUoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBzd2l0Y2ggKHN0YWNrLnN0YWNrTmFtZSkge1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBOb3QgYW4gZXhwZWN0ZWQgbW9jayBzdGFjazogJHtzdGFjay5zdGFja05hbWV9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -6,6 +6,7 @@ const settings_1 = require("../../lib/settings");
|
|
|
6
6
|
const mock_sdk_1 = require("../util/mock-sdk");
|
|
7
7
|
const mockSDK = new mock_sdk_1.MockSdkProvider();
|
|
8
8
|
const TEST_PROVIDER = 'testprovider';
|
|
9
|
+
const PLUGIN_PROVIDER = 'plugin';
|
|
9
10
|
test('errors are reported into the context value', async () => {
|
|
10
11
|
// GIVEN
|
|
11
12
|
contextproviders.registerContextProvider(TEST_PROVIDER, {
|
|
@@ -70,7 +71,7 @@ test('errors are marked transient', async () => {
|
|
|
70
71
|
test('context provider can be registered using PluginHost', async () => {
|
|
71
72
|
let called = false;
|
|
72
73
|
// GIVEN
|
|
73
|
-
plugin_1.PluginHost.instance.registerContextProviderAlpha(
|
|
74
|
+
plugin_1.PluginHost.instance.registerContextProviderAlpha('prov', {
|
|
74
75
|
async getValue(_) {
|
|
75
76
|
called = true;
|
|
76
77
|
return '';
|
|
@@ -79,14 +80,14 @@ test('context provider can be registered using PluginHost', async () => {
|
|
|
79
80
|
const context = new settings_1.Context();
|
|
80
81
|
// WHEN
|
|
81
82
|
await contextproviders.provideContextValues([
|
|
82
|
-
{ key: 'asdf', props: { account: '1234', region: 'us-east-1' }, provider:
|
|
83
|
+
{ key: 'asdf', props: { account: '1234', region: 'us-east-1', pluginName: 'prov' }, provider: PLUGIN_PROVIDER },
|
|
83
84
|
], context, mockSDK);
|
|
84
85
|
// THEN - error is marked transient
|
|
85
86
|
expect(called).toEqual(true);
|
|
86
87
|
});
|
|
87
|
-
test('context provider can be called without account/region', async () => {
|
|
88
|
+
test('plugin context provider can be called without account/region', async () => {
|
|
88
89
|
// GIVEN
|
|
89
|
-
plugin_1.PluginHost.instance.registerContextProviderAlpha(
|
|
90
|
+
plugin_1.PluginHost.instance.registerContextProviderAlpha('prov', {
|
|
90
91
|
async getValue(_) {
|
|
91
92
|
return 'yay';
|
|
92
93
|
},
|
|
@@ -94,9 +95,9 @@ test('context provider can be called without account/region', async () => {
|
|
|
94
95
|
const context = new settings_1.Context();
|
|
95
96
|
// WHEN
|
|
96
97
|
await contextproviders.provideContextValues([
|
|
97
|
-
{ key: 'asdf', props: { banana: 'yellow' }, provider:
|
|
98
|
+
{ key: 'asdf', props: { banana: 'yellow', pluginName: 'prov' }, provider: PLUGIN_PROVIDER },
|
|
98
99
|
], context, mockSDK);
|
|
99
100
|
// THEN - error is marked transient
|
|
100
101
|
expect(context.get('asdf')).toEqual('yay');
|
|
101
102
|
});
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2VuZXJpYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQThDO0FBQzlDLGdFQUFnRTtBQUNoRSxpREFBb0U7QUFDcEUsK0NBQW1EO0FBRW5ELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQWUsRUFBRSxDQUFDO0FBRXRDLE1BQU0sYUFBYSxHQUFRLGNBQWMsQ0FBQztBQUMxQyxNQUFNLGVBQWUsR0FBUSxRQUFRLENBQUM7QUFFdEMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzVELFFBQVE7SUFDUixnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUU7UUFDdEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUF1QjtZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO0lBRTlCLE9BQU87SUFDUCxNQUFNLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQzFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO0tBQzFGLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJCLGlDQUFpQztJQUVqQyxrRUFBa0U7SUFDbEUseUJBQXlCO0lBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzdDLFFBQVE7SUFD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QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw4REFBOEQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM5RSxRQUFRO0lBQ1IsbUJBQVUsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFO1FBQ3ZELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBdUI7WUFDcEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7SUFFOUIsT0FBTztJQUNQLE1BQU0sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7S0FDbkcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckIsbUNBQW1DO0lBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGx1Z2luSG9zdCB9IGZyb20gJy4uLy4uL2xpYi9wbHVnaW4nO1xuaW1wb3J0ICogYXMgY29udGV4dHByb3ZpZGVycyBmcm9tICcuLi8uLi9saWIvY29udGV4dC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgQ29udGV4dCwgVFJBTlNJRU5UX0NPTlRFWFRfS0VZIH0gZnJvbSAnLi4vLi4vbGliL3NldHRpbmdzJztcbmltcG9ydCB7IE1vY2tTZGtQcm92aWRlciB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5jb25zdCBtb2NrU0RLID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuXG5jb25zdCBURVNUX1BST1ZJREVSOiBhbnkgPSAndGVzdHByb3ZpZGVyJztcbmNvbnN0IFBMVUdJTl9QUk9WSURFUjogYW55ID0gJ3BsdWdpbic7XG5cbnRlc3QoJ2Vycm9ycyBhcmUgcmVwb3J0ZWQgaW50byB0aGUgY29udGV4dCB2YWx1ZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29udGV4dHByb3ZpZGVycy5yZWdpc3RlckNvbnRleHRQcm92aWRlcihURVNUX1BST1ZJREVSLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHsga2V5OiAnYXNkZicsIHByb3BzOiB7IGFjY291bnQ6ICcxMjM0JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LCBwcm92aWRlcjogVEVTVF9QUk9WSURFUiB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gZXJyb3IgaXMgbm93IGluIGNvbnRleHRcblxuICAvLyBOT1RFOiBlcnJvciBrZXkgaXMgaW5saW5lZCBoZXJlIGJlY2F1c2UgaXQncyBwYXJ0IG9mIHRoZSBDWC1BUElcbiAgLy8gY29tcGF0aWJpbGl0eSBzdXJmYWNlLlxuICBleHBlY3QoY29udGV4dC5nZXQoJ2FzZGYnKS4kcHJvdmlkZXJFcnJvcikudG9CZSgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbn0pO1xuXG50ZXN0KCdsb29rdXAgcm9sZSBBUk4gaXMgcmVzb2x2ZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnRleHRwcm92aWRlcnMucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoVEVTVF9QUk9WSURFUiwge1xuICAgIGFzeW5jIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGlmIChhcmdzLmxvb2t1cFJvbGVBcm4gPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGxvb2t1cFJvbGVBcm4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3MubG9va3VwUm9sZUFybi5pbmNsdWRlcygnJHtBV1M6OlBhcnRpdGlvbn0nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnRpdGlvbiBub3QgcmVzb2x2ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdzb21lIHJlc29sdmVkIHZhbHVlJztcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7XG4gICAgICBrZXk6ICdhc2RmJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0JyxcbiAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgbG9va3VwUm9sZUFybjogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTppYW06OjI4MDYxOTk0Nzc5MTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtMjgwNjE5OTQ3NzkxLXVzLWVhc3QtMScsXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIsXG4gICAgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIFZhbHVlIGdldHMgcmVzb2x2ZWRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJykpLnRvRXF1YWwoJ3NvbWUgcmVzb2x2ZWQgdmFsdWUnKTtcbn0pO1xuXG50ZXN0KCdlcnJvcnMgYXJlIG1hcmtlZCB0cmFuc2llbnQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnRleHRwcm92aWRlcnMucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoVEVTVF9QUk9WSURFUiwge1xuICAgIGFzeW5jIGdldFZhbHVlKF86IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSwgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJylbVFJBTlNJRU5UX0NPTlRFWFRfS0VZXSkudG9CZVRydXRoeSgpO1xufSk7XG5cbnRlc3QoJ2NvbnRleHQgcHJvdmlkZXIgY2FuIGJlIHJlZ2lzdGVyZWQgdXNpbmcgUGx1Z2luSG9zdCcsIGFzeW5jICgpID0+IHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIEdJVkVOXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYSgncHJvdicsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShfOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHsga2V5OiAnYXNkZicsIHByb3BzOiB7IGFjY291bnQ6ICcxMjM0JywgcmVnaW9uOiAndXMtZWFzdC0xJywgcGx1Z2luTmFtZTogJ3Byb3YnIH0sIHByb3ZpZGVyOiBQTFVHSU5fUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNhbGxlZCkudG9FcXVhbCh0cnVlKTtcbn0pO1xuXG50ZXN0KCdwbHVnaW4gY29udGV4dCBwcm92aWRlciBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYWNjb3VudC9yZWdpb24nLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYSgncHJvdicsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShfOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICByZXR1cm4gJ3lheSc7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAgeyBrZXk6ICdhc2RmJywgcHJvcHM6IHsgYmFuYW5hOiAneWVsbG93JywgcGx1Z2luTmFtZTogJ3Byb3YnIH0gYXMgYW55LCBwcm92aWRlcjogUExVR0lOX1BST1ZJREVSIH0sXG4gIF0sIGNvbnRleHQsIG1vY2tTREspO1xuXG4gIC8vIFRIRU4gLSBlcnJvciBpcyBtYXJrZWQgdHJhbnNpZW50XG4gIGV4cGVjdChjb250ZXh0LmdldCgnYXNkZicpKS50b0VxdWFsKCd5YXknKTtcbn0pO1xuIl19
|