vitest 0.5.4 → 0.5.5
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/dist/chunk-api-setup.bfd4a66d.js +4444 -0
- package/dist/chunk-constants.a1a50d89.js +32 -0
- package/dist/chunk-defaults.1725002f.js +1833 -0
- package/dist/chunk-install-pkg.7ce2052a.js +1643 -0
- package/dist/chunk-integrations-globals.9bda85f1.js +24 -0
- package/dist/chunk-magic-string.6c8f4a10.js +1361 -0
- package/dist/chunk-runtime-chain.d86ab074.js +5946 -0
- package/dist/chunk-runtime-hooks.aef17670.js +42 -0
- package/dist/chunk-runtime-rpc.1832c38c.js +6 -0
- package/dist/chunk-utils-base.39767f3e.js +225 -0
- package/dist/chunk-utils-source-map.be2b14e2.js +3407 -0
- package/dist/chunk-vite-node-externalize.70d7fd52.js +10515 -0
- package/dist/chunk-vite-node-utils.d38851ea.js +9451 -0
- package/dist/cli.js +12 -14
- package/dist/entry.js +22 -15
- package/dist/index.js +5 -5
- package/dist/node.js +11 -11
- package/dist/{_commonjsHelpers-c9e3b764.js → vendor-_commonjsHelpers.91d4f591.js} +1 -1
- package/dist/vendor-index.665a6ba4.js +5708 -0
- package/dist/vendor-index.76be1f4d.js +187 -0
- package/dist/vendor-index.f6809970.js +1111 -0
- package/dist/worker.js +5 -5
- package/package.json +3 -3
- package/dist/cli-api-682b9694.js +0 -10512
- package/dist/client-4904f549.js +0 -9451
- package/dist/constants-c746dc5b.js +0 -32
- package/dist/diff-d3ddd21a.js +0 -1833
- package/dist/globals-75ad6839.js +0 -24
- package/dist/index-013ecdfe.js +0 -225
- package/dist/index-072c45fd.js +0 -5708
- package/dist/index-0996637f.js +0 -1111
- package/dist/index-0bdb518d.js +0 -42
- package/dist/index-1488b423.js +0 -187
- package/dist/index-1945a7c3.js +0 -1643
- package/dist/magic-string.es-94000aea.js +0 -1361
- package/dist/rpc-377d999b.js +0 -6
- package/dist/setup-047a81dd.js +0 -4444
- package/dist/source-map-b4f7fd10.js +0 -3407
- package/dist/vi-a4ac529d.js +0 -5946
package/dist/entry.js
CHANGED
|
@@ -3,13 +3,13 @@ import { Console } from 'console';
|
|
|
3
3
|
import { Writable } from 'stream';
|
|
4
4
|
import { importModule } from 'local-pkg';
|
|
5
5
|
import chai$1, { expect, util } from 'chai';
|
|
6
|
-
import { a as commonjsRequire, c as commonjsGlobal } from './_commonjsHelpers
|
|
7
|
-
import { c as index, r as relative } from './index
|
|
8
|
-
import { r as rpc } from './rpc
|
|
9
|
-
import { i as isObject, k as getCallLastIndex, s as slash, p as getNames, c, t as toArray, q as partitionSuiteChildren, r as hasTests, h as hasFailed, g as getFullName } from './
|
|
10
|
-
import { f as format_1, h as getSerializers, j as equals, k as iterableEquality, l as subsetEquality, p as plugins_1, b as getState, m as isA, J as JestChaiExpect, n as clearContext, o as defaultSuite, q as setHooks, r as getHooks, u as context, s as setState, x as getFn, e as vi } from './
|
|
11
|
-
import { g as getOriginalPos, a as posToNumber, n as numberToPos, l as lineSplitRE, p as parseStacktrace } from './source-map
|
|
12
|
-
import { u as unifiedDiff, t as takeCoverage } from './
|
|
6
|
+
import { a as commonjsRequire, c as commonjsGlobal } from './vendor-_commonjsHelpers.91d4f591.js';
|
|
7
|
+
import { c as index, r as relative } from './vendor-index.76be1f4d.js';
|
|
8
|
+
import { r as rpc } from './chunk-runtime-rpc.1832c38c.js';
|
|
9
|
+
import { i as isObject, k as getCallLastIndex, s as slash, p as getNames, c, t as toArray, q as partitionSuiteChildren, r as hasTests, h as hasFailed, g as getFullName } from './chunk-utils-base.39767f3e.js';
|
|
10
|
+
import { f as format_1, h as getSerializers, j as equals, k as iterableEquality, l as subsetEquality, p as plugins_1, b as getState, m as isA, J as JestChaiExpect, n as clearContext, o as defaultSuite, q as setHooks, r as getHooks, u as context, s as setState, x as getFn, e as vi } from './chunk-runtime-chain.d86ab074.js';
|
|
11
|
+
import { g as getOriginalPos, a as posToNumber, n as numberToPos, l as lineSplitRE, p as parseStacktrace } from './chunk-utils-source-map.be2b14e2.js';
|
|
12
|
+
import { u as unifiedDiff, t as takeCoverage } from './chunk-defaults.1725002f.js';
|
|
13
13
|
import { performance as performance$1 } from 'perf_hooks';
|
|
14
14
|
import { createHash } from 'crypto';
|
|
15
15
|
import { format } from 'util';
|
|
@@ -661,7 +661,7 @@ function deepMergeSnapshot(target, source) {
|
|
|
661
661
|
}
|
|
662
662
|
|
|
663
663
|
async function saveInlineSnapshots(snapshots) {
|
|
664
|
-
const MagicString = (await import('./magic-string.
|
|
664
|
+
const MagicString = (await import('./chunk-magic-string.6c8f4a10.js')).default;
|
|
665
665
|
const files = new Set(snapshots.map((i) => i.file));
|
|
666
666
|
await Promise.all(Array.from(files).map(async (file) => {
|
|
667
667
|
const map = await rpc().getSourceMap(file);
|
|
@@ -1448,7 +1448,7 @@ async function setupGlobalEnv(config) {
|
|
|
1448
1448
|
setupConsoleLogSpy();
|
|
1449
1449
|
await setupChai();
|
|
1450
1450
|
if (config.globals)
|
|
1451
|
-
(await import('./globals
|
|
1451
|
+
(await import('./chunk-integrations-globals.9bda85f1.js')).registerApiGlobally();
|
|
1452
1452
|
}
|
|
1453
1453
|
function setupDefines(defines) {
|
|
1454
1454
|
for (const key in defines)
|
|
@@ -1634,7 +1634,7 @@ function interpretTaskModes(suite, namePattern, onlyMode, parentIsOnly, allowOnl
|
|
|
1634
1634
|
}
|
|
1635
1635
|
});
|
|
1636
1636
|
if (suite.mode === "run") {
|
|
1637
|
-
if (suite.tasks.every((i) => i.mode !== "run"))
|
|
1637
|
+
if (suite.tasks.length && suite.tasks.every((i) => i.mode !== "run"))
|
|
1638
1638
|
suite.mode = "skip";
|
|
1639
1639
|
}
|
|
1640
1640
|
}
|
|
@@ -1831,14 +1831,21 @@ async function runSuite(suite) {
|
|
|
1831
1831
|
async function runSuiteChild(c) {
|
|
1832
1832
|
return c.type === "test" ? runTest(c) : runSuite(c);
|
|
1833
1833
|
}
|
|
1834
|
-
async function
|
|
1835
|
-
for (const
|
|
1836
|
-
|
|
1834
|
+
async function runFiles(files, config) {
|
|
1835
|
+
for (const file of files) {
|
|
1836
|
+
if (!file.tasks.length && !config.passWithNoTests) {
|
|
1837
|
+
file.result = {
|
|
1838
|
+
state: "fail",
|
|
1839
|
+
error: new Error(`No test suite found in file ${file.filepath}`)
|
|
1840
|
+
};
|
|
1841
|
+
}
|
|
1842
|
+
await runSuite(file);
|
|
1843
|
+
}
|
|
1837
1844
|
}
|
|
1838
1845
|
async function startTests(paths, config) {
|
|
1839
1846
|
const files = await collectTests(paths, config);
|
|
1840
1847
|
rpc().onCollected(files);
|
|
1841
|
-
await
|
|
1848
|
+
await runFiles(files, config);
|
|
1842
1849
|
takeCoverage();
|
|
1843
1850
|
await getSnapshotClient().saveSnap();
|
|
1844
1851
|
await sendTasksUpdate();
|
|
@@ -1870,4 +1877,4 @@ async function run(files, config) {
|
|
|
1870
1877
|
}
|
|
1871
1878
|
|
|
1872
1879
|
export { run };
|
|
1873
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L25vZGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS1rZXlzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9lbnYvdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L2hhcHB5LWRvbS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L2luZGV4LnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWktc3Vic2V0QDEuNi4wL25vZGVfbW9kdWxlcy9jaGFpLXN1YnNldC9saWIvY2hhaS1zdWJzZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vbmF0dXJhbC1jb21wYXJlQDEuNC4wL25vZGVfbW9kdWxlcy9uYXR1cmFsLWNvbXBhcmUvaW5kZXguanMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvaW5saW5lU25hcHNob3QudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvc3RhdGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L2NsaWVudC50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvc25hcHNob3QvY2hhaS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LW1hdGNoZXItdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1leHRlbmQudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL3NldHVwLnRzIiwiLi4vc3JjL3J1bnRpbWUvc2V0dXAudHMiLCIuLi9zcmMvcnVudGltZS9lcnJvci50cyIsIi4uL3NyYy9ydW50aW1lL2NvbGxlY3QudHMiLCIuLi9zcmMvcnVudGltZS9ydW4udHMiLCIuLi9zcmMvcnVudGltZS9lbnRyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IDxFbnZpcm9ubWVudD4oe1xuICBuYW1lOiAnbm9kZScsXG4gIGFzeW5jIHNldHVwKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bigpIHtcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsIi8vIFNFRSBodHRwczovL2dpdGh1Yi5jb20vanNkb20vanNkb20vYmxvYi9tYXN0ZXIvbGliL2pzZG9tL2xpdmluZy9pbnRlcmZhY2VzLmpzXG5cbmNvbnN0IExJVklOR19LRVlTID0gW1xuICAnRE9NRXhjZXB0aW9uJyxcbiAgJ1VSTCcsXG4gICdVUkxTZWFyY2hQYXJhbXMnLFxuICAnRXZlbnRUYXJnZXQnLFxuICAnTmFtZWROb2RlTWFwJyxcbiAgJ05vZGUnLFxuICAnQXR0cicsXG4gICdFbGVtZW50JyxcbiAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAnRE9NSW1wbGVtZW50YXRpb24nLFxuICAnRG9jdW1lbnQnLFxuICAnWE1MRG9jdW1lbnQnLFxuICAnQ2hhcmFjdGVyRGF0YScsXG4gICdUZXh0JyxcbiAgJ0NEQVRBU2VjdGlvbicsXG4gICdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nLFxuICAnQ29tbWVudCcsXG4gICdEb2N1bWVudFR5cGUnLFxuICAnTm9kZUxpc3QnLFxuICAnSFRNTENvbGxlY3Rpb24nLFxuICAnSFRNTE9wdGlvbnNDb2xsZWN0aW9uJyxcbiAgJ0RPTVN0cmluZ01hcCcsXG4gICdET01Ub2tlbkxpc3QnLFxuICAnU3R5bGVTaGVldExpc3QnLFxuICAnSFRNTEVsZW1lbnQnLFxuICAnSFRNTEhlYWRFbGVtZW50JyxcbiAgJ0hUTUxUaXRsZUVsZW1lbnQnLFxuICAnSFRNTEJhc2VFbGVtZW50JyxcbiAgJ0hUTUxMaW5rRWxlbWVudCcsXG4gICdIVE1MTWV0YUVsZW1lbnQnLFxuICAnSFRNTFN0eWxlRWxlbWVudCcsXG4gICdIVE1MQm9keUVsZW1lbnQnLFxuICAnSFRNTEhlYWRpbmdFbGVtZW50JyxcbiAgJ0hUTUxQYXJhZ3JhcGhFbGVtZW50JyxcbiAgJ0hUTUxIUkVsZW1lbnQnLFxuICAnSFRNTFByZUVsZW1lbnQnLFxuICAnSFRNTFVMaXN0RWxlbWVudCcsXG4gICdIVE1MT0xpc3RFbGVtZW50JyxcbiAgJ0hUTUxMSUVsZW1lbnQnLFxuICAnSFRNTE1lbnVFbGVtZW50JyxcbiAgJ0hUTUxETGlzdEVsZW1lbnQnLFxuICAnSFRNTERpdkVsZW1lbnQnLFxuICAnSFRNTEFuY2hvckVsZW1lbnQnLFxuICAnSFRNTEFyZWFFbGVtZW50JyxcbiAgJ0hUTUxCUkVsZW1lbnQnLFxuICAnSFRNTEJ1dHRvbkVsZW1lbnQnLFxuICAnSFRNTENhbnZhc0VsZW1lbnQnLFxuICAnSFRNTERhdGFFbGVtZW50JyxcbiAgJ0hUTUxEYXRhTGlzdEVsZW1lbnQnLFxuICAnSFRNTERldGFpbHNFbGVtZW50JyxcbiAgJ0hUTUxEaWFsb2dFbGVtZW50JyxcbiAgJ0hUTUxEaXJlY3RvcnlFbGVtZW50JyxcbiAgJ0hUTUxGaWVsZFNldEVsZW1lbnQnLFxuICAnSFRNTEZvbnRFbGVtZW50JyxcbiAgJ0hUTUxGb3JtRWxlbWVudCcsXG4gICdIVE1MSHRtbEVsZW1lbnQnLFxuICAnSFRNTEltYWdlRWxlbWVudCcsXG4gICdIVE1MSW5wdXRFbGVtZW50JyxcbiAgJ0hUTUxMYWJlbEVsZW1lbnQnLFxuICAnSFRNTExlZ2VuZEVsZW1lbnQnLFxuICAnSFRNTE1hcEVsZW1lbnQnLFxuICAnSFRNTE1hcnF1ZWVFbGVtZW50JyxcbiAgJ0hUTUxNZWRpYUVsZW1lbnQnLFxuICAnSFRNTE1ldGVyRWxlbWVudCcsXG4gICdIVE1MTW9kRWxlbWVudCcsXG4gICdIVE1MT3B0R3JvdXBFbGVtZW50JyxcbiAgJ0hUTUxPcHRpb25FbGVtZW50JyxcbiAgJ0hUTUxPdXRwdXRFbGVtZW50JyxcbiAgJ0hUTUxQaWN0dXJlRWxlbWVudCcsXG4gICdIVE1MUHJvZ3Jlc3NFbGVtZW50JyxcbiAgJ0hUTUxRdW90ZUVsZW1lbnQnLFxuICAnSFRNTFNjcmlwdEVsZW1lbnQnLFxuICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAnSFRNTFNsb3RFbGVtZW50JyxcbiAgJ0hUTUxTb3VyY2VFbGVtZW50JyxcbiAgJ0hUTUxTcGFuRWxlbWVudCcsXG4gICdIVE1MVGFibGVDYXB0aW9uRWxlbWVudCcsXG4gICdIVE1MVGFibGVDZWxsRWxlbWVudCcsXG4gICdIVE1MVGFibGVDb2xFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZUVsZW1lbnQnLFxuICAnSFRNTFRpbWVFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZVJvd0VsZW1lbnQnLFxuICAnSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQnLFxuICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgJ0hUTUxVbmtub3duRWxlbWVudCcsXG4gICdIVE1MRnJhbWVFbGVtZW50JyxcbiAgJ0hUTUxGcmFtZVNldEVsZW1lbnQnLFxuICAnSFRNTElGcmFtZUVsZW1lbnQnLFxuICAnSFRNTEVtYmVkRWxlbWVudCcsXG4gICdIVE1MT2JqZWN0RWxlbWVudCcsXG4gICdIVE1MUGFyYW1FbGVtZW50JyxcbiAgJ0hUTUxWaWRlb0VsZW1lbnQnLFxuICAnSFRNTEF1ZGlvRWxlbWVudCcsXG4gICdIVE1MVHJhY2tFbGVtZW50JyxcbiAgJ1NWR0VsZW1lbnQnLFxuICAnU1ZHR3JhcGhpY3NFbGVtZW50JyxcbiAgJ1NWR1NWR0VsZW1lbnQnLFxuICAnU1ZHVGl0bGVFbGVtZW50JyxcbiAgJ1NWR0FuaW1hdGVkU3RyaW5nJyxcbiAgJ1NWR051bWJlcicsXG4gICdTVkdTdHJpbmdMaXN0JyxcbiAgJ0V2ZW50JyxcbiAgJ0Nsb3NlRXZlbnQnLFxuICAnQ3VzdG9tRXZlbnQnLFxuICAnTWVzc2FnZUV2ZW50JyxcbiAgJ0Vycm9yRXZlbnQnLFxuICAnSGFzaENoYW5nZUV2ZW50JyxcbiAgJ1BvcFN0YXRlRXZlbnQnLFxuICAnU3RvcmFnZUV2ZW50JyxcbiAgJ1Byb2dyZXNzRXZlbnQnLFxuICAnUGFnZVRyYW5zaXRpb25FdmVudCcsXG4gICdVSUV2ZW50JyxcbiAgJ0ZvY3VzRXZlbnQnLFxuICAnSW5wdXRFdmVudCcsXG4gICdNb3VzZUV2ZW50JyxcbiAgJ0tleWJvYXJkRXZlbnQnLFxuICAnVG91Y2hFdmVudCcsXG4gICdDb21wb3NpdGlvbkV2ZW50JyxcbiAgJ1doZWVsRXZlbnQnLFxuICAnQmFyUHJvcCcsXG4gICdFeHRlcm5hbCcsXG4gICdMb2NhdGlvbicsXG4gICdIaXN0b3J5JyxcbiAgJ1NjcmVlbicsXG4gICdQZXJmb3JtYW5jZScsXG4gICdOYXZpZ2F0b3InLFxuICAnUGx1Z2luQXJyYXknLFxuICAnTWltZVR5cGVBcnJheScsXG4gICdQbHVnaW4nLFxuICAnTWltZVR5cGUnLFxuICAnRmlsZVJlYWRlcicsXG4gICdCbG9iJyxcbiAgJ0ZpbGUnLFxuICAnRmlsZUxpc3QnLFxuICAnVmFsaWRpdHlTdGF0ZScsXG4gICdET01QYXJzZXInLFxuICAnWE1MU2VyaWFsaXplcicsXG4gICdGb3JtRGF0YScsXG4gICdYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0JyxcbiAgJ1hNTEh0dHBSZXF1ZXN0VXBsb2FkJyxcbiAgJ1hNTEh0dHBSZXF1ZXN0JyxcbiAgJ1dlYlNvY2tldCcsXG4gICdOb2RlRmlsdGVyJyxcbiAgJ05vZGVJdGVyYXRvcicsXG4gICdUcmVlV2Fsa2VyJyxcbiAgJ0Fic3RyYWN0UmFuZ2UnLFxuICAnUmFuZ2UnLFxuICAnU3RhdGljUmFuZ2UnLFxuICAnU2VsZWN0aW9uJyxcbiAgJ1N0b3JhZ2UnLFxuICAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ1NoYWRvd1Jvb3QnLFxuICAnTXV0YXRpb25PYnNlcnZlcicsXG4gICdNdXRhdGlvblJlY29yZCcsXG4gICdIZWFkZXJzJyxcbiAgJ0Fib3J0Q29udHJvbGxlcicsXG4gICdBYm9ydFNpZ25hbCcsXG5cbiAgLy8gbm90IHNwZWNpZmllZCBpbiBkb2NzLCBidXQgaXMgYXZhaWxhYmxlXG4gICdJbWFnZScsXG5dXG5cbmNvbnN0IE9USEVSX0tFWVMgPSBbXG4gICdhZGRFdmVudExpc3RlbmVyJyxcbiAgJ2FsZXJ0JyxcbiAgJ2F0b2InLFxuICAnYmx1cicsXG4gICdidG9hJyxcbiAgLyogJ2NsZWFySW50ZXJ2YWwnLCAqL1xuICAvKiAnY2xlYXJUaW1lb3V0JywgKi9cbiAgJ2Nsb3NlJyxcbiAgJ2NvbmZpcm0nLFxuICAvKiAnY29uc29sZScsICovXG4gICdjcmVhdGVQb3B1cCcsXG4gICdkaXNwYXRjaEV2ZW50JyxcbiAgJ2RvY3VtZW50JyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZyYW1lcycsXG4gICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgJ2hpc3RvcnknLFxuICAnaW5uZXJIZWlnaHQnLFxuICAnaW5uZXJXaWR0aCcsXG4gICdsZW5ndGgnLFxuICAnbG9jYXRpb24nLFxuICAnbWF0Y2hNZWRpYScsXG4gICdtb3ZlQnknLFxuICAnbW92ZVRvJyxcbiAgJ25hbWUnLFxuICAnbmF2aWdhdG9yJyxcbiAgJ29wZW4nLFxuICAnb3V0ZXJIZWlnaHQnLFxuICAnb3V0ZXJXaWR0aCcsXG4gICdwYWdlWE9mZnNldCcsXG4gICdwYWdlWU9mZnNldCcsXG4gICdwYXJlbnQnLFxuICAncG9zdE1lc3NhZ2UnLFxuICAncHJpbnQnLFxuICAncHJvbXB0JyxcbiAgJ3JlbW92ZUV2ZW50TGlzdGVuZXInLFxuICAncmVzaXplQnknLFxuICAncmVzaXplVG8nLFxuICAnc2NyZWVuJyxcbiAgJ3NjcmVlbkxlZnQnLFxuICAnc2NyZWVuVG9wJyxcbiAgJ3NjcmVlblgnLFxuICAnc2NyZWVuWScsXG4gICdzY3JvbGwnLFxuICAnc2Nyb2xsQnknLFxuICAnc2Nyb2xsTGVmdCcsXG4gICdzY3JvbGxUbycsXG4gICdzY3JvbGxUb3AnLFxuICAnc2Nyb2xsWCcsXG4gICdzY3JvbGxZJyxcbiAgJ3NlbGYnLFxuICAvKiAnc2V0SW50ZXJ2YWwnLCAqL1xuICAvKiAnc2V0VGltZW91dCcsICovXG4gICdzdG9wJyxcbiAgLyogJ3RvU3RyaW5nJywgKi9cbiAgJ3RvcCcsXG4gICd3aW5kb3cnLFxuXVxuXG5leHBvcnQgY29uc3QgS0VZUyA9IExJVklOR19LRVlTLmNvbmNhdChPVEhFUl9LRVlTKVxuIiwiaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuY29uc3QgYWxsb3dSZXdyaXRlID0gbmV3IFNldChbXG4gICdFdmVudCcsXG5dKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93S2V5cyhnbG9iYWw6IGFueSwgd2luOiBhbnkpIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoS0VZUy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luKSlcbiAgICAuZmlsdGVyKChrKSA9PiB7XG4gICAgICBpZiAoay5zdGFydHNXaXRoKCdfJykpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKGsgaW4gZ2xvYmFsKVxuICAgICAgICByZXR1cm4gYWxsb3dSZXdyaXRlLmhhcyhrKVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pKVxuXG4gIHJldHVybiBrZXlzXG59XG4iLCJpbXBvcnQgeyBpbXBvcnRNb2R1bGUgfSBmcm9tICdsb2NhbC1wa2cnXG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBKU0RPTU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldFdpbmRvd0tleXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ2pzZG9tJyxcbiAgYXN5bmMgc2V0dXAoZ2xvYmFsLCB7IGpzZG9tID0ge30gfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIENvb2tpZUphcixcbiAgICAgIEpTRE9NLFxuICAgICAgUmVzb3VyY2VMb2FkZXIsXG4gICAgICBWaXJ0dWFsQ29uc29sZSxcbiAgICB9ID0gYXdhaXQgaW1wb3J0TW9kdWxlKCdqc2RvbScpIGFzIHR5cGVvZiBpbXBvcnQoJ2pzZG9tJylcbiAgICBjb25zdCB7XG4gICAgICBodG1sID0gJzwhRE9DVFlQRSBodG1sPicsXG4gICAgICB1c2VyQWdlbnQsXG4gICAgICB1cmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgIGNvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCcsXG4gICAgICBwcmV0ZW5kVG9CZVZpc3VhbCA9IHRydWUsXG4gICAgICBpbmNsdWRlTm9kZUxvY2F0aW9ucyA9IGZhbHNlLFxuICAgICAgcnVuU2NyaXB0cyA9ICdkYW5nZXJvdXNseScsXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBjb25zb2xlID0gZmFsc2UsXG4gICAgICBjb29raWVKYXIgPSBmYWxzZSxcbiAgICAgIC4uLnJlc3RPcHRpb25zXG4gICAgfSA9IGpzZG9tIGFzIEpTRE9NT3B0aW9uc1xuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTShcbiAgICAgIGh0bWwsXG4gICAgICB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsLFxuICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlcyA/PyAodXNlckFnZW50ID8gbmV3IFJlc291cmNlTG9hZGVyKHsgdXNlckFnZW50IH0pIDogdW5kZWZpbmVkKSxcbiAgICAgICAgcnVuU2NyaXB0cyxcbiAgICAgICAgdXJsLFxuICAgICAgICB2aXJ0dWFsQ29uc29sZTogY29uc29sZSAmJiBnbG9iYWwuY29uc29sZSA/IG5ldyBWaXJ0dWFsQ29uc29sZSgpLnNlbmRUbyhnbG9iYWwuY29uc29sZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvb2tpZUphcjogY29va2llSmFyID8gbmV3IENvb2tpZUphcigpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbmNsdWRlTm9kZUxvY2F0aW9ucyxcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIHVzZXJBZ2VudCxcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IGtleXMgPSBnZXRXaW5kb3dLZXlzKGdsb2JhbCwgZG9tLndpbmRvdylcblxuICAgIGNvbnN0IG92ZXJyaWRlT2JqZWN0ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgaWYgKG92ZXJyaWRlT2JqZWN0LmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlT2JqZWN0LmdldChrZXkpXG4gICAgICAgICAgcmV0dXJuIGRvbS53aW5kb3dba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgIG92ZXJyaWRlT2JqZWN0LnNldChrZXksIHYpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlYXJkb3duKGdsb2JhbCkge1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IGRlbGV0ZSBnbG9iYWxba2V5XSlcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsImltcG9ydCB7IGltcG9ydE1vZHVsZSB9IGZyb20gJ2xvY2FsLXBrZydcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldFdpbmRvd0tleXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ2hhcHB5LWRvbScsXG4gIGFzeW5jIHNldHVwKGdsb2JhbCkge1xuICAgIGNvbnN0IHsgV2luZG93IH0gPSBhd2FpdCBpbXBvcnRNb2R1bGUoJ2hhcHB5LWRvbScpIGFzIHR5cGVvZiBpbXBvcnQoJ2hhcHB5LWRvbScpXG4gICAgY29uc3Qgd2luOiBhbnkgPSBuZXcgV2luZG93KClcblxuICAgIGNvbnN0IGtleXMgPSBnZXRXaW5kb3dLZXlzKGdsb2JhbCwgd2luKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVPYmplY3QgPSBuZXcgTWFwPHN0cmluZywgYW55PigpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVPYmplY3QuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVPYmplY3QuZ2V0KGtleSlcbiAgICAgICAgICByZXR1cm4gd2luW2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHYpIHtcbiAgICAgICAgICBvdmVycmlkZU9iamVjdC5zZXQoa2V5LCB2KVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bihnbG9iYWwpIHtcbiAgICAgICAgd2luLmhhcHB5RE9NLmNhbmNlbEFzeW5jKClcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBkZWxldGUgZ2xvYmFsW2tleV0pXG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn0pXG4iLCJpbXBvcnQgbm9kZSBmcm9tICcuL25vZGUnXG5pbXBvcnQganNkb20gZnJvbSAnLi9qc2RvbSdcbmltcG9ydCBoYXBweSBmcm9tICcuL2hhcHB5LWRvbSdcblxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50cyA9IHtcbiAgbm9kZSxcbiAganNkb20sXG4gICdoYXBweS1kb20nOiBoYXBweSxcbn1cbiIsIihmdW5jdGlvbigpIHtcblx0KGZ1bmN0aW9uKGNoYWlTdWJzZXQpIHtcblx0XHRpZiAodHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBjaGFpU3Vic2V0O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0XHRyZXR1cm4gZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gY2hhaVN1YnNldDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY2hhaS51c2UoY2hhaVN1YnNldCk7XG5cdFx0fVxuXHR9KShmdW5jdGlvbihjaGFpLCB1dGlscykge1xuXHRcdHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblx0XHR2YXIgYXNzZXJ0aW9uUHJvdG90eXBlID0gQXNzZXJ0aW9uLnByb3RvdHlwZTtcblxuXHRcdEFzc2VydGlvbi5hZGRNZXRob2QoJ2NvbnRhaW5TdWJzZXQnLCBmdW5jdGlvbiAoZXhwZWN0ZWQpIHtcblx0XHRcdHZhciBhY3R1YWwgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcblx0XHRcdHZhciBzaG93RGlmZiA9IGNoYWkuY29uZmlnLnNob3dEaWZmO1xuXG5cdFx0XHRhc3NlcnRpb25Qcm90b3R5cGUuYXNzZXJ0LmNhbGwodGhpcyxcblx0XHRcdFx0Y29tcGFyZShleHBlY3RlZCwgYWN0dWFsKSxcblx0XHRcdFx0J2V4cGVjdGVkICN7YWN0fSB0byBjb250YWluIHN1YnNldCAje2V4cH0nLFxuXHRcdFx0XHQnZXhwZWN0ZWQgI3thY3R9IHRvIG5vdCBjb250YWluIHN1YnNldCAje2V4cH0nLFxuXHRcdFx0XHRleHBlY3RlZCxcblx0XHRcdFx0YWN0dWFsLFxuXHRcdFx0XHRzaG93RGlmZlxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdGNoYWkuYXNzZXJ0LmNvbnRhaW5TdWJzZXQgPSBmdW5jdGlvbih2YWwsIGV4cCwgbXNnKSB7XG5cdFx0XHRuZXcgY2hhaS5Bc3NlcnRpb24odmFsLCBtc2cpLnRvLmJlLmNvbnRhaW5TdWJzZXQoZXhwKTtcblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gY29tcGFyZShleHBlY3RlZCwgYWN0dWFsKSB7XG5cdFx0XHRpZiAoZXhwZWN0ZWQgPT09IGFjdHVhbCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YoYWN0dWFsKSAhPT0gdHlwZW9mKGV4cGVjdGVkKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mKGV4cGVjdGVkKSAhPT0gJ29iamVjdCcgfHwgZXhwZWN0ZWQgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkID09PSBhY3R1YWw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoISFleHBlY3RlZCAmJiAhYWN0dWFsKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YoYWN0dWFsLmxlbmd0aCkgIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBhYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFjdHVhbCk7XG5cdFx0XHRcdHJldHVybiBleHBlY3RlZC5ldmVyeShmdW5jdGlvbiAoZXhwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFhLnNvbWUoZnVuY3Rpb24gKGFjdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbXBhcmUoZXhwLCBhY3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBleHBlY3RlZC5nZXRUaW1lKCkgPT09IGFjdHVhbC5nZXRUaW1lKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhleHBlY3RlZCkuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHR2YXIgZW8gPSBleHBlY3RlZFtrZXldO1xuXHRcdFx0XHR2YXIgYW8gPSBhY3R1YWxba2V5XTtcblx0XHRcdFx0aWYgKHR5cGVvZihlbykgPT09ICdvYmplY3QnICYmIGVvICE9PSBudWxsICYmIGFvICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBhcmUoZW8sIGFvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mKGVvKSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHJldHVybiBlbyhhbyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFvID09PSBlbztcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbiIsIlxuXG5cbi8qXG4gKiBAdmVyc2lvbiAgICAxLjQuMFxuICogQGRhdGUgICAgICAgMjAxNS0xMC0yNlxuICogQHN0YWJpbGl0eSAgMyAtIFN0YWJsZVxuICogQGF1dGhvciAgICAgTGF1cmkgUm9vZGVuIChodHRwczovL2dpdGh1Yi5jb20vbGl0ZWpzL25hdHVyYWwtY29tcGFyZS1saXRlKVxuICogQGxpY2Vuc2UgICAgTUlUIExpY2Vuc2VcbiAqL1xuXG5cbnZhciBuYXR1cmFsQ29tcGFyZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0dmFyIGksIGNvZGVBXG5cdCwgY29kZUIgPSAxXG5cdCwgcG9zQSA9IDBcblx0LCBwb3NCID0gMFxuXHQsIGFscGhhYmV0ID0gU3RyaW5nLmFscGhhYmV0XG5cblx0ZnVuY3Rpb24gZ2V0Q29kZShzdHIsIHBvcywgY29kZSkge1xuXHRcdGlmIChjb2RlKSB7XG5cdFx0XHRmb3IgKGkgPSBwb3M7IGNvZGUgPSBnZXRDb2RlKHN0ciwgaSksIGNvZGUgPCA3NiAmJiBjb2RlID4gNjU7KSArK2k7XG5cdFx0XHRyZXR1cm4gK3N0ci5zbGljZShwb3MgLSAxLCBpKVxuXHRcdH1cblx0XHRjb2RlID0gYWxwaGFiZXQgJiYgYWxwaGFiZXQuaW5kZXhPZihzdHIuY2hhckF0KHBvcykpXG5cdFx0cmV0dXJuIGNvZGUgPiAtMSA/IGNvZGUgKyA3NiA6ICgoY29kZSA9IHN0ci5jaGFyQ29kZUF0KHBvcykgfHwgMCksIGNvZGUgPCA0NSB8fCBjb2RlID4gMTI3KSA/IGNvZGVcblx0XHRcdDogY29kZSA8IDQ2ID8gNjUgICAgICAgICAgICAgICAvLyAtXG5cdFx0XHQ6IGNvZGUgPCA0OCA/IGNvZGUgLSAxXG5cdFx0XHQ6IGNvZGUgPCA1OCA/IGNvZGUgKyAxOCAgICAgICAgLy8gMC05XG5cdFx0XHQ6IGNvZGUgPCA2NSA/IGNvZGUgLSAxMVxuXHRcdFx0OiBjb2RlIDwgOTEgPyBjb2RlICsgMTEgICAgICAgIC8vIEEtWlxuXHRcdFx0OiBjb2RlIDwgOTcgPyBjb2RlIC0gMzdcblx0XHRcdDogY29kZSA8IDEyMyA/IGNvZGUgKyA1ICAgICAgICAvLyBhLXpcblx0XHRcdDogY29kZSAtIDYzXG5cdH1cblxuXG5cdGlmICgoYSs9XCJcIikgIT0gKGIrPVwiXCIpKSBmb3IgKDtjb2RlQjspIHtcblx0XHRjb2RlQSA9IGdldENvZGUoYSwgcG9zQSsrKVxuXHRcdGNvZGVCID0gZ2V0Q29kZShiLCBwb3NCKyspXG5cblx0XHRpZiAoY29kZUEgPCA3NiAmJiBjb2RlQiA8IDc2ICYmIGNvZGVBID4gNjYgJiYgY29kZUIgPiA2Nikge1xuXHRcdFx0Y29kZUEgPSBnZXRDb2RlKGEsIHBvc0EsIHBvc0EpXG5cdFx0XHRjb2RlQiA9IGdldENvZGUoYiwgcG9zQiwgcG9zQSA9IGkpXG5cdFx0XHRwb3NCID0gaVxuXHRcdH1cblxuXHRcdGlmIChjb2RlQSAhPSBjb2RlQikgcmV0dXJuIChjb2RlQSA8IGNvZGVCKSA/IC0xIDogMVxuXHR9XG5cdHJldHVybiAwXG59XG5cbnRyeSB7XG5cdG1vZHVsZS5leHBvcnRzID0gbmF0dXJhbENvbXBhcmU7XG59IGNhdGNoIChlKSB7XG5cdFN0cmluZy5uYXR1cmFsQ29tcGFyZSA9IG5hdHVyYWxDb21wYXJlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pbXBvcnQgZnMsIHsgcHJvbWlzZXMgYXMgZnNwIH0gZnJvbSAnZnMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoZSdcbmltcG9ydCBuYXR1cmFsQ29tcGFyZSBmcm9tICduYXR1cmFsLWNvbXBhcmUnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbnNSZWNlaXZlZCBhcyBQcmV0dHlGb3JtYXRPcHRpb25zIH0gZnJvbSAncHJldHR5LWZvcm1hdCdcbmltcG9ydCB7XG4gIGZvcm1hdCBhcyBwcmV0dHlGb3JtYXQsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQgdHlwZSB7IFNuYXBzaG90RGF0YSwgU25hcHNob3RVcGRhdGVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IGdldFNlcmlhbGl6ZXJzIH0gZnJvbSAnLi9wbHVnaW5zJ1xuXG4vLyBUT0RPOiByZXdyaXRlIGFuZCBjbGVhbiB1cFxuXG5leHBvcnQgY29uc3QgU05BUFNIT1RfVkVSU0lPTiA9ICcxJ1xuXG5jb25zdCB3cml0ZVNuYXBzaG90VmVyc2lvbiA9ICgpID0+IGAvLyBWaXRlc3QgU25hcHNob3QgdiR7U05BUFNIT1RfVkVSU0lPTn1gXG5cbmV4cG9ydCBjb25zdCB0ZXN0TmFtZVRvS2V5ID0gKHRlc3ROYW1lOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgYCR7dGVzdE5hbWV9ICR7Y291bnR9YFxuXG5leHBvcnQgY29uc3Qga2V5VG9UZXN0TmFtZSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghLyBcXGQrJC8udGVzdChrZXkpKVxuICAgIHRocm93IG5ldyBFcnJvcignU25hcHNob3Qga2V5cyBtdXN0IGVuZCB3aXRoIGEgbnVtYmVyLicpXG5cbiAgcmV0dXJuIGtleS5yZXBsYWNlKC8gXFxkKyQvLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNuYXBzaG90RGF0YSA9IChcbiAgc25hcHNob3RQYXRoOiBzdHJpbmcsXG4gIHVwZGF0ZTogU25hcHNob3RVcGRhdGVTdGF0ZSxcbik6IHtcbiAgZGF0YTogU25hcHNob3REYXRhXG4gIGRpcnR5OiBib29sZWFuXG59ID0+IHtcbiAgY29uc3QgZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgbGV0IHNuYXBzaG90Q29udGVudHMgPSAnJ1xuICBsZXQgZGlydHkgPSBmYWxzZVxuXG4gIGlmIChmcy5leGlzdHNTeW5jKHNuYXBzaG90UGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgc25hcHNob3RDb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhzbmFwc2hvdFBhdGgsICd1dGY4JylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgY29uc3QgcG9wdWxhdGUgPSBuZXcgRnVuY3Rpb24oJ2V4cG9ydHMnLCBzbmFwc2hvdENvbnRlbnRzKVxuICAgICAgcG9wdWxhdGUoZGF0YSlcbiAgICB9XG4gICAgY2F0Y2gge31cbiAgfVxuXG4gIC8vIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZVNuYXBzaG90VmVyc2lvbihzbmFwc2hvdENvbnRlbnRzKVxuICBjb25zdCBpc0ludmFsaWQgPSBzbmFwc2hvdENvbnRlbnRzIC8vICYmIHZhbGlkYXRpb25SZXN1bHRcblxuICAvLyBpZiAodXBkYXRlID09PSAnbm9uZScgJiYgaXNJbnZhbGlkKVxuICAvLyAgIHRocm93IHZhbGlkYXRpb25SZXN1bHRcblxuICBpZiAoKHVwZGF0ZSA9PT0gJ2FsbCcgfHwgdXBkYXRlID09PSAnbmV3JykgJiYgaXNJbnZhbGlkKVxuICAgIGRpcnR5ID0gdHJ1ZVxuXG4gIHJldHVybiB7IGRhdGEsIGRpcnR5IH1cbn1cblxuLy8gQWRkIGV4dHJhIGxpbmUgYnJlYWtzIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIG11bHRpbGluZSBzbmFwc2hvdFxuLy8gdG8gbWFrZSB0aGUgY29udGVudCBlYXNpZXIgdG8gcmVhZC5cbmV4cG9ydCBjb25zdCBhZGRFeHRyYUxpbmVCcmVha3MgPSAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc3RyaW5nLmluY2x1ZGVzKCdcXG4nKSA/IGBcXG4ke3N0cmluZ31cXG5gIDogc3RyaW5nXG5cbi8vIFJlbW92ZSBleHRyYSBsaW5lIGJyZWFrcyBhdCBiZWdpbm5pbmcgYW5kIGVuZCBvZiBtdWx0aWxpbmUgc25hcHNob3QuXG4vLyBJbnN0ZWFkIG9mIHRyaW0sIHdoaWNoIGNhbiByZW1vdmUgYWRkaXRpb25hbCBuZXdsaW5lcyBvciBzcGFjZXNcbi8vIGF0IGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGNvbnRlbnQgZnJvbSBhIGN1c3RvbSBzZXJpYWxpemVyLlxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4dHJhTGluZUJyZWFrcyA9IChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzdHJpbmcubGVuZ3RoID4gMiAmJiBzdHJpbmcuc3RhcnRzV2l0aCgnXFxuJykgJiYgc3RyaW5nLmVuZHNXaXRoKCdcXG4nKVxuICAgID8gc3RyaW5nLnNsaWNlKDEsIC0xKVxuICAgIDogc3RyaW5nXG5cbi8vIGV4cG9ydCBjb25zdCByZW1vdmVMaW5lc0JlZm9yZUV4dGVybmFsTWF0Y2hlclRyYXAgPSAoc3RhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4vLyAgIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpXG5cbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuLy8gICAgIC8vIEl0J3MgYSBmdW5jdGlvbiBuYW1lIHNwZWNpZmllZCBpbiBgcGFja2FnZXMvZXhwZWN0L3NyYy9pbmRleC50c2Bcbi8vICAgICAvLyBmb3IgZXh0ZXJuYWwgY3VzdG9tIG1hdGNoZXJzLlxuLy8gICAgIGlmIChsaW5lc1tpXS5pbmNsdWRlcygnX19FWFRFUk5BTF9NQVRDSEVSX1RSQVBfXycpKVxuLy8gICAgICAgcmV0dXJuIGxpbmVzLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKVxuLy8gICB9XG5cbi8vICAgcmV0dXJuIHN0YWNrXG4vLyB9XG5cbmNvbnN0IGVzY2FwZVJlZ2V4ID0gdHJ1ZVxuY29uc3QgcHJpbnRGdW5jdGlvbk5hbWUgPSBmYWxzZVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKHZhbDogdW5rbm93bixcbiAgaW5kZW50ID0gMixcbiAgZm9ybWF0T3ZlcnJpZGVzOiBQcmV0dHlGb3JtYXRPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplTmV3bGluZXMoXG4gICAgcHJldHR5Rm9ybWF0KHZhbCwge1xuICAgICAgZXNjYXBlUmVnZXgsXG4gICAgICBpbmRlbnQsXG4gICAgICBwbHVnaW5zOiBnZXRTZXJpYWxpemVycygpLFxuICAgICAgcHJpbnRGdW5jdGlvbk5hbWUsXG4gICAgICAuLi5mb3JtYXRPdmVycmlkZXMsXG4gICAgfSksXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlmeSh2YWw6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gcHJldHR5Rm9ybWF0KHZhbCwge1xuICAgIGVzY2FwZVJlZ2V4LFxuICAgIG1pbjogdHJ1ZSxcbiAgICBwbHVnaW5zOiBnZXRTZXJpYWxpemVycygpLFxuICAgIHByaW50RnVuY3Rpb25OYW1lLFxuICB9KVxufVxuXG4vLyBSZW1vdmUgZG91YmxlIHF1b3RlIG1hcmtzIGFuZCB1bmVzY2FwZSBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcy5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVN0cmluZyhzdHJpbmdpZmllZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmaWVkLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cXFxcKFwifFxcXFwpL2csICckMScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVCYWNrdGlja1N0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvYHxcXFxcfFxcJHsvZywgJ1xcXFwkJicpXG59XG5cbmZ1bmN0aW9uIHByaW50QmFja3RpY2tTdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7ZXNjYXBlQmFja3RpY2tTdHJpbmcoc3RyKX1cXGBgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXJlY3RvcnlFeGlzdHMoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gIH1cbiAgY2F0Y2ggeyB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5ld2xpbmVzKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxyXFxufFxcci9nLCAnXFxuJylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVTbmFwc2hvdEZpbGUoXG4gIHNuYXBzaG90RGF0YTogU25hcHNob3REYXRhLFxuICBzbmFwc2hvdFBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBzbmFwc2hvdHMgPSBPYmplY3Qua2V5cyhzbmFwc2hvdERhdGEpXG4gICAgLnNvcnQobmF0dXJhbENvbXBhcmUpXG4gICAgLm1hcChcbiAgICAgIGtleSA9PiBgZXhwb3J0c1ske3ByaW50QmFja3RpY2tTdHJpbmcoa2V5KX1dID0gJHtwcmludEJhY2t0aWNrU3RyaW5nKG5vcm1hbGl6ZU5ld2xpbmVzKHNuYXBzaG90RGF0YVtrZXldKSl9O2AsXG4gICAgKVxuXG4gIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhzbmFwc2hvdFBhdGgpXG4gIGF3YWl0IGZzcC53cml0ZUZpbGUoXG4gICAgc25hcHNob3RQYXRoLFxuICAgIGAke3dyaXRlU25hcHNob3RWZXJzaW9uKCl9XFxuXFxuJHtzbmFwc2hvdHMuam9pbignXFxuXFxuJyl9XFxuYCxcbiAgICAndXRmLTgnLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRXhwZWN0ZWQoZXhwZWN0ZWQ/OiBzdHJpbmcpIHtcbiAgZnVuY3Rpb24gZmluZFN0YXJ0SW5kZW50KCkge1xuICAgIGNvbnN0IG1hdGNoID0gL14oICspfVxccyskL20uZXhlYyhleHBlY3RlZCB8fCAnJylcbiAgICByZXR1cm4gbWF0Y2g/LlsxXT8ubGVuZ3RoIHx8IDBcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0SWRlbnQgPSBmaW5kU3RhcnRJbmRlbnQoKVxuXG4gIGxldCBleHBlY3RlZFRyaW1tZWQgPSBleHBlY3RlZD8udHJpbSgpXG5cbiAgaWYgKHN0YXJ0SWRlbnQpIHtcbiAgICBleHBlY3RlZFRyaW1tZWQgPSBleHBlY3RlZFRyaW1tZWRcbiAgICAgID8ucmVwbGFjZShuZXcgUmVnRXhwKGBeJHsnICcucmVwZWF0KHN0YXJ0SWRlbnQpfWAsICdnbScpLCAnJykucmVwbGFjZSgvICt9JC8sICd9JylcbiAgfVxuXG4gIHJldHVybiBleHBlY3RlZFRyaW1tZWRcbn1cblxuZnVuY3Rpb24gZGVlcE1lcmdlQXJyYXkodGFyZ2V0OiBhbnlbXSA9IFtdLCBzb3VyY2U6IGFueVtdID0gW10pIHtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gQXJyYXkuZnJvbSh0YXJnZXQpXG5cbiAgc291cmNlLmZvckVhY2goKHNvdXJjZUVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IG1lcmdlZE91dHB1dFtpbmRleF1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtpbmRleF0pKSB7XG4gICAgICBtZXJnZWRPdXRwdXRbaW5kZXhdID0gZGVlcE1lcmdlQXJyYXkodGFyZ2V0W2luZGV4XSwgc291cmNlRWxlbWVudClcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBkZWVwTWVyZ2VTbmFwc2hvdCh0YXJnZXRbaW5kZXhdLCBzb3VyY2VFbGVtZW50KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFNvdXJjZSBkb2VzIG5vdCBleGlzdCBpbiB0YXJnZXQgb3IgdGFyZ2V0IGlzIHByaW1pdGl2ZSBhbmQgY2Fubm90IGJlIGRlZXAgbWVyZ2VkXG4gICAgICBtZXJnZWRPdXRwdXRbaW5kZXhdID0gc291cmNlRWxlbWVudFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWVyZ2VkT3V0cHV0XG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSwgYnV0IGNvbnNpZGVycyBhc3ltbWV0cmljIG1hdGNoZXJzLiBVbmxpa2UgYmFzZSB1dGlsJ3MgZGVlcCBtZXJnZSxcbiAqIHdpbGwgbWVyZ2UgYW55IG9iamVjdC1saWtlIGluc3RhbmNlLlxuICogQ29tcGF0aWJsZSB3aXRoIEplc3QncyBzbmFwc2hvdCBtYXRjaGVyLiBTaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBzbmFwc2hvdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHRvTWF0Y2hTbmFwc2hvdCh7XG4gKiAgIG5hbWU6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCd0ZXh0JylcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSB7XG4gIGlmIChpc09iamVjdCh0YXJnZXQpICYmIGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICBjb25zdCBtZXJnZWRPdXRwdXQgPSB7IC4uLnRhcmdldCB9XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkgJiYgIXNvdXJjZVtrZXldLiQkdHlwZW9mKSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0YXJnZXQpKSBPYmplY3QuYXNzaWduKG1lcmdlZE91dHB1dCwgeyBba2V5XTogc291cmNlW2tleV0gfSlcbiAgICAgICAgZWxzZSBtZXJnZWRPdXRwdXRba2V5XSA9IGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlW2tleV0pKSB7XG4gICAgICAgIG1lcmdlZE91dHB1dFtrZXldID0gZGVlcE1lcmdlQXJyYXkodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obWVyZ2VkT3V0cHV0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbWVyZ2VkT3V0cHV0XG4gIH1cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgIHJldHVybiBkZWVwTWVyZ2VBcnJheSh0YXJnZXQsIHNvdXJjZSlcbiAgfVxuICByZXR1cm4gdGFyZ2V0XG59XG4iLCJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgTWFnaWNTdHJpbmcgZnJvbSAnbWFnaWMtc3RyaW5nJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi4vLi4vLi4vcnVudGltZS9ycGMnXG5pbXBvcnQgeyBnZXRPcmlnaW5hbFBvcywgbGluZVNwbGl0UkUsIG51bWJlclRvUG9zLCBwb3NUb051bWJlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvdXJjZS1tYXAnXG5pbXBvcnQgeyBnZXRDYWxsTGFzdEluZGV4IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lU25hcHNob3Qge1xuICBzbmFwc2hvdDogc3RyaW5nXG4gIGZpbGU6IHN0cmluZ1xuICBsaW5lOiBudW1iZXJcbiAgY29sdW1uOiBudW1iZXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVJbmxpbmVTbmFwc2hvdHMoXG4gIHNuYXBzaG90czogQXJyYXk8SW5saW5lU25hcHNob3Q+LFxuKSB7XG4gIGNvbnN0IE1hZ2ljU3RyaW5nID0gKGF3YWl0IGltcG9ydCgnbWFnaWMtc3RyaW5nJykpLmRlZmF1bHRcbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0KHNuYXBzaG90cy5tYXAoaSA9PiBpLmZpbGUpKVxuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGZpbGVzKS5tYXAoYXN5bmMoZmlsZSkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IGF3YWl0IHJwYygpLmdldFNvdXJjZU1hcChmaWxlKVxuICAgIGNvbnN0IHNuYXBzID0gc25hcHNob3RzLmZpbHRlcihpID0+IGkuZmlsZSA9PT0gZmlsZSlcbiAgICBjb25zdCBjb2RlID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKVxuICAgIGNvbnN0IHMgPSBuZXcgTWFnaWNTdHJpbmcoY29kZSlcblxuICAgIGZvciAoY29uc3Qgc25hcCBvZiBzbmFwcykge1xuICAgICAgY29uc3QgcG9zID0gYXdhaXQgZ2V0T3JpZ2luYWxQb3MobWFwLCBzbmFwKVxuICAgICAgY29uc3QgaW5kZXggPSBwb3NUb051bWJlcihjb2RlLCBwb3MhKVxuICAgICAgcmVwbGFjZUlubGluZVNuYXAoY29kZSwgcywgaW5kZXgsIHNuYXAuc25hcHNob3QpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtZWQgPSBzLnRvU3RyaW5nKClcbiAgICBpZiAodHJhbnNmb3JtZWQgIT09IGNvZGUpXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgdHJhbnNmb3JtZWQsICd1dGYtOCcpXG4gIH0pKVxufVxuXG5jb25zdCBzdGFydE9iamVjdFJlZ2V4ID0gLyg/OnRvTWF0Y2hJbmxpbmVTbmFwc2hvdHx0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KVxccypcXChcXHMqKHspL21cblxuZnVuY3Rpb24gcmVwbGFjZU9iamVjdFNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvZGUgPSBjb2RlLnNsaWNlKGluZGV4KVxuICBjb25zdCBzdGFydE1hdGNoID0gc3RhcnRPYmplY3RSZWdleC5leGVjKGNvZGUpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gZmFsc2VcblxuICBjb2RlID0gY29kZS5zbGljZShzdGFydE1hdGNoLmluZGV4KVxuICBjb25zdCBjaGFySW5kZXggPSBnZXRDYWxsTGFzdEluZGV4KGNvZGUpXG4gIGlmIChjaGFySW5kZXggPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgcy5hcHBlbmRMZWZ0KGluZGV4ICsgc3RhcnRNYXRjaC5pbmRleCArIGNoYXJJbmRleCwgYCwgJHtwcmVwYXJlU25hcFN0cmluZyhuZXdTbmFwLCBjb2RlLCBpbmRleCl9YClcblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlU25hcFN0cmluZyhzbmFwOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IGxpbmVJbmRleCA9IG51bWJlclRvUG9zKHNvdXJjZSwgaW5kZXgpLmxpbmVcbiAgY29uc3QgbGluZSA9IHNvdXJjZS5zcGxpdChsaW5lU3BsaXRSRSlbbGluZUluZGV4IC0gMV1cbiAgY29uc3QgaW5kZW50ID0gbGluZS5tYXRjaCgvXlxccyovKSFbMF0gfHwgJydcbiAgY29uc3QgaW5kZW50TmV4dCA9IGluZGVudC5pbmNsdWRlcygnXFx0JykgPyBgJHtpbmRlbnR9XFx0YCA6IGAke2luZGVudH0gIGBcblxuICBjb25zdCBsaW5lcyA9IHNuYXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvXFwkL2csICdcXFxcJCcpXG4gICAgLnNwbGl0KC9cXG4vZylcbiAgICAubWFwKGkgPT4gaS50cmltRW5kKCkpXG5cbiAgY29uc3QgaXNPbmVsaW5lID0gbGluZXMubGVuZ3RoIDw9IDFcbiAgY29uc3QgcXVvdGUgPSBpc09uZWxpbmUgPyAnXFwnJyA6ICdgJ1xuICByZXR1cm4gaXNPbmVsaW5lXG4gICAgPyBgJyR7bGluZXMuam9pbignXFxuJykucmVwbGFjZSgvJy9nLCAnXFxcXFxcJycpfSdgXG4gICAgOiBgJHtxdW90ZX1cXG4ke2xpbmVzLm1hcChpID0+IGluZGVudE5leHQgKyBpKS5qb2luKCdcXG4nKS5yZXBsYWNlKC9gL2csICdcXFxcYCcpfVxcbiR7aW5kZW50fSR7cXVvdGV9YFxufVxuXG5jb25zdCBzdGFydFJlZ2V4ID0gLyg/OnRvTWF0Y2hJbmxpbmVTbmFwc2hvdHx0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KVxccypcXChcXHMqW1xcd18kXSooWydcImBcXCldKS9tXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUlubGluZVNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydFJlZ2V4LmV4ZWMoY29kZS5zbGljZShpbmRleCkpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gcmVwbGFjZU9iamVjdFNuYXAoY29kZSwgcywgaW5kZXgsIG5ld1NuYXApXG5cbiAgY29uc3QgcXVvdGUgPSBzdGFydE1hdGNoWzFdXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCArIHN0YXJ0TWF0Y2guaW5kZXghICsgc3RhcnRNYXRjaFswXS5sZW5ndGhcbiAgY29uc3Qgc25hcFN0cmluZyA9IHByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KVxuXG4gIGlmIChxdW90ZSA9PT0gJyknKSB7XG4gICAgcy5hcHBlbmRSaWdodChzdGFydEluZGV4IC0gMSwgc25hcFN0cmluZylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcXVvdGVFbmRSRSA9IG5ldyBSZWdFeHAoYCg/Ol58W15cXFxcXFxcXF0pJHtxdW90ZX1gKVxuICBjb25zdCBlbmRNYXRjaCA9IHF1b3RlRW5kUkUuZXhlYyhjb2RlLnNsaWNlKHN0YXJ0SW5kZXgpKVxuICBpZiAoIWVuZE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBlbmRNYXRjaC5pbmRleCEgKyBlbmRNYXRjaFswXS5sZW5ndGhcbiAgcy5vdmVyd3JpdGUoc3RhcnRJbmRleCAtIDEsIGVuZEluZGV4LCBzbmFwU3RyaW5nKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IElOREVOVEFUSU9OX1JFR0VYID0gL14oW15cXFNcXG5dKilcXFMvbVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbihpbmxpbmVTbmFwc2hvdDogc3RyaW5nKSB7XG4gIC8vIEZpbmQgaW5kZW50YXRpb24gaWYgZXhpc3RzLlxuICBjb25zdCBtYXRjaCA9IGlubGluZVNuYXBzaG90Lm1hdGNoKElOREVOVEFUSU9OX1JFR0VYKVxuICBpZiAoIW1hdGNoIHx8ICFtYXRjaFsxXSkge1xuICAgIC8vIE5vIGluZGVudGF0aW9uLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgY29uc3QgaW5kZW50YXRpb24gPSBtYXRjaFsxXVxuICBjb25zdCBsaW5lcyA9IGlubGluZVNuYXBzaG90LnNwbGl0KC9cXG4vZylcbiAgaWYgKGxpbmVzLmxlbmd0aCA8PSAyKSB7XG4gICAgLy8gTXVzdCBiZSBhdCBsZWFzdCAzIGxpbmVzLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgaWYgKGxpbmVzWzBdLnRyaW0oKSAhPT0gJycgfHwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0udHJpbSgpICE9PSAnJykge1xuICAgIC8vIElmIG5vdCBibGFuayBmaXJzdCBhbmQgbGFzdCBsaW5lcywgYWJvcnQuXG4gICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGlmIChsaW5lc1tpXSAhPT0gJycpIHtcbiAgICAgIGlmIChsaW5lc1tpXS5pbmRleE9mKGluZGVudGF0aW9uKSAhPT0gMCkge1xuICAgICAgICAvLyBBbGwgbGluZXMgZXhjZXB0IGZpcnN0IGFuZCBsYXN0IHNob3VsZCBlaXRoZXIgYmUgYmxhbmsgb3IgaGF2ZSB0aGUgc2FtZVxuICAgICAgICAvLyBpbmRlbnQgYXMgdGhlIGZpcnN0IGxpbmUgKG9yIG1vcmUpLiBJZiB0aGlzIGlzbid0IHRoZSBjYXNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gdG91Y2ggdGhlIHNuYXBzaG90IGF0IGFsbC5cbiAgICAgICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gICAgICB9XG5cbiAgICAgIGxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyaW5nKGluZGVudGF0aW9uLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0IGxpbmUgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBpdCB3b24ndCBoYXZlIHRoZSBzYW1lIGluZGVudCBhcyBvdGhlcnNcbiAgLy8gYnV0IG1heSBzdGlsbCBoYXZlIGJlZW4gZ2l2ZW4gc29tZSBpbmRlbnQgdG8gbGluZSB1cC5cbiAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPSAnJ1xuXG4gIC8vIFJldHVybiBpbmxpbmUgc25hcHNob3QsIG5vdyBhdCBpbmRlbnQgMC5cbiAgaW5saW5lU25hcHNob3QgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gaW5saW5lU25hcHNob3Rcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICdAamVzdC90eXBlcydcbi8vIGltcG9ydCB7IGdldFN0YWNrVHJhY2VMaW5lcywgZ2V0VG9wRnJhbWUgfSBmcm9tICdqZXN0LW1lc3NhZ2UtdXRpbCdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRTdGFjaywgU25hcHNob3REYXRhLCBTbmFwc2hvdE1hdGNoT3B0aW9ucywgU25hcHNob3RTdGF0ZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IHNsYXNoIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBwYXJzZVN0YWNrdHJhY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zb3VyY2UtbWFwJ1xuaW1wb3J0IHR5cGUgeyBJbmxpbmVTbmFwc2hvdCB9IGZyb20gJy4vaW5saW5lU25hcHNob3QnXG5pbXBvcnQgeyBzYXZlSW5saW5lU25hcHNob3RzIH0gZnJvbSAnLi9pbmxpbmVTbmFwc2hvdCdcblxuaW1wb3J0IHtcbiAgYWRkRXh0cmFMaW5lQnJlYWtzLFxuICBnZXRTbmFwc2hvdERhdGEsXG4gIGtleVRvVGVzdE5hbWUsXG4gIHByZXBhcmVFeHBlY3RlZCxcbiAgcmVtb3ZlRXh0cmFMaW5lQnJlYWtzLFxuICBzYXZlU25hcHNob3RGaWxlLFxuICBzZXJpYWxpemUsXG4gIHRlc3ROYW1lVG9LZXksXG59IGZyb20gJy4vdXRpbHMnXG5cbmludGVyZmFjZSBTbmFwc2hvdFJldHVybk9wdGlvbnMge1xuICBhY3R1YWw6IHN0cmluZ1xuICBjb3VudDogbnVtYmVyXG4gIGV4cGVjdGVkPzogc3RyaW5nXG4gIGtleTogc3RyaW5nXG4gIHBhc3M6IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIFNhdmVTdGF0dXMge1xuICBkZWxldGVkOiBib29sZWFuXG4gIHNhdmVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNuYXBzaG90U3RhdGUge1xuICBwcml2YXRlIF9jb3VudGVyczogTWFwPHN0cmluZywgbnVtYmVyPlxuICBwcml2YXRlIF9kaXJ0eTogYm9vbGVhblxuICBwcml2YXRlIF91cGRhdGVTbmFwc2hvdDogQ29uZmlnLlNuYXBzaG90VXBkYXRlU3RhdGVcbiAgcHJpdmF0ZSBfc25hcHNob3REYXRhOiBTbmFwc2hvdERhdGFcbiAgcHJpdmF0ZSBfaW5pdGlhbERhdGE6IFNuYXBzaG90RGF0YVxuICBwcml2YXRlIF9zbmFwc2hvdFBhdGg6IHN0cmluZ1xuICBwcml2YXRlIF9pbmxpbmVTbmFwc2hvdHM6IEFycmF5PElubGluZVNuYXBzaG90PlxuICBwcml2YXRlIF91bmNoZWNrZWRLZXlzOiBTZXQ8c3RyaW5nPlxuICBwcml2YXRlIF9zbmFwc2hvdEZvcm1hdDogUHJldHR5Rm9ybWF0T3B0aW9uc1xuXG4gIGFkZGVkOiBudW1iZXJcbiAgZXhwYW5kOiBib29sZWFuXG4gIG1hdGNoZWQ6IG51bWJlclxuICB1bm1hdGNoZWQ6IG51bWJlclxuICB1cGRhdGVkOiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihzbmFwc2hvdFBhdGg6IHN0cmluZywgb3B0aW9uczogU25hcHNob3RTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9zbmFwc2hvdFBhdGggPSBzbmFwc2hvdFBhdGhcbiAgICBjb25zdCB7IGRhdGEsIGRpcnR5IH0gPSBnZXRTbmFwc2hvdERhdGEoXG4gICAgICB0aGlzLl9zbmFwc2hvdFBhdGgsXG4gICAgICBvcHRpb25zLnVwZGF0ZVNuYXBzaG90LFxuICAgIClcbiAgICB0aGlzLl9pbml0aWFsRGF0YSA9IGRhdGFcbiAgICB0aGlzLl9zbmFwc2hvdERhdGEgPSBkYXRhXG4gICAgdGhpcy5fZGlydHkgPSBkaXJ0eVxuICAgIHRoaXMuX2lubGluZVNuYXBzaG90cyA9IFtdXG4gICAgdGhpcy5fdW5jaGVja2VkS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fc25hcHNob3REYXRhKSlcbiAgICB0aGlzLl9jb3VudGVycyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuZXhwYW5kID0gb3B0aW9ucy5leHBhbmQgfHwgZmFsc2VcbiAgICB0aGlzLmFkZGVkID0gMFxuICAgIHRoaXMubWF0Y2hlZCA9IDBcbiAgICB0aGlzLnVubWF0Y2hlZCA9IDBcbiAgICB0aGlzLl91cGRhdGVTbmFwc2hvdCA9IG9wdGlvbnMudXBkYXRlU25hcHNob3RcbiAgICB0aGlzLnVwZGF0ZWQgPSAwXG4gICAgdGhpcy5fc25hcHNob3RGb3JtYXQgPSB7XG4gICAgICBwcmludEJhc2ljUHJvdG90eXBlOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMuc25hcHNob3RGb3JtYXQsXG4gICAgfVxuICB9XG5cbiAgbWFya1NuYXBzaG90c0FzQ2hlY2tlZEZvclRlc3QodGVzdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZm9yRWFjaCgodW5jaGVja2VkS2V5KSA9PiB7XG4gICAgICBpZiAoa2V5VG9UZXN0TmFtZSh1bmNoZWNrZWRLZXkpID09PSB0ZXN0TmFtZSlcbiAgICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5kZWxldGUodW5jaGVja2VkS2V5KVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIF9nZXRJbmxpbmVTbmFwc2hvdFN0YWNrKHN0YWNrczogUGFyc2VkU3RhY2tbXSkge1xuICAgIC8vIGlmIGNhbGxlZCBpbnNpZGUgcmVzb2x2ZXMvcmVqZWN0cywgc3RhY2t0cmFjZSBpcyBkaWZmZXJlbnRcbiAgICBjb25zdCBwcm9taXNlSW5kZXggPSBzdGFja3MuZmluZEluZGV4KGkgPT4gaS5tZXRob2QubWF0Y2goL19fVklURVNUXyhSRVNPTFZFU3xSRUpFQ1RTKV9fLykpXG4gICAgaWYgKHByb21pc2VJbmRleCAhPT0gLTEpXG4gICAgICByZXR1cm4gc3RhY2tzW3Byb21pc2VJbmRleCArIDNdXG5cbiAgICAvLyBpbmxpbmUgc25hcHNob3QgZnVuY3Rpb24gaXMgY2FsbGVkIF9fVklURVNUX0lOTElORV9TTkFQU0hPVF9fXG4gICAgLy8gaW4gaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHNcbiAgICBjb25zdCBzdGFja0luZGV4ID0gc3RhY2tzLmZpbmRJbmRleChpID0+IGkubWV0aG9kLmluY2x1ZGVzKCdfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXycpKVxuICAgIHJldHVybiBzdGFja0luZGV4ICE9PSAtMSA/IHN0YWNrc1tzdGFja0luZGV4ICsgMl0gOiBudWxsXG4gIH1cblxuICBwcml2YXRlIF9hZGRTbmFwc2hvdChcbiAgICBrZXk6IHN0cmluZyxcbiAgICByZWNlaXZlZFNlcmlhbGl6ZWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGlzSW5saW5lOiBib29sZWFuOyBlcnJvcj86IEVycm9yIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZVxuICAgIGlmIChvcHRpb25zLmlzSW5saW5lKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG9wdGlvbnMuZXJyb3IgfHwgbmV3IEVycm9yKCdVbmtub3duIGVycm9yJylcbiAgICAgIGNvbnN0IHN0YWNrcyA9IHBhcnNlU3RhY2t0cmFjZShlcnJvciwgdHJ1ZSlcbiAgICAgIHN0YWNrcy5mb3JFYWNoKGkgPT4gaS5maWxlID0gc2xhc2goaS5maWxlKSlcbiAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy5fZ2V0SW5saW5lU25hcHNob3RTdGFjayhzdGFja3MpXG4gICAgICBpZiAoIXN0YWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVml0ZXN0OiBDb3VsZG4ndCBpbmZlciBzdGFjayBmcmFtZSBmb3IgaW5saW5lIHNuYXBzaG90LlxcbiR7SlNPTi5zdHJpbmdpZnkoc3RhY2tzKX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmxpbmVTbmFwc2hvdHMucHVzaCh7XG4gICAgICAgIHNuYXBzaG90OiByZWNlaXZlZFNlcmlhbGl6ZWQsXG4gICAgICAgIC4uLnN0YWNrLFxuICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSA9IHJlY2VpdmVkU2VyaWFsaXplZFxuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX3NuYXBzaG90RGF0YSA9IHRoaXMuX2luaXRpYWxEYXRhXG4gICAgLy8gdGhpcy5faW5saW5lU25hcHNob3RzID0gW11cbiAgICB0aGlzLl9jb3VudGVycyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuYWRkZWQgPSAwXG4gICAgdGhpcy5tYXRjaGVkID0gMFxuICAgIHRoaXMudW5tYXRjaGVkID0gMFxuICAgIHRoaXMudXBkYXRlZCA9IDBcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxTYXZlU3RhdHVzPiB7XG4gICAgY29uc3QgaGFzRXh0ZXJuYWxTbmFwc2hvdHMgPSBPYmplY3Qua2V5cyh0aGlzLl9zbmFwc2hvdERhdGEpLmxlbmd0aFxuICAgIGNvbnN0IGhhc0lubGluZVNuYXBzaG90cyA9IHRoaXMuX2lubGluZVNuYXBzaG90cy5sZW5ndGhcbiAgICBjb25zdCBpc0VtcHR5ID0gIWhhc0V4dGVybmFsU25hcHNob3RzICYmICFoYXNJbmxpbmVTbmFwc2hvdHNcblxuICAgIGNvbnN0IHN0YXR1czogU2F2ZVN0YXR1cyA9IHtcbiAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgc2F2ZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICgodGhpcy5fZGlydHkgfHwgdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplKSAmJiAhaXNFbXB0eSkge1xuICAgICAgaWYgKGhhc0V4dGVybmFsU25hcHNob3RzKVxuICAgICAgICBhd2FpdCBzYXZlU25hcHNob3RGaWxlKHRoaXMuX3NuYXBzaG90RGF0YSwgdGhpcy5fc25hcHNob3RQYXRoKVxuICAgICAgaWYgKGhhc0lubGluZVNuYXBzaG90cylcbiAgICAgICAgYXdhaXQgc2F2ZUlubGluZVNuYXBzaG90cyh0aGlzLl9pbmxpbmVTbmFwc2hvdHMpXG5cbiAgICAgIHN0YXR1cy5zYXZlZCA9IHRydWVcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc0V4dGVybmFsU25hcHNob3RzICYmIGZzLmV4aXN0c1N5bmModGhpcy5fc25hcHNob3RQYXRoKSkge1xuICAgICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJylcbiAgICAgICAgZnMudW5saW5rU3luYyh0aGlzLl9zbmFwc2hvdFBhdGgpXG5cbiAgICAgIHN0YXR1cy5kZWxldGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0dXNcbiAgfVxuXG4gIGdldFVuY2hlY2tlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3VuY2hlY2tlZEtleXMuc2l6ZSB8fCAwXG4gIH1cblxuICBnZXRVbmNoZWNrZWRLZXlzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3VuY2hlY2tlZEtleXMpXG4gIH1cblxuICByZW1vdmVVbmNoZWNrZWRLZXlzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcgJiYgdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplKSB7XG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZm9yRWFjaChrZXkgPT4gZGVsZXRlIHRoaXMuX3NuYXBzaG90RGF0YVtrZXldKVxuICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5jbGVhcigpXG4gICAgfVxuICB9XG5cbiAgbWF0Y2goe1xuICAgIHRlc3ROYW1lLFxuICAgIHJlY2VpdmVkLFxuICAgIGtleSxcbiAgICBpbmxpbmVTbmFwc2hvdCxcbiAgICBpc0lubGluZSxcbiAgICBlcnJvcixcbiAgfTogU25hcHNob3RNYXRjaE9wdGlvbnMpOiBTbmFwc2hvdFJldHVybk9wdGlvbnMge1xuICAgIHRoaXMuX2NvdW50ZXJzLnNldCh0ZXN0TmFtZSwgKHRoaXMuX2NvdW50ZXJzLmdldCh0ZXN0TmFtZSkgfHwgMCkgKyAxKVxuICAgIGNvbnN0IGNvdW50ID0gTnVtYmVyKHRoaXMuX2NvdW50ZXJzLmdldCh0ZXN0TmFtZSkpXG5cbiAgICBpZiAoIWtleSlcbiAgICAgIGtleSA9IHRlc3ROYW1lVG9LZXkodGVzdE5hbWUsIGNvdW50KVxuXG4gICAgLy8gRG8gbm90IG1hcmsgdGhlIHNuYXBzaG90IGFzIFwiY2hlY2tlZFwiIGlmIHRoZSBzbmFwc2hvdCBpcyBpbmxpbmUgYW5kXG4gICAgLy8gdGhlcmUncyBhbiBleHRlcm5hbCBzbmFwc2hvdC4gVGhpcyB3YXkgdGhlIGV4dGVybmFsIHNuYXBzaG90IGNhbiBiZVxuICAgIC8vIHJlbW92ZWQgd2l0aCBgLS11cGRhdGVTbmFwc2hvdGAuXG4gICAgaWYgKCEoaXNJbmxpbmUgJiYgdGhpcy5fc25hcHNob3REYXRhW2tleV0gIT09IHVuZGVmaW5lZCkpXG4gICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmRlbGV0ZShrZXkpXG5cbiAgICBjb25zdCByZWNlaXZlZFNlcmlhbGl6ZWQgPSBhZGRFeHRyYUxpbmVCcmVha3Moc2VyaWFsaXplKHJlY2VpdmVkLCB1bmRlZmluZWQsIHRoaXMuX3NuYXBzaG90Rm9ybWF0KSlcbiAgICBjb25zdCBleHBlY3RlZCA9IGlzSW5saW5lID8gaW5saW5lU25hcHNob3QgOiB0aGlzLl9zbmFwc2hvdERhdGFba2V5XVxuICAgIGNvbnN0IGV4cGVjdGVkVHJpbW1lZCA9IHByZXBhcmVFeHBlY3RlZChleHBlY3RlZClcbiAgICBjb25zdCBwYXNzID0gZXhwZWN0ZWRUcmltbWVkID09PSBwcmVwYXJlRXhwZWN0ZWQocmVjZWl2ZWRTZXJpYWxpemVkKVxuICAgIGNvbnN0IGhhc1NuYXBzaG90ID0gZXhwZWN0ZWQgIT09IHVuZGVmaW5lZFxuICAgIGNvbnN0IHNuYXBzaG90SXNQZXJzaXN0ZWQgPSBpc0lubGluZSB8fCBmcy5leGlzdHNTeW5jKHRoaXMuX3NuYXBzaG90UGF0aClcblxuICAgIGlmIChwYXNzICYmICFpc0lubGluZSkge1xuICAgICAgLy8gRXhlY3V0aW5nIGEgc25hcHNob3QgZmlsZSBhcyBKYXZhU2NyaXB0IGFuZCB3cml0aW5nIHRoZSBzdHJpbmdzIGJhY2tcbiAgICAgIC8vIHdoZW4gb3RoZXIgc25hcHNob3RzIGhhdmUgY2hhbmdlZCBsb3NlcyB0aGUgcHJvcGVyIGVzY2FwaW5nIGZvciBzb21lXG4gICAgICAvLyBjaGFyYWN0ZXJzLiBTaW5jZSB3ZSBjaGVjayBldmVyeSBzbmFwc2hvdCBpbiBldmVyeSB0ZXN0LCB1c2UgdGhlIG5ld2x5XG4gICAgICAvLyBnZW5lcmF0ZWQgZm9ybWF0dGVkIHN0cmluZy5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBhIHNuYXBzaG90IGlzIGFkZGVkIGFuZCB0aGUgZGlydHlcbiAgICAgIC8vIGZsYWcgaXMgc2V0LlxuICAgICAgdGhpcy5fc25hcHNob3REYXRhW2tleV0gPSByZWNlaXZlZFNlcmlhbGl6ZWRcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgdGhlIGNvbmRpdGlvbnMgb24gd2hlbiB0byB3cml0ZSBzbmFwc2hvdHM6XG4gICAgLy8gICogVGhlcmUncyBubyBzbmFwc2hvdCBmaWxlIGluIGEgbm9uLUNJIGVudmlyb25tZW50LlxuICAgIC8vICAqIFRoZXJlIGlzIGEgc25hcHNob3QgZmlsZSBhbmQgd2UgZGVjaWRlZCB0byB1cGRhdGUgdGhlIHNuYXBzaG90LlxuICAgIC8vICAqIFRoZXJlIGlzIGEgc25hcHNob3QgZmlsZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0aGlzIHNuYXBzaG90LlxuICAgIC8vIFRoZXNlIGFyZSB0aGUgY29uZGl0aW9ucyBvbiB3aGVuIG5vdCB0byB3cml0ZSBzbmFwc2hvdHM6XG4gICAgLy8gICogVGhlIHVwZGF0ZSBmbGFnIGlzIHNldCB0byAnbm9uZScuXG4gICAgLy8gICogVGhlcmUncyBubyBzbmFwc2hvdCBmaWxlIG9yIGEgZmlsZSB3aXRob3V0IHRoaXMgc25hcHNob3Qgb24gYSBDSSBlbnZpcm9ubWVudC5cbiAgICBpZiAoXG4gICAgICAoaGFzU25hcHNob3QgJiYgdGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKVxuICAgICAgIHx8ICgoIWhhc1NuYXBzaG90IHx8ICFzbmFwc2hvdElzUGVyc2lzdGVkKVxuICAgICAgICAgJiYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnbmV3JyB8fCB0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcpKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJykge1xuICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICBpZiAoaGFzU25hcHNob3QpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWQrK1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuYWRkZWQrK1xuXG4gICAgICAgICAgdGhpcy5fYWRkU25hcHNob3Qoa2V5LCByZWNlaXZlZFNlcmlhbGl6ZWQsIHsgZXJyb3IsIGlzSW5saW5lIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXRjaGVkKytcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2FkZFNuYXBzaG90KGtleSwgcmVjZWl2ZWRTZXJpYWxpemVkLCB7IGVycm9yLCBpc0lubGluZSB9KVxuICAgICAgICB0aGlzLmFkZGVkKytcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0dWFsOiAnJyxcbiAgICAgICAgY291bnQsXG4gICAgICAgIGV4cGVjdGVkOiAnJyxcbiAgICAgICAga2V5LFxuICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghcGFzcykge1xuICAgICAgICB0aGlzLnVubWF0Y2hlZCsrXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0dWFsOiByZW1vdmVFeHRyYUxpbmVCcmVha3MocmVjZWl2ZWRTZXJpYWxpemVkKSxcbiAgICAgICAgICBjb3VudCxcbiAgICAgICAgICBleHBlY3RlZDpcbiAgICAgICAgICBleHBlY3RlZFRyaW1tZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyByZW1vdmVFeHRyYUxpbmVCcmVha3MoZXhwZWN0ZWRUcmltbWVkKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXRjaGVkKytcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3R1YWw6ICcnLFxuICAgICAgICAgIGNvdW50LFxuICAgICAgICAgIGV4cGVjdGVkOiAnJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aGUnXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJ1xuaW1wb3J0IHR5cGUgeyBTbmFwc2hvdFJlc3VsdCwgVGVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi4vLi4vcnVudGltZS9ycGMnXG5pbXBvcnQgeyBnZXROYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgZXF1YWxzLCBpdGVyYWJsZUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eSB9IGZyb20gJy4uL2NoYWkvamVzdC11dGlscydcbmltcG9ydCB7IGRlZXBNZXJnZVNuYXBzaG90IH0gZnJvbSAnLi9wb3J0L3V0aWxzJ1xuaW1wb3J0IFNuYXBzaG90U3RhdGUgZnJvbSAnLi9wb3J0L3N0YXRlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHQge1xuICBmaWxlOiBzdHJpbmdcbiAgdGl0bGU/OiBzdHJpbmdcbiAgZnVsbFRpdGxlPzogc3RyaW5nXG59XG5cbmNvbnN0IHJlc29sdmVTbmFwc2hvdFBhdGggPSAodGVzdFBhdGg6IHN0cmluZykgPT5cbiAgcGF0aC5qb2luKFxuICAgIHBhdGguam9pbihwYXRoLmRpcm5hbWUodGVzdFBhdGgpLCAnX19zbmFwc2hvdHNfXycpLFxuICAgIGAke3BhdGguYmFzZW5hbWUodGVzdFBhdGgpfS5zbmFwYCxcbiAgKVxuXG5leHBvcnQgY2xhc3MgU25hcHNob3RDbGllbnQge1xuICB0ZXN0OiBUZXN0IHwgdW5kZWZpbmVkXG4gIHRlc3RGaWxlID0gJydcbiAgc25hcHNob3RTdGF0ZTogU25hcHNob3RTdGF0ZSB8IHVuZGVmaW5lZFxuXG4gIHNldFRlc3QodGVzdDogVGVzdCkge1xuICAgIHRoaXMudGVzdCA9IHRlc3RcblxuICAgIGlmICh0aGlzLnRlc3RGaWxlICE9PSB0aGlzLnRlc3QuZmlsZSEuZmlsZXBhdGgpIHtcbiAgICAgIGlmICh0aGlzLnNuYXBzaG90U3RhdGUpXG4gICAgICAgIHRoaXMuc2F2ZVNuYXAoKVxuXG4gICAgICB0aGlzLnRlc3RGaWxlID0gdGhpcy50ZXN0IS5maWxlIS5maWxlcGF0aFxuICAgICAgdGhpcy5zbmFwc2hvdFN0YXRlID0gbmV3IFNuYXBzaG90U3RhdGUoXG4gICAgICAgIHJlc29sdmVTbmFwc2hvdFBhdGgodGhpcy50ZXN0RmlsZSksXG4gICAgICAgIF9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWcuc25hcHNob3RPcHRpb25zLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyVGVzdCgpIHtcbiAgICB0aGlzLnRlc3QgPSB1bmRlZmluZWRcbiAgfVxuXG4gIGFzc2VydChyZWNlaXZlZDogdW5rbm93biwgbWVzc2FnZT86IHN0cmluZywgaXNJbmxpbmUgPSBmYWxzZSwgcHJvcGVydGllcz86IG9iamVjdCwgaW5saW5lU25hcHNob3Q/OiBzdHJpbmcsIGVycm9yPzogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdClcbiAgICAgIHRocm93IG5ldyBFcnJvcignU25hcHNob3QgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiB0ZXN0JylcblxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZWQgIT09ICdvYmplY3QnIHx8ICFyZWNlaXZlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCB3aGVuIHRoZSBtYXRjaGVyIGhhcyBwcm9wZXJ0aWVzJylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFzcyA9IGVxdWFscyhyZWNlaXZlZCwgcHJvcGVydGllcywgW2l0ZXJhYmxlRXF1YWxpdHksIHN1YnNldEVxdWFsaXR5XSlcbiAgICAgICAgaWYgKCFwYXNzKVxuICAgICAgICAgIGV4cGVjdChyZWNlaXZlZCkuZXF1YWxzKHByb3BlcnRpZXMpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZWNlaXZlZCA9IGRlZXBNZXJnZVNuYXBzaG90KHJlY2VpdmVkLCBwcm9wZXJ0aWVzKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gJ1NuYXBzaG90IG1pc21hdGNoZWQnXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRlc3ROYW1lID0gW1xuICAgICAgLi4uZ2V0TmFtZXModGhpcy50ZXN0KS5zbGljZSgxKSxcbiAgICAgIC4uLihtZXNzYWdlID8gW21lc3NhZ2VdIDogW10pLFxuICAgIF0uam9pbignID4gJylcblxuICAgIGNvbnN0IHsgYWN0dWFsLCBleHBlY3RlZCwga2V5LCBwYXNzIH0gPSB0aGlzLnNuYXBzaG90U3RhdGUhLm1hdGNoKHtcbiAgICAgIHRlc3ROYW1lLFxuICAgICAgcmVjZWl2ZWQsXG4gICAgICBpc0lubGluZSxcbiAgICAgIGVycm9yLFxuICAgICAgaW5saW5lU25hcHNob3QsXG4gICAgfSlcblxuICAgIGlmICghcGFzcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhwZWN0KGFjdHVhbC50cmltKCkpLmVxdWFscyhleHBlY3RlZCA/IGV4cGVjdGVkLnRyaW0oKSA6ICcnKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBTbmFwc2hvdCBcXGAke2tleSB8fCAndW5rbm93bid9XFxgIG1pc21hdGNoZWRgXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVNuYXAoKSB7XG4gICAgaWYgKCF0aGlzLnRlc3RGaWxlIHx8ICF0aGlzLnNuYXBzaG90U3RhdGUpIHJldHVyblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhY2tTbmFwc2hvdFN0YXRlKHRoaXMudGVzdEZpbGUsIHRoaXMuc25hcHNob3RTdGF0ZSlcbiAgICBhd2FpdCBycGMoKS5zbmFwc2hvdFNhdmVkKHJlc3VsdClcblxuICAgIHRoaXMudGVzdEZpbGUgPSAnJ1xuICAgIHRoaXMuc25hcHNob3RTdGF0ZSA9IHVuZGVmaW5lZFxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrU25hcHNob3RTdGF0ZShmaWxlcGF0aDogc3RyaW5nLCBzdGF0ZTogU25hcHNob3RTdGF0ZSk6IFByb21pc2U8U25hcHNob3RSZXN1bHQ+IHtcbiAgY29uc3Qgc25hcHNob3Q6IFNuYXBzaG90UmVzdWx0ID0ge1xuICAgIGZpbGVwYXRoLFxuICAgIGFkZGVkOiAwLFxuICAgIGZpbGVEZWxldGVkOiBmYWxzZSxcbiAgICBtYXRjaGVkOiAwLFxuICAgIHVuY2hlY2tlZDogMCxcbiAgICB1bmNoZWNrZWRLZXlzOiBbXSxcbiAgICB1bm1hdGNoZWQ6IDAsXG4gICAgdXBkYXRlZDogMCxcbiAgfVxuICBjb25zdCB1bmNoZWNrZWRDb3VudCA9IHN0YXRlLmdldFVuY2hlY2tlZENvdW50KClcbiAgY29uc3QgdW5jaGVja2VkS2V5cyA9IHN0YXRlLmdldFVuY2hlY2tlZEtleXMoKVxuICBpZiAodW5jaGVja2VkQ291bnQpXG4gICAgc3RhdGUucmVtb3ZlVW5jaGVja2VkS2V5cygpXG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhdGUuc2F2ZSgpXG4gIHNuYXBzaG90LmZpbGVEZWxldGVkID0gc3RhdHVzLmRlbGV0ZWRcbiAgc25hcHNob3QuYWRkZWQgPSBzdGF0ZS5hZGRlZFxuICBzbmFwc2hvdC5tYXRjaGVkID0gc3RhdGUubWF0Y2hlZFxuICBzbmFwc2hvdC51bm1hdGNoZWQgPSBzdGF0ZS51bm1hdGNoZWRcbiAgc25hcHNob3QudXBkYXRlZCA9IHN0YXRlLnVwZGF0ZWRcbiAgc25hcHNob3QudW5jaGVja2VkID0gIXN0YXR1cy5kZWxldGVkID8gdW5jaGVja2VkQ291bnQgOiAwXG4gIHNuYXBzaG90LnVuY2hlY2tlZEtleXMgPSBBcnJheS5mcm9tKHVuY2hlY2tlZEtleXMpXG5cbiAgcmV0dXJuIHNuYXBzaG90XG59XG4iLCJpbXBvcnQgdHlwZSB7IENoYWlQbHVnaW4gfSBmcm9tICcuLi9jaGFpL3R5cGVzJ1xuaW1wb3J0IHsgU25hcHNob3RDbGllbnQgfSBmcm9tICcuL2NsaWVudCdcbmltcG9ydCB7IHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbiB9IGZyb20gJy4vcG9ydC9pbmxpbmVTbmFwc2hvdCdcblxubGV0IF9jbGllbnQ6IFNuYXBzaG90Q2xpZW50XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbmFwc2hvdENsaWVudCgpOiBTbmFwc2hvdENsaWVudCB7XG4gIGlmICghX2NsaWVudClcbiAgICBfY2xpZW50ID0gbmV3IFNuYXBzaG90Q2xpZW50KClcbiAgcmV0dXJuIF9jbGllbnRcbn1cblxuY29uc3QgZ2V0RXJyb3JTdHJpbmcgPSAoZXhwZWN0ZWQ6ICgpID0+IHZvaWQpID0+IHtcbiAgdHJ5IHtcbiAgICBleHBlY3RlZCgpXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgcmV0dXJuIGUubWVzc2FnZVxuXG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignc25hcHNob3QgZnVuY3Rpb24gZGlkblxcJ3QgdGhyZXcnKVxufVxuXG5leHBvcnQgY29uc3QgU25hcHNob3RQbHVnaW46IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydtYXRjaFNuYXBzaG90JywgJ3RvTWF0Y2hTbmFwc2hvdCddKSB7XG4gICAgdXRpbHMuYWRkTWV0aG9kKFxuICAgICAgY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLFxuICAgICAga2V5LFxuICAgICAgZnVuY3Rpb24odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3BlcnRpZXM/OiBvYmplY3QsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtZXNzYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIG1lc3NhZ2UgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgcHJvcGVydGllcyA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGV4cGVjdGVkLCBtZXNzYWdlLCBmYWxzZSwgcHJvcGVydGllcylcbiAgICAgIH0sXG4gICAgKVxuICB9XG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvTWF0Y2hJbmxpbmVTbmFwc2hvdCcsXG4gICAgZnVuY3Rpb24gX19WSVRFU1RfSU5MSU5FX1NOQVBTSE9UX18odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3BlcnRpZXM/OiBvYmplY3QsIGlubGluZVNuYXBzaG90Pzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBjb25zdCBlcnJvciA9IHV0aWxzLmZsYWcodGhpcywgJ2Vycm9yJylcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IGlubGluZVNuYXBzaG90XG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAoaW5saW5lU25hcHNob3QpXG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uKGlubGluZVNuYXBzaG90KVxuICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIHRydWUsIHByb3BlcnRpZXMsIGlubGluZVNuYXBzaG90LCBlcnJvcilcbiAgICB9LFxuICApXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvVGhyb3dFcnJvck1hdGNoaW5nU25hcHNob3QnLFxuICAgIGZ1bmN0aW9uKHRoaXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBnZXRTbmFwc2hvdENsaWVudCgpLmFzc2VydChnZXRFcnJvclN0cmluZyhleHBlY3RlZCksIG1lc3NhZ2UpXG4gICAgfSxcbiAgKVxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLFxuICAgICd0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90JyxcbiAgICBmdW5jdGlvbiBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXyh0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaW5saW5lU25hcHNob3Q6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBjb25zdCBlcnJvciA9IHV0aWxzLmZsYWcodGhpcywgJ2Vycm9yJylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSwgdHJ1ZSwgdW5kZWZpbmVkLCBpbmxpbmVTbmFwc2hvdCwgZXJyb3IpXG4gICAgfSxcbiAgKVxufVxuIiwiLy8gd2UgYXJlIHVzaW5nIG9ubHkgdGhlIG9uZXMgbmVlZGVkIGJ5IEB0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb21cbi8vIGlmIHlvdSBuZWVkIG1vcmUsIGp1c3QgYXNrXG5cbmltcG9ydCBjIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlciB9IGZyb20gJ3BpY29jb2xvcnMvdHlwZXMnXG5pbXBvcnQgeyBmb3JtYXQgYXMgcHJldHR5Rm9ybWF0LCBwbHVnaW5zIGFzIHByZXR0eUZvcm1hdFBsdWdpbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHsgdW5pZmllZERpZmYgfSBmcm9tICcuLi8uLi9ub2RlL3JlcG9ydGVycy9yZW5kZXJlcnMvZGlmZidcblxuZXhwb3J0IGNvbnN0IEVYUEVDVEVEX0NPTE9SID0gYy5ncmVlblxuZXhwb3J0IGNvbnN0IFJFQ0VJVkVEX0NPTE9SID0gYy5yZWRcbmV4cG9ydCBjb25zdCBJTlZFUlRFRF9DT0xPUiA9IGMuaW52ZXJzZVxuZXhwb3J0IGNvbnN0IEJPTERfV0VJR0hUID0gYy5ib2xkXG5leHBvcnQgY29uc3QgRElNX0NPTE9SID0gYy5kaW1cblxuY29uc3Qge1xuICBBc3ltbWV0cmljTWF0Y2hlcixcbiAgRE9NQ29sbGVjdGlvbixcbiAgRE9NRWxlbWVudCxcbiAgSW1tdXRhYmxlLFxuICBSZWFjdEVsZW1lbnQsXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbn0gPSBwcmV0dHlGb3JtYXRQbHVnaW5zXG5cbmNvbnN0IFBMVUdJTlMgPSBbXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbiAgUmVhY3RFbGVtZW50LFxuICBET01FbGVtZW50LFxuICBET01Db2xsZWN0aW9uLFxuICBJbW11dGFibGUsXG4gIEFzeW1tZXRyaWNNYXRjaGVyLFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoZXJIaW50T3B0aW9ucyB7XG4gIGNvbW1lbnQ/OiBzdHJpbmdcbiAgZXhwZWN0ZWRDb2xvcj86IEZvcm1hdHRlclxuICBpc0RpcmVjdEV4cGVjdENhbGw/OiBib29sZWFuXG4gIGlzTm90PzogYm9vbGVhblxuICBwcm9taXNlPzogc3RyaW5nXG4gIHJlY2VpdmVkQ29sb3I/OiBGb3JtYXR0ZXJcbiAgc2Vjb25kQXJndW1lbnQ/OiBzdHJpbmdcbiAgc2Vjb25kQXJndW1lbnRDb2xvcj86IEZvcm1hdHRlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlckhpbnQoXG4gIG1hdGNoZXJOYW1lOiBzdHJpbmcsXG4gIHJlY2VpdmVkID0gJ3JlY2VpdmVkJyxcbiAgZXhwZWN0ZWQgPSAnZXhwZWN0ZWQnLFxuICBvcHRpb25zOiBNYXRjaGVySGludE9wdGlvbnMgPSB7fSxcbikge1xuICBjb25zdCB7XG4gICAgY29tbWVudCA9ICcnLFxuICAgIGV4cGVjdGVkQ29sb3IgPSBFWFBFQ1RFRF9DT0xPUixcbiAgICBpc0RpcmVjdEV4cGVjdENhbGwgPSBmYWxzZSwgLy8gc2VlbXMgcmVkdW5kYW50IHdpdGggcmVjZWl2ZWQgPT09ICcnXG4gICAgaXNOb3QgPSBmYWxzZSxcbiAgICBwcm9taXNlID0gJycsXG4gICAgcmVjZWl2ZWRDb2xvciA9IFJFQ0VJVkVEX0NPTE9SLFxuICAgIHNlY29uZEFyZ3VtZW50ID0gJycsXG4gICAgc2Vjb25kQXJndW1lbnRDb2xvciA9IEVYUEVDVEVEX0NPTE9SLFxuICB9ID0gb3B0aW9uc1xuICBsZXQgaGludCA9ICcnXG4gIGxldCBkaW1TdHJpbmcgPSAnZXhwZWN0JyAvLyBjb25jYXRlbmF0ZSBhZGphY2VudCBkaW0gc3Vic3RyaW5nc1xuXG4gIGlmICghaXNEaXJlY3RFeHBlY3RDYWxsICYmIHJlY2VpdmVkICE9PSAnJykge1xuICAgIGhpbnQgKz0gRElNX0NPTE9SKGAke2RpbVN0cmluZ30oYCkgKyByZWNlaXZlZENvbG9yKHJlY2VpdmVkKVxuICAgIGRpbVN0cmluZyA9ICcpJ1xuICB9XG5cbiAgaWYgKHByb21pc2UgIT09ICcnKSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKSArIHByb21pc2VcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKGlzTm90KSB7XG4gICAgaGludCArPSBgJHtESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKX1ub3RgXG4gICAgZGltU3RyaW5nID0gJydcbiAgfVxuXG4gIGlmIChtYXRjaGVyTmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgLy8gT2xkIGZvcm1hdDogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksXG4gICAgLy8gZXNwZWNpYWxseSB3aXRob3V0IHByb21pc2Ugb3IgaXNOb3Qgb3B0aW9uc1xuICAgIGRpbVN0cmluZyArPSBtYXRjaGVyTmFtZVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE5ldyBmb3JtYXQ6IG9taXQgcGVyaW9kIGZyb20gbWF0Y2hlck5hbWUgYXJnXG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKSArIG1hdGNoZXJOYW1lXG4gICAgZGltU3RyaW5nID0gJydcbiAgfVxuXG4gIGlmIChleHBlY3RlZCA9PT0gJycpIHtcbiAgICBkaW1TdHJpbmcgKz0gJygpJ1xuICB9XG4gIGVsc2Uge1xuICAgIGhpbnQgKz0gRElNX0NPTE9SKGAke2RpbVN0cmluZ30oYCkgKyBleHBlY3RlZENvbG9yKGV4cGVjdGVkKVxuICAgIGlmIChzZWNvbmRBcmd1bWVudClcbiAgICAgIGhpbnQgKz0gRElNX0NPTE9SKCcsICcpICsgc2Vjb25kQXJndW1lbnRDb2xvcihzZWNvbmRBcmd1bWVudClcbiAgICBkaW1TdHJpbmcgPSAnKSdcbiAgfVxuXG4gIGlmIChjb21tZW50ICE9PSAnJylcbiAgICBkaW1TdHJpbmcgKz0gYCAvLyAke2NvbW1lbnR9YFxuXG4gIGlmIChkaW1TdHJpbmcgIT09ICcnKVxuICAgIGhpbnQgKz0gRElNX0NPTE9SKGRpbVN0cmluZylcblxuICByZXR1cm4gaGludFxufVxuXG5jb25zdCBTUEFDRV9TWU1CT0wgPSAnXFx1ezAwQjd9JyAvLyBtaWRkbGUgZG90XG5cbi8vIEluc3RlYWQgb2YgaW52ZXJzZSBoaWdobGlnaHQgd2hpY2ggbm93IGltcGxpZXMgYSBjaGFuZ2UsXG4vLyByZXBsYWNlIGNvbW1vbiBzcGFjZXMgd2l0aCBtaWRkbGUgZG90IGF0IHRoZSBlbmQgb2YgYW55IGxpbmUuXG5jb25zdCByZXBsYWNlVHJhaWxpbmdTcGFjZXMgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+XG4gIHRleHQucmVwbGFjZSgvXFxzKyQvZ20sIHNwYWNlcyA9PiBTUEFDRV9TWU1CT0wucmVwZWF0KHNwYWNlcy5sZW5ndGgpKVxuXG5leHBvcnQgY29uc3Qgc3RyaW5naWZ5ID0gKG9iamVjdDogdW5rbm93biwgbWF4RGVwdGggPSAxMCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IE1BWF9MRU5HVEggPSAxMDAwMFxuICBsZXQgcmVzdWx0XG5cbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBwcmV0dHlGb3JtYXQob2JqZWN0LCB7XG4gICAgICBtYXhEZXB0aCxcbiAgICAgIC8vIG1pbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IFBMVUdJTlMsXG4gICAgfSlcbiAgfVxuICBjYXRjaCB7XG4gICAgcmVzdWx0ID0gcHJldHR5Rm9ybWF0KG9iamVjdCwge1xuICAgICAgY2FsbFRvSlNPTjogZmFsc2UsXG4gICAgICBtYXhEZXB0aCxcbiAgICAgIC8vIG1pbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IFBMVUdJTlMsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHQubGVuZ3RoID49IE1BWF9MRU5HVEggJiYgbWF4RGVwdGggPiAxXG4gICAgPyBzdHJpbmdpZnkob2JqZWN0LCBNYXRoLmZsb29yKG1heERlcHRoIC8gMikpXG4gICAgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHByaW50UmVjZWl2ZWQgPSAob2JqZWN0OiB1bmtub3duKTogc3RyaW5nID0+XG4gIFJFQ0VJVkVEX0NPTE9SKHJlcGxhY2VUcmFpbGluZ1NwYWNlcyhzdHJpbmdpZnkob2JqZWN0KSkpXG5leHBvcnQgY29uc3QgcHJpbnRFeHBlY3RlZCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PlxuICBFWFBFQ1RFRF9DT0xPUihyZXBsYWNlVHJhaWxpbmdTcGFjZXMoc3RyaW5naWZ5KHZhbHVlKSkpXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZk9wdGlvbnMge1xuICBhQW5ub3RhdGlvbj86IHN0cmluZ1xuICBhQ29sb3I/OiBGb3JtYXR0ZXJcbiAgYUluZGljYXRvcj86IHN0cmluZ1xuICBiQW5ub3RhdGlvbj86IHN0cmluZ1xuICBiQ29sb3I/OiBGb3JtYXR0ZXJcbiAgYkluZGljYXRvcj86IHN0cmluZ1xuICBjaGFuZ2VDb2xvcj86IEZvcm1hdHRlclxuICBjaGFuZ2VMaW5lVHJhaWxpbmdTcGFjZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbW1vbkNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbW1vbkluZGljYXRvcj86IHN0cmluZ1xuICBjb21tb25MaW5lVHJhaWxpbmdTcGFjZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbnRleHRMaW5lcz86IG51bWJlclxuICBlbXB0eUZpcnN0T3JMYXN0TGluZVBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGV4cGFuZD86IGJvb2xlYW5cbiAgaW5jbHVkZUNoYW5nZUNvdW50cz86IGJvb2xlYW5cbiAgb21pdEFubm90YXRpb25MaW5lcz86IGJvb2xlYW5cbiAgcGF0Y2hDb2xvcj86IEZvcm1hdHRlclxuICAvLyBwcmV0dHktZm9ybWF0IHR5cGVcbiAgY29tcGFyZUtleXM/OiBhbnlcbn1cblxuLy8gVE9ETzogZG8gc29tZXRoaW5nIHdpdGggb3B0aW9uc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmYoYTogYW55LCBiOiBhbnksIG9wdGlvbnM/OiBEaWZmT3B0aW9ucykge1xuICByZXR1cm4gdW5pZmllZERpZmYoc3RyaW5naWZ5KGEpLCBzdHJpbmdpZnkoYikpXG59XG4iLCJpbXBvcnQgY2hhaSwgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB7IGdldFN0YXRlIH0gZnJvbSAnLi9qZXN0LWV4cGVjdCdcblxuaW1wb3J0ICogYXMgbWF0Y2hlclV0aWxzIGZyb20gJy4vamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5pbXBvcnQge1xuICBlcXVhbHMsXG4gIGl0ZXJhYmxlRXF1YWxpdHksXG4gIHN1YnNldEVxdWFsaXR5LFxufSBmcm9tICcuL2plc3QtdXRpbHMnXG5pbXBvcnQgdHlwZSB7XG4gIENoYWlQbHVnaW4sXG4gIE1hdGNoZXJTdGF0ZSxcbiAgTWF0Y2hlcnNPYmplY3QsXG4gIFN5bmNFeHBlY3RhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgaXNBc3luY0Z1bmN0aW9uID0gKGZuOiB1bmtub3duKSA9PlxuICB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgKGZuIGFzIGFueSlbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jRnVuY3Rpb24nXG5cbmNvbnN0IGdldE1hdGNoZXJTdGF0ZSA9IChhc3NlcnRpb246IENoYWkuQXNzZXJ0aW9uU3RhdGljICYgQ2hhaS5Bc3NlcnRpb24pID0+IHtcbiAgY29uc3Qgb2JqID0gYXNzZXJ0aW9uLl9vYmpcbiAgY29uc3QgaXNOb3QgPSB1dGlsLmZsYWcoYXNzZXJ0aW9uLCAnbmVnYXRlJykgYXMgYm9vbGVhblxuICBjb25zdCBwcm9taXNlID0gdXRpbC5mbGFnKGFzc2VydGlvbiwgJ3Byb21pc2UnKSB8fCAnJ1xuICBjb25zdCBqZXN0VXRpbHMgPSB7XG4gICAgLi4ubWF0Y2hlclV0aWxzLFxuICAgIGl0ZXJhYmxlRXF1YWxpdHksXG4gICAgc3Vic2V0RXF1YWxpdHksXG4gIH1cblxuICBjb25zdCBtYXRjaGVyU3RhdGU6IE1hdGNoZXJTdGF0ZSA9IHtcbiAgICAuLi5nZXRTdGF0ZSgpLFxuICAgIGlzTm90LFxuICAgIHV0aWxzOiBqZXN0VXRpbHMsXG4gICAgcHJvbWlzZSxcbiAgICBlcXVhbHMsXG4gICAgLy8gbmVlZGVkIGZvciBidWlsdC1pbiBqZXN0LXNuYXBzaG90cywgYnV0IHdlIGRvbid0IHVzZSBpdFxuICAgIHN1cHByZXNzZWRFcnJvcnM6IFtdLFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogbWF0Y2hlclN0YXRlLFxuICAgIGlzTm90LFxuICAgIG9iaixcbiAgfVxufVxuXG5jbGFzcyBKZXN0RXh0ZW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGFjdHVhbD86IGFueSwgcHVibGljIGV4cGVjdGVkPzogYW55KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBKZXN0RXh0ZW5kUGx1Z2luKGV4cGVjdHM6IE1hdGNoZXJzT2JqZWN0KTogQ2hhaVBsdWdpbiB7XG4gIHJldHVybiAoYywgdXRpbHMpID0+IHtcbiAgICBPYmplY3QuZW50cmllcyhleHBlY3RzKS5mb3JFYWNoKChbZXhwZWN0QXNzZXJ0aW9uTmFtZSwgZXhwZWN0QXNzZXJ0aW9uXSkgPT4ge1xuICAgICAgZnVuY3Rpb24gZXhwZWN0U3luY1dyYXBwZXIodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbiwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgaXNOb3QsIG9iaiB9ID0gZ2V0TWF0Y2hlclN0YXRlKHRoaXMpXG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhcmdzIHdhbnRpbmcgdHVwbGVcbiAgICAgICAgY29uc3QgeyBwYXNzLCBtZXNzYWdlLCBhY3R1YWwsIGV4cGVjdGVkIH0gPSBleHBlY3RBc3NlcnRpb24uY2FsbChzdGF0ZSwgb2JqLCAuLi5hcmdzKSBhcyBTeW5jRXhwZWN0YXRpb25SZXN1bHRcblxuICAgICAgICBpZiAoKHBhc3MgJiYgaXNOb3QpIHx8ICghcGFzcyAmJiAhaXNOb3QpKVxuICAgICAgICAgIHRocm93IG5ldyBKZXN0RXh0ZW5kRXJyb3IobWVzc2FnZSgpLCBhY3R1YWwsIGV4cGVjdGVkKVxuICAgICAgfVxuXG4gICAgICBhc3luYyBmdW5jdGlvbiBleHBlY3RBc3luY1dyYXBwZXIodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbiwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgaXNOb3QsIG9iaiB9ID0gZ2V0TWF0Y2hlclN0YXRlKHRoaXMpXG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhcmdzIHdhbnRpbmcgdHVwbGVcbiAgICAgICAgY29uc3QgeyBwYXNzLCBtZXNzYWdlLCBhY3R1YWwsIGV4cGVjdGVkIH0gPSBhd2FpdCBleHBlY3RBc3NlcnRpb24uY2FsbChzdGF0ZSwgb2JqLCAuLi5hcmdzKSBhcyBTeW5jRXhwZWN0YXRpb25SZXN1bHRcblxuICAgICAgICBpZiAoKHBhc3MgJiYgaXNOb3QpIHx8ICghcGFzcyAmJiAhaXNOb3QpKVxuICAgICAgICAgIHRocm93IG5ldyBKZXN0RXh0ZW5kRXJyb3IobWVzc2FnZSgpLCBhY3R1YWwsIGV4cGVjdGVkKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RBc3NlcnRpb25XcmFwcGVyID0gaXNBc3luY0Z1bmN0aW9uKGV4cGVjdEFzc2VydGlvbikgPyBleHBlY3RBc3luY1dyYXBwZXIgOiBleHBlY3RTeW5jV3JhcHBlclxuXG4gICAgICB1dGlscy5hZGRNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCBleHBlY3RBc3NlcnRpb25OYW1lLCBleHBlY3RBc3NlcnRpb25XcmFwcGVyKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEplc3RFeHRlbmQ6IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuZXhwZWN0LCAnZXh0ZW5kJywgKGV4cGVjdHM6IE1hdGNoZXJzT2JqZWN0KSA9PiB7XG4gICAgY2hhaS51c2UoSmVzdEV4dGVuZFBsdWdpbihleHBlY3RzKSlcbiAgfSlcbn1cbiIsImltcG9ydCAqIGFzIG1hdGNoZXJVdGlscyBmcm9tICcuL2plc3QtbWF0Y2hlci11dGlscydcblxuaW1wb3J0IHsgZXF1YWxzLCBpc0EgfSBmcm9tICcuL2plc3QtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENoYWlQbHVnaW4sIE1hdGNoZXJTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bW1ldHJpY01hdGNoZXJJbnRlcmZhY2Uge1xuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pOiBib29sZWFuXG4gIHRvU3RyaW5nKCk6IHN0cmluZ1xuICBnZXRFeHBlY3RlZFR5cGU/KCk6IHN0cmluZ1xuICB0b0FzeW1tZXRyaWNNYXRjaGVyPygpOiBzdHJpbmdcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzeW1tZXRyaWNNYXRjaGVyPFxuICBULFxuICBTdGF0ZSBleHRlbmRzIE1hdGNoZXJTdGF0ZSA9IE1hdGNoZXJTdGF0ZSxcbj4gaW1wbGVtZW50cyBBc3ltbWV0cmljTWF0Y2hlckludGVyZmFjZSB7XG4gICQkdHlwZW9mID0gU3ltYm9sLmZvcignamVzdC5hc3ltbWV0cmljTWF0Y2hlcicpXG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNhbXBsZTogVCwgcHJvdGVjdGVkIGludmVyc2UgPSBmYWxzZSkge31cblxuICBwcm90ZWN0ZWQgZ2V0TWF0Y2hlckNvbnRleHQoKTogU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlcXVhbHMsXG4gICAgICBpc05vdDogdGhpcy5pbnZlcnNlLFxuICAgICAgdXRpbHM6IG1hdGNoZXJVdGlscyxcbiAgICB9IGFzIGFueVxuICB9XG5cbiAgYWJzdHJhY3QgYXN5bW1ldHJpY01hdGNoKG90aGVyOiB1bmtub3duKTogYm9vbGVhblxuICBhYnN0cmFjdCB0b1N0cmluZygpOiBzdHJpbmdcbiAgZ2V0RXhwZWN0ZWRUeXBlPygpOiBzdHJpbmdcbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcj8oKTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8c3RyaW5nPiB7XG4gIGNvbnN0cnVjdG9yKHNhbXBsZTogc3RyaW5nLCBpbnZlcnNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzQSgnU3RyaW5nJywgc2FtcGxlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaXMgbm90IGEgc3RyaW5nJylcblxuICAgIHN1cGVyKHNhbXBsZSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXNBKCdTdHJpbmcnLCBvdGhlcikgJiYgb3RoZXIuaW5jbHVkZXModGhpcy5zYW1wbGUpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBTdHJpbmcke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQW55dGhpbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjx2b2lkPiB7XG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bikge1xuICAgIHJldHVybiBvdGhlciAhPSBudWxsXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ0FueXRoaW5nJ1xuICB9XG5cbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcigpIHtcbiAgICByZXR1cm4gJ0FueXRoaW5nJ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgZ2V0UHJvdG90eXBlKG9iajogb2JqZWN0KSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZilcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKVxuXG4gICAgaWYgKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IG9iailcbiAgICAgIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9XG5cbiAgaGFzUHJvcGVydHkob2JqOiBvYmplY3QgfCBudWxsLCBwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmopXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvcGVydHkodGhpcy5nZXRQcm90b3R5cGUob2JqKSwgcHJvcGVydHkpXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IGFueSkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5zYW1wbGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgWW91IG11c3QgcHJvdmlkZSBhbiBvYmplY3QgdG8gJHt0aGlzLnRvU3RyaW5nKCl9LCBub3QgJyR7XG4gICAgICAgICAgdHlwZW9mIHRoaXMuc2FtcGxlXG4gICAgICAgIH0nLmAsXG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRydWVcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5zYW1wbGUpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQcm9wZXJ0eShvdGhlciwgcHJvcGVydHkpIHx8ICFlcXVhbHModGhpcy5zYW1wbGVbcHJvcGVydHldLCBvdGhlcltwcm9wZXJ0eV0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW52ZXJzZSA/ICFyZXN1bHQgOiByZXN1bHRcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgT2JqZWN0JHt0aGlzLmludmVyc2UgPyAnTm90JyA6ICcnfUNvbnRhaW5pbmdgXG4gIH1cblxuICBnZXRFeHBlY3RlZFR5cGUoKSB7XG4gICAgcmV0dXJuICdvYmplY3QnXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5Q29udGFpbmluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPEFycmF5PHVua25vd24+PiB7XG4gIGNvbnN0cnVjdG9yKHNhbXBsZTogQXJyYXk8dW5rbm93bj4sIGludmVyc2UgPSBmYWxzZSkge1xuICAgIHN1cGVyKHNhbXBsZSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogQXJyYXk8dW5rbm93bj4pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zYW1wbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgWW91IG11c3QgcHJvdmlkZSBhbiBhcnJheSB0byAke3RoaXMudG9TdHJpbmcoKX0sIG5vdCAnJHtcbiAgICAgICAgICB0eXBlb2YgdGhpcy5zYW1wbGVcbiAgICAgICAgfScuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRcbiAgICAgID0gdGhpcy5zYW1wbGUubGVuZ3RoID09PSAwXG4gICAgICB8fCAoQXJyYXkuaXNBcnJheShvdGhlcilcbiAgICAgICAgJiYgdGhpcy5zYW1wbGUuZXZlcnkoaXRlbSA9PlxuICAgICAgICAgIG90aGVyLnNvbWUoYW5vdGhlciA9PiBlcXVhbHMoaXRlbSwgYW5vdGhlcikpLFxuICAgICAgICApKVxuXG4gICAgcmV0dXJuIHRoaXMuaW52ZXJzZSA/ICFyZXN1bHQgOiByZXN1bHRcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgQXJyYXkke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ2FycmF5J1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnkgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxhbnk+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiB1bmtub3duKSB7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnYW55KCkgZXhwZWN0cyB0byBiZSBwYXNzZWQgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gJ1xuICAgICAgICAgICsgJ1BsZWFzZSBwYXNzIG9uZSBvciB1c2UgYW55dGhpbmcoKSB0byBtYXRjaCBhbnkgb2JqZWN0LicsXG4gICAgICApXG4gICAgfVxuICAgIHN1cGVyKHNhbXBsZSlcbiAgfVxuXG4gIGZuTmFtZUZvcihmdW5jOiBGdW5jdGlvbikge1xuICAgIGlmIChmdW5jLm5hbWUpXG4gICAgICByZXR1cm4gZnVuYy5uYW1lXG5cbiAgICBjb25zdCBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nXG5cbiAgICBjb25zdCBtYXRjaGVzID0gZnVuY3Rpb25Ub1N0cmluZ1xuICAgICAgLmNhbGwoZnVuYylcbiAgICAgIC5tYXRjaCgvXig/OmFzeW5jKT9cXHMqZnVuY3Rpb25cXHMqXFwqP1xccyooW1xcdyRdKylcXHMqXFwoLylcbiAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiAnPGFub255bW91cz4nXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pIHtcbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN0cmluZylcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ3N0cmluZycgfHwgb3RoZXIgaW5zdGFuY2VvZiBTdHJpbmdcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gTnVtYmVyKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnbnVtYmVyJyB8fCBvdGhlciBpbnN0YW5jZW9mIE51bWJlclxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBGdW5jdGlvbilcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ2Z1bmN0aW9uJyB8fCBvdGhlciBpbnN0YW5jZW9mIEZ1bmN0aW9uXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IEJvb2xlYW4pXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdib29sZWFuJyB8fCBvdGhlciBpbnN0YW5jZW9mIEJvb2xlYW5cblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQmlnSW50KVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnYmlnaW50JyB8fCBvdGhlciBpbnN0YW5jZW9mIEJpZ0ludFxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBTeW1ib2wpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdzeW1ib2wnIHx8IG90aGVyIGluc3RhbmNlb2YgU3ltYm9sXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE9iamVjdClcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ29iamVjdCdcblxuICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIHRoaXMuc2FtcGxlXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ0FueSdcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN0cmluZylcbiAgICAgIHJldHVybiAnc3RyaW5nJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBOdW1iZXIpXG4gICAgICByZXR1cm4gJ251bWJlcidcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gRnVuY3Rpb24pXG4gICAgICByZXR1cm4gJ2Z1bmN0aW9uJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBPYmplY3QpXG4gICAgICByZXR1cm4gJ29iamVjdCdcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQm9vbGVhbilcbiAgICAgIHJldHVybiAnYm9vbGVhbidcblxuICAgIHJldHVybiB0aGlzLmZuTmFtZUZvcih0aGlzLnNhbXBsZSlcbiAgfVxuXG4gIHRvQXN5bW1ldHJpY01hdGNoZXIoKSB7XG4gICAgcmV0dXJuIGBBbnk8JHt0aGlzLmZuTmFtZUZvcih0aGlzLnNhbXBsZSl9PmBcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nTWF0Y2hpbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxSZWdFeHA+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBzdHJpbmcgfCBSZWdFeHAsIGludmVyc2UgPSBmYWxzZSkge1xuICAgIGlmICghaXNBKCdTdHJpbmcnLCBzYW1wbGUpICYmICFpc0EoJ1JlZ0V4cCcsIHNhbXBsZSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGlzIG5vdCBhIFN0cmluZyBvciBhIFJlZ0V4cCcpXG5cbiAgICBzdXBlcihuZXcgUmVnRXhwKHNhbXBsZSksIGludmVyc2UpXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGlzQSgnU3RyaW5nJywgb3RoZXIpICYmIHRoaXMuc2FtcGxlLnRlc3Qob3RoZXIpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBTdHJpbmcke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9TWF0Y2hpbmdgXG4gIH1cblxuICBnZXRFeHBlY3RlZFR5cGUoKSB7XG4gICAgcmV0dXJuICdzdHJpbmcnXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEplc3RBc3ltbWV0cmljTWF0Y2hlcnM6IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdhbnl0aGluZycsXG4gICAgKCkgPT4gbmV3IEFueXRoaW5nKCksXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FueScsXG4gICAgKGV4cGVjdGVkOiB1bmtub3duKSA9PiBuZXcgQW55KGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnc3RyaW5nQ29udGFpbmluZycsXG4gICAgKGV4cGVjdGVkOiBzdHJpbmcpID0+IG5ldyBTdHJpbmdDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnb2JqZWN0Q29udGFpbmluZycsXG4gICAgKGV4cGVjdGVkOiBhbnkpID0+IG5ldyBPYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYXJyYXlDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IEFycmF5Q29udGFpbmluZyhleHBlY3RlZCksXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ3N0cmluZ01hdGNoaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IFN0cmluZ01hdGNoaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIC8vIGRlZmluZVByb3BlcnR5IGRvZXMgbm90IHdvcmtcbiAgOyhjaGFpLmV4cGVjdCBhcyBhbnkpLm5vdCA9IHtcbiAgICBzdHJpbmdDb250YWluaW5nOiAoZXhwZWN0ZWQ6IHN0cmluZykgPT4gbmV3IFN0cmluZ0NvbnRhaW5pbmcoZXhwZWN0ZWQsIHRydWUpLFxuICAgIG9iamVjdENvbnRhaW5pbmc6IChleHBlY3RlZDogYW55KSA9PiBuZXcgT2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgYXJyYXlDb250YWluaW5nOiAoZXhwZWN0ZWQ6IHVua25vd25bXSkgPT4gbmV3IEFycmF5Q29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgc3RyaW5nTWF0Y2hpbmc6IChleHBlY3RlZDogc3RyaW5nIHwgUmVnRXhwKSA9PiBuZXcgU3RyaW5nTWF0Y2hpbmcoZXhwZWN0ZWQsIHRydWUpLFxuICB9XG59XG4iLCJpbXBvcnQgY2hhaSBmcm9tICdjaGFpJ1xuaW1wb3J0IFN1YnNldCBmcm9tICdjaGFpLXN1YnNldCdcbmltcG9ydCB7IFNuYXBzaG90UGx1Z2luIH0gZnJvbSAnLi4vc25hcHNob3QvY2hhaSdcbmltcG9ydCB7IEplc3RFeHRlbmQgfSBmcm9tICcuL2plc3QtZXh0ZW5kJ1xuaW1wb3J0IHsgSmVzdENoYWlFeHBlY3QgfSBmcm9tICcuL2plc3QtZXhwZWN0J1xuaW1wb3J0IHsgSmVzdEFzeW1tZXRyaWNNYXRjaGVycyB9IGZyb20gJy4vamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzJ1xuXG5sZXQgaW5zdGFsbGVkID0gZmFsc2VcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cENoYWkoKSB7XG4gIGlmIChpbnN0YWxsZWQpXG4gICAgcmV0dXJuXG5cbiAgY2hhaS51c2UoSmVzdEV4dGVuZClcbiAgY2hhaS51c2UoSmVzdENoYWlFeHBlY3QpXG4gIGNoYWkudXNlKFN1YnNldClcbiAgY2hhaS51c2UoU25hcHNob3RQbHVnaW4pXG4gIGNoYWkudXNlKEplc3RBc3ltbWV0cmljTWF0Y2hlcnMpXG4gIGluc3RhbGxlZCA9IHRydWVcbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJ1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nXG5pbXBvcnQgeyBlbnZpcm9ubWVudHMgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvZW52J1xuaW1wb3J0IHsgc2V0dXBDaGFpIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvc2V0dXAnXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYydcblxubGV0IGdsb2JhbFNldHVwID0gZmFsc2VcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEdsb2JhbEVudihjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIC8vIHNob3VsZCBiZSByZWRlY2xhcmVkIGZvciBlYWNoIHRlc3RcbiAgLy8gaWYgcnVuIHdpdGggXCJ0aHJlYWRzOiBmYWxzZVwiXG4gIHNldHVwRGVmaW5lcyhjb25maWcuZGVmaW5lcylcblxuICBpZiAoZ2xvYmFsU2V0dXApXG4gICAgcmV0dXJuXG5cbiAgZ2xvYmFsU2V0dXAgPSB0cnVlXG5cbiAgc2V0dXBDb25zb2xlTG9nU3B5KClcbiAgYXdhaXQgc2V0dXBDaGFpKClcblxuICBpZiAoY29uZmlnLmdsb2JhbHMpXG4gICAgKGF3YWl0IGltcG9ydCgnLi4vaW50ZWdyYXRpb25zL2dsb2JhbHMnKSkucmVnaXN0ZXJBcGlHbG9iYWxseSgpXG59XG5cbmZ1bmN0aW9uIHNldHVwRGVmaW5lcyhkZWZpbmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmluZXMpXG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KVtrZXldID0gZGVmaW5lc1trZXldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENvbnNvbGVMb2dTcHkoKSB7XG4gIGNvbnN0IHN0ZG91dCA9IG5ldyBXcml0YWJsZSh7XG4gICAgd3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICBycGMoKS5vblVzZXJDb25zb2xlTG9nKHtcbiAgICAgICAgdHlwZTogJ3N0ZG91dCcsXG4gICAgICAgIGNvbnRlbnQ6IFN0cmluZyhkYXRhKSxcbiAgICAgICAgdGFza0lkOiBfX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50Py5pZCxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH0pXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc3RkZXJyID0gbmV3IFdyaXRhYmxlKHtcbiAgICB3cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIHJwYygpLm9uVXNlckNvbnNvbGVMb2coe1xuICAgICAgICB0eXBlOiAnc3RkZXJyJyxcbiAgICAgICAgY29udGVudDogU3RyaW5nKGRhdGEpLFxuICAgICAgICB0YXNrSWQ6IF9fdml0ZXN0X3dvcmtlcl9fLmN1cnJlbnQ/LmlkLFxuICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgfSlcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9LFxuICB9KVxuICBnbG9iYWxUaGlzLmNvbnNvbGUgPSBuZXcgQ29uc29sZSh7XG4gICAgc3Rkb3V0LFxuICAgIHN0ZGVycixcbiAgICBjb2xvck1vZGU6IHRydWUsXG4gICAgZ3JvdXBJbmRlbnRhdGlvbjogMixcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhFbnYoXG4gIG5hbWU6IFJlc29sdmVkQ29uZmlnWydlbnZpcm9ubWVudCddLFxuICBvcHRpb25zOiBSZXNvbHZlZENvbmZpZ1snZW52aXJvbm1lbnRPcHRpb25zJ10sXG4gIGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IGVudiA9IGF3YWl0IGVudmlyb25tZW50c1tuYW1lXS5zZXR1cChnbG9iYWxUaGlzLCBvcHRpb25zKVxuICB0cnkge1xuICAgIGF3YWl0IGZuKClcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBhd2FpdCBlbnYudGVhcmRvd24oZ2xvYmFsVGhpcylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2V0dXBGaWxlcyhjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIGNvbnN0IGZpbGVzID0gdG9BcnJheShjb25maWcuc2V0dXBGaWxlcylcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXMubWFwKGFzeW5jKGZpbGUpID0+IHtcbiAgICAgIF9fdml0ZXN0X3dvcmtlcl9fLm1vZHVsZUNhY2hlLmRlbGV0ZShmaWxlKVxuICAgICAgYXdhaXQgaW1wb3J0KGZpbGUpXG4gICAgfSksXG4gIClcbn1cbiIsImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnXG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LW1hdGNoZXItdXRpbHMnXG5cbmNvbnN0IE9CSkVDVF9QUk9UTyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih7fSlcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9Xb3JrZXJzX0FQSS9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobVxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVycm9yKHZhbDogYW55LCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IGFueSB7XG4gIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKVxuICAgIHJldHVybiB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIGBGdW5jdGlvbjwke3ZhbC5uYW1lfT5gXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gdmFsXG4gIGlmICh2YWwgaW5zdGFuY2VvZiBQcm9taXNlIHx8ICd0aGVuJyBpbiB2YWwgfHwgKHZhbC5jb25zdHJ1Y3RvciAmJiB2YWwuY29uc3RydWN0b3IucHJvdG90eXBlID09PSAnQXN5bmNGdW5jdGlvbicpKVxuICAgIHJldHVybiAnUHJvbWlzZSdcbiAgaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBFbGVtZW50KVxuICAgIHJldHVybiB2YWwudGFnTmFtZVxuICBpZiAodHlwZW9mIHZhbC5hc3ltbWV0cmljTWF0Y2ggPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIGAke3ZhbC50b1N0cmluZygpfSAke2Zvcm1hdCh2YWwuc2FtcGxlKX1gXG5cbiAgaWYgKHNlZW4uaGFzKHZhbCkpXG4gICAgcmV0dXJuIHNlZW4uZ2V0KHZhbClcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgY2xvbmU6IGFueVtdID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpXG4gICAgc2Vlbi5zZXQodmFsLCBjbG9uZSlcbiAgICB2YWwuZm9yRWFjaCgoZSwgaSkgPT4ge1xuICAgICAgY2xvbmVbaV0gPSBzZXJpYWxpemVFcnJvcihlLCBzZWVuKVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb25lXG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT2JqZWN0cyB3aXRoIGBFcnJvcmAgY29uc3RydWN0b3JzIGFwcGVhciB0byBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgd29ya2VyIGNvbW11bmljYXRpb25cbiAgICAvLyB1c2luZyBgTWVzc2FnZVBvcnRgLCBzbyB0aGUgc2VyaWFsaXplZCBlcnJvciBvYmplY3QgaXMgYmVpbmcgcmVjcmVhdGVkIGFzIHBsYWluIG9iamVjdC5cbiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICBzZWVuLnNldCh2YWwsIGNsb25lKVxuXG4gICAgbGV0IG9iaiA9IHZhbFxuICAgIHdoaWxlIChvYmogJiYgb2JqICE9PSBPQkpFQ1RfUFJPVE8pIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghKGtleSBpbiBjbG9uZSkpXG4gICAgICAgICAgY2xvbmVba2V5XSA9IHNlcmlhbGl6ZUVycm9yKG9ialtrZXldLCBzZWVuKVxuICAgICAgfSlcbiAgICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopXG4gICAgfVxuICAgIHJldHVybiBjbG9uZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRXJyb3IoZXJyOiBhbnkpIHtcbiAgaWYgKCFlcnIpXG4gICAgcmV0dXJuIGVyclxuICAvLyBzdGFjayBpcyBub3Qgc2VyaWFsaXplZCBpbiB3b3JrZXIgY29tbXVuaWNhdGlvblxuICAvLyB3ZSBzdHJpbmdpZnkgaXQgZmlyc3RcbiAgaWYgKGVyci5zdGFjaylcbiAgICBlcnIuc3RhY2tTdHIgPSBTdHJpbmcoZXJyLnN0YWNrKVxuICBpZiAoZXJyLm5hbWUpXG4gICAgZXJyLm5hbWVTdHIgPSBTdHJpbmcoZXJyLm5hbWUpXG5cbiAgaWYgKHR5cGVvZiBlcnIuZXhwZWN0ZWQgIT09ICdzdHJpbmcnKVxuICAgIGVyci5leHBlY3RlZCA9IHN0cmluZ2lmeShlcnIuZXhwZWN0ZWQpXG4gIGlmICh0eXBlb2YgZXJyLmFjdHVhbCAhPT0gJ3N0cmluZycpXG4gICAgZXJyLmFjdHVhbCA9IHN0cmluZ2lmeShlcnIuYWN0dWFsKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUVycm9yKGVycilcbiAgfVxuICBjYXRjaCAoZTogYW55KSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGZ1bGx5IHNlcmlhbGl6ZSBlcnJvcjogJHtlPy5tZXNzYWdlfS5cXG5Jbm5lciBlcnJvciBtZXNzYWdlOiAke2Vycj8ubWVzc2FnZX1gKSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IEZpbGUsIFJlc29sdmVkQ29uZmlnLCBTdWl0ZSwgVGFza0Jhc2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGNsZWFyQ29udGV4dCwgZGVmYXVsdFN1aXRlIH0gZnJvbSAnLi9zdWl0ZSdcbmltcG9ydCB7IGdldEhvb2tzLCBzZXRIb29rcyB9IGZyb20gJy4vbWFwJ1xuaW1wb3J0IHsgcHJvY2Vzc0Vycm9yIH0gZnJvbSAnLi9lcnJvcidcbmltcG9ydCB7IGNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgeyBydW5TZXR1cEZpbGVzIH0gZnJvbSAnLi9zZXR1cCdcblxuZnVuY3Rpb24gaGFzaChzdHI6IHN0cmluZywgbGVuZ3RoID0gMTApIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ21kNScpXG4gICAgLnVwZGF0ZShzdHIpXG4gICAgLmRpZ2VzdCgnaGV4JylcbiAgICAuc2xpY2UoMCwgbGVuZ3RoKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFRlc3RzKHBhdGhzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykge1xuICBjb25zdCBmaWxlczogRmlsZVtdID0gW11cblxuICBmb3IgKGNvbnN0IGZpbGVwYXRoIG9mIHBhdGhzKSB7XG4gICAgY29uc3QgcGF0aCA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBmaWxlcGF0aClcbiAgICBjb25zdCBmaWxlOiBGaWxlID0ge1xuICAgICAgaWQ6IGhhc2gocGF0aCksXG4gICAgICBuYW1lOiBwYXRoLFxuICAgICAgdHlwZTogJ3N1aXRlJyxcbiAgICAgIG1vZGU6ICdydW4nLFxuICAgICAgZmlsZXBhdGgsXG4gICAgICB0YXNrczogW10sXG4gICAgfVxuXG4gICAgY2xlYXJDb250ZXh0KClcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuU2V0dXBGaWxlcyhjb25maWcpXG4gICAgICBhd2FpdCBpbXBvcnQoZmlsZXBhdGgpXG5cbiAgICAgIGNvbnN0IGRlZmF1bHRUYXNrcyA9IGF3YWl0IGRlZmF1bHRTdWl0ZS5jb2xsZWN0KGZpbGUpXG5cbiAgICAgIHNldEhvb2tzKGZpbGUsIGdldEhvb2tzKGRlZmF1bHRUYXNrcykpXG5cbiAgICAgIGZvciAoY29uc3QgYyBvZiBbLi4uZGVmYXVsdFRhc2tzLnRhc2tzLCAuLi5jb250ZXh0LnRhc2tzXSkge1xuICAgICAgICBpZiAoYy50eXBlID09PSAndGVzdCcpIHtcbiAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goYylcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjLnR5cGUgPT09ICdzdWl0ZScpIHtcbiAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goYylcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgICAgY29uc3Qgc3VpdGUgPSBhd2FpdCBjLmNvbGxlY3QoZmlsZSlcbiAgICAgICAgICBmaWxlLmNvbGxlY3REdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcbiAgICAgICAgICBpZiAoc3VpdGUubmFtZSB8fCBzdWl0ZS50YXNrcy5sZW5ndGgpXG4gICAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goc3VpdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIGZpbGUucmVzdWx0ID0ge1xuICAgICAgICBzdGF0ZTogJ2ZhaWwnLFxuICAgICAgICBlcnJvcjogcHJvY2Vzc0Vycm9yKGUpLFxuICAgICAgfVxuICAgICAgLy8gbm90IHN1cmUgdGh5LCB0aGlzIHRoaXMgbGluZSBpcyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgZXJyb3JcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXDAnKVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUhhc2goZmlsZSlcblxuICAgIGNvbnN0IGhhc09ubHlUYXNrcyA9IHNvbWVUYXNrc0FyZU9ubHkoZmlsZSlcbiAgICBpbnRlcnByZXRUYXNrTW9kZXMoZmlsZSwgY29uZmlnLnRlc3ROYW1lUGF0dGVybiwgaGFzT25seVRhc2tzLCBmYWxzZSwgY29uZmlnLmFsbG93T25seSlcblxuICAgIGZpbGVzLnB1c2goZmlsZSlcbiAgfVxuXG4gIHJldHVybiBmaWxlc1xufVxuXG4vKipcbiAqIElmIGFueSB0YXNrcyBiZWVuIG1hcmtlZCBhcyBgb25seWAsIG1hcmsgYWxsIG90aGVyIHRhc2tzIGFzIGBza2lwYC5cbiAqL1xuZnVuY3Rpb24gaW50ZXJwcmV0VGFza01vZGVzKHN1aXRlOiBTdWl0ZSwgbmFtZVBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAsIG9ubHlNb2RlPzogYm9vbGVhbiwgcGFyZW50SXNPbmx5PzogYm9vbGVhbiwgYWxsb3dPbmx5PzogYm9vbGVhbikge1xuICBjb25zdCBzdWl0ZUlzT25seSA9IHBhcmVudElzT25seSB8fCBzdWl0ZS5tb2RlID09PSAnb25seSdcblxuICBzdWl0ZS50YXNrcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIHRoZSBwYXJlbnQgc3VpdGUgb3IgdGhlIHRhc2sgaXRzZWxmIGFyZSBtYXJrZWQgYXMgaW5jbHVkZWRcbiAgICBjb25zdCBpbmNsdWRlVGFzayA9IHN1aXRlSXNPbmx5IHx8IHQubW9kZSA9PT0gJ29ubHknXG4gICAgaWYgKG9ubHlNb2RlKSB7XG4gICAgICBpZiAodC50eXBlID09PSAnc3VpdGUnICYmIChpbmNsdWRlVGFzayB8fCBzb21lVGFza3NBcmVPbmx5KHQpKSkge1xuICAgICAgICAvLyBEb24ndCBza2lwIHRoaXMgc3VpdGVcbiAgICAgICAgaWYgKHQubW9kZSA9PT0gJ29ubHknKSB7XG4gICAgICAgICAgY2hlY2tBbGxvd09ubHkodCwgYWxsb3dPbmx5KVxuICAgICAgICAgIHQubW9kZSA9ICdydW4nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHQubW9kZSA9PT0gJ3J1bicgJiYgIWluY2x1ZGVUYXNrKSB7IHQubW9kZSA9ICdza2lwJyB9XG4gICAgICBlbHNlIGlmICh0Lm1vZGUgPT09ICdvbmx5Jykge1xuICAgICAgICBjaGVja0FsbG93T25seSh0LCBhbGxvd09ubHkpXG4gICAgICAgIHQubW9kZSA9ICdydW4nXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0LnR5cGUgPT09ICd0ZXN0Jykge1xuICAgICAgaWYgKG5hbWVQYXR0ZXJuICYmICFnZXRUYXNrRnVsbE5hbWUodCkubWF0Y2gobmFtZVBhdHRlcm4pKVxuICAgICAgICB0Lm1vZGUgPSAnc2tpcCdcbiAgICB9XG4gICAgZWxzZSBpZiAodC50eXBlID09PSAnc3VpdGUnKSB7XG4gICAgICBpZiAodC5tb2RlID09PSAnc2tpcCcpXG4gICAgICAgIHNraXBBbGxUYXNrcyh0KVxuICAgICAgZWxzZVxuICAgICAgICBpbnRlcnByZXRUYXNrTW9kZXModCwgbmFtZVBhdHRlcm4sIG9ubHlNb2RlLCBpbmNsdWRlVGFzaywgYWxsb3dPbmx5KVxuICAgIH1cbiAgfSlcblxuICAvLyBpZiBhbGwgc3VidGFza3MgYXJlIHNraXBwZWQsIG1hcmsgYXMgc2tpcFxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3J1bicpIHtcbiAgICBpZiAoc3VpdGUudGFza3MuZXZlcnkoaSA9PiBpLm1vZGUgIT09ICdydW4nKSlcbiAgICAgIHN1aXRlLm1vZGUgPSAnc2tpcCdcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXNrRnVsbE5hbWUodGFzazogVGFza0Jhc2UpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dGFzay5zdWl0ZSA/IGAke2dldFRhc2tGdWxsTmFtZSh0YXNrLnN1aXRlKX0gYCA6ICcnfSR7dGFzay5uYW1lfWBcbn1cblxuZnVuY3Rpb24gc29tZVRhc2tzQXJlT25seShzdWl0ZTogU3VpdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN1aXRlLnRhc2tzLnNvbWUodCA9PiB0Lm1vZGUgPT09ICdvbmx5JyB8fCAodC50eXBlID09PSAnc3VpdGUnICYmIHNvbWVUYXNrc0FyZU9ubHkodCkpKVxufVxuXG5mdW5jdGlvbiBza2lwQWxsVGFza3Moc3VpdGU6IFN1aXRlKSB7XG4gIHN1aXRlLnRhc2tzLmZvckVhY2goKHQpID0+IHtcbiAgICBpZiAodC5tb2RlID09PSAncnVuJykge1xuICAgICAgdC5tb2RlID0gJ3NraXAnXG4gICAgICBpZiAodC50eXBlID09PSAnc3VpdGUnKVxuICAgICAgICBza2lwQWxsVGFza3ModClcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrQWxsb3dPbmx5KHRhc2s6IFRhc2tCYXNlLCBhbGxvd09ubHk/OiBib29sZWFuKSB7XG4gIGlmIChhbGxvd09ubHkpIHJldHVyblxuICB0YXNrLnJlc3VsdCA9IHtcbiAgICBzdGF0ZTogJ2ZhaWwnLFxuICAgIGVycm9yOiBwcm9jZXNzRXJyb3IobmV3IEVycm9yKCdbVml0ZXN0XSBVbmV4cGVjdGVkIC5vbmx5IG1vZGlmaWVyLiBSZW1vdmUgaXQgb3IgcGFzcyAtLWFsbG93T25seSBhcmd1ZW1lbnQgdG8gYnlwYXNzIHRoaXMgZXJyb3InKSksXG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaChwYXJlbnQ6IFN1aXRlKSB7XG4gIHBhcmVudC50YXNrcy5mb3JFYWNoKCh0LCBpZHgpID0+IHtcbiAgICB0LmlkID0gYCR7cGFyZW50LmlkfV8ke2lkeH1gXG4gICAgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJylcbiAgICAgIGNhbGN1bGF0ZUhhc2godClcbiAgfSlcbn1cbiIsImltcG9ydCB7IHBlcmZvcm1hbmNlIH0gZnJvbSAncGVyZl9ob29rcydcbmltcG9ydCB0eXBlIHsgSG9va0xpc3RlbmVyLCBSZXNvbHZlZENvbmZpZywgU3VpdGUsIFN1aXRlSG9va3MsIFRhc2ssIFRhc2tSZXN1bHQsIFRlc3QgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHZpIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL3ZpJ1xuaW1wb3J0IHsgZ2V0U25hcHNob3RDbGllbnQgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvc25hcHNob3QvY2hhaSdcbmltcG9ydCB7IGdldEZ1bGxOYW1lLCBoYXNGYWlsZWQsIGhhc1Rlc3RzLCBwYXJ0aXRpb25TdWl0ZUNoaWxkcmVuIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBnZXRTdGF0ZSwgc2V0U3RhdGUgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LWV4cGVjdCdcbmltcG9ydCB7IHRha2VDb3ZlcmFnZSB9IGZyb20gJy4uL2ludGVncmF0aW9ucy9jb3ZlcmFnZSdcbmltcG9ydCB7IGdldEZuLCBnZXRIb29rcyB9IGZyb20gJy4vbWFwJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMnXG5pbXBvcnQgeyBjb2xsZWN0VGVzdHMgfSBmcm9tICcuL2NvbGxlY3QnXG5pbXBvcnQgeyBwcm9jZXNzRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FsbFN1aXRlSG9vazxUIGV4dGVuZHMga2V5b2YgU3VpdGVIb29rcz4oc3VpdGU6IFN1aXRlLCBuYW1lOiBULCBhcmdzOiBTdWl0ZUhvb2tzW1RdWzBdIGV4dGVuZHMgSG9va0xpc3RlbmVyPGluZmVyIEE+ID8gQSA6IG5ldmVyKSB7XG4gIGlmIChuYW1lID09PSAnYmVmb3JlRWFjaCcgJiYgc3VpdGUuc3VpdGUpXG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZS5zdWl0ZSwgbmFtZSwgYXJncylcblxuICBhd2FpdCBQcm9taXNlLmFsbChnZXRIb29rcyhzdWl0ZSlbbmFtZV0ubWFwKGZuID0+IGZuKC4uLihhcmdzIGFzIGFueSkpKSlcblxuICBpZiAobmFtZSA9PT0gJ2FmdGVyRWFjaCcgJiYgc3VpdGUuc3VpdGUpXG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZS5zdWl0ZSwgbmFtZSwgYXJncylcbn1cblxuY29uc3QgcGFja3MgPSBuZXcgTWFwPHN0cmluZywgVGFza1Jlc3VsdHx1bmRlZmluZWQ+KClcbmxldCB1cGRhdGVUaW1lcjogYW55XG5sZXQgcHJldmlvdXNVcGRhdGU6IFByb21pc2U8dm9pZD58dW5kZWZpbmVkXG5cbmZ1bmN0aW9uIHVwZGF0ZVRhc2sodGFzazogVGFzaykge1xuICBwYWNrcy5zZXQodGFzay5pZCwgdGFzay5yZXN1bHQpXG5cbiAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVyKVxuICB1cGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHByZXZpb3VzVXBkYXRlID0gc2VuZFRhc2tzVXBkYXRlKClcbiAgfSwgMTApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRUYXNrc1VwZGF0ZSgpIHtcbiAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVyKVxuICBhd2FpdCBwcmV2aW91c1VwZGF0ZVxuXG4gIGlmIChwYWNrcy5zaXplKSB7XG4gICAgY29uc3QgcCA9IHJwYygpLm9uVGFza1VwZGF0ZShBcnJheS5mcm9tKHBhY2tzKSlcbiAgICBwYWNrcy5jbGVhcigpXG4gICAgcmV0dXJuIHBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh0ZXN0OiBUZXN0KSB7XG4gIGlmICh0ZXN0Lm1vZGUgIT09ICdydW4nKVxuICAgIHJldHVyblxuXG4gIGlmICh0ZXN0LnJlc3VsdD8uc3RhdGUgPT09ICdmYWlsJykge1xuICAgIHVwZGF0ZVRhc2sodGVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcblxuICB0ZXN0LnJlc3VsdCA9IHtcbiAgICBzdGF0ZTogJ3J1bicsXG4gIH1cbiAgdXBkYXRlVGFzayh0ZXN0KVxuXG4gIGNsZWFyTW9kdWxlTW9ja3MoKVxuXG4gIGdldFNuYXBzaG90Q2xpZW50KCkuc2V0VGVzdCh0ZXN0KVxuXG4gIF9fdml0ZXN0X3dvcmtlcl9fLmN1cnJlbnQgPSB0ZXN0XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHRlc3Quc3VpdGUsICdiZWZvcmVFYWNoJywgW3Rlc3QsIHRlc3Quc3VpdGVdKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIGFzc2VydGlvbkNhbGxzOiAwLFxuICAgICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiBmYWxzZSxcbiAgICAgIGlzRXhwZWN0aW5nQXNzZXJ0aW9uc0Vycm9yOiBudWxsLFxuICAgICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyOiBudWxsLFxuICAgICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3I6IG51bGwsXG4gICAgICB0ZXN0UGF0aDogdGVzdC5zdWl0ZS5maWxlPy5maWxlcGF0aCxcbiAgICAgIGN1cnJlbnRUZXN0TmFtZTogZ2V0RnVsbE5hbWUodGVzdCksXG4gICAgfSlcbiAgICBhd2FpdCBnZXRGbih0ZXN0KSgpXG4gICAgY29uc3QgeyBhc3NlcnRpb25DYWxscywgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyLCBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXJFcnJvciwgaXNFeHBlY3RpbmdBc3NlcnRpb25zLCBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvciB9ID0gZ2V0U3RhdGUoKVxuICAgIGlmIChleHBlY3RlZEFzc2VydGlvbnNOdW1iZXIgIT09IG51bGwgJiYgYXNzZXJ0aW9uQ2FsbHMgIT09IGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlcilcbiAgICAgIHRocm93IGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yXG4gICAgaWYgKGlzRXhwZWN0aW5nQXNzZXJ0aW9ucyA9PT0gdHJ1ZSAmJiBhc3NlcnRpb25DYWxscyA9PT0gMClcbiAgICAgIHRocm93IGlzRXhwZWN0aW5nQXNzZXJ0aW9uc0Vycm9yXG5cbiAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdwYXNzJ1xuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICB0ZXN0LnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihlKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHRlc3Quc3VpdGUsICdhZnRlckVhY2gnLCBbdGVzdCwgdGVzdC5zdWl0ZV0pXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgIHRlc3QucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKGUpXG4gIH1cblxuICAvLyBpZiB0ZXN0IGlzIG1hcmtlZCB0byBiZSBmYWlsZWQsIGZsaXAgdGhlIHJlc3VsdFxuICBpZiAodGVzdC5mYWlscykge1xuICAgIGlmICh0ZXN0LnJlc3VsdC5zdGF0ZSA9PT0gJ3Bhc3MnKSB7XG4gICAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgdGVzdC5yZXN1bHQuZXJyb3IgPSBwcm9jZXNzRXJyb3IobmV3IEVycm9yKCdFeHBlY3QgdGVzdCB0byBmYWlsJykpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAncGFzcydcbiAgICAgIHRlc3QucmVzdWx0LmVycm9yID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgZ2V0U25hcHNob3RDbGllbnQoKS5jbGVhclRlc3QoKVxuXG4gIHRlc3QucmVzdWx0LmR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxuXG4gIF9fdml0ZXN0X3dvcmtlcl9fLmN1cnJlbnQgPSB1bmRlZmluZWRcblxuICB1cGRhdGVUYXNrKHRlc3QpXG59XG5cbmZ1bmN0aW9uIG1hcmtUYXNrc0FzU2tpcHBlZChzdWl0ZTogU3VpdGUpIHtcbiAgc3VpdGUudGFza3MuZm9yRWFjaCgodCkgPT4ge1xuICAgIHQubW9kZSA9ICdza2lwJ1xuICAgIHQucmVzdWx0ID0geyAuLi50LnJlc3VsdCwgc3RhdGU6ICdza2lwJyB9XG4gICAgdXBkYXRlVGFzayh0KVxuICAgIGlmICh0LnR5cGUgPT09ICdzdWl0ZScpIG1hcmtUYXNrc0FzU2tpcHBlZCh0KVxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU3VpdGUoc3VpdGU6IFN1aXRlKSB7XG4gIGlmIChzdWl0ZS5yZXN1bHQ/LnN0YXRlID09PSAnZmFpbCcpIHtcbiAgICBtYXJrVGFza3NBc1NraXBwZWQoc3VpdGUpXG4gICAgdXBkYXRlVGFzayhzdWl0ZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcblxuICBzdWl0ZS5yZXN1bHQgPSB7XG4gICAgc3RhdGU6ICdydW4nLFxuICB9XG5cbiAgdXBkYXRlVGFzayhzdWl0ZSlcblxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3NraXAnKSB7XG4gICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3NraXAnXG4gIH1cbiAgZWxzZSBpZiAoc3VpdGUubW9kZSA9PT0gJ3RvZG8nKSB7XG4gICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3RvZG8nXG4gIH1cbiAgZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUsICdiZWZvcmVBbGwnLCBbc3VpdGVdKVxuXG4gICAgICBmb3IgKGNvbnN0IHRhc2tzR3JvdXAgb2YgcGFydGl0aW9uU3VpdGVDaGlsZHJlbihzdWl0ZSkpIHtcbiAgICAgICAgaWYgKHRhc2tzR3JvdXBbMF0uY29uY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRhc2tzR3JvdXAubWFwKGMgPT4gcnVuU3VpdGVDaGlsZChjKSkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjIG9mIHRhc2tzR3JvdXApXG4gICAgICAgICAgICBhd2FpdCBydW5TdWl0ZUNoaWxkKGMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZSwgJ2FmdGVyQWxsJywgW3N1aXRlXSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgc3VpdGUucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKGUpXG4gICAgfVxuICB9XG4gIHN1aXRlLnJlc3VsdC5kdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcblxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3J1bicpIHtcbiAgICBpZiAoIWhhc1Rlc3RzKHN1aXRlKSkge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgICBpZiAoIXN1aXRlLnJlc3VsdC5lcnJvcilcbiAgICAgICAgc3VpdGUucmVzdWx0LmVycm9yID0gbmV3IEVycm9yKGBObyB0ZXN0cyBmb3VuZCBpbiBzdWl0ZSAke3N1aXRlLm5hbWV9YClcbiAgICB9XG4gICAgZWxzZSBpZiAoaGFzRmFpbGVkKHN1aXRlKSkge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3Bhc3MnXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFzayhzdWl0ZSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuU3VpdGVDaGlsZChjOiBUYXNrKSB7XG4gIHJldHVybiBjLnR5cGUgPT09ICd0ZXN0J1xuICAgID8gcnVuVGVzdChjKVxuICAgIDogcnVuU3VpdGUoYylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlcyhzdWl0ZXM6IFN1aXRlW10pIHtcbiAgZm9yIChjb25zdCBzdWl0ZSBvZiBzdWl0ZXMpXG4gICAgYXdhaXQgcnVuU3VpdGUoc3VpdGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFRlc3RzKHBhdGhzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGNvbGxlY3RUZXN0cyhwYXRocywgY29uZmlnKVxuXG4gIHJwYygpLm9uQ29sbGVjdGVkKGZpbGVzKVxuXG4gIGF3YWl0IHJ1blN1aXRlcyhmaWxlcylcblxuICB0YWtlQ292ZXJhZ2UoKVxuXG4gIGF3YWl0IGdldFNuYXBzaG90Q2xpZW50KCkuc2F2ZVNuYXAoKVxuXG4gIGF3YWl0IHNlbmRUYXNrc1VwZGF0ZSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1vZHVsZU1vY2tzKCkge1xuICBjb25zdCB7IGNsZWFyTW9ja3MsIG1vY2tSZXNldCwgcmVzdG9yZU1vY2tzIH0gPSBfX3ZpdGVzdF93b3JrZXJfXy5jb25maWdcblxuICAvLyBzaW5jZSBlYWNoIGZ1bmN0aW9uIGNhbGxzIGFub3RoZXIsIHdlIGNhbiBqdXN0IGNhbGwgb25lXG4gIGlmIChyZXN0b3JlTW9ja3MpXG4gICAgdmkucmVzdG9yZUFsbE1vY2tzKClcbiAgZWxzZSBpZiAobW9ja1Jlc2V0KVxuICAgIHZpLnJlc2V0QWxsTW9ja3MoKVxuICBlbHNlIGlmIChjbGVhck1vY2tzKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxufVxuIiwiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcydcbmltcG9ydCB0eXBlIHsgQnVpbHRpbkVudmlyb25tZW50LCBSZXNvbHZlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgc2V0dXBHbG9iYWxFbnYsIHdpdGhFbnYgfSBmcm9tICcuL3NldHVwJ1xuaW1wb3J0IHsgc3RhcnRUZXN0cyB9IGZyb20gJy4vcnVuJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZXR1cEdsb2JhbEVudihjb25maWcpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGYtOCcpXG5cbiAgICBjb25zdCBlbnYgPSBjb2RlLm1hdGNoKC9AKD86dml0ZXN0fGplc3QpLWVudmlyb25tZW50XFxzKz8oW1xcdy1dKylcXGIvKT8uWzFdIHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnbm9kZSdcblxuICAgIGlmICghWydub2RlJywgJ2pzZG9tJywgJ2hhcHB5LWRvbSddLmluY2x1ZGVzKGVudikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVudmlyb25tZW50OiAke2Vudn1gKVxuXG4gICAgX192aXRlc3Rfd29ya2VyX18uZmlsZXBhdGggPSBmaWxlXG5cbiAgICBhd2FpdCB3aXRoRW52KGVudiBhcyBCdWlsdGluRW52aXJvbm1lbnQsIGNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnMgfHwge30sIGFzeW5jKCkgPT4ge1xuICAgICAgYXdhaXQgc3RhcnRUZXN0cyhbZmlsZV0sIGNvbmZpZylcbiAgICB9KVxuXG4gICAgX192aXRlc3Rfd29ya2VyX18uZmlsZXBhdGggPSB1bmRlZmluZWRcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJfX3NwcmVhZFZhbHVlcyIsInJlcXVpcmUiLCJ0aGlzIiwibmF0dXJhbENvbXBhcmVNb2R1bGUiLCJwcmV0dHlGb3JtYXQiLCJwYXRoIiwibmF0dXJhbENvbXBhcmUiLCJmc3AiLCJmcyIsIkFzeW1tZXRyaWNNYXRjaGVyIiwicHJldHR5Rm9ybWF0UGx1Z2lucyIsIl9fZGVmUHJvcHMiLCJfX2dldE93blByb3BEZXNjcyIsIl9fc3ByZWFkUHJvcHMiLCJjaGFpIiwicGVyZm9ybWFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxXQUFlO0FBQ2YsRUFBRSxJQUFJLEVBQUUsTUFBTTtBQUNkLEVBQUUsTUFBTSxLQUFLLEdBQUc7QUFDaEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxRQUFRLEdBQUc7QUFDakIsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxDQUFDOztBQ1JELE1BQU0sV0FBVyxHQUFHO0FBQ3BCLEVBQUUsY0FBYztBQUNoQixFQUFFLEtBQUs7QUFDUCxFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGFBQWE7QUFDZixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxVQUFVO0FBQ1osRUFBRSxhQUFhO0FBQ2YsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLFNBQVM7QUFDWCxFQUFFLGNBQWM7QUFDaEIsRUFBRSxVQUFVO0FBQ1osRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsY0FBYztBQUNoQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLGFBQWE7QUFDZixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLGVBQWU7QUFDakIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsZUFBZTtBQUNqQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLFlBQVk7QUFDZCxFQUFFLG9CQUFvQjtBQUN0QixFQUFFLGVBQWU7QUFDakIsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxXQUFXO0FBQ2IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsT0FBTztBQUNULEVBQUUsWUFBWTtBQUNkLEVBQUUsYUFBYTtBQUNmLEVBQUUsY0FBYztBQUNoQixFQUFFLFlBQVk7QUFDZCxFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGVBQWU7QUFDakIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsZUFBZTtBQUNqQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLFNBQVM7QUFDWCxFQUFFLFlBQVk7QUFDZCxFQUFFLFlBQVk7QUFDZCxFQUFFLFlBQVk7QUFDZCxFQUFFLGVBQWU7QUFDakIsRUFBRSxZQUFZO0FBQ2QsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxZQUFZO0FBQ2QsRUFBRSxTQUFTO0FBQ1gsRUFBRSxVQUFVO0FBQ1osRUFBRSxVQUFVO0FBQ1osRUFBRSxTQUFTO0FBQ1gsRUFBRSxRQUFRO0FBQ1YsRUFBRSxhQUFhO0FBQ2YsRUFBRSxXQUFXO0FBQ2IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsUUFBUTtBQUNWLEVBQUUsVUFBVTtBQUNaLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsZUFBZTtBQUNqQixFQUFFLFdBQVc7QUFDYixFQUFFLGVBQWU7QUFDakIsRUFBRSxVQUFVO0FBQ1osRUFBRSwyQkFBMkI7QUFDN0IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxXQUFXO0FBQ2IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsWUFBWTtBQUNkLEVBQUUsZUFBZTtBQUNqQixFQUFFLE9BQU87QUFDVCxFQUFFLGFBQWE7QUFDZixFQUFFLFdBQVc7QUFDYixFQUFFLFNBQVM7QUFDWCxFQUFFLHVCQUF1QjtBQUN6QixFQUFFLFlBQVk7QUFDZCxFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLFNBQVM7QUFDWCxFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGFBQWE7QUFDZixFQUFFLE9BQU87QUFDVCxDQUFDLENBQUM7QUFDRixNQUFNLFVBQVUsR0FBRztBQUNuQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLFNBQVM7QUFDWCxFQUFFLGFBQWE7QUFDZixFQUFFLGVBQWU7QUFDakIsRUFBRSxVQUFVO0FBQ1osRUFBRSxPQUFPO0FBQ1QsRUFBRSxRQUFRO0FBQ1YsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxTQUFTO0FBQ1gsRUFBRSxhQUFhO0FBQ2YsRUFBRSxZQUFZO0FBQ2QsRUFBRSxRQUFRO0FBQ1YsRUFBRSxVQUFVO0FBQ1osRUFBRSxZQUFZO0FBQ2QsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxZQUFZO0FBQ2QsRUFBRSxhQUFhO0FBQ2YsRUFBRSxhQUFhO0FBQ2YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxhQUFhO0FBQ2YsRUFBRSxPQUFPO0FBQ1QsRUFBRSxRQUFRO0FBQ1YsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxVQUFVO0FBQ1osRUFBRSxVQUFVO0FBQ1osRUFBRSxRQUFRO0FBQ1YsRUFBRSxZQUFZO0FBQ2QsRUFBRSxXQUFXO0FBQ2IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxTQUFTO0FBQ1gsRUFBRSxRQUFRO0FBQ1YsRUFBRSxVQUFVO0FBQ1osRUFBRSxZQUFZO0FBQ2QsRUFBRSxVQUFVO0FBQ1osRUFBRSxXQUFXO0FBQ2IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxRQUFRO0FBQ1YsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7O0FDck5sRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUM3QixFQUFFLE9BQU87QUFDVCxDQUFDLENBQUMsQ0FBQztBQUNJLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDM0MsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztBQUNsRixJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDekIsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU07QUFDbkIsTUFBTSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ04sRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ2JBLElBQUlBLFdBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUlDLHFCQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDbkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7QUFDekQsSUFBSUMsaUJBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUdKLFdBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hLLElBQUlLLGdCQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQy9CLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUlILGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNsQyxNQUFNRSxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEMsRUFBRSxJQUFJSCxxQkFBbUI7QUFDekIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJQSxxQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUlFLGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNwQyxRQUFRQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJLFNBQVMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEtBQUs7QUFDckMsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU07QUFDekIsSUFBSSxJQUFJRixjQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDcEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJRCxxQkFBbUI7QUFDM0MsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJQSxxQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNsRCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUlFLGNBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0RSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBR0YsWUFBZTtBQUNmLEVBQUUsSUFBSSxFQUFFLE9BQU87QUFDZixFQUFFLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUN0QyxJQUFJLE1BQU07QUFDVixNQUFNLFNBQVM7QUFDZixNQUFNLEtBQUs7QUFDWCxNQUFNLGNBQWM7QUFDcEIsTUFBTSxjQUFjO0FBQ3BCLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBRTtBQUN0QixNQUFNLElBQUksR0FBRyxpQkFBaUI7QUFDOUIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxHQUFHLEdBQUcsdUJBQXVCO0FBQ25DLE1BQU0sV0FBVyxHQUFHLFdBQVc7QUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJO0FBQzlCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSztBQUNsQyxNQUFNLFVBQVUsR0FBRyxhQUFhO0FBQ2hDLE1BQU0sU0FBUztBQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUs7QUFDckIsTUFBTSxTQUFTLEdBQUcsS0FBSztBQUN2QixLQUFLLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFO0FBQ3hDLE1BQU0sTUFBTTtBQUNaLE1BQU0sV0FBVztBQUNqQixNQUFNLEtBQUs7QUFDWCxNQUFNLGFBQWE7QUFDbkIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sV0FBVztBQUNqQixNQUFNLFNBQVM7QUFDZixNQUFNLFdBQVc7QUFDakIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRUUsZ0JBQWMsQ0FBQztBQUMvQyxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLFNBQVMsRUFBRSxTQUFTLEtBQUssU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN0RixNQUFNLFVBQVU7QUFDaEIsTUFBTSxHQUFHO0FBQ1QsTUFBTSxjQUFjLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN0RyxNQUFNLFNBQVMsRUFBRSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDckQsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sU0FBUztBQUNmLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQsSUFBSSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDNUIsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDekMsUUFBUSxHQUFHLEdBQUc7QUFDZCxVQUFVLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDckMsWUFBWSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsVUFBVSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsU0FBUztBQUNULFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNmLFVBQVUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUztBQUNULFFBQVEsWUFBWSxFQUFFLElBQUk7QUFDMUIsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPO0FBQ1gsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE9BQU87QUFDUCxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsQ0FBQzs7QUM1RkQsWUFBZTtBQUNmLEVBQUUsSUFBSSxFQUFFLFdBQVc7QUFDbkIsRUFBRSxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkQsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQzdCLElBQUksTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDckMsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtBQUM1QixNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN6QyxRQUFRLEdBQUcsR0FBRztBQUNkLFVBQVUsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNyQyxZQUFZLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxVQUFVLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDZixVQUFVLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxRQUFRLFlBQVksRUFBRSxJQUFJO0FBQzFCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTztBQUNYLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUN4QixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxDQUFDOztBQzFCTSxNQUFNLFlBQVksR0FBRztBQUM1QixFQUFFLElBQUk7QUFDTixFQUFFLEtBQUs7QUFDUCxFQUFFLFdBQVcsRUFBRSxLQUFLO0FBQ3BCLENBQUM7Ozs7O0FDUEQsQ0FBQyxXQUFXO0FBQ1osQ0FBQyxDQUFDLFNBQVMsVUFBVSxFQUFFO0FBQ3ZCLEVBQUUsSUFBSSxPQUFPQyxlQUFPLEtBQUssVUFBVSxJQUFJLFFBQWMsS0FBSyxRQUFRLElBQUksUUFBYSxLQUFLLFFBQVEsRUFBRTtBQUNsRyxHQUFHLE9BQU8saUJBQWlCLFVBQVUsQ0FBQztBQUN0QyxHQUFHLE1BSU07QUFDVCxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMxQixFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsRUFBRSxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDL0M7QUFDQSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLFVBQVUsUUFBUSxFQUFFO0FBQzNELEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsR0FBRyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUN2QztBQUNBLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ3RDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDN0IsSUFBSSwwQ0FBMEM7QUFDOUMsSUFBSSw4Q0FBOEM7QUFDbEQsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxRQUFRO0FBQ1osSUFBSSxDQUFDO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN0RCxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFNBQVMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7QUFDckMsR0FBRyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixJQUFJO0FBQ0osR0FBRyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssT0FBTyxRQUFRLENBQUMsRUFBRTtBQUM1QyxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLElBQUk7QUFDSixHQUFHLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtBQUMzRCxJQUFJLE9BQU8sUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUMvQixJQUFJO0FBQ0osR0FBRyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixJQUFJO0FBQ0o7QUFDQSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzVDLEtBQUssT0FBTyxLQUFLLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ3pDLEtBQUssT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ25DLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxDQUFDO0FBQ1IsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJO0FBQ0o7QUFDQSxHQUFHLElBQUksUUFBUSxZQUFZLElBQUksRUFBRTtBQUNqQyxJQUFJLElBQUksTUFBTSxZQUFZLElBQUksRUFBRTtBQUNoQyxLQUFLLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwRCxLQUFLLE1BQU07QUFDWCxLQUFLLE9BQU8sS0FBSyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQSxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUU7QUFDckQsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLEtBQUssUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUMvRCxLQUFLLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ25DLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDO0FBQ04sR0FBRztBQUNILEVBQUUsQ0FBQyxDQUFDO0FBQ0o7QUFDQSxDQUFDLEVBQUUsSUFBSSxDQUFDQyxjQUFJLENBQUM7Ozs7Ozs7QUM5RWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztBQUNiLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLElBQUksR0FBRyxDQUFDO0FBQ1gsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNYLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFRO0FBQzdCO0FBQ0EsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNsQyxFQUFFLElBQUksSUFBSSxFQUFFO0FBQ1osR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNILEVBQUUsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUM7QUFDdEQsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUk7QUFDcEcsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDbkIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFO0FBQzFCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNkLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEdBQUc7QUFDdkMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQztBQUM1QixFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7QUFDNUQsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDO0FBQ2pDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUM7QUFDckMsR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNYLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDckQsRUFBRTtBQUNGLENBQUMsT0FBTyxDQUFDO0FBQ1QsRUFBQztBQUNEO0FBQ0EsSUFBSTtBQUNKLENBQUNDLHdCQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNaLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEM7Ozs7QUN4REEsSUFBSVIsV0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDdEMsSUFBSUMscUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3ZELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJQyxpQkFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBR0osV0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEssSUFBSUssZ0JBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSUgsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2xDLE1BQU1FLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUlILHFCQUFtQjtBQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUlBLHFCQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSUUsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVFDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQVNLLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUN0QyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM3RCxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxLQUFLO0FBQ3pELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ25DLElBQUksSUFBSTtBQUNSLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRSxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixLQUFLLENBQUMsTUFBTTtBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNyQyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxLQUFLLEtBQUssU0FBUztBQUN6RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUNLLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZFLEVBQUUsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNKLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUN6QixTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUFFO0FBQ2pFLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQ0ssUUFBWSxDQUFDLEdBQUcsRUFBRUosZ0JBQWMsQ0FBQztBQUM1RCxJQUFJLFdBQVc7QUFDZixJQUFJLE1BQU07QUFDVixJQUFJLE9BQU8sRUFBRSxjQUFjLEVBQUU7QUFDN0IsSUFBSSxpQkFBaUI7QUFDckIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBWU0sU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUU7QUFDMUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFDRCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUNNLFNBQVMscUJBQXFCLENBQUMsUUFBUSxFQUFFO0FBQ2hELEVBQUUsSUFBSTtBQUNOLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQ0ssS0FBSSxDQUFDLElBQUksQ0FBQ0EsS0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekUsR0FBRyxDQUFDLE1BQU07QUFDVixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO0FBQ25DLEVBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBQ00sZUFBZSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO0FBQ25FLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNDLGdCQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxFQUFFLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTUMsUUFBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFDOUQ7QUFDQSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUNNLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRTtBQUMxQyxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQzdCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN4RixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN2QyxFQUFFLElBQUksZUFBZSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFDbEIsSUFBSSxlQUFlLEdBQUcsZUFBZSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUosR0FBRztBQUNILEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNsRCxFQUFFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssS0FBSztBQUMzQyxJQUFJLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN0QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3pFLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN4QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDNUUsS0FBSyxNQUFNO0FBQ1gsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBQzFDLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUNNLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM1QyxJQUFJLE1BQU0sWUFBWSxHQUFHUCxnQkFBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ3pDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQzFELFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUM7QUFDNUIsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxVQUFVLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3QyxRQUFRLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxZQUFZLENBQUM7QUFDeEIsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdELElBQUksT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQzVJTyxlQUFlLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtBQUNyRCxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxPQUFPLCtCQUFjLENBQUMsRUFBRSxPQUFPLENBQUM7QUFDN0QsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQzFELElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNUSxRQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLE1BQU0saUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNyQyxJQUFJLElBQUksV0FBVyxLQUFLLElBQUk7QUFDNUIsTUFBTSxNQUFNQSxRQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxNQUFNLGdCQUFnQixHQUFHLDBFQUEwRSxDQUFDO0FBQ3BHLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNqQixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsRUFBRSxJQUFJLFNBQVMsS0FBSyxJQUFJO0FBQ3hCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNoRCxFQUFFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QyxFQUFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlHLEVBQUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QyxFQUFFLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFDRCxNQUFNLFVBQVUsR0FBRyx1RkFBdUYsQ0FBQztBQUNwRyxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDakIsSUFBSSxPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDckIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNwQyxTQUFTLHdCQUF3QixDQUFDLGNBQWMsRUFBRTtBQUN6RCxFQUFFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsRUFBRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN6QixJQUFJLE9BQU8sY0FBYyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDdkUsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9DLFFBQVEsT0FBTyxjQUFjLENBQUM7QUFDOUIsT0FBTztBQUNQLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0IsRUFBRSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCOztBQzVGQSxJQUFJYixXQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJQyxxQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDdkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ25ELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUlDLGlCQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHSixXQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJSyxnQkFBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztBQUMvQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsSUFBSSxJQUFJSCxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTUUsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsSUFBSUgscUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSUEscUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJRSxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDcEMsUUFBUUMsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBZWEsTUFBTSxhQUFhLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDeEYsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBR0MsZ0JBQWMsQ0FBQztBQUMxQyxNQUFNLG1CQUFtQixFQUFFLEtBQUs7QUFDaEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksS0FBSztBQUNsRCxNQUFNLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVE7QUFDbEQsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqRCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRTtBQUNsQyxJQUFJLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLElBQUksSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQzNCLE1BQU0sT0FBTyxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7QUFDaEcsSUFBSSxPQUFPLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3RCxHQUFHO0FBQ0gsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRTtBQUNqRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQzFCLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNoRSxNQUFNLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN6QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQ0EsZ0JBQWMsQ0FBQztBQUNoRCxRQUFRLFFBQVEsRUFBRSxrQkFBa0I7QUFDcEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQ25ELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFLE1BQU0sSUFBSSxHQUFHO0FBQ2YsSUFBSSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4RSxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztBQUM1RCxJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsb0JBQW9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUNqRSxJQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ25CLE1BQU0sT0FBTyxFQUFFLEtBQUs7QUFDcEIsTUFBTSxLQUFLLEVBQUUsS0FBSztBQUNsQixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQy9ELE1BQU0sSUFBSSxvQkFBb0I7QUFDOUIsUUFBUSxNQUFNLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sSUFBSSxrQkFBa0I7QUFDNUIsUUFBUSxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsS0FBSyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUMzRSxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLO0FBQ3hDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0gsRUFBRSxpQkFBaUIsR0FBRztBQUN0QixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSCxFQUFFLGdCQUFnQixHQUFHO0FBQ3JCLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxtQkFBbUIsR0FBRztBQUN4QixJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDcEUsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDO0FBQ1IsSUFBSSxRQUFRO0FBQ1osSUFBSSxRQUFRO0FBQ1osSUFBSSxHQUFHO0FBQ1AsSUFBSSxjQUFjO0FBQ2xCLElBQUksUUFBUTtBQUNaLElBQUksS0FBSztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFFLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkQsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDekQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNyRyxJQUFJLE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RSxJQUFJLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sSUFBSSxHQUFHLGVBQWUsS0FBSyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN6RSxJQUFJLE1BQU0sV0FBVyxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QyxJQUFJLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzlFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDM0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQ25ELEtBQUs7QUFDTCxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxtQkFBbUIsTUFBTSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZLLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRTtBQUMxQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbkIsVUFBVSxJQUFJLFdBQVc7QUFDekIsWUFBWSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDMUUsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekIsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixPQUFPO0FBQ1AsTUFBTSxPQUFPO0FBQ2IsUUFBUSxNQUFNLEVBQUUsRUFBRTtBQUNsQixRQUFRLEtBQUs7QUFDYixRQUFRLFFBQVEsRUFBRSxFQUFFO0FBQ3BCLFFBQVEsR0FBRztBQUNYLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsT0FBTyxDQUFDO0FBQ1IsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsT0FBTztBQUNmLFVBQVUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDO0FBQzNELFVBQVUsS0FBSztBQUNmLFVBQVUsUUFBUSxFQUFFLGVBQWUsS0FBSyxLQUFLLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEcsVUFBVSxHQUFHO0FBQ2IsVUFBVSxJQUFJLEVBQUUsS0FBSztBQUNyQixTQUFTLENBQUM7QUFDVixPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixRQUFRLE9BQU87QUFDZixVQUFVLE1BQU0sRUFBRSxFQUFFO0FBQ3BCLFVBQVUsS0FBSztBQUNmLFVBQVUsUUFBUSxFQUFFLEVBQUU7QUFDdEIsVUFBVSxHQUFHO0FBQ2IsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQixTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUN2TEEsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQVEsS0FBS0ssS0FBSSxDQUFDLElBQUksQ0FBQ0EsS0FBSSxDQUFDLElBQUksQ0FBQ0EsS0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUVBLEtBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwSSxNQUFNLGNBQWMsQ0FBQztBQUM1QixFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEdBQUc7QUFDSCxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDbkQsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhO0FBQzVCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDOUMsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDM0gsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN2QixHQUFHO0FBQ0gsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFO0FBQ2pGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ2xCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQ2pFLElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7QUFDeEMsTUFBTSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVE7QUFDbkQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7QUFDNUYsTUFBTSxJQUFJO0FBQ1YsUUFBUSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsUUFBUSxJQUFJLENBQUMsS0FBSztBQUNsQixVQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUM7QUFDQSxVQUFVLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ3BCLFFBQVEsR0FBRyxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQztBQUM1QyxRQUFRLE1BQU0sR0FBRyxDQUFDO0FBQ2xCLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNyQixNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7QUFDckUsTUFBTSxRQUFRO0FBQ2QsTUFBTSxRQUFRO0FBQ2QsTUFBTSxRQUFRO0FBQ2QsTUFBTSxLQUFLO0FBQ1gsTUFBTSxjQUFjO0FBQ3BCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2YsTUFBTSxJQUFJO0FBQ1YsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdEUsT0FBTyxDQUFDLE9BQU8sTUFBTSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZFLFFBQVEsTUFBTSxNQUFNLENBQUM7QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxNQUFNLFFBQVEsR0FBRztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7QUFDN0MsTUFBTSxPQUFPO0FBQ2IsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzlFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNILENBQUM7QUFDTSxlQUFlLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUU7QUFDekQsRUFBRSxNQUFNLFFBQVEsR0FBRztBQUNuQixJQUFJLFFBQVE7QUFDWixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxXQUFXLEVBQUUsS0FBSztBQUN0QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLGFBQWEsRUFBRSxFQUFFO0FBQ3JCLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEdBQUcsQ0FBQztBQUNKLEVBQUUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbkQsRUFBRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUNqRCxFQUFFLElBQUksY0FBYztBQUNwQixJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ2hDLEVBQUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEMsRUFBRSxRQUFRLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDeEMsRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDL0IsRUFBRSxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDbkMsRUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDdkMsRUFBRSxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDbkMsRUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzVELEVBQUUsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDbEI7O0FDNUZBLElBQUksT0FBTyxDQUFDO0FBQ0wsU0FBUyxpQkFBaUIsR0FBRztBQUNwQyxFQUFFLElBQUksQ0FBQyxPQUFPO0FBQ2QsSUFBSSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNuQyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQVEsS0FBSztBQUNyQyxFQUFFLElBQUk7QUFDTixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLO0FBQzFCLE1BQU0sT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3ZCLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0gsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLO0FBQy9DLEVBQUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0FBQzFELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ2pGLE1BQU0sTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbEQsTUFBTSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUU7QUFDNUUsUUFBUSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQzdCLFFBQVEsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUCxNQUFNLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFO0FBQzlJLElBQUksTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLElBQUksSUFBSSxjQUFjO0FBQ3RCLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hFLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSw4QkFBOEIsRUFBRSxTQUFTLE9BQU8sRUFBRTtBQUM5RixJQUFJLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELElBQUksaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLG9DQUFvQyxFQUFFLFNBQVMsMEJBQTBCLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRTtBQUMvSSxJQUFJLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELElBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkcsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDOztBQy9DTSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9CLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNqQyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL0IsTUFBTTtBQUNOLHFCQUFFSSxtQkFBaUI7QUFDbkIsRUFBRSxhQUFhO0FBQ2YsRUFBRSxVQUFVO0FBQ1osRUFBRSxTQUFTO0FBQ1gsRUFBRSxZQUFZO0FBQ2QsRUFBRSxrQkFBa0I7QUFDcEIsQ0FBQyxHQUFHQyxTQUFtQixDQUFDO0FBQ3hCLE1BQU0sT0FBTyxHQUFHO0FBQ2hCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsWUFBWTtBQUNkLEVBQUUsVUFBVTtBQUNaLEVBQUUsYUFBYTtBQUNmLEVBQUUsU0FBUztBQUNYLEVBQUVELG1CQUFpQjtBQUNuQixDQUFDLENBQUM7QUFDSyxTQUFTLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxRQUFRLEdBQUcsVUFBVSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUU7QUFDckcsRUFBRSxNQUFNO0FBQ1IsSUFBSSxPQUFPLEdBQUcsRUFBRTtBQUNoQixJQUFJLGFBQWEsR0FBRyxjQUFjO0FBQ2xDLElBQUksa0JBQWtCLEdBQUcsS0FBSztBQUM5QixJQUFJLEtBQUssR0FBRyxLQUFLO0FBQ2pCLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsSUFBSSxhQUFhLEdBQUcsY0FBYztBQUNsQyxJQUFJLGNBQWMsR0FBRyxFQUFFO0FBQ3ZCLElBQUksbUJBQW1CLEdBQUcsY0FBYztBQUN4QyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ2QsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsRUFBRSxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDM0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQUksUUFBUSxLQUFLLEVBQUUsRUFBRTtBQUM5QyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRSxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDcEIsR0FBRztBQUNILEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQ3RCLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2pELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNuQixHQUFHO0FBQ0gsRUFBRSxJQUFJLEtBQUssRUFBRTtBQUNiLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNuQixHQUFHO0FBQ0gsRUFBRSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDakMsSUFBSSxTQUFTLElBQUksV0FBVyxDQUFDO0FBQzdCLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3JELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNuQixHQUFHO0FBQ0gsRUFBRSxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDdkIsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3RCLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLElBQUksSUFBSSxjQUFjO0FBQ3RCLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwRSxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDcEIsR0FBRztBQUNILEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRTtBQUNwQixJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxTQUFTLEtBQUssRUFBRTtBQUN0QixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakMsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDNUIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUs7QUFDcEQsRUFBRSxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUNiLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxHQUFHTCxRQUFZLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQU0sUUFBUTtBQUNkLE1BQU0sT0FBTyxFQUFFLE9BQU87QUFDdEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHLENBQUMsTUFBTTtBQUNWLElBQUksTUFBTSxHQUFHQSxRQUFZLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQU0sVUFBVSxFQUFFLEtBQUs7QUFDdkIsTUFBTSxRQUFRO0FBQ2QsTUFBTSxPQUFPLEVBQUUsT0FBTztBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVHLENBQUMsQ0FBQztBQUNLLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEOzs7Ozs7Ozs7Ozs7Ozs7O0FDNUZBLElBQUlULFdBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUlnQixZQUFVLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0FBQ3pDLElBQUlDLG1CQUFpQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztBQUN6RCxJQUFJaEIscUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3ZELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJQyxpQkFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBR0osV0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEssSUFBSUssZ0JBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSUgsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2xDLE1BQU1FLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUlILHFCQUFtQjtBQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUlBLHFCQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSUUsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVFDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQUNGLElBQUljLGVBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUtGLFlBQVUsQ0FBQyxDQUFDLEVBQUVDLG1CQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTbEUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssZUFBZSxDQUFDO0FBQ3ZHLE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBUyxLQUFLO0FBQ3ZDLEVBQUUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUM3QixFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hELEVBQUUsTUFBTSxTQUFTLEdBQUdDLGVBQWEsQ0FBQ2IsZ0JBQWMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDcEUsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxjQUFjO0FBQ2xCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxNQUFNLFlBQVksR0FBR2EsZUFBYSxDQUFDYixnQkFBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO0FBQ3JFLElBQUksS0FBSztBQUNULElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxPQUFPO0FBQ1gsSUFBSSxNQUFNO0FBQ1YsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxPQUFPO0FBQ1QsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QixJQUFJLEtBQUs7QUFDVCxJQUFJLEdBQUc7QUFDUCxHQUFHLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixNQUFNLGVBQWUsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLEdBQUc7QUFDSCxDQUFDO0FBQ0QsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7QUFDbkMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSztBQUN2QixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsS0FBSztBQUNoRixNQUFNLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDMUMsUUFBUSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUYsUUFBUSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLO0FBQzVDLFVBQVUsTUFBTSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakUsT0FBTztBQUNQLE1BQU0sZUFBZSxrQkFBa0IsQ0FBQyxHQUFHLElBQUksRUFBRTtBQUNqRCxRQUFRLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RCxRQUFRLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BHLFFBQVEsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSztBQUM1QyxVQUFVLE1BQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUCxNQUFNLE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDO0FBQy9HLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQ2MsTUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUM3RixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDTSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUs7QUFDNUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxLQUFLO0FBQ3ZELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQzs7QUM5RU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMvQixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0gsRUFBRSxpQkFBaUIsR0FBRztBQUN0QixJQUFJLE9BQU87QUFDWCxNQUFNLE1BQU07QUFDWixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTztBQUN6QixNQUFNLEtBQUssRUFBRSxZQUFZO0FBQ3pCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQztBQUN4RCxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUM5QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUNsRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzNDLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUQsR0FBRztBQUNILEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksT0FBTyxRQUFRLENBQUM7QUFDcEIsR0FBRztBQUNILENBQUM7QUFDTSxNQUFNLFFBQVEsU0FBUyxpQkFBaUIsQ0FBQztBQUNoRCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDekIsR0FBRztBQUNILEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0gsRUFBRSxtQkFBbUIsR0FBRztBQUN4QixJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQztBQUN4RCxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNILEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUNwQixJQUFJLElBQUksTUFBTSxDQUFDLGNBQWM7QUFDN0IsTUFBTSxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxLQUFLLEdBQUc7QUFDekMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixJQUFJLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDckMsR0FBRztBQUNILEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUU7QUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO0FBQzNELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RCxHQUFHO0FBQ0gsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQ3pDLE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUcsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDakcsUUFBUSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzNDLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUQsR0FBRztBQUNILEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksT0FBTyxRQUFRLENBQUM7QUFDcEIsR0FBRztBQUNILENBQUM7QUFDTSxNQUFNLGVBQWUsU0FBUyxpQkFBaUIsQ0FBQztBQUN2RCxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyQyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNHLEtBQUs7QUFDTCxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkosSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzNDLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNILEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNILENBQUM7QUFDTSxNQUFNLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQztBQUMzQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUN2QyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsMkdBQTJHLENBQUMsQ0FBQztBQUN2SSxLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRTtBQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUk7QUFDakIsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsSUFBSSxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQ3pELElBQUksTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3RHLElBQUksT0FBTyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUNoRCxHQUFHO0FBQ0gsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTSxDQUFDO0FBQ2pFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTSxDQUFDO0FBQ2pFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVE7QUFDaEMsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLFlBQVksUUFBUSxDQUFDO0FBQ3JFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU87QUFDL0IsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDO0FBQ25FLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTSxDQUFDO0FBQ2pFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTSxDQUFDO0FBQ2pFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQztBQUN0QyxJQUFJLE9BQU8sS0FBSyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEMsR0FBRztBQUNILEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTTtBQUM5QixNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRO0FBQ2hDLE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTTtBQUM5QixNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU87QUFDL0IsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNILEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxjQUFjLFNBQVMsaUJBQWlCLENBQUM7QUFDdEQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0FBQ3hELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBQzlELElBQUksS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7QUFDdkQsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNqRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMvRixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzdGLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUc7QUFDcEIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDeEUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDeEUsSUFBSSxlQUFlLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUN0RSxJQUFJLGNBQWMsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ3BFLEdBQUcsQ0FBQztBQUNKLENBQUM7O0FDL0tELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNmLGVBQWUsU0FBUyxHQUFHO0FBQ2xDLEVBQUUsSUFBSSxTQUFTO0FBQ2YsSUFBSSxPQUFPO0FBQ1gsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QixFQUFFQSxNQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNCLEVBQUVBLE1BQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQixFQUFFQSxNQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDbkMsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ25COztBQ1ZBLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNqQixlQUFlLGNBQWMsQ0FBQyxNQUFNLEVBQUU7QUFDN0MsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLEVBQUUsSUFBSSxXQUFXO0FBQ2pCLElBQUksT0FBTztBQUNYLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNyQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSxNQUFNLFNBQVMsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTztBQUNwQixJQUFJLENBQUMsTUFBTSxPQUFPLHVCQUF5QixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBQ0QsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQy9CLEVBQUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPO0FBQzNCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBQ00sU0FBUyxrQkFBa0IsR0FBRztBQUNyQyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixRQUFRLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3pFLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDeEIsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLFFBQVEsRUFBRSxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUM7QUFDOUIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDcEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNiLE1BQU0sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7QUFDN0IsUUFBUSxJQUFJLEVBQUUsUUFBUTtBQUN0QixRQUFRLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDekUsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN4QixPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sUUFBUSxFQUFFLENBQUM7QUFDakIsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDO0FBQ25DLElBQUksTUFBTTtBQUNWLElBQUksTUFBTTtBQUNWLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNNLGVBQWUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO0FBQ2pELEVBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxFQUFFLElBQUk7QUFDTixJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDZixHQUFHLFNBQVM7QUFDWixJQUFJLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuQyxHQUFHO0FBQ0gsQ0FBQztBQUNNLGVBQWUsYUFBYSxDQUFDLE1BQU0sRUFBRTtBQUM1QyxFQUFFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0MsRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksS0FBSztBQUM5QyxJQUFJLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOOztBQ2pFQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUMxRCxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtBQUNyQyxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVU7QUFDL0IsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7QUFDN0IsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEVBQUUsSUFBSSxHQUFHLFlBQVksT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlO0FBQ2pILElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsRUFBRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxHQUFHLFlBQVksT0FBTztBQUM5RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN2QixFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsZUFBZSxLQUFLLFVBQVU7QUFDL0MsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUN2RCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDO0FBQzNCLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ00sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDVixJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLO0FBQ2YsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJO0FBQ2QsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRO0FBQ3RDLElBQUksR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtBQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUk7QUFDTixJQUFJLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksT0FBTyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkcscUJBQXFCLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIOztBQ2pEQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNoQyxFQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ00sZUFBZSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ2hDLElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsSUFBSSxNQUFNLElBQUksR0FBRztBQUNqQixNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEIsTUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sUUFBUTtBQUNkLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDZixLQUFLLENBQUM7QUFDTixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFDN0IsTUFBTSxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqRSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN2QyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLFVBQVUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFVBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQzNELFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNwQixRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLFFBQVEsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVGLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUU7QUFDbkYsRUFBRSxNQUFNLFdBQVcsR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDNUQsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztBQUM3QixJQUFJLE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUN6RCxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sS0FBSyxXQUFXLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ25ELFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDcEMsUUFBUSxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDM0IsTUFBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQy9ELFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDeEIsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDbkMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTTtBQUMzQixRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM1QixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUM7QUFDbEQsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUMxQixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRTtBQUMvQixFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFDRCxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDN0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN0QixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPO0FBQzVCLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxTQUFTO0FBQ2YsSUFBSSxPQUFPO0FBQ1gsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHO0FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLGtHQUFrRyxDQUFDLENBQUM7QUFDdEksR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRTtBQUMvQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSztBQUNuQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztBQUMxQixNQUFNLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixHQUFHLENBQUMsQ0FBQztBQUNMOztBQ3BIQSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6QyxJQUFJLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztBQUN6RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUksZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTSxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUksbUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBVzNELGVBQWUsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3ZELEVBQUUsSUFBSSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUssQ0FBQyxLQUFLO0FBQzFDLElBQUksTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsRUFBRSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEtBQUs7QUFDekMsSUFBSSxNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN4QixJQUFJLFdBQVcsQ0FBQztBQUNoQixJQUFJLGNBQWMsQ0FBQztBQUNuQixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDMUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNO0FBQ2pDLElBQUksY0FBYyxHQUFHLGVBQWUsRUFBRSxDQUFDO0FBQ3ZDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUM7QUFDRCxlQUFlLGVBQWUsR0FBRztBQUNqQyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZCLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2xCLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNILENBQUM7QUFDTSxlQUFlLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDcEMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDYixFQUFFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLO0FBQ3pCLElBQUksT0FBTztBQUNYLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQ25FLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLElBQUksT0FBTztBQUNYLEdBQUc7QUFDSCxFQUFFLE1BQU0sS0FBSyxHQUFHQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHO0FBQ2hCLElBQUksS0FBSyxFQUFFLEtBQUs7QUFDaEIsR0FBRyxDQUFDO0FBQ0osRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25DLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEUsSUFBSSxRQUFRLENBQUM7QUFDYixNQUFNLGNBQWMsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0scUJBQXFCLEVBQUUsS0FBSztBQUNsQyxNQUFNLDBCQUEwQixFQUFFLElBQUk7QUFDdEMsTUFBTSx3QkFBd0IsRUFBRSxJQUFJO0FBQ3BDLE1BQU0sNkJBQTZCLEVBQUUsSUFBSTtBQUN6QyxNQUFNLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVE7QUFDckUsTUFBTSxlQUFlLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztBQUN4QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixJQUFJLE1BQU0sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztBQUN0SixJQUFJLElBQUksd0JBQXdCLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyx3QkFBd0I7QUFDeEYsTUFBTSxNQUFNLDZCQUE2QixDQUFDO0FBQzFDLElBQUksSUFBSSxxQkFBcUIsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLENBQUM7QUFDOUQsTUFBTSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLElBQUk7QUFDTixJQUFJLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztBQUN6RSxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUdBLGFBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDbkQsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDckMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUNELFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQ25DLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDOUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztBQUMxQixNQUFNLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNNLGVBQWUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN0QyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDcEUsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixJQUFJLE9BQU87QUFDWCxHQUFHO0FBQ0gsRUFBRSxNQUFNLEtBQUssR0FBR0EsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRztBQUNqQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUk7QUFDUixNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sS0FBSyxNQUFNLFVBQVUsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM5RCxRQUFRLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDL0MsVUFBVSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVO0FBQ3BDLFlBQVksTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNoQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUdBLGFBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDcEQsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7QUFDN0IsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUNELGVBQWUsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUNoQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ00sZUFBZSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3hDLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO0FBQzVCLElBQUksTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNNLGVBQWUsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ2pCLEVBQUUsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsTUFBTSxlQUFlLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBQ00sU0FBUyxnQkFBZ0IsR0FBRztBQUNuQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztBQUMzRSxFQUFFLElBQUksWUFBWTtBQUNsQixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN6QixPQUFPLElBQUksU0FBUztBQUNwQixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN2QixPQUFPLElBQUksVUFBVTtBQUNyQixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN2Qjs7QUM3TE8sZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxNQUFNLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixFQUFFLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO0FBQzVCLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTVAsUUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO0FBQzNJLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3JELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxZQUFZO0FBQ3BFLE1BQU0sTUFBTSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDs7In0=
|
|
1880
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L25vZGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS1rZXlzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9lbnYvdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L2hhcHB5LWRvbS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L2luZGV4LnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWktc3Vic2V0QDEuNi4wL25vZGVfbW9kdWxlcy9jaGFpLXN1YnNldC9saWIvY2hhaS1zdWJzZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vbmF0dXJhbC1jb21wYXJlQDEuNC4wL25vZGVfbW9kdWxlcy9uYXR1cmFsLWNvbXBhcmUvaW5kZXguanMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvaW5saW5lU25hcHNob3QudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvc3RhdGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L2NsaWVudC50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvc25hcHNob3QvY2hhaS50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LW1hdGNoZXItdXRpbHMudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1leHRlbmQudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL3NldHVwLnRzIiwiLi4vc3JjL3J1bnRpbWUvc2V0dXAudHMiLCIuLi9zcmMvcnVudGltZS9lcnJvci50cyIsIi4uL3NyYy9ydW50aW1lL2NvbGxlY3QudHMiLCIuLi9zcmMvcnVudGltZS9ydW4udHMiLCIuLi9zcmMvcnVudGltZS9lbnRyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IDxFbnZpcm9ubWVudD4oe1xuICBuYW1lOiAnbm9kZScsXG4gIGFzeW5jIHNldHVwKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bigpIHtcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsIi8vIFNFRSBodHRwczovL2dpdGh1Yi5jb20vanNkb20vanNkb20vYmxvYi9tYXN0ZXIvbGliL2pzZG9tL2xpdmluZy9pbnRlcmZhY2VzLmpzXG5cbmNvbnN0IExJVklOR19LRVlTID0gW1xuICAnRE9NRXhjZXB0aW9uJyxcbiAgJ1VSTCcsXG4gICdVUkxTZWFyY2hQYXJhbXMnLFxuICAnRXZlbnRUYXJnZXQnLFxuICAnTmFtZWROb2RlTWFwJyxcbiAgJ05vZGUnLFxuICAnQXR0cicsXG4gICdFbGVtZW50JyxcbiAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAnRE9NSW1wbGVtZW50YXRpb24nLFxuICAnRG9jdW1lbnQnLFxuICAnWE1MRG9jdW1lbnQnLFxuICAnQ2hhcmFjdGVyRGF0YScsXG4gICdUZXh0JyxcbiAgJ0NEQVRBU2VjdGlvbicsXG4gICdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nLFxuICAnQ29tbWVudCcsXG4gICdEb2N1bWVudFR5cGUnLFxuICAnTm9kZUxpc3QnLFxuICAnSFRNTENvbGxlY3Rpb24nLFxuICAnSFRNTE9wdGlvbnNDb2xsZWN0aW9uJyxcbiAgJ0RPTVN0cmluZ01hcCcsXG4gICdET01Ub2tlbkxpc3QnLFxuICAnU3R5bGVTaGVldExpc3QnLFxuICAnSFRNTEVsZW1lbnQnLFxuICAnSFRNTEhlYWRFbGVtZW50JyxcbiAgJ0hUTUxUaXRsZUVsZW1lbnQnLFxuICAnSFRNTEJhc2VFbGVtZW50JyxcbiAgJ0hUTUxMaW5rRWxlbWVudCcsXG4gICdIVE1MTWV0YUVsZW1lbnQnLFxuICAnSFRNTFN0eWxlRWxlbWVudCcsXG4gICdIVE1MQm9keUVsZW1lbnQnLFxuICAnSFRNTEhlYWRpbmdFbGVtZW50JyxcbiAgJ0hUTUxQYXJhZ3JhcGhFbGVtZW50JyxcbiAgJ0hUTUxIUkVsZW1lbnQnLFxuICAnSFRNTFByZUVsZW1lbnQnLFxuICAnSFRNTFVMaXN0RWxlbWVudCcsXG4gICdIVE1MT0xpc3RFbGVtZW50JyxcbiAgJ0hUTUxMSUVsZW1lbnQnLFxuICAnSFRNTE1lbnVFbGVtZW50JyxcbiAgJ0hUTUxETGlzdEVsZW1lbnQnLFxuICAnSFRNTERpdkVsZW1lbnQnLFxuICAnSFRNTEFuY2hvckVsZW1lbnQnLFxuICAnSFRNTEFyZWFFbGVtZW50JyxcbiAgJ0hUTUxCUkVsZW1lbnQnLFxuICAnSFRNTEJ1dHRvbkVsZW1lbnQnLFxuICAnSFRNTENhbnZhc0VsZW1lbnQnLFxuICAnSFRNTERhdGFFbGVtZW50JyxcbiAgJ0hUTUxEYXRhTGlzdEVsZW1lbnQnLFxuICAnSFRNTERldGFpbHNFbGVtZW50JyxcbiAgJ0hUTUxEaWFsb2dFbGVtZW50JyxcbiAgJ0hUTUxEaXJlY3RvcnlFbGVtZW50JyxcbiAgJ0hUTUxGaWVsZFNldEVsZW1lbnQnLFxuICAnSFRNTEZvbnRFbGVtZW50JyxcbiAgJ0hUTUxGb3JtRWxlbWVudCcsXG4gICdIVE1MSHRtbEVsZW1lbnQnLFxuICAnSFRNTEltYWdlRWxlbWVudCcsXG4gICdIVE1MSW5wdXRFbGVtZW50JyxcbiAgJ0hUTUxMYWJlbEVsZW1lbnQnLFxuICAnSFRNTExlZ2VuZEVsZW1lbnQnLFxuICAnSFRNTE1hcEVsZW1lbnQnLFxuICAnSFRNTE1hcnF1ZWVFbGVtZW50JyxcbiAgJ0hUTUxNZWRpYUVsZW1lbnQnLFxuICAnSFRNTE1ldGVyRWxlbWVudCcsXG4gICdIVE1MTW9kRWxlbWVudCcsXG4gICdIVE1MT3B0R3JvdXBFbGVtZW50JyxcbiAgJ0hUTUxPcHRpb25FbGVtZW50JyxcbiAgJ0hUTUxPdXRwdXRFbGVtZW50JyxcbiAgJ0hUTUxQaWN0dXJlRWxlbWVudCcsXG4gICdIVE1MUHJvZ3Jlc3NFbGVtZW50JyxcbiAgJ0hUTUxRdW90ZUVsZW1lbnQnLFxuICAnSFRNTFNjcmlwdEVsZW1lbnQnLFxuICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAnSFRNTFNsb3RFbGVtZW50JyxcbiAgJ0hUTUxTb3VyY2VFbGVtZW50JyxcbiAgJ0hUTUxTcGFuRWxlbWVudCcsXG4gICdIVE1MVGFibGVDYXB0aW9uRWxlbWVudCcsXG4gICdIVE1MVGFibGVDZWxsRWxlbWVudCcsXG4gICdIVE1MVGFibGVDb2xFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZUVsZW1lbnQnLFxuICAnSFRNTFRpbWVFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZVJvd0VsZW1lbnQnLFxuICAnSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQnLFxuICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgJ0hUTUxVbmtub3duRWxlbWVudCcsXG4gICdIVE1MRnJhbWVFbGVtZW50JyxcbiAgJ0hUTUxGcmFtZVNldEVsZW1lbnQnLFxuICAnSFRNTElGcmFtZUVsZW1lbnQnLFxuICAnSFRNTEVtYmVkRWxlbWVudCcsXG4gICdIVE1MT2JqZWN0RWxlbWVudCcsXG4gICdIVE1MUGFyYW1FbGVtZW50JyxcbiAgJ0hUTUxWaWRlb0VsZW1lbnQnLFxuICAnSFRNTEF1ZGlvRWxlbWVudCcsXG4gICdIVE1MVHJhY2tFbGVtZW50JyxcbiAgJ1NWR0VsZW1lbnQnLFxuICAnU1ZHR3JhcGhpY3NFbGVtZW50JyxcbiAgJ1NWR1NWR0VsZW1lbnQnLFxuICAnU1ZHVGl0bGVFbGVtZW50JyxcbiAgJ1NWR0FuaW1hdGVkU3RyaW5nJyxcbiAgJ1NWR051bWJlcicsXG4gICdTVkdTdHJpbmdMaXN0JyxcbiAgJ0V2ZW50JyxcbiAgJ0Nsb3NlRXZlbnQnLFxuICAnQ3VzdG9tRXZlbnQnLFxuICAnTWVzc2FnZUV2ZW50JyxcbiAgJ0Vycm9yRXZlbnQnLFxuICAnSGFzaENoYW5nZUV2ZW50JyxcbiAgJ1BvcFN0YXRlRXZlbnQnLFxuICAnU3RvcmFnZUV2ZW50JyxcbiAgJ1Byb2dyZXNzRXZlbnQnLFxuICAnUGFnZVRyYW5zaXRpb25FdmVudCcsXG4gICdVSUV2ZW50JyxcbiAgJ0ZvY3VzRXZlbnQnLFxuICAnSW5wdXRFdmVudCcsXG4gICdNb3VzZUV2ZW50JyxcbiAgJ0tleWJvYXJkRXZlbnQnLFxuICAnVG91Y2hFdmVudCcsXG4gICdDb21wb3NpdGlvbkV2ZW50JyxcbiAgJ1doZWVsRXZlbnQnLFxuICAnQmFyUHJvcCcsXG4gICdFeHRlcm5hbCcsXG4gICdMb2NhdGlvbicsXG4gICdIaXN0b3J5JyxcbiAgJ1NjcmVlbicsXG4gICdQZXJmb3JtYW5jZScsXG4gICdOYXZpZ2F0b3InLFxuICAnUGx1Z2luQXJyYXknLFxuICAnTWltZVR5cGVBcnJheScsXG4gICdQbHVnaW4nLFxuICAnTWltZVR5cGUnLFxuICAnRmlsZVJlYWRlcicsXG4gICdCbG9iJyxcbiAgJ0ZpbGUnLFxuICAnRmlsZUxpc3QnLFxuICAnVmFsaWRpdHlTdGF0ZScsXG4gICdET01QYXJzZXInLFxuICAnWE1MU2VyaWFsaXplcicsXG4gICdGb3JtRGF0YScsXG4gICdYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0JyxcbiAgJ1hNTEh0dHBSZXF1ZXN0VXBsb2FkJyxcbiAgJ1hNTEh0dHBSZXF1ZXN0JyxcbiAgJ1dlYlNvY2tldCcsXG4gICdOb2RlRmlsdGVyJyxcbiAgJ05vZGVJdGVyYXRvcicsXG4gICdUcmVlV2Fsa2VyJyxcbiAgJ0Fic3RyYWN0UmFuZ2UnLFxuICAnUmFuZ2UnLFxuICAnU3RhdGljUmFuZ2UnLFxuICAnU2VsZWN0aW9uJyxcbiAgJ1N0b3JhZ2UnLFxuICAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ1NoYWRvd1Jvb3QnLFxuICAnTXV0YXRpb25PYnNlcnZlcicsXG4gICdNdXRhdGlvblJlY29yZCcsXG4gICdIZWFkZXJzJyxcbiAgJ0Fib3J0Q29udHJvbGxlcicsXG4gICdBYm9ydFNpZ25hbCcsXG5cbiAgLy8gbm90IHNwZWNpZmllZCBpbiBkb2NzLCBidXQgaXMgYXZhaWxhYmxlXG4gICdJbWFnZScsXG5dXG5cbmNvbnN0IE9USEVSX0tFWVMgPSBbXG4gICdhZGRFdmVudExpc3RlbmVyJyxcbiAgJ2FsZXJ0JyxcbiAgJ2F0b2InLFxuICAnYmx1cicsXG4gICdidG9hJyxcbiAgLyogJ2NsZWFySW50ZXJ2YWwnLCAqL1xuICAvKiAnY2xlYXJUaW1lb3V0JywgKi9cbiAgJ2Nsb3NlJyxcbiAgJ2NvbmZpcm0nLFxuICAvKiAnY29uc29sZScsICovXG4gICdjcmVhdGVQb3B1cCcsXG4gICdkaXNwYXRjaEV2ZW50JyxcbiAgJ2RvY3VtZW50JyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZyYW1lcycsXG4gICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgJ2hpc3RvcnknLFxuICAnaW5uZXJIZWlnaHQnLFxuICAnaW5uZXJXaWR0aCcsXG4gICdsZW5ndGgnLFxuICAnbG9jYXRpb24nLFxuICAnbWF0Y2hNZWRpYScsXG4gICdtb3ZlQnknLFxuICAnbW92ZVRvJyxcbiAgJ25hbWUnLFxuICAnbmF2aWdhdG9yJyxcbiAgJ29wZW4nLFxuICAnb3V0ZXJIZWlnaHQnLFxuICAnb3V0ZXJXaWR0aCcsXG4gICdwYWdlWE9mZnNldCcsXG4gICdwYWdlWU9mZnNldCcsXG4gICdwYXJlbnQnLFxuICAncG9zdE1lc3NhZ2UnLFxuICAncHJpbnQnLFxuICAncHJvbXB0JyxcbiAgJ3JlbW92ZUV2ZW50TGlzdGVuZXInLFxuICAncmVzaXplQnknLFxuICAncmVzaXplVG8nLFxuICAnc2NyZWVuJyxcbiAgJ3NjcmVlbkxlZnQnLFxuICAnc2NyZWVuVG9wJyxcbiAgJ3NjcmVlblgnLFxuICAnc2NyZWVuWScsXG4gICdzY3JvbGwnLFxuICAnc2Nyb2xsQnknLFxuICAnc2Nyb2xsTGVmdCcsXG4gICdzY3JvbGxUbycsXG4gICdzY3JvbGxUb3AnLFxuICAnc2Nyb2xsWCcsXG4gICdzY3JvbGxZJyxcbiAgJ3NlbGYnLFxuICAvKiAnc2V0SW50ZXJ2YWwnLCAqL1xuICAvKiAnc2V0VGltZW91dCcsICovXG4gICdzdG9wJyxcbiAgLyogJ3RvU3RyaW5nJywgKi9cbiAgJ3RvcCcsXG4gICd3aW5kb3cnLFxuXVxuXG5leHBvcnQgY29uc3QgS0VZUyA9IExJVklOR19LRVlTLmNvbmNhdChPVEhFUl9LRVlTKVxuIiwiaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuY29uc3QgYWxsb3dSZXdyaXRlID0gbmV3IFNldChbXG4gICdFdmVudCcsXG5dKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93S2V5cyhnbG9iYWw6IGFueSwgd2luOiBhbnkpIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoS0VZUy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luKSlcbiAgICAuZmlsdGVyKChrKSA9PiB7XG4gICAgICBpZiAoay5zdGFydHNXaXRoKCdfJykpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKGsgaW4gZ2xvYmFsKVxuICAgICAgICByZXR1cm4gYWxsb3dSZXdyaXRlLmhhcyhrKVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pKVxuXG4gIHJldHVybiBrZXlzXG59XG4iLCJpbXBvcnQgeyBpbXBvcnRNb2R1bGUgfSBmcm9tICdsb2NhbC1wa2cnXG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50LCBKU0RPTU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldFdpbmRvd0tleXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ2pzZG9tJyxcbiAgYXN5bmMgc2V0dXAoZ2xvYmFsLCB7IGpzZG9tID0ge30gfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIENvb2tpZUphcixcbiAgICAgIEpTRE9NLFxuICAgICAgUmVzb3VyY2VMb2FkZXIsXG4gICAgICBWaXJ0dWFsQ29uc29sZSxcbiAgICB9ID0gYXdhaXQgaW1wb3J0TW9kdWxlKCdqc2RvbScpIGFzIHR5cGVvZiBpbXBvcnQoJ2pzZG9tJylcbiAgICBjb25zdCB7XG4gICAgICBodG1sID0gJzwhRE9DVFlQRSBodG1sPicsXG4gICAgICB1c2VyQWdlbnQsXG4gICAgICB1cmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgIGNvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCcsXG4gICAgICBwcmV0ZW5kVG9CZVZpc3VhbCA9IHRydWUsXG4gICAgICBpbmNsdWRlTm9kZUxvY2F0aW9ucyA9IGZhbHNlLFxuICAgICAgcnVuU2NyaXB0cyA9ICdkYW5nZXJvdXNseScsXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBjb25zb2xlID0gZmFsc2UsXG4gICAgICBjb29raWVKYXIgPSBmYWxzZSxcbiAgICAgIC4uLnJlc3RPcHRpb25zXG4gICAgfSA9IGpzZG9tIGFzIEpTRE9NT3B0aW9uc1xuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTShcbiAgICAgIGh0bWwsXG4gICAgICB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsLFxuICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlcyA/PyAodXNlckFnZW50ID8gbmV3IFJlc291cmNlTG9hZGVyKHsgdXNlckFnZW50IH0pIDogdW5kZWZpbmVkKSxcbiAgICAgICAgcnVuU2NyaXB0cyxcbiAgICAgICAgdXJsLFxuICAgICAgICB2aXJ0dWFsQ29uc29sZTogY29uc29sZSAmJiBnbG9iYWwuY29uc29sZSA/IG5ldyBWaXJ0dWFsQ29uc29sZSgpLnNlbmRUbyhnbG9iYWwuY29uc29sZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvb2tpZUphcjogY29va2llSmFyID8gbmV3IENvb2tpZUphcigpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbmNsdWRlTm9kZUxvY2F0aW9ucyxcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIHVzZXJBZ2VudCxcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IGtleXMgPSBnZXRXaW5kb3dLZXlzKGdsb2JhbCwgZG9tLndpbmRvdylcblxuICAgIGNvbnN0IG92ZXJyaWRlT2JqZWN0ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgaWYgKG92ZXJyaWRlT2JqZWN0LmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlT2JqZWN0LmdldChrZXkpXG4gICAgICAgICAgcmV0dXJuIGRvbS53aW5kb3dba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgIG92ZXJyaWRlT2JqZWN0LnNldChrZXksIHYpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlYXJkb3duKGdsb2JhbCkge1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IGRlbGV0ZSBnbG9iYWxba2V5XSlcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsImltcG9ydCB7IGltcG9ydE1vZHVsZSB9IGZyb20gJ2xvY2FsLXBrZydcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldFdpbmRvd0tleXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ2hhcHB5LWRvbScsXG4gIGFzeW5jIHNldHVwKGdsb2JhbCkge1xuICAgIGNvbnN0IHsgV2luZG93IH0gPSBhd2FpdCBpbXBvcnRNb2R1bGUoJ2hhcHB5LWRvbScpIGFzIHR5cGVvZiBpbXBvcnQoJ2hhcHB5LWRvbScpXG4gICAgY29uc3Qgd2luOiBhbnkgPSBuZXcgV2luZG93KClcblxuICAgIGNvbnN0IGtleXMgPSBnZXRXaW5kb3dLZXlzKGdsb2JhbCwgd2luKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVPYmplY3QgPSBuZXcgTWFwPHN0cmluZywgYW55PigpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVPYmplY3QuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVPYmplY3QuZ2V0KGtleSlcbiAgICAgICAgICByZXR1cm4gd2luW2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHYpIHtcbiAgICAgICAgICBvdmVycmlkZU9iamVjdC5zZXQoa2V5LCB2KVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bihnbG9iYWwpIHtcbiAgICAgICAgd2luLmhhcHB5RE9NLmNhbmNlbEFzeW5jKClcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBkZWxldGUgZ2xvYmFsW2tleV0pXG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn0pXG4iLCJpbXBvcnQgbm9kZSBmcm9tICcuL25vZGUnXG5pbXBvcnQganNkb20gZnJvbSAnLi9qc2RvbSdcbmltcG9ydCBoYXBweSBmcm9tICcuL2hhcHB5LWRvbSdcblxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50cyA9IHtcbiAgbm9kZSxcbiAganNkb20sXG4gICdoYXBweS1kb20nOiBoYXBweSxcbn1cbiIsIihmdW5jdGlvbigpIHtcblx0KGZ1bmN0aW9uKGNoYWlTdWJzZXQpIHtcblx0XHRpZiAodHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBjaGFpU3Vic2V0O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0XHRyZXR1cm4gZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gY2hhaVN1YnNldDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY2hhaS51c2UoY2hhaVN1YnNldCk7XG5cdFx0fVxuXHR9KShmdW5jdGlvbihjaGFpLCB1dGlscykge1xuXHRcdHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblx0XHR2YXIgYXNzZXJ0aW9uUHJvdG90eXBlID0gQXNzZXJ0aW9uLnByb3RvdHlwZTtcblxuXHRcdEFzc2VydGlvbi5hZGRNZXRob2QoJ2NvbnRhaW5TdWJzZXQnLCBmdW5jdGlvbiAoZXhwZWN0ZWQpIHtcblx0XHRcdHZhciBhY3R1YWwgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcblx0XHRcdHZhciBzaG93RGlmZiA9IGNoYWkuY29uZmlnLnNob3dEaWZmO1xuXG5cdFx0XHRhc3NlcnRpb25Qcm90b3R5cGUuYXNzZXJ0LmNhbGwodGhpcyxcblx0XHRcdFx0Y29tcGFyZShleHBlY3RlZCwgYWN0dWFsKSxcblx0XHRcdFx0J2V4cGVjdGVkICN7YWN0fSB0byBjb250YWluIHN1YnNldCAje2V4cH0nLFxuXHRcdFx0XHQnZXhwZWN0ZWQgI3thY3R9IHRvIG5vdCBjb250YWluIHN1YnNldCAje2V4cH0nLFxuXHRcdFx0XHRleHBlY3RlZCxcblx0XHRcdFx0YWN0dWFsLFxuXHRcdFx0XHRzaG93RGlmZlxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdGNoYWkuYXNzZXJ0LmNvbnRhaW5TdWJzZXQgPSBmdW5jdGlvbih2YWwsIGV4cCwgbXNnKSB7XG5cdFx0XHRuZXcgY2hhaS5Bc3NlcnRpb24odmFsLCBtc2cpLnRvLmJlLmNvbnRhaW5TdWJzZXQoZXhwKTtcblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gY29tcGFyZShleHBlY3RlZCwgYWN0dWFsKSB7XG5cdFx0XHRpZiAoZXhwZWN0ZWQgPT09IGFjdHVhbCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YoYWN0dWFsKSAhPT0gdHlwZW9mKGV4cGVjdGVkKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mKGV4cGVjdGVkKSAhPT0gJ29iamVjdCcgfHwgZXhwZWN0ZWQgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkID09PSBhY3R1YWw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoISFleHBlY3RlZCAmJiAhYWN0dWFsKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YoYWN0dWFsLmxlbmd0aCkgIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBhYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFjdHVhbCk7XG5cdFx0XHRcdHJldHVybiBleHBlY3RlZC5ldmVyeShmdW5jdGlvbiAoZXhwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFhLnNvbWUoZnVuY3Rpb24gKGFjdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbXBhcmUoZXhwLCBhY3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBleHBlY3RlZC5nZXRUaW1lKCkgPT09IGFjdHVhbC5nZXRUaW1lKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhleHBlY3RlZCkuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHR2YXIgZW8gPSBleHBlY3RlZFtrZXldO1xuXHRcdFx0XHR2YXIgYW8gPSBhY3R1YWxba2V5XTtcblx0XHRcdFx0aWYgKHR5cGVvZihlbykgPT09ICdvYmplY3QnICYmIGVvICE9PSBudWxsICYmIGFvICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBhcmUoZW8sIGFvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mKGVvKSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHJldHVybiBlbyhhbyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFvID09PSBlbztcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbiIsIlxuXG5cbi8qXG4gKiBAdmVyc2lvbiAgICAxLjQuMFxuICogQGRhdGUgICAgICAgMjAxNS0xMC0yNlxuICogQHN0YWJpbGl0eSAgMyAtIFN0YWJsZVxuICogQGF1dGhvciAgICAgTGF1cmkgUm9vZGVuIChodHRwczovL2dpdGh1Yi5jb20vbGl0ZWpzL25hdHVyYWwtY29tcGFyZS1saXRlKVxuICogQGxpY2Vuc2UgICAgTUlUIExpY2Vuc2VcbiAqL1xuXG5cbnZhciBuYXR1cmFsQ29tcGFyZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0dmFyIGksIGNvZGVBXG5cdCwgY29kZUIgPSAxXG5cdCwgcG9zQSA9IDBcblx0LCBwb3NCID0gMFxuXHQsIGFscGhhYmV0ID0gU3RyaW5nLmFscGhhYmV0XG5cblx0ZnVuY3Rpb24gZ2V0Q29kZShzdHIsIHBvcywgY29kZSkge1xuXHRcdGlmIChjb2RlKSB7XG5cdFx0XHRmb3IgKGkgPSBwb3M7IGNvZGUgPSBnZXRDb2RlKHN0ciwgaSksIGNvZGUgPCA3NiAmJiBjb2RlID4gNjU7KSArK2k7XG5cdFx0XHRyZXR1cm4gK3N0ci5zbGljZShwb3MgLSAxLCBpKVxuXHRcdH1cblx0XHRjb2RlID0gYWxwaGFiZXQgJiYgYWxwaGFiZXQuaW5kZXhPZihzdHIuY2hhckF0KHBvcykpXG5cdFx0cmV0dXJuIGNvZGUgPiAtMSA/IGNvZGUgKyA3NiA6ICgoY29kZSA9IHN0ci5jaGFyQ29kZUF0KHBvcykgfHwgMCksIGNvZGUgPCA0NSB8fCBjb2RlID4gMTI3KSA/IGNvZGVcblx0XHRcdDogY29kZSA8IDQ2ID8gNjUgICAgICAgICAgICAgICAvLyAtXG5cdFx0XHQ6IGNvZGUgPCA0OCA/IGNvZGUgLSAxXG5cdFx0XHQ6IGNvZGUgPCA1OCA/IGNvZGUgKyAxOCAgICAgICAgLy8gMC05XG5cdFx0XHQ6IGNvZGUgPCA2NSA/IGNvZGUgLSAxMVxuXHRcdFx0OiBjb2RlIDwgOTEgPyBjb2RlICsgMTEgICAgICAgIC8vIEEtWlxuXHRcdFx0OiBjb2RlIDwgOTcgPyBjb2RlIC0gMzdcblx0XHRcdDogY29kZSA8IDEyMyA/IGNvZGUgKyA1ICAgICAgICAvLyBhLXpcblx0XHRcdDogY29kZSAtIDYzXG5cdH1cblxuXG5cdGlmICgoYSs9XCJcIikgIT0gKGIrPVwiXCIpKSBmb3IgKDtjb2RlQjspIHtcblx0XHRjb2RlQSA9IGdldENvZGUoYSwgcG9zQSsrKVxuXHRcdGNvZGVCID0gZ2V0Q29kZShiLCBwb3NCKyspXG5cblx0XHRpZiAoY29kZUEgPCA3NiAmJiBjb2RlQiA8IDc2ICYmIGNvZGVBID4gNjYgJiYgY29kZUIgPiA2Nikge1xuXHRcdFx0Y29kZUEgPSBnZXRDb2RlKGEsIHBvc0EsIHBvc0EpXG5cdFx0XHRjb2RlQiA9IGdldENvZGUoYiwgcG9zQiwgcG9zQSA9IGkpXG5cdFx0XHRwb3NCID0gaVxuXHRcdH1cblxuXHRcdGlmIChjb2RlQSAhPSBjb2RlQikgcmV0dXJuIChjb2RlQSA8IGNvZGVCKSA/IC0xIDogMVxuXHR9XG5cdHJldHVybiAwXG59XG5cbnRyeSB7XG5cdG1vZHVsZS5leHBvcnRzID0gbmF0dXJhbENvbXBhcmU7XG59IGNhdGNoIChlKSB7XG5cdFN0cmluZy5uYXR1cmFsQ29tcGFyZSA9IG5hdHVyYWxDb21wYXJlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pbXBvcnQgZnMsIHsgcHJvbWlzZXMgYXMgZnNwIH0gZnJvbSAnZnMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoZSdcbmltcG9ydCBuYXR1cmFsQ29tcGFyZSBmcm9tICduYXR1cmFsLWNvbXBhcmUnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbnNSZWNlaXZlZCBhcyBQcmV0dHlGb3JtYXRPcHRpb25zIH0gZnJvbSAncHJldHR5LWZvcm1hdCdcbmltcG9ydCB7XG4gIGZvcm1hdCBhcyBwcmV0dHlGb3JtYXQsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQgdHlwZSB7IFNuYXBzaG90RGF0YSwgU25hcHNob3RVcGRhdGVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IGdldFNlcmlhbGl6ZXJzIH0gZnJvbSAnLi9wbHVnaW5zJ1xuXG4vLyBUT0RPOiByZXdyaXRlIGFuZCBjbGVhbiB1cFxuXG5leHBvcnQgY29uc3QgU05BUFNIT1RfVkVSU0lPTiA9ICcxJ1xuXG5jb25zdCB3cml0ZVNuYXBzaG90VmVyc2lvbiA9ICgpID0+IGAvLyBWaXRlc3QgU25hcHNob3QgdiR7U05BUFNIT1RfVkVSU0lPTn1gXG5cbmV4cG9ydCBjb25zdCB0ZXN0TmFtZVRvS2V5ID0gKHRlc3ROYW1lOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgYCR7dGVzdE5hbWV9ICR7Y291bnR9YFxuXG5leHBvcnQgY29uc3Qga2V5VG9UZXN0TmFtZSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghLyBcXGQrJC8udGVzdChrZXkpKVxuICAgIHRocm93IG5ldyBFcnJvcignU25hcHNob3Qga2V5cyBtdXN0IGVuZCB3aXRoIGEgbnVtYmVyLicpXG5cbiAgcmV0dXJuIGtleS5yZXBsYWNlKC8gXFxkKyQvLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNuYXBzaG90RGF0YSA9IChcbiAgc25hcHNob3RQYXRoOiBzdHJpbmcsXG4gIHVwZGF0ZTogU25hcHNob3RVcGRhdGVTdGF0ZSxcbik6IHtcbiAgZGF0YTogU25hcHNob3REYXRhXG4gIGRpcnR5OiBib29sZWFuXG59ID0+IHtcbiAgY29uc3QgZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgbGV0IHNuYXBzaG90Q29udGVudHMgPSAnJ1xuICBsZXQgZGlydHkgPSBmYWxzZVxuXG4gIGlmIChmcy5leGlzdHNTeW5jKHNuYXBzaG90UGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgc25hcHNob3RDb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhzbmFwc2hvdFBhdGgsICd1dGY4JylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgY29uc3QgcG9wdWxhdGUgPSBuZXcgRnVuY3Rpb24oJ2V4cG9ydHMnLCBzbmFwc2hvdENvbnRlbnRzKVxuICAgICAgcG9wdWxhdGUoZGF0YSlcbiAgICB9XG4gICAgY2F0Y2gge31cbiAgfVxuXG4gIC8vIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZVNuYXBzaG90VmVyc2lvbihzbmFwc2hvdENvbnRlbnRzKVxuICBjb25zdCBpc0ludmFsaWQgPSBzbmFwc2hvdENvbnRlbnRzIC8vICYmIHZhbGlkYXRpb25SZXN1bHRcblxuICAvLyBpZiAodXBkYXRlID09PSAnbm9uZScgJiYgaXNJbnZhbGlkKVxuICAvLyAgIHRocm93IHZhbGlkYXRpb25SZXN1bHRcblxuICBpZiAoKHVwZGF0ZSA9PT0gJ2FsbCcgfHwgdXBkYXRlID09PSAnbmV3JykgJiYgaXNJbnZhbGlkKVxuICAgIGRpcnR5ID0gdHJ1ZVxuXG4gIHJldHVybiB7IGRhdGEsIGRpcnR5IH1cbn1cblxuLy8gQWRkIGV4dHJhIGxpbmUgYnJlYWtzIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIG11bHRpbGluZSBzbmFwc2hvdFxuLy8gdG8gbWFrZSB0aGUgY29udGVudCBlYXNpZXIgdG8gcmVhZC5cbmV4cG9ydCBjb25zdCBhZGRFeHRyYUxpbmVCcmVha3MgPSAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc3RyaW5nLmluY2x1ZGVzKCdcXG4nKSA/IGBcXG4ke3N0cmluZ31cXG5gIDogc3RyaW5nXG5cbi8vIFJlbW92ZSBleHRyYSBsaW5lIGJyZWFrcyBhdCBiZWdpbm5pbmcgYW5kIGVuZCBvZiBtdWx0aWxpbmUgc25hcHNob3QuXG4vLyBJbnN0ZWFkIG9mIHRyaW0sIHdoaWNoIGNhbiByZW1vdmUgYWRkaXRpb25hbCBuZXdsaW5lcyBvciBzcGFjZXNcbi8vIGF0IGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGNvbnRlbnQgZnJvbSBhIGN1c3RvbSBzZXJpYWxpemVyLlxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4dHJhTGluZUJyZWFrcyA9IChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzdHJpbmcubGVuZ3RoID4gMiAmJiBzdHJpbmcuc3RhcnRzV2l0aCgnXFxuJykgJiYgc3RyaW5nLmVuZHNXaXRoKCdcXG4nKVxuICAgID8gc3RyaW5nLnNsaWNlKDEsIC0xKVxuICAgIDogc3RyaW5nXG5cbi8vIGV4cG9ydCBjb25zdCByZW1vdmVMaW5lc0JlZm9yZUV4dGVybmFsTWF0Y2hlclRyYXAgPSAoc3RhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4vLyAgIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpXG5cbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuLy8gICAgIC8vIEl0J3MgYSBmdW5jdGlvbiBuYW1lIHNwZWNpZmllZCBpbiBgcGFja2FnZXMvZXhwZWN0L3NyYy9pbmRleC50c2Bcbi8vICAgICAvLyBmb3IgZXh0ZXJuYWwgY3VzdG9tIG1hdGNoZXJzLlxuLy8gICAgIGlmIChsaW5lc1tpXS5pbmNsdWRlcygnX19FWFRFUk5BTF9NQVRDSEVSX1RSQVBfXycpKVxuLy8gICAgICAgcmV0dXJuIGxpbmVzLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKVxuLy8gICB9XG5cbi8vICAgcmV0dXJuIHN0YWNrXG4vLyB9XG5cbmNvbnN0IGVzY2FwZVJlZ2V4ID0gdHJ1ZVxuY29uc3QgcHJpbnRGdW5jdGlvbk5hbWUgPSBmYWxzZVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKHZhbDogdW5rbm93bixcbiAgaW5kZW50ID0gMixcbiAgZm9ybWF0T3ZlcnJpZGVzOiBQcmV0dHlGb3JtYXRPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplTmV3bGluZXMoXG4gICAgcHJldHR5Rm9ybWF0KHZhbCwge1xuICAgICAgZXNjYXBlUmVnZXgsXG4gICAgICBpbmRlbnQsXG4gICAgICBwbHVnaW5zOiBnZXRTZXJpYWxpemVycygpLFxuICAgICAgcHJpbnRGdW5jdGlvbk5hbWUsXG4gICAgICAuLi5mb3JtYXRPdmVycmlkZXMsXG4gICAgfSksXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlmeSh2YWw6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gcHJldHR5Rm9ybWF0KHZhbCwge1xuICAgIGVzY2FwZVJlZ2V4LFxuICAgIG1pbjogdHJ1ZSxcbiAgICBwbHVnaW5zOiBnZXRTZXJpYWxpemVycygpLFxuICAgIHByaW50RnVuY3Rpb25OYW1lLFxuICB9KVxufVxuXG4vLyBSZW1vdmUgZG91YmxlIHF1b3RlIG1hcmtzIGFuZCB1bmVzY2FwZSBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcy5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVN0cmluZyhzdHJpbmdpZmllZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmaWVkLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cXFxcKFwifFxcXFwpL2csICckMScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVCYWNrdGlja1N0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvYHxcXFxcfFxcJHsvZywgJ1xcXFwkJicpXG59XG5cbmZ1bmN0aW9uIHByaW50QmFja3RpY2tTdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7ZXNjYXBlQmFja3RpY2tTdHJpbmcoc3RyKX1cXGBgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXJlY3RvcnlFeGlzdHMoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gIH1cbiAgY2F0Y2ggeyB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5ld2xpbmVzKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxyXFxufFxcci9nLCAnXFxuJylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVTbmFwc2hvdEZpbGUoXG4gIHNuYXBzaG90RGF0YTogU25hcHNob3REYXRhLFxuICBzbmFwc2hvdFBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBzbmFwc2hvdHMgPSBPYmplY3Qua2V5cyhzbmFwc2hvdERhdGEpXG4gICAgLnNvcnQobmF0dXJhbENvbXBhcmUpXG4gICAgLm1hcChcbiAgICAgIGtleSA9PiBgZXhwb3J0c1ske3ByaW50QmFja3RpY2tTdHJpbmcoa2V5KX1dID0gJHtwcmludEJhY2t0aWNrU3RyaW5nKG5vcm1hbGl6ZU5ld2xpbmVzKHNuYXBzaG90RGF0YVtrZXldKSl9O2AsXG4gICAgKVxuXG4gIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhzbmFwc2hvdFBhdGgpXG4gIGF3YWl0IGZzcC53cml0ZUZpbGUoXG4gICAgc25hcHNob3RQYXRoLFxuICAgIGAke3dyaXRlU25hcHNob3RWZXJzaW9uKCl9XFxuXFxuJHtzbmFwc2hvdHMuam9pbignXFxuXFxuJyl9XFxuYCxcbiAgICAndXRmLTgnLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRXhwZWN0ZWQoZXhwZWN0ZWQ/OiBzdHJpbmcpIHtcbiAgZnVuY3Rpb24gZmluZFN0YXJ0SW5kZW50KCkge1xuICAgIGNvbnN0IG1hdGNoID0gL14oICspfVxccyskL20uZXhlYyhleHBlY3RlZCB8fCAnJylcbiAgICByZXR1cm4gbWF0Y2g/LlsxXT8ubGVuZ3RoIHx8IDBcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0SWRlbnQgPSBmaW5kU3RhcnRJbmRlbnQoKVxuXG4gIGxldCBleHBlY3RlZFRyaW1tZWQgPSBleHBlY3RlZD8udHJpbSgpXG5cbiAgaWYgKHN0YXJ0SWRlbnQpIHtcbiAgICBleHBlY3RlZFRyaW1tZWQgPSBleHBlY3RlZFRyaW1tZWRcbiAgICAgID8ucmVwbGFjZShuZXcgUmVnRXhwKGBeJHsnICcucmVwZWF0KHN0YXJ0SWRlbnQpfWAsICdnbScpLCAnJykucmVwbGFjZSgvICt9JC8sICd9JylcbiAgfVxuXG4gIHJldHVybiBleHBlY3RlZFRyaW1tZWRcbn1cblxuZnVuY3Rpb24gZGVlcE1lcmdlQXJyYXkodGFyZ2V0OiBhbnlbXSA9IFtdLCBzb3VyY2U6IGFueVtdID0gW10pIHtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gQXJyYXkuZnJvbSh0YXJnZXQpXG5cbiAgc291cmNlLmZvckVhY2goKHNvdXJjZUVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IG1lcmdlZE91dHB1dFtpbmRleF1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtpbmRleF0pKSB7XG4gICAgICBtZXJnZWRPdXRwdXRbaW5kZXhdID0gZGVlcE1lcmdlQXJyYXkodGFyZ2V0W2luZGV4XSwgc291cmNlRWxlbWVudClcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBkZWVwTWVyZ2VTbmFwc2hvdCh0YXJnZXRbaW5kZXhdLCBzb3VyY2VFbGVtZW50KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFNvdXJjZSBkb2VzIG5vdCBleGlzdCBpbiB0YXJnZXQgb3IgdGFyZ2V0IGlzIHByaW1pdGl2ZSBhbmQgY2Fubm90IGJlIGRlZXAgbWVyZ2VkXG4gICAgICBtZXJnZWRPdXRwdXRbaW5kZXhdID0gc291cmNlRWxlbWVudFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWVyZ2VkT3V0cHV0XG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSwgYnV0IGNvbnNpZGVycyBhc3ltbWV0cmljIG1hdGNoZXJzLiBVbmxpa2UgYmFzZSB1dGlsJ3MgZGVlcCBtZXJnZSxcbiAqIHdpbGwgbWVyZ2UgYW55IG9iamVjdC1saWtlIGluc3RhbmNlLlxuICogQ29tcGF0aWJsZSB3aXRoIEplc3QncyBzbmFwc2hvdCBtYXRjaGVyLiBTaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBzbmFwc2hvdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHRvTWF0Y2hTbmFwc2hvdCh7XG4gKiAgIG5hbWU6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCd0ZXh0JylcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSB7XG4gIGlmIChpc09iamVjdCh0YXJnZXQpICYmIGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICBjb25zdCBtZXJnZWRPdXRwdXQgPSB7IC4uLnRhcmdldCB9XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkgJiYgIXNvdXJjZVtrZXldLiQkdHlwZW9mKSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0YXJnZXQpKSBPYmplY3QuYXNzaWduKG1lcmdlZE91dHB1dCwgeyBba2V5XTogc291cmNlW2tleV0gfSlcbiAgICAgICAgZWxzZSBtZXJnZWRPdXRwdXRba2V5XSA9IGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlW2tleV0pKSB7XG4gICAgICAgIG1lcmdlZE91dHB1dFtrZXldID0gZGVlcE1lcmdlQXJyYXkodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obWVyZ2VkT3V0cHV0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbWVyZ2VkT3V0cHV0XG4gIH1cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgIHJldHVybiBkZWVwTWVyZ2VBcnJheSh0YXJnZXQsIHNvdXJjZSlcbiAgfVxuICByZXR1cm4gdGFyZ2V0XG59XG4iLCJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgTWFnaWNTdHJpbmcgZnJvbSAnbWFnaWMtc3RyaW5nJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi4vLi4vLi4vcnVudGltZS9ycGMnXG5pbXBvcnQgeyBnZXRPcmlnaW5hbFBvcywgbGluZVNwbGl0UkUsIG51bWJlclRvUG9zLCBwb3NUb051bWJlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvdXJjZS1tYXAnXG5pbXBvcnQgeyBnZXRDYWxsTGFzdEluZGV4IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lU25hcHNob3Qge1xuICBzbmFwc2hvdDogc3RyaW5nXG4gIGZpbGU6IHN0cmluZ1xuICBsaW5lOiBudW1iZXJcbiAgY29sdW1uOiBudW1iZXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVJbmxpbmVTbmFwc2hvdHMoXG4gIHNuYXBzaG90czogQXJyYXk8SW5saW5lU25hcHNob3Q+LFxuKSB7XG4gIGNvbnN0IE1hZ2ljU3RyaW5nID0gKGF3YWl0IGltcG9ydCgnbWFnaWMtc3RyaW5nJykpLmRlZmF1bHRcbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0KHNuYXBzaG90cy5tYXAoaSA9PiBpLmZpbGUpKVxuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGZpbGVzKS5tYXAoYXN5bmMoZmlsZSkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IGF3YWl0IHJwYygpLmdldFNvdXJjZU1hcChmaWxlKVxuICAgIGNvbnN0IHNuYXBzID0gc25hcHNob3RzLmZpbHRlcihpID0+IGkuZmlsZSA9PT0gZmlsZSlcbiAgICBjb25zdCBjb2RlID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKVxuICAgIGNvbnN0IHMgPSBuZXcgTWFnaWNTdHJpbmcoY29kZSlcblxuICAgIGZvciAoY29uc3Qgc25hcCBvZiBzbmFwcykge1xuICAgICAgY29uc3QgcG9zID0gYXdhaXQgZ2V0T3JpZ2luYWxQb3MobWFwLCBzbmFwKVxuICAgICAgY29uc3QgaW5kZXggPSBwb3NUb051bWJlcihjb2RlLCBwb3MhKVxuICAgICAgcmVwbGFjZUlubGluZVNuYXAoY29kZSwgcywgaW5kZXgsIHNuYXAuc25hcHNob3QpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtZWQgPSBzLnRvU3RyaW5nKClcbiAgICBpZiAodHJhbnNmb3JtZWQgIT09IGNvZGUpXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgdHJhbnNmb3JtZWQsICd1dGYtOCcpXG4gIH0pKVxufVxuXG5jb25zdCBzdGFydE9iamVjdFJlZ2V4ID0gLyg/OnRvTWF0Y2hJbmxpbmVTbmFwc2hvdHx0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KVxccypcXChcXHMqKHspL21cblxuZnVuY3Rpb24gcmVwbGFjZU9iamVjdFNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvZGUgPSBjb2RlLnNsaWNlKGluZGV4KVxuICBjb25zdCBzdGFydE1hdGNoID0gc3RhcnRPYmplY3RSZWdleC5leGVjKGNvZGUpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gZmFsc2VcblxuICBjb2RlID0gY29kZS5zbGljZShzdGFydE1hdGNoLmluZGV4KVxuICBjb25zdCBjaGFySW5kZXggPSBnZXRDYWxsTGFzdEluZGV4KGNvZGUpXG4gIGlmIChjaGFySW5kZXggPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgcy5hcHBlbmRMZWZ0KGluZGV4ICsgc3RhcnRNYXRjaC5pbmRleCArIGNoYXJJbmRleCwgYCwgJHtwcmVwYXJlU25hcFN0cmluZyhuZXdTbmFwLCBjb2RlLCBpbmRleCl9YClcblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlU25hcFN0cmluZyhzbmFwOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IGxpbmVJbmRleCA9IG51bWJlclRvUG9zKHNvdXJjZSwgaW5kZXgpLmxpbmVcbiAgY29uc3QgbGluZSA9IHNvdXJjZS5zcGxpdChsaW5lU3BsaXRSRSlbbGluZUluZGV4IC0gMV1cbiAgY29uc3QgaW5kZW50ID0gbGluZS5tYXRjaCgvXlxccyovKSFbMF0gfHwgJydcbiAgY29uc3QgaW5kZW50TmV4dCA9IGluZGVudC5pbmNsdWRlcygnXFx0JykgPyBgJHtpbmRlbnR9XFx0YCA6IGAke2luZGVudH0gIGBcblxuICBjb25zdCBsaW5lcyA9IHNuYXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvXFwkL2csICdcXFxcJCcpXG4gICAgLnNwbGl0KC9cXG4vZylcbiAgICAubWFwKGkgPT4gaS50cmltRW5kKCkpXG5cbiAgY29uc3QgaXNPbmVsaW5lID0gbGluZXMubGVuZ3RoIDw9IDFcbiAgY29uc3QgcXVvdGUgPSBpc09uZWxpbmUgPyAnXFwnJyA6ICdgJ1xuICByZXR1cm4gaXNPbmVsaW5lXG4gICAgPyBgJyR7bGluZXMuam9pbignXFxuJykucmVwbGFjZSgvJy9nLCAnXFxcXFxcJycpfSdgXG4gICAgOiBgJHtxdW90ZX1cXG4ke2xpbmVzLm1hcChpID0+IGluZGVudE5leHQgKyBpKS5qb2luKCdcXG4nKS5yZXBsYWNlKC9gL2csICdcXFxcYCcpfVxcbiR7aW5kZW50fSR7cXVvdGV9YFxufVxuXG5jb25zdCBzdGFydFJlZ2V4ID0gLyg/OnRvTWF0Y2hJbmxpbmVTbmFwc2hvdHx0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KVxccypcXChcXHMqW1xcd18kXSooWydcImBcXCldKS9tXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUlubGluZVNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydFJlZ2V4LmV4ZWMoY29kZS5zbGljZShpbmRleCkpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gcmVwbGFjZU9iamVjdFNuYXAoY29kZSwgcywgaW5kZXgsIG5ld1NuYXApXG5cbiAgY29uc3QgcXVvdGUgPSBzdGFydE1hdGNoWzFdXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCArIHN0YXJ0TWF0Y2guaW5kZXghICsgc3RhcnRNYXRjaFswXS5sZW5ndGhcbiAgY29uc3Qgc25hcFN0cmluZyA9IHByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KVxuXG4gIGlmIChxdW90ZSA9PT0gJyknKSB7XG4gICAgcy5hcHBlbmRSaWdodChzdGFydEluZGV4IC0gMSwgc25hcFN0cmluZylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcXVvdGVFbmRSRSA9IG5ldyBSZWdFeHAoYCg/Ol58W15cXFxcXFxcXF0pJHtxdW90ZX1gKVxuICBjb25zdCBlbmRNYXRjaCA9IHF1b3RlRW5kUkUuZXhlYyhjb2RlLnNsaWNlKHN0YXJ0SW5kZXgpKVxuICBpZiAoIWVuZE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBlbmRNYXRjaC5pbmRleCEgKyBlbmRNYXRjaFswXS5sZW5ndGhcbiAgcy5vdmVyd3JpdGUoc3RhcnRJbmRleCAtIDEsIGVuZEluZGV4LCBzbmFwU3RyaW5nKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IElOREVOVEFUSU9OX1JFR0VYID0gL14oW15cXFNcXG5dKilcXFMvbVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbihpbmxpbmVTbmFwc2hvdDogc3RyaW5nKSB7XG4gIC8vIEZpbmQgaW5kZW50YXRpb24gaWYgZXhpc3RzLlxuICBjb25zdCBtYXRjaCA9IGlubGluZVNuYXBzaG90Lm1hdGNoKElOREVOVEFUSU9OX1JFR0VYKVxuICBpZiAoIW1hdGNoIHx8ICFtYXRjaFsxXSkge1xuICAgIC8vIE5vIGluZGVudGF0aW9uLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgY29uc3QgaW5kZW50YXRpb24gPSBtYXRjaFsxXVxuICBjb25zdCBsaW5lcyA9IGlubGluZVNuYXBzaG90LnNwbGl0KC9cXG4vZylcbiAgaWYgKGxpbmVzLmxlbmd0aCA8PSAyKSB7XG4gICAgLy8gTXVzdCBiZSBhdCBsZWFzdCAzIGxpbmVzLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgaWYgKGxpbmVzWzBdLnRyaW0oKSAhPT0gJycgfHwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0udHJpbSgpICE9PSAnJykge1xuICAgIC8vIElmIG5vdCBibGFuayBmaXJzdCBhbmQgbGFzdCBsaW5lcywgYWJvcnQuXG4gICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGlmIChsaW5lc1tpXSAhPT0gJycpIHtcbiAgICAgIGlmIChsaW5lc1tpXS5pbmRleE9mKGluZGVudGF0aW9uKSAhPT0gMCkge1xuICAgICAgICAvLyBBbGwgbGluZXMgZXhjZXB0IGZpcnN0IGFuZCBsYXN0IHNob3VsZCBlaXRoZXIgYmUgYmxhbmsgb3IgaGF2ZSB0aGUgc2FtZVxuICAgICAgICAvLyBpbmRlbnQgYXMgdGhlIGZpcnN0IGxpbmUgKG9yIG1vcmUpLiBJZiB0aGlzIGlzbid0IHRoZSBjYXNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gdG91Y2ggdGhlIHNuYXBzaG90IGF0IGFsbC5cbiAgICAgICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gICAgICB9XG5cbiAgICAgIGxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyaW5nKGluZGVudGF0aW9uLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0IGxpbmUgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBpdCB3b24ndCBoYXZlIHRoZSBzYW1lIGluZGVudCBhcyBvdGhlcnNcbiAgLy8gYnV0IG1heSBzdGlsbCBoYXZlIGJlZW4gZ2l2ZW4gc29tZSBpbmRlbnQgdG8gbGluZSB1cC5cbiAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPSAnJ1xuXG4gIC8vIFJldHVybiBpbmxpbmUgc25hcHNob3QsIG5vdyBhdCBpbmRlbnQgMC5cbiAgaW5saW5lU25hcHNob3QgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gaW5saW5lU25hcHNob3Rcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICdAamVzdC90eXBlcydcbi8vIGltcG9ydCB7IGdldFN0YWNrVHJhY2VMaW5lcywgZ2V0VG9wRnJhbWUgfSBmcm9tICdqZXN0LW1lc3NhZ2UtdXRpbCdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRTdGFjaywgU25hcHNob3REYXRhLCBTbmFwc2hvdE1hdGNoT3B0aW9ucywgU25hcHNob3RTdGF0ZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IHNsYXNoIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBwYXJzZVN0YWNrdHJhY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zb3VyY2UtbWFwJ1xuaW1wb3J0IHR5cGUgeyBJbmxpbmVTbmFwc2hvdCB9IGZyb20gJy4vaW5saW5lU25hcHNob3QnXG5pbXBvcnQgeyBzYXZlSW5saW5lU25hcHNob3RzIH0gZnJvbSAnLi9pbmxpbmVTbmFwc2hvdCdcblxuaW1wb3J0IHtcbiAgYWRkRXh0cmFMaW5lQnJlYWtzLFxuICBnZXRTbmFwc2hvdERhdGEsXG4gIGtleVRvVGVzdE5hbWUsXG4gIHByZXBhcmVFeHBlY3RlZCxcbiAgcmVtb3ZlRXh0cmFMaW5lQnJlYWtzLFxuICBzYXZlU25hcHNob3RGaWxlLFxuICBzZXJpYWxpemUsXG4gIHRlc3ROYW1lVG9LZXksXG59IGZyb20gJy4vdXRpbHMnXG5cbmludGVyZmFjZSBTbmFwc2hvdFJldHVybk9wdGlvbnMge1xuICBhY3R1YWw6IHN0cmluZ1xuICBjb3VudDogbnVtYmVyXG4gIGV4cGVjdGVkPzogc3RyaW5nXG4gIGtleTogc3RyaW5nXG4gIHBhc3M6IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIFNhdmVTdGF0dXMge1xuICBkZWxldGVkOiBib29sZWFuXG4gIHNhdmVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNuYXBzaG90U3RhdGUge1xuICBwcml2YXRlIF9jb3VudGVyczogTWFwPHN0cmluZywgbnVtYmVyPlxuICBwcml2YXRlIF9kaXJ0eTogYm9vbGVhblxuICBwcml2YXRlIF91cGRhdGVTbmFwc2hvdDogQ29uZmlnLlNuYXBzaG90VXBkYXRlU3RhdGVcbiAgcHJpdmF0ZSBfc25hcHNob3REYXRhOiBTbmFwc2hvdERhdGFcbiAgcHJpdmF0ZSBfaW5pdGlhbERhdGE6IFNuYXBzaG90RGF0YVxuICBwcml2YXRlIF9zbmFwc2hvdFBhdGg6IHN0cmluZ1xuICBwcml2YXRlIF9pbmxpbmVTbmFwc2hvdHM6IEFycmF5PElubGluZVNuYXBzaG90PlxuICBwcml2YXRlIF91bmNoZWNrZWRLZXlzOiBTZXQ8c3RyaW5nPlxuICBwcml2YXRlIF9zbmFwc2hvdEZvcm1hdDogUHJldHR5Rm9ybWF0T3B0aW9uc1xuXG4gIGFkZGVkOiBudW1iZXJcbiAgZXhwYW5kOiBib29sZWFuXG4gIG1hdGNoZWQ6IG51bWJlclxuICB1bm1hdGNoZWQ6IG51bWJlclxuICB1cGRhdGVkOiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihzbmFwc2hvdFBhdGg6IHN0cmluZywgb3B0aW9uczogU25hcHNob3RTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9zbmFwc2hvdFBhdGggPSBzbmFwc2hvdFBhdGhcbiAgICBjb25zdCB7IGRhdGEsIGRpcnR5IH0gPSBnZXRTbmFwc2hvdERhdGEoXG4gICAgICB0aGlzLl9zbmFwc2hvdFBhdGgsXG4gICAgICBvcHRpb25zLnVwZGF0ZVNuYXBzaG90LFxuICAgIClcbiAgICB0aGlzLl9pbml0aWFsRGF0YSA9IGRhdGFcbiAgICB0aGlzLl9zbmFwc2hvdERhdGEgPSBkYXRhXG4gICAgdGhpcy5fZGlydHkgPSBkaXJ0eVxuICAgIHRoaXMuX2lubGluZVNuYXBzaG90cyA9IFtdXG4gICAgdGhpcy5fdW5jaGVja2VkS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fc25hcHNob3REYXRhKSlcbiAgICB0aGlzLl9jb3VudGVycyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuZXhwYW5kID0gb3B0aW9ucy5leHBhbmQgfHwgZmFsc2VcbiAgICB0aGlzLmFkZGVkID0gMFxuICAgIHRoaXMubWF0Y2hlZCA9IDBcbiAgICB0aGlzLnVubWF0Y2hlZCA9IDBcbiAgICB0aGlzLl91cGRhdGVTbmFwc2hvdCA9IG9wdGlvbnMudXBkYXRlU25hcHNob3RcbiAgICB0aGlzLnVwZGF0ZWQgPSAwXG4gICAgdGhpcy5fc25hcHNob3RGb3JtYXQgPSB7XG4gICAgICBwcmludEJhc2ljUHJvdG90eXBlOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMuc25hcHNob3RGb3JtYXQsXG4gICAgfVxuICB9XG5cbiAgbWFya1NuYXBzaG90c0FzQ2hlY2tlZEZvclRlc3QodGVzdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZm9yRWFjaCgodW5jaGVja2VkS2V5KSA9PiB7XG4gICAgICBpZiAoa2V5VG9UZXN0TmFtZSh1bmNoZWNrZWRLZXkpID09PSB0ZXN0TmFtZSlcbiAgICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5kZWxldGUodW5jaGVja2VkS2V5KVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIF9nZXRJbmxpbmVTbmFwc2hvdFN0YWNrKHN0YWNrczogUGFyc2VkU3RhY2tbXSkge1xuICAgIC8vIGlmIGNhbGxlZCBpbnNpZGUgcmVzb2x2ZXMvcmVqZWN0cywgc3RhY2t0cmFjZSBpcyBkaWZmZXJlbnRcbiAgICBjb25zdCBwcm9taXNlSW5kZXggPSBzdGFja3MuZmluZEluZGV4KGkgPT4gaS5tZXRob2QubWF0Y2goL19fVklURVNUXyhSRVNPTFZFU3xSRUpFQ1RTKV9fLykpXG4gICAgaWYgKHByb21pc2VJbmRleCAhPT0gLTEpXG4gICAgICByZXR1cm4gc3RhY2tzW3Byb21pc2VJbmRleCArIDNdXG5cbiAgICAvLyBpbmxpbmUgc25hcHNob3QgZnVuY3Rpb24gaXMgY2FsbGVkIF9fVklURVNUX0lOTElORV9TTkFQU0hPVF9fXG4gICAgLy8gaW4gaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHNcbiAgICBjb25zdCBzdGFja0luZGV4ID0gc3RhY2tzLmZpbmRJbmRleChpID0+IGkubWV0aG9kLmluY2x1ZGVzKCdfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXycpKVxuICAgIHJldHVybiBzdGFja0luZGV4ICE9PSAtMSA/IHN0YWNrc1tzdGFja0luZGV4ICsgMl0gOiBudWxsXG4gIH1cblxuICBwcml2YXRlIF9hZGRTbmFwc2hvdChcbiAgICBrZXk6IHN0cmluZyxcbiAgICByZWNlaXZlZFNlcmlhbGl6ZWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGlzSW5saW5lOiBib29sZWFuOyBlcnJvcj86IEVycm9yIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZVxuICAgIGlmIChvcHRpb25zLmlzSW5saW5lKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG9wdGlvbnMuZXJyb3IgfHwgbmV3IEVycm9yKCdVbmtub3duIGVycm9yJylcbiAgICAgIGNvbnN0IHN0YWNrcyA9IHBhcnNlU3RhY2t0cmFjZShlcnJvciwgdHJ1ZSlcbiAgICAgIHN0YWNrcy5mb3JFYWNoKGkgPT4gaS5maWxlID0gc2xhc2goaS5maWxlKSlcbiAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy5fZ2V0SW5saW5lU25hcHNob3RTdGFjayhzdGFja3MpXG4gICAgICBpZiAoIXN0YWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVml0ZXN0OiBDb3VsZG4ndCBpbmZlciBzdGFjayBmcmFtZSBmb3IgaW5saW5lIHNuYXBzaG90LlxcbiR7SlNPTi5zdHJpbmdpZnkoc3RhY2tzKX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmxpbmVTbmFwc2hvdHMucHVzaCh7XG4gICAgICAgIHNuYXBzaG90OiByZWNlaXZlZFNlcmlhbGl6ZWQsXG4gICAgICAgIC4uLnN0YWNrLFxuICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSA9IHJlY2VpdmVkU2VyaWFsaXplZFxuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX3NuYXBzaG90RGF0YSA9IHRoaXMuX2luaXRpYWxEYXRhXG4gICAgLy8gdGhpcy5faW5saW5lU25hcHNob3RzID0gW11cbiAgICB0aGlzLl9jb3VudGVycyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuYWRkZWQgPSAwXG4gICAgdGhpcy5tYXRjaGVkID0gMFxuICAgIHRoaXMudW5tYXRjaGVkID0gMFxuICAgIHRoaXMudXBkYXRlZCA9IDBcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxTYXZlU3RhdHVzPiB7XG4gICAgY29uc3QgaGFzRXh0ZXJuYWxTbmFwc2hvdHMgPSBPYmplY3Qua2V5cyh0aGlzLl9zbmFwc2hvdERhdGEpLmxlbmd0aFxuICAgIGNvbnN0IGhhc0lubGluZVNuYXBzaG90cyA9IHRoaXMuX2lubGluZVNuYXBzaG90cy5sZW5ndGhcbiAgICBjb25zdCBpc0VtcHR5ID0gIWhhc0V4dGVybmFsU25hcHNob3RzICYmICFoYXNJbmxpbmVTbmFwc2hvdHNcblxuICAgIGNvbnN0IHN0YXR1czogU2F2ZVN0YXR1cyA9IHtcbiAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgc2F2ZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICgodGhpcy5fZGlydHkgfHwgdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplKSAmJiAhaXNFbXB0eSkge1xuICAgICAgaWYgKGhhc0V4dGVybmFsU25hcHNob3RzKVxuICAgICAgICBhd2FpdCBzYXZlU25hcHNob3RGaWxlKHRoaXMuX3NuYXBzaG90RGF0YSwgdGhpcy5fc25hcHNob3RQYXRoKVxuICAgICAgaWYgKGhhc0lubGluZVNuYXBzaG90cylcbiAgICAgICAgYXdhaXQgc2F2ZUlubGluZVNuYXBzaG90cyh0aGlzLl9pbmxpbmVTbmFwc2hvdHMpXG5cbiAgICAgIHN0YXR1cy5zYXZlZCA9IHRydWVcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc0V4dGVybmFsU25hcHNob3RzICYmIGZzLmV4aXN0c1N5bmModGhpcy5fc25hcHNob3RQYXRoKSkge1xuICAgICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJylcbiAgICAgICAgZnMudW5saW5rU3luYyh0aGlzLl9zbmFwc2hvdFBhdGgpXG5cbiAgICAgIHN0YXR1cy5kZWxldGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0dXNcbiAgfVxuXG4gIGdldFVuY2hlY2tlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3VuY2hlY2tlZEtleXMuc2l6ZSB8fCAwXG4gIH1cblxuICBnZXRVbmNoZWNrZWRLZXlzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3VuY2hlY2tlZEtleXMpXG4gIH1cblxuICByZW1vdmVVbmNoZWNrZWRLZXlzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcgJiYgdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplKSB7XG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZm9yRWFjaChrZXkgPT4gZGVsZXRlIHRoaXMuX3NuYXBzaG90RGF0YVtrZXldKVxuICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5jbGVhcigpXG4gICAgfVxuICB9XG5cbiAgbWF0Y2goe1xuICAgIHRlc3ROYW1lLFxuICAgIHJlY2VpdmVkLFxuICAgIGtleSxcbiAgICBpbmxpbmVTbmFwc2hvdCxcbiAgICBpc0lubGluZSxcbiAgICBlcnJvcixcbiAgfTogU25hcHNob3RNYXRjaE9wdGlvbnMpOiBTbmFwc2hvdFJldHVybk9wdGlvbnMge1xuICAgIHRoaXMuX2NvdW50ZXJzLnNldCh0ZXN0TmFtZSwgKHRoaXMuX2NvdW50ZXJzLmdldCh0ZXN0TmFtZSkgfHwgMCkgKyAxKVxuICAgIGNvbnN0IGNvdW50ID0gTnVtYmVyKHRoaXMuX2NvdW50ZXJzLmdldCh0ZXN0TmFtZSkpXG5cbiAgICBpZiAoIWtleSlcbiAgICAgIGtleSA9IHRlc3ROYW1lVG9LZXkodGVzdE5hbWUsIGNvdW50KVxuXG4gICAgLy8gRG8gbm90IG1hcmsgdGhlIHNuYXBzaG90IGFzIFwiY2hlY2tlZFwiIGlmIHRoZSBzbmFwc2hvdCBpcyBpbmxpbmUgYW5kXG4gICAgLy8gdGhlcmUncyBhbiBleHRlcm5hbCBzbmFwc2hvdC4gVGhpcyB3YXkgdGhlIGV4dGVybmFsIHNuYXBzaG90IGNhbiBiZVxuICAgIC8vIHJlbW92ZWQgd2l0aCBgLS11cGRhdGVTbmFwc2hvdGAuXG4gICAgaWYgKCEoaXNJbmxpbmUgJiYgdGhpcy5fc25hcHNob3REYXRhW2tleV0gIT09IHVuZGVmaW5lZCkpXG4gICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmRlbGV0ZShrZXkpXG5cbiAgICBjb25zdCByZWNlaXZlZFNlcmlhbGl6ZWQgPSBhZGRFeHRyYUxpbmVCcmVha3Moc2VyaWFsaXplKHJlY2VpdmVkLCB1bmRlZmluZWQsIHRoaXMuX3NuYXBzaG90Rm9ybWF0KSlcbiAgICBjb25zdCBleHBlY3RlZCA9IGlzSW5saW5lID8gaW5saW5lU25hcHNob3QgOiB0aGlzLl9zbmFwc2hvdERhdGFba2V5XVxuICAgIGNvbnN0IGV4cGVjdGVkVHJpbW1lZCA9IHByZXBhcmVFeHBlY3RlZChleHBlY3RlZClcbiAgICBjb25zdCBwYXNzID0gZXhwZWN0ZWRUcmltbWVkID09PSBwcmVwYXJlRXhwZWN0ZWQocmVjZWl2ZWRTZXJpYWxpemVkKVxuICAgIGNvbnN0IGhhc1NuYXBzaG90ID0gZXhwZWN0ZWQgIT09IHVuZGVmaW5lZFxuICAgIGNvbnN0IHNuYXBzaG90SXNQZXJzaXN0ZWQgPSBpc0lubGluZSB8fCBmcy5leGlzdHNTeW5jKHRoaXMuX3NuYXBzaG90UGF0aClcblxuICAgIGlmIChwYXNzICYmICFpc0lubGluZSkge1xuICAgICAgLy8gRXhlY3V0aW5nIGEgc25hcHNob3QgZmlsZSBhcyBKYXZhU2NyaXB0IGFuZCB3cml0aW5nIHRoZSBzdHJpbmdzIGJhY2tcbiAgICAgIC8vIHdoZW4gb3RoZXIgc25hcHNob3RzIGhhdmUgY2hhbmdlZCBsb3NlcyB0aGUgcHJvcGVyIGVzY2FwaW5nIGZvciBzb21lXG4gICAgICAvLyBjaGFyYWN0ZXJzLiBTaW5jZSB3ZSBjaGVjayBldmVyeSBzbmFwc2hvdCBpbiBldmVyeSB0ZXN0LCB1c2UgdGhlIG5ld2x5XG4gICAgICAvLyBnZW5lcmF0ZWQgZm9ybWF0dGVkIHN0cmluZy5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBhIHNuYXBzaG90IGlzIGFkZGVkIGFuZCB0aGUgZGlydHlcbiAgICAgIC8vIGZsYWcgaXMgc2V0LlxuICAgICAgdGhpcy5fc25hcHNob3REYXRhW2tleV0gPSByZWNlaXZlZFNlcmlhbGl6ZWRcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgdGhlIGNvbmRpdGlvbnMgb24gd2hlbiB0byB3cml0ZSBzbmFwc2hvdHM6XG4gICAgLy8gICogVGhlcmUncyBubyBzbmFwc2hvdCBmaWxlIGluIGEgbm9uLUNJIGVudmlyb25tZW50LlxuICAgIC8vICAqIFRoZXJlIGlzIGEgc25hcHNob3QgZmlsZSBhbmQgd2UgZGVjaWRlZCB0byB1cGRhdGUgdGhlIHNuYXBzaG90LlxuICAgIC8vICAqIFRoZXJlIGlzIGEgc25hcHNob3QgZmlsZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0aGlzIHNuYXBzaG90LlxuICAgIC8vIFRoZXNlIGFyZSB0aGUgY29uZGl0aW9ucyBvbiB3aGVuIG5vdCB0byB3cml0ZSBzbmFwc2hvdHM6XG4gICAgLy8gICogVGhlIHVwZGF0ZSBmbGFnIGlzIHNldCB0byAnbm9uZScuXG4gICAgLy8gICogVGhlcmUncyBubyBzbmFwc2hvdCBmaWxlIG9yIGEgZmlsZSB3aXRob3V0IHRoaXMgc25hcHNob3Qgb24gYSBDSSBlbnZpcm9ubWVudC5cbiAgICBpZiAoXG4gICAgICAoaGFzU25hcHNob3QgJiYgdGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKVxuICAgICAgIHx8ICgoIWhhc1NuYXBzaG90IHx8ICFzbmFwc2hvdElzUGVyc2lzdGVkKVxuICAgICAgICAgJiYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnbmV3JyB8fCB0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcpKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJykge1xuICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICBpZiAoaGFzU25hcHNob3QpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWQrK1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuYWRkZWQrK1xuXG4gICAgICAgICAgdGhpcy5fYWRkU25hcHNob3Qoa2V5LCByZWNlaXZlZFNlcmlhbGl6ZWQsIHsgZXJyb3IsIGlzSW5saW5lIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXRjaGVkKytcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2FkZFNuYXBzaG90KGtleSwgcmVjZWl2ZWRTZXJpYWxpemVkLCB7IGVycm9yLCBpc0lubGluZSB9KVxuICAgICAgICB0aGlzLmFkZGVkKytcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0dWFsOiAnJyxcbiAgICAgICAgY291bnQsXG4gICAgICAgIGV4cGVjdGVkOiAnJyxcbiAgICAgICAga2V5LFxuICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghcGFzcykge1xuICAgICAgICB0aGlzLnVubWF0Y2hlZCsrXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0dWFsOiByZW1vdmVFeHRyYUxpbmVCcmVha3MocmVjZWl2ZWRTZXJpYWxpemVkKSxcbiAgICAgICAgICBjb3VudCxcbiAgICAgICAgICBleHBlY3RlZDpcbiAgICAgICAgICBleHBlY3RlZFRyaW1tZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyByZW1vdmVFeHRyYUxpbmVCcmVha3MoZXhwZWN0ZWRUcmltbWVkKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXRjaGVkKytcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3R1YWw6ICcnLFxuICAgICAgICAgIGNvdW50LFxuICAgICAgICAgIGV4cGVjdGVkOiAnJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aGUnXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJ1xuaW1wb3J0IHR5cGUgeyBTbmFwc2hvdFJlc3VsdCwgVGVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi4vLi4vcnVudGltZS9ycGMnXG5pbXBvcnQgeyBnZXROYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgZXF1YWxzLCBpdGVyYWJsZUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eSB9IGZyb20gJy4uL2NoYWkvamVzdC11dGlscydcbmltcG9ydCB7IGRlZXBNZXJnZVNuYXBzaG90IH0gZnJvbSAnLi9wb3J0L3V0aWxzJ1xuaW1wb3J0IFNuYXBzaG90U3RhdGUgZnJvbSAnLi9wb3J0L3N0YXRlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHQge1xuICBmaWxlOiBzdHJpbmdcbiAgdGl0bGU/OiBzdHJpbmdcbiAgZnVsbFRpdGxlPzogc3RyaW5nXG59XG5cbmNvbnN0IHJlc29sdmVTbmFwc2hvdFBhdGggPSAodGVzdFBhdGg6IHN0cmluZykgPT5cbiAgcGF0aC5qb2luKFxuICAgIHBhdGguam9pbihwYXRoLmRpcm5hbWUodGVzdFBhdGgpLCAnX19zbmFwc2hvdHNfXycpLFxuICAgIGAke3BhdGguYmFzZW5hbWUodGVzdFBhdGgpfS5zbmFwYCxcbiAgKVxuXG5leHBvcnQgY2xhc3MgU25hcHNob3RDbGllbnQge1xuICB0ZXN0OiBUZXN0IHwgdW5kZWZpbmVkXG4gIHRlc3RGaWxlID0gJydcbiAgc25hcHNob3RTdGF0ZTogU25hcHNob3RTdGF0ZSB8IHVuZGVmaW5lZFxuXG4gIHNldFRlc3QodGVzdDogVGVzdCkge1xuICAgIHRoaXMudGVzdCA9IHRlc3RcblxuICAgIGlmICh0aGlzLnRlc3RGaWxlICE9PSB0aGlzLnRlc3QuZmlsZSEuZmlsZXBhdGgpIHtcbiAgICAgIGlmICh0aGlzLnNuYXBzaG90U3RhdGUpXG4gICAgICAgIHRoaXMuc2F2ZVNuYXAoKVxuXG4gICAgICB0aGlzLnRlc3RGaWxlID0gdGhpcy50ZXN0IS5maWxlIS5maWxlcGF0aFxuICAgICAgdGhpcy5zbmFwc2hvdFN0YXRlID0gbmV3IFNuYXBzaG90U3RhdGUoXG4gICAgICAgIHJlc29sdmVTbmFwc2hvdFBhdGgodGhpcy50ZXN0RmlsZSksXG4gICAgICAgIF9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWcuc25hcHNob3RPcHRpb25zLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyVGVzdCgpIHtcbiAgICB0aGlzLnRlc3QgPSB1bmRlZmluZWRcbiAgfVxuXG4gIGFzc2VydChyZWNlaXZlZDogdW5rbm93biwgbWVzc2FnZT86IHN0cmluZywgaXNJbmxpbmUgPSBmYWxzZSwgcHJvcGVydGllcz86IG9iamVjdCwgaW5saW5lU25hcHNob3Q/OiBzdHJpbmcsIGVycm9yPzogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdClcbiAgICAgIHRocm93IG5ldyBFcnJvcignU25hcHNob3QgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiB0ZXN0JylcblxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZWQgIT09ICdvYmplY3QnIHx8ICFyZWNlaXZlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCB3aGVuIHRoZSBtYXRjaGVyIGhhcyBwcm9wZXJ0aWVzJylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFzcyA9IGVxdWFscyhyZWNlaXZlZCwgcHJvcGVydGllcywgW2l0ZXJhYmxlRXF1YWxpdHksIHN1YnNldEVxdWFsaXR5XSlcbiAgICAgICAgaWYgKCFwYXNzKVxuICAgICAgICAgIGV4cGVjdChyZWNlaXZlZCkuZXF1YWxzKHByb3BlcnRpZXMpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZWNlaXZlZCA9IGRlZXBNZXJnZVNuYXBzaG90KHJlY2VpdmVkLCBwcm9wZXJ0aWVzKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gJ1NuYXBzaG90IG1pc21hdGNoZWQnXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRlc3ROYW1lID0gW1xuICAgICAgLi4uZ2V0TmFtZXModGhpcy50ZXN0KS5zbGljZSgxKSxcbiAgICAgIC4uLihtZXNzYWdlID8gW21lc3NhZ2VdIDogW10pLFxuICAgIF0uam9pbignID4gJylcblxuICAgIGNvbnN0IHsgYWN0dWFsLCBleHBlY3RlZCwga2V5LCBwYXNzIH0gPSB0aGlzLnNuYXBzaG90U3RhdGUhLm1hdGNoKHtcbiAgICAgIHRlc3ROYW1lLFxuICAgICAgcmVjZWl2ZWQsXG4gICAgICBpc0lubGluZSxcbiAgICAgIGVycm9yLFxuICAgICAgaW5saW5lU25hcHNob3QsXG4gICAgfSlcblxuICAgIGlmICghcGFzcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhwZWN0KGFjdHVhbC50cmltKCkpLmVxdWFscyhleHBlY3RlZCA/IGV4cGVjdGVkLnRyaW0oKSA6ICcnKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBTbmFwc2hvdCBcXGAke2tleSB8fCAndW5rbm93bid9XFxgIG1pc21hdGNoZWRgXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVNuYXAoKSB7XG4gICAgaWYgKCF0aGlzLnRlc3RGaWxlIHx8ICF0aGlzLnNuYXBzaG90U3RhdGUpIHJldHVyblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhY2tTbmFwc2hvdFN0YXRlKHRoaXMudGVzdEZpbGUsIHRoaXMuc25hcHNob3RTdGF0ZSlcbiAgICBhd2FpdCBycGMoKS5zbmFwc2hvdFNhdmVkKHJlc3VsdClcblxuICAgIHRoaXMudGVzdEZpbGUgPSAnJ1xuICAgIHRoaXMuc25hcHNob3RTdGF0ZSA9IHVuZGVmaW5lZFxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrU25hcHNob3RTdGF0ZShmaWxlcGF0aDogc3RyaW5nLCBzdGF0ZTogU25hcHNob3RTdGF0ZSk6IFByb21pc2U8U25hcHNob3RSZXN1bHQ+IHtcbiAgY29uc3Qgc25hcHNob3Q6IFNuYXBzaG90UmVzdWx0ID0ge1xuICAgIGZpbGVwYXRoLFxuICAgIGFkZGVkOiAwLFxuICAgIGZpbGVEZWxldGVkOiBmYWxzZSxcbiAgICBtYXRjaGVkOiAwLFxuICAgIHVuY2hlY2tlZDogMCxcbiAgICB1bmNoZWNrZWRLZXlzOiBbXSxcbiAgICB1bm1hdGNoZWQ6IDAsXG4gICAgdXBkYXRlZDogMCxcbiAgfVxuICBjb25zdCB1bmNoZWNrZWRDb3VudCA9IHN0YXRlLmdldFVuY2hlY2tlZENvdW50KClcbiAgY29uc3QgdW5jaGVja2VkS2V5cyA9IHN0YXRlLmdldFVuY2hlY2tlZEtleXMoKVxuICBpZiAodW5jaGVja2VkQ291bnQpXG4gICAgc3RhdGUucmVtb3ZlVW5jaGVja2VkS2V5cygpXG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhdGUuc2F2ZSgpXG4gIHNuYXBzaG90LmZpbGVEZWxldGVkID0gc3RhdHVzLmRlbGV0ZWRcbiAgc25hcHNob3QuYWRkZWQgPSBzdGF0ZS5hZGRlZFxuICBzbmFwc2hvdC5tYXRjaGVkID0gc3RhdGUubWF0Y2hlZFxuICBzbmFwc2hvdC51bm1hdGNoZWQgPSBzdGF0ZS51bm1hdGNoZWRcbiAgc25hcHNob3QudXBkYXRlZCA9IHN0YXRlLnVwZGF0ZWRcbiAgc25hcHNob3QudW5jaGVja2VkID0gIXN0YXR1cy5kZWxldGVkID8gdW5jaGVja2VkQ291bnQgOiAwXG4gIHNuYXBzaG90LnVuY2hlY2tlZEtleXMgPSBBcnJheS5mcm9tKHVuY2hlY2tlZEtleXMpXG5cbiAgcmV0dXJuIHNuYXBzaG90XG59XG4iLCJpbXBvcnQgdHlwZSB7IENoYWlQbHVnaW4gfSBmcm9tICcuLi9jaGFpL3R5cGVzJ1xuaW1wb3J0IHsgU25hcHNob3RDbGllbnQgfSBmcm9tICcuL2NsaWVudCdcbmltcG9ydCB7IHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbiB9IGZyb20gJy4vcG9ydC9pbmxpbmVTbmFwc2hvdCdcblxubGV0IF9jbGllbnQ6IFNuYXBzaG90Q2xpZW50XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbmFwc2hvdENsaWVudCgpOiBTbmFwc2hvdENsaWVudCB7XG4gIGlmICghX2NsaWVudClcbiAgICBfY2xpZW50ID0gbmV3IFNuYXBzaG90Q2xpZW50KClcbiAgcmV0dXJuIF9jbGllbnRcbn1cblxuY29uc3QgZ2V0RXJyb3JTdHJpbmcgPSAoZXhwZWN0ZWQ6ICgpID0+IHZvaWQpID0+IHtcbiAgdHJ5IHtcbiAgICBleHBlY3RlZCgpXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgcmV0dXJuIGUubWVzc2FnZVxuXG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignc25hcHNob3QgZnVuY3Rpb24gZGlkblxcJ3QgdGhyZXcnKVxufVxuXG5leHBvcnQgY29uc3QgU25hcHNob3RQbHVnaW46IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydtYXRjaFNuYXBzaG90JywgJ3RvTWF0Y2hTbmFwc2hvdCddKSB7XG4gICAgdXRpbHMuYWRkTWV0aG9kKFxuICAgICAgY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLFxuICAgICAga2V5LFxuICAgICAgZnVuY3Rpb24odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3BlcnRpZXM/OiBvYmplY3QsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtZXNzYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIG1lc3NhZ2UgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgcHJvcGVydGllcyA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGV4cGVjdGVkLCBtZXNzYWdlLCBmYWxzZSwgcHJvcGVydGllcylcbiAgICAgIH0sXG4gICAgKVxuICB9XG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvTWF0Y2hJbmxpbmVTbmFwc2hvdCcsXG4gICAgZnVuY3Rpb24gX19WSVRFU1RfSU5MSU5FX1NOQVBTSE9UX18odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3BlcnRpZXM/OiBvYmplY3QsIGlubGluZVNuYXBzaG90Pzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBjb25zdCBlcnJvciA9IHV0aWxzLmZsYWcodGhpcywgJ2Vycm9yJylcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IGlubGluZVNuYXBzaG90XG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAoaW5saW5lU25hcHNob3QpXG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uKGlubGluZVNuYXBzaG90KVxuICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIHRydWUsIHByb3BlcnRpZXMsIGlubGluZVNuYXBzaG90LCBlcnJvcilcbiAgICB9LFxuICApXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvVGhyb3dFcnJvck1hdGNoaW5nU25hcHNob3QnLFxuICAgIGZ1bmN0aW9uKHRoaXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBnZXRTbmFwc2hvdENsaWVudCgpLmFzc2VydChnZXRFcnJvclN0cmluZyhleHBlY3RlZCksIG1lc3NhZ2UpXG4gICAgfSxcbiAgKVxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLFxuICAgICd0b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90JyxcbiAgICBmdW5jdGlvbiBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXyh0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaW5saW5lU25hcHNob3Q6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICBjb25zdCBlcnJvciA9IHV0aWxzLmZsYWcodGhpcywgJ2Vycm9yJylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSwgdHJ1ZSwgdW5kZWZpbmVkLCBpbmxpbmVTbmFwc2hvdCwgZXJyb3IpXG4gICAgfSxcbiAgKVxufVxuIiwiLy8gd2UgYXJlIHVzaW5nIG9ubHkgdGhlIG9uZXMgbmVlZGVkIGJ5IEB0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb21cbi8vIGlmIHlvdSBuZWVkIG1vcmUsIGp1c3QgYXNrXG5cbmltcG9ydCBjIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlciB9IGZyb20gJ3BpY29jb2xvcnMvdHlwZXMnXG5pbXBvcnQgeyBmb3JtYXQgYXMgcHJldHR5Rm9ybWF0LCBwbHVnaW5zIGFzIHByZXR0eUZvcm1hdFBsdWdpbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHsgdW5pZmllZERpZmYgfSBmcm9tICcuLi8uLi9ub2RlL3JlcG9ydGVycy9yZW5kZXJlcnMvZGlmZidcblxuZXhwb3J0IGNvbnN0IEVYUEVDVEVEX0NPTE9SID0gYy5ncmVlblxuZXhwb3J0IGNvbnN0IFJFQ0VJVkVEX0NPTE9SID0gYy5yZWRcbmV4cG9ydCBjb25zdCBJTlZFUlRFRF9DT0xPUiA9IGMuaW52ZXJzZVxuZXhwb3J0IGNvbnN0IEJPTERfV0VJR0hUID0gYy5ib2xkXG5leHBvcnQgY29uc3QgRElNX0NPTE9SID0gYy5kaW1cblxuY29uc3Qge1xuICBBc3ltbWV0cmljTWF0Y2hlcixcbiAgRE9NQ29sbGVjdGlvbixcbiAgRE9NRWxlbWVudCxcbiAgSW1tdXRhYmxlLFxuICBSZWFjdEVsZW1lbnQsXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbn0gPSBwcmV0dHlGb3JtYXRQbHVnaW5zXG5cbmNvbnN0IFBMVUdJTlMgPSBbXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbiAgUmVhY3RFbGVtZW50LFxuICBET01FbGVtZW50LFxuICBET01Db2xsZWN0aW9uLFxuICBJbW11dGFibGUsXG4gIEFzeW1tZXRyaWNNYXRjaGVyLFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoZXJIaW50T3B0aW9ucyB7XG4gIGNvbW1lbnQ/OiBzdHJpbmdcbiAgZXhwZWN0ZWRDb2xvcj86IEZvcm1hdHRlclxuICBpc0RpcmVjdEV4cGVjdENhbGw/OiBib29sZWFuXG4gIGlzTm90PzogYm9vbGVhblxuICBwcm9taXNlPzogc3RyaW5nXG4gIHJlY2VpdmVkQ29sb3I/OiBGb3JtYXR0ZXJcbiAgc2Vjb25kQXJndW1lbnQ/OiBzdHJpbmdcbiAgc2Vjb25kQXJndW1lbnRDb2xvcj86IEZvcm1hdHRlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlckhpbnQoXG4gIG1hdGNoZXJOYW1lOiBzdHJpbmcsXG4gIHJlY2VpdmVkID0gJ3JlY2VpdmVkJyxcbiAgZXhwZWN0ZWQgPSAnZXhwZWN0ZWQnLFxuICBvcHRpb25zOiBNYXRjaGVySGludE9wdGlvbnMgPSB7fSxcbikge1xuICBjb25zdCB7XG4gICAgY29tbWVudCA9ICcnLFxuICAgIGV4cGVjdGVkQ29sb3IgPSBFWFBFQ1RFRF9DT0xPUixcbiAgICBpc0RpcmVjdEV4cGVjdENhbGwgPSBmYWxzZSwgLy8gc2VlbXMgcmVkdW5kYW50IHdpdGggcmVjZWl2ZWQgPT09ICcnXG4gICAgaXNOb3QgPSBmYWxzZSxcbiAgICBwcm9taXNlID0gJycsXG4gICAgcmVjZWl2ZWRDb2xvciA9IFJFQ0VJVkVEX0NPTE9SLFxuICAgIHNlY29uZEFyZ3VtZW50ID0gJycsXG4gICAgc2Vjb25kQXJndW1lbnRDb2xvciA9IEVYUEVDVEVEX0NPTE9SLFxuICB9ID0gb3B0aW9uc1xuICBsZXQgaGludCA9ICcnXG4gIGxldCBkaW1TdHJpbmcgPSAnZXhwZWN0JyAvLyBjb25jYXRlbmF0ZSBhZGphY2VudCBkaW0gc3Vic3RyaW5nc1xuXG4gIGlmICghaXNEaXJlY3RFeHBlY3RDYWxsICYmIHJlY2VpdmVkICE9PSAnJykge1xuICAgIGhpbnQgKz0gRElNX0NPTE9SKGAke2RpbVN0cmluZ30oYCkgKyByZWNlaXZlZENvbG9yKHJlY2VpdmVkKVxuICAgIGRpbVN0cmluZyA9ICcpJ1xuICB9XG5cbiAgaWYgKHByb21pc2UgIT09ICcnKSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKSArIHByb21pc2VcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKGlzTm90KSB7XG4gICAgaGludCArPSBgJHtESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKX1ub3RgXG4gICAgZGltU3RyaW5nID0gJydcbiAgfVxuXG4gIGlmIChtYXRjaGVyTmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgLy8gT2xkIGZvcm1hdDogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksXG4gICAgLy8gZXNwZWNpYWxseSB3aXRob3V0IHByb21pc2Ugb3IgaXNOb3Qgb3B0aW9uc1xuICAgIGRpbVN0cmluZyArPSBtYXRjaGVyTmFtZVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE5ldyBmb3JtYXQ6IG9taXQgcGVyaW9kIGZyb20gbWF0Y2hlck5hbWUgYXJnXG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfS5gKSArIG1hdGNoZXJOYW1lXG4gICAgZGltU3RyaW5nID0gJydcbiAgfVxuXG4gIGlmIChleHBlY3RlZCA9PT0gJycpIHtcbiAgICBkaW1TdHJpbmcgKz0gJygpJ1xuICB9XG4gIGVsc2Uge1xuICAgIGhpbnQgKz0gRElNX0NPTE9SKGAke2RpbVN0cmluZ30oYCkgKyBleHBlY3RlZENvbG9yKGV4cGVjdGVkKVxuICAgIGlmIChzZWNvbmRBcmd1bWVudClcbiAgICAgIGhpbnQgKz0gRElNX0NPTE9SKCcsICcpICsgc2Vjb25kQXJndW1lbnRDb2xvcihzZWNvbmRBcmd1bWVudClcbiAgICBkaW1TdHJpbmcgPSAnKSdcbiAgfVxuXG4gIGlmIChjb21tZW50ICE9PSAnJylcbiAgICBkaW1TdHJpbmcgKz0gYCAvLyAke2NvbW1lbnR9YFxuXG4gIGlmIChkaW1TdHJpbmcgIT09ICcnKVxuICAgIGhpbnQgKz0gRElNX0NPTE9SKGRpbVN0cmluZylcblxuICByZXR1cm4gaGludFxufVxuXG5jb25zdCBTUEFDRV9TWU1CT0wgPSAnXFx1ezAwQjd9JyAvLyBtaWRkbGUgZG90XG5cbi8vIEluc3RlYWQgb2YgaW52ZXJzZSBoaWdobGlnaHQgd2hpY2ggbm93IGltcGxpZXMgYSBjaGFuZ2UsXG4vLyByZXBsYWNlIGNvbW1vbiBzcGFjZXMgd2l0aCBtaWRkbGUgZG90IGF0IHRoZSBlbmQgb2YgYW55IGxpbmUuXG5jb25zdCByZXBsYWNlVHJhaWxpbmdTcGFjZXMgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+XG4gIHRleHQucmVwbGFjZSgvXFxzKyQvZ20sIHNwYWNlcyA9PiBTUEFDRV9TWU1CT0wucmVwZWF0KHNwYWNlcy5sZW5ndGgpKVxuXG5leHBvcnQgY29uc3Qgc3RyaW5naWZ5ID0gKG9iamVjdDogdW5rbm93biwgbWF4RGVwdGggPSAxMCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IE1BWF9MRU5HVEggPSAxMDAwMFxuICBsZXQgcmVzdWx0XG5cbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBwcmV0dHlGb3JtYXQob2JqZWN0LCB7XG4gICAgICBtYXhEZXB0aCxcbiAgICAgIC8vIG1pbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IFBMVUdJTlMsXG4gICAgfSlcbiAgfVxuICBjYXRjaCB7XG4gICAgcmVzdWx0ID0gcHJldHR5Rm9ybWF0KG9iamVjdCwge1xuICAgICAgY2FsbFRvSlNPTjogZmFsc2UsXG4gICAgICBtYXhEZXB0aCxcbiAgICAgIC8vIG1pbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IFBMVUdJTlMsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHQubGVuZ3RoID49IE1BWF9MRU5HVEggJiYgbWF4RGVwdGggPiAxXG4gICAgPyBzdHJpbmdpZnkob2JqZWN0LCBNYXRoLmZsb29yKG1heERlcHRoIC8gMikpXG4gICAgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHByaW50UmVjZWl2ZWQgPSAob2JqZWN0OiB1bmtub3duKTogc3RyaW5nID0+XG4gIFJFQ0VJVkVEX0NPTE9SKHJlcGxhY2VUcmFpbGluZ1NwYWNlcyhzdHJpbmdpZnkob2JqZWN0KSkpXG5leHBvcnQgY29uc3QgcHJpbnRFeHBlY3RlZCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PlxuICBFWFBFQ1RFRF9DT0xPUihyZXBsYWNlVHJhaWxpbmdTcGFjZXMoc3RyaW5naWZ5KHZhbHVlKSkpXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZk9wdGlvbnMge1xuICBhQW5ub3RhdGlvbj86IHN0cmluZ1xuICBhQ29sb3I/OiBGb3JtYXR0ZXJcbiAgYUluZGljYXRvcj86IHN0cmluZ1xuICBiQW5ub3RhdGlvbj86IHN0cmluZ1xuICBiQ29sb3I/OiBGb3JtYXR0ZXJcbiAgYkluZGljYXRvcj86IHN0cmluZ1xuICBjaGFuZ2VDb2xvcj86IEZvcm1hdHRlclxuICBjaGFuZ2VMaW5lVHJhaWxpbmdTcGFjZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbW1vbkNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbW1vbkluZGljYXRvcj86IHN0cmluZ1xuICBjb21tb25MaW5lVHJhaWxpbmdTcGFjZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNvbnRleHRMaW5lcz86IG51bWJlclxuICBlbXB0eUZpcnN0T3JMYXN0TGluZVBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGV4cGFuZD86IGJvb2xlYW5cbiAgaW5jbHVkZUNoYW5nZUNvdW50cz86IGJvb2xlYW5cbiAgb21pdEFubm90YXRpb25MaW5lcz86IGJvb2xlYW5cbiAgcGF0Y2hDb2xvcj86IEZvcm1hdHRlclxuICAvLyBwcmV0dHktZm9ybWF0IHR5cGVcbiAgY29tcGFyZUtleXM/OiBhbnlcbn1cblxuLy8gVE9ETzogZG8gc29tZXRoaW5nIHdpdGggb3B0aW9uc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmYoYTogYW55LCBiOiBhbnksIG9wdGlvbnM/OiBEaWZmT3B0aW9ucykge1xuICByZXR1cm4gdW5pZmllZERpZmYoc3RyaW5naWZ5KGEpLCBzdHJpbmdpZnkoYikpXG59XG4iLCJpbXBvcnQgY2hhaSwgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB7IGdldFN0YXRlIH0gZnJvbSAnLi9qZXN0LWV4cGVjdCdcblxuaW1wb3J0ICogYXMgbWF0Y2hlclV0aWxzIGZyb20gJy4vamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5pbXBvcnQge1xuICBlcXVhbHMsXG4gIGl0ZXJhYmxlRXF1YWxpdHksXG4gIHN1YnNldEVxdWFsaXR5LFxufSBmcm9tICcuL2plc3QtdXRpbHMnXG5pbXBvcnQgdHlwZSB7XG4gIENoYWlQbHVnaW4sXG4gIE1hdGNoZXJTdGF0ZSxcbiAgTWF0Y2hlcnNPYmplY3QsXG4gIFN5bmNFeHBlY3RhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgaXNBc3luY0Z1bmN0aW9uID0gKGZuOiB1bmtub3duKSA9PlxuICB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgKGZuIGFzIGFueSlbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jRnVuY3Rpb24nXG5cbmNvbnN0IGdldE1hdGNoZXJTdGF0ZSA9IChhc3NlcnRpb246IENoYWkuQXNzZXJ0aW9uU3RhdGljICYgQ2hhaS5Bc3NlcnRpb24pID0+IHtcbiAgY29uc3Qgb2JqID0gYXNzZXJ0aW9uLl9vYmpcbiAgY29uc3QgaXNOb3QgPSB1dGlsLmZsYWcoYXNzZXJ0aW9uLCAnbmVnYXRlJykgYXMgYm9vbGVhblxuICBjb25zdCBwcm9taXNlID0gdXRpbC5mbGFnKGFzc2VydGlvbiwgJ3Byb21pc2UnKSB8fCAnJ1xuICBjb25zdCBqZXN0VXRpbHMgPSB7XG4gICAgLi4ubWF0Y2hlclV0aWxzLFxuICAgIGl0ZXJhYmxlRXF1YWxpdHksXG4gICAgc3Vic2V0RXF1YWxpdHksXG4gIH1cblxuICBjb25zdCBtYXRjaGVyU3RhdGU6IE1hdGNoZXJTdGF0ZSA9IHtcbiAgICAuLi5nZXRTdGF0ZSgpLFxuICAgIGlzTm90LFxuICAgIHV0aWxzOiBqZXN0VXRpbHMsXG4gICAgcHJvbWlzZSxcbiAgICBlcXVhbHMsXG4gICAgLy8gbmVlZGVkIGZvciBidWlsdC1pbiBqZXN0LXNuYXBzaG90cywgYnV0IHdlIGRvbid0IHVzZSBpdFxuICAgIHN1cHByZXNzZWRFcnJvcnM6IFtdLFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogbWF0Y2hlclN0YXRlLFxuICAgIGlzTm90LFxuICAgIG9iaixcbiAgfVxufVxuXG5jbGFzcyBKZXN0RXh0ZW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGFjdHVhbD86IGFueSwgcHVibGljIGV4cGVjdGVkPzogYW55KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBKZXN0RXh0ZW5kUGx1Z2luKGV4cGVjdHM6IE1hdGNoZXJzT2JqZWN0KTogQ2hhaVBsdWdpbiB7XG4gIHJldHVybiAoYywgdXRpbHMpID0+IHtcbiAgICBPYmplY3QuZW50cmllcyhleHBlY3RzKS5mb3JFYWNoKChbZXhwZWN0QXNzZXJ0aW9uTmFtZSwgZXhwZWN0QXNzZXJ0aW9uXSkgPT4ge1xuICAgICAgZnVuY3Rpb24gZXhwZWN0U3luY1dyYXBwZXIodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbiwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgaXNOb3QsIG9iaiB9ID0gZ2V0TWF0Y2hlclN0YXRlKHRoaXMpXG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhcmdzIHdhbnRpbmcgdHVwbGVcbiAgICAgICAgY29uc3QgeyBwYXNzLCBtZXNzYWdlLCBhY3R1YWwsIGV4cGVjdGVkIH0gPSBleHBlY3RBc3NlcnRpb24uY2FsbChzdGF0ZSwgb2JqLCAuLi5hcmdzKSBhcyBTeW5jRXhwZWN0YXRpb25SZXN1bHRcblxuICAgICAgICBpZiAoKHBhc3MgJiYgaXNOb3QpIHx8ICghcGFzcyAmJiAhaXNOb3QpKVxuICAgICAgICAgIHRocm93IG5ldyBKZXN0RXh0ZW5kRXJyb3IobWVzc2FnZSgpLCBhY3R1YWwsIGV4cGVjdGVkKVxuICAgICAgfVxuXG4gICAgICBhc3luYyBmdW5jdGlvbiBleHBlY3RBc3luY1dyYXBwZXIodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbiwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgaXNOb3QsIG9iaiB9ID0gZ2V0TWF0Y2hlclN0YXRlKHRoaXMpXG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhcmdzIHdhbnRpbmcgdHVwbGVcbiAgICAgICAgY29uc3QgeyBwYXNzLCBtZXNzYWdlLCBhY3R1YWwsIGV4cGVjdGVkIH0gPSBhd2FpdCBleHBlY3RBc3NlcnRpb24uY2FsbChzdGF0ZSwgb2JqLCAuLi5hcmdzKSBhcyBTeW5jRXhwZWN0YXRpb25SZXN1bHRcblxuICAgICAgICBpZiAoKHBhc3MgJiYgaXNOb3QpIHx8ICghcGFzcyAmJiAhaXNOb3QpKVxuICAgICAgICAgIHRocm93IG5ldyBKZXN0RXh0ZW5kRXJyb3IobWVzc2FnZSgpLCBhY3R1YWwsIGV4cGVjdGVkKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RBc3NlcnRpb25XcmFwcGVyID0gaXNBc3luY0Z1bmN0aW9uKGV4cGVjdEFzc2VydGlvbikgPyBleHBlY3RBc3luY1dyYXBwZXIgOiBleHBlY3RTeW5jV3JhcHBlclxuXG4gICAgICB1dGlscy5hZGRNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCBleHBlY3RBc3NlcnRpb25OYW1lLCBleHBlY3RBc3NlcnRpb25XcmFwcGVyKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEplc3RFeHRlbmQ6IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuZXhwZWN0LCAnZXh0ZW5kJywgKGV4cGVjdHM6IE1hdGNoZXJzT2JqZWN0KSA9PiB7XG4gICAgY2hhaS51c2UoSmVzdEV4dGVuZFBsdWdpbihleHBlY3RzKSlcbiAgfSlcbn1cbiIsImltcG9ydCAqIGFzIG1hdGNoZXJVdGlscyBmcm9tICcuL2plc3QtbWF0Y2hlci11dGlscydcblxuaW1wb3J0IHsgZXF1YWxzLCBpc0EgfSBmcm9tICcuL2plc3QtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENoYWlQbHVnaW4sIE1hdGNoZXJTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bW1ldHJpY01hdGNoZXJJbnRlcmZhY2Uge1xuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pOiBib29sZWFuXG4gIHRvU3RyaW5nKCk6IHN0cmluZ1xuICBnZXRFeHBlY3RlZFR5cGU/KCk6IHN0cmluZ1xuICB0b0FzeW1tZXRyaWNNYXRjaGVyPygpOiBzdHJpbmdcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzeW1tZXRyaWNNYXRjaGVyPFxuICBULFxuICBTdGF0ZSBleHRlbmRzIE1hdGNoZXJTdGF0ZSA9IE1hdGNoZXJTdGF0ZSxcbj4gaW1wbGVtZW50cyBBc3ltbWV0cmljTWF0Y2hlckludGVyZmFjZSB7XG4gICQkdHlwZW9mID0gU3ltYm9sLmZvcignamVzdC5hc3ltbWV0cmljTWF0Y2hlcicpXG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNhbXBsZTogVCwgcHJvdGVjdGVkIGludmVyc2UgPSBmYWxzZSkge31cblxuICBwcm90ZWN0ZWQgZ2V0TWF0Y2hlckNvbnRleHQoKTogU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlcXVhbHMsXG4gICAgICBpc05vdDogdGhpcy5pbnZlcnNlLFxuICAgICAgdXRpbHM6IG1hdGNoZXJVdGlscyxcbiAgICB9IGFzIGFueVxuICB9XG5cbiAgYWJzdHJhY3QgYXN5bW1ldHJpY01hdGNoKG90aGVyOiB1bmtub3duKTogYm9vbGVhblxuICBhYnN0cmFjdCB0b1N0cmluZygpOiBzdHJpbmdcbiAgZ2V0RXhwZWN0ZWRUeXBlPygpOiBzdHJpbmdcbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcj8oKTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8c3RyaW5nPiB7XG4gIGNvbnN0cnVjdG9yKHNhbXBsZTogc3RyaW5nLCBpbnZlcnNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzQSgnU3RyaW5nJywgc2FtcGxlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaXMgbm90IGEgc3RyaW5nJylcblxuICAgIHN1cGVyKHNhbXBsZSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXNBKCdTdHJpbmcnLCBvdGhlcikgJiYgb3RoZXIuaW5jbHVkZXModGhpcy5zYW1wbGUpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBTdHJpbmcke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQW55dGhpbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjx2b2lkPiB7XG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bikge1xuICAgIHJldHVybiBvdGhlciAhPSBudWxsXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ0FueXRoaW5nJ1xuICB9XG5cbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcigpIHtcbiAgICByZXR1cm4gJ0FueXRoaW5nJ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgZ2V0UHJvdG90eXBlKG9iajogb2JqZWN0KSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZilcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKVxuXG4gICAgaWYgKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IG9iailcbiAgICAgIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9XG5cbiAgaGFzUHJvcGVydHkob2JqOiBvYmplY3QgfCBudWxsLCBwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmopXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvcGVydHkodGhpcy5nZXRQcm90b3R5cGUob2JqKSwgcHJvcGVydHkpXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IGFueSkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5zYW1wbGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgWW91IG11c3QgcHJvdmlkZSBhbiBvYmplY3QgdG8gJHt0aGlzLnRvU3RyaW5nKCl9LCBub3QgJyR7XG4gICAgICAgICAgdHlwZW9mIHRoaXMuc2FtcGxlXG4gICAgICAgIH0nLmAsXG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRydWVcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5zYW1wbGUpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQcm9wZXJ0eShvdGhlciwgcHJvcGVydHkpIHx8ICFlcXVhbHModGhpcy5zYW1wbGVbcHJvcGVydHldLCBvdGhlcltwcm9wZXJ0eV0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW52ZXJzZSA/ICFyZXN1bHQgOiByZXN1bHRcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgT2JqZWN0JHt0aGlzLmludmVyc2UgPyAnTm90JyA6ICcnfUNvbnRhaW5pbmdgXG4gIH1cblxuICBnZXRFeHBlY3RlZFR5cGUoKSB7XG4gICAgcmV0dXJuICdvYmplY3QnXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5Q29udGFpbmluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPEFycmF5PHVua25vd24+PiB7XG4gIGNvbnN0cnVjdG9yKHNhbXBsZTogQXJyYXk8dW5rbm93bj4sIGludmVyc2UgPSBmYWxzZSkge1xuICAgIHN1cGVyKHNhbXBsZSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogQXJyYXk8dW5rbm93bj4pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zYW1wbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgWW91IG11c3QgcHJvdmlkZSBhbiBhcnJheSB0byAke3RoaXMudG9TdHJpbmcoKX0sIG5vdCAnJHtcbiAgICAgICAgICB0eXBlb2YgdGhpcy5zYW1wbGVcbiAgICAgICAgfScuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRcbiAgICAgID0gdGhpcy5zYW1wbGUubGVuZ3RoID09PSAwXG4gICAgICB8fCAoQXJyYXkuaXNBcnJheShvdGhlcilcbiAgICAgICAgJiYgdGhpcy5zYW1wbGUuZXZlcnkoaXRlbSA9PlxuICAgICAgICAgIG90aGVyLnNvbWUoYW5vdGhlciA9PiBlcXVhbHMoaXRlbSwgYW5vdGhlcikpLFxuICAgICAgICApKVxuXG4gICAgcmV0dXJuIHRoaXMuaW52ZXJzZSA/ICFyZXN1bHQgOiByZXN1bHRcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgQXJyYXkke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ2FycmF5J1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnkgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxhbnk+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiB1bmtub3duKSB7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnYW55KCkgZXhwZWN0cyB0byBiZSBwYXNzZWQgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gJ1xuICAgICAgICAgICsgJ1BsZWFzZSBwYXNzIG9uZSBvciB1c2UgYW55dGhpbmcoKSB0byBtYXRjaCBhbnkgb2JqZWN0LicsXG4gICAgICApXG4gICAgfVxuICAgIHN1cGVyKHNhbXBsZSlcbiAgfVxuXG4gIGZuTmFtZUZvcihmdW5jOiBGdW5jdGlvbikge1xuICAgIGlmIChmdW5jLm5hbWUpXG4gICAgICByZXR1cm4gZnVuYy5uYW1lXG5cbiAgICBjb25zdCBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nXG5cbiAgICBjb25zdCBtYXRjaGVzID0gZnVuY3Rpb25Ub1N0cmluZ1xuICAgICAgLmNhbGwoZnVuYylcbiAgICAgIC5tYXRjaCgvXig/OmFzeW5jKT9cXHMqZnVuY3Rpb25cXHMqXFwqP1xccyooW1xcdyRdKylcXHMqXFwoLylcbiAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiAnPGFub255bW91cz4nXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pIHtcbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN0cmluZylcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ3N0cmluZycgfHwgb3RoZXIgaW5zdGFuY2VvZiBTdHJpbmdcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gTnVtYmVyKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnbnVtYmVyJyB8fCBvdGhlciBpbnN0YW5jZW9mIE51bWJlclxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBGdW5jdGlvbilcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ2Z1bmN0aW9uJyB8fCBvdGhlciBpbnN0YW5jZW9mIEZ1bmN0aW9uXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IEJvb2xlYW4pXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdib29sZWFuJyB8fCBvdGhlciBpbnN0YW5jZW9mIEJvb2xlYW5cblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQmlnSW50KVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnYmlnaW50JyB8fCBvdGhlciBpbnN0YW5jZW9mIEJpZ0ludFxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBTeW1ib2wpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdzeW1ib2wnIHx8IG90aGVyIGluc3RhbmNlb2YgU3ltYm9sXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE9iamVjdClcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ29iamVjdCdcblxuICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIHRoaXMuc2FtcGxlXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ0FueSdcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN0cmluZylcbiAgICAgIHJldHVybiAnc3RyaW5nJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBOdW1iZXIpXG4gICAgICByZXR1cm4gJ251bWJlcidcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gRnVuY3Rpb24pXG4gICAgICByZXR1cm4gJ2Z1bmN0aW9uJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBPYmplY3QpXG4gICAgICByZXR1cm4gJ29iamVjdCdcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQm9vbGVhbilcbiAgICAgIHJldHVybiAnYm9vbGVhbidcblxuICAgIHJldHVybiB0aGlzLmZuTmFtZUZvcih0aGlzLnNhbXBsZSlcbiAgfVxuXG4gIHRvQXN5bW1ldHJpY01hdGNoZXIoKSB7XG4gICAgcmV0dXJuIGBBbnk8JHt0aGlzLmZuTmFtZUZvcih0aGlzLnNhbXBsZSl9PmBcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nTWF0Y2hpbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxSZWdFeHA+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBzdHJpbmcgfCBSZWdFeHAsIGludmVyc2UgPSBmYWxzZSkge1xuICAgIGlmICghaXNBKCdTdHJpbmcnLCBzYW1wbGUpICYmICFpc0EoJ1JlZ0V4cCcsIHNhbXBsZSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGlzIG5vdCBhIFN0cmluZyBvciBhIFJlZ0V4cCcpXG5cbiAgICBzdXBlcihuZXcgUmVnRXhwKHNhbXBsZSksIGludmVyc2UpXG4gIH1cblxuICBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGlzQSgnU3RyaW5nJywgb3RoZXIpICYmIHRoaXMuc2FtcGxlLnRlc3Qob3RoZXIpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBTdHJpbmcke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9TWF0Y2hpbmdgXG4gIH1cblxuICBnZXRFeHBlY3RlZFR5cGUoKSB7XG4gICAgcmV0dXJuICdzdHJpbmcnXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEplc3RBc3ltbWV0cmljTWF0Y2hlcnM6IENoYWlQbHVnaW4gPSAoY2hhaSwgdXRpbHMpID0+IHtcbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdhbnl0aGluZycsXG4gICAgKCkgPT4gbmV3IEFueXRoaW5nKCksXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FueScsXG4gICAgKGV4cGVjdGVkOiB1bmtub3duKSA9PiBuZXcgQW55KGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnc3RyaW5nQ29udGFpbmluZycsXG4gICAgKGV4cGVjdGVkOiBzdHJpbmcpID0+IG5ldyBTdHJpbmdDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnb2JqZWN0Q29udGFpbmluZycsXG4gICAgKGV4cGVjdGVkOiBhbnkpID0+IG5ldyBPYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYXJyYXlDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IEFycmF5Q29udGFpbmluZyhleHBlY3RlZCksXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ3N0cmluZ01hdGNoaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IFN0cmluZ01hdGNoaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIC8vIGRlZmluZVByb3BlcnR5IGRvZXMgbm90IHdvcmtcbiAgOyhjaGFpLmV4cGVjdCBhcyBhbnkpLm5vdCA9IHtcbiAgICBzdHJpbmdDb250YWluaW5nOiAoZXhwZWN0ZWQ6IHN0cmluZykgPT4gbmV3IFN0cmluZ0NvbnRhaW5pbmcoZXhwZWN0ZWQsIHRydWUpLFxuICAgIG9iamVjdENvbnRhaW5pbmc6IChleHBlY3RlZDogYW55KSA9PiBuZXcgT2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgYXJyYXlDb250YWluaW5nOiAoZXhwZWN0ZWQ6IHVua25vd25bXSkgPT4gbmV3IEFycmF5Q29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgc3RyaW5nTWF0Y2hpbmc6IChleHBlY3RlZDogc3RyaW5nIHwgUmVnRXhwKSA9PiBuZXcgU3RyaW5nTWF0Y2hpbmcoZXhwZWN0ZWQsIHRydWUpLFxuICB9XG59XG4iLCJpbXBvcnQgY2hhaSBmcm9tICdjaGFpJ1xuaW1wb3J0IFN1YnNldCBmcm9tICdjaGFpLXN1YnNldCdcbmltcG9ydCB7IFNuYXBzaG90UGx1Z2luIH0gZnJvbSAnLi4vc25hcHNob3QvY2hhaSdcbmltcG9ydCB7IEplc3RFeHRlbmQgfSBmcm9tICcuL2plc3QtZXh0ZW5kJ1xuaW1wb3J0IHsgSmVzdENoYWlFeHBlY3QgfSBmcm9tICcuL2plc3QtZXhwZWN0J1xuaW1wb3J0IHsgSmVzdEFzeW1tZXRyaWNNYXRjaGVycyB9IGZyb20gJy4vamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzJ1xuXG5sZXQgaW5zdGFsbGVkID0gZmFsc2VcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cENoYWkoKSB7XG4gIGlmIChpbnN0YWxsZWQpXG4gICAgcmV0dXJuXG5cbiAgY2hhaS51c2UoSmVzdEV4dGVuZClcbiAgY2hhaS51c2UoSmVzdENoYWlFeHBlY3QpXG4gIGNoYWkudXNlKFN1YnNldClcbiAgY2hhaS51c2UoU25hcHNob3RQbHVnaW4pXG4gIGNoYWkudXNlKEplc3RBc3ltbWV0cmljTWF0Y2hlcnMpXG4gIGluc3RhbGxlZCA9IHRydWVcbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJ1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nXG5pbXBvcnQgeyBlbnZpcm9ubWVudHMgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvZW52J1xuaW1wb3J0IHsgc2V0dXBDaGFpIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvc2V0dXAnXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYydcblxubGV0IGdsb2JhbFNldHVwID0gZmFsc2VcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEdsb2JhbEVudihjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIC8vIHNob3VsZCBiZSByZWRlY2xhcmVkIGZvciBlYWNoIHRlc3RcbiAgLy8gaWYgcnVuIHdpdGggXCJ0aHJlYWRzOiBmYWxzZVwiXG4gIHNldHVwRGVmaW5lcyhjb25maWcuZGVmaW5lcylcblxuICBpZiAoZ2xvYmFsU2V0dXApXG4gICAgcmV0dXJuXG5cbiAgZ2xvYmFsU2V0dXAgPSB0cnVlXG5cbiAgc2V0dXBDb25zb2xlTG9nU3B5KClcbiAgYXdhaXQgc2V0dXBDaGFpKClcblxuICBpZiAoY29uZmlnLmdsb2JhbHMpXG4gICAgKGF3YWl0IGltcG9ydCgnLi4vaW50ZWdyYXRpb25zL2dsb2JhbHMnKSkucmVnaXN0ZXJBcGlHbG9iYWxseSgpXG59XG5cbmZ1bmN0aW9uIHNldHVwRGVmaW5lcyhkZWZpbmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmluZXMpXG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KVtrZXldID0gZGVmaW5lc1trZXldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENvbnNvbGVMb2dTcHkoKSB7XG4gIGNvbnN0IHN0ZG91dCA9IG5ldyBXcml0YWJsZSh7XG4gICAgd3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICBycGMoKS5vblVzZXJDb25zb2xlTG9nKHtcbiAgICAgICAgdHlwZTogJ3N0ZG91dCcsXG4gICAgICAgIGNvbnRlbnQ6IFN0cmluZyhkYXRhKSxcbiAgICAgICAgdGFza0lkOiBfX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50Py5pZCxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH0pXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc3RkZXJyID0gbmV3IFdyaXRhYmxlKHtcbiAgICB3cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIHJwYygpLm9uVXNlckNvbnNvbGVMb2coe1xuICAgICAgICB0eXBlOiAnc3RkZXJyJyxcbiAgICAgICAgY29udGVudDogU3RyaW5nKGRhdGEpLFxuICAgICAgICB0YXNrSWQ6IF9fdml0ZXN0X3dvcmtlcl9fLmN1cnJlbnQ/LmlkLFxuICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgfSlcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9LFxuICB9KVxuICBnbG9iYWxUaGlzLmNvbnNvbGUgPSBuZXcgQ29uc29sZSh7XG4gICAgc3Rkb3V0LFxuICAgIHN0ZGVycixcbiAgICBjb2xvck1vZGU6IHRydWUsXG4gICAgZ3JvdXBJbmRlbnRhdGlvbjogMixcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhFbnYoXG4gIG5hbWU6IFJlc29sdmVkQ29uZmlnWydlbnZpcm9ubWVudCddLFxuICBvcHRpb25zOiBSZXNvbHZlZENvbmZpZ1snZW52aXJvbm1lbnRPcHRpb25zJ10sXG4gIGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IGVudiA9IGF3YWl0IGVudmlyb25tZW50c1tuYW1lXS5zZXR1cChnbG9iYWxUaGlzLCBvcHRpb25zKVxuICB0cnkge1xuICAgIGF3YWl0IGZuKClcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBhd2FpdCBlbnYudGVhcmRvd24oZ2xvYmFsVGhpcylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2V0dXBGaWxlcyhjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIGNvbnN0IGZpbGVzID0gdG9BcnJheShjb25maWcuc2V0dXBGaWxlcylcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXMubWFwKGFzeW5jKGZpbGUpID0+IHtcbiAgICAgIF9fdml0ZXN0X3dvcmtlcl9fLm1vZHVsZUNhY2hlLmRlbGV0ZShmaWxlKVxuICAgICAgYXdhaXQgaW1wb3J0KGZpbGUpXG4gICAgfSksXG4gIClcbn1cbiIsImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnXG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LW1hdGNoZXItdXRpbHMnXG5cbmNvbnN0IE9CSkVDVF9QUk9UTyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih7fSlcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9Xb3JrZXJzX0FQSS9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobVxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVycm9yKHZhbDogYW55LCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IGFueSB7XG4gIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKVxuICAgIHJldHVybiB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIGBGdW5jdGlvbjwke3ZhbC5uYW1lfT5gXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gdmFsXG4gIGlmICh2YWwgaW5zdGFuY2VvZiBQcm9taXNlIHx8ICd0aGVuJyBpbiB2YWwgfHwgKHZhbC5jb25zdHJ1Y3RvciAmJiB2YWwuY29uc3RydWN0b3IucHJvdG90eXBlID09PSAnQXN5bmNGdW5jdGlvbicpKVxuICAgIHJldHVybiAnUHJvbWlzZSdcbiAgaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBFbGVtZW50KVxuICAgIHJldHVybiB2YWwudGFnTmFtZVxuICBpZiAodHlwZW9mIHZhbC5hc3ltbWV0cmljTWF0Y2ggPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIGAke3ZhbC50b1N0cmluZygpfSAke2Zvcm1hdCh2YWwuc2FtcGxlKX1gXG5cbiAgaWYgKHNlZW4uaGFzKHZhbCkpXG4gICAgcmV0dXJuIHNlZW4uZ2V0KHZhbClcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgY2xvbmU6IGFueVtdID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpXG4gICAgc2Vlbi5zZXQodmFsLCBjbG9uZSlcbiAgICB2YWwuZm9yRWFjaCgoZSwgaSkgPT4ge1xuICAgICAgY2xvbmVbaV0gPSBzZXJpYWxpemVFcnJvcihlLCBzZWVuKVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb25lXG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT2JqZWN0cyB3aXRoIGBFcnJvcmAgY29uc3RydWN0b3JzIGFwcGVhciB0byBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgd29ya2VyIGNvbW11bmljYXRpb25cbiAgICAvLyB1c2luZyBgTWVzc2FnZVBvcnRgLCBzbyB0aGUgc2VyaWFsaXplZCBlcnJvciBvYmplY3QgaXMgYmVpbmcgcmVjcmVhdGVkIGFzIHBsYWluIG9iamVjdC5cbiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICBzZWVuLnNldCh2YWwsIGNsb25lKVxuXG4gICAgbGV0IG9iaiA9IHZhbFxuICAgIHdoaWxlIChvYmogJiYgb2JqICE9PSBPQkpFQ1RfUFJPVE8pIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghKGtleSBpbiBjbG9uZSkpXG4gICAgICAgICAgY2xvbmVba2V5XSA9IHNlcmlhbGl6ZUVycm9yKG9ialtrZXldLCBzZWVuKVxuICAgICAgfSlcbiAgICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopXG4gICAgfVxuICAgIHJldHVybiBjbG9uZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRXJyb3IoZXJyOiBhbnkpIHtcbiAgaWYgKCFlcnIpXG4gICAgcmV0dXJuIGVyclxuICAvLyBzdGFjayBpcyBub3Qgc2VyaWFsaXplZCBpbiB3b3JrZXIgY29tbXVuaWNhdGlvblxuICAvLyB3ZSBzdHJpbmdpZnkgaXQgZmlyc3RcbiAgaWYgKGVyci5zdGFjaylcbiAgICBlcnIuc3RhY2tTdHIgPSBTdHJpbmcoZXJyLnN0YWNrKVxuICBpZiAoZXJyLm5hbWUpXG4gICAgZXJyLm5hbWVTdHIgPSBTdHJpbmcoZXJyLm5hbWUpXG5cbiAgaWYgKHR5cGVvZiBlcnIuZXhwZWN0ZWQgIT09ICdzdHJpbmcnKVxuICAgIGVyci5leHBlY3RlZCA9IHN0cmluZ2lmeShlcnIuZXhwZWN0ZWQpXG4gIGlmICh0eXBlb2YgZXJyLmFjdHVhbCAhPT0gJ3N0cmluZycpXG4gICAgZXJyLmFjdHVhbCA9IHN0cmluZ2lmeShlcnIuYWN0dWFsKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUVycm9yKGVycilcbiAgfVxuICBjYXRjaCAoZTogYW55KSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGZ1bGx5IHNlcmlhbGl6ZSBlcnJvcjogJHtlPy5tZXNzYWdlfS5cXG5Jbm5lciBlcnJvciBtZXNzYWdlOiAke2Vycj8ubWVzc2FnZX1gKSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IEZpbGUsIFJlc29sdmVkQ29uZmlnLCBTdWl0ZSwgVGFza0Jhc2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGNsZWFyQ29udGV4dCwgZGVmYXVsdFN1aXRlIH0gZnJvbSAnLi9zdWl0ZSdcbmltcG9ydCB7IGdldEhvb2tzLCBzZXRIb29rcyB9IGZyb20gJy4vbWFwJ1xuaW1wb3J0IHsgcHJvY2Vzc0Vycm9yIH0gZnJvbSAnLi9lcnJvcidcbmltcG9ydCB7IGNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgeyBydW5TZXR1cEZpbGVzIH0gZnJvbSAnLi9zZXR1cCdcblxuZnVuY3Rpb24gaGFzaChzdHI6IHN0cmluZywgbGVuZ3RoID0gMTApIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ21kNScpXG4gICAgLnVwZGF0ZShzdHIpXG4gICAgLmRpZ2VzdCgnaGV4JylcbiAgICAuc2xpY2UoMCwgbGVuZ3RoKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFRlc3RzKHBhdGhzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykge1xuICBjb25zdCBmaWxlczogRmlsZVtdID0gW11cblxuICBmb3IgKGNvbnN0IGZpbGVwYXRoIG9mIHBhdGhzKSB7XG4gICAgY29uc3QgcGF0aCA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBmaWxlcGF0aClcbiAgICBjb25zdCBmaWxlOiBGaWxlID0ge1xuICAgICAgaWQ6IGhhc2gocGF0aCksXG4gICAgICBuYW1lOiBwYXRoLFxuICAgICAgdHlwZTogJ3N1aXRlJyxcbiAgICAgIG1vZGU6ICdydW4nLFxuICAgICAgZmlsZXBhdGgsXG4gICAgICB0YXNrczogW10sXG4gICAgfVxuXG4gICAgY2xlYXJDb250ZXh0KClcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuU2V0dXBGaWxlcyhjb25maWcpXG4gICAgICBhd2FpdCBpbXBvcnQoZmlsZXBhdGgpXG5cbiAgICAgIGNvbnN0IGRlZmF1bHRUYXNrcyA9IGF3YWl0IGRlZmF1bHRTdWl0ZS5jb2xsZWN0KGZpbGUpXG5cbiAgICAgIHNldEhvb2tzKGZpbGUsIGdldEhvb2tzKGRlZmF1bHRUYXNrcykpXG5cbiAgICAgIGZvciAoY29uc3QgYyBvZiBbLi4uZGVmYXVsdFRhc2tzLnRhc2tzLCAuLi5jb250ZXh0LnRhc2tzXSkge1xuICAgICAgICBpZiAoYy50eXBlID09PSAndGVzdCcpIHtcbiAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goYylcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjLnR5cGUgPT09ICdzdWl0ZScpIHtcbiAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goYylcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgICAgY29uc3Qgc3VpdGUgPSBhd2FpdCBjLmNvbGxlY3QoZmlsZSlcbiAgICAgICAgICBmaWxlLmNvbGxlY3REdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcbiAgICAgICAgICBpZiAoc3VpdGUubmFtZSB8fCBzdWl0ZS50YXNrcy5sZW5ndGgpXG4gICAgICAgICAgICBmaWxlLnRhc2tzLnB1c2goc3VpdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIGZpbGUucmVzdWx0ID0ge1xuICAgICAgICBzdGF0ZTogJ2ZhaWwnLFxuICAgICAgICBlcnJvcjogcHJvY2Vzc0Vycm9yKGUpLFxuICAgICAgfVxuICAgICAgLy8gbm90IHN1cmUgdGh5LCB0aGlzIHRoaXMgbGluZSBpcyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgZXJyb3JcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXDAnKVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUhhc2goZmlsZSlcblxuICAgIGNvbnN0IGhhc09ubHlUYXNrcyA9IHNvbWVUYXNrc0FyZU9ubHkoZmlsZSlcbiAgICBpbnRlcnByZXRUYXNrTW9kZXMoZmlsZSwgY29uZmlnLnRlc3ROYW1lUGF0dGVybiwgaGFzT25seVRhc2tzLCBmYWxzZSwgY29uZmlnLmFsbG93T25seSlcblxuICAgIGZpbGVzLnB1c2goZmlsZSlcbiAgfVxuXG4gIHJldHVybiBmaWxlc1xufVxuXG4vKipcbiAqIElmIGFueSB0YXNrcyBiZWVuIG1hcmtlZCBhcyBgb25seWAsIG1hcmsgYWxsIG90aGVyIHRhc2tzIGFzIGBza2lwYC5cbiAqL1xuZnVuY3Rpb24gaW50ZXJwcmV0VGFza01vZGVzKHN1aXRlOiBTdWl0ZSwgbmFtZVBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAsIG9ubHlNb2RlPzogYm9vbGVhbiwgcGFyZW50SXNPbmx5PzogYm9vbGVhbiwgYWxsb3dPbmx5PzogYm9vbGVhbikge1xuICBjb25zdCBzdWl0ZUlzT25seSA9IHBhcmVudElzT25seSB8fCBzdWl0ZS5tb2RlID09PSAnb25seSdcblxuICBzdWl0ZS50YXNrcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIHRoZSBwYXJlbnQgc3VpdGUgb3IgdGhlIHRhc2sgaXRzZWxmIGFyZSBtYXJrZWQgYXMgaW5jbHVkZWRcbiAgICBjb25zdCBpbmNsdWRlVGFzayA9IHN1aXRlSXNPbmx5IHx8IHQubW9kZSA9PT0gJ29ubHknXG4gICAgaWYgKG9ubHlNb2RlKSB7XG4gICAgICBpZiAodC50eXBlID09PSAnc3VpdGUnICYmIChpbmNsdWRlVGFzayB8fCBzb21lVGFza3NBcmVPbmx5KHQpKSkge1xuICAgICAgICAvLyBEb24ndCBza2lwIHRoaXMgc3VpdGVcbiAgICAgICAgaWYgKHQubW9kZSA9PT0gJ29ubHknKSB7XG4gICAgICAgICAgY2hlY2tBbGxvd09ubHkodCwgYWxsb3dPbmx5KVxuICAgICAgICAgIHQubW9kZSA9ICdydW4nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHQubW9kZSA9PT0gJ3J1bicgJiYgIWluY2x1ZGVUYXNrKSB7IHQubW9kZSA9ICdza2lwJyB9XG4gICAgICBlbHNlIGlmICh0Lm1vZGUgPT09ICdvbmx5Jykge1xuICAgICAgICBjaGVja0FsbG93T25seSh0LCBhbGxvd09ubHkpXG4gICAgICAgIHQubW9kZSA9ICdydW4nXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0LnR5cGUgPT09ICd0ZXN0Jykge1xuICAgICAgaWYgKG5hbWVQYXR0ZXJuICYmICFnZXRUYXNrRnVsbE5hbWUodCkubWF0Y2gobmFtZVBhdHRlcm4pKVxuICAgICAgICB0Lm1vZGUgPSAnc2tpcCdcbiAgICB9XG4gICAgZWxzZSBpZiAodC50eXBlID09PSAnc3VpdGUnKSB7XG4gICAgICBpZiAodC5tb2RlID09PSAnc2tpcCcpXG4gICAgICAgIHNraXBBbGxUYXNrcyh0KVxuICAgICAgZWxzZVxuICAgICAgICBpbnRlcnByZXRUYXNrTW9kZXModCwgbmFtZVBhdHRlcm4sIG9ubHlNb2RlLCBpbmNsdWRlVGFzaywgYWxsb3dPbmx5KVxuICAgIH1cbiAgfSlcblxuICAvLyBpZiBhbGwgc3VidGFza3MgYXJlIHNraXBwZWQsIG1hcmsgYXMgc2tpcFxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3J1bicpIHtcbiAgICBpZiAoc3VpdGUudGFza3MubGVuZ3RoICYmIHN1aXRlLnRhc2tzLmV2ZXJ5KGkgPT4gaS5tb2RlICE9PSAncnVuJykpXG4gICAgICBzdWl0ZS5tb2RlID0gJ3NraXAnXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFza0Z1bGxOYW1lKHRhc2s6IFRhc2tCYXNlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Rhc2suc3VpdGUgPyBgJHtnZXRUYXNrRnVsbE5hbWUodGFzay5zdWl0ZSl9IGAgOiAnJ30ke3Rhc2submFtZX1gXG59XG5cbmZ1bmN0aW9uIHNvbWVUYXNrc0FyZU9ubHkoc3VpdGU6IFN1aXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdWl0ZS50YXNrcy5zb21lKHQgPT4gdC5tb2RlID09PSAnb25seScgfHwgKHQudHlwZSA9PT0gJ3N1aXRlJyAmJiBzb21lVGFza3NBcmVPbmx5KHQpKSlcbn1cblxuZnVuY3Rpb24gc2tpcEFsbFRhc2tzKHN1aXRlOiBTdWl0ZSkge1xuICBzdWl0ZS50YXNrcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgaWYgKHQubW9kZSA9PT0gJ3J1bicpIHtcbiAgICAgIHQubW9kZSA9ICdza2lwJ1xuICAgICAgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJylcbiAgICAgICAgc2tpcEFsbFRhc2tzKHQpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja0FsbG93T25seSh0YXNrOiBUYXNrQmFzZSwgYWxsb3dPbmx5PzogYm9vbGVhbikge1xuICBpZiAoYWxsb3dPbmx5KSByZXR1cm5cbiAgdGFzay5yZXN1bHQgPSB7XG4gICAgc3RhdGU6ICdmYWlsJyxcbiAgICBlcnJvcjogcHJvY2Vzc0Vycm9yKG5ldyBFcnJvcignW1ZpdGVzdF0gVW5leHBlY3RlZCAub25seSBtb2RpZmllci4gUmVtb3ZlIGl0IG9yIHBhc3MgLS1hbGxvd09ubHkgYXJndWVtZW50IHRvIGJ5cGFzcyB0aGlzIGVycm9yJykpLFxuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUhhc2gocGFyZW50OiBTdWl0ZSkge1xuICBwYXJlbnQudGFza3MuZm9yRWFjaCgodCwgaWR4KSA9PiB7XG4gICAgdC5pZCA9IGAke3BhcmVudC5pZH1fJHtpZHh9YFxuICAgIGlmICh0LnR5cGUgPT09ICdzdWl0ZScpXG4gICAgICBjYWxjdWxhdGVIYXNoKHQpXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnXG5pbXBvcnQgdHlwZSB7IEZpbGUsIEhvb2tMaXN0ZW5lciwgUmVzb2x2ZWRDb25maWcsIFN1aXRlLCBTdWl0ZUhvb2tzLCBUYXNrLCBUYXNrUmVzdWx0LCBUZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyB2aSB9IGZyb20gJy4uL2ludGVncmF0aW9ucy92aSdcbmltcG9ydCB7IGdldFNuYXBzaG90Q2xpZW50IH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWknXG5pbXBvcnQgeyBnZXRGdWxsTmFtZSwgaGFzRmFpbGVkLCBoYXNUZXN0cywgcGFydGl0aW9uU3VpdGVDaGlsZHJlbiB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0U3RhdGUsIHNldFN0YXRlIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvamVzdC1leHBlY3QnXG5pbXBvcnQgeyB0YWtlQ292ZXJhZ2UgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY292ZXJhZ2UnXG5pbXBvcnQgeyBnZXRGbiwgZ2V0SG9va3MgfSBmcm9tICcuL21hcCdcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuaW1wb3J0IHsgY29sbGVjdFRlc3RzIH0gZnJvbSAnLi9jb2xsZWN0J1xuaW1wb3J0IHsgcHJvY2Vzc0Vycm9yIH0gZnJvbSAnLi9lcnJvcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbGxTdWl0ZUhvb2s8VCBleHRlbmRzIGtleW9mIFN1aXRlSG9va3M+KHN1aXRlOiBTdWl0ZSwgbmFtZTogVCwgYXJnczogU3VpdGVIb29rc1tUXVswXSBleHRlbmRzIEhvb2tMaXN0ZW5lcjxpbmZlciBBPiA/IEEgOiBuZXZlcikge1xuICBpZiAobmFtZSA9PT0gJ2JlZm9yZUVhY2gnICYmIHN1aXRlLnN1aXRlKVxuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUuc3VpdGUsIG5hbWUsIGFyZ3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoZ2V0SG9va3Moc3VpdGUpW25hbWVdLm1hcChmbiA9PiBmbiguLi4oYXJncyBhcyBhbnkpKSkpXG5cbiAgaWYgKG5hbWUgPT09ICdhZnRlckVhY2gnICYmIHN1aXRlLnN1aXRlKVxuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUuc3VpdGUsIG5hbWUsIGFyZ3MpXG59XG5cbmNvbnN0IHBhY2tzID0gbmV3IE1hcDxzdHJpbmcsIFRhc2tSZXN1bHR8dW5kZWZpbmVkPigpXG5sZXQgdXBkYXRlVGltZXI6IGFueVxubGV0IHByZXZpb3VzVXBkYXRlOiBQcm9taXNlPHZvaWQ+fHVuZGVmaW5lZFxuXG5mdW5jdGlvbiB1cGRhdGVUYXNrKHRhc2s6IFRhc2spIHtcbiAgcGFja3Muc2V0KHRhc2suaWQsIHRhc2sucmVzdWx0KVxuXG4gIGNsZWFyVGltZW91dCh1cGRhdGVUaW1lcilcbiAgdXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBwcmV2aW91c1VwZGF0ZSA9IHNlbmRUYXNrc1VwZGF0ZSgpXG4gIH0sIDEwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kVGFza3NVcGRhdGUoKSB7XG4gIGNsZWFyVGltZW91dCh1cGRhdGVUaW1lcilcbiAgYXdhaXQgcHJldmlvdXNVcGRhdGVcblxuICBpZiAocGFja3Muc2l6ZSkge1xuICAgIGNvbnN0IHAgPSBycGMoKS5vblRhc2tVcGRhdGUoQXJyYXkuZnJvbShwYWNrcykpXG4gICAgcGFja3MuY2xlYXIoKVxuICAgIHJldHVybiBwXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3QodGVzdDogVGVzdCkge1xuICBpZiAodGVzdC5tb2RlICE9PSAncnVuJylcbiAgICByZXR1cm5cblxuICBpZiAodGVzdC5yZXN1bHQ/LnN0YXRlID09PSAnZmFpbCcpIHtcbiAgICB1cGRhdGVUYXNrKHRlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgdGVzdC5yZXN1bHQgPSB7XG4gICAgc3RhdGU6ICdydW4nLFxuICB9XG4gIHVwZGF0ZVRhc2sodGVzdClcblxuICBjbGVhck1vZHVsZU1vY2tzKClcblxuICBnZXRTbmFwc2hvdENsaWVudCgpLnNldFRlc3QodGVzdClcblxuICBfX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50ID0gdGVzdFxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayh0ZXN0LnN1aXRlLCAnYmVmb3JlRWFjaCcsIFt0ZXN0LCB0ZXN0LnN1aXRlXSlcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBhc3NlcnRpb25DYWxsczogMCxcbiAgICAgIGlzRXhwZWN0aW5nQXNzZXJ0aW9uczogZmFsc2UsXG4gICAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvcjogbnVsbCxcbiAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlcjogbnVsbCxcbiAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yOiBudWxsLFxuICAgICAgdGVzdFBhdGg6IHRlc3Quc3VpdGUuZmlsZT8uZmlsZXBhdGgsXG4gICAgICBjdXJyZW50VGVzdE5hbWU6IGdldEZ1bGxOYW1lKHRlc3QpLFxuICAgIH0pXG4gICAgYXdhaXQgZ2V0Rm4odGVzdCkoKVxuICAgIGNvbnN0IHsgYXNzZXJ0aW9uQ2FsbHMsIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlciwgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3IsIGlzRXhwZWN0aW5nQXNzZXJ0aW9ucywgaXNFeHBlY3RpbmdBc3NlcnRpb25zRXJyb3IgfSA9IGdldFN0YXRlKClcbiAgICBpZiAoZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyICE9PSBudWxsICYmIGFzc2VydGlvbkNhbGxzICE9PSBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXIpXG4gICAgICB0aHJvdyBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXJFcnJvclxuICAgIGlmIChpc0V4cGVjdGluZ0Fzc2VydGlvbnMgPT09IHRydWUgJiYgYXNzZXJ0aW9uQ2FsbHMgPT09IDApXG4gICAgICB0aHJvdyBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvclxuXG4gICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAncGFzcydcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIHRlc3QucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgdGVzdC5yZXN1bHQuZXJyb3IgPSBwcm9jZXNzRXJyb3IoZSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayh0ZXN0LnN1aXRlLCAnYWZ0ZXJFYWNoJywgW3Rlc3QsIHRlc3Quc3VpdGVdKVxuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICB0ZXN0LnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihlKVxuICB9XG5cbiAgLy8gaWYgdGVzdCBpcyBtYXJrZWQgdG8gYmUgZmFpbGVkLCBmbGlwIHRoZSByZXN1bHRcbiAgaWYgKHRlc3QuZmFpbHMpIHtcbiAgICBpZiAodGVzdC5yZXN1bHQuc3RhdGUgPT09ICdwYXNzJykge1xuICAgICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICAgIHRlc3QucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKG5ldyBFcnJvcignRXhwZWN0IHRlc3QgdG8gZmFpbCcpKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRlc3QucmVzdWx0LnN0YXRlID0gJ3Bhc3MnXG4gICAgICB0ZXN0LnJlc3VsdC5lcnJvciA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGdldFNuYXBzaG90Q2xpZW50KCkuY2xlYXJUZXN0KClcblxuICB0ZXN0LnJlc3VsdC5kdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcblxuICBfX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50ID0gdW5kZWZpbmVkXG5cbiAgdXBkYXRlVGFzayh0ZXN0KVxufVxuXG5mdW5jdGlvbiBtYXJrVGFza3NBc1NraXBwZWQoc3VpdGU6IFN1aXRlKSB7XG4gIHN1aXRlLnRhc2tzLmZvckVhY2goKHQpID0+IHtcbiAgICB0Lm1vZGUgPSAnc2tpcCdcbiAgICB0LnJlc3VsdCA9IHsgLi4udC5yZXN1bHQsIHN0YXRlOiAnc2tpcCcgfVxuICAgIHVwZGF0ZVRhc2sodClcbiAgICBpZiAodC50eXBlID09PSAnc3VpdGUnKSBtYXJrVGFza3NBc1NraXBwZWQodClcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlKHN1aXRlOiBTdWl0ZSkge1xuICBpZiAoc3VpdGUucmVzdWx0Py5zdGF0ZSA9PT0gJ2ZhaWwnKSB7XG4gICAgbWFya1Rhc2tzQXNTa2lwcGVkKHN1aXRlKVxuICAgIHVwZGF0ZVRhc2soc3VpdGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgc3VpdGUucmVzdWx0ID0ge1xuICAgIHN0YXRlOiAncnVuJyxcbiAgfVxuXG4gIHVwZGF0ZVRhc2soc3VpdGUpXG5cbiAgaWYgKHN1aXRlLm1vZGUgPT09ICdza2lwJykge1xuICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdza2lwJ1xuICB9XG4gIGVsc2UgaWYgKHN1aXRlLm1vZGUgPT09ICd0b2RvJykge1xuICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICd0b2RvJ1xuICB9XG4gIGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHN1aXRlLCAnYmVmb3JlQWxsJywgW3N1aXRlXSlcblxuICAgICAgZm9yIChjb25zdCB0YXNrc0dyb3VwIG9mIHBhcnRpdGlvblN1aXRlQ2hpbGRyZW4oc3VpdGUpKSB7XG4gICAgICAgIGlmICh0YXNrc0dyb3VwWzBdLmNvbmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0YXNrc0dyb3VwLm1hcChjID0+IHJ1blN1aXRlQ2hpbGQoYykpKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0YXNrc0dyb3VwKVxuICAgICAgICAgICAgYXdhaXQgcnVuU3VpdGVDaGlsZChjKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUsICdhZnRlckFsbCcsIFtzdWl0ZV0pXG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBzdWl0ZS5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICAgIHN1aXRlLnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihlKVxuICAgIH1cbiAgfVxuICBzdWl0ZS5yZXN1bHQuZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0XG5cbiAgaWYgKHN1aXRlLm1vZGUgPT09ICdydW4nKSB7XG4gICAgaWYgKCFoYXNUZXN0cyhzdWl0ZSkpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgaWYgKCFzdWl0ZS5yZXN1bHQuZXJyb3IpXG4gICAgICAgIHN1aXRlLnJlc3VsdC5lcnJvciA9IG5ldyBFcnJvcihgTm8gdGVzdHMgZm91bmQgaW4gc3VpdGUgJHtzdWl0ZS5uYW1lfWApXG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc0ZhaWxlZChzdWl0ZSkpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdwYXNzJ1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhc2soc3VpdGUpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlQ2hpbGQoYzogVGFzaykge1xuICByZXR1cm4gYy50eXBlID09PSAndGVzdCdcbiAgICA/IHJ1blRlc3QoYylcbiAgICA6IHJ1blN1aXRlKGMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5GaWxlcyhmaWxlczogRmlsZVtdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmICghZmlsZS50YXNrcy5sZW5ndGggJiYgIWNvbmZpZy5wYXNzV2l0aE5vVGVzdHMpIHtcbiAgICAgIGZpbGUucmVzdWx0ID0ge1xuICAgICAgICBzdGF0ZTogJ2ZhaWwnLFxuICAgICAgICBlcnJvcjogbmV3IEVycm9yKGBObyB0ZXN0IHN1aXRlIGZvdW5kIGluIGZpbGUgJHtmaWxlLmZpbGVwYXRofWApLFxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHJ1blN1aXRlKGZpbGUpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VGVzdHMocGF0aHM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29sbGVjdFRlc3RzKHBhdGhzLCBjb25maWcpXG5cbiAgcnBjKCkub25Db2xsZWN0ZWQoZmlsZXMpXG5cbiAgYXdhaXQgcnVuRmlsZXMoZmlsZXMsIGNvbmZpZylcblxuICB0YWtlQ292ZXJhZ2UoKVxuXG4gIGF3YWl0IGdldFNuYXBzaG90Q2xpZW50KCkuc2F2ZVNuYXAoKVxuXG4gIGF3YWl0IHNlbmRUYXNrc1VwZGF0ZSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1vZHVsZU1vY2tzKCkge1xuICBjb25zdCB7IGNsZWFyTW9ja3MsIG1vY2tSZXNldCwgcmVzdG9yZU1vY2tzIH0gPSBfX3ZpdGVzdF93b3JrZXJfXy5jb25maWdcblxuICAvLyBzaW5jZSBlYWNoIGZ1bmN0aW9uIGNhbGxzIGFub3RoZXIsIHdlIGNhbiBqdXN0IGNhbGwgb25lXG4gIGlmIChyZXN0b3JlTW9ja3MpXG4gICAgdmkucmVzdG9yZUFsbE1vY2tzKClcbiAgZWxzZSBpZiAobW9ja1Jlc2V0KVxuICAgIHZpLnJlc2V0QWxsTW9ja3MoKVxuICBlbHNlIGlmIChjbGVhck1vY2tzKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxufVxuIiwiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcydcbmltcG9ydCB0eXBlIHsgQnVpbHRpbkVudmlyb25tZW50LCBSZXNvbHZlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgc2V0dXBHbG9iYWxFbnYsIHdpdGhFbnYgfSBmcm9tICcuL3NldHVwJ1xuaW1wb3J0IHsgc3RhcnRUZXN0cyB9IGZyb20gJy4vcnVuJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZXR1cEdsb2JhbEVudihjb25maWcpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGYtOCcpXG5cbiAgICBjb25zdCBlbnYgPSBjb2RlLm1hdGNoKC9AKD86dml0ZXN0fGplc3QpLWVudmlyb25tZW50XFxzKz8oW1xcdy1dKylcXGIvKT8uWzFdIHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnbm9kZSdcblxuICAgIGlmICghWydub2RlJywgJ2pzZG9tJywgJ2hhcHB5LWRvbSddLmluY2x1ZGVzKGVudikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVudmlyb25tZW50OiAke2Vudn1gKVxuXG4gICAgX192aXRlc3Rfd29ya2VyX18uZmlsZXBhdGggPSBmaWxlXG5cbiAgICBhd2FpdCB3aXRoRW52KGVudiBhcyBCdWlsdGluRW52aXJvbm1lbnQsIGNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnMgfHwge30sIGFzeW5jKCkgPT4ge1xuICAgICAgYXdhaXQgc3RhcnRUZXN0cyhbZmlsZV0sIGNvbmZpZylcbiAgICB9KVxuXG4gICAgX192aXRlc3Rfd29ya2VyX18uZmlsZXBhdGggPSB1bmRlZmluZWRcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJfX3NwcmVhZFZhbHVlcyIsInJlcXVpcmUiLCJ0aGlzIiwibmF0dXJhbENvbXBhcmVNb2R1bGUiLCJwcmV0dHlGb3JtYXQiLCJwYXRoIiwibmF0dXJhbENvbXBhcmUiLCJmc3AiLCJmcyIsIkFzeW1tZXRyaWNNYXRjaGVyIiwicHJldHR5Rm9ybWF0UGx1Z2lucyIsIl9fZGVmUHJvcHMiLCJfX2dldE93blByb3BEZXNjcyIsIl9fc3ByZWFkUHJvcHMiLCJjaGFpIiwicGVyZm9ybWFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxXQUFlO0FBQ2YsRUFBRSxJQUFJLEVBQUUsTUFBTTtBQUNkLEVBQUUsTUFBTSxLQUFLLEdBQUc7QUFDaEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxRQUFRLEdBQUc7QUFDakIsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxDQUFDOztBQ1JELE1BQU0sV0FBVyxHQUFHO0FBQ3BCLEVBQUUsY0FBYztBQUNoQixFQUFFLEtBQUs7QUFDUCxFQUFFLGlCQUFpQjtBQUNuQixFQUFFLGFBQWE7QUFDZixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxVQUFVO0FBQ1osRUFBRSxhQUFhO0FBQ2YsRUFB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LEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QyxFQUFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlHLEVBQUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QyxFQUFFLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsRUFBRSxNQUFNLENBQUMsRUFBRSxL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
|