picocode 0.9.192 → 0.9.194
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/pico-dictate +0 -0
- package/dist/pico.js +292 -242
- package/package.json +2 -2
package/dist/pico.js
CHANGED
|
@@ -1068,7 +1068,7 @@ function dictationIndicator(status, levels) {
|
|
|
1068
1068
|
}
|
|
1069
1069
|
|
|
1070
1070
|
// src/ui/app.jsx
|
|
1071
|
-
import { createSignal as
|
|
1071
|
+
import { createSignal as createSignal9, Menu as Menu3, ProgressBar, ScrollBox as ScrollBox4, Shimmer, Spinner as Spinner2, TextArea as TextArea2, useFocus as useFocus2, useFocusTrap, useFrameStats, useHitTest as useHitTest2, useInput as useInput6, useLayout as useLayout3, useMouse as useMouse3, useResize as useResize2, useSelection, useToast } from "@trendr/core";
|
|
1072
1072
|
import { makeEvent } from "picocode-core/events.js";
|
|
1073
1073
|
import { listSessions, deleteSession, deleteProjectData } from "picocode-core/session.js";
|
|
1074
1074
|
import { userEntries, rewindStats } from "picocode-core/derive.js";
|
|
@@ -1080,6 +1080,7 @@ import { writeConfig } from "picocode-core/config.js";
|
|
|
1080
1080
|
import { openaiStatus } from "picocode-core/openai-auth.js";
|
|
1081
1081
|
import { EFFORT_LEVELS, SESSION_COLORS } from "picocode-core/controller.js";
|
|
1082
1082
|
import { agentTranscript } from "picocode-core/agent-transcript.js";
|
|
1083
|
+
import { streamTranscript } from "picocode-core/stream-transcript.js";
|
|
1083
1084
|
import { fuzzyScore as fuzzyScore4 } from "picocode-core/fuzzy.js";
|
|
1084
1085
|
import { completionContext, applyCompletion } from "picocode-core/completion.js";
|
|
1085
1086
|
import { extractImagePaths, placeholderizeImagePaths } from "picocode-core/attachments.js";
|
|
@@ -1197,7 +1198,50 @@ function AnimatedValue({ value, initial = value, duration = 1e3, color, highligh
|
|
|
1197
1198
|
}
|
|
1198
1199
|
|
|
1199
1200
|
// src/ui/transcript.jsx
|
|
1200
|
-
import { Diff, ease as ease2, HorizontalScrollBox, linear as linear2, Markdown, Spinner, useAnimated as useAnimated2 } from "@trendr/core";
|
|
1201
|
+
import { createSignal as createSignal4, Diff, ease as ease2, HorizontalScrollBox, linear as linear2, Markdown, ScrollBox, Spinner, useAnimated as useAnimated2, useHitTest, useInput as useInput2, useMouse } from "@trendr/core";
|
|
1202
|
+
|
|
1203
|
+
// src/ui/transcript-window.js
|
|
1204
|
+
function compactTranscriptRuns(items, active = false) {
|
|
1205
|
+
const result = [];
|
|
1206
|
+
for (let i = 0; i < items.length; ) {
|
|
1207
|
+
if (items[i].kind === "tool" || items[i].kind === "thoughts") {
|
|
1208
|
+
let end = i + 1;
|
|
1209
|
+
while (end < items.length && (items[end].kind === "tool" || items[end].kind === "thoughts")) end++;
|
|
1210
|
+
const run = items.slice(i, end);
|
|
1211
|
+
const tools = run.filter((item) => item.kind === "tool");
|
|
1212
|
+
result.push({ kind: "tool-group", callId: tools.at(-1)?.callId, items: run, tools, active: active && end === items.length });
|
|
1213
|
+
i = end;
|
|
1214
|
+
continue;
|
|
1215
|
+
}
|
|
1216
|
+
if (items[i].kind === "notice" && items[i].agentCompletion) {
|
|
1217
|
+
let end = i + 1;
|
|
1218
|
+
while (end < items.length && items[end].kind === "notice" && items[end].agentCompletion) end++;
|
|
1219
|
+
const run = items.slice(i, end);
|
|
1220
|
+
result.push(run.length === 1 ? run[0] : { kind: "agent-notice-group", notices: run });
|
|
1221
|
+
i = end;
|
|
1222
|
+
continue;
|
|
1223
|
+
}
|
|
1224
|
+
result.push(items[i++]);
|
|
1225
|
+
}
|
|
1226
|
+
return result;
|
|
1227
|
+
}
|
|
1228
|
+
function transcriptWindow(items, size) {
|
|
1229
|
+
const start = Math.max(0, items.length - size);
|
|
1230
|
+
const hidden = items.slice(0, start);
|
|
1231
|
+
return {
|
|
1232
|
+
items: items.slice(start),
|
|
1233
|
+
hiddenItems: hidden.length,
|
|
1234
|
+
hiddenCount: hidden.reduce((total, item) => total + sourceItemCount(item), 0)
|
|
1235
|
+
};
|
|
1236
|
+
}
|
|
1237
|
+
function sourceItemCount(item) {
|
|
1238
|
+
if (item.kind === "tool-group") return item.items.length;
|
|
1239
|
+
if (item.kind === "agent-notice-group") return item.notices.length;
|
|
1240
|
+
if (item.kind === "steer-tools") return item.count;
|
|
1241
|
+
return 1;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
// src/ui/transcript.jsx
|
|
1201
1245
|
import { defaultTitle } from "picocode-core/tools/recorder.js";
|
|
1202
1246
|
import { jsx as jsx3, jsxs as jsxs2 } from "@trendr/core/jsx-runtime";
|
|
1203
1247
|
function ProseSnippet({ value, language, highlight: highlightCode, codeBg }) {
|
|
@@ -1382,30 +1426,56 @@ function ToolCard({ name, title, titleLang, description, status, diff, revert, f
|
|
|
1382
1426
|
] })
|
|
1383
1427
|
] });
|
|
1384
1428
|
}
|
|
1385
|
-
function DeliberationTurn({ item, verbose,
|
|
1429
|
+
function DeliberationTurn({ item, verbose, compactToolHistory = false, paired = false, border = true, paneHeight, focused = false, onFocus }) {
|
|
1386
1430
|
const participantA = item.role === "participant-a" || item.role === "proposer";
|
|
1387
1431
|
const synthesis = item.role === "synthesis";
|
|
1388
1432
|
const label = synthesis ? "Synthesis" : `${participantA ? "Participant A" : "Participant B"} round ${item.round}`;
|
|
1389
1433
|
const text = item.interrupted ? `${item.text} *(interrupted)*` : item.text;
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1434
|
+
const [offset, setOffset] = createSignal4(0);
|
|
1435
|
+
const [follow, setFollow] = createSignal4(true);
|
|
1436
|
+
const hitTest = useHitTest();
|
|
1437
|
+
useMouse((event) => {
|
|
1438
|
+
if (paneHeight && hitTest(event.x, event.y) && (event.action === "scroll" || event.action === "press")) onFocus?.();
|
|
1439
|
+
});
|
|
1440
|
+
const tools = compactToolHistory ? compactTranscriptRuns(item.tools || [], !!item.active && !item.text) : item.tools || [];
|
|
1441
|
+
return /* @__PURE__ */ jsx3("box", { style: { flexDirection: "column", flexGrow: 1, minWidth: 0, paddingX: paired ? 0 : 2, height: paneHeight, bg: paired ? PANEL_BG : void 0 }, children: /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "row", flexGrow: paneHeight ? 1 : void 0 }, children: [
|
|
1442
|
+
border && /* @__PURE__ */ jsx3("box", { style: { width: 1, flexShrink: 0, bg: synthesis || participantA ? accent() : MUTED } }),
|
|
1443
|
+
/* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column", flexGrow: 1, minWidth: 0, paddingX: 2, paddingY: 1, bg: synthesis ? SELECT_BG : participantA || paired ? PANEL_BG : void 0 }, children: [
|
|
1444
|
+
/* @__PURE__ */ jsx3("text", { style: { color: focused || synthesis || participantA ? accent() : MUTED, bold: true }, children: label }),
|
|
1445
|
+
paneHeight ? /* @__PURE__ */ jsx3(
|
|
1446
|
+
ScrollBox,
|
|
1397
1447
|
{
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1448
|
+
style: { flexGrow: 1 },
|
|
1449
|
+
focused,
|
|
1450
|
+
scrollOffset: follow() ? 1e9 : offset(),
|
|
1451
|
+
onScroll: (next, meta) => {
|
|
1452
|
+
setOffset(next);
|
|
1453
|
+
setFollow(!!meta?.atBottom);
|
|
1454
|
+
},
|
|
1455
|
+
scrollbar: true,
|
|
1456
|
+
children: /* @__PURE__ */ jsx3(DeliberationContent, { tools, text, verbose })
|
|
1404
1457
|
}
|
|
1405
|
-
)
|
|
1458
|
+
) : /* @__PURE__ */ jsx3(DeliberationContent, { tools, text, verbose })
|
|
1406
1459
|
] })
|
|
1407
1460
|
] }) });
|
|
1408
1461
|
}
|
|
1462
|
+
function DeliberationContent({ tools, text, verbose }) {
|
|
1463
|
+
return /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column" }, children: [
|
|
1464
|
+
tools.map((tool) => /* @__PURE__ */ jsx3(Message, { item: tool, verbose }, tool.callId)),
|
|
1465
|
+
text && tools.length > 0 && /* @__PURE__ */ jsx3("text", { children: " " }),
|
|
1466
|
+
text && /* @__PURE__ */ jsx3(
|
|
1467
|
+
Markdown,
|
|
1468
|
+
{
|
|
1469
|
+
text,
|
|
1470
|
+
highlight,
|
|
1471
|
+
codeBg: null,
|
|
1472
|
+
codeBlock: TranscriptCodeBlock,
|
|
1473
|
+
tableBorderColor: MUTED,
|
|
1474
|
+
tableRowHoverBg: PANEL_BG
|
|
1475
|
+
}
|
|
1476
|
+
)
|
|
1477
|
+
] });
|
|
1478
|
+
}
|
|
1409
1479
|
function deliberationRows(turns) {
|
|
1410
1480
|
const rows = [];
|
|
1411
1481
|
for (const turn of turns) {
|
|
@@ -1419,16 +1489,32 @@ function deliberationRows(turns) {
|
|
|
1419
1489
|
}
|
|
1420
1490
|
return rows;
|
|
1421
1491
|
}
|
|
1422
|
-
function DeliberationExchange({ turns, verbose, wide }) {
|
|
1492
|
+
function DeliberationExchange({ turns, verbose, wide, compactToolHistory = false, viewportHeight, focused = false, onFocus }) {
|
|
1493
|
+
const [selected, setSelected] = createSignal4(null);
|
|
1494
|
+
const id = (turn) => `${turn.role}:${turn.round ?? "synthesis"}`;
|
|
1495
|
+
const selectedId = selected() || turns[0] && id(turns[0]);
|
|
1496
|
+
const focusTurn = (turn) => {
|
|
1497
|
+
setSelected(id(turn));
|
|
1498
|
+
onFocus?.();
|
|
1499
|
+
};
|
|
1500
|
+
useInput2((event) => {
|
|
1501
|
+
if (!focused || event.key !== "left" && event.key !== "right") return;
|
|
1502
|
+
const index = turns.findIndex((turn) => id(turn) === selectedId);
|
|
1503
|
+
const next = Math.max(0, Math.min(turns.length - 1, index + (event.key === "left" ? -1 : 1)));
|
|
1504
|
+
if (turns[next]) focusTurn(turns[next]);
|
|
1505
|
+
event.stopPropagation();
|
|
1506
|
+
});
|
|
1507
|
+
const paneHeight = viewportHeight ? Math.max(6, Math.floor(viewportHeight * (turns.some((turn) => turn.role === "synthesis") ? 0.6 : 1)) - 1) : void 0;
|
|
1508
|
+
const paneProps = (turn) => ({ paneHeight: turn.role === "synthesis" && viewportHeight ? Math.max(6, Math.floor(viewportHeight * 0.35)) : paneHeight, focused: focused && selectedId === id(turn), onFocus: () => focusTurn(turn) });
|
|
1423
1509
|
return /* @__PURE__ */ jsx3("box", { style: { flexDirection: "column", gap: 1, marginTop: 1 }, children: deliberationRows(turns).map((row, index) => {
|
|
1424
1510
|
const synthesis = row[0]?.role === "synthesis";
|
|
1425
|
-
if (!wide || synthesis) return row.map((turn) => /* @__PURE__ */ jsx3(DeliberationTurn, { item: turn, verbose }, `${turn.role}:${turn.round ?? "synthesis"}`));
|
|
1511
|
+
if (!wide || synthesis) return row.map((turn) => /* @__PURE__ */ jsx3(DeliberationTurn, { item: turn, verbose, compactToolHistory, ...paneProps(turn) }, `${turn.role}:${turn.round ?? "synthesis"}`));
|
|
1426
1512
|
const left = row.find((turn) => turn.role === "participant-a" || turn.role === "proposer");
|
|
1427
1513
|
const right = row.find((turn) => turn.role === "participant-b" || turn.role === "reviewer");
|
|
1428
|
-
return /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "row", width: "100%", overflow: "clip",
|
|
1429
|
-
/* @__PURE__ */ jsx3("box", { style: { width: "50%", minWidth: 0, overflow: "clip" }, children: left && /* @__PURE__ */ jsx3(DeliberationTurn, { item: left, verbose,
|
|
1430
|
-
/* @__PURE__ */ jsx3("box", { style: { width: 1, flexShrink: 0
|
|
1431
|
-
/* @__PURE__ */ jsx3("box", { style: { flexGrow: 1, minWidth: 0, overflow: "clip" }, children: right && /* @__PURE__ */ jsx3(DeliberationTurn, { item: right, verbose,
|
|
1514
|
+
return /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "row", width: "100%", overflow: "clip", paddingX: 2 }, children: [
|
|
1515
|
+
/* @__PURE__ */ jsx3("box", { style: { width: "50%", minWidth: 0, overflow: "clip" }, children: left && /* @__PURE__ */ jsx3(DeliberationTurn, { item: left, verbose, compactToolHistory, paired: true, border: false, ...paneProps(left) }) }),
|
|
1516
|
+
/* @__PURE__ */ jsx3("box", { style: { width: 1, flexShrink: 0 } }),
|
|
1517
|
+
/* @__PURE__ */ jsx3("box", { style: { flexGrow: 1, minWidth: 0, overflow: "clip" }, children: right && /* @__PURE__ */ jsx3(DeliberationTurn, { item: right, verbose, compactToolHistory, paired: true, border: false, ...paneProps(right) }) })
|
|
1432
1518
|
] }, row[0]?.parallelGroup || `${row[0]?.role}:${row[0]?.round}:${index}`);
|
|
1433
1519
|
}) });
|
|
1434
1520
|
}
|
|
@@ -1509,13 +1595,19 @@ function Message({ item, verbose, showLocked = false }) {
|
|
|
1509
1595
|
] });
|
|
1510
1596
|
}
|
|
1511
1597
|
if (item.kind === "peer") {
|
|
1512
|
-
const
|
|
1598
|
+
const incoming = item.direction === "incoming";
|
|
1599
|
+
const unread = incoming && !item.read;
|
|
1600
|
+
const border = incoming && item.read ? MUTED : PEER;
|
|
1601
|
+
const status = incoming ? ` ${unread ? "unread" : "read"}` : ` ${item.status || "unknown"}`;
|
|
1513
1602
|
return /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column" }, children: [
|
|
1514
1603
|
/* @__PURE__ */ jsx3("text", { children: " " }),
|
|
1515
1604
|
/* @__PURE__ */ jsxs2("box", { style: { flexDirection: "row" }, children: [
|
|
1516
|
-
/* @__PURE__ */ jsx3("box", { style: { width: 1, flexShrink: 0, bg:
|
|
1605
|
+
/* @__PURE__ */ jsx3("box", { style: { width: 1, flexShrink: 0, bg: border } }),
|
|
1517
1606
|
/* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column", flexGrow: 1, minWidth: 0, paddingX: 1, paddingY: 1, bg: PANEL_BG }, children: [
|
|
1518
|
-
/* @__PURE__ */
|
|
1607
|
+
/* @__PURE__ */ jsxs2("box", { style: { flexDirection: "row" }, children: [
|
|
1608
|
+
/* @__PURE__ */ jsx3("text", { style: { color: PEER, bold: true }, children: `@${item.from.name} \u2192 @${item.to.name}${item.urgent ? " urgent" : ""}` }),
|
|
1609
|
+
/* @__PURE__ */ jsx3("text", { style: { color: border, bold: unread }, children: status })
|
|
1610
|
+
] }),
|
|
1519
1611
|
/* @__PURE__ */ jsx3("text", { style: { color: PEER }, children: item.text }),
|
|
1520
1612
|
item.error && /* @__PURE__ */ jsx3("text", { style: { color: RED }, children: item.error })
|
|
1521
1613
|
] })
|
|
@@ -1560,7 +1652,7 @@ function Message({ item, verbose, showLocked = false }) {
|
|
|
1560
1652
|
}
|
|
1561
1653
|
|
|
1562
1654
|
// src/ui/conversation-search-view.jsx
|
|
1563
|
-
import { createSignal as
|
|
1655
|
+
import { createSignal as createSignal5, TextInput, useLayout } from "@trendr/core";
|
|
1564
1656
|
import { conversationMatches, highlightConversation } from "picocode-core/conversation-search.js";
|
|
1565
1657
|
import { jsx as jsx4, jsxs as jsxs3 } from "@trendr/core/jsx-runtime";
|
|
1566
1658
|
function ScrollAnchor({ target }) {
|
|
@@ -1574,13 +1666,13 @@ function SearchMessage({ item, verbose, currentMatch, search }) {
|
|
|
1574
1666
|
return /* @__PURE__ */ jsx4(Message, { item, verbose });
|
|
1575
1667
|
}
|
|
1576
1668
|
function createConversationSearch({ fm, verbose, setFollow, setOffset }) {
|
|
1577
|
-
const [active, setActive] =
|
|
1578
|
-
const [query, setQuery] =
|
|
1579
|
-
const [committed, setCommitted] =
|
|
1580
|
-
const [index, setIndex] =
|
|
1581
|
-
const [enterFocus, setEnterFocus] =
|
|
1582
|
-
const [scrollRequest, setScrollRequest] =
|
|
1583
|
-
const [scroll] =
|
|
1669
|
+
const [active, setActive] = createSignal5(false);
|
|
1670
|
+
const [query, setQuery] = createSignal5("");
|
|
1671
|
+
const [committed, setCommitted] = createSignal5(false);
|
|
1672
|
+
const [index, setIndex] = createSignal5(0);
|
|
1673
|
+
const [enterFocus, setEnterFocus] = createSignal5(false);
|
|
1674
|
+
const [scrollRequest, setScrollRequest] = createSignal5(0);
|
|
1675
|
+
const [scroll] = createSignal5({ anchorY: 0, key: null });
|
|
1584
1676
|
function registerFocus() {
|
|
1585
1677
|
if (!active()) return;
|
|
1586
1678
|
fm.item("conversation-search");
|
|
@@ -1682,49 +1774,8 @@ function ConversationSearchBar({ search, matches }) {
|
|
|
1682
1774
|
] });
|
|
1683
1775
|
}
|
|
1684
1776
|
|
|
1685
|
-
// src/ui/transcript-window.js
|
|
1686
|
-
function compactTranscriptRuns(items, active = false) {
|
|
1687
|
-
const result = [];
|
|
1688
|
-
for (let i = 0; i < items.length; ) {
|
|
1689
|
-
if (items[i].kind === "tool" || items[i].kind === "thoughts") {
|
|
1690
|
-
let end = i + 1;
|
|
1691
|
-
while (end < items.length && (items[end].kind === "tool" || items[end].kind === "thoughts")) end++;
|
|
1692
|
-
const run = items.slice(i, end);
|
|
1693
|
-
const tools = run.filter((item) => item.kind === "tool");
|
|
1694
|
-
result.push({ kind: "tool-group", callId: tools.at(-1)?.callId, items: run, tools, active: active && end === items.length });
|
|
1695
|
-
i = end;
|
|
1696
|
-
continue;
|
|
1697
|
-
}
|
|
1698
|
-
if (items[i].kind === "notice" && items[i].agentCompletion) {
|
|
1699
|
-
let end = i + 1;
|
|
1700
|
-
while (end < items.length && items[end].kind === "notice" && items[end].agentCompletion) end++;
|
|
1701
|
-
const run = items.slice(i, end);
|
|
1702
|
-
result.push(run.length === 1 ? run[0] : { kind: "agent-notice-group", notices: run });
|
|
1703
|
-
i = end;
|
|
1704
|
-
continue;
|
|
1705
|
-
}
|
|
1706
|
-
result.push(items[i++]);
|
|
1707
|
-
}
|
|
1708
|
-
return result;
|
|
1709
|
-
}
|
|
1710
|
-
function transcriptWindow(items, size) {
|
|
1711
|
-
const start = Math.max(0, items.length - size);
|
|
1712
|
-
const hidden = items.slice(0, start);
|
|
1713
|
-
return {
|
|
1714
|
-
items: items.slice(start),
|
|
1715
|
-
hiddenItems: hidden.length,
|
|
1716
|
-
hiddenCount: hidden.reduce((total, item) => total + sourceItemCount(item), 0)
|
|
1717
|
-
};
|
|
1718
|
-
}
|
|
1719
|
-
function sourceItemCount(item) {
|
|
1720
|
-
if (item.kind === "tool-group") return item.items.length;
|
|
1721
|
-
if (item.kind === "agent-notice-group") return item.notices.length;
|
|
1722
|
-
if (item.kind === "steer-tools") return item.count;
|
|
1723
|
-
return 1;
|
|
1724
|
-
}
|
|
1725
|
-
|
|
1726
1777
|
// src/ui/question-form.jsx
|
|
1727
|
-
import { createSignal as
|
|
1778
|
+
import { createSignal as createSignal6, Button as Button2, TextInput as TextInput2, useInput as useInput3 } from "@trendr/core";
|
|
1728
1779
|
import { jsx as jsx5, jsxs as jsxs4 } from "@trendr/core/jsx-runtime";
|
|
1729
1780
|
function answerText(question, answer) {
|
|
1730
1781
|
if (Array.isArray(answer)) return answer.join(", ");
|
|
@@ -1733,12 +1784,12 @@ function answerText(question, answer) {
|
|
|
1733
1784
|
function QuestionForm({ request, focused, onSubmit, onCancel }) {
|
|
1734
1785
|
const questions = request.questions;
|
|
1735
1786
|
const reviewing = questions.length > 1;
|
|
1736
|
-
const [step, setStep] =
|
|
1737
|
-
const [answers, setAnswers] =
|
|
1738
|
-
const [cursor, setCursor] =
|
|
1739
|
-
const [custom, setCustom] =
|
|
1740
|
-
const [review, setReview] =
|
|
1741
|
-
const [control, setControl] =
|
|
1787
|
+
const [step, setStep] = createSignal6(0);
|
|
1788
|
+
const [answers, setAnswers] = createSignal6({});
|
|
1789
|
+
const [cursor, setCursor] = createSignal6(0);
|
|
1790
|
+
const [custom, setCustom] = createSignal6(false);
|
|
1791
|
+
const [review, setReview] = createSignal6(false);
|
|
1792
|
+
const [control, setControl] = createSignal6("answer");
|
|
1742
1793
|
const question = () => questions[step()];
|
|
1743
1794
|
const options = () => question().options || [];
|
|
1744
1795
|
const rows = () => [...options(), ...question().allowOther === false ? [] : [{ label: "Other", other: true }]];
|
|
@@ -1784,7 +1835,7 @@ function QuestionForm({ request, focused, onSubmit, onCancel }) {
|
|
|
1784
1835
|
else advance();
|
|
1785
1836
|
}
|
|
1786
1837
|
}
|
|
1787
|
-
|
|
1838
|
+
useInput3((event) => {
|
|
1788
1839
|
if (!focused) return;
|
|
1789
1840
|
if (event.key === "escape") {
|
|
1790
1841
|
if (custom()) {
|
|
@@ -1924,13 +1975,13 @@ function QuestionForm({ request, focused, onSubmit, onCancel }) {
|
|
|
1924
1975
|
}
|
|
1925
1976
|
|
|
1926
1977
|
// src/ui/empty-state.jsx
|
|
1927
|
-
import { createSignal as
|
|
1978
|
+
import { createSignal as createSignal7, useInterval, useMouse as useMouse2, useResize } from "@trendr/core";
|
|
1928
1979
|
import { jsx as jsx6, jsxs as jsxs5 } from "@trendr/core/jsx-runtime";
|
|
1929
1980
|
function EmptyCloud({ width: width2, height, version: version2 }) {
|
|
1930
|
-
const [phase, setPhase] =
|
|
1931
|
-
const [wake, setWake] =
|
|
1981
|
+
const [phase, setPhase] = createSignal7(0);
|
|
1982
|
+
const [wake, setWake] = createSignal7([]);
|
|
1932
1983
|
let previous = null;
|
|
1933
|
-
|
|
1984
|
+
useMouse2((event) => {
|
|
1934
1985
|
if (event.action !== "move" && event.action !== "drag") return;
|
|
1935
1986
|
const x = event.x;
|
|
1936
1987
|
const y = event.y;
|
|
@@ -2007,7 +2058,7 @@ function EmptyCloud({ width: width2, height, version: version2 }) {
|
|
|
2007
2058
|
}) });
|
|
2008
2059
|
}
|
|
2009
2060
|
function EmptyState({ version: version2, clouds = false }) {
|
|
2010
|
-
const [size, setSize] =
|
|
2061
|
+
const [size, setSize] = createSignal7({ width: process.stdout.columns || 80, height: process.stdout.rows || 24 });
|
|
2011
2062
|
useResize(setSize);
|
|
2012
2063
|
const width2 = Math.max(1, size().width);
|
|
2013
2064
|
const height = Math.max(1, size().height - 4);
|
|
@@ -2021,7 +2072,7 @@ function EmptyState({ version: version2, clouds = false }) {
|
|
|
2021
2072
|
}
|
|
2022
2073
|
|
|
2023
2074
|
// src/ui/help.jsx
|
|
2024
|
-
import { Markdown as Markdown2, ScrollBox, useInput as
|
|
2075
|
+
import { Markdown as Markdown2, ScrollBox as ScrollBox2, useInput as useInput4 } from "@trendr/core";
|
|
2025
2076
|
import { jsx as jsx7, jsxs as jsxs6 } from "@trendr/core/jsx-runtime";
|
|
2026
2077
|
var HELP_TEXT = (commands) => `pico is a coding agent in your terminal. It reads, edits, and searches files, runs commands, and streams its work into this transcript.
|
|
2027
2078
|
|
|
@@ -2103,7 +2154,7 @@ The footer's \`ctx %\` shows how full the model's context is. At 85% pico auto-c
|
|
|
2103
2154
|
|
|
2104
2155
|
*esc takes you back to the conversation*`;
|
|
2105
2156
|
function Help({ commands, onClose }) {
|
|
2106
|
-
|
|
2157
|
+
useInput4((event) => {
|
|
2107
2158
|
if (event.key === "escape") {
|
|
2108
2159
|
onClose();
|
|
2109
2160
|
event.stopPropagation();
|
|
@@ -2116,12 +2167,12 @@ function Help({ commands, onClose }) {
|
|
|
2116
2167
|
/* @__PURE__ */ jsx7("text", { style: { color: MUTED }, children: "\u2191\u2193 scroll esc back" })
|
|
2117
2168
|
] }),
|
|
2118
2169
|
/* @__PURE__ */ jsx7("text", { children: " " }),
|
|
2119
|
-
/* @__PURE__ */ jsx7(
|
|
2170
|
+
/* @__PURE__ */ jsx7(ScrollBox2, { style: { flexGrow: 1 }, focused: true, scrollbar: true, children: /* @__PURE__ */ jsx7(Markdown2, { text: HELP_TEXT(commands), codeBg: null }) })
|
|
2120
2171
|
] });
|
|
2121
2172
|
}
|
|
2122
2173
|
|
|
2123
2174
|
// src/ui/panels.jsx
|
|
2124
|
-
import { createSignal as
|
|
2175
|
+
import { createSignal as createSignal8, Button as Button3, Checkbox, ease as ease3, Field, FieldList, Menu as Menu2, NumberInput, PickList, Radio, ScrollBox as ScrollBox3, TextInput as TextInput3, useAnimated as useAnimated3, useFocus, useInput as useInput5, useInterval as useInterval2, useLayout as useLayout2 } from "@trendr/core";
|
|
2125
2176
|
import { compactNumber } from "picocode-core/format.js";
|
|
2126
2177
|
import { homedir } from "node:os";
|
|
2127
2178
|
import { fuzzyScore as fuzzyScore3, rankFuzzy as rankFuzzy2 } from "picocode-core/fuzzy.js";
|
|
@@ -2159,7 +2210,7 @@ function PanelFrame({ title, hint, right, fullScreen = false, children }) {
|
|
|
2159
2210
|
] });
|
|
2160
2211
|
}
|
|
2161
2212
|
function ConfirmPanel({ title, message, confirmLabel = "Confirm", focused, onConfirm, onClose }) {
|
|
2162
|
-
|
|
2213
|
+
useInput5((event) => {
|
|
2163
2214
|
if (!focused) return;
|
|
2164
2215
|
if (event.key === "escape") {
|
|
2165
2216
|
onClose();
|
|
@@ -2212,7 +2263,7 @@ function ConfigPanel({ values, focused, onChange, onPickResearchModel, onPickShe
|
|
|
2212
2263
|
{ name: "gitStatus", label: "Git information", desc: "Show branch and changed line counts", path: "display.gitStatus" },
|
|
2213
2264
|
{ name: "wideSidebar", label: "Wide sidebar", desc: "Move panels and status details to a right sidebar when the terminal is wider than 160 columns", path: "display.wideSidebar" }
|
|
2214
2265
|
];
|
|
2215
|
-
|
|
2266
|
+
useInput5((event) => {
|
|
2216
2267
|
if (!focused) return;
|
|
2217
2268
|
if (event.key === "escape") {
|
|
2218
2269
|
onClose();
|
|
@@ -2232,10 +2283,10 @@ function ScopeTabs({ scopes, active }) {
|
|
|
2232
2283
|
return /* @__PURE__ */ jsx8("box", { style: { flexDirection: "row" }, children: scopes.map((s, i) => /* @__PURE__ */ jsx8("text", { style: { color: i === active ? accent() : MUTED, bold: i === active }, children: `${i > 0 ? " " : ""}${s === "checkout" ? "this checkout" : s}` }, s)) });
|
|
2233
2284
|
}
|
|
2234
2285
|
function ModelPanel({ models: models2, current, defaultName, focused, onPick, onPickDefault, onClose, title = "Select model", hint = "enter: this session ctrl+s: set as default esc: close" }) {
|
|
2235
|
-
const [cursor, setCursor] =
|
|
2236
|
-
const [query, setQuery] =
|
|
2286
|
+
const [cursor, setCursor] = createSignal8(models2[0] || null);
|
|
2287
|
+
const [query, setQuery] = createSignal8("");
|
|
2237
2288
|
const rankedModels = rankFuzzy2(models2, query(), (q, model) => fuzzyScore3(q, model.name));
|
|
2238
|
-
|
|
2289
|
+
useInput5((event) => {
|
|
2239
2290
|
if (!focused) return;
|
|
2240
2291
|
if (event.ctrl && event.key === "s" && cursor()) {
|
|
2241
2292
|
onPickDefault(cursor());
|
|
@@ -2275,8 +2326,8 @@ function ModelPanel({ models: models2, current, defaultName, focused, onPick, on
|
|
|
2275
2326
|
) }) });
|
|
2276
2327
|
}
|
|
2277
2328
|
function HistoryPanel({ prompts, scopes, scopeIndex, focused, onPick, onClose }) {
|
|
2278
|
-
const [preview, setPreview] =
|
|
2279
|
-
const [query, setQuery] =
|
|
2329
|
+
const [preview, setPreview] = createSignal8(prompts[0] || null);
|
|
2330
|
+
const [query, setQuery] = createSignal8("");
|
|
2280
2331
|
const anyMatch = prompts.some((p) => fuzzyScore3(query(), p.text) >= 0);
|
|
2281
2332
|
return /* @__PURE__ */ jsx8(
|
|
2282
2333
|
PanelFrame,
|
|
@@ -2311,7 +2362,7 @@ function HistoryPanel({ prompts, scopes, scopeIndex, focused, onPick, onClose })
|
|
|
2311
2362
|
);
|
|
2312
2363
|
}
|
|
2313
2364
|
function RewindPickPanel({ entries, stats, focused, onPick, onClose }) {
|
|
2314
|
-
const [preview, setPreview] =
|
|
2365
|
+
const [preview, setPreview] = createSignal8(entries[0] || null);
|
|
2315
2366
|
return /* @__PURE__ */ jsx8(PanelFrame, { title: "Rewind to a message", hint: "\u2191\u2193 to move enter to choose esc to close", children: /* @__PURE__ */ jsxs7("box", { style: { flexDirection: "row", height: 12, marginTop: 1, gap: 2 }, children: [
|
|
2316
2367
|
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", width: "50%" }, children: /* @__PURE__ */ jsx8(
|
|
2317
2368
|
PickList,
|
|
@@ -2372,7 +2423,7 @@ function RewindActionPanel({ target, options, focused, onSubmit, onBack }) {
|
|
|
2372
2423
|
] });
|
|
2373
2424
|
}
|
|
2374
2425
|
function useEscape(focused, onClose) {
|
|
2375
|
-
|
|
2426
|
+
useInput5((event) => {
|
|
2376
2427
|
if (!focused()) return;
|
|
2377
2428
|
if (event.key === "escape") {
|
|
2378
2429
|
onClose();
|
|
@@ -2381,9 +2432,9 @@ function useEscape(focused, onClose) {
|
|
|
2381
2432
|
});
|
|
2382
2433
|
}
|
|
2383
2434
|
function ResumePanel({ sessions, scopes, scopeIndex, loading, focused, currentId, onPick, onDelete, onClose }) {
|
|
2384
|
-
const [preview, setPreview] =
|
|
2385
|
-
const [pane, setPane] =
|
|
2386
|
-
const [query, setQuery] =
|
|
2435
|
+
const [preview, setPreview] = createSignal8(sessions[0] || null);
|
|
2436
|
+
const [pane, setPane] = createSignal8("list");
|
|
2437
|
+
const [query, setQuery] = createSignal8("");
|
|
2387
2438
|
const rankedSessions = rankFuzzy2(sessions, query(), (q, session) => {
|
|
2388
2439
|
const customScore = session.customTitle ? fuzzyScore3(q, session.customTitle) : -1;
|
|
2389
2440
|
if (customScore >= 0) return 2e4 + customScore;
|
|
@@ -2396,7 +2447,7 @@ function ResumePanel({ sessions, scopes, scopeIndex, loading, focused, currentId
|
|
|
2396
2447
|
return sessions.includes(selected) ? selected : null;
|
|
2397
2448
|
};
|
|
2398
2449
|
useEscape(() => focused, onClose);
|
|
2399
|
-
|
|
2450
|
+
useInput5((event) => {
|
|
2400
2451
|
if (!focused) return;
|
|
2401
2452
|
if (event.key === "tab" && !event.ctrl && !event.meta) {
|
|
2402
2453
|
setPane((current) => current === "list" ? "preview" : "list");
|
|
@@ -2440,7 +2491,7 @@ function ResumePanel({ sessions, scopes, scopeIndex, loading, focused, currentId
|
|
|
2440
2491
|
}
|
|
2441
2492
|
) }),
|
|
2442
2493
|
/* @__PURE__ */ jsx8(PanelDivider, {}),
|
|
2443
|
-
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, bg: PANEL_BG, paddingX: 3 }, children: selectedSession() ? /* @__PURE__ */ jsx8(
|
|
2494
|
+
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, bg: PANEL_BG, paddingX: 3 }, children: selectedSession() ? /* @__PURE__ */ jsx8(ScrollBox3, { style: { flexGrow: 1 }, focused: focused && pane() === "preview", scrollbar: true, children: /* @__PURE__ */ jsxs7("box", { style: { flexDirection: "column" }, children: [
|
|
2444
2495
|
/* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: `${selectedSession().turns} ${selectedSession().turns === 1 ? "turn" : "turns"} ${timeAgo(selectedSession().at)} ${shortenHome(selectedSession().header.root)}` }),
|
|
2445
2496
|
/* @__PURE__ */ jsx8("box", { style: { height: 1 } }),
|
|
2446
2497
|
(selectedSession().preview || []).length > 0 ? /* @__PURE__ */ jsxs7("box", { style: { flexDirection: "column" }, children: [
|
|
@@ -2453,11 +2504,11 @@ function ResumePanel({ sessions, scopes, scopeIndex, loading, focused, currentId
|
|
|
2453
2504
|
);
|
|
2454
2505
|
}
|
|
2455
2506
|
function MemoryPanel({ memories, scopes, scopeIndex, focused, onToggleDisabled, onForget, onClose }) {
|
|
2456
|
-
const [cursorItem, setCursorItem] =
|
|
2457
|
-
const [pane, setPane] =
|
|
2507
|
+
const [cursorItem, setCursorItem] = createSignal8(null);
|
|
2508
|
+
const [pane, setPane] = createSignal8("list");
|
|
2458
2509
|
const preview = memories.includes(cursorItem()) ? cursorItem() : memories[0] || null;
|
|
2459
2510
|
useEscape(() => focused, onClose);
|
|
2460
|
-
|
|
2511
|
+
useInput5((event) => {
|
|
2461
2512
|
if (!focused) return;
|
|
2462
2513
|
if (event.key === "tab" && !event.ctrl && !event.meta) {
|
|
2463
2514
|
setPane((p) => p === "list" ? "preview" : "list");
|
|
@@ -2498,7 +2549,7 @@ function MemoryPanel({ memories, scopes, scopeIndex, focused, onToggleDisabled,
|
|
|
2498
2549
|
}
|
|
2499
2550
|
) }),
|
|
2500
2551
|
/* @__PURE__ */ jsx8(PanelDivider, {}),
|
|
2501
|
-
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, bg: PANEL_BG, paddingX: 3 }, children: preview ? /* @__PURE__ */ jsxs7(
|
|
2552
|
+
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, bg: PANEL_BG, paddingX: 3 }, children: preview ? /* @__PURE__ */ jsxs7(ScrollBox3, { style: { flexGrow: 1 }, focused: focused && pane() === "preview", scrollbar: true, children: [
|
|
2502
2553
|
preview.disabled && /* @__PURE__ */ jsx8("text", { style: { color: MUTED, bold: true }, children: "SUPPRESSED" }),
|
|
2503
2554
|
/* @__PURE__ */ jsx8("text", { style: { color: MUTED, italic: true }, children: preview.description || "no description" }),
|
|
2504
2555
|
/* @__PURE__ */ jsx8("text", { children: " " }),
|
|
@@ -2509,9 +2560,9 @@ function MemoryPanel({ memories, scopes, scopeIndex, focused, onToggleDisabled,
|
|
|
2509
2560
|
);
|
|
2510
2561
|
}
|
|
2511
2562
|
function EffortPanel({ levels, current, defaultLevel, focused, onPick, onPickDefault, onClose }) {
|
|
2512
|
-
const [cursor, setCursor] =
|
|
2563
|
+
const [cursor, setCursor] = createSignal8(0);
|
|
2513
2564
|
const items = levels;
|
|
2514
|
-
|
|
2565
|
+
useInput5((event) => {
|
|
2515
2566
|
if (!focused) return;
|
|
2516
2567
|
if (event.ctrl && event.key === "s") {
|
|
2517
2568
|
onPickDefault(items[cursor()]);
|
|
@@ -2542,7 +2593,7 @@ function EffortPanel({ levels, current, defaultLevel, focused, onPick, onPickDef
|
|
|
2542
2593
|
) }) });
|
|
2543
2594
|
}
|
|
2544
2595
|
function ThemePanel({ themes, pref, focused, onPick, onPreview, onClose }) {
|
|
2545
|
-
const [cursor, setCursor] =
|
|
2596
|
+
const [cursor, setCursor] = createSignal8(Math.max(0, themes.findIndex((t) => t.key === pref)));
|
|
2546
2597
|
return /* @__PURE__ */ jsx8(PanelFrame, { title: "Theme", hint: "j/k to move and preview enter to apply esc: close", children: /* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", marginTop: 1 }, children: /* @__PURE__ */ jsx8(
|
|
2547
2598
|
Menu2,
|
|
2548
2599
|
{
|
|
@@ -2630,7 +2681,7 @@ function InfoListPanel({ title, rows, overview, focused, onClose }) {
|
|
|
2630
2681
|
useEscape(() => focused, onClose);
|
|
2631
2682
|
return /* @__PURE__ */ jsxs7(PanelFrame, { title, hint: "j/k or \u2191\u2193 to scroll esc close", children: [
|
|
2632
2683
|
overview && /* @__PURE__ */ jsx8(ContextOverview, { overview }),
|
|
2633
|
-
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", height: 14, marginTop: 1 }, children: rows.length === 0 ? /* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: "nothing here yet" }) : /* @__PURE__ */ jsx8(
|
|
2684
|
+
/* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", height: 14, marginTop: 1 }, children: rows.length === 0 ? /* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: "nothing here yet" }) : /* @__PURE__ */ jsx8(ScrollBox3, { style: { flexGrow: 1 }, focused, scrollbar: true, children: rows.map((row, i) => /* @__PURE__ */ jsxs7("box", { style: { flexDirection: "column", marginTop: i === 0 ? 0 : 1 }, children: [
|
|
2634
2685
|
/* @__PURE__ */ jsxs7("box", { style: { flexDirection: "row" }, children: [
|
|
2635
2686
|
/* @__PURE__ */ jsx8("text", { style: { color: accent() }, children: row.name }),
|
|
2636
2687
|
/* @__PURE__ */ jsx8("box", { style: { flexGrow: 1 } }),
|
|
@@ -2648,10 +2699,10 @@ function ProjectPanel({ projects, loading, focused, onPickCheckout, onPickSessio
|
|
|
2648
2699
|
first: index === 0,
|
|
2649
2700
|
last: index === project.checkouts.length - 1
|
|
2650
2701
|
})));
|
|
2651
|
-
const [preview, setPreview] =
|
|
2652
|
-
const [pane, setPane] =
|
|
2702
|
+
const [preview, setPreview] = createSignal8(rows[0] || null);
|
|
2703
|
+
const [pane, setPane] = createSignal8("projects");
|
|
2653
2704
|
useEscape(() => focused, onClose);
|
|
2654
|
-
|
|
2705
|
+
useInput5((event) => {
|
|
2655
2706
|
if (!focused) return;
|
|
2656
2707
|
if (event.key === "tab" && !event.ctrl && !event.meta) {
|
|
2657
2708
|
if (preview()?.sessions.length) setPane((current) => current === "projects" ? "sessions" : "projects");
|
|
@@ -2715,10 +2766,10 @@ function ProjectPanel({ projects, loading, focused, onPickCheckout, onPickSessio
|
|
|
2715
2766
|
] }) });
|
|
2716
2767
|
}
|
|
2717
2768
|
function ConnectPanel({ providers: providers2, focused, onConnect, onDisconnect, onClose }) {
|
|
2718
|
-
const [index, setIndex] =
|
|
2769
|
+
const [index, setIndex] = createSignal8(0);
|
|
2719
2770
|
useEscape(() => focused, onClose);
|
|
2720
2771
|
const selected = () => providers2[Math.min(index(), providers2.length - 1)] || null;
|
|
2721
|
-
|
|
2772
|
+
useInput5((event) => {
|
|
2722
2773
|
if (!focused) return;
|
|
2723
2774
|
const p = selected();
|
|
2724
2775
|
if (p && event.ctrl && event.key === "x" && p.connected) {
|
|
@@ -2748,13 +2799,13 @@ function ConnectPanel({ providers: providers2, focused, onConnect, onDisconnect,
|
|
|
2748
2799
|
) }) });
|
|
2749
2800
|
}
|
|
2750
2801
|
function WakeupsPanel({ wakeups: wakeups2, focused, onCancel, onClose }) {
|
|
2751
|
-
const [index, setIndex] =
|
|
2752
|
-
const [tick, setTick] =
|
|
2802
|
+
const [index, setIndex] = createSignal8(0);
|
|
2803
|
+
const [tick, setTick] = createSignal8(0);
|
|
2753
2804
|
useEscape(() => focused, onClose);
|
|
2754
2805
|
useInterval2(() => setTick((t) => t + 1), 1e3);
|
|
2755
2806
|
void tick();
|
|
2756
2807
|
const selected = () => wakeups2[Math.min(index(), wakeups2.length - 1)] || null;
|
|
2757
|
-
|
|
2808
|
+
useInput5((event) => {
|
|
2758
2809
|
if (!focused) return;
|
|
2759
2810
|
const w = selected();
|
|
2760
2811
|
if (w && event.ctrl && event.key === "x") {
|
|
@@ -2819,12 +2870,12 @@ function FormField({ label, active, children }) {
|
|
|
2819
2870
|
function McpServerForm({ focused, server, onSave, onInvalid, onCancel }) {
|
|
2820
2871
|
const initial = server ? parseServerSpec(server.command) : null;
|
|
2821
2872
|
const editing = !!server;
|
|
2822
|
-
const [name, setName] =
|
|
2823
|
-
const [scope, setScope] =
|
|
2824
|
-
const [transport, setTransport] =
|
|
2825
|
-
const [target, setTarget] =
|
|
2873
|
+
const [name, setName] = createSignal8(server?.name || "");
|
|
2874
|
+
const [scope, setScope] = createSignal8(server?.scope || "global");
|
|
2875
|
+
const [transport, setTransport] = createSignal8(initial?.type || "stdio");
|
|
2876
|
+
const [target, setTarget] = createSignal8(initial?.type === "http" ? initial.url : server?.command || "");
|
|
2826
2877
|
const initialHeaders = initial?.type === "http" ? Object.fromEntries(Object.keys(initial.headers).map((name2) => [name2, REDACTED_HEADER])) : {};
|
|
2827
|
-
const [headers, setHeaders] =
|
|
2878
|
+
const [headers, setHeaders] = createSignal8(formatHttpServerSpec("", initialHeaders).trim());
|
|
2828
2879
|
const fm = useFocus({ initial: editing ? "transport" : "name" });
|
|
2829
2880
|
if (!editing) {
|
|
2830
2881
|
fm.item("name");
|
|
@@ -2835,7 +2886,7 @@ function McpServerForm({ focused, server, onSave, onInvalid, onCancel }) {
|
|
|
2835
2886
|
if (transport() === "http") fm.item("headers");
|
|
2836
2887
|
fm.item("save");
|
|
2837
2888
|
fm.item("cancel");
|
|
2838
|
-
|
|
2889
|
+
useInput5((event) => {
|
|
2839
2890
|
if (!focused) return;
|
|
2840
2891
|
if (event.key === "escape") {
|
|
2841
2892
|
onCancel();
|
|
@@ -2887,9 +2938,9 @@ function McpServerForm({ focused, server, onSave, onInvalid, onCancel }) {
|
|
|
2887
2938
|
] });
|
|
2888
2939
|
}
|
|
2889
2940
|
function McpPanel({ servers, focused, onToggle, onReconnect, onRemove, onAdd, onEdit, onInvalid, onClose }) {
|
|
2890
|
-
const [form, setForm] =
|
|
2891
|
-
const [index, setIndex] =
|
|
2892
|
-
const [viewing, setViewing] =
|
|
2941
|
+
const [form, setForm] = createSignal8(null);
|
|
2942
|
+
const [index, setIndex] = createSignal8(0);
|
|
2943
|
+
const [viewing, setViewing] = createSignal8(null);
|
|
2893
2944
|
useEscape(() => focused && !form(), () => viewing() ? setViewing(null) : onClose());
|
|
2894
2945
|
const selected = () => servers[Math.min(index(), servers.length - 1)] || null;
|
|
2895
2946
|
const viewed = () => servers.find((s) => s.name === viewing()) || null;
|
|
@@ -2902,7 +2953,7 @@ function McpPanel({ servers, focused, onToggle, onReconnect, onRemove, onAdd, on
|
|
|
2902
2953
|
title: `MCP servers ${server.name} ${server.tools.length} ${server.tools.length === 1 ? "tool" : "tools"}`,
|
|
2903
2954
|
hint: "j/k or \u2191\u2193 to scroll esc back to servers",
|
|
2904
2955
|
fullScreen: true,
|
|
2905
|
-
children: /* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, marginTop: 1, paddingX: 2 }, children: server.tools.length === 0 ? /* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: "no tools reported is the server connected?" }) : /* @__PURE__ */ jsx8(
|
|
2956
|
+
children: /* @__PURE__ */ jsx8("box", { style: { flexDirection: "column", flexGrow: 1, marginTop: 1, paddingX: 2 }, children: server.tools.length === 0 ? /* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: "no tools reported is the server connected?" }) : /* @__PURE__ */ jsx8(ScrollBox3, { style: { flexGrow: 1 }, focused, scrollbar: true, children: server.tools.map((t, i) => /* @__PURE__ */ jsxs7("box", { style: { flexDirection: "column", marginTop: i === 0 ? 0 : 1 }, children: [
|
|
2906
2957
|
/* @__PURE__ */ jsx8("text", { style: { color: accent() }, children: t.name }),
|
|
2907
2958
|
/* @__PURE__ */ jsx8("text", { style: { color: MUTED }, children: describe(t) })
|
|
2908
2959
|
] }, t.name)) }) })
|
|
@@ -2979,7 +3030,7 @@ function McpPanel({ servers, focused, onToggle, onReconnect, onRemove, onAdd, on
|
|
|
2979
3030
|
);
|
|
2980
3031
|
}
|
|
2981
3032
|
function McpKeys({ focused, onKey }) {
|
|
2982
|
-
|
|
3033
|
+
useInput5((event) => {
|
|
2983
3034
|
if (!focused) return;
|
|
2984
3035
|
if (event.ctrl && event.key === "x") {
|
|
2985
3036
|
onKey("remove");
|
|
@@ -3066,22 +3117,22 @@ function SteerMessage({ item, verbose, selected, focus }) {
|
|
|
3066
3117
|
return /* @__PURE__ */ jsx9(Message, { item, verbose, showLocked: true });
|
|
3067
3118
|
}
|
|
3068
3119
|
function DictationKeys({ input }) {
|
|
3069
|
-
|
|
3120
|
+
useInput6((event) => {
|
|
3070
3121
|
if (input.handle(event)) event.stopPropagation();
|
|
3071
3122
|
});
|
|
3072
3123
|
return null;
|
|
3073
3124
|
}
|
|
3074
3125
|
function MouseFocusRegion({ children, onPress, ...props }) {
|
|
3075
|
-
const hitTest =
|
|
3076
|
-
|
|
3126
|
+
const hitTest = useHitTest2();
|
|
3127
|
+
useMouse3((event) => {
|
|
3077
3128
|
if (event.action === "press" && event.button === "left" && hitTest(event.x, event.y)) onPress();
|
|
3078
3129
|
});
|
|
3079
3130
|
return /* @__PURE__ */ jsx9("box", { ...props, children });
|
|
3080
3131
|
}
|
|
3081
3132
|
function ComposerAction({ icon, activeIcon, active = false, onPress, onHover }) {
|
|
3082
|
-
const hitTest =
|
|
3083
|
-
const [hovered, setHovered] =
|
|
3084
|
-
|
|
3133
|
+
const hitTest = useHitTest2();
|
|
3134
|
+
const [hovered, setHovered] = createSignal9(false);
|
|
3135
|
+
useMouse3((event) => {
|
|
3085
3136
|
const inside = hitTest(event.x, event.y);
|
|
3086
3137
|
if (event.action === "move" && inside !== hovered()) {
|
|
3087
3138
|
setHovered(inside);
|
|
@@ -3096,9 +3147,9 @@ function ComposerAction({ icon, activeIcon, active = false, onPress, onHover })
|
|
|
3096
3147
|
return /* @__PURE__ */ jsx9("text", { style: { bg: highlighted ? accent() : void 0, color: highlighted ? "black" : MUTED }, children: ` ${highlighted ? activeIcon : icon} ` });
|
|
3097
3148
|
}
|
|
3098
3149
|
function AgentStripRow({ selected, focused, children, onPress }) {
|
|
3099
|
-
const hitTest =
|
|
3100
|
-
const [hovered, setHovered] =
|
|
3101
|
-
|
|
3150
|
+
const hitTest = useHitTest2();
|
|
3151
|
+
const [hovered, setHovered] = createSignal9(false);
|
|
3152
|
+
useMouse3((event) => {
|
|
3102
3153
|
const inside = hitTest(event.x, event.y);
|
|
3103
3154
|
if (event.action === "move") setHovered(inside);
|
|
3104
3155
|
if (inside && event.action === "press" && event.button === "left") {
|
|
@@ -3134,104 +3185,104 @@ function collapseSteerTools(items) {
|
|
|
3134
3185
|
function App({ boot: boot2, controller: ctl }) {
|
|
3135
3186
|
const { cwd, root, version: version2, skills, mcp } = boot2;
|
|
3136
3187
|
const state = ctl.state;
|
|
3137
|
-
const [models2, setModels] =
|
|
3138
|
-
const [refreshingModels, setRefreshingModels] =
|
|
3139
|
-
const [derived, setDerived] =
|
|
3140
|
-
const [terminalWidth, setTerminalWidth] =
|
|
3188
|
+
const [models2, setModels] = createSignal9(boot2.models);
|
|
3189
|
+
const [refreshingModels, setRefreshingModels] = createSignal9(false);
|
|
3190
|
+
const [derived, setDerived] = createSignal9(state.derived);
|
|
3191
|
+
const [terminalWidth, setTerminalWidth] = createSignal9(process.stdout.columns || 80);
|
|
3141
3192
|
useResize2(({ width: width2 }) => setTerminalWidth(width2));
|
|
3142
|
-
const [overlay, setOverlay] =
|
|
3143
|
-
const [streaming, setStreaming] =
|
|
3144
|
-
const [liveUsage, setLiveUsage] =
|
|
3145
|
-
const [turnPhase, setTurnPhase] =
|
|
3146
|
-
const [busy, setBusy] =
|
|
3147
|
-
const [compacting, setCompacting] =
|
|
3148
|
-
const [compactStatus, setCompactStatus] =
|
|
3149
|
-
const [startedAt, setStartedAt] =
|
|
3150
|
-
const [input, setInputValue] =
|
|
3193
|
+
const [overlay, setOverlay] = createSignal9(state.overlay);
|
|
3194
|
+
const [streaming, setStreaming] = createSignal9(state.streaming);
|
|
3195
|
+
const [liveUsage, setLiveUsage] = createSignal9(state.liveUsage);
|
|
3196
|
+
const [turnPhase, setTurnPhase] = createSignal9(state.turnPhase);
|
|
3197
|
+
const [busy, setBusy] = createSignal9(state.busy);
|
|
3198
|
+
const [compacting, setCompacting] = createSignal9(state.compacting);
|
|
3199
|
+
const [compactStatus, setCompactStatus] = createSignal9(state.compactStatus);
|
|
3200
|
+
const [startedAt, setStartedAt] = createSignal9(state.startedAt);
|
|
3201
|
+
const [input, setInputValue] = createSignal9("");
|
|
3151
3202
|
const composerFiles = boot2.refs.composerFiles ??= createComposerFiles();
|
|
3152
|
-
const [inputCursor, setInputCursor] =
|
|
3153
|
-
const [commandForm, setCommandForm] =
|
|
3203
|
+
const [inputCursor, setInputCursor] = createSignal9(0);
|
|
3204
|
+
const [commandForm, setCommandForm] = createSignal9(null);
|
|
3154
3205
|
const setInput = (text, cursor) => {
|
|
3155
3206
|
boot2.refs.draftRevision = (boot2.refs.draftRevision ?? 0) + 1;
|
|
3156
3207
|
const value = composerFiles.update(text, state.attachments);
|
|
3157
3208
|
setInputValue(value);
|
|
3158
3209
|
setInputCursor(cursor ?? value.length);
|
|
3159
3210
|
};
|
|
3160
|
-
const [dictationStatus, setDictationStatus] =
|
|
3161
|
-
const [dictationLevels, setDictationLevels] =
|
|
3162
|
-
const [captureStatus, setCaptureStatus] =
|
|
3163
|
-
const [composerActionLabel, setComposerActionLabel] =
|
|
3164
|
-
const [model, setModel] =
|
|
3165
|
-
const [defaultModel3, setDefaultModel] =
|
|
3166
|
-
const [effort, setEffort] =
|
|
3167
|
-
const [defaultEffort, setDefaultEffort] =
|
|
3168
|
-
const [showEffortPanel, setShowEffortPanel] =
|
|
3169
|
-
const [showThemePanel, setShowThemePanel] =
|
|
3170
|
-
const [showConfigPanel, setShowConfigPanel] =
|
|
3171
|
-
const [showDeleteConfirm, setShowDeleteConfirm] =
|
|
3172
|
-
const [clouds, setClouds] =
|
|
3173
|
-
const [compactToolHistory, setCompactToolHistory] =
|
|
3174
|
-
const [gitFooter, setGitFooter] =
|
|
3175
|
-
const [wideSidebar, setWideSidebar] =
|
|
3176
|
-
const [researchAgentLimit, setResearchAgentLimit] =
|
|
3177
|
-
const [questionRequest, setQuestionRequest] =
|
|
3178
|
-
const [showMemoryPanel, setShowMemoryPanel] =
|
|
3179
|
-
const [memScope, setMemScope] =
|
|
3180
|
-
const [memoryList, setMemoryList] =
|
|
3181
|
-
const [themePref, setThemePref] =
|
|
3182
|
-
const [queued, setQueued] =
|
|
3183
|
-
const [expedited, setExpedited] =
|
|
3184
|
-
const [sent, setSent] =
|
|
3185
|
-
const [histIdx, setHistIdx] =
|
|
3186
|
-
const [cmdIndex, setCmdIndex] =
|
|
3187
|
-
const [cmdCycle, setCmdCycle] =
|
|
3188
|
-
const [fileIndex, setFileIndex] =
|
|
3189
|
-
const [fileList, setFileList] =
|
|
3190
|
-
const [filesDismissed, setFilesDismissed] =
|
|
3191
|
-
const [view, setViewSignal] =
|
|
3192
|
-
const [verbose] =
|
|
3193
|
-
const [showModelPanel, setShowModelPanel] =
|
|
3194
|
-
const [showResearchModelPanel, setShowResearchModelPanel] =
|
|
3195
|
-
const [researchModelReturn, setResearchModelReturn] =
|
|
3196
|
-
const [selectingDeliberationModel, setSelectingDeliberationModel] =
|
|
3197
|
-
const [selectingShellModel, setSelectingShellModel] =
|
|
3198
|
-
const [participantModelTarget, setParticipantModelTarget] =
|
|
3199
|
-
const [pendingResearch, setPendingResearch] =
|
|
3200
|
-
const [pendingDeliberation, setPendingDeliberation] =
|
|
3201
|
-
const [agentsVersion, setAgentsVersion] =
|
|
3202
|
-
const [viewedAgentId, setViewedAgentId] =
|
|
3203
|
-
const [agentWindowOffset, setAgentWindowOffset] =
|
|
3204
|
-
const [showHistoryPanel, setShowHistoryPanel] =
|
|
3205
|
-
const [histScope, setHistScope] =
|
|
3206
|
-
const [histPrompts, setHistPrompts] =
|
|
3207
|
-
const [showResumePanel, setShowResumePanel] =
|
|
3208
|
-
const [resumeScopes, setResumeScopes] =
|
|
3209
|
-
const [resumeScope, setResumeScope] =
|
|
3210
|
-
const [resumeSessions, setResumeSessions] =
|
|
3211
|
-
const [resumeLoading, setResumeLoading] =
|
|
3212
|
-
const [showMcpPanel, setShowMcpPanel] =
|
|
3213
|
-
const [showProjectPanel, setShowProjectPanel] =
|
|
3214
|
-
const [infoPanel, setInfoPanel] =
|
|
3215
|
-
const [viewedShellId, setViewedShellId] =
|
|
3216
|
-
const [shellWindowOffset, setShellWindowOffset] =
|
|
3217
|
-
const [showWakeupsPanel, setShowWakeupsPanel] =
|
|
3218
|
-
const [showConnectPanel, setShowConnectPanel] =
|
|
3219
|
-
const [authProviders, setAuthProviders] =
|
|
3220
|
-
const [shellsVersion, setShellsVersion] =
|
|
3221
|
-
const [gitVersion, setGitVersion] =
|
|
3222
|
-
const [projects, setProjects] =
|
|
3223
|
-
const [projectsLoading, setProjectsLoading] =
|
|
3224
|
-
const [mcpServers, setMcpServers] =
|
|
3225
|
-
const [completing, setCompleting] =
|
|
3226
|
-
const [compIndex, setCompIndex] =
|
|
3227
|
-
const [rewindStep, setRewindStep] =
|
|
3228
|
-
const [rewindTarget, setRewindTarget] =
|
|
3229
|
-
const [offset, setOffset] =
|
|
3230
|
-
const [follow, setFollow] =
|
|
3231
|
-
const [histWindow, setHistWindow] =
|
|
3232
|
-
const [transcriptMetrics, setTranscriptMetrics] =
|
|
3233
|
-
const [steer, setSteer] =
|
|
3234
|
-
const [steerText, setSteerText] =
|
|
3211
|
+
const [dictationStatus, setDictationStatus] = createSignal9("idle");
|
|
3212
|
+
const [dictationLevels, setDictationLevels] = createSignal9([]);
|
|
3213
|
+
const [captureStatus, setCaptureStatus] = createSignal9("idle");
|
|
3214
|
+
const [composerActionLabel, setComposerActionLabel] = createSignal9("");
|
|
3215
|
+
const [model, setModel] = createSignal9(state.model);
|
|
3216
|
+
const [defaultModel3, setDefaultModel] = createSignal9(state.defaultModel);
|
|
3217
|
+
const [effort, setEffort] = createSignal9(state.effort);
|
|
3218
|
+
const [defaultEffort, setDefaultEffort] = createSignal9(state.defaultEffort);
|
|
3219
|
+
const [showEffortPanel, setShowEffortPanel] = createSignal9(false);
|
|
3220
|
+
const [showThemePanel, setShowThemePanel] = createSignal9(false);
|
|
3221
|
+
const [showConfigPanel, setShowConfigPanel] = createSignal9(false);
|
|
3222
|
+
const [showDeleteConfirm, setShowDeleteConfirm] = createSignal9(false);
|
|
3223
|
+
const [clouds, setClouds] = createSignal9(boot2.clouds);
|
|
3224
|
+
const [compactToolHistory, setCompactToolHistory] = createSignal9(boot2.compactToolHistory);
|
|
3225
|
+
const [gitFooter, setGitFooter] = createSignal9(boot2.gitFooter);
|
|
3226
|
+
const [wideSidebar, setWideSidebar] = createSignal9(boot2.wideSidebar);
|
|
3227
|
+
const [researchAgentLimit, setResearchAgentLimit] = createSignal9(boot2.researchAgentLimit);
|
|
3228
|
+
const [questionRequest, setQuestionRequest] = createSignal9(state.question);
|
|
3229
|
+
const [showMemoryPanel, setShowMemoryPanel] = createSignal9(false);
|
|
3230
|
+
const [memScope, setMemScope] = createSignal9(0);
|
|
3231
|
+
const [memoryList, setMemoryList] = createSignal9([]);
|
|
3232
|
+
const [themePref, setThemePref] = createSignal9(boot2.themePref || "auto");
|
|
3233
|
+
const [queued, setQueued] = createSignal9(state.queued);
|
|
3234
|
+
const [expedited, setExpedited] = createSignal9(state.expedited);
|
|
3235
|
+
const [sent, setSent] = createSignal9(state.sent);
|
|
3236
|
+
const [histIdx, setHistIdx] = createSignal9(-1);
|
|
3237
|
+
const [cmdIndex, setCmdIndex] = createSignal9(0);
|
|
3238
|
+
const [cmdCycle, setCmdCycle] = createSignal9(null);
|
|
3239
|
+
const [fileIndex, setFileIndex] = createSignal9(0);
|
|
3240
|
+
const [fileList, setFileList] = createSignal9([]);
|
|
3241
|
+
const [filesDismissed, setFilesDismissed] = createSignal9(false);
|
|
3242
|
+
const [view, setViewSignal] = createSignal9("chat");
|
|
3243
|
+
const [verbose] = createSignal9(false);
|
|
3244
|
+
const [showModelPanel, setShowModelPanel] = createSignal9(false);
|
|
3245
|
+
const [showResearchModelPanel, setShowResearchModelPanel] = createSignal9(false);
|
|
3246
|
+
const [researchModelReturn, setResearchModelReturn] = createSignal9(null);
|
|
3247
|
+
const [selectingDeliberationModel, setSelectingDeliberationModel] = createSignal9(false);
|
|
3248
|
+
const [selectingShellModel, setSelectingShellModel] = createSignal9(false);
|
|
3249
|
+
const [participantModelTarget, setParticipantModelTarget] = createSignal9(null);
|
|
3250
|
+
const [pendingResearch, setPendingResearch] = createSignal9(null);
|
|
3251
|
+
const [pendingDeliberation, setPendingDeliberation] = createSignal9(null);
|
|
3252
|
+
const [agentsVersion, setAgentsVersion] = createSignal9(state.activityVersion);
|
|
3253
|
+
const [viewedAgentId, setViewedAgentId] = createSignal9(null);
|
|
3254
|
+
const [agentWindowOffset, setAgentWindowOffset] = createSignal9(0);
|
|
3255
|
+
const [showHistoryPanel, setShowHistoryPanel] = createSignal9(false);
|
|
3256
|
+
const [histScope, setHistScope] = createSignal9(0);
|
|
3257
|
+
const [histPrompts, setHistPrompts] = createSignal9([]);
|
|
3258
|
+
const [showResumePanel, setShowResumePanel] = createSignal9(false);
|
|
3259
|
+
const [resumeScopes, setResumeScopes] = createSignal9(["repository", "everywhere"]);
|
|
3260
|
+
const [resumeScope, setResumeScope] = createSignal9(0);
|
|
3261
|
+
const [resumeSessions, setResumeSessions] = createSignal9([]);
|
|
3262
|
+
const [resumeLoading, setResumeLoading] = createSignal9(false);
|
|
3263
|
+
const [showMcpPanel, setShowMcpPanel] = createSignal9(false);
|
|
3264
|
+
const [showProjectPanel, setShowProjectPanel] = createSignal9(false);
|
|
3265
|
+
const [infoPanel, setInfoPanel] = createSignal9(null);
|
|
3266
|
+
const [viewedShellId, setViewedShellId] = createSignal9(null);
|
|
3267
|
+
const [shellWindowOffset, setShellWindowOffset] = createSignal9(0);
|
|
3268
|
+
const [showWakeupsPanel, setShowWakeupsPanel] = createSignal9(false);
|
|
3269
|
+
const [showConnectPanel, setShowConnectPanel] = createSignal9(false);
|
|
3270
|
+
const [authProviders, setAuthProviders] = createSignal9([]);
|
|
3271
|
+
const [shellsVersion, setShellsVersion] = createSignal9(0);
|
|
3272
|
+
const [gitVersion, setGitVersion] = createSignal9(0);
|
|
3273
|
+
const [projects, setProjects] = createSignal9([]);
|
|
3274
|
+
const [projectsLoading, setProjectsLoading] = createSignal9(false);
|
|
3275
|
+
const [mcpServers, setMcpServers] = createSignal9(mcp.list());
|
|
3276
|
+
const [completing, setCompleting] = createSignal9(false);
|
|
3277
|
+
const [compIndex, setCompIndex] = createSignal9(0);
|
|
3278
|
+
const [rewindStep, setRewindStep] = createSignal9(null);
|
|
3279
|
+
const [rewindTarget, setRewindTarget] = createSignal9(null);
|
|
3280
|
+
const [offset, setOffset] = createSignal9(0);
|
|
3281
|
+
const [follow, setFollow] = createSignal9(true);
|
|
3282
|
+
const [histWindow, setHistWindow] = createSignal9(HISTORY_WINDOW);
|
|
3283
|
+
const [transcriptMetrics, setTranscriptMetrics] = createSignal9(null);
|
|
3284
|
+
const [steer, setSteer] = createSignal9(null);
|
|
3285
|
+
const [steerText, setSteerText] = createSignal9("");
|
|
3235
3286
|
const refs = boot2.refs;
|
|
3236
3287
|
refs.quitAt ??= 0;
|
|
3237
3288
|
refs.resumeOpen ??= 0;
|
|
@@ -3242,7 +3293,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
3242
3293
|
const mirror = (get, set, value) => {
|
|
3243
3294
|
if (get() !== value) set(value);
|
|
3244
3295
|
};
|
|
3245
|
-
const [peerStatus, setPeerStatus] =
|
|
3296
|
+
const [peerStatus, setPeerStatus] = createSignal9("");
|
|
3246
3297
|
function syncFromController() {
|
|
3247
3298
|
setPeerStatus(state.peerError ? `peer disconnected: ${state.peerError}` : state.peerPaused && state.peerConnection ? "peer responses paused" : "");
|
|
3248
3299
|
mirror(derived, setDerived, state.derived);
|
|
@@ -4021,7 +4072,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4021
4072
|
event.stopPropagation();
|
|
4022
4073
|
return true;
|
|
4023
4074
|
}
|
|
4024
|
-
|
|
4075
|
+
useInput6(async (event) => {
|
|
4025
4076
|
if (refs.dictationInput.handle(event)) {
|
|
4026
4077
|
event.stopPropagation();
|
|
4027
4078
|
return;
|
|
@@ -4296,7 +4347,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4296
4347
|
const transcriptItems = groupItems(transcript, activeAgent?.status === "running");
|
|
4297
4348
|
const windowed = deliberationView ? { items: transcriptItems, hiddenItems: 0, hiddenCount: 0 } : transcriptWindow(transcriptItems, histWindow());
|
|
4298
4349
|
const hiddenCount = windowed.hiddenCount;
|
|
4299
|
-
const visibleItems = isolatedTranscript ? windowed.items : [...windowed.items, ...groupItems(overlay(), turnPhase() === "tools")];
|
|
4350
|
+
const visibleItems = isolatedTranscript ? windowed.items : [...windowed.items, ...groupItems(streamTranscript(overlay(), streaming() ? `${streaming()}\u258B` : null), turnPhase() === "tools")];
|
|
4300
4351
|
const preparedConversation = conversationSearch.prepare(visibleItems);
|
|
4301
4352
|
conversationSearchMatches = preparedConversation.matches;
|
|
4302
4353
|
const items = preparedConversation.items;
|
|
@@ -4450,11 +4501,12 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4450
4501
|
gitInfo?.removed > 0 && /* @__PURE__ */ jsx9("text", { style: { color: RED }, children: `-${gitInfo.removed}` })
|
|
4451
4502
|
] }),
|
|
4452
4503
|
transcript.length === 0 ? /* @__PURE__ */ jsx9("box", { style: { flexGrow: 1, dim: dimmingPanel() }, children: /* @__PURE__ */ jsx9(EmptyState, { version: version2, clouds: clouds() }) }) : /* @__PURE__ */ jsxs8("box", { style: { flexGrow: 1, flexDirection: "column" }, children: [
|
|
4504
|
+
deliberationView && items.filter((item) => item.kind === "user").map((item, i) => /* @__PURE__ */ jsx9("box", { style: { flexDirection: "column", paddingLeft: 2, paddingRight: 4, paddingBottom: 1, flexShrink: 0 }, children: /* @__PURE__ */ jsx9(Message, { item, verbose: verbose() }) }, `${transcriptSource}:prompt:${item.messageId || i}`)),
|
|
4453
4505
|
/* @__PURE__ */ jsxs8(
|
|
4454
|
-
|
|
4506
|
+
ScrollBox4,
|
|
4455
4507
|
{
|
|
4456
4508
|
style: { flexGrow: 1, dim: dimmingPanel() },
|
|
4457
|
-
focused: fm.is("feed") || fm.is("conversation-search"),
|
|
4509
|
+
focused: !deliberationView && (fm.is("feed") || fm.is("conversation-search")),
|
|
4458
4510
|
followFocus: steer() ? steerListFocus : null,
|
|
4459
4511
|
focusPadding: 1,
|
|
4460
4512
|
scrollOffset: follow() ? 1e9 : offset(),
|
|
@@ -4483,8 +4535,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4483
4535
|
/* @__PURE__ */ jsx9(ScrollAnchor, { target: conversationSearch.scroll }),
|
|
4484
4536
|
hiddenCount > 0 && /* @__PURE__ */ jsx9("box", { style: { paddingX: 2 }, children: /* @__PURE__ */ jsx9("text", { style: { color: MUTED, italic: true }, children: `\u2303 ${hiddenCount.toLocaleString()} older ${hiddenCount === 1 ? "message" : "messages"} scroll to top to load` }) }),
|
|
4485
4537
|
deliberationView ? /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
4486
|
-
items.filter((item) => item.kind === "
|
|
4487
|
-
/* @__PURE__ */ jsx9(DeliberationExchange, { turns: items.filter((item) => item.kind === "deliberation-turn"), verbose: verbose(), wide: terminalWidth() >= 110 }),
|
|
4538
|
+
/* @__PURE__ */ jsx9(DeliberationExchange, { turns: items.filter((item) => item.kind === "deliberation-turn"), verbose: verbose(), wide: terminalWidth() >= 110, compactToolHistory: compactToolHistory(), viewportHeight: transcriptMetrics()?.visibleHeight, focused: fm.is("feed"), onFocus: () => fm.focus("feed") }),
|
|
4488
4539
|
items.filter((item) => item.kind !== "user" && item.kind !== "deliberation-turn").map((item, i) => /* @__PURE__ */ jsx9(Message, { item, verbose: verbose() }, `${transcriptSource}:tail:${item.messageId || item.callId || i}`))
|
|
4489
4540
|
] }) : items.map((item, i) => steer() && item.messageId ? /* @__PURE__ */ jsx9(
|
|
4490
4541
|
SteerMessage,
|
|
@@ -4504,8 +4555,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4504
4555
|
search: conversationSearch
|
|
4505
4556
|
},
|
|
4506
4557
|
`${transcriptSource}:${item.messageId || item.callId || hiddenCount + i}`
|
|
4507
|
-
))
|
|
4508
|
-
!isolatedTranscript && streaming() !== null && streaming() !== "" && /* @__PURE__ */ jsx9(Message, { item: { kind: "assistant", text: `${streaming()}\u258B` } }, "streaming")
|
|
4558
|
+
))
|
|
4509
4559
|
]
|
|
4510
4560
|
}
|
|
4511
4561
|
),
|
|
@@ -5306,4 +5356,4 @@ var controller = createController({ boot });
|
|
|
5306
5356
|
var app = mount(() => /* @__PURE__ */ jsx10(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
|
|
5307
5357
|
boot.setTheme = app.setTheme;
|
|
5308
5358
|
boot.mcp.connectAll();
|
|
5309
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS9hcHAuanN4IiwgIi4uL3NyYy91aS9jb21wb3Nlci1jb21tYW5kcy5qcyIsICIuLi9zcmMvdWkvY29tbWFuZC1mb3JtLmpzeCIsICIuLi9zcmMvdWkvdGhlbWUuanMiLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvY29udGV4dC1iYXIuanMiLCAiLi4vc3JjL3VpL2FuaW1hdGVkLXZhbHVlLmpzeCIsICIuLi9zcmMvdWkvdHJhbnNjcmlwdC5qc3giLCAiLi4vc3JjL3VpL2NvbnZlcnNhdGlvbi1zZWFyY2gtdmlldy5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQtd2luZG93LmpzIiwgIi4uL3NyYy91aS9xdWVzdGlvbi1mb3JtLmpzeCIsICIuLi9zcmMvdWkvZW1wdHktc3RhdGUuanN4IiwgIi4uL3NyYy91aS9oZWxwLmpzeCIsICIuLi9zcmMvdWkvcGFuZWxzLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGlzY292ZXJLZXlzLCBhcHBseUtleXMsIGtleUhpbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2tleXMuanMnXG5pbXBvcnQgeyBsb2FkQ2F0YWxvZywgZXh0cmFjdE1vZGVscywgYWRob2NNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY2F0YWxvZy5qcydcbmltcG9ydCB7IGxvYWRDb2RleE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29kZXgtbW9kZWxzLmpzJ1xuaW1wb3J0IHsgbG9hZE9wZW5Sb3V0ZXJNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5yb3V0ZXItbW9kZWxzLmpzJ1xuaW1wb3J0IHsgb3BlbmFpQ29ubmVjdGVkLCBvcGVuYWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuXG5jb25zdCBDQVRBTE9HX1BST1ZJREVSUyA9IFsnZ29vZ2xlJywgJ2FudGhyb3BpYycsICdvcGVuYWknLCAneGFpJ11cblxuZnVuY3Rpb24gY29kZXhDb250ZXh0KGNhdGFsb2dEYXRhLCBtb2RlbCkge1xuICBjb25zdCBlbnRyeSA9IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbW9kZWwubmFtZS5zcGxpdCgnLycpWzFdXVxuICByZXR1cm4gbW9kZWwuY29udGV4dCA/PyBlbnRyeT8ubGltaXQ/LmlucHV0ID8/IGVudHJ5Py5saW1pdD8uY29udGV4dCA/PyBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTW9kZWxzKHsgcHJvdmlkZXJzLCBmb3JjZSB9KSB7XG4gIGNvbnN0IGhhcyA9IChwcm92aWRlcikgPT4gcHJvdmlkZXJzLmluY2x1ZGVzKHByb3ZpZGVyKVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gaGFzKCdjb2RleCcpID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgW2NhdGFsb2dEYXRhLCBjb2RleCwgb3BlbnJvdXRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZENhdGFsb2coeyBmb3JjZSB9KSxcbiAgICBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkZW50aWFscywgeyBmb3JjZSB9KSxcbiAgICBoYXMoJ29wZW5yb3V0ZXInKSA/IGxvYWRPcGVuUm91dGVyTW9kZWxzKHsgZm9yY2UgfSkgOiBbXSxcbiAgXSlcbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBDQVRBTE9HX1BST1ZJREVSUykubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgYXZhaWxhYmxlOiBoYXMobW9kZWwucHJvdmlkZXIpLFxuICAgICAga2V5SGludDoga2V5SGludChtb2RlbC5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLmNvZGV4Lm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGNvbnRleHQ6IGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpLFxuICAgICAgYXZhaWxhYmxlOiBoYXMoJ2NvZGV4JyksXG4gICAgICBrZXlIaW50OiAnL2Nvbm5lY3QnLFxuICAgIH0pKSxcbiAgICAuLi5vcGVucm91dGVyLm1hcCgobW9kZWwpID0+ICh7IC4uLm1vZGVsLCBhdmFpbGFibGU6IHRydWUsIGtleUhpbnQ6IGtleUhpbnQoJ29wZW5yb3V0ZXInKSB9KSksXG4gIF1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbFJ1bnRpbWUoKSB7XG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGNvbnN0IGNvZGV4Q3JlZGVudGlhbHMgPSBjaGF0Z3B0ID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgbG9hZE1vZGVscyA9ICh7IGZvcmNlID0gZmFsc2UgfSA9IHt9KSA9PiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSlcbiAgcmV0dXJuIHsgcHJvdmlkZXJzLCBtb2RlbHM6IGF3YWl0IGxvYWRNb2RlbHMoKSwgY29kZXhDcmVkZW50aWFscywgbG9hZE1vZGVscyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBhdmFpbGFibGUgPSBtb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gbW9kZWwuYXZhaWxhYmxlICE9PSBmYWxzZSlcbiAgcmV0dXJuIGF2YWlsYWJsZVxuICAgICAgLm1hcCgobW9kZWwpID0+IFtmdXp6eVNjb3JlKG5hbWUsIG1vZGVsLm5hbWUpLCBtb2RlbF0pXG4gICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVswXT8uWzFdXG4gICAgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkLCBjb25maWd1cmVkIH0pIHtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkKVxuICAgIHx8IChjb25maWd1cmVkICYmIG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gY29uZmlndXJlZCAmJiBtb2RlbC5hdmFpbGFibGUpKVxuICAgIHx8IGRlZmF1bHRNb2RlbChtb2RlbHMpXG59XG4iLCAiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGZpbmRNb2RlbCwgdXNhZ2VDb3N0IH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBidWlsZFByb2plY3RCb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9ib290LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2hlbGxNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS9zaGVsbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVTZXNzaW9uLCBvcGVuU2Vzc2lvbiwgbG9hZFNlc3Npb24sIG9uU2Vzc2lvbldyaXRlRXJyb3IgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyBzZXNzaW9uc0RpciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGRlcml2ZVN0YXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBjcmVhdGVUb29sc2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9pbmRleC5qcydcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgYnVpbGRTeXN0ZW1Qcm9tcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N5c3RlbS1wcm9tcHQuanMnXG5pbXBvcnQgeyBtZW1vcnlJbmRleCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWVtb3J5LmpzJ1xuaW1wb3J0IHsgZmluYWxpemVVc2VyQ29udGVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCkge1xuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkgcmV0dXJuICcnXG4gIGxldCBkYXRhID0gJydcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBwcm9jZXNzLnN0ZGluKSB7XG4gICAgZGF0YSArPSBjaHVua1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDQwMDAwMCkgYnJlYWtcbiAgfVxuICByZXR1cm4gZGF0YS5zbGljZSgwLCA0MDAwMDApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5IZWFkbGVzcyhvcHRzKSB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KClcbiAgY29uc3QgbG9nID0gb3B0cy5xdWlldCA/ICgpID0+IHt9IDogKGxpbmUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGxpbmUgKyAnXFxuJylcblxuICBvblNlc3Npb25Xcml0ZUVycm9yKChlcnIsIGZpbGUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBjb3VsZCBub3Qgd3JpdGUgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1cXG5gKSlcblxuICBjb25zdCB7IHByb3ZpZGVycywgbW9kZWxzLCBjb2RleENyZWRlbnRpYWxzOiBjb2RleENyZWRzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLCBjb25maWd1cmVkOiBjb25maWcuZGVmYXVsdE1vZGVsIH0pXG4gIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBubyB1c2FibGUgbW9kZWwke29wdHMubW9kZWwgPyBgIG1hdGNoaW5nIFwiJHtvcHRzLm1vZGVsfVwiYCA6ICcnfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBlZmZvcnQgPSBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2F1dG8nIDogbnVsbClcblxuICBjb25zdCBib290ID0gYXdhaXQgYnVpbGRQcm9qZWN0Qm9vdChwcm9jZXNzLmN3ZCgpKVxuICBhd2FpdCBQcm9taXNlLnJhY2UoW2Jvb3QubWNwLmNvbm5lY3RBbGwoKSwgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMDApKV0pXG4gIGNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcigpXG5cbiAgbGV0IHNlc3Npb25cbiAgbGV0IGV2ZW50cyA9IFtdXG4gIGlmIChvcHRzLnJlc3VtZSkge1xuICAgIGNvbnN0IGZpbGUgPSBvcHRzLnJlc3VtZS5pbmNsdWRlcygnLycpID8gb3B0cy5yZXN1bWUgOiBqb2luKHNlc3Npb25zRGlyKGJvb3Qucm9vdCksIGAke29wdHMucmVzdW1lfS5qc29ubGApXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZFNlc3Npb24oZmlsZSlcbiAgICBzZXNzaW9uID0gb3BlblNlc3Npb24oeyBmaWxlLCBoZWFkZXI6IGxvYWRlZC5oZWFkZXIgfSlcbiAgICBldmVudHMgPSBsb2FkZWQuZXZlbnRzXG4gIH0gZWxzZSB7XG4gICAgc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oeyBjd2Q6IGJvb3QuY3dkLCByb290OiBib290LnJvb3QgfSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3QgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudHMucHVzaChldmVudClcbiAgICBzZXNzaW9uLmFwcGVuZChldmVudClcbiAgICBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShldmVudCkgKyAnXFxuJylcbiAgfVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke2VmZm9ydCA/IGAgICR7ZWZmb3J0fWAgOiAnJ30gIHNlc3Npb24gJHtzZXNzaW9uLmlkfWApXG4gIGxldCB0aG91Z2h0cyA9ICcnXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blR1cm4oe1xuICAgIGhpc3Rvcnk6IGRlcml2ZWQucHJvdmlkZXJIaXN0b3J5LFxuICAgIHRvb2xzLFxuICAgIHJlY29yZGVyLFxuICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICBlZmZvcnQsXG4gICAgYXV0aCxcbiAgICBzeXN0ZW06IGJ1aWxkU3lzdGVtUHJvbXB0KHtcbiAgICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgICBjb250ZXh0RmlsZXM6IGJvb3Quc3RhcnR1cENvbnRleHQuZmlsZXMsXG4gICAgICBza2lsbHM6IGJvb3Quc2tpbGxzLmxpc3QoKSxcbiAgICAgIG1lbW9yeUluZGV4VGV4dDogbWVtb3J5SW5kZXgoYXdhaXQgYm9vdC5tZW1vcnkubGlzdCgpLmNhdGNoKCgpID0+IFtdKSwgYm9vdC5yb290KSxcbiAgICB9KSxcbiAgICBvblN0cmVhbTogKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RoaW5raW5nJykgdGhvdWdodHMgKz0gZXZlbnQuY29udGVudFxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2NvbXBsZXRlJykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlY29yZGVyLmVudHJpZXMuYXQoLTEpXG4gICAgICAgIGxvZyhgICBcdTI3MTMgJHtlbnRyeT8ubmFtZSA/PyBldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2VudHJ5Py50aXRsZSA/PyAnJ31gKVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2Vycm9yJykgbG9nKGAgIFx1MjcxNyAke2V2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZXZlbnQuZXJyb3Iuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKHRob3VnaHRzKSBwZXJzaXN0KG1ha2VFdmVudCgndGhvdWdodHMnLCB7IHRleHQ6IHRob3VnaHRzIH0pKVxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcmVzdWx0Lm1lc3NhZ2VzKSBwZXJzaXN0KG1ha2VFdmVudCgnbWVzc2FnZScsIHsgbWVzc2FnZSB9KSlcbiAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRlci5lbnRyaWVzKSBwZXJzaXN0KG1ha2VFdmVudCgndG9vbF9tZXRhJywgZW50cnkpKVxuICBmb3IgKGNvbnN0IHBhdGggb2YgYm9vdC50cmFja2VyLmxvYWRlZCkge1xuICAgIGlmICghbG9hZGVkQmVmb3JlLmhhcyhwYXRoKSkgcGVyc2lzdChtYWtlRXZlbnQoJ2NvbnRleHRfZmlsZScsIHsgcGF0aCB9KSlcbiAgfVxuICBpZiAocmVzdWx0LnVzYWdlKSBwZXJzaXN0KG1ha2VFdmVudCgndXNhZ2UnLCB7IG1vZGVsOiBtb2RlbC5uYW1lLCB1c2FnZTogcmVzdWx0LnVzYWdlLCBsYXN0UHJvbXB0OiByZXN1bHQubGFzdFByb21wdFRva2VucyB9KSlcbiAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgcGVyc2lzdChtYWtlRXZlbnQoJ2ludGVycnVwdCcsIHt9KSlcblxuICBjb25zdCBydW5uaW5nID0gc2hlbGxzLnJ1bm5pbmcoKVxuICBpZiAocnVubmluZyA+IDApIGxvZyhgICBraWxsaW5nICR7cnVubmluZ30gYmFja2dyb3VuZCBzaGVsbCR7cnVubmluZyA9PT0gMSA/ICcnIDogJ3MnfWApXG4gIHNoZWxscy5raWxsQWxsKClcbiAgYXdhaXQgYm9vdC5tY3AuY2xvc2VBbGwoKS5jYXRjaCgoKSA9PiB7fSlcbiAgLy8gdGhlIGNhbGxlciBleGl0cyB0aGUgcHJvY2VzcyB0aGUgbW9tZW50IHRoaXMgcmV0dXJucywgd2hpY2ggd291bGQgZGlzY2FyZFxuICAvLyBldmVyeSBhcHBlbmQgc3RpbGwgaW4gZmxpZ2h0XG4gIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuXG4gIGNvbnN0IHRleHQgPSByZXN1bHQubWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmIG0uY29udGVudCkuYXQoLTEpPy5jb250ZW50ID8/ICcnXG4gIGNvbnN0IHN1bW1hcnkgPSB7XG4gICAgdGV4dCxcbiAgICBzZXNzaW9uOiBzZXNzaW9uLmlkLFxuICAgIHNlc3Npb25GaWxlOiBzZXNzaW9uLmZpbGUsXG4gICAgbW9kZWw6IG1vZGVsLm5hbWUsXG4gICAgdXNhZ2U6IHJlc3VsdC51c2FnZSxcbiAgICBjb3N0OiB1c2FnZUNvc3QoZmluZE1vZGVsKG1vZGVscywgbW9kZWwubmFtZSksIHJlc3VsdC51c2FnZSksXG4gICAgdG9vbENhbGxzOiByZWNvcmRlci5lbnRyaWVzLmxlbmd0aCxcbiAgICBpbnRlcnJ1cHRlZDogcmVzdWx0LmludGVycnVwdGVkLFxuICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gIH1cblxuICBpZiAob3B0cy5qc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShzdW1tYXJ5KSArICdcXG4nKVxuICBlbHNlIGlmIChvcHRzLnN0cmVhbUpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3Jlc3VsdCcsIC4uLnN1bW1hcnksIHRleHQ6IHVuZGVmaW5lZCwgYXQ6IERhdGUubm93KCkgfSkgKyAnXFxuJylcbiAgZWxzZSBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXh0ICsgJ1xcbicpXG5cbiAgcmV0dXJuIHJlc3VsdC5pbnRlcnJ1cHRlZCA/IDEgOiAwXG59XG4iLCAiaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUsIHNlbGVjdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuXG5jb25zdCBTWVNURU0gPSAoeyBwbGF0Zm9ybSwgc2hlbGwsIGN3ZCB9KSA9PiBgR2VuZXJhdGUgZXhhY3RseSBvbmUgc2hlbGwgY29tbWFuZCB0aGF0IHNhdGlzZmllcyB0aGUgdXNlcidzIHJlcXVlc3QuIFRoZSBvdXRwdXQgbXVzdCBiZSBhIHZhbGlkIHNoZWxsIGNvbW1hbmQgd2l0aG91dCBNYXJrZG93biBmb3JtYXR0aW5nLiBJZiBtdWx0aXBsZSBzdGVwcyBhcmUgcmVxdWlyZWQsIHRyeSB0byBjb21iaW5lIHRoZW0gdG9nZXRoZXIgdXNpbmcgJiYuXG5cbkVudmlyb25tZW50OlxuLSBvcGVyYXRpbmcgc3lzdGVtOiAke3BsYXRmb3JtfVxuLSBzaGVsbDogJHtzaGVsbH1cbi0gY3VycmVudCBkaXJlY3Rvcnk6ICR7Y3dkfVxuXG5PdXRwdXQgb25seSB0aGUgY29tbWFuZCBhcyBvbmUgbGluZS4gRG8gbm90IHVzZSBNYXJrZG93biBmb3JtYXR0aW5nIHN1Y2ggYXMgXFxgXFxgXFxgLiBEbyBub3QgZXhwbGFpbiB0aGUgY29tbWFuZC4gRG8gbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQuYFxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSB7XG4gIGNvbnN0IGNvbW1hbmQgPSB0ZXh0LnRyaW0oKVxuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIGFuIGVtcHR5IGNvbW1hbmQnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnXFwwJykgfHwgL1tcXHJcXG5dLy50ZXN0KGNvbW1hbmQpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGxpbmUnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnYGBgJykpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIE1hcmtkb3duIGluc3RlYWQgb2YgYSBjb21tYW5kJylcbiAgcmV0dXJuIGNvbW1hbmRcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNoZWxsKG9wdHMsIGRlcGVuZGVuY2llcyA9IHt9KSB7XG4gIGNvbnN0IHN0ZGVyciA9IGRlcGVuZGVuY2llcy5zdGRlcnIgfHwgcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3Qgc3Rkb3V0ID0gZGVwZW5kZW5jaWVzLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IChkZXBlbmRlbmNpZXMucmVhZENvbmZpZyB8fCByZWFkQ29uZmlnKSgpXG4gICAgY29uc3QgcnVudGltZSA9IGF3YWl0IChkZXBlbmRlbmNpZXMubG9hZE1vZGVsUnVudGltZSB8fCBsb2FkTW9kZWxSdW50aW1lKSgpXG4gICAgaWYgKHJ1bnRpbWUucHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdubyBjcmVkZW50aWFscyBmb3VuZCAoc2V0IGEgcHJvdmlkZXIga2V5IG9yIHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgY29uZmlndXJlZE1vZGVsID0gY29uZmlnLm1vZGVscz8uc2hlbGxcbiAgICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHtcbiAgICAgIG1vZGVsczogcnVudGltZS5tb2RlbHMsXG4gICAgICBwcm92aWRlcnM6IHJ1bnRpbWUucHJvdmlkZXJzLFxuICAgICAgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLFxuICAgICAgY29uZmlndXJlZDogY29uZmlndXJlZE1vZGVsIHx8IGNvbmZpZy5kZWZhdWx0TW9kZWwsXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0ZWROYW1lID0gb3B0cy5tb2RlbCB8fCBjb25maWd1cmVkTW9kZWxcbiAgICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdXNhYmxlIG1vZGVsJHtyZXF1ZXN0ZWROYW1lID8gYCBtYXRjaGluZyBcIiR7cmVxdWVzdGVkTmFtZX1cImAgOiAnJ31gKVxuICAgIH1cblxuICAgIGNvbnN0IGF1dGggPSBtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyA/IHJ1bnRpbWUuY29kZXhDcmVkZW50aWFscyA6IG51bGxcbiAgICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgIWF1dGgpIHRocm93IG5ldyBFcnJvcignY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGRlcGVuZGVuY2llcy5ydW5UdXJuIHx8IHJ1blR1cm4pKHtcbiAgICAgIGhpc3Rvcnk6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogb3B0cy5wcm9tcHQgfV0sXG4gICAgICB0b29sczogW10sXG4gICAgICByZWNvcmRlcjogbnVsbCxcbiAgICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICAgIGVmZm9ydDogb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdsb3cnIDogbnVsbCksXG4gICAgICBhdXRoLFxuICAgICAgc3lzdGVtOiBTWVNURU0oe1xuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyAnbWFjT1MnIDogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgc2hlbGw6IGJhc2VuYW1lKHByb2Nlc3MuZW52LlNIRUxMIHx8ICd6c2gnKSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgfSksXG4gICAgfSlcbiAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKVxuICAgIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHRocm93IG5ldyBFcnJvcignY29tbWFuZCBnZW5lcmF0aW9uIHdhcyBpbnRlcnJ1cHRlZCcpXG4gICAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlc1xuICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJylcbiAgICAgIC5hdCgtMSk/LmNvbnRlbnQgfHwgJydcbiAgICBzdGRvdXQud3JpdGUoY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSArICdcXG4nKVxuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RkZXJyLndyaXRlKGBwaWNvOiAke2Vycm9yLm1lc3NhZ2V9XFxuYClcbiAgICByZXR1cm4gMVxuICB9XG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IG1vdW50IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBVU0FHRSB9IGZyb20gJy4vY2xpLWFyZ3MuanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBkZXRlY3RUZXJtaW5hbFRoZW1lIH0gZnJvbSAncGljb2NvZGUtY29yZS90ZXJtaW5hbC10aGVtZS5qcydcbmltcG9ydCB7IGJ1aWxkUHJvamVjdEJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Jvb3QuanMnXG5pbXBvcnQgeyBjcmVhdGVTaGVsbE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NoZWxscy5qcydcbmltcG9ydCB7IGNyZWF0ZVdha2V1cE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dha2V1cHMuanMnXG5pbXBvcnQgeyBjcmVhdGVHaXRTZXJ2aWNlIH0gZnJvbSAncGljb2NvZGUtY29yZS9naXQuanMnXG5pbXBvcnQgeyBjcmVhdGVDb250cm9sbGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzLCBtb2RlbHMsIGxvYWRNb2RlbHMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5sZXQgbWNwTm90aWZ5ID0gKCkgPT4ge31cbmxldCBzaGVsbHNOb3RpZnkgPSAoKSA9PiB7fVxubGV0IHNoZWxsc0V4aXQgPSAoKSA9PiB7fVxuY29uc3Qgc2hlbGxzID0gY3JlYXRlU2hlbGxNYW5hZ2VyKHtcbiAgb25DaGFuZ2U6ICgpID0+IHNoZWxsc05vdGlmeSgpLFxuICBvbkV4aXQ6IChzaGVsbCkgPT4gc2hlbGxzRXhpdChzaGVsbCksXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHNoZWxscy5raWxsQWxsKCkpXG5cbmxldCB3YWtldXBzTm90aWZ5ID0gKCkgPT4ge31cbmxldCB3YWtldXBzRmlyZSA9ICgpID0+IHt9XG5jb25zdCB3YWtldXBzID0gY3JlYXRlV2FrZXVwTWFuYWdlcih7XG4gIG9uQ2hhbmdlOiAoKSA9PiB3YWtldXBzTm90aWZ5KCksXG4gIG9uRmlyZTogKHdha2V1cCkgPT4gd2FrZXVwc0ZpcmUod2FrZXVwKSxcbn0pXG5cbmxldCBnaXROb3RpZnkgPSAoKSA9PiB7fVxuY29uc3QgZ2l0ID0gY3JlYXRlR2l0U2VydmljZSh7IG9uQ2hhbmdlOiAoKSA9PiBnaXROb3RpZnkoKSB9KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGdpdC5kaXNwb3NlKCkpXG5cbmNvbnN0IGJvb3RQcm9qZWN0ID0gKGN3ZCkgPT4gYnVpbGRQcm9qZWN0Qm9vdChjd2QsIHsgb25NY3BDaGFuZ2U6ICgpID0+IG1jcE5vdGlmeSgpIH0pXG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuY29uc3QgY29uZmlndXJlZERlZmF1bHQgPSBjb25maWcuZGVmYXVsdE1vZGVsICYmIG1vZGVscy5maW5kKChtKSA9PiBtLm5hbWUgPT09IGNvbmZpZy5kZWZhdWx0TW9kZWwpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgYm9vdCA9IHtcbiAgLi4uKGF3YWl0IGJvb3RQcm9qZWN0KHByb2Nlc3MuY3dkKCkpKSxcbiAgdGhlbWUsXG4gIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICBtb2RlbHMsXG4gIHByb3ZpZGVycyxcbiAgaW5pdGlhbE1vZGVsOiBjb25maWd1cmVkRGVmYXVsdCB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKSxcbiAgcmVzZWFyY2hNb2RlbDogY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgc2hlbGxNb2RlbDogY29uZmlnLm1vZGVscz8uc2hlbGwgfHwgbnVsbCxcbiAgcGFydGljaXBhbnRBTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnBhcnRpY2lwYW50QSB8fCBudWxsLFxuICBwYXJ0aWNpcGFudEJNb2RlbDogY29uZmlnLm1vZGVscz8ucGFydGljaXBhbnRCIHx8IG51bGwsXG4gIGRlbGliZXJhdGlvbk1vZGVsOiBjb25maWcubW9kZWxzPy5kZWxpYmVyYXRpb24gfHwgY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgcmVzZWFyY2hBZ2VudExpbWl0OiBOdW1iZXIuaXNJbnRlZ2VyKGNvbmZpZy5yZXNlYXJjaD8uYWdlbnRMaW1pdCkgJiYgY29uZmlnLnJlc2VhcmNoLmFnZW50TGltaXQgPj0gMSAmJiBjb25maWcucmVzZWFyY2guYWdlbnRMaW1pdCA8PSAxMDBcbiAgICA/IGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0XG4gICAgOiAxMCxcbiAgZGV0ZWN0ZWRUaGVtZSxcbiAgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyxcbiAgaW5pdGlhbEVmZm9ydDogWydsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMoY29uZmlnLmRlZmF1bHRFZmZvcnQpID8gY29uZmlnLmRlZmF1bHRFZmZvcnQgOiBudWxsLFxuICBhdXRvQ29tcGFjdDogY29uZmlnLmF1dG9Db21wYWN0ICE9PSBmYWxzZSxcbiAgY2xvdWRzOiBjb25maWcuYW5pbWF0aW9uPy5jbG91ZHMgPT09IHRydWUsXG4gIGNvbXBhY3RUb29sSGlzdG9yeTogY29uZmlnLmRpc3BsYXk/LmNvbXBhY3RUb29sSGlzdG9yeSA9PT0gdHJ1ZSxcbiAgZ2l0Rm9vdGVyOiBjb25maWcuZGlzcGxheT8uZ2l0U3RhdHVzICE9PSBmYWxzZSxcbiAgd2lkZVNpZGViYXI6IGNvbmZpZy5kaXNwbGF5Py53aWRlU2lkZWJhciAhPT0gZmFsc2UsXG4gIHJlZnM6IHt9LFxuICBzaGVsbHMsXG4gIHdha2V1cHMsXG4gIGdpdCxcbiAgc2V0TWNwTm90aWZ5OiAoZm4pID0+IHsgbWNwTm90aWZ5ID0gZm4gfSxcbiAgc2V0R2l0Tm90aWZ5OiAoZm4pID0+IHsgZ2l0Tm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzTm90aWZ5OiAoZm4pID0+IHsgc2hlbGxzTm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzRXhpdDogKGZuKSA9PiB7IHNoZWxsc0V4aXQgPSBmbiB9LFxuICBzZXRXYWtldXBzTm90aWZ5OiAoZm4pID0+IHsgd2FrZXVwc05vdGlmeSA9IGZuIH0sXG4gIHNldFdha2V1cHNGaXJlOiAoZm4pID0+IHsgd2FrZXVwc0ZpcmUgPSBmbiB9LFxuICByZWJ1aWxkOiBib290UHJvamVjdCxcbiAgcmVmcmVzaE1vZGVsczogKCkgPT4gbG9hZE1vZGVscyh7IGZvcmNlOiB0cnVlIH0pLFxufVxuXG5naXQucmV0YXJnZXQoYm9vdC5yb290KVxuZ2l0LnNldEVuYWJsZWQoYm9vdC5naXRGb290ZXIpXG5cbmNvbnN0IGNvbnRyb2xsZXIgPSBjcmVhdGVDb250cm9sbGVyKHsgYm9vdCB9KVxuY29uc3QgYXBwID0gbW91bnQoKCkgPT4gPEFwcCBib290PXtib290fSBjb250cm9sbGVyPXtjb250cm9sbGVyfSAvPiwgeyB0aXRsZTogYHBpY28gICR7Ym9vdC5yb290LnNwbGl0KCcvJykucG9wKCl9YCwgdGhlbWUgfSlcbmJvb3Quc2V0VGhlbWUgPSBhcHAuc2V0VGhlbWVcbmJvb3QubWNwLmNvbm5lY3RBbGwoKVxuIiwgImV4cG9ydCBjb25zdCBVU0FHRSA9IGBwaWNvIC0gYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbFxuXG51c2FnZTpcbiAgcGljbyAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgcGljbyAtcCBcInByb21wdFwiICAgICAgICAgICBoZWFkbGVzczogcnVuIG9uZSBhZ2VudGljIHR1cm4sIHByaW50IHRoZSBhbnN3ZXJcbiAgcGljbyAtcyBcInJlcXVlc3RcIiAgICAgICAgICBnZW5lcmF0ZSBvbmUgc2hlbGwgY29tbWFuZCwgd2l0aG91dCBydW5uaW5nIGl0XG4gIGNhdCBsb2cgfCBwaWNvIC1wIFwiLi4uXCIgICAgc3RkaW4gaXMgYXBwZW5kZWQgdG8gdGhlIHByb21wdCBhcyBjb250ZXh0XG5cbmNvbW1hbmQgZmxhZ3M6XG4gIC1wLCAtLXByaW50IDxwcm9tcHQ+ICAgICAgIHJ1biBvbmUgYWdlbnRpYyB0dXJuIGFuZCBwcmludCB0aGUgYW5zd2VyXG4gIC1zLCAtLXNoZWxsIDxyZXF1ZXN0PiAgICAgIHByaW50IG9uZSBnZW5lcmF0ZWQgc2hlbGwgY29tbWFuZFxuICAtLWpzb24gICAgICAgICAgICAgICAgICAgICBwcmludCBhIHNpbmdsZSBKU09OIHJlc3VsdCBvYmplY3QgdG8gc3Rkb3V0XG4gIC0tc3RyZWFtLWpzb24gICAgICAgICAgICAgIHN0cmVhbSBzZXNzaW9uIGV2ZW50cyB0byBzdGRvdXQgYXMganNvbmxcbiAgLW0sIC0tbW9kZWwgPG5hbWU+ICAgICAgICAgbW9kZWwgdG8gdXNlIChmdXp6eSBtYXRjaGVkLCBvciByYXcgcHJvdmlkZXIvbW9kZWwpXG4gIC0tZWZmb3J0IDxsZXZlbD4gICAgICAgICAgIHRoaW5raW5nIGVmZm9ydDogYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4XG4gIC0tcmVzdW1lIDxzZXNzaW9uLWlkPiAgICAgIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHNlc3Npb24gZnJvbSB0aGlzIHByb2plY3RcbiAgLS1tYXgtdG9vbC1jYWxscyA8bj4gICAgICAgc3RvcCB0aGUgYWdlbnQgYWZ0ZXIgbiB0b29sIGNhbGxzIChkZWZhdWx0IDUwKVxuICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBubyBwcm9ncmVzcyBvdXRwdXQgb24gc3RkZXJyXG5cbiAgLS1jb25uZWN0ICAgICAgICAgICAgICAgICAgc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuIChPQXV0aCBpbiB5b3VyIGJyb3dzZXIpXG4gIHVwZGF0ZSwgLS11cGRhdGUgICAgICAgICAgIHVwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbVxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscFxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBzaG93IHZlcnNpb25gXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJndikge1xuICBjb25zdCBvcHRzID0geyBtb2RlOiAnaW50ZXJhY3RpdmUnIH1cbiAgY29uc3QgdGFrZVZhbHVlID0gKG5hbWUsIGkpID0+IHtcbiAgICBpZiAoaSArIDEgPj0gYXJndi5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSByZXF1aXJlcyBhIHZhbHVlYClcbiAgICByZXR1cm4gYXJndltpICsgMV1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV1cbiAgICBpZiAoYXJnID09PSAnLXAnIHx8IGFyZyA9PT0gJy0tcHJpbnQnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnaGVhZGxlc3MnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy1zJyB8fCBhcmcgPT09ICctLXNoZWxsJykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ3NoZWxsJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWpzb24nKSBvcHRzLmpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLS1zdHJlYW0tanNvbicpIG9wdHMuc3RyZWFtSnNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctbScgfHwgYXJnID09PSAnLS1tb2RlbCcpIHtcbiAgICAgIG9wdHMubW9kZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWVmZm9ydCcpIHtcbiAgICAgIGNvbnN0IGxldmVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghWydhdXRvJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXS5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGVmZm9ydCBcIiR7bGV2ZWx9XCI6IHVzZSBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhgKVxuICAgICAgfVxuICAgICAgb3B0cy5lZmZvcnQgPSBsZXZlbFxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLXJlc3VtZScpIHtcbiAgICAgIG9wdHMucmVzdW1lID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1tYXgtdG9vbC1jYWxscycpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgb3B0cy5tYXhUb29sQ2FsbHMgPSBOdW1iZXIodmFsdWUpXG4gICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdHMubWF4VG9vbENhbGxzKSB8fCBvcHRzLm1heFRvb2xDYWxscyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tY29ubmVjdCcpIG9wdHMubW9kZSA9ICdjb25uZWN0J1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJ3VwZGF0ZScgfHwgYXJnID09PSAnLS11cGRhdGUnKSBvcHRzLm1vZGUgPSAndXBkYXRlJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1xJyB8fCBhcmcgPT09ICctLXF1aWV0Jykgb3B0cy5xdWlldCA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctaCcgfHwgYXJnID09PSAnLS1oZWxwJykgb3B0cy5tb2RlID0gJ2hlbHAnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXYnIHx8IGFyZyA9PT0gJy0tdmVyc2lvbicpIG9wdHMubW9kZSA9ICd2ZXJzaW9uJ1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGFyZ3VtZW50IFwiJHthcmd9XCJgKVxuICB9XG5cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2hlYWRsZXNzJyAmJiAhb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcCByZXF1aXJlcyBhIG5vbi1lbXB0eSBwcm9tcHQnKVxuICBpZiAob3B0cy5tb2RlID09PSAnc2hlbGwnKSB7XG4gICAgaWYgKCFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1zIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHJlcXVlc3QnKVxuICAgIGNvbnN0IGluY29tcGF0aWJsZSA9IFtvcHRzLmpzb24gJiYgJy0tanNvbicsIG9wdHMuc3RyZWFtSnNvbiAmJiAnLS1zdHJlYW0tanNvbicsIG9wdHMucmVzdW1lICYmICctLXJlc3VtZScsIG9wdHMubWF4VG9vbENhbGxzICYmICctLW1heC10b29sLWNhbGxzJ10uZmluZChCb29sZWFuKVxuICAgIGlmIChpbmNvbXBhdGlibGUpIHRocm93IG5ldyBFcnJvcihgJHtpbmNvbXBhdGlibGV9IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1zaGVsbGApXG4gIH1cbiAgcmV0dXJuIG9wdHNcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9za2lsbHMuanMnXG5pbXBvcnQgeyBleHBhbmRDb21tYW5kLCBwYXJzZUNvbW1hbmRBcmd1bWVudHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgY29tbWFuZEF0LCByZXBsYWNlQ29tbWFuZCwgY29tbWFuZEZpZWxkcyB9IGZyb20gJy4vY29tcG9zZXItY29tbWFuZHMuanMnXG5pbXBvcnQgeyBDb21tYW5kRm9ybSB9IGZyb20gJy4vY29tbWFuZC1mb3JtLmpzeCdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uIH0gZnJvbSAnLi4vZGljdGF0aW9uLmpzJ1xuaW1wb3J0IHsgcmVhZENsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vY2xpcGJvYXJkLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ2xpcGJvYXJkSW5wdXQgfSBmcm9tICcuL2NsaXBib2FyZC1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbklucHV0IH0gZnJvbSAnLi9kaWN0YXRpb24taW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQgfSBmcm9tICcuL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzJ1xuaW1wb3J0IHsgY2FwdHVyZVJlZ2lvbiB9IGZyb20gJy4uL3NjcmVlbi1jYXB0dXJlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9zZXJGaWxlcyB9IGZyb20gJy4vY29tcG9zZXItZmlsZXMuanMnXG5pbXBvcnQgeyBkaWN0YXRpb25JbmRpY2F0b3IsIGFwcGVuZExldmVsIH0gZnJvbSAnLi9kaWN0YXRpb24taW5kaWNhdG9yLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBNZW51LCBQcm9ncmVzc0JhciwgU2Nyb2xsQm94LCBTaGltbWVyLCBTcGlubmVyLCBUZXh0QXJlYSwgdXNlRm9jdXMsIHVzZUZvY3VzVHJhcCwgdXNlRnJhbWVTdGF0cywgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZUxheW91dCwgdXNlTW91c2UsIHVzZVJlc2l6ZSwgdXNlU2VsZWN0aW9uLCB1c2VUb2FzdCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdFNlc3Npb25zLCBkZWxldGVTZXNzaW9uLCBkZWxldGVQcm9qZWN0RGF0YSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHVzZXJFbnRyaWVzLCByZXdpbmRTdGF0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgbG9hZFByb2plY3RQcm9tcHRzLCBsb2FkR2xvYmFsUHJvbXB0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvaGlzdG9yeS5qcydcbmltcG9ydCB7IGltcGxpY2l0UmV3aW5kVGFyZ2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS9yZXdpbmQuanMnXG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24sIGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS91cGRhdGUuanMnXG5pbXBvcnQgeyBTVEVFUl9ST0xFUywgc3RlZXJhYmxlVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RlZXIuanMnXG5pbXBvcnQgeyB3cml0ZUNvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgb3BlbmFpU3RhdHVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IEVGRk9SVF9MRVZFTFMsIFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgYWdlbnRUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC10cmFuc2NyaXB0LmpzJ1xuaW1wb3J0IHsgZnV6enlTY29yZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBjb21wbGV0aW9uQ29udGV4dCwgYXBwbHlDb21wbGV0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21wbGV0aW9uLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlUGF0aHMsIHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsaXN0RmlsZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2ZpbGVzLmpzJ1xuaW1wb3J0IHsgbGlzdFdvcmt0cmVlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvd29ya3RyZWVzLmpzJ1xuaW1wb3J0IHsgb3duZXJSb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9wYXRocy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZWZyZXNoLW1vZGVscycsIGRlc2M6ICdSZWZyZXNoIGF2YWlsYWJsZSBtb2RlbHMgZnJvbSBwcm92aWRlcnMnIH0sXG4gIHsgbmFtZTogJ2Nvbm5lY3QnLCBkZXNjOiAnU2lnbiBpbiB3aXRoIENoYXRHUFQgdG8gdXNlIGEgQ29kZXggc3Vic2NyaXB0aW9uJyB9LFxuICB7IG5hbWU6ICdlZmZvcnQnLCBkZXNjOiAnU2V0IHRoZSB0aGlua2luZyBlZmZvcnQgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAncmVzdW1lJywgZGVzYzogJ1BpY2sgdXAgYSBwcmV2aW91cyBzZXNzaW9uIHdoZXJlIHlvdSBsZWZ0IG9mZicgfSxcbiAgeyBuYW1lOiAnbmV3JywgZGVzYzogJ1N0YXJ0IGEgbmV3IHNlc3Npb24gaW4gdGhpcyBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdmb3JrJywgZGVzYzogJ0ZvcmsgY29udmVyc2F0aW9uJyB9LFxuICB7IG5hbWU6ICdkZWxldGUnLCBkZXNjOiAnUGVybWFuZW50bHkgZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHN0YXJ0IGZyZXNoJyB9LFxuICB7IG5hbWU6ICdwcm9qZWN0JywgZGVzYzogJ1N3aXRjaCBwcm9qZWN0czoganVtcCB0byBhbm90aGVyIHByb2plY3QsIHNhbWUgYXMgY3RybCtwJyB9LFxuICB7IG5hbWU6ICdjd2QnLCBkZXNjOiAnU2hvdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcHJvamVjdCByb290JyB9LFxuICB7IG5hbWU6ICdza2lsbHMnLCBkZXNjOiAnTGlzdCBldmVyeSBza2lsbDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnY29tbWFuZHMnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdpbml0JywgZGVzYzogJ0NyZWF0ZSBvciBpbXByb3ZlIHJlcG9zaXRvcnkgQUdFTlRTLm1kIGd1aWRhbmNlJyB9LFxuICB7IG5hbWU6ICd0b29scycsIGRlc2M6ICdMaXN0IGJ1aWx0aW4gYW5kIHVzZXItZGVmaW5lZCB0b29sczsgTUNQIHRvb2xzIGxpdmUgaW4gL21jcCcgfSxcbiAgeyBuYW1lOiAncmV3aW5kJywgZGVzYzogJ1Jlc3RvcmUgdGhlIGNvbnZlcnNhdGlvbiB0byBhIHByZXZpb3VzIG1lc3NhZ2UnIH0sXG4gIHsgbmFtZTogJ3N0ZWVyJywgZGVzYzogJ0VkaXQgb3IgYWRkIGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB3aXRob3V0IHNlbmRpbmcnIH0sXG4gIHsgbmFtZTogJ2hpc3RvcnknLCBkZXNjOiAnU2VhcmNoIHByb21wdHMgeW91IHByZXZpb3VzbHkgc2VudCcgfSxcbiAgeyBuYW1lOiAncmVuYW1lJywgZGVzYzogJ05hbWUgdGhpcyBzZXNzaW9uOyBvbWl0IHRoZSBuYW1lIHRvIHJlc3RvcmUgaXRzIGF1dG9tYXRpYyB0aXRsZScgfSxcbiAgeyBuYW1lOiAnY29sb3InLCBkZXNjOiAnQ29sb3IgdGhpcyBzZXNzaW9uOiAvY29sb3IgPG5hbWUgb3IgI2hleD4sIC9jb2xvciBub25lIHRvIGNsZWFyJyB9LFxuICB7IG5hbWU6ICd0aGVtZScsIGRlc2M6ICdQaWNrIGEgY29sb3IgdGhlbWU7IC90aGVtZSA8bmFtZT4gYXBwbGllcyBvbmUgZGlyZWN0bHknIH0sXG4gIHsgbmFtZTogJ2NvbmZpZycsIGRlc2M6ICdDb25maWd1cmUgcGljbyBkaXNwbGF5IGFuZCBiZWhhdmlvcicgfSxcbiAgeyBuYW1lOiAnbWNwJywgZGVzYzogJ01hbmFnZSBNQ1Agc2VydmVyczogYWRkLCB0b2dnbGUsIHJlY29ubmVjdCcgfSxcbiAgeyBuYW1lOiAncGFyYWxsZWwnLCBkZXNjOiAnUnVuIGEgdGFzayB3aXRoIHBhcmFsbGVsIGFnZW50czogL3BhcmFsbGVsIDx0YXNrPicgfSxcbiAgeyBuYW1lOiAnZGVsaWJlcmF0ZScsIGRlc2M6ICdEZWxpYmVyYXRlIG9uIGEgZGVjaXNpb246IC9kZWxpYmVyYXRlIDxkZWNpc2lvbj4nIH0sXG4gIHsgbmFtZTogJ3dha2V1cHMnLCBkZXNjOiAnVmlldyBhbmQgY2FuY2VsIHNjaGVkdWxlZCB3YWtlLXVwcycgfSxcbiAgeyBuYW1lOiAnbWVtb3J5JywgZGVzYzogJ0Jyb3dzZSBhbmQgbWFuYWdlIHNhdmVkIG1lbW9yaWVzOiBwcm9qZWN0IGFuZCBnbG9iYWwnIH0sXG4gIHsgbmFtZTogJ2NvbXBhY3QnLCBkZXNjOiAnU3VtbWFyaXplIHRoZSBjb252ZXJzYXRpb24gdG8gZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2NsZWFyJywgZGVzYzogJ0NsZWFyIHRoZSBjb252ZXJzYXRpb24gYW5kIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjb3N0JywgZGVzYzogJ1Nob3cgdG9rZW4gdXNhZ2UgYW5kIGVzdGltYXRlZCBjb3N0IHNvIGZhcicgfSxcbiAgeyBuYW1lOiAnY29udGV4dCcsIGRlc2M6IFwiU2hvdyB3aGF0J3MgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBhbmQgaG93IGJpZyBlYWNoIHBpZWNlIGlzXCIgfSxcbiAgeyBuYW1lOiAnZXhwb3J0JywgZGVzYzogJ1NhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIHRvIGEgbWFya2Rvd24gZmlsZScgfSxcbiAgeyBuYW1lOiAndXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbScgfSxcbiAgeyBuYW1lOiAnaGVscCcsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQgYW5kIHdoYXQgaXQgZG9lcycgfSxcbl1cblxuY29uc3QgSElTVE9SWV9TQ09QRVMgPSBbJ3Nlc3Npb24nLCAncHJvamVjdCcsICdldmVyeXdoZXJlJ11cbmNvbnN0IE1FTU9SWV9TQ09QRVMgPSBbJ2FsbCcsICdwcm9qZWN0JywgJ2dsb2JhbCddXG5jb25zdCBTSEVMTF9TVFJJUF9NQVggPSA1XG5jb25zdCBBR0VOVF9TVFJJUF9NQVggPSA1XG5jb25zdCBTVFJJUF9TQ1JPTExPRkYgPSAxXG5cbmZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBpZiAodGFyZ2V0IDwgMCkgcmV0dXJuIHN0YXJ0XG4gIGlmICh0YXJnZXQgPCBzdGFydCArIFNUUklQX1NDUk9MTE9GRikgcmV0dXJuIE1hdGgubWF4KDAsIHRhcmdldCAtIFNUUklQX1NDUk9MTE9GRilcbiAgaWYgKHRhcmdldCA+PSBzdGFydCArIHNpemUgLSBTVFJJUF9TQ1JPTExPRkYpIHJldHVybiBNYXRoLm1pbihtYXgsIHRhcmdldCAtIHNpemUgKyBTVFJJUF9TQ1JPTExPRkYgKyAxKVxuICByZXR1cm4gc3RhcnRcbn1cblxuXG5mdW5jdGlvbiBhZ2VudEVsYXBzZWQoYWdlbnQsIG5vdyA9IERhdGUubm93KCkpIHtcbiAgaWYgKCFhZ2VudC5zdGFydGVkQXQpIHJldHVybiAnd2FpdGluZydcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKChhZ2VudC5lbmRlZEF0IHx8IG5vdykgLSBhZ2VudC5zdGFydGVkQXQpIC8gMTAwMCkpXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MClcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MClcbiAgaWYgKGhvdXJzKSByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXMgJSA2MH1tYFxuICBpZiAobWludXRlcykgcmV0dXJuIGAke21pbnV0ZXN9bSAke3NlY29uZHMgJSA2MH1zYFxuICByZXR1cm4gYCR7c2Vjb25kc31zYFxufVxuXG5mdW5jdGlvbiBhZ2VudFN0YXR1cyhhZ2VudCkge1xuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiB7IGljb246ICcnLCBsYWJlbDogJycsIGNvbG9yOiBhY2NlbnQoKSB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdxdWV1ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNDJywgbGFiZWw6ICdxdWV1ZWQnLCBjb2xvcjogTVVURUQgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDRicsIGxhYmVsOiAnJywgY29sb3I6IEdSRUVOIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHJldHVybiB7IGljb246ICdcdTAwRDcnLCBsYWJlbDogJ2ZhaWxlZCcsIGNvbG9yOiBSRUQgfVxuICByZXR1cm4geyBpY29uOiAnXHUyNUEwJywgbGFiZWw6ICdjYW5jZWxsZWQnLCBjb2xvcjogTVVURUQgfVxufVxuXG5mdW5jdGlvbiBTdGVlck1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzZWxlY3RlZCwgZm9jdXMgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKGl0ZW0ubWVzc2FnZUlkLCBsYXlvdXQpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSBzaG93TG9ja2VkIC8+XG59XG5cbmZ1bmN0aW9uIERpY3RhdGlvbktleXMoeyBpbnB1dCB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChpbnB1dC5oYW5kbGUoZXZlbnQpKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBNb3VzZUZvY3VzUmVnaW9uKHsgY2hpbGRyZW4sIG9uUHJlc3MsIC4uLnByb3BzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkpIG9uUHJlc3MoKVxuICB9KVxuICByZXR1cm4gPGJveCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L2JveD5cbn1cblxuZnVuY3Rpb24gQ29tcG9zZXJBY3Rpb24oeyBpY29uLCBhY3RpdmVJY29uLCBhY3RpdmUgPSBmYWxzZSwgb25QcmVzcywgb25Ib3ZlciB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnICYmIGluc2lkZSAhPT0gaG92ZXJlZCgpKSB7XG4gICAgICBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICAgIG9uSG92ZXI/LihpbnNpZGUpXG4gICAgfVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICBjb25zdCBoaWdobGlnaHRlZCA9IGhvdmVyZWQoKSB8fCBhY3RpdmVcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGJnOiBoaWdobGlnaHRlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogaGlnaGxpZ2h0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgJHtoaWdobGlnaHRlZCA/IGFjdGl2ZUljb24gOiBpY29ufSBgfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gQWdlbnRTdHJpcFJvdyh7IHNlbGVjdGVkLCBmb2N1c2VkLCBjaGlsZHJlbiwgb25QcmVzcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnKSBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogZm9jdXNlZCA/IGFjY2VudCgpIDogbnVsbCwgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogaG92ZXJlZCgpID8gRkdfU09GVCA6IE1VVEVEIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBzZWxlY3RlZCB9fT57c2VsZWN0ZWQgPyAnXHUyNzZGICcgOiAnICAnfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2JveD5cbiAgKVxufVxuXG4vLyBvbmx5IHRoZSBuZXdlc3Qgc2xpY2Ugb2YgYSBsb25nIHRyYW5zY3JpcHQgcmVuZGVyczsgb2xkZXIgaXRlbXMgbG9hZCBpblxuLy8gYmF0Y2hlcyB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIHRvcC4gcmVuZGVyIGNvc3QgaXMgcGVyLWl0ZW0sIHNvIHRoaXNcbi8vIGtlZXBzIGRheS1sb25nIHNlc3Npb25zIGFzIGZhc3QgYXMgZnJlc2ggb25lc1xuY29uc3QgSElTVE9SWV9XSU5ET1cgPSA1MFxuXG5mdW5jdGlvbiBjb2xsYXBzZVN0ZWVyVG9vbHMoaXRlbXMpIHtcbiAgY29uc3QgY29sbGFwc2VkID0gW11cbiAgbGV0IGhpZGRlbiA9IDBcbiAgY29uc3QgZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKCFoaWRkZW4pIHJldHVyblxuICAgIGNvbGxhcHNlZC5wdXNoKHsga2luZDogJ3N0ZWVyLXRvb2xzJywgY291bnQ6IGhpZGRlbiB9KVxuICAgIGhpZGRlbiA9IDBcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcgfHwgaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcgfHwgaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBoaWRkZW4gKz0gaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcgPyBpdGVtLml0ZW1zLmxlbmd0aCA6IDFcbiAgICB9IGVsc2Uge1xuICAgICAgZmx1c2goKVxuICAgICAgY29sbGFwc2VkLnB1c2goaXRlbSlcbiAgICB9XG4gIH1cbiAgZmx1c2goKVxuICByZXR1cm4gY29sbGFwc2VkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBcHAoeyBib290LCBjb250cm9sbGVyOiBjdGwgfSkge1xuICBjb25zdCB7IGN3ZCwgcm9vdCwgdmVyc2lvbiwgc2tpbGxzLCBtY3AgfSA9IGJvb3RcbiAgY29uc3Qgc3RhdGUgPSBjdGwuc3RhdGVcbiAgY29uc3QgW21vZGVscywgc2V0TW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChib290Lm1vZGVscylcbiAgY29uc3QgW3JlZnJlc2hpbmdNb2RlbHMsIHNldFJlZnJlc2hpbmdNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuXG4gIGNvbnN0IFtkZXJpdmVkLCBzZXREZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZXJpdmVkKVxuICBjb25zdCBbdGVybWluYWxXaWR0aCwgc2V0VGVybWluYWxXaWR0aF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MClcbiAgdXNlUmVzaXplKCh7IHdpZHRoIH0pID0+IHNldFRlcm1pbmFsV2lkdGgod2lkdGgpKVxuICBjb25zdCBbb3ZlcmxheSwgc2V0T3ZlcmxheV0gPSBjcmVhdGVTaWduYWwoc3RhdGUub3ZlcmxheSlcbiAgY29uc3QgW3N0cmVhbWluZywgc2V0U3RyZWFtaW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdHJlYW1pbmcpXG4gIGNvbnN0IFtsaXZlVXNhZ2UsIHNldExpdmVVc2FnZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUubGl2ZVVzYWdlKVxuICBjb25zdCBbdHVyblBoYXNlLCBzZXRUdXJuUGhhc2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnR1cm5QaGFzZSlcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gY3JlYXRlU2lnbmFsKHN0YXRlLmJ1c3kpXG4gIGNvbnN0IFtjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0aW5nKVxuICBjb25zdCBbY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1c10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgY29uc3QgW3N0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdGFydGVkQXQpXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGNvbXBvc2VyRmlsZXMgPSBib290LnJlZnMuY29tcG9zZXJGaWxlcyA/Pz0gY3JlYXRlQ29tcG9zZXJGaWxlcygpXG4gIGNvbnN0IFtpbnB1dEN1cnNvciwgc2V0SW5wdXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjb21tYW5kRm9ybSwgc2V0Q29tbWFuZEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IHNldElucHV0ID0gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgIGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID0gKGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID8/IDApICsgMVxuICAgIGNvbnN0IHZhbHVlID0gY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSlcbiAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IgPz8gdmFsdWUubGVuZ3RoKVxuICB9XG4gIGNvbnN0IFtkaWN0YXRpb25TdGF0dXMsIHNldERpY3RhdGlvblN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbZGljdGF0aW9uTGV2ZWxzLCBzZXREaWN0YXRpb25MZXZlbHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbY2FwdHVyZVN0YXR1cywgc2V0Q2FwdHVyZVN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbY29tcG9zZXJBY3Rpb25MYWJlbCwgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbF0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLm1vZGVsKVxuICBjb25zdCBbZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgY29uc3QgW2VmZm9ydCwgc2V0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5lZmZvcnQpXG4gIGNvbnN0IFtkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICBjb25zdCBbc2hvd0VmZm9ydFBhbmVsLCBzZXRTaG93RWZmb3J0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1RoZW1lUGFuZWwsIHNldFNob3dUaGVtZVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dDb25maWdQYW5lbCwgc2V0U2hvd0NvbmZpZ1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dEZWxldGVDb25maXJtLCBzZXRTaG93RGVsZXRlQ29uZmlybV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjbG91ZHMsIHNldENsb3Vkc10gPSBjcmVhdGVTaWduYWwoYm9vdC5jbG91ZHMpXG4gIGNvbnN0IFtjb21wYWN0VG9vbEhpc3RvcnksIHNldENvbXBhY3RUb29sSGlzdG9yeV0gPSBjcmVhdGVTaWduYWwoYm9vdC5jb21wYWN0VG9vbEhpc3RvcnkpXG4gIGNvbnN0IFtnaXRGb290ZXIsIHNldEdpdEZvb3Rlcl0gPSBjcmVhdGVTaWduYWwoYm9vdC5naXRGb290ZXIpXG4gIGNvbnN0IFt3aWRlU2lkZWJhciwgc2V0V2lkZVNpZGViYXJdID0gY3JlYXRlU2lnbmFsKGJvb3Qud2lkZVNpZGViYXIpXG4gIGNvbnN0IFtyZXNlYXJjaEFnZW50TGltaXQsIHNldFJlc2VhcmNoQWdlbnRMaW1pdF0gPSBjcmVhdGVTaWduYWwoYm9vdC5yZXNlYXJjaEFnZW50TGltaXQpXG4gIGNvbnN0IFtxdWVzdGlvblJlcXVlc3QsIHNldFF1ZXN0aW9uUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUucXVlc3Rpb24pXG4gIGNvbnN0IFtzaG93TWVtb3J5UGFuZWwsIHNldFNob3dNZW1vcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFttZW1TY29wZSwgc2V0TWVtU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFttZW1vcnlMaXN0LCBzZXRNZW1vcnlMaXN0XSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3RoZW1lUHJlZiwgc2V0VGhlbWVQcmVmXSA9IGNyZWF0ZVNpZ25hbChib290LnRoZW1lUHJlZiB8fCAnYXV0bycpXG4gIGNvbnN0IFtxdWV1ZWQsIHNldFF1ZXVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUucXVldWVkKVxuICBjb25zdCBbZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmV4cGVkaXRlZClcbiAgY29uc3QgW3NlbnQsIHNldFNlbnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnNlbnQpXG4gIGNvbnN0IFtoaXN0SWR4LCBzZXRIaXN0SWR4XSA9IGNyZWF0ZVNpZ25hbCgtMSlcbiAgY29uc3QgW2NtZEluZGV4LCBzZXRDbWRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2NtZEN5Y2xlLCBzZXRDbWRDeWNsZV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2ZpbGVJbmRleCwgc2V0RmlsZUluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZmlsZUxpc3QsIHNldEZpbGVMaXN0XSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2ZpbGVzRGlzbWlzc2VkLCBzZXRGaWxlc0Rpc21pc3NlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3U2lnbmFsXSA9IGNyZWF0ZVNpZ25hbCgnY2hhdCcpXG4gIGNvbnN0IFt2ZXJib3NlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RlbFBhbmVsLCBzZXRTaG93TW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UmVzZWFyY2hNb2RlbFBhbmVsLCBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc2VhcmNoTW9kZWxSZXR1cm4sIHNldFJlc2VhcmNoTW9kZWxSZXR1cm5dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCwgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0aW5nU2hlbGxNb2RlbCwgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0LCBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ1Jlc2VhcmNoLCBzZXRQZW5kaW5nUmVzZWFyY2hdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nRGVsaWJlcmF0aW9uLCBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICBjb25zdCBbdmlld2VkQWdlbnRJZCwgc2V0Vmlld2VkQWdlbnRJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50V2luZG93T2Zmc2V0LCBzZXRBZ2VudFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dIaXN0b3J5UGFuZWwsIHNldFNob3dIaXN0b3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaGlzdFNjb3BlLCBzZXRIaXN0U2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtoaXN0UHJvbXB0cywgc2V0SGlzdFByb21wdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hvd1Jlc3VtZVBhbmVsLCBzZXRTaG93UmVzdW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzdW1lU2NvcGVzLCBzZXRSZXN1bWVTY29wZXNdID0gY3JlYXRlU2lnbmFsKFsncmVwb3NpdG9yeScsICdldmVyeXdoZXJlJ10pXG4gIGNvbnN0IFtyZXN1bWVTY29wZSwgc2V0UmVzdW1lU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXN1bWVTZXNzaW9ucywgc2V0UmVzdW1lU2Vzc2lvbnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcmVzdW1lTG9hZGluZywgc2V0UmVzdW1lTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TWNwUGFuZWwsIHNldFNob3dNY3BQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJvamVjdFBhbmVsLCBzZXRTaG93UHJvamVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZm9QYW5lbCwgc2V0SW5mb1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbdmlld2VkU2hlbGxJZCwgc2V0Vmlld2VkU2hlbGxJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NoZWxsV2luZG93T2Zmc2V0LCBzZXRTaGVsbFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dXYWtldXBzUGFuZWwsIHNldFNob3dXYWtldXBzUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0Nvbm5lY3RQYW5lbCwgc2V0U2hvd0Nvbm5lY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFthdXRoUHJvdmlkZXJzLCBzZXRBdXRoUHJvdmlkZXJzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3NoZWxsc1ZlcnNpb24sIHNldFNoZWxsc1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtnaXRWZXJzaW9uLCBzZXRHaXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcHJvamVjdHMsIHNldFByb2plY3RzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Byb2plY3RzTG9hZGluZywgc2V0UHJvamVjdHNMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21jcFNlcnZlcnMsIHNldE1jcFNlcnZlcnNdID0gY3JlYXRlU2lnbmFsKG1jcC5saXN0KCkpXG4gIGNvbnN0IFtjb21wbGV0aW5nLCBzZXRDb21wbGV0aW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbXBJbmRleCwgc2V0Q29tcEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmV3aW5kU3RlcCwgc2V0UmV3aW5kU3RlcF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3Jld2luZFRhcmdldCwgc2V0UmV3aW5kVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgW2hpc3RXaW5kb3csIHNldEhpc3RXaW5kb3ddID0gY3JlYXRlU2lnbmFsKEhJU1RPUllfV0lORE9XKVxuICBjb25zdCBbdHJhbnNjcmlwdE1ldHJpY3MsIHNldFRyYW5zY3JpcHRNZXRyaWNzXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXIsIHNldFN0ZWVyXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXJUZXh0LCBzZXRTdGVlclRleHRdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGNvbnN0IHJlZnMgPSBib290LnJlZnNcbiAgcmVmcy5xdWl0QXQgPz89IDBcbiAgcmVmcy5yZXN1bWVPcGVuID8/PSAwXG5cbiAgZnVuY3Rpb24gc2V0VmlldyhuZXh0KSB7XG4gICAgc2V0Vmlld1NpZ25hbChuZXh0KVxuICAgIGN0bC5ob2xkKG5leHQgIT09ICdjaGF0JylcbiAgfVxuXG4gIC8vIHRoZSBjb250cm9sbGVyIG93bnMgZXZlcnkgcGllY2Ugb2YgY29udmVyc2F0aW9uIHN0YXRlOyB0aGVzZSBzaWduYWxzXG4gIC8vIG1pcnJvciBpdCBzbyB0aGUgcmVuZGVyIHRyZWUgYmVsb3cgc3RheXMgcmVhY3RpdmUgd2l0aG91dCBrbm93aW5nIHRoYXRcbiAgY29uc3QgbWlycm9yID0gKGdldCwgc2V0LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChnZXQoKSAhPT0gdmFsdWUpIHNldCh2YWx1ZSlcbiAgfVxuICBjb25zdCBbcGVlclN0YXR1cywgc2V0UGVlclN0YXR1c10gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgZnVuY3Rpb24gc3luY0Zyb21Db250cm9sbGVyKCkge1xuICAgIHNldFBlZXJTdGF0dXMoc3RhdGUucGVlckVycm9yID8gYHBlZXIgZGlzY29ubmVjdGVkOiAke3N0YXRlLnBlZXJFcnJvcn1gIDogc3RhdGUucGVlclBhdXNlZCAmJiBzdGF0ZS5wZWVyQ29ubmVjdGlvbiA/ICdwZWVyIHJlc3BvbnNlcyBwYXVzZWQnIDogJycpXG4gICAgbWlycm9yKGRlcml2ZWQsIHNldERlcml2ZWQsIHN0YXRlLmRlcml2ZWQpXG4gICAgbWlycm9yKG92ZXJsYXksIHNldE92ZXJsYXksIHN0YXRlLm92ZXJsYXkpXG4gICAgbWlycm9yKHN0cmVhbWluZywgc2V0U3RyZWFtaW5nLCBzdGF0ZS5zdHJlYW1pbmcpXG4gICAgbWlycm9yKGxpdmVVc2FnZSwgc2V0TGl2ZVVzYWdlLCBzdGF0ZS5saXZlVXNhZ2UpXG4gICAgbWlycm9yKHR1cm5QaGFzZSwgc2V0VHVyblBoYXNlLCBzdGF0ZS50dXJuUGhhc2UpXG4gICAgbWlycm9yKGJ1c3ksIHNldEJ1c3ksIHN0YXRlLmJ1c3kpXG4gICAgbWlycm9yKGNvbXBhY3RpbmcsIHNldENvbXBhY3RpbmcsIHN0YXRlLmNvbXBhY3RpbmcpXG4gICAgbWlycm9yKGNvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXMsIHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gICAgbWlycm9yKHN0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0LCBzdGF0ZS5zdGFydGVkQXQpXG4gICAgbWlycm9yKG1vZGVsLCBzZXRNb2RlbCwgc3RhdGUubW9kZWwpXG4gICAgbWlycm9yKGRlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsLCBzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gICAgbWlycm9yKGVmZm9ydCwgc2V0RWZmb3J0LCBzdGF0ZS5lZmZvcnQpXG4gICAgbWlycm9yKGRlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnQsIHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gICAgbWlycm9yKHF1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0LCBzdGF0ZS5xdWVzdGlvbilcbiAgICBtaXJyb3IocXVldWVkLCBzZXRRdWV1ZWQsIHN0YXRlLnF1ZXVlZClcbiAgICBtaXJyb3IoZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWQsIHN0YXRlLmV4cGVkaXRlZClcbiAgICBtaXJyb3Ioc2VudCwgc2V0U2VudCwgc3RhdGUuc2VudClcbiAgICBtaXJyb3IoYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbiwgc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICB9XG5cbiAgLy8gdHJlbmQgcmUtcnVucyB0aGlzIGNvbXBvbmVudCBvbiBldmVyeSBzaWduYWwgY2hhbmdlLCBzbyB0aGUgY29udHJvbGxlclxuICAvLyBpcyBzdWJzY3JpYmVkIG9uY2UgYW5kIGVhY2ggaGFuZGxlciByZWFjaGVzIHRoZSBuZXdlc3QgcmVuZGVyIHRocm91Z2hcbiAgLy8gcmVmcy51aSwgd2hpY2ggaXMgcmVwbGFjZWQgYmVsb3cgb24gZXZlcnkgcGFzc1xuICByZWZzLnVpID0ge1xuICAgIHN5bmM6IHN5bmNGcm9tQ29udHJvbGxlcixcbiAgICBmbGFzaDogKG1lc3NhZ2UpID0+IGZsYXNoKG1lc3NhZ2UpLFxuICAgIGRlcml2ZWQ6IChuZXh0KSA9PiB7XG4gICAgICBzZXRBY2NlbnQobmV4dC5jb2xvcilcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogbmV4dC5jb2xvciB8fCBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfSxcbiAgICBxdWVzdGlvbjogKCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gICAgfSxcbiAgICB0dXJuOiAoKSA9PiB7XG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfSxcbiAgICBpbnB1dDogKHRleHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRJbnB1dCh0ZXh0KVxuICAgIH0sXG4gICAgc2Vzc2lvbjogKCkgPT4ge1xuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0sXG4gICAgcmVzdW1lZDogKG1ldGEpID0+IGZsYXNoKGByZXN1bWVkICAke21ldGEudHVybnN9ICR7bWV0YS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28obWV0YS5hdCl9YCksXG4gICAgcHJvamVjdDogKG5leHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDtwaWNvICAke25leHQucm9vdC5zcGxpdCgnLycpLnBvcCgpfVxceDA3YClcbiAgICAgIHNldE1jcFNlcnZlcnMobmV4dC5tY3AubGlzdCgpKVxuICAgICAgc2V0RmlsZUxpc3QoW10pXG4gICAgfSxcbiAgICBtY3A6IChzZXJ2ZXJzKSA9PiBzZXRNY3BTZXJ2ZXJzKHNlcnZlcnMpLFxuICAgIHNoZWxsczogKCkgPT4gc2V0U2hlbGxzVmVyc2lvbigodikgPT4gdiArIDEpLFxuICAgIGdpdDogKCkgPT4gc2V0R2l0VmVyc2lvbigodikgPT4gdiArIDEpLFxuICB9XG4gIGlmICghcmVmcy5zdWJzY3JpYmVkKSB7XG4gICAgcmVmcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGN0bC5vbignY2hhbmdlJywgKCkgPT4gcmVmcy51aS5zeW5jKCkpXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZmxhc2gnLCAnZGVyaXZlZCcsICdxdWVzdGlvbicsICd0dXJuJywgJ2lucHV0JywgJ3Nlc3Npb24nLCAncmVzdW1lZCcsICdwcm9qZWN0JywgJ21jcCcsICdzaGVsbHMnLCAnZ2l0J10pIHtcbiAgICAgIGN0bC5vbih0eXBlLCAocGF5bG9hZCkgPT4gcmVmcy51aVt0eXBlXShwYXlsb2FkKSlcbiAgICB9XG4gIH1cbiAgc3luY0Zyb21Db250cm9sbGVyKClcblxuICBjb25zdCBza2lsbENvbW1hbmRzID0gc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogYHNraWxsICAke3MuZGVzY3JpcHRpb24gfHwgcy5zb3VyY2V9YCwgc2tpbGw6IHRydWUgfSkpXG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IGJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoYykgPT4gKHsgbmFtZTogYy5uYW1lLCBkZXNjOiBgY29tbWFuZCAgJHtjLmRlc2NyaXB0aW9uIHx8IGMuc291cmNlfWAsIGNvbW1hbmQ6IHRydWUgfSkpXG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoKVxuICBjb25zdCBzaGFkb3dlZCA9IFtdXG4gIGZvciAoY29uc3QgYyBvZiBbLi4uQ09NTUFORFMsIC4uLnNraWxsQ29tbWFuZHMsIC4uLnVzZXJDb21tYW5kc10pIHtcbiAgICBpZiAoYnlOYW1lLmhhcyhjLm5hbWUpKSBzaGFkb3dlZC5wdXNoKGAke2Muc2tpbGwgPyAnc2tpbGwnIDogJ2NvbW1hbmQnfSBcIiR7Yy5uYW1lfVwiYClcbiAgICBlbHNlIGJ5TmFtZS5zZXQoYy5uYW1lLCBjKVxuICB9XG4gIGNvbnN0IGFsbENvbW1hbmRzID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV1cbiAgaWYgKHNoYWRvd2VkLmxlbmd0aCAmJiAhcmVmcy53YXJuZWRTaGFkb3dlZCkge1xuICAgIHJlZnMud2FybmVkU2hhZG93ZWQgPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiBmbGFzaChgc2hhZG93ZWQgYnkgYW4gZWFybGllciBuYW1lLCByZW5hbWUgdG8gdXNlOiAke3NoYWRvd2VkLmpvaW4oJywgJyl9YCksIDApXG4gIH1cblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogMzUwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCcsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gPHRleHQgc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke21lc3NhZ2V9IGB9PC90ZXh0PixcbiAgfSlcblxuICBjb25zdCB1cGRhdGVUb2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogODAwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IChcbiAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpIH19PlxuICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfT57YCAke21lc3NhZ2V9IGB9PC9TaGltbWVyPlxuICAgICAgPC9ib3g+XG4gICAgKSxcbiAgfSlcblxuICBmdW5jdGlvbiBmbGFzaChtc2cpIHtcbiAgICB0b2FzdChtc2cpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTW9kZWxzKCkge1xuICAgIGlmIChyZWZyZXNoaW5nTW9kZWxzKCkpIHJldHVyblxuICAgIHNldFJlZnJlc2hpbmdNb2RlbHModHJ1ZSlcbiAgICBmbGFzaCgncmVmcmVzaGluZyBtb2RlbHMnKVxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCBib290LnJlZnJlc2hNb2RlbHMoKVxuICAgICAgYm9vdC5tb2RlbHMgPSByZWZyZXNoZWRcbiAgICAgIHNldE1vZGVscyhyZWZyZXNoZWQpXG4gICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQpXG4gICAgICBmbGFzaChgbW9kZWxzIHJlZnJlc2hlZCAgJHtyZWZyZXNoZWQubGVuZ3RofSBtb2RlbHMgICR7ZWxhcHNlZH1tc2ApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbW9kZWwgcmVmcmVzaCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG4gIHJlZnMuY2FwdHVyZUltYWdlID8/PSBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoe1xuICAgIGNhcHR1cmVSZWdpb24sXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgICBvblN0YXR1czogc2V0Q2FwdHVyZVN0YXR1cyxcbiAgfSlcblxuICBpZiAoIXJlZnMuZGljdGF0aW9uKSB7XG4gICAgcmVmcy5kaWN0YXRpb24gPSBjcmVhdGVEaWN0YXRpb24oe1xuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0RGljdGF0aW9uU3RhdHVzKHN0YXR1cylcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHNldERpY3RhdGlvbkxldmVscyhbXSlcbiAgICAgIH0sXG4gICAgICBvbkxldmVsOiAobGV2ZWwpID0+IHNldERpY3RhdGlvbkxldmVscyhhcHBlbmRMZXZlbChkaWN0YXRpb25MZXZlbHMoKSwgbGV2ZWwpKSxcbiAgICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKGBkaWN0YXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCksXG4gICAgfSlcbiAgICByZWZzLmRpY3RhdGlvbklucHV0ID0gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb246IHJlZnMuZGljdGF0aW9uLCBnZXRJbnB1dDogaW5wdXQsIHNldElucHV0IH0pXG4gICAgY29uc3QgcHJlbG9hZCA9IHNldEltbWVkaWF0ZSgoKSA9PiByZWZzLmRpY3RhdGlvbi5wcmVsb2FkKCkpXG4gICAgcHJlbG9hZC51bnJlZigpXG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xlYXJJbW1lZGlhdGUocHJlbG9hZClcbiAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBbc2lnbmFsLCBjb2RlXSBvZiBbWydTSUdURVJNJywgMTQzXSwgWydTSUdIVVAnLCAxMjldXSkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVmcy51cGRhdGVDaGVja2VkKSB7XG4gICAgcmVmcy51cGRhdGVDaGVja2VkID0gdHJ1ZVxuICAgIGNoZWNrRm9yVXBkYXRlKHZlcnNpb24pLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSByZXR1cm5cbiAgICAgIHVwZGF0ZVRvYXN0KGBwaWNvIHYke2ZvdW5kLnZlcnNpb259IGF2YWlsYWJsZSAgL3VwZGF0ZWApXG4gICAgICBmb3VuZC5tYXJrTm90aWZpZWQoKVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgY29uc3QgcGVyZm9ybUNvbXBhY3Rpb24gPSBjdGwuY29tcGFjdFxuXG4gIGZ1bmN0aW9uIGNvbXBsZXRpb25Tb3VyY2UobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnY29sb3InKSByZXR1cm4gT2JqZWN0LmtleXMoU0VTU0lPTl9DT0xPUlMpXG4gICAgaWYgKG5hbWUgPT09ICd0aGVtZScpIHJldHVybiBbLi4ucGFsZXR0ZUxpc3QoKS5tYXAoKHApID0+IHAua2V5KSwgJ2F1dG8nXVxuICAgIGlmIChuYW1lID09PSAnZWZmb3J0JykgcmV0dXJuIFsnZGVmYXVsdCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICBpZiAobmFtZSA9PT0gJ21vZGVsJykgcmV0dXJuIG1vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKS5tYXAoKG0pID0+IG0ubmFtZSlcbiAgICBjb25zdCBjbWQgPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGNtZD8uc2tpbGwgfHwgY21kPy5jb21tYW5kKSByZXR1cm4gZmlsZUxpc3QoKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzQ29tcGxldGlvbigpIHtcbiAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgIHNldENvbXBJbmRleCgwKVxuICB9XG5cbiAgZnVuY3Rpb24gYWNjZXB0Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpIHtcbiAgICBzZXRJbnB1dChhcHBseUNvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSlcbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gIH1cblxuICBmdW5jdGlvbiBzZW5kKHRleHQpIHtcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpIHx8IHZpZXdlZFNoZWxsSWQoKSkgcmV0dXJuXG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGlmICghdmFsdWUpIHJldHVyblxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgLi4ucmVzdF0gPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgvXFxzKy8pXG4gICAgICBjb25zdCBtYXRjaCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChtYXRjaCwgeyBzdGFydDogdGV4dC5pbmRleE9mKCcvJyksIGVuZDogdGV4dC5sZW5ndGggfSwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICBydW5Db21tYW5kKG1hdGNoLCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHNldEhpc3RJZHgoLTEpXG4gICAgY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgY3RsLnNlbmQoY29tcG9zZXJGaWxlcy5jb250ZW50KCkudHJpbSgpKVxuICAgIHNldElucHV0KCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJydXB0KCkge1xuICAgIGlmICghYnVzeSgpKSByZXR1cm5cbiAgICBpZiAoc3RhdGUucXVlc3Rpb24pIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgY3RsLmludGVycnVwdCgpXG4gIH1cblxuICBjb25zdCBmbXRUb2tlbnMgPSAobikgPT4gKG4gPj0gMTAwMCA/IGAkeyhuIC8gMTAwMCkudG9GaXhlZCgxKX1rYCA6IFN0cmluZyhuKSlcblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTWVtb3JpZXMoKSB7XG4gICAgc2V0TWVtb3J5TGlzdChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTWVtb3J5RGlzYWJsZWQobSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5zZXREaXNhYmxlZChtLCAhbS5kaXNhYmxlZClcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgJHttLmRpc2FibGVkID8gJ2VuYWJsZWQnIDogJ3N1cHByZXNzZWQnfSAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtZW1vcnkgdXBkYXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZm9yZ2V0TWVtb3J5KG0pIHtcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZm9yZ2V0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5mb3JnZXRBcm0gPSB7IGZpbGU6IG0uZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZm9yZ2V0IFwiJHttLm5hbWV9XCJgKVxuICAgIH1cbiAgICByZWZzLmZvcmdldEFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuZm9yZ2V0KG0pXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYGZvcmdvdCAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBmb3JnZXQgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5Db250ZXh0UGFuZWwoKSB7XG4gICAgY29uc3QgdG9rID0gKG4pID0+IGB+JHtmbXRUb2tlbnMobil9IHRva2BcbiAgICBjb25zdCBicmVha2Rvd24gPSBhd2FpdCBjdGwuY29udGV4dEJyZWFrZG93bigpXG4gICAgY29uc3Qgcm93cyA9IGJyZWFrZG93bi5yb3dzLm1hcCgocm93KSA9PiAoeyBuYW1lOiByb3cubmFtZSwgZGVzYzogcm93LmRlc2MsIG5vdGU6IHRvayhyb3cudG9rZW5zKSB9KSlcbiAgICBpZiAoYnJlYWtkb3duLm1lYXN1cmVkKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBuYW1lOiAnbGFzdCBtZWFzdXJlZCByZXF1ZXN0JyxcbiAgICAgICAgZGVzYzogJ3Byb3ZpZGVyLXJlcG9ydGVkIGlucHV0IHRva2VucywgdGhlIG51bWJlciBiZWhpbmQgY3R4ICUnLFxuICAgICAgICBub3RlOiBgJHticmVha2Rvd24ubWVhc3VyZWQudG9Mb2NhbGVTdHJpbmcoKX0gdG9rYCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEluZm9QYW5lbCh7XG4gICAgICB0aXRsZTogYENvbnRleHQgICR7YnJlYWtkb3duLm1vZGVsfWAsXG4gICAgICByb3dzLFxuICAgICAgb3ZlcnZpZXc6IGJyZWFrZG93bi5zZWdtZW50cy5sZW5ndGggPyB7IHNlZ21lbnRzOiBicmVha2Rvd24uc2VnbWVudHMsIG1lYXN1cmVkOiBicmVha2Rvd24ubWVhc3VyZWQsIGxpbWl0OiBicmVha2Rvd24ubGltaXQgPz8gbW9kZWwoKS5jb250ZXh0IH0gOiBudWxsLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB0aGVtZUl0ZW1zID0gKCkgPT4gW1xuICAgIC4uLnBhbGV0dGVMaXN0KCksXG4gICAgeyBrZXk6ICdhdXRvJywgZGVzYzogYGZvbGxvdyB0aGUgdGVybWluYWwgKGRldGVjdGVkOiAke2Jvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyayd9KWAgfSxcbiAgXVxuXG4gIGZ1bmN0aW9uIHBhbGV0dGVGb3IocHJlZikge1xuICAgIHJldHVybiBwcmVmID09PSAnYXV0bycgPyBib290LmRldGVjdGVkVGhlbWUgfHwgJ2RhcmsnIDogcHJlZlxuICB9XG5cbiAgZnVuY3Rpb24gcHJldmlld1BhbGV0dGUocHJlZikge1xuICAgIHNldFBhbGV0dGUocGFsZXR0ZUZvcihwcmVmKSlcbiAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IGFjY2VudCgpLCBtdXRlZDogTVVURUQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWVQcmVmKHByZWYpIHtcbiAgICBzZXRUaGVtZVByZWYocHJlZilcbiAgICBwcmV2aWV3UGFsZXR0ZShwcmVmKVxuICAgIHdyaXRlQ29uZmlnKHsgdGhlbWU6IHByZWYgPT09ICdhdXRvJyA/IHVuZGVmaW5lZCA6IHByZWYgfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgZmxhc2gocHJlZiA9PT0gJ2F1dG8nID8gYHRoZW1lOiBhdXRvICBmb2xsb3dpbmcgdGhlIHRlcm1pbmFsICgke3BhbGV0dGVGb3IoJ2F1dG8nKX0pYCA6IGB0aGVtZTogJHtwcmVmfWApXG4gIH1cblxuICBmdW5jdGlvbiBzdGVlclByZXZpZXcoKSB7XG4gICAgcmV0dXJuIGN0bC5wcmV2aWV3U3RlZXIoc3RlZXIoKT8uY2hhbmdlcylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSByZXR1cm4gY3RsLmZvcmsoYXJncy50cmltKCkpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3JlbmFtZScpIHJldHVybiBjdGwucmVuYW1lKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIGN0bC5zZXRDb2xvcihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25maWcnKSB7XG4gICAgICBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndGhlbWUnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93VGhlbWVQYW5lbCh0cnVlKVxuICAgICAgY29uc3QgY2hvaWNlID0gYXJncy50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCB2YWxpZCA9IFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgICBpZiAoIXZhbGlkLmluY2x1ZGVzKGNob2ljZSkpIHJldHVybiBmbGFzaChgdGhlbWU6ICR7cGFsZXR0ZU5hbWUoKX0gIC90aGVtZSA8JHt2YWxpZC5qb2luKCd8Jyl9PmApXG4gICAgICBhcHBseVRoZW1lUHJlZihjaG9pY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMuc2tpbGwpIHJldHVybiBjdGwuc2VuZFNraWxsKGMubmFtZSlcbiAgICBpZiAoYy5uYW1lID09PSAnY29ubmVjdCcpIHJldHVybiBvcGVuQ29ubmVjdFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaW5pdCcpIHJldHVybiBjdGwuc2VuZEluaXQoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAncGFyYWxsZWwnKSB7XG4gICAgICBjb25zdCB0YXNrID0gYXJncy50cmltKClcbiAgICAgIGlmIChjdGwuc2VuZFBhcmFsbGVsKHRhc2spKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdSZXNlYXJjaCh7IHRhc2sgfSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZGVsaWJlcmF0ZScpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gYXJncy50cmltKClcbiAgICAgIGlmIChjdGwuc2VuZERlbGliZXJhdGUoZGVjaXNpb24pKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24oeyBkZWNpc2lvbiB9KVxuICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbW9kZWwnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zd2l0Y2hNb2RlbEJ5TmFtZShhcmdzKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVmcmVzaC1tb2RlbHMnKSByZXR1cm4gcmVmcmVzaE1vZGVscygpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGlmICghc3RhdGUuc2Vzc2lvbikgcmV0dXJuIGZsYXNoKCdubyBjdXJyZW50IHNlc3Npb24gdG8gZGVsZXRlJylcbiAgICAgIHNldFNob3dEZWxldGVDb25maXJtKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Jld2luZCcpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGlmICh1c2VyRW50cmllcyhkZXJpdmVkKCkpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2NsZWFyJykgcmV0dXJuIGN0bC5jbGVhcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbXBhY3QnKSByZXR1cm4gcGVyZm9ybUNvbXBhY3Rpb24oYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29zdCcpIHtcbiAgICAgIGNvbnN0IGNvc3QgPSBjdGwuY29zdFN1bW1hcnkoKVxuICAgICAgaWYgKCFjb3N0KSByZXR1cm4gZmxhc2goJ25vIHVzYWdlIHlldCcpXG4gICAgICBjb25zdCBiYXNlID0gYCQke2Nvc3Quc3BlbnQudG9GaXhlZCg0KX0gc3BlbnQgICR7Y29zdC5wcm9tcHRUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gaW4gICR7Y29zdC5jb21wbGV0aW9uVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IG91dGBcbiAgICAgIGZsYXNoKGNvc3Quc3BlbnQgLSBjb3N0LmFjdGl2ZSA+IDAuMDAwMDUgPyBgJHtiYXNlfSAgY3VycmVudCBjb252ZXJzYXRpb24gJCR7Y29zdC5hY3RpdmUudG9GaXhlZCg0KX1gIDogYmFzZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZXhwb3J0Jykge1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGN0bC5leHBvcnRNYXJrZG93bigpXG4gICAgICBmbGFzaChgZXhwb3J0ZWQgdG8gJHtmaWxlfWApXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoQXV0aFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBvcGVuYWkgPSBhd2FpdCBvcGVuYWlTdGF0dXMoKS5jYXRjaCgoKSA9PiAoeyBjb25uZWN0ZWQ6IGZhbHNlLCBlbWFpbDogbnVsbCB9KSlcbiAgICBzZXRBdXRoUHJvdmlkZXJzKFtcbiAgICAgIHsgaWQ6ICdvcGVuYWknLCBsYWJlbDogJ09wZW5BSSAgQ2hhdEdQVCAvIENvZGV4IHBsYW4nLCBjb25uZWN0ZWQ6IG9wZW5haS5jb25uZWN0ZWQsIGVtYWlsOiBvcGVuYWkuZW1haWwgfSxcbiAgICBdKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbkNvbm5lY3RQYW5lbCgpIHtcbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKHRydWUpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICB9XG5cbiAgZnVuY3Rpb24gY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgaWYgKHByb3ZpZGVyLmlkICE9PSAnb3BlbmFpJykgcmV0dXJuXG4gICAgc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSlcbiAgICBmbGFzaCgnb3BlbmluZyB5b3VyIGJyb3dzZXIgZm9yIENoYXRHUFQgc2lnbi1pbi4uLicpXG4gICAgY3RsLmNvbm5lY3RQcm92aWRlcigpXG4gICAgICAudGhlbigoeyBlbWFpbCwgY291bnQgfSkgPT4gZmxhc2goYGNvbm5lY3RlZCBhcyAke2VtYWlsIHx8ICd5b3VyIENoYXRHUFQgYWNjb3VudCd9ICAke2NvdW50fSBjb2RleCBtb2RlbHMgdW5sb2NrZWQgaW4gL21vZGVsYCkpXG4gICAgICAuY2F0Y2goKGVycikgPT4gZmxhc2goYGNvbm5lY3QgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEyMCl9YCkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaXNjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZGlzY29ubmVjdEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHByb3ZpZGVyLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZGlzY29ubmVjdEFybSA9IHsgaWQ6IHByb3ZpZGVyLmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkaXNjb25uZWN0ICR7cHJvdmlkZXIubGFiZWx9ICh5b3Ugd2lsbCBuZWVkIHRvIHNpZ24gaW4gYWdhaW4pYClcbiAgICB9XG4gICAgcmVmcy5kaXNjb25uZWN0QXJtID0gbnVsbFxuICAgIGF3YWl0IGN0bC5kaXNjb25uZWN0UHJvdmlkZXIoKVxuICAgIHJlZnJlc2hBdXRoUHJvdmlkZXJzKClcbiAgICBmbGFzaCgnZGlzY29ubmVjdGVkIGZyb20gQ2hhdEdQVCcpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVzdW1lUGFuZWwoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9ICsrcmVmcy5yZXN1bWVPcGVuXG4gICAgY29uc3Qgc2NvcGVzID0gWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXVxuICAgIHNldFJlc3VtZVNjb3BlcyhzY29wZXMpXG4gICAgc2V0UmVzdW1lU2NvcGUoMClcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoU2Vzc2lvbnMoMCwgc2NvcGVzKVxuICAgIGxpc3RXb3JrdHJlZXMob3duZXJSb290KGJvb3Qucm9vdCkpLnRoZW4oKHRyZWVzKSA9PiB7XG4gICAgICBpZiAodHJlZXMubGVuZ3RoIDwgMiB8fCAhc2hvd1Jlc3VtZVBhbmVsKCkgfHwgcmVxdWVzdCAhPT0gcmVmcy5yZXN1bWVPcGVuKSByZXR1cm5cbiAgICAgIHNldFJlc3VtZVNjb3BlcyhbJ3JlcG9zaXRvcnknLCAnY2hlY2tvdXQnLCAnZXZlcnl3aGVyZSddKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoU2Vzc2lvbnMoc2NvcGVJbmRleCwgc2NvcGVzID0gcmVzdW1lU2NvcGVzKCkpIHtcbiAgICBzZXRSZXN1bWVMb2FkaW5nKHRydWUpXG4gICAgY3RsLmxpc3RSZXN1bWVTZXNzaW9ucyhzY29wZXNbc2NvcGVJbmRleF0pXG4gICAgICAudGhlbihzZXRSZXN1bWVTZXNzaW9ucylcbiAgICAgIC5maW5hbGx5KCgpID0+IHNldFJlc3VtZUxvYWRpbmcoZmFsc2UpKVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvcnRlblBhdGgocGF0aCkge1xuICAgIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKGhvbWUpID8gcGF0aC5yZXBsYWNlKGhvbWUsICd+JykgOiBwYXRoXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUHJvamVjdFBhbmVsKCkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dQcm9qZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoUHJvamVjdHMoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFByb2plY3RzKCkge1xuICAgIHNldFByb2plY3RzTG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsaXN0ID0gYXdhaXQgY3RsLmxpc3RQcm9qZWN0cygpXG4gICAgICBzZXRQcm9qZWN0cyhsaXN0Lm1hcCgocHJvamVjdCkgPT4gKHtcbiAgICAgICAgLi4ucHJvamVjdCxcbiAgICAgICAgcGF0aDogc2hvcnRlblBhdGgocHJvamVjdC5yb290KSxcbiAgICAgICAgY2hlY2tvdXRzOiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0KSA9PiAoeyAuLi5jaGVja291dCwgcGF0aDogc2hvcnRlblBhdGgoY2hlY2tvdXQucm9vdCkgfSkpLFxuICAgICAgfSkpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRQcm9qZWN0c0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWRkUHJvamVjdFdvcmt0cmVlKGNoZWNrb3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBjdGwuYWRkV29ya3RyZWUoY2hlY2tvdXQub3duZXIpXG4gICAgICBhd2FpdCBjdGwuc3dpdGNoVG9Xb3JrdHJlZSh7IHJvb3Q6IHRyZWUucGF0aCB9KVxuICAgICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGB3b3JrdHJlZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUHJvamVjdENoZWNrb3V0KGNoZWNrb3V0KSB7XG4gICAgaWYgKGNoZWNrb3V0Lndvcmt0cmVlKSB7XG4gICAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgcmVtb3ZlIHRoZSBjdXJyZW50IHdvcmt0cmVlICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5yb290ICE9PSBjaGVja291dC5yb290IHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgICAgfVxuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3RsLmRlbGV0ZVdvcmt0cmVlKGNoZWNrb3V0KVxuICAgICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgICBmbGFzaChgcmVtb3ZlZCAke2NoZWNrb3V0LmJyYW5jaCB8fCBjaGVja291dC5wYXRofWApXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZmxhc2goYHJlbW92ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNoZWNrb3V0LmN1cnJlbnQpIHJldHVybiBmbGFzaCgnY2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudCBwcm9qZWN0ICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnByb2plY3REZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke2NoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgIH1cbiAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVByb2plY3REYXRhKGNoZWNrb3V0LnJvb3QpXG4gICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgZmxhc2goYGRlbGV0ZWQgJHtjaGVja291dC5wYXRofSAgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9IHJlbW92ZWRgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGRlbGV0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2Vzc2lvbk1ldGEobWV0YSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5zZXNzaW9uPy5pZCA9PT0gbWV0YS5oZWFkZXIuaWRcbiAgICBpZiAoY3VycmVudCAmJiBidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZGVsZXRlQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtZXRhLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kZWxldGVBcm0gPSB7IGZpbGU6IG1ldGEuZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGVsZXRlIFwiJHttZXRhLnRpdGxlLnNsaWNlKDAsIDUwKX1cImApXG4gICAgfVxuICAgIHJlZnMuZGVsZXRlQXJtID0gbnVsbFxuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkpIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTZXNzaW9uKG1ldGEuZmlsZSlcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgZmxhc2goJ3Nlc3Npb24gZGVsZXRlZCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXN1bWVTZXNzaW9uKG1ldGEpIHtcbiAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICBhd2FpdCBjdGwucmVzdW1lKG1ldGEpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuSGlzdG9yeVNlYXJjaCgpIHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2VudCgpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZXNzaW9uKSlcbiAgICBzZXRTaG93SGlzdG9yeVBhbmVsKHRydWUpXG4gICAgc2V0SGlzdFNjb3BlKDApXG4gIH1cblxuICBmdW5jdGlvbiBkZWR1cGVQcm9tcHRzKHBvb2wpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gICAgY29uc3Qgb3V0ID0gW11cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi5wb29sXS5zb3J0KChhLCBiKSA9PiBiLmF0IC0gYS5hdCkpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhlbnRyeS50ZXh0KSkgY29udGludWVcbiAgICAgIHNlZW4uYWRkKGVudHJ5LnRleHQpXG4gICAgICBvdXQucHVzaChlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoSGlzdFNjb3BlKG5leHQpIHtcbiAgICBzZXRIaXN0U2NvcGUobmV4dClcbiAgICBpZiAobmV4dCA9PT0gMCkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoc2VudCgpKSlcbiAgICBjb25zdCBwcm9qZWN0ID0gYXdhaXQgbG9hZFByb2plY3RQcm9tcHRzKHJvb3QpXG4gICAgaWYgKG5leHQgPT09IDEpIHJldHVybiBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3RdKSlcbiAgICBjb25zdCBnbG9iYWwgPSBhd2FpdCBsb2FkR2xvYmFsUHJvbXB0cygpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhbLi4uc2VudCgpLCAuLi5wcm9qZWN0LCAuLi5nbG9iYWxdKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIG9wdCkge1xuICAgIGF3YWl0IGN0bC5yZXdpbmQodGFyZ2V0LCBvcHQua2V5KVxuICAgIHNldFJld2luZFN0ZXAobnVsbClcbiAgICBzZXRSZXdpbmRUYXJnZXQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmQob3B0KSB7XG4gICAgcmV0dXJuIHBlcmZvcm1SZXdpbmRUbyhyZXdpbmRUYXJnZXQoKSwgb3B0KVxuICB9XG5cbiAgY29uc3QgdW5kb1Jld2luZCA9IGN0bC51bmRvUmV3aW5kXG5cbiAgYXN5bmMgZnVuY3Rpb24gY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCBjdGwuZGVsZXRlQ3VycmVudFNlc3Npb24oKVxuICAgIHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICBjb25zdCBhbnlQYW5lbCA9ICgpID0+XG4gICAgc2hvd01vZGVsUGFuZWwoKSB8fCBzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgfHwgc2hvd0VmZm9ydFBhbmVsKCkgfHwgc2hvd1RoZW1lUGFuZWwoKSB8fCBzaG93Q29uZmlnUGFuZWwoKSB8fCBzaG93RGVsZXRlQ29uZmlybSgpIHx8IHNob3dNZW1vcnlQYW5lbCgpIHx8IHNob3dIaXN0b3J5UGFuZWwoKSB8fCBzaG93UmVzdW1lUGFuZWwoKSB8fCBzaG93TWNwUGFuZWwoKSB8fFxuICAgIHNob3dQcm9qZWN0UGFuZWwoKSB8fCBzaG93V2FrZXVwc1BhbmVsKCkgfHwgc2hvd0Nvbm5lY3RQYW5lbCgpIHx8XG4gICAgY29tbWFuZEZvcm0oKSAhPT0gbnVsbCB8fCBpbmZvUGFuZWwoKSAhPT0gbnVsbCB8fCByZXdpbmRTdGVwKCkgIT09IG51bGxcblxuICAvLyBldmVyeSBmb2N1cy10YWtpbmcgcGFuZWwgZGltcyB0aGUgY29udmVyc2F0aW9uIGJlaGluZCBpdDsgdGhlIHRoZW1lXG4gIC8vIHBpY2tlciBpcyB0aGUgb25lIGV4ZW1wdGlvbiwgc2luY2UgaXRzIGpvYiBpcyBwcmV2aWV3aW5nIHBhbGV0dGVzIG9uXG4gIC8vIHRoZSB1bmRpbW1lZCB1aVxuICBjb25zdCBkaW1taW5nUGFuZWwgPSAoKSA9PiBhbnlQYW5lbCgpICYmICFzaG93VGhlbWVQYW5lbCgpXG5cbiAgZnVuY3Rpb24gY2FuY2VsQWdlbnQoYWdlbnQpIHtcbiAgICBjdGwuY2FuY2VsQWdlbnQoYWdlbnQuaWQpXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzQWdlbnQoYWdlbnQpIHtcbiAgICBpZiAoIWN0bC5kaXNtaXNzQWdlbnQoYWdlbnQuaWQpKSByZXR1cm5cbiAgICBpZiAodmlld2VkQWdlbnRJZCgpID09PSBhZ2VudC5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKSB7XG4gICAgaWYgKGl0ZW0uc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGludGVycnVwdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3RsLmRpc21pc3NEZWxpYmVyYXRpb24oaXRlbS5kZWxpYmVyYXRpb25JZClcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpID09PSBpdGVtLmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzU2hlbGwoc2hlbGwpIHtcbiAgICBib290LnNoZWxscy5kaXNtaXNzKHNoZWxsLmlkKVxuICAgIGlmICh2aWV3ZWRTaGVsbElkKCkgPT09IHNoZWxsLmlkKSBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBraWxsU2hlbGwoc2hlbGwpIHtcbiAgICBpZiAoc2hlbGwuc3RhdHVzICE9PSAncnVubmluZycpIHJldHVybiBmbGFzaChgc2hlbGwgJHtzaGVsbC5pZH0gYWxyZWFkeSBleGl0ZWRgKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5zaGVsbEtpbGxBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSBzaGVsbC5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnNoZWxsS2lsbEFybSA9IHsgaWQ6IHNoZWxsLmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBraWxsIFwiJHtzaGVsbC5kZXNjcmlwdGlvbiB8fCBgc2hlbGwgJHtzaGVsbC5pZH1gfVwiYClcbiAgICB9XG4gICAgcmVmcy5zaGVsbEtpbGxBcm0gPSBudWxsXG4gICAgYm9vdC5zaGVsbHMua2lsbChzaGVsbC5pZCwgJ3VzZXInKVxuICB9XG5cbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gY3RsLmFjdGl2aXR5KClcbiAgc2hlbGxzVmVyc2lvbigpXG4gIGNvbnN0IHNoZWxsUm93cyA9IGN0bC5zaGVsbFJvd3MoKVxuICBpZiAocXVlc3Rpb25SZXF1ZXN0KCkpIHtcbiAgICBmbS5pdGVtKCdxdWVzdGlvbicpXG4gICAgaWYgKCFmbS5pcygncXVlc3Rpb24nKSkgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSBmbS5pdGVtKCdpbnB1dCcpXG4gICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICBmbS5ncm91cCgnYWN0aXZpdHktc3RyaXAnLCB7IGl0ZW1zOiBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdzaGVsbC1zdHJpcCcsIHsgaXRlbXM6IFsnc2hlbGwtbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgICBpZiAoYWdlbnRSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdhZ2VudC1zdHJpcCcsIHsgaXRlbXM6IFsnYWdlbnQtbWFpbicsIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmIChyZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkge1xuICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IGZhbHNlXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH1cbiAgfVxuICB1c2VGb2N1c1RyYXAoYW55UGFuZWwoKSB8fCB2aWV3KCkgPT09ICdoZWxwJylcbiAgdXNlU2VsZWN0aW9uKHtcbiAgICBvbkNvcHk6ICh0ZXh0KSA9PiBmbGFzaChgY29waWVkICR7dGV4dC5sZW5ndGh9ICR7dGV4dC5sZW5ndGggPT09IDEgPyAnY2hhcmFjdGVyJyA6ICdjaGFyYWN0ZXJzJ31gKSxcbiAgfSlcblxuICBmdW5jdGlvbiBuYXZpZ2F0ZUFjdGl2aXR5U3RyaXAoZXZlbnQpIHtcbiAgICBjb25zdCBpdGVtcyA9IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHNoZWxsKSA9PiBgc2hlbGwtJHtzaGVsbC5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYWdlbnQpID0+IGBhZ2VudC0ke2FnZW50LmlkfWApXVxuICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVtcy5pbmRleE9mKGZtLmN1cnJlbnQoKSlcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnRcbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gICAgZWxzZSBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSBpdGVtcy5sZW5ndGggLSAxXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IE1hdGgubWluKGl0ZW1zLmxlbmd0aCAtIDEsIGN1cnJlbnQgKyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gKGN1cnJlbnQgKyAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IChjdXJyZW50IC0gMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IHRhcmdldCA9IGl0ZW1zW25leHRdXG4gICAgZm0uZm9jdXModGFyZ2V0KVxuICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsKVxuICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ2FnZW50LScpID8gdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsKVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVTdHJpcChldmVudCwgcHJlZml4LCByb3dzLCB7IG1haW4gPSBmYWxzZSwgcHJldmlld0FnZW50ID0gZmFsc2UsIHByZXZpZXdTaGVsbCA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGNvbnN0IGl0ZW1zID0gWy4uLihtYWluID8gW2Ake3ByZWZpeH0tbWFpbmBdIDogW10pLCAuLi5yb3dzLm1hcCgocm93KSA9PiBgJHtwcmVmaXh9LSR7cm93LmlkfWApXVxuICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVtcy5pbmRleE9mKGZtLmN1cnJlbnQoKSlcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnRcbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gICAgZWxzZSBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSBpdGVtcy5sZW5ndGggLSAxXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IE1hdGgubWluKGl0ZW1zLmxlbmd0aCAtIDEsIGN1cnJlbnQgKyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gKGN1cnJlbnQgKyAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IChjdXJyZW50IC0gMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IHRhcmdldCA9IGl0ZW1zW25leHRdXG4gICAgZm0uZm9jdXModGFyZ2V0KVxuICAgIGlmIChwcmV2aWV3QWdlbnQpIHtcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfVxuICAgIGlmIChwcmV2aWV3U2hlbGwpIHtcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgdXNlSW5wdXQoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlZXIoKSAmJiBmbS5pcygnc3RlZXInKSAmJiAhc3RlZXIoKS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIGFwcGx5U3RlZXIoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2VTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSBzdGFydFN0ZWVyRWRpdCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdhJykgc3RhcnRTdGVlckFkZCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd4JyB8fCBldmVudC5rZXkgPT09ICdkJykgc3RhZ2VTdGVlckRlbGV0ZSgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCBkcmFmdC5zZWxlY3RlZCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKSwgZHJhZnQuc2VsZWN0ZWQgKyAxKVxuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCB9KVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdob21lJyB8fCBldmVudC5rZXkgPT09ICdnJykge1xuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzWzBdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkOiAwIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2VuZCcgfHwgZXZlbnQua2V5ID09PSAnRycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udmVyc2F0aW9uU2VhcmNoLmhhbmRsZUlucHV0KGV2ZW50LCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzKSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IHNoZWxsID0gdGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50ID0gaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicgPyBudWxsIDogaXRlbVxuICAgICAgaWYgKHNoZWxsKSBzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/IGtpbGxTaGVsbChzaGVsbCkgOiBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGFnZW50KSBbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoYWdlbnQuc3RhdHVzKSA/IGNhbmNlbEFnZW50KGFnZW50KSA6IGRpc21pc3NBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdzaGVsbCcsIHNoZWxsUm93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3U2hlbGw6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCAnYWdlbnQnLCBhZ2VudFJvd3MsIHsgbWFpbjogdHJ1ZSwgcHJldmlld0FnZW50OiB0cnVlIH0pKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCBzaGVsbCA9IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHNoZWxsUm93cy5maW5kKChzKSA9PiBgc2hlbGwtJHtzLmlkfWAgPT09IGZtLmN1cnJlbnQoKSlcbiAgICAgIGlmIChzaGVsbCkge1xuICAgICAgICBpZiAoc2hlbGwuc3RhdHVzID09PSAncnVubmluZycpIGtpbGxTaGVsbChzaGVsbClcbiAgICAgICAgZWxzZSBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KVxuICAgICAgaWYgKGl0ZW0/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nKSBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pXG4gICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgIGlmIChbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoaXRlbS5zdGF0dXMpKSBjYW5jZWxBZ2VudChpdGVtKVxuICAgICAgICBlbHNlIGRpc21pc3NBZ2VudChpdGVtKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyAmJiBidXN5KCkgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGludGVycnVwdCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgICBpZiAobm93IC0gcmVmcy5xdWl0QXQgPCAxNTAwKSB7XG4gICAgICAgIGF3YWl0IGN0bC5zaHV0ZG93bigpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmcy5xdWl0QXQgPSBub3dcbiAgICAgICAgY29uc3QgcnVubmluZyA9IGJvb3Quc2hlbGxzLnJ1bm5pbmcoKVxuICAgICAgICBmbGFzaChydW5uaW5nID8gYCR7cnVubmluZ30gJHtydW5uaW5nID09PSAxID8gJ3NoZWxsJyA6ICdzaGVsbHMnfSBydW5uaW5nICBjdHJsK2MgYWdhaW4gdG8gZXhpdCBhbmQga2lsbCAke3J1bm5pbmcgPT09IDEgPyAnaXQnIDogJ3RoZW0nfWAgOiAnY3RybCtjIGFnYWluIHRvIGV4aXQnKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2ZlZWQnKSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKGJ1c3koKSkgZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBlbHNlIGlmICh1c2VyRW50cmllcyhkZXJpdmVkKCkpLmxlbmd0aCA9PT0gMCkgZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBlbHNlIHNldFJld2luZFN0ZXAoJ3BpY2snKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKGJ1c3koKSkgZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIGVsc2Ugb3BlblJlc3VtZVBhbmVsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3AnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBvcGVuUHJvamVjdFBhbmVsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYicgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gW251bGwsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICAgICAgY29uc3QgbmV4dCA9IG9yZGVyWyhvcmRlci5pbmRleE9mKGVmZm9ydCgpID8/IG51bGwpICsgMSkgJSBvcmRlci5sZW5ndGhdXG4gICAgICAgIHNldFNlc3Npb25FZmZvcnQobmV4dClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd0hpc3RvcnlQYW5lbCgpKSB7XG4gICAgICBzd2l0Y2hIaXN0U2NvcGUoKGhpc3RTY29wZSgpICsgMSkgJSBISVNUT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgICBzZXRNZW1TY29wZSgocykgPT4gKHMgKyAxKSAlIE1FTU9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgICAgY29uc3QgbmV4dCA9IChyZXN1bWVTY29wZSgpICsgMSkgJSByZXN1bWVTY29wZXMoKS5sZW5ndGhcbiAgICAgIHNldFJlc3VtZVNjb3BlKG5leHQpXG4gICAgICByZWZyZXNoU2Vzc2lvbnMobmV4dClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneicgJiYgc3RhdGUucmV3aW5kVW5kbyAmJiAhYnVzeSgpICYmIHZpZXcoKSA9PT0gJ2NoYXQnKSB7XG4gICAgICB1bmRvUmV3aW5kKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGZtdEVsYXBzZWQgPSAocykgPT4gKHMgPCA2MCA/IGAke3N9c2AgOiBgJHtNYXRoLmZsb29yKHMgLyA2MCl9bSAke3MgJSA2MH1zYClcbiAgY29uc3QgZWxhcHNlZCA9IGZtdEVsYXBzZWQoYnVzeSgpID8gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCgpKSAvIDEwMDApKSA6IDApXG5cbiAgY29uc3Qgc2xhc2hSYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKVxuICBjb25zdCBzbGFzaFF1ZXJ5ID0gc2xhc2hSYW5nZT8ucXVlcnkgPz8gbnVsbFxuICBjb25zdCBzaG93Q29tbWFuZHMgPSBzbGFzaFJhbmdlICE9PSBudWxsICYmICFhbnlQYW5lbCgpXG4gIGNvbnN0IG1hdGNoZWRDb21tYW5kcyA9ICFzaG93Q29tbWFuZHNcbiAgICA/IFtdXG4gICAgOiBjbWRDeWNsZSgpXG4gICAgICA/IGNtZEN5Y2xlKCkubWF0Y2hlc1xuICAgICAgOiBhbGxDb21tYW5kcy5maWx0ZXIoKGMpID0+IChjLmNvbW1hbmQgfHwgKHNsYXNoUmFuZ2Uuc3RhcnQgPT09IDAgJiYgc2xhc2hSYW5nZS5lbmQgPT09IGlucHV0KCkubGVuZ3RoKSkgJiYgYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzbGFzaFF1ZXJ5LnRvTG93ZXJDYXNlKCkpKVxuXG4gIGNvbnN0IGF0TWF0Y2ggPSBpbnB1dCgpLm1hdGNoKC8oXnxbXFxzKF0pQChbXlxcc0BdKikkLylcbiAgY29uc3Qgc2hvd0ZpbGVzID0gYXRNYXRjaCAhPT0gbnVsbCAmJiAhc2hvd0NvbW1hbmRzICYmICFmaWxlc0Rpc21pc3NlZCgpICYmICFhbnlQYW5lbCgpXG4gIGlmIChzaG93RmlsZXMpIHtcbiAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICB9KVxuICB9XG4gIGNvbnN0IG1hdGNoZWRGaWxlcyA9IHNob3dGaWxlc1xuICAgID8gZmlsZUxpc3QoKVxuICAgICAgICAubWFwKChmKSA9PiBbZnV6enlTY29yZShhdE1hdGNoWzJdLCBmKSwgZl0pXG4gICAgICAgIC5maWx0ZXIoKFtzY29yZV0pID0+IHNjb3JlID49IDApXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlcbiAgICAgICAgLm1hcCgoWywgZl0pID0+IGYpXG4gICAgOiBbXVxuXG4gIGZ1bmN0aW9uIHBpY2tGaWxlKGYpIHtcbiAgICBjb25zdCB2ID0gaW5wdXQoKVxuICAgIGNvbnN0IGF0ID0gdi5sYXN0SW5kZXhPZignQCcpXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjdGwuYXR0YWNoUHJvamVjdEZpbGUoZilcbiAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgIHNldElucHV0KHYuc2xpY2UoMCwgYXQpICsgcGxhY2Vob2xkZXIgKyAnICcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldElucHV0KHYuc2xpY2UoMCwgYXQgKyAxKSArIGYgKyAnICcpXG4gICAgfVxuICAgIHNldEZpbGVJbmRleCgwKVxuICB9XG5cbiAgY29uc3QgY29tcEN0eCA9IGNvbXBsZXRpbmcoKSA/IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGlucHV0KCksIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSkgOiBudWxsXG4gIGNvbnN0IHNob3dDb21wbGV0aW9uID0gISFjb21wQ3R4ICYmIGNvbXBDdHgubWF0Y2hlcy5sZW5ndGggPiAwICYmICFzaG93Q29tbWFuZHMgJiYgIXNob3dGaWxlcyAmJiAhYW55UGFuZWwoKVxuXG4gIGNvbnN0IHJld2luZEVudHJpZXMgPSAoKSA9PiB1c2VyRW50cmllcyhkZXJpdmVkKCkpXG4gIGNvbnN0IHJld2luZE9wdGlvbnMgPSAoKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHJld2luZFRhcmdldCgpXG4gICAgaWYgKCF0YXJnZXQpIHJldHVybiBbXVxuICAgIGNvbnN0IHsgbXNncywgZWRpdHMgfSA9IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgdGFyZ2V0LmluZGV4KVxuICAgIGNvbnN0IGUgPSBlZGl0cy5sZW5ndGhcbiAgICBjb25zdCBlZGl0c0xhYmVsID0gYCR7ZX0gJHtlID09PSAxID8gJ2VkaXQnIDogJ2VkaXRzJ31gXG4gICAgY29uc3Qgb3B0cyA9IFtdXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdib3RoJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgYW5kIGNvbnZlcnNhdGlvbicsIGRlc2M6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7XG4gICAgICBrZXk6ICdjaGF0JyxcbiAgICAgIGxhYmVsOiBlID4gMCA/ICdyZXN0b3JlIGNvbnZlcnNhdGlvbiBvbmx5JyA6ICdyZXN0b3JlIGNvbnZlcnNhdGlvbicsXG4gICAgICBkZXNjOiBlID4gMCA/ICdjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBmaWxlIGNoYW5nZXMga2VwdCcgOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZHJvcHMgJHttc2dzfSBlbnRyaWVzYCxcbiAgICB9KVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnY29kZScsIGxhYmVsOiAncmVzdG9yZSBjb2RlIG9ubHknLCBkZXNjOiBgY29udmVyc2F0aW9uIGtlcHQgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHsga2V5OiAnc3VtbWFyeScsIGxhYmVsOiAncmV3aW5kIGFuZCBrZWVwIGEgc3VtbWFyeScsIGRlc2M6ICdkcm9wcGVkIGVudHJpZXMgY29sbGFwc2UgaW50byBhIG9uZS1saW5lIG5vdGUnIH0pXG4gICAgcmV0dXJuIG9wdHNcbiAgfSkoKVxuXG4gIGNvbnN0IHVzYWdlID0gbGl2ZVVzYWdlKCkgfHwgZGVyaXZlZCgpLnVzYWdlQWN0aXZlXG4gIGNvbnN0IGNvbnRleHRQZXJjZW50ID0gbW9kZWwoKS5jb250ZXh0ID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRNb2RlbCA9PT0gbW9kZWwoKS5uYW1lXG4gICAgPyBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoKGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zIC8gbW9kZWwoKS5jb250ZXh0KSAqIDEwMCkpXG4gICAgOiAwXG4gIGNvbnN0IHZpc2libGVTaGVsbHMgPSBzaGVsbFJvd3NcbiAgY29uc3Qgdmlld2VkU2hlbGwgPSB2aWV3ZWRTaGVsbElkKCkgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IHZpZXdlZFNoZWxsSWQoKSkgOiBudWxsXG4gIGNvbnN0IGNvbWJpbmVkQWN0aXZpdHkgPSB2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDBcbiAgY29uc3Qgc2hlbGxTdHJpcEZvY3VzID0gZm0uaXMoJ3NoZWxsLXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdzaGVsbC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRTaGVsbElkID0gc2hlbGxTdHJpcEZvY3VzICYmIHNoZWxsU3RyaXBGb2N1cyAhPT0gJ3NoZWxsLW1haW4nID8gc2hlbGxTdHJpcEZvY3VzLnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRTaGVsbCA9IGZvY3VzZWRTaGVsbElkID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSBmb2N1c2VkU2hlbGxJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZFNoZWxsID0gZm9jdXNlZFNoZWxsIHx8IHZpZXdlZFNoZWxsXG4gIGNvbnN0IHNoZWxsQWN0aW9uSGludCA9IGhpbnRlZFNoZWxsID8gYGN0cmwreCAke2hpbnRlZFNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJ2tpbGwnIDogJ2Rpc21pc3MnfWAgOiAnJ1xuICBjb25zdCBzaGVsbFdpbmRvd1RhcmdldCA9IHNoZWxsU3RyaXBGb2N1cyA9PT0gJ3NoZWxsLW1haW4nID8gMCA6IHZpc2libGVTaGVsbHMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSAoZm9jdXNlZFNoZWxsSWQgfHwgdmlld2VkU2hlbGxJZCgpKSlcbiAgY29uc3Qgc2hlbGxXaW5kb3dTdGFydCA9IHN0cmlwV2luZG93U3RhcnQoc2hlbGxXaW5kb3dPZmZzZXQoKSwgc2hlbGxXaW5kb3dUYXJnZXQsIHZpc2libGVTaGVsbHMubGVuZ3RoLCBTSEVMTF9TVFJJUF9NQVgpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIFNIRUxMX1NUUklQX01BWClcbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IHZpc2libGVBZ2VudHMgPSBhZ2VudFJvd3NcbiAgY29uc3Qgdmlld2VkQWdlbnQgPSB2aWV3ZWRBZ2VudElkKCkgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHZpZXdlZEFnZW50SWQoKSkgOiBudWxsXG4gIGNvbnN0IGFnZW50U3RyaXBGb2N1cyA9IGZtLmlzKCdhZ2VudC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnYWdlbnQtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnRJZCA9IGFnZW50U3RyaXBGb2N1cyAmJiBhZ2VudFN0cmlwRm9jdXMgIT09ICdhZ2VudC1tYWluJyA/IGFnZW50U3RyaXBGb2N1cy5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnQgPSBmb2N1c2VkQWdlbnRJZCA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gZm9jdXNlZEFnZW50SWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRBZ2VudCA9IGZvY3VzZWRBZ2VudCB8fCB2aWV3ZWRBZ2VudFxuICBjb25zdCBhZ2VudEFjdGlvbkhpbnQgPSBoaW50ZWRBZ2VudFxuICAgID8gYGN0cmwreCAke1sncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhoaW50ZWRBZ2VudC5zdGF0dXMpID8gJ2NhbmNlbCcgOiAnZGlzbWlzcyd9YFxuICAgIDogJydcbiAgY29uc3QgYWdlbnRXaW5kb3dUYXJnZXQgPSBhZ2VudFN0cmlwRm9jdXMgPT09ICdhZ2VudC1tYWluJ1xuICAgID8gMFxuICAgIDogdmlzaWJsZUFnZW50cy5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IChmb2N1c2VkQWdlbnRJZCB8fCB2aWV3ZWRBZ2VudElkKCkpKVxuICBjb25zdCBhZ2VudFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChhZ2VudFdpbmRvd09mZnNldCgpLCBhZ2VudFdpbmRvd1RhcmdldCwgdmlzaWJsZUFnZW50cy5sZW5ndGgsIEFHRU5UX1NUUklQX01BWClcbiAgaWYgKGFnZW50V2luZG93U3RhcnQgIT09IGFnZW50V2luZG93T2Zmc2V0KCkpIHNldEFnZW50V2luZG93T2Zmc2V0KGFnZW50V2luZG93U3RhcnQpXG4gIGNvbnN0IGFnZW50V2luZG93ID0gdmlzaWJsZUFnZW50cy5zbGljZShhZ2VudFdpbmRvd1N0YXJ0LCBhZ2VudFdpbmRvd1N0YXJ0ICsgQUdFTlRfU1RSSVBfTUFYKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICFsaXZlUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSlcbiAgY29uc3QgZGVsaWJlcmF0aW9uVmlldyA9IGFjdGl2ZUFnZW50Py5yb2xlID09PSAnZGVsaWJlcmF0aW9uJ1xuICBjb25zdCBpc29sYXRlZFRyYW5zY3JpcHQgPSBhY3RpdmVBZ2VudCB8fCBhY3RpdmVTaGVsbFxuICBjb25zdCBncm91cEl0ZW1zID0gKHNvdXJjZSwgYWN0aXZlID0gZmFsc2UpID0+IHN0ZWVyKClcbiAgICA/IGNvbGxhcHNlU3RlZXJUb29scyhzb3VyY2UpXG4gICAgOiBjb21wYWN0VG9vbEhpc3RvcnkoKVxuICAgICAgPyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoc291cmNlLCBhY3RpdmUpXG4gICAgICA6IHNvdXJjZVxuICBjb25zdCB0cmFuc2NyaXB0SXRlbXMgPSBncm91cEl0ZW1zKHRyYW5zY3JpcHQsIGFjdGl2ZUFnZW50Py5zdGF0dXMgPT09ICdydW5uaW5nJylcbiAgY29uc3Qgd2luZG93ZWQgPSBkZWxpYmVyYXRpb25WaWV3ID8geyBpdGVtczogdHJhbnNjcmlwdEl0ZW1zLCBoaWRkZW5JdGVtczogMCwgaGlkZGVuQ291bnQ6IDAgfSA6IHRyYW5zY3JpcHRXaW5kb3codHJhbnNjcmlwdEl0ZW1zLCBoaXN0V2luZG93KCkpXG4gIGNvbnN0IGhpZGRlbkNvdW50ID0gd2luZG93ZWQuaGlkZGVuQ291bnRcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyldXG4gIGNvbnN0IHByZXBhcmVkQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uU2VhcmNoLnByZXBhcmUodmlzaWJsZUl0ZW1zKVxuICBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gcHJlcGFyZWRDb252ZXJzYXRpb24ubWF0Y2hlc1xuICBjb25zdCBpdGVtcyA9IHByZXBhcmVkQ29udmVyc2F0aW9uLml0ZW1zXG5cbiAgY29uc3Qgd2lkZUxheW91dCA9IHdpZGVTaWRlYmFyKCkgJiYgdGVybWluYWxXaWR0aCgpID4gMTYwXG4gIGNvbnN0IHNob3dDb21wb3NlckFjdGlvbnMgPSAhc3RlZXIoKSAmJiAhdmlld2VkQWdlbnQgJiYgIXZpZXdlZFNoZWxsICYmICFhbnlQYW5lbCgpICYmIHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgd2lkZVNpZGViYXI6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZXNlYXJjaEFnZW50TGltaXQnKSB7XG4gICAgICAgICAgICBzZXRSZXNlYXJjaEFnZW50TGltaXQodmFsdWUpXG4gICAgICAgICAgICBib290LnJlc2VhcmNoQWdlbnRMaW1pdCA9IHZhbHVlXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IHJlc2VhcmNoOiB7IGFnZW50TGltaXQ6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0Q29tcGFjdFRvb2xIaXN0b3J5KHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGNvbXBhY3RUb29sSGlzdG9yeTogdmFsdWUgfSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246IHdpZGVMYXlvdXQgPyAncm93JyA6ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSwgYmc6IFBBTkVMX0JHIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAge2J1c3koKVxuICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPFNoaW1tZXIgY29sb3I9XCJibGFja1wiIGhpZ2hsaWdodD17UEFORUxfQkd9IGR1cmF0aW9uPXsxNTAwfSByZXZlcnNlPlxuICAgICAgICAgICAgICAgICAgICB7Y29tcGFjdGluZygpXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgICAgOiB0dXJuUGhhc2UoKSA9PT0gJ3RoaW5raW5nJyA/ICdUaGlua2luZycgOiB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyA/ICdXb3JraW5nJyA6ICdSZXNwb25kaW5nJ31cbiAgICAgICAgICAgICAgICAgIDwvU2hpbW1lcj5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2VsYXBzZWR9ICBlc2MgdG8gaW50ZXJydXB0YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19Pntib290LmRpc3BsYXlDd2R9PC90ZXh0Pn1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0Pn1cbiAgICAgICAge2dpdEluZm8/LmFkZGVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+e2ArJHtnaXRJbmZvLmFkZGVkfWB9PC90ZXh0Pn1cbiAgICAgICAge2dpdEluZm8/LnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2AtJHtnaXRJbmZvLnJlbW92ZWR9YH08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICB7dHJhbnNjcmlwdC5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX0+XG4gICAgICAgICAgPEVtcHR5U3RhdGUgdmVyc2lvbj17dmVyc2lvbn0gY2xvdWRzPXtjbG91ZHMoKX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJykgfHwgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKX1cbiAgICAgICAgICBmb2xsb3dGb2N1cz17c3RlZXIoKSA/IHN0ZWVyTGlzdEZvY3VzIDogbnVsbH1cbiAgICAgICAgICBmb2N1c1BhZGRpbmc9ezF9XG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgIG9uTWV0cmljcz17KG1ldHJpY3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdHJhbnNjcmlwdE1ldHJpY3MoKVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzPy52aXNpYmxlSGVpZ2h0ID09PSBtZXRyaWNzLnZpc2libGVIZWlnaHQgJiYgcHJldmlvdXM/LmNvbnRlbnRIZWlnaHQgPT09IG1ldHJpY3MuY29udGVudEhlaWdodCkgcmV0dXJuXG4gICAgICAgICAgICBzZXRUcmFuc2NyaXB0TWV0cmljcyhtZXRyaWNzKVxuICAgICAgICAgICAgaWYgKGhpZGRlbkNvdW50ID4gMCAmJiBtZXRyaWNzLnZpc2libGVIZWlnaHQgPiAwICYmIG1ldHJpY3MuY29udGVudEhlaWdodCA8PSBtZXRyaWNzLnZpc2libGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygoc2l6ZSkgPT4gc2l6ZSArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7XG4gICAgICAgICAgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pXG4gICAgICAgICAgLy8gYmFjayBhdCB0aGUgYm90dG9tOiBsb2FkZWQgaGlzdG9yeSBpcyBvZmYtc2NyZWVuLCBzbyByZS1oaWRpbmdcbiAgICAgICAgICAvLyBpdCBpcyBpbnZpc2libGUgYW5kIHJlc3RvcmVzIHRoZSBzbWFsbCByZW5kZXIgd2luZG93XG4gICAgICAgICAgaWYgKG1ldGE/LmF0Qm90dG9tICYmIGhpc3RXaW5kb3coKSA+IEhJU1RPUllfV0lORE9XKSBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwICYmIGhpZGRlbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8ga2VlcCB0aGUgdmlldyBhbmNob3JlZDogZXN0aW1hdGUgdGhlIHJvd3MgdGhlIG5ldyBiYXRjaCBhZGRzXG4gICAgICAgICAgICAvLyBhbmQgc2Nyb2xsIHBhc3QgdGhlbSBzbyB0aGUgY3VycmVudCB0b3AgaXRlbSBzdGF5cyBpbiBwbGFjZVxuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSBNYXRoLm1pbihISVNUT1JZX1dJTkRPVywgd2luZG93ZWQuaGlkZGVuSXRlbXMpXG4gICAgICAgICAgICBjb25zdCBhdmdSb3dzID0gTWF0aC5tYXgoMiwgTWF0aC5yb3VuZCgobWV0YT8ubWF4T2Zmc2V0IHx8IDApIC8gTWF0aC5tYXgoMSwgaXRlbXMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzZXRIaXN0V2luZG93KCh3KSA9PiB3ICsgSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgICBzZXRPZmZzZXQoYWRkZWQgKiBhdmdSb3dzKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE9mZnNldChuZXh0KVxuICAgICAgICB9fVxuICAgICAgICBzY3JvbGxiYXJcbiAgICAgID5cbiAgICAgICAgPENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciB0YXJnZXQ9e2NvbnZlcnNhdGlvblNlYXJjaC5zY3JvbGx9IC8+XG4gICAgICAgIHtoaWRkZW5Db3VudCA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjMwMyAke2hpZGRlbkNvdW50LnRvTG9jYWxlU3RyaW5nKCl9IG9sZGVyICR7aGlkZGVuQ291bnQgPT09IDEgPyAnbWVzc2FnZScgOiAnbWVzc2FnZXMnfSAgc2Nyb2xsIHRvIHRvcCB0byBsb2FkYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZWxpYmVyYXRpb25WaWV3ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd1c2VyJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDxEZWxpYmVyYXRpb25FeGNoYW5nZSB0dXJucz17aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpfSB2ZXJib3NlPXt2ZXJib3NlKCl9IHdpZGU9e3Rlcm1pbmFsV2lkdGgoKSA+PSAxMTB9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICAgIHshaXNvbGF0ZWRUcmFuc2NyaXB0ICYmIHN0cmVhbWluZygpICE9PSBudWxsICYmIHN0cmVhbWluZygpICE9PSAnJyAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSBrZXk9XCJzdHJlYW1pbmdcIiBpdGVtPXt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH19IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgIHtjb252ZXJzYXRpb25TZWFyY2guYWN0aXZlKCkgPyAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaEJhciBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH0gbWF0Y2hlcz17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc30gLz5cbiAgICAgICAgKSA6IGZtLmlzKCdmZWVkJykgJiYgIWFueVBhbmVsKCkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogYWNjZW50KCksIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6ICdibGFjaycgfX0+eydqL2sgIFx1MjE5MS9cdTIxOTMgc2Nyb2xsICAgZy9HIGVuZHMgICAvIHNlYXJjaCAgIGN0cmwtdS9kIHBhZ2UnfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94Pn1cblxuICAgICAgeyhleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7ZXhwZWRpdGVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YGV4cGVkaXRlZC0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57J1x1MjFBMCAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogYWNjZW50KCkgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnICBhZnRlciBuZXh0IHRvb2wgIFx1MjE5MSB0byBlZGl0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge3F1ZXVlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BwZW5kaW5nLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnXHUyMDNBICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiBleHBlZGl0ZWQoKS5sZW5ndGggPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICBwZW5kaW5nICBcdTIxOTEgZWRpdCAgXHUyMTkyIHNlbmQgYWZ0ZXIgbmV4dCB0b29sJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge2NvbW1hbmRGb3JtKCkgJiYgPENvbW1hbmRGb3JtXG4gICAgICAgIG5hbWU9e2NvbW1hbmRGb3JtKCkubmFtZX1cbiAgICAgICAgZmllbGRzPXtjb21tYW5kRm9ybSgpLmZpZWxkc31cbiAgICAgICAgZmlsZXM9e2ZpbGVMaXN0KCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZXMpID0+IGZpbmlzaENvbW1hbmQoY29tbWFuZEZvcm0oKSwgdmFsdWVzKX1cbiAgICAgICAgb25DYW5jZWw9eygpID0+IHsgc2V0Q29tbWFuZEZvcm0obnVsbCk7IHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGw7IGZtLmZvY3VzKCdpbnB1dCcpIH19XG4gICAgICAvPn1cblxuICAgICAge3F1ZXN0aW9uUmVxdWVzdCgpICYmIChcbiAgICAgICAgPFF1ZXN0aW9uRm9ybVxuICAgICAgICAgIHJlcXVlc3Q9e3F1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdxdWVzdGlvbicpICYmICFhbnlQYW5lbCgpfVxuICAgICAgICAgIG9uU3VibWl0PXsoYW5zd2VycykgPT4ge1xuICAgICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICAgICAgICAgIGN0bC5hbnN3ZXJRdWVzdGlvbihhbnN3ZXJzKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuY2FuY2VsUXVlc3Rpb24oKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c3RlZXIoKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntzdGVlcigpLmVkaXRpbmcgPyBgJHtzdGVlcigpLmFkZGluZyA/ICdBZGQnIDogJ0VkaXQnfSAke3N0ZWVyKCkucm9sZX1gIDogYFN0ZWVyICAke3N0ZWVyKCkuY2hhbmdlcy5sZW5ndGh9IHN0YWdlZGB9PC90ZXh0PlxuICAgICAgICAgIHtzdGVlcigpLmVkaXRpbmcgPyAoXG4gICAgICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm0uaXMoJ3N0ZWVyJyl9XG4gICAgICAgICAgICAgIHZhbHVlPXtzdGVlclRleHQoKX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e3N0YWdlU3RlZXJUZXh0fVxuICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICAgICAgICAgICAgICBzZXRTdGVlcih7IC4uLnN0ZWVyKCksIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gU1RFRVJfUk9MRVMuaW5kZXhPZihzdGVlcigpLnJvbGUpXG4gICAgICAgICAgICAgICAgICBzZXRTdGVlcih7IC4uLnN0ZWVyKCksIHJvbGU6IFNURUVSX1JPTEVTWyhhdCArIDEpICUgU1RFRVJfUk9MRVMubGVuZ3RoXSB9KVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICAgICAgY2xlYXJPblN1Ym1pdFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnXHUyMTkxXHUyMTkzIHNlbGVjdCAgZW50ZXIgZWRpdCAgYSBhZGQgYWZ0ZXIgIHgvZCBkZWxldGUgIGN0cmwrcyBhcHBseSAgZXNjIGRpc2NhcmQnfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtwZWVyU3RhdHVzKCkgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwZWVyU3RhdHVzKCl9PC90ZXh0Pn1cbiAgICAgIHshc3RlZXIoKSAmJiAhdmlld2VkQWdlbnQgJiYgIXZpZXdlZFNoZWxsICYmIDxNb3VzZUZvY3VzUmVnaW9uIG9uUHJlc3M9eygpID0+IGZtLmZvY3VzKCdpbnB1dCcpfSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IGRlcml2ZWQoKS50aXRsZSkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3N0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVyaXZlZCgpLnRpdGxlID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtkZXJpdmVkKCkudGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7ZGVyaXZlZCgpLnRpdGxlfSBgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgIGNvbG9yPXtGR31cbiAgICAgICAgICBsaW5lQ291bnRlclxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICB2YWx1ZT17aW5wdXQoKX1cbiAgICAgICAgICBjdXJzb3JPZmZzZXQ9e2lucHV0Q3Vyc29yKCl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHNldElucHV0Q3Vyc29yKGN1cnNvcilcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHModiwge1xuICAgICAgICAgICAgICBhdHRhY2htZW50czogc3RhdGUuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIG5leHRJZDogKCkgPT4gKytzdGF0ZS5pbWFnZUNvdW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNldElucHV0KGNvbnZlcnRlZC50ZXh0LCBjb252ZXJ0ZWQudGV4dCA9PT0gdiA/IGlucHV0Q3Vyc29yKCkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldEZpbGVJbmRleCgwKVxuICAgICAgICAgICAgc2V0SGlzdElkeCgtMSlcbiAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChidXN5KCkpIGludGVycnVwdCgpXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gaW1wbGljaXRSZXdpbmRUYXJnZXQoZGVyaXZlZCgpLCBpbnB1dCgpKVxuICAgICAgICAgICAgICBpZiAodGFyZ2V0KSBwZXJmb3JtUmV3aW5kVG8odGFyZ2V0LCB7IGtleTogJ2NoYXQnIH0pXG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICAgICAgc2V0Q29tcGxldGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblN1Ym1pdD17c2VuZH1cbiAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZSkpIHJldHVybiB0cnVlXG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAndicpIHtcbiAgICAgICAgICAgICAgdm9pZCByZWZzLnBhc3RlSW1hZ2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ2cnKSB7XG4gICAgICAgICAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RhcnQoZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdvJykge1xuICAgICAgICAgICAgICB2b2lkIHJlZnMuY2FwdHVyZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwaWNrRmlsZShtYXRjaGVkRmlsZXNbTWF0aC5taW4oZmlsZUluZGV4KCksIG1hdGNoZWRGaWxlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93Q29tbWFuZHMgJiYgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY3ljbGUgPSBjbWRDeWNsZSgpXG4gICAgICAgICAgICAgIGlmICghY3ljbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGNtZEluZGV4KCksIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKHsgbWF0Y2hlczogbWF0Y2hlZENvbW1hbmRzIH0pXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgoc3RhcnQpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIG1hdGNoZWRDb21tYW5kc1tzdGFydF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoY21kSW5kZXgoKSArIDEpICUgY3ljbGUubWF0Y2hlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChuZXh0KVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgY3ljbGUubWF0Y2hlc1tuZXh0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KHJlcGxhY2VtZW50LnRleHQsIHJlcGxhY2VtZW50LmN1cnNvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncGFzdGUnICYmIGUudGV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGV4dHJhY3RJbWFnZVBhdGhzKGUudGV4dClcbiAgICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBwYXRocy5tYXAoKHBhdGgpID0+IGN0bC5hdHRhY2hJbWFnZShwYXRoKSlcbiAgICAgICAgICAgICAgICBjb25zdCBhdCA9IGUuY3Vyc29yID8/IGUudmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlcnMuam9pbignICcpICsgZS52YWx1ZS5zbGljZShhdCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2JhY2tzcGFjZScgJiYgZS5jdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvcikubWF0Y2goL1xcW0ltYWdlICNcXGQrXFxdJC8pXG4gICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGN0bC5kZXRhY2hJbWFnZShtYXRjaFswXSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yIC0gbWF0Y2hbMF0ubGVuZ3RoKSArIGUudmFsdWUuc2xpY2UoZS5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGUudmFsdWUsIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSlcbiAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIWNvbXBsZXRpbmcoKSkge1xuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICBzZXRDb21wSW5kZXgoMClcbiAgICAgICAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5tYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NlcHRDb21wbGV0aW9uKGUudmFsdWUsIGN0eCwgY3R4Lm1hdGNoZXNbTWF0aC5taW4oY29tcEluZGV4KCksIGN0eC5tYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCB8fCBlLm1ldGEgfHwgc2hvd0NvbW1hbmRzIHx8IHNob3dGaWxlcykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgKGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgc2V0SW5wdXQoY3RsLnJlY2FsbFBlbmRpbmcoKSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3JpZ2h0JyAmJiBlLnZhbHVlID09PSAnJyAmJiBxdWV1ZWQoKS5sZW5ndGggPiAwICYmIGJ1c3koKSAmJiAhY29tcGFjdGluZygpKSB7XG4gICAgICAgICAgICAgIGN0bC5leHBlZGl0ZVF1ZXVlZCgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicm93c2luZyA9IGhpc3RJZHgoKSA+PSAwXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgKGJyb3dzaW5nIHx8IGUudmFsdWUgPT09ICcnKSAmJiBoaXN0SWR4KCkgPCBzZW50KCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpICsgMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdkb3duJyAmJiBicm93c2luZykge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpIC0gMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KG4gPCAwID8gJycgOiBzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgIC8+XG4gICAgICA8L01vdXNlRm9jdXNSZWdpb24+fVxuXG4gICAgICB7c2hvd0NvbXBvc2VyQWN0aW9ucyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgbWFyZ2luTGVmdDogMSB9fT5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1Q0JcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVDRlwiXG4gICAgICAgICAgICBhY3RpdmU9e2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZSd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGRpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJ1xuICAgICAgICAgICAgICA/IHZvaWQgcmVmcy5kaWN0YXRpb25JbnB1dC5zdG9wKClcbiAgICAgICAgICAgICAgOiByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVBMVwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUEwXCJcbiAgICAgICAgICAgIGFjdGl2ZT17Y2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGltYWdlIChjdHJsLW8pJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGljdGF0aW9uSW5kaWNhdG9yKGRpY3RhdGlvblN0YXR1cygpLCBkaWN0YXRpb25MZXZlbHMoKSl9PC90ZXh0Pn1cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2RpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJyA/ICdlc2MgY2FuY2VsICBlbnRlciBjb25maXJtJyA6IGNhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZycgPyAnIGVzYyBjYW5jZWwnIDogY29tcG9zZXJBY3Rpb25MYWJlbCgpID8gYCAke2NvbXBvc2VyQWN0aW9uTGFiZWwoKX1gIDogJyd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKX1cbiAgICAgICAgICBjdXJyZW50PXttb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e2RlZmF1bHRNb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd01vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3RsLnN3aXRjaE1vZGVsKG0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3RsLnN3aXRjaE1vZGVsKG0sIHsgYXNEZWZhdWx0OiB0cnVlIH0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyBkZWxpYmVyYXRpb246IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgZGVsaWJlcmF0aW9uOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm9vdC5yZXNlYXJjaE1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJyAmJiAoXG4gICAgICAgIDxSZXdpbmRQaWNrUGFuZWxcbiAgICAgICAgICBlbnRyaWVzPXtbLi4ucmV3aW5kRW50cmllcygpXS5yZXZlcnNlKCl9XG4gICAgICAgICAgc3RhdHM9eyhpbmRleCkgPT4gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCBpbmRleCl9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAncGljayd9XG4gICAgICAgICAgb25QaWNrPXsoZW50cnkpID0+IHsgc2V0UmV3aW5kVGFyZ2V0KGVudHJ5KTsgc2V0UmV3aW5kU3RlcCgnYWN0aW9uJykgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSZXdpbmRTdGVwKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbicgJiYgcmV3aW5kVGFyZ2V0KCkgJiYgKFxuICAgICAgICA8UmV3aW5kQWN0aW9uUGFuZWxcbiAgICAgICAgICB0YXJnZXQ9e3Jld2luZFRhcmdldCgpfVxuICAgICAgICAgIG9wdGlvbnM9e3Jld2luZE9wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJ31cbiAgICAgICAgICBvblN1Ym1pdD17cGVyZm9ybVJld2luZH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+IHNldFJld2luZFN0ZXAoJ3BpY2snKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FjdGl2aXR5LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzaGVsbEFjdGlvbkhpbnQgPyBgJHtzaGVsbEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ3NoZWxsLW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NoZWxsV2luZG93Lm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYHNoZWxsLSR7cy5pZH1gXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHZpZXdlZFNoZWxsSWQoKSA9PT0gcy5pZFxuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGFnZW50RWxhcHNlZCh7IHN0YXJ0ZWRBdDogcy5zdGFydGVkQXQsIGVuZGVkQXQ6IHMuZW5kZWRBdCB9KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgc2hlbGwtJHtzLmlkfWB9IHNlbGVjdGVkPXtzZWxlY3RlZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgc2hlbGwtJHtzLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKHMuaWQpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHMuZXhpdENvZGUgPT09IDAgPyBHUkVFTiA6IFJFRCB9fT57cy5leGl0Q29kZSA9PT0gMCA/ICdcdTI1Q0YnIDogJ1x1MDBENyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IEZHIDogTVVURUQgfX0+e2BzaGVsbCBbJHtzLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57cy5kZXNjcmlwdGlvbiB8fCBzLmNvbW1hbmQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Muc3RhdHVzID09PSAncnVubmluZycgPyAnJyA6IGBleGl0ICR7cy5leGl0Q29kZX0gIGB9JHtlbGFwc2VkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gU0hFTExfU1RSSVBfTUFYICYmIChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCA/IGBcdTIxOTEgJHtzaGVsbFdpbmRvd1N0YXJ0fWAgOiAnJ30ke3NoZWxsV2luZG93U3RhcnQgPiAwICYmIHNoZWxsV2luZG93U3RhcnQgKyBzaGVsbFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlU2hlbGxzLmxlbmd0aCA/ICcgICcgOiAnJ30ke3NoZWxsV2luZG93U3RhcnQgKyBzaGVsbFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlU2hlbGxzLmxlbmd0aCA/IGBcdTIxOTMgJHt2aXNpYmxlU2hlbGxzLmxlbmd0aCAtIHNoZWxsV2luZG93U3RhcnQgLSBzaGVsbFdpbmRvdy5sZW5ndGh9YCA6ICcnfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogY29tYmluZWRBY3Rpdml0eSB8fCBzaG93Q29tcG9zZXJBY3Rpb25zID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2FnZW50QWN0aW9uSGludCA/IGAke2FnZW50QWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZEFnZW50fSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnYWdlbnQtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkQWdlbnQgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FnZW50V2luZG93Lm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnRTdGF0dXMoYSlcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBhZ2VudC0ke2EuaWR9YFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgYWdlbnQtJHthLmlkfWB9IHNlbGVjdGVkPXt2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYGFnZW50LSR7YS5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChhLmlkKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgICB7YS5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntzdGF0dXMuaWNvbn08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZCA/IEZHIDogTVVURUQgfX0+e2Ake2Eucm9sZSB8fCAnYWdlbnQnfSBbJHthLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YS5kZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAge3N0YXR1cy5sYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e2AgICR7c3RhdHVzLmxhYmVsfWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCR7c3RhdHVzLmxhYmVsID8gJyAgJyA6ICcgICd9ICR7YWdlbnRFbGFwc2VkKGEpfSAgXHUyMTkzIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlIHZhbHVlPXthLnVzYWdlPy50b3RhbFRva2VucyB8fCBhLnVzYWdlPy5wcm9tcHRUb2tlbnMgfHwgMH0gY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogTVVURUR9IGhpZ2hsaWdodD17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7Y29tcGFjdE51bWJlcihuKX0gdG9rZW5zYH0gLz5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IEFHRU5UX1NUUklQX01BWCAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7YWdlbnRXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7YWdlbnRXaW5kb3dTdGFydH1gIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ID4gMCAmJiBhZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyAnICAnIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZUFnZW50cy5sZW5ndGggLSBhZ2VudFdpbmRvd1N0YXJ0IC0gYWdlbnRXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3dpZGVMYXlvdXQgJiYgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPn1cblxuICAgICAge3dpZGVMYXlvdXQgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICAgIHtidXN5KCkgJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPXthY2NlbnQoKX0gaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfSByZXZlcnNlPlxuICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgOiB0dXJuUGhhc2UoKSA9PT0gJ3RoaW5raW5nJyA/ICdUaGlua2luZycgOiB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyA/ICdXb3JraW5nJyA6ICdSZXNwb25kaW5nJ31cbiAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2VsYXBzZWR9ICBlc2MgdG8gaW50ZXJydXB0YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7Y29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnICYmIDxQcm9ncmVzc0JhciB2YXJpYW50PVwidGhpblwiIHZhbHVlPXtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbiAvIDh9IHdpZHRoPXszMH0gcGVyY2VudGFnZT17ZmFsc2V9IGNvbG9yPXthY2NlbnQoKX0gLz59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSB9fT57J1JlcG9zaXRvcnknfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydCcmFuY2ggICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDaGFuZ2VzICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+e2Ake2dpdEluZm8uYWRkZWR9IGFkZGVkYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2Ake2dpdEluZm8ucmVtb3ZlZH0gcmVtb3ZlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA9PT0gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnY2xlYW4nfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydTZXNzaW9uJ308L3RleHQ+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0RpcmVjdG9yeSAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnTW9kZWwgICAgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2VmZm9ydCgpfTwvdGV4dD59XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICB7cGVuZGluZ1dha2V1cHMgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjNGMCAke3BlbmRpbmdXYWtldXBzfWB9PC90ZXh0Pn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7Y29tcGFjdE51bWJlcih1c2FnZS5wcm9tcHRUb2tlbnMpfSBcdTIxOTNgfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7Y29tcGFjdE51bWJlcih1c2FnZS5jb21wbGV0aW9uVG9rZW5zKX0gXHUyMTkxYH08L3RleHQ+XG4gICAgICAgICAgICB7dXNhZ2UudGhvdWdodFRva2VucyA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e3VzYWdlLnRob3VnaHRUb2tlbnN9IGNvbG9yPXtNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7Y29tcGFjdE51bWJlcihuKX0gXHUyNUM4YH0gLz59XG4gICAgICAgICAgICB7Y29udGV4dFBlcmNlbnQgPiAwICYmIDxBbmltYXRlZFZhbHVlIHZhbHVlPXtjb250ZXh0UGVyY2VudH0gY29sb3I9e2NvbnRleHRQZXJjZW50ID49IDgwID8gUkVEIDogTVVURUR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGJhY2tncm91bmQ9e1BBTkVMX0JHfSBmb3JtYXQ9e2NvbnRleHRCYXJ9IC8+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIDxEaWN0YXRpb25LZXlzIGlucHV0PXtyZWZzLmRpY3RhdGlvbklucHV0fSAvPlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdCh0ZXh0LCBjdXJzb3IgPSB0ZXh0Lmxlbmd0aCkge1xuICBjb25zdCBtYXRjaCA9IHRleHQuc2xpY2UoMCwgY3Vyc29yKS5tYXRjaCgvKF58W1xccyhdKVxcLyhbQS1aYS16MC05Xy1dKikkLylcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgc3RhcnQgPSBjdXJzb3IgLSBtYXRjaFsyXS5sZW5ndGggLSAxXG4gIGNvbnN0IHN1ZmZpeCA9IHRleHQuc2xpY2UoY3Vyc29yKS5tYXRjaCgvXltBLVphLXowLTlfLV0qLylbMF1cbiAgcmV0dXJuIHsgc3RhcnQsIGVuZDogY3Vyc29yICsgc3VmZml4Lmxlbmd0aCwgcXVlcnk6IG1hdGNoWzJdIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDb21tYW5kKHRleHQsIHJhbmdlLCBib2R5KSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogdGV4dC5zbGljZSgwLCByYW5nZS5zdGFydCkgKyBib2R5ICsgdGV4dC5zbGljZShyYW5nZS5lbmQpLFxuICAgIGN1cnNvcjogcmFuZ2Uuc3RhcnQgKyBib2R5Lmxlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZpZWxkcyhjb21tYW5kLCBib2R5LCBhcmdzID0gJycpIHtcbiAgY29uc3QgZmllbGRzID0gWy4uLihjb21tYW5kLmFyZ3VtZW50cyA/PyBbXSldXG4gIGlmIChib2R5LmluY2x1ZGVzKCckQVJHVU1FTlRTJykgJiYgIWFyZ3MpIHtcbiAgICBmaWVsZHMucHVzaCh7IG5hbWU6ICckYXJncycsIGxhYmVsOiAnQXJndW1lbnRzJywgdHlwZTogJ3RleHQnIH0pXG4gIH1cbiAgcmV0dXJuIGZpZWxkc1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dEFyZWEsIE1lbnUsIEJ1dHRvbiwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIENvbW1hbmRGb3JtKHsgbmFtZSwgZmllbGRzLCBmaWxlcywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBmaWVsZCA9IGZpZWxkc1tzdGVwKCldXG4gIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC50eXBlID09PSAnY2hvaWNlJyA/IGZpZWxkLmNob2ljZXMgOiBmaWVsZC50eXBlID09PSAncGF0aCcgPyBmaWxlcyA6IFtdXG4gIGNvbnN0IG1hdGNoZXMgPSByYW5rRnV6enkob3B0aW9ucywgcXVlcnkoKSwgKHEsIHZhbHVlKSA9PiBmdXp6eVNjb3JlKHEsIHZhbHVlKSlcblxuICBmdW5jdGlvbiBhZHZhbmNlKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dCA9IHsgLi4udmFsdWVzKCksIFtmaWVsZC5uYW1lXTogdmFsdWUgfVxuICAgIHNldFZhbHVlcyhuZXh0KVxuICAgIGlmIChzdGVwKCkgPT09IGZpZWxkcy5sZW5ndGggLSAxKSByZXR1cm4gb25TdWJtaXQobmV4dClcbiAgICBzZXRTdGVwKHN0ZXAoKSArIDEpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0U2VsZWN0ZWQoMClcbiAgfVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBnYXA6IDIgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57YC8ke25hbWV9YH08L3RleHQ+XG4gICAgICAgIHtmaWVsZHMuc2xpY2UoMCwgc3RlcCgpKS5tYXAoKGl0ZW0pID0+IDx0ZXh0IGtleT17aXRlbS5uYW1lfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3ZhbHVlcygpW2l0ZW0ubmFtZV19PC90ZXh0Pil9XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJDYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntmaWVsZC5sYWJlbH08L3RleHQ+XG4gICAgICA8VGV4dEFyZWFcbiAgICAgICAga2V5PXtmaWVsZC5uYW1lfVxuICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICB2YWx1ZT17cXVlcnkoKX1cbiAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgbWF4SGVpZ2h0PXsxfVxuICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQubGFiZWx9XG4gICAgICAgIG9uQ2FuY2VsPXtvbkNhbmNlbH1cbiAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4geyBzZXRRdWVyeSh2YWx1ZSk7IHNldFNlbGVjdGVkKDApIH19XG4gICAgICAgIG9uU3VibWl0PXsodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2Nob2ljZScpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkgYWR2YW5jZShtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgIH0gZWxzZSBhZHZhbmNlKGZpZWxkLnR5cGUgPT09ICdwYXRoJyAmJiBtYXRjaGVzLmxlbmd0aCAmJiAhdmFsdWUuc3RhcnRzV2l0aCgnLycpICYmICF2YWx1ZS5zdGFydHNXaXRoKCd+JykgPyBtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldIDogdmFsdWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChNYXRoLm1pbihzZWxlY3RlZCgpICsgMSwgbWF0Y2hlcy5sZW5ndGggLSAxKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWF4KDAsIHNlbGVjdGVkKCkgLSAxKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRRdWVyeShtYXRjaGVzW01hdGgubWluKHNlbGVjdGVkKCksIG1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAge21hdGNoZXMubGVuZ3RoID4gMCAmJiA8TWVudVxuICAgICAgICBpdGVtcz17bWF0Y2hlc31cbiAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkKCl9XG4gICAgICAgIG9uU2VsZWN0PXtzZXRTZWxlY3RlZH1cbiAgICAgICAgb25TdWJtaXQ9e2FkdmFuY2V9XG4gICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICByZW5kZXJJdGVtPXsodmFsdWUsIHsgYWN0aXZlIH0pID0+IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntgJHthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfSR7dmFsdWV9YH08L3RleHQ+fVxuICAgICAgLz59XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZjg3MTcxJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNkYzI2MjYnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuZXhwb3J0IGxldCBERUZBVUxUX0FDQ0VOVCA9IFBBTEVUVEVTLmRhcmsuYWNjZW50XG5leHBvcnQgbGV0IEZHID0gUEFMRVRURVMuZGFyay5mZ1xuZXhwb3J0IGxldCBGR19TT0ZUID0gUEFMRVRURVMuZGFyay5mZ1NvZnRcbmV4cG9ydCBsZXQgTVVURUQgPSBQQUxFVFRFUy5kYXJrLm11dGVkXG5leHBvcnQgbGV0IFBBTkVMX0JHID0gUEFMRVRURVMuZGFyay5wYW5lbEJnXG5leHBvcnQgbGV0IFNFTEVDVF9CRyA9IFBBTEVUVEVTLmRhcmsuc2VsZWN0QmdcbmV4cG9ydCBsZXQgUkVEID0gUEFMRVRURVMuZGFyay5yZWRcbmV4cG9ydCBsZXQgR1JFRU4gPSBQQUxFVFRFUy5kYXJrLmdyZWVuXG5leHBvcnQgbGV0IFBFRVIgPSBQQUxFVFRFUy5kYXJrLnBlZXJcbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJjb25zdCBmaWxsZXIgPSAvKD88IVteXFxzLDs6IT9dKSg/OnVofHVtKSg/PSR8W1xccyw7Oi4hP10pKFsgXFx0XSpbLDs6LiE/XSopWyBcXHRdKi9naXVcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuRGljdGF0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3BsaXQoJ1xcbicpLm1hcChjbGVhbkxpbmUpLmpvaW4oJ1xcbicpLnRyaW0oKVxufVxuXG5mdW5jdGlvbiBjbGVhbkxpbmUobGluZSkge1xuICBsZXQgcmVzdWx0ID0gJydcbiAgbGV0IG9mZnNldCA9IDBcbiAgbGV0IGNhcGl0YWxpemUgPSBmYWxzZVxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGxpbmUubWF0Y2hBbGwoZmlsbGVyKSkge1xuICAgIGxldCBiZWZvcmUgPSBsaW5lLnNsaWNlKG9mZnNldCwgbWF0Y2guaW5kZXgpXG4gICAgaWYgKGNhcGl0YWxpemUpIGJlZm9yZSA9IHVwcGVyRmlyc3QoYmVmb3JlKVxuICAgIHJlc3VsdCArPSBiZWZvcmVcbiAgICBjb25zdCBhZnRlciA9IGxpbmUuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgY29uc3QgdGVybWluYWwgPSBtYXRjaFsxXS5tYXRjaCgvWy4hP10rLyk/LlswXSA/PyAnJ1xuICAgIHJlc3VsdCA9IHJlc3VsdC50cmltRW5kKClcbiAgICBjb25zdCBzZW50ZW5jZVN0YXJ0ID0gIXJlc3VsdCB8fCAvWy4hP10kLy50ZXN0KHJlc3VsdClcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvLCQvLCAnJylcbiAgICBpZiAoIWFmdGVyKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWzs6XSQvLCAnJylcbiAgICBpZiAodGVybWluYWwgJiYgIXNlbnRlbmNlU3RhcnQpIHJlc3VsdCArPSB0ZXJtaW5hbFxuICAgIGNhcGl0YWxpemUgPSBzZW50ZW5jZVN0YXJ0IHx8IEJvb2xlYW4odGVybWluYWwpXG4gICAgaWYgKHJlc3VsdCAmJiBhZnRlcikgcmVzdWx0ICs9ICcgJ1xuICAgIG9mZnNldCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gIH1cbiAgY29uc3QgdGFpbCA9IGxpbmUuc2xpY2Uob2Zmc2V0KVxuICByZXR1cm4gcmVzdWx0ICsgKGNhcGl0YWxpemUgPyB1cHBlckZpcnN0KHRhaWwpIDogdGFpbClcbn1cblxuZnVuY3Rpb24gdXBwZXJGaXJzdCh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoL14oXFxzKikoXFxwe0xsfSkoPyFcXHB7THV9KS91LCAoXywgc3BhY2UsIGxldHRlcikgPT4gc3BhY2UgKyBsZXR0ZXIudG9VcHBlckNhc2UoKSlcbn1cblxuIiwgImltcG9ydCB7IGNsZWFuRGljdGF0aW9uIH0gZnJvbSAnLi9kaWN0YXRpb24tdGV4dC5qcydcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnXG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25IZWxwZXJQYXRoKCkge1xuICBjb25zdCBidW5kbGVkID0gZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG4gIHJldHVybiBleGlzdHNTeW5jKGJ1bmRsZWQpID8gYnVuZGxlZCA6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vaGVscGVyLy5idWlsZC9yZWxlYXNlL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb24oeyBvblN0YXR1cyA9ICgpID0+IHt9LCBvbkxldmVsID0gKCkgPT4ge30sIG9uRXJyb3IgPSAoKSA9PiB7fSwgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBhcmNoID0gcHJvY2Vzcy5hcmNoLCBsYXVuY2ggPSAoKSA9PiBzcGF3bihkaWN0YXRpb25IZWxwZXJQYXRoKCksIFtdLCB7IHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSksIGxvYWRpbmdUaW1lb3V0ID0gNjAwMDAwLCByZXF1ZXN0VGltZW91dCA9IDQ1MDAwIH0gPSB7fSkge1xuICBsZXQgY2hpbGQgPSBudWxsXG4gIGxldCBzdGF0dXMgPSAnaWRsZSdcbiAgbGV0IHNlcXVlbmNlID0gMFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcbiAgbGV0IHJlYWR5ID0gbnVsbFxuICBsZXQgZGlzcG9zZWQgPSBmYWxzZVxuICBjb25zdCBwZW5kaW5nID0gbmV3IE1hcCgpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdHVzKHZhbHVlKSB7XG4gICAgc3RhdHVzID0gdmFsdWVcbiAgICBvblN0YXR1cyh2YWx1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KGVycm9yID0gbmV3IEVycm9yKCdkaWN0YXRpb24gY2FuY2VsbGVkJykpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGNoaWxkXG4gICAgY2hpbGQgPSBudWxsXG4gICAgcmVhZHkgPSBudWxsXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZW5kaW5nLnZhbHVlcygpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgICBlbnRyeS5yZWplY3QoZXJyb3IpXG4gICAgfVxuICAgIHBlbmRpbmcuY2xlYXIoKVxuICAgIHByZXZpb3VzPy5zdGRpbi5lbmQoKVxuICAgIHByZXZpb3VzPy5raWxsKClcbiAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICB9XG5cbiAgZnVuY3Rpb24gd2FpdEZvcihpZCwgdGltZW91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVzZXQobmV3IEVycm9yKCdkaWN0YXRpb24gdGltZWQgb3V0JykpLCB0aW1lb3V0KVxuICAgICAgcGVuZGluZy5zZXQoaWQsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lciB9KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUoaWQsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBlbnRyeSA9IHBlbmRpbmcuZ2V0KGlkKVxuICAgIGlmICghZW50cnkpIHJldHVyblxuICAgIHBlbmRpbmcuZGVsZXRlKGlkKVxuICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICBpZiAobWVzc2FnZS5lcnJvcikgZW50cnkucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlLmVycm9yKSlcbiAgICBlbHNlIGVudHJ5LnJlc29sdmUobWVzc2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm4gcmVhZHlcbiAgICBpZiAocGxhdGZvcm0gIT09ICdkYXJ3aW4nIHx8IGFyY2ggIT09ICdhcm02NCcpIHRocm93IG5ldyBFcnJvcignZGljdGF0aW9uIHJlcXVpcmVzIGFuIEFwcGxlIFNpbGljb24gTWFjJylcbiAgICBjb25zdCBpbnN0YW5jZSA9IGxhdW5jaCgpXG4gICAgY2hpbGQgPSBpbnN0YW5jZVxuICAgIHJlYWR5ID0gd2FpdEZvcigncmVhZHknLCBsb2FkaW5nVGltZW91dClcbiAgICBsZXQgYnVmZmVyID0gJydcbiAgICBpbnN0YW5jZS5zdGRvdXQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgYnVmZmVyICs9IGNodW5rLnRvU3RyaW5nKClcbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMTAyNCAqIDEwMjQpIHJldHVybiByZXNldChuZXcgRXJyb3IoJ2ludmFsaWQgZGljdGF0aW9uIGhlbHBlciBvdXRwdXQnKSlcbiAgICAgIGxldCBhdFxuICAgICAgd2hpbGUgKChhdCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKSkgPj0gMCkge1xuICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIGF0KVxuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXQgKyAxKVxuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICB0cnkgeyBtZXNzYWdlID0gSlNPTi5wYXJzZShsaW5lKSB9IGNhdGNoIHsgY29udGludWUgfVxuICAgICAgICBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdsZXZlbCcpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAncmVjb3JkaW5nJyAmJiBOdW1iZXIuaXNGaW5pdGUobWVzc2FnZS5sZXZlbCkpIG9uTGV2ZWwoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbWVzc2FnZS5sZXZlbCkpKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAncmVhZHknKSBzZXR0bGUoJ3JlYWR5JywgbWVzc2FnZSlcbiAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLm1lc3NhZ2UgfHwgJ2RpY3RhdGlvbiBmYWlsZWQnKVxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgICBpZiAoIWFjdGl2ZSkgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaWQgIT0gbnVsbCkgc2V0dGxlKG1lc3NhZ2UuaWQsIG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSlcbiAgICBpbnN0YW5jZS5zdGRlcnIub24oJ2RhdGEnLCAoKSA9PiB7fSlcbiAgICBjb25zdCBmYWlsZWQgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgY29uc3QgcmVjb3JkaW5nID0gc3RhdHVzID09PSAncmVjb3JkaW5nJ1xuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBpZiAoIWFjdGl2ZSAmJiByZWNvcmRpbmcpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gICAgaW5zdGFuY2Uub24oJ2Vycm9yJywgKGVycm9yKSA9PiBmYWlsZWQobmV3IEVycm9yKGBkaWN0YXRpb24gaGVscGVyIHVuYXZhaWxhYmxlOiAke2Vycm9yLm1lc3NhZ2V9YCkpKVxuICAgIGluc3RhbmNlLnN0ZGluLm9uKCdlcnJvcicsIGZhaWxlZClcbiAgICBpbnN0YW5jZS5vbignZXhpdCcsICgpID0+IGZhaWxlZChuZXcgRXJyb3IoJ2RpY3RhdGlvbiBoZWxwZXIgZXhpdGVkJykpKVxuICAgIHJldHVybiByZWFkeVxuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWVzdChvcCkge1xuICAgIGNvbnN0IGlkID0gKytzZXF1ZW5jZVxuICAgIGNvbnN0IHJlc3VsdCA9IHdhaXRGb3IoaWQsIHJlcXVlc3RUaW1lb3V0KVxuICAgIHRyeSB7IGNoaWxkLnN0ZGluLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsgaWQsIG9wIH0pfVxcbmApIH0gY2F0Y2ggKGVycm9yKSB7IHJlc2V0KGVycm9yKSB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJlbG9hZCgpIHtcbiAgICBpZiAoZGlzcG9zZWQpIHJldHVyblxuICAgIHRyeSB7IGF3YWl0IGxvYWQoKSB9IGNhdGNoIHt9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICBpZiAoZGlzcG9zZWQgfHwgc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCdsb2FkaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgc2V0U3RhdHVzKCdzdGFydGluZycpXG4gICAgICBhd2FpdCByZXF1ZXN0KCdzdGFydCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygncmVjb3JkaW5nJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBudWxsXG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCd0cmFuc2NyaWJpbmcnKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KCdzdG9wJylcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuIG51bGxcbiAgICAgIHNldFN0YXR1cygnaWRsZScpXG4gICAgICByZXR1cm4gY2xlYW5EaWN0YXRpb24ocmVzdWx0LnRleHQgfHwgJycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikge1xuICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVyblxuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gcmVzZXQoKVxuICAgIHNldFN0YXR1cygnY2FuY2VsbGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ2NhbmNlbCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygnaWRsZScpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgcmVzZXQoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgICArK2dlbmVyYXRpb25cbiAgICByZXNldCgpXG4gIH1cblxuICByZXR1cm4geyBwcmVsb2FkLCBzdGFydCwgc3RvcCwgY2FuY2VsLCBkaXNwb3NlLCBnZXQgc3RhdHVzKCkgeyByZXR1cm4gc3RhdHVzIH0gfVxufVxuIiwgImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJ1xuaW1wb3J0IHsgbWtkdGVtcCwgd3JpdGVGaWxlLCBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5cbmNvbnN0IGV4ZWN1dGUgPSBwcm9taXNpZnkoZXhlY0ZpbGUpXG5jb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQoKVxucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59KVxuXG5jb25zdCBtYWNTY3JpcHQgPSBgT2JqQy5pbXBvcnQoJ0FwcEtpdCcpOyBPYmpDLmltcG9ydCgnRm91bmRhdGlvbicpO1xuY29uc3QgcGFzdGVib2FyZCA9ICQuTlNQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJkO1xuY29uc3QgZmlsZXMgPSBwYXN0ZWJvYXJkLnByb3BlcnR5TGlzdEZvclR5cGUoJ05TRmlsZW5hbWVzUGJvYXJkVHlwZScpO1xubGV0IGltYWdlID0gbnVsbDtcbmlmICghZmlsZXMuaXNOaWwoKSAmJiBmaWxlcy5jb3VudCA+IDApIHtcbiAgY29uc3QgcGF0aCA9IE9iakMudW53cmFwKGZpbGVzLm9iamVjdEF0SW5kZXgoMCkpO1xuICBpZiAoL1xcXFwuKHBuZ3xqcGU/Z3xnaWZ8d2VicCkkL2kudGVzdChwYXRoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhDb250ZW50c09mRmlsZShwYXRoKTtcbn1cbmlmICghaW1hZ2UgfHwgaW1hZ2UuaXNOaWwoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpO1xubGV0IGRhdGEgPSBudWxsO1xuaWYgKCFpbWFnZS5pc05pbCgpKSB7XG4gIGNvbnN0IGJpdG1hcCA9ICQuTlNCaXRtYXBJbWFnZVJlcC5pbWFnZVJlcFdpdGhEYXRhKGltYWdlLlRJRkZSZXByZXNlbnRhdGlvbik7XG4gIGRhdGEgPSBiaXRtYXAucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVQcm9wZXJ0aWVzKCQuTlNCaXRtYXBJbWFnZUZpbGVUeXBlUE5HLCAkKHt9KSk7XG59XG5kYXRhID8gT2JqQy51bndyYXAoZGF0YS5iYXNlNjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnMoMCkpIDogJydgXG5cbmNvbnN0IHdpbmRvd3NTY3JpcHQgPSBgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uV2luZG93cy5Gb3JtczsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uRHJhd2luZztcbmlmIChbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6Q29udGFpbnNJbWFnZSgpKSB7XG4gICRpbWFnZSA9IFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpHZXRJbWFnZSgpO1xuICAkc3RyZWFtID0gTmV3LU9iamVjdCBTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtO1xuICB0cnkgeyAkaW1hZ2UuU2F2ZSgkc3RyZWFtLCBbU3lzdGVtLkRyYXdpbmcuSW1hZ2luZy5JbWFnZUZvcm1hdF06OlBuZyk7IFtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJHN0cmVhbS5Ub0FycmF5KCkpIH1cbiAgZmluYWxseSB7ICRzdHJlYW0uRGlzcG9zZSgpOyAkaW1hZ2UuRGlzcG9zZSgpIH1cbn1gXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ2xpcGJvYXJkSW1hZ2UoeyBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGVudiA9IHByb2Nlc3MuZW52LCBydW4gPSBleGVjdXRlIH0gPSB7fSkge1xuICBpZiAoZW52LlNTSF9DT05ORUNUSU9OIHx8IGVudi5TU0hfVFRZKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuYXZhaWxhYmxlIG92ZXIgU1NIJylcbiAgY29uc3Qgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6ICdidWZmZXInLCB0aW1lb3V0OiAxMDAwMCwgbWF4QnVmZmVyOiAzMiAqIDEwMjQgKiAxMDI0IH1cbiAgbGV0IGRhdGFcbiAgdHJ5IHtcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdvc2FzY3JpcHQnLCBbJy1sJywgJ0phdmFTY3JpcHQnLCAnLWUnLCBtYWNTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bigncG93ZXJzaGVsbC5leGUnLCBbJy1Ob1Byb2ZpbGUnLCAnLU5vbkludGVyYWN0aXZlJywgJy1TVEEnLCAnLUNvbW1hbmQnLCB3aW5kb3dzU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgIGNvbnN0IHdheWxhbmQgPSBCb29sZWFuKGVudi5XQVlMQU5EX0RJU1BMQVkpXG4gICAgICBjb25zdCBjb21tYW5kID0gd2F5bGFuZCA/ICd3bC1wYXN0ZScgOiAneGNsaXAnXG4gICAgICBjb25zdCB7IHN0ZG91dDogdHlwZXMgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLWxpc3QtdHlwZXMnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnVEFSR0VUUycsICctbyddLCBvcHRpb25zKVxuICAgICAgaWYgKCF0eXBlcy50b1N0cmluZygpLnNwbGl0KC9cXHMrLykuaW5jbHVkZXMoJ2ltYWdlL3BuZycpKSByZXR1cm4gbnVsbFxuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLXR5cGUnLCAnaW1hZ2UvcG5nJywgJy0tbm8tbmV3bGluZSddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdpbWFnZS9wbmcnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5zdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybScpXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgcmVhZGVyIHVuYXZhaWxhYmxlOiBpbnN0YWxsICcgKyAoZW52LldBWUxBTkRfRElTUExBWSA/ICd3bC1jbGlwYm9hcmQnIDogcGxhdGZvcm0gPT09ICdsaW51eCcgPyAneGNsaXAnIDogJ3RoZSBzeXN0ZW0gY2xpcGJvYXJkIHRvb2xzJykpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuICBpZiAoIWRhdGEubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBpZiAoIWRhdGEuc3ViYXJyYXkoMCwgOCkuZXF1YWxzKEJ1ZmZlci5mcm9tKFsxMzcsIDgwLCA3OCwgNzEsIDEzLCAxMCwgMjYsIDEwXSkpKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBkaWQgbm90IHJldHVybiBhIFBORyBpbWFnZScpXG4gIGNvbnN0IGRpciA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2xpcGJvYXJkLScpKVxuICBkaXJlY3Rvcmllcy5hZGQoZGlyKVxuICBjb25zdCBkaXNwb3NlID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgZGlyZWN0b3JpZXMuZGVsZXRlKGRpcilcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbihkaXIsICdjbGlwYm9hcmQucG5nJylcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgZGF0YSwgeyBtb2RlOiAwbzYwMCB9KVxuICAgIHJldHVybiB7IHBhdGgsIGRpc3Bvc2UgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF3YWl0IGRpc3Bvc2UoKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoeyByZWFkSW1hZ2UsIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IgfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBwYXN0ZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZWFkSW1hZ2UoKVxuICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICBvbkVycm9yKCdObyBpbWFnZSBvbiB0aGUgY2xpcGJvYXJkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignQ2xpcGJvYXJkIGltYWdlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgQ2xpcGJvYXJkIHBhc3RlIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbiwgZ2V0SW5wdXQsIHNldElucHV0IH0pIHtcbiAgbGV0IGRyYWZ0ID0gbnVsbFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcblxuICBmdW5jdGlvbiBzdGFydCh7IHZhbHVlLCBjdXJzb3IgfSkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGRyYWZ0ID0geyB2YWx1ZSwgY3Vyc29yIH1cbiAgICArK2dlbmVyYXRpb25cbiAgICB2b2lkIGRpY3RhdGlvbi5zdGFydCgpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIGNvbnN0IHRhcmdldCA9IGRyYWZ0XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGRpY3RhdGlvbi5zdG9wKClcbiAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24gfHwgIXRhcmdldCB8fCB0ZXh0ID09IG51bGwgfHwgZ2V0SW5wdXQoKSAhPT0gdGFyZ2V0LnZhbHVlKSByZXR1cm5cbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCBsZWFkID0gdGV4dCAmJiBiZWZvcmUgJiYgIS9cXHMkLy50ZXN0KGJlZm9yZSkgJiYgIS9eXFxzLy50ZXN0KHRleHQpID8gJyAnIDogJydcbiAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IHRyYWlsID0gdGV4dCAmJiBhZnRlciAmJiAhL1xccyQvLnRlc3QodGV4dCkgJiYgIS9eW1xccy4sOzohP10vLnRlc3QoYWZ0ZXIpID8gJyAnIDogJydcbiAgICBzZXRJbnB1dChiZWZvcmUgKyBsZWFkICsgdGV4dCArIHRyYWlsICsgYWZ0ZXIpXG4gICAgZHJhZnQgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgKytnZW5lcmF0aW9uXG4gICAgZHJhZnQgPSBudWxsXG4gICAgdm9pZCBkaWN0YXRpb24uY2FuY2VsKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzID09PSAnaWRsZScpIHJldHVybiBmYWxzZVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnIHx8IChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSkgY2FuY2VsKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nICYmICFldmVudC5zaGlmdCAmJiAhZXZlbnQubWV0YSAmJiBkaWN0YXRpb24uc3RhdHVzID09PSAncmVjb3JkaW5nJykgdm9pZCBzdG9wKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHsgc3RhcnQsIHN0b3AsIGNhbmNlbCwgaGFuZGxlIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0KHsgY2FwdHVyZVJlZ2lvbiwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciwgb25TdGF0dXMgPSAoKSA9PiB7fSB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBvblN0YXR1cygnY2FwdHVyaW5nJylcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgY2FwdHVyZVJlZ2lvbigpXG4gICAgICBpZiAoIWltYWdlKSByZXR1cm5cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdTY3JlZW4gY2FwdHVyZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYFNjcmVlbiBjYXB0dXJlIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgICAgb25TdGF0dXMoJ2lkbGUnKVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgbWtkdGVtcCwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5cbmxldCBjYXB0dXJlRGlyID0gbnVsbFxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVDYXB0dXJlRGlyKCkge1xuICBjYXB0dXJlRGlyID8/PSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNhcHR1cmUtJykpXG4gIHJldHVybiBjYXB0dXJlRGlyXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYXB0dXJlUmVnaW9uKCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ2RhcndpbicpIHRocm93IG5ldyBFcnJvcignc2NyZWVuIGNhcHR1cmUgaXMgb25seSBhdmFpbGFibGUgb24gbWFjT1MnKVxuICBjb25zdCBmaWxlID0gam9pbihhd2FpdCBlbnN1cmVDYXB0dXJlRGlyKCksIGBjYXB0dXJlLSR7RGF0ZS5ub3coKX0ucG5nYClcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGV4ZWNGaWxlKCdzY3JlZW5jYXB0dXJlJywgWyctaScsICcteCcsIGZpbGVdLCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICghZXJyb3IgfHwgIWV4aXN0c1N5bmMoZmlsZSkpIHJlc29sdmUoKVxuICAgICAgZWxzZSByZWplY3QoZXJyb3IpXG4gICAgfSlcbiAgfSlcbiAgaWYgKCFleGlzdHNTeW5jKGZpbGUpKSByZXR1cm4gbnVsbFxuICByZXR1cm4ge1xuICAgIHBhdGg6IGZpbGUsXG4gICAgZGlzcG9zZTogKCkgPT4gdW5saW5rKGZpbGUpLmNhdGNoKCgpID0+IHt9KSxcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21wb3NlckZpbGVzKCkge1xuICBsZXQgdGV4dCA9ICcnXG4gIGxldCByZWZlcmVuY2VzID0gW11cblxuICBmdW5jdGlvbiB1cGRhdGUodmFsdWUsIGF0dGFjaG1lbnRzKSB7XG4gICAgbGV0IHN0YXJ0ID0gMFxuICAgIHdoaWxlIChzdGFydCA8IHRleHQubGVuZ3RoICYmIHN0YXJ0IDwgdmFsdWUubGVuZ3RoICYmIHRleHRbc3RhcnRdID09PSB2YWx1ZVtzdGFydF0pIHN0YXJ0KytcbiAgICBsZXQgZW5kID0gdGV4dC5sZW5ndGhcbiAgICBsZXQgbmV4dEVuZCA9IHZhbHVlLmxlbmd0aFxuICAgIHdoaWxlIChlbmQgPiBzdGFydCAmJiBuZXh0RW5kID4gc3RhcnQgJiYgdGV4dFtlbmQgLSAxXSA9PT0gdmFsdWVbbmV4dEVuZCAtIDFdKSB7XG4gICAgICBlbmQtLVxuICAgICAgbmV4dEVuZC0tXG4gICAgfVxuICAgIGNvbnN0IGRlbHRhID0gbmV4dEVuZCAtIGVuZFxuICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZsYXRNYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgaWYgKHJlZmVyZW5jZS5lbmQgPD0gc3RhcnQpIHJldHVybiBbcmVmZXJlbmNlXVxuICAgICAgaWYgKHJlZmVyZW5jZS5zdGFydCA+PSBlbmQpIHJldHVybiBbeyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBkZWx0YSwgZW5kOiByZWZlcmVuY2UuZW5kICsgZGVsdGEgfV1cbiAgICAgIHJldHVybiBbXVxuICAgIH0pXG4gICAgdGV4dCA9IHZhbHVlXG4gICAgY29uc3QgbWF0Y2hlcyA9IFsuLi50ZXh0Lm1hdGNoQWxsKC9cXFtGaWxlICNcXGQrXFxdL2cpXS5yZXZlcnNlKClcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50cy5nZXQobWF0Y2hbMF0pXG4gICAgICBpZiAoYXR0YWNobWVudD8ua2luZCAhPT0gJ2ZpbGUnKSBjb250aW51ZVxuICAgICAgY29uc3QgcGF0aCA9IGF0dGFjaG1lbnQucGF0aFxuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGF0aC5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGhcbiAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2Uuc3RhcnQgPj0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgPyB7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIG9mZnNldCwgZW5kOiByZWZlcmVuY2UuZW5kICsgb2Zmc2V0IH1cbiAgICAgICAgOiByZWZlcmVuY2UpXG4gICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyBwYXRoICsgdGV4dC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7IHN0YXJ0OiBtYXRjaC5pbmRleCwgZW5kOiBtYXRjaC5pbmRleCArIHBhdGgubGVuZ3RoLCBwbGFjZWhvbGRlcjogbWF0Y2hbMF0gfSlcbiAgICB9XG4gICAgcmVmZXJlbmNlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydClcbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gY29udGVudCgpIHtcbiAgICBsZXQgdmFsdWUgPSB0ZXh0XG4gICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgWy4uLnJlZmVyZW5jZXNdLnJldmVyc2UoKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCByZWZlcmVuY2Uuc3RhcnQpICsgcmVmZXJlbmNlLnBsYWNlaG9sZGVyICsgdmFsdWUuc2xpY2UocmVmZXJlbmNlLmVuZClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByZXR1cm4geyB1cGRhdGUsIGNvbnRlbnQgfVxufVxuIiwgImNvbnN0IGJhcnMgPSAnXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4J1xuY29uc3Qgd2lkdGggPSAxNlxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTGV2ZWwobGV2ZWxzLCBsZXZlbCkge1xuICByZXR1cm4gWy4uLmxldmVscy5zbGljZSgxIC0gd2lkdGgpLCBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBsZXZlbCkpXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGljdGF0aW9uSW5kaWNhdG9yKHN0YXR1cywgbGV2ZWxzKSB7XG4gIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuICcnXG4gIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gYCAke3N0YXR1c30gYFxuICBjb25zdCBzYW1wbGVzID0gWy4uLkFycmF5KE1hdGgubWF4KDAsIHdpZHRoIC0gbGV2ZWxzLmxlbmd0aCkpLmZpbGwoMCksIC4uLmxldmVscy5zbGljZSgtd2lkdGgpXVxuICByZXR1cm4gYCAke3NhbXBsZXMubWFwKChsZXZlbCkgPT4gYmFyc1tNYXRoLnJvdW5kKGxldmVsICogKGJhcnMubGVuZ3RoIC0gMSkpXSkuam9pbignJyl9IHJlY29yZGluZyBgXG59XG4iLCAiaW1wb3J0IHsgY29kZVRvQU5TSSB9IGZyb20gJ0BzaGlraWpzL2NsaSdcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHNoaWtpVGhlbWUgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBMQU5HUyA9IHtcbiAganM6ICdqcycsIG1qczogJ2pzJywgY2pzOiAnanMnLCBqc3g6ICdqc3gnLCB0czogJ3RzJywgdHN4OiAndHN4JyxcbiAganNvbjogJ2pzb24nLCBqc29ubDogJ2pzb24nLCBtZDogJ21kJywgcHk6ICdweXRob24nLCByYjogJ3J1YnknLCBnbzogJ2dvJyxcbiAgcnM6ICdydXN0JywgYzogJ2MnLCBoOiAnYycsIGNwcDogJ2NwcCcsIGphdmE6ICdqYXZhJywgY3NzOiAnY3NzJyxcbiAgaHRtbDogJ2h0bWwnLCB2dWU6ICd2dWUnLCBzaDogJ2Jhc2gnLCBiYXNoOiAnYmFzaCcsIHpzaDogJ2Jhc2gnLFxuICB5bWw6ICd5YW1sJywgeWFtbDogJ3lhbWwnLCB0b21sOiAndG9tbCcsIHNxbDogJ3NxbCcsIHN2ZWx0ZTogJ3N2ZWx0ZScsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYW5nRm9yUGF0aChwYXRoKSB7XG4gIGNvbnN0IGV4dCA9IFN0cmluZyhwYXRoKS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIExBTkdTW2V4dF0gfHwgJ3R4dCdcbn1cblxuY29uc3QgY2FjaGUgPSBuZXcgTWFwKClcbmNvbnN0IHBlbmRpbmcgPSBuZXcgU2V0KClcbmNvbnN0IGZhaWxlZCA9IG5ldyBTZXQoKVxuY29uc3QgW3ZlcnNpb24sIHNldFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG5cbmV4cG9ydCBjb25zdCBoaWdobGlnaHRWZXJzaW9uID0gdmVyc2lvblxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0KGNvZGUsIGxhbmcpIHtcbiAgY29uc3Qgc2FmZUxhbmcgPSBsYW5nICYmICFmYWlsZWQuaGFzKGxhbmcpID8gbGFuZyA6ICd0eHQnXG4gIGNvbnN0IHRoZW1lID0gc2hpa2lUaGVtZSgpXG4gIHJldHVybiBjb2RlXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3RoZW1lfVxcbiR7c2FmZUxhbmd9XFxuJHtsaW5lfWBcbiAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkgcmV0dXJuIGNhY2hlLmdldChrZXkpXG4gICAgICB3YXJtKGxpbmUsIHNhZmVMYW5nLCB0aGVtZSwga2V5KVxuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiB3YXJtKGxpbmUsIGxhbmcsIHRoZW1lLCBrZXkpIHtcbiAgaWYgKHBlbmRpbmcuaGFzKGtleSkpIHJldHVyblxuICBwZW5kaW5nLmFkZChrZXkpXG4gIGNvZGVUb0FOU0kobGluZSwgbGFuZywgdGhlbWUpXG4gICAgLnRoZW4oKGFuc2kpID0+IGNhY2hlLnNldChrZXksIGFuc2kucmVwbGFjZSgvXFxuJC8sICcnKSkpXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIGZhaWxlZC5hZGQobGFuZylcbiAgICAgIGNhY2hlLnNldChrZXksIGxpbmUpXG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBwZW5kaW5nLmRlbGV0ZShrZXkpXG4gICAgICBzZXRWZXJzaW9uKCh2KSA9PiB2ICsgMSlcbiAgICB9KVxufVxuIiwgImNvbnN0IExFVkVMUyA9IFsnICcsICdcdTI1OEYnLCAnXHUyNThFJywgJ1x1MjU4RCcsICdcdTI1OEMnLCAnXHUyNThCJywgJ1x1MjU4QScsICdcdTI1ODknLCAnXHUyNTg4J11cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRCYXIocGVyY2VudCwgd2lkdGggPSA0KSB7XG4gIGNvbnN0IGVpZ2h0aHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcGVyY2VudCkpICogd2lkdGggKiA4IC8gMTAwKVxuICBjb25zdCBmdWxsID0gTWF0aC5mbG9vcihlaWdodGhzIC8gOClcbiAgY29uc3QgcGFydGlhbCA9IGVpZ2h0aHMgJSA4XG4gIHJldHVybiAnXHUyNTg4Jy5yZXBlYXQoZnVsbCkgKyAocGFydGlhbCA/IExFVkVMU1twYXJ0aWFsXSA6ICcnKSArICcgJy5yZXBlYXQod2lkdGggLSBmdWxsIC0gKHBhcnRpYWwgPyAxIDogMCkpXG59XG4iLCAiaW1wb3J0IHsgZWFzZSwgbGluZWFyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuZnVuY3Rpb24gdG9SZ2IoY29sb3IpIHtcbiAgaWYgKGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KSxcbiAgICBdXG4gIH1cbiAgcmV0dXJuIFsxMjcsIDEyNywgMTI3XVxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIGZyb21cbiAgY29uc3QgYSA9IHRvUmdiKGZyb20pXG4gIGNvbnN0IGIgPSB0b1JnYih0bylcbiAgY29uc3QgY2hhbm5lbHMgPSBhLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkpXG4gIHJldHVybiBgIyR7Y2hhbm5lbHMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFuaW1hdGVkVmFsdWUoeyB2YWx1ZSwgaW5pdGlhbCA9IHZhbHVlLCBkdXJhdGlvbiA9IDEwMDAsIGNvbG9yLCBoaWdobGlnaHQsIGJhY2tncm91bmQsIGZvcm1hdCA9IFN0cmluZyB9KSB7XG4gIGNvbnN0IGRpc3BsYXllZCA9IHVzZUFuaW1hdGVkKGluaXRpYWwsIGVhc2UoZHVyYXRpb24pKVxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShkdXJhdGlvbiwgbGluZWFyKSlcblxuICBpZiAodmFsdWUgIT09IGRpc3BsYXllZC5fYW5pbS50YXJnZXQpIHtcbiAgICBkaXNwbGF5ZWQuc2V0KHZhbHVlKVxuICAgIGdsb3cuc25hcCgxKVxuICAgIGdsb3cuc2V0KDApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihjb2xvciwgaGlnaGxpZ2h0LCBnbG93KCkpLCBiZzogYmFja2dyb3VuZCB9fT5cbiAgICAgIHtmb3JtYXQoZGlzcGxheWVkKCkpfVxuICAgIDwvdGV4dD5cbiAgKVxufVxuIiwgImltcG9ydCB7IERpZmYsIGVhc2UsIEhvcml6b250YWxTY3JvbGxCb3gsIGxpbmVhciwgTWFya2Rvd24sIFNwaW5uZXIsIHVzZUFuaW1hdGVkIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4sIFBFRVIgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0LCBsYW5nRm9yUGF0aCB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuXG5leHBvcnQgeyBkZWZhdWx0VGl0bGUgYXMgdWlUaXRsZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvcmVjb3JkZXIuanMnXG5cbmZ1bmN0aW9uIFByb3NlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8dGV4dD57c2hvd259PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvZGVTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IFsuLi5saW5lXS5sZW5ndGgpKSArIDJcbiAgcmV0dXJuIChcbiAgICA8SG9yaXpvbnRhbFNjcm9sbEJveCBjb250ZW50V2lkdGg9e2NvbnRlbnRXaWR0aH0gc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwga2V5KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrZXl9IHN0eWxlPXt7IG92ZXJmbG93OiAnbm93cmFwJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvSG9yaXpvbnRhbFNjcm9sbEJveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUcmFuc2NyaXB0Q29kZUJsb2NrKHByb3BzKSB7XG4gIGNvbnN0IGxhbmd1YWdlID0gcHJvcHMubGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgQ29tcG9uZW50ID0gWydtZCcsICdtYXJrZG93bicsICd0ZXh0JywgJ3R4dCcsICdwbGFpbnRleHQnXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBQcm9zZVNuaXBwZXQgOiBDb2RlU25pcHBldFxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydCkge1xuICBpZiAoIWRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiB7IGJlZm9yZTogU3RyaW5nKHJldmVydD8uYmVmb3JlIHx8ICcnKSwgYWZ0ZXI6IFN0cmluZyhyZXZlcnQ/LmFmdGVyIHx8ICcnKSB9XG4gIGNvbnN0IGJlZm9yZSA9IFtdXG4gIGNvbnN0IGFmdGVyID0gW11cbiAgZGlmZi5odW5rcy5mb3JFYWNoKChodW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgYmVmb3JlLnB1c2goJ1x1MjJFRicpXG4gICAgICBhZnRlci5wdXNoKCdcdTIyRUYnKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ2FkZCcpIGJlZm9yZS5wdXNoKGxpbmUudGV4dClcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdyZW1vdmUnKSBhZnRlci5wdXNoKGxpbmUudGV4dClcbiAgICB9XG4gIH0pXG4gIHJldHVybiB7IGJlZm9yZTogYmVmb3JlLmpvaW4oJ1xcbicpLCBhZnRlcjogYWZ0ZXIuam9pbignXFxuJykgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCkge1xuICBpZiAoZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIGRpZmYuaHVua3MucmVkdWNlKChzdW0sIGgpID0+IHN1bSArIGgubGluZXMubGVuZ3RoLCAwKVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICByZXR1cm4gTWF0aC5tYXgocHJldmlldy5hZnRlci5zcGxpdCgnXFxuJykubGVuZ3RoLCBwcmV2aWV3LmJlZm9yZS5zcGxpdCgnXFxuJykubGVuZ3RoLCAyKVxufVxuXG5mdW5jdGlvbiBmbXREdXJhdGlvbihtcykge1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2BcbiAgY29uc3Qgc2VjcyA9IE1hdGgucm91bmQobXMgLyAxMDAwKVxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gZm10UnVubmluZyhtcykge1xuICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gIHJldHVybiBzZWNzIDwgNjAgPyBgJHtzZWNzfXNgIDogYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBjb25zdCByZ2IgPSAoY29sb3IpID0+IGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3XG4gICAgPyBbMSwgMywgNV0ubWFwKChpKSA9PiBwYXJzZUludChjb2xvci5zbGljZShpLCBpICsgMiksIDE2KSlcbiAgICA6IFsxMjcsIDEyNywgMTI3XVxuICBjb25zdCBhID0gcmdiKGZyb20pXG4gIGNvbnN0IGIgPSByZ2IodG8pXG4gIHJldHVybiBgIyR7YS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTElNSVQgPSA1XG5jb25zdCBCQVNIX09VVFBVVF9MSU5FUyA9IDEwXG5jb25zdCBUT09MX05BTUVfRkxBU0hfTVMgPSA5MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyA9IDUwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX01TID0gNzAwXG5cbmZ1bmN0aW9uIGRlbGF5ZWRMaW5lYXIodCkge1xuICBjb25zdCBkZWxheSA9IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyAvIChERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMpXG4gIHJldHVybiB0IDw9IGRlbGF5ID8gMCA6ICh0IC0gZGVsYXkpIC8gKDEgLSBkZWxheSlcbn1cblxuZnVuY3Rpb24gRGVzY3JpcHRpb25SZXZlYWwoeyBjaGlsZHJlbiwgcnVubmluZyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKHJ1bm5pbmcgPyAwIDogMSwgZWFzZShERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMsIGRlbGF5ZWRMaW5lYXIpKVxuICBpZiAoIXJ1bm5pbmcpIHJldmVhbC5zZXQoMSlcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihhY2NlbnQoKSwgRkcsIHJldmVhbCgpKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCB9fT57Y2hpbGRyZW59PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5lcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW11cbiAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJylcbiAgaWYgKGxpbmVzLmF0KC0xKSA9PT0gJycpIGxpbmVzLnBvcCgpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBCYXNoT3V0cHV0KHsgdmFsdWUsIGxpbmVTdGFydCwgbGluZUNvdW50IH0pIHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXRMaW5lcyh2YWx1ZSlcbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3duID0gbGluZXMuc2xpY2UoLUJBU0hfT1VUUFVUX0xJTkVTKVxuICBjb25zdCBmaXJzdCA9IGxpbmVTdGFydCB8fCAobGluZUNvdW50ID8gbGluZUNvdW50IC0gc2hvd24ubGVuZ3RoICsgMSA6IGxpbmVzLmxlbmd0aCAtIHNob3duLmxlbmd0aCArIDEpXG4gIGNvbnN0IGxhc3QgPSBsaW5lQ291bnQgfHwgZmlyc3QgKyBzaG93bi5sZW5ndGggLSAxXG4gIGNvbnN0IGd1dHRlcldpZHRoID0gU3RyaW5nKGxhc3QpLmxlbmd0aFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtzaG93bi5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgPGJveCBrZXk9e2ZpcnN0ICsgaX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtTdHJpbmcoZmlyc3QgKyBpKS5wYWRTdGFydChndXR0ZXJXaWR0aCl9IGB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbXBhY3RUb29sU2lnbih7IHRvb2wgfSkge1xuICBpZiAodG9vbC5uYW1lICE9PSAnYmFzaCcpIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG4gIGlmICh0b29sLmJhY2tncm91bmQpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eydcdTIxQUEgJ308L3RleHQ+XG4gIGlmICh0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aDogMiB9fT48U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+PC9ib3g+XG4gIGlmICh0b29sLmV4aXRDb2RlID09PSAwKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PnsnXHUyNzEzICd9PC90ZXh0PlxuICBpZiAodG9vbC5leGl0Q29kZSAhPSBudWxsKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57J1x1MDBENyAnfTwvdGV4dD5cbiAgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gVG9vbEdyb3VwKHsgaXRlbSwgdmVyYm9zZSB9KSB7XG4gIGNvbnN0IGxhdGVzdENhbGxJZCA9IGl0ZW0udG9vbHMuYXQoLTEpPy5jYWxsSWRcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoVE9PTF9OQU1FX0ZMQVNIX01TLCBsaW5lYXIpKVxuICBpZiAobGF0ZXN0Q2FsbElkICE9PSBnbG93Ll9jYWxsSWQpIHtcbiAgICBnbG93Ll9jYWxsSWQgPSBsYXRlc3RDYWxsSWRcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHtcbiAgICAgIGdsb3cuc25hcCgxKVxuICAgICAgZ2xvdy5zZXQoMClcbiAgICB9XG4gIH1cblxuICBpZiAodmVyYm9zZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7KGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSwgaSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgICAgICAgID8gPE1lc3NhZ2Uga2V5PXtpfSBpdGVtPXtlbnRyeX0gdmVyYm9zZSAvPlxuICAgICAgICAgIDogPFRvb2xDYXJkIGtleT17aX0gey4uLmVudHJ5fSB2ZXJib3NlIC8+KX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHRvb2wgb2YgaXRlbS50b29scykgY291bnRzLnNldCh0b29sLm5hbWUsIChjb3VudHMuZ2V0KHRvb2wubmFtZSkgfHwgMCkgKyAxKVxuICBjb25zdCBlbnRyaWVzID0gWy4uLmNvdW50c11cbiAgY29uc3QgdG90YWxNcyA9IGl0ZW0udG9vbHMucmVkdWNlKChzdW0sIHRvb2wpID0+IHN1bSArICh0b29sLmR1cmF0aW9uTXMgfHwgMCksIDApXG4gIGNvbnN0IGxhdGVzdE5hbWUgPSBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZVxuICBjb25zdCBhY3Rpdml0eSA9IChpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICA/IHsgLi4uZW50cnksIG5hbWU6ICd0aG91Z2h0cycsIGRlc2NyaXB0aW9uOiBlbnRyeS50ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksIHRob3VnaHQ6IHRydWUgfVxuICAgIDogZW50cnkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmRlc2NyaXB0aW9uKVxuICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5zbGljZSgtVE9PTF9ERVNDUklQVElPTl9MSU1JVClcbiAgY29uc3QgaGlkZGVuRGVzY3JpcHRpb25zID0gYWN0aXZpdHkubGVuZ3RoIC0gZGVzY3JpcHRpb25zLmxlbmd0aFxuICBjb25zdCB0b29sTmFtZVdpZHRoID0gTWF0aC5tYXgoMCwgLi4uZGVzY3JpcHRpb25zLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUubGVuZ3RoKSlcbiAgY29uc3QgdmlzaWJsZUJhc2ggPSBpdGVtLmFjdGl2ZSAmJiBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZSA9PT0gJ2Jhc2gnID8gaXRlbS50b29scy5hdCgtMSkgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICB7aXRlbS5hY3RpdmUgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjcxMzwvdGV4dD59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhXcmFwOiAnd3JhcCcsIGZsZXhHcm93OiAxLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PiBDYWxsZWQgPC90ZXh0PlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW25hbWUsIGNvdW50XSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtuYW1lfSBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgJiYgbmFtZSA9PT0gbGF0ZXN0TmFtZSA/IG1peENvbG9yKEZHLCBhY2NlbnQoKSwgZ2xvdygpKSA6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAge2Ake2kgPyAnLCAnIDogJyd9JHtuYW1lfSR7Y291bnQgPT09IDEgPyAnJyA6IGAgJHtjb3VudH0gdGltZXNgfWB9XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dG90YWxNcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntmbXREdXJhdGlvbih0b3RhbE1zKX08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAge2hpZGRlbkRlc2NyaXB0aW9ucyA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8dGV4dD57JyAnLnJlcGVhdCh0b29sTmFtZVdpZHRoICsgNCl9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgLi4uJHtoaWRkZW5EZXNjcmlwdGlvbnN9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rlc2NyaXB0aW9ucy5tYXAoKHRvb2wsIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17dG9vbC5jYWxsSWQgfHwgYHRob3VnaHQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodCA/IDx0ZXh0PnsnICAnfTwvdGV4dD4gOiA8Q29tcGFjdFRvb2xTaWduIHRvb2w9e3Rvb2x9IC8+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRvb2wudGhvdWdodCB9fT57YCR7dG9vbC5uYW1lLnBhZFN0YXJ0KHRvb2xOYW1lV2lkdGgpfSAgYH08L3RleHQ+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0XG4gICAgICAgICAgICAgID8gPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PjxNYXJrZG93biB0ZXh0PXt0b29sLmRlc2NyaXB0aW9ufSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0gLz48L2JveD5cbiAgICAgICAgICAgICAgOiA8RGVzY3JpcHRpb25SZXZlYWwgcnVubmluZz17dG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJ30+e3Rvb2wuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvblJldmVhbD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICB7dmlzaWJsZUJhc2g/LnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh2aXNpYmxlQmFzaC50aXRsZSwgJ2Jhc2gnKX08L3RleHQ+fVxuICAgICAgICB7dmlzaWJsZUJhc2g/LmZ1bGxPdXRwdXQgJiYgPEJhc2hPdXRwdXQgdmFsdWU9e3Zpc2libGVCYXNoLmZ1bGxPdXRwdXR9IGxpbmVTdGFydD17dmlzaWJsZUJhc2gub3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVDb3VudH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sQ2FyZCh7IG5hbWUsIHRpdGxlLCB0aXRsZUxhbmcsIGRlc2NyaXB0aW9uLCBzdGF0dXMsIGRpZmYsIHJldmVydCwgZnVsbE91dHB1dCwgb3V0cHV0TGluZVN0YXJ0LCBvdXRwdXRMaW5lQ291bnQsIGVycm9yLCBiYWNrZ3JvdW5kLCB2ZXJib3NlLCBzdGFydGVkQXQsIGR1cmF0aW9uTXMgfSkge1xuICBjb25zdCBzaG93blRpdGxlID0gbmFtZSA9PT0gJ2Jhc2gnID8gbnVsbCA6IHRpdGxlTGFuZyAmJiB0aXRsZSA/IGhpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nKSA6IHRpdGxlXG4gIGNvbnN0IGlubGluZURlc2NyaXB0aW9uID0gIXNob3duVGl0bGVcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgY29uc3QgcnVubmluZyA9IHN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gIGNvbnN0IGludGVycnVwdGVkID0gc3RhdHVzID09PSAnaW50ZXJydXB0ZWQnXG4gIGNvbnN0IHJldmVydGVkID0gc3RhdHVzID09PSAncmV2ZXJ0ZWQnXG4gIGNvbnN0IGZhaWxlZCA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICBjb25zdCBvdXRMaW5lcyA9IGZ1bGxPdXRwdXQgPyBmdWxsT3V0cHV0LnNwbGl0KCdcXG4nKSA6IG51bGxcblxuICBjb25zdCBlbGFwc2VkID0gcnVubmluZyAmJiBzdGFydGVkQXQgPyBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDogMFxuICBjb25zdCB0b29rID0gIXJ1bm5pbmcgJiYgIWJhY2tncm91bmQgJiYgZHVyYXRpb25NcyAhPSBudWxsID8gZm10RHVyYXRpb24oZHVyYXRpb25NcykgOiBudWxsXG5cbiAgY29uc3QgaW5mbyA9IHJ1bm5pbmcgPyAoZWxhcHNlZCA+PSA1MDAwID8gYHJ1bm5pbmcgKCR7Zm10UnVubmluZyhlbGFwc2VkKX0pYCA6ICdydW5uaW5nJylcbiAgICA6IGludGVycnVwdGVkID8gJ2ludGVycnVwdGVkJ1xuICAgIDogcmV2ZXJ0ZWQgPyAncmV2ZXJ0ZWQnXG4gICAgOiBmYWlsZWQgPyBgZmFpbGVkJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBiYWNrZ3JvdW5kID8gJ2JhY2tncm91bmQgIHNoZWxsIGxpc3RlZCBiZWxvdydcbiAgICA6IGRpZmYgPyBgKyR7ZGlmZi5hZGRpdGlvbnN9IC0ke2RpZmYuZGVsZXRpb25zfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogb3V0TGluZXMgPyBgJHtvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RofSAkeyhvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RoKSA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBgZG9uZSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICB7cnVubmluZ1xuICAgICAgICAgID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPlxuICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGludGVycnVwdGVkIHx8IGZhaWxlZCA/IFJFRCA6IHJldmVydGVkID8gTVVURUQgOiBhY2NlbnQoKSB9fT57aW50ZXJydXB0ZWQgPyAnXHUyNzE3JyA6IGZhaWxlZCA/ICdcdTI3MTcnIDogcmV2ZXJ0ZWQgPyAnXHUyMUE5JyA6ICdcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57YCR7bmFtZS5wYWRFbmQoNSl9IGB9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkcgfX0+e3Nob3duVGl0bGUgfHwgZGVzY3JpcHRpb24gfHwgbmFtZX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2luZm99YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIHtkZXNjcmlwdGlvbiAmJiAhaW5saW5lRGVzY3JpcHRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Rlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiB0aXRsZSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcgfHwgJ2Jhc2gnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtmYWlsZWQgJiYgZXJyb3IgJiYgKFxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2Vycm9yfWB9PC90ZXh0PlxuICAgICAgKX1cbiAgICAgIHtyZXZlcnQgJiYgIXJ1bm5pbmcgJiYgIXJldmVydGVkICYmICEoZGlmZiAmJiBkaWZmLmFkZGl0aW9ucyA9PT0gMCAmJiBkaWZmLmRlbGV0aW9ucyA9PT0gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8RGlmZlxuICAgICAgICAgICAgYmVmb3JlPXtwcmV2aWV3LmJlZm9yZX1cbiAgICAgICAgICAgIGFmdGVyPXtwcmV2aWV3LmFmdGVyfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmdGb3JQYXRoKHJldmVydC5wYXRoKX1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29udGV4dD17M31cbiAgICAgICAgICAgIGZvbGRzPXtmYWxzZX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIGZ1bGxPdXRwdXQgJiYgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT48QmFzaE91dHB1dCB2YWx1ZT17ZnVsbE91dHB1dH0gbGluZVN0YXJ0PXtvdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17b3V0cHV0TGluZUNvdW50fSAvPjwvYm94Pn1cbiAgICAgIHtvdXRMaW5lcyAmJiB2ZXJib3NlICYmIG5hbWUgIT09ICdiYXNoJyAmJiAhcnVubmluZyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7b3V0TGluZXMuc2xpY2UoMCwgMjAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge291dExpbmVzLmxlbmd0aCA+IDIwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtvdXRMaW5lcy5sZW5ndGggLSAyMDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25UdXJuKHsgaXRlbSwgdmVyYm9zZSwgY29tcGFjdCA9IGZhbHNlIH0pIHtcbiAgY29uc3QgcGFydGljaXBhbnRBID0gaXRlbS5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgaXRlbS5yb2xlID09PSAncHJvcG9zZXInXG4gIGNvbnN0IHN5bnRoZXNpcyA9IGl0ZW0ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgY29uc3QgbGFiZWwgPSBzeW50aGVzaXMgPyAnU3ludGhlc2lzJyA6IGAke3BhcnRpY2lwYW50QSA/ICdQYXJ0aWNpcGFudCBBJyA6ICdQYXJ0aWNpcGFudCBCJ30gIHJvdW5kICR7aXRlbS5yb3VuZH1gXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBwYWRkaW5nWDogY29tcGFjdCA/IDAgOiAyLCBiZzogY29tcGFjdCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVEIH19IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IGNvbXBhY3QgPyAyIDogMiwgcGFkZGluZ1k6IDEsIGJnOiBzeW50aGVzaXMgPyBTRUxFQ1RfQkcgOiBwYXJ0aWNpcGFudEEgfHwgY29tcGFjdCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0PlxuICAgICAgICAgIHtpdGVtLnRvb2xzPy5tYXAoKHRvb2wpID0+IDxUb29sQ2FyZCBrZXk9e3Rvb2wuY2FsbElkfSB7Li4udG9vbH0gdmVyYm9zZT17dmVyYm9zZX0gLz4pfVxuICAgICAgICAgIHt0ZXh0ICYmIChcbiAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIGRlbGliZXJhdGlvblJvd3ModHVybnMpIHtcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGZvciAoY29uc3QgdHVybiBvZiB0dXJucykge1xuICAgIGlmICh0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnIHx8ICF0dXJuLnBhcmFsbGVsR3JvdXApIHtcbiAgICAgIHJvd3MucHVzaChbdHVybl0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHJvd3MuZmluZCgocm93KSA9PiByb3dbMF0/LnBhcmFsbGVsR3JvdXAgPT09IHR1cm4ucGFyYWxsZWxHcm91cClcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnB1c2godHVybilcbiAgICBlbHNlIHJvd3MucHVzaChbdHVybl0pXG4gIH1cbiAgcmV0dXJuIHJvd3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlbGliZXJhdGlvbkV4Y2hhbmdlKHsgdHVybnMsIHZlcmJvc2UsIHdpZGUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge2RlbGliZXJhdGlvblJvd3ModHVybnMpLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzeW50aGVzaXMgPSByb3dbMF0/LnJvbGUgPT09ICdzeW50aGVzaXMnXG4gICAgICAgIGlmICghd2lkZSB8fCBzeW50aGVzaXMpIHJldHVybiByb3cubWFwKCh0dXJuKSA9PiA8RGVsaWJlcmF0aW9uVHVybiBrZXk9e2Ake3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWB9IGl0ZW09e3R1cm59IHZlcmJvc2U9e3ZlcmJvc2V9IC8+KVxuICAgICAgICBjb25zdCBsZWZ0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IHR1cm4ucm9sZSA9PT0gJ3Byb3Bvc2VyJylcbiAgICAgICAgY29uc3QgcmlnaHQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYicgfHwgdHVybi5yb2xlID09PSAncmV2aWV3ZXInKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dbMF0/LnBhcmFsbGVsR3JvdXAgfHwgYCR7cm93WzBdPy5yb2xlfToke3Jvd1swXT8ucm91bmR9OiR7aW5kZXh9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHdpZHRoOiAnMTAwJScsIG92ZXJmbG93OiAnY2xpcCcsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57bGVmdCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtsZWZ0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0IC8+fTwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IFBBTkVMX0JHIH19IC8+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57cmlnaHQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17cmlnaHR9IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3QgLz59PC9ib3g+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2hvd0xvY2tlZCA9IGZhbHNlIH0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gPFRvb2xHcm91cCBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJyAmJiBpdGVtLm9yaWdpbiA9PT0gJ3ZpZXcnKSB7XG4gICAgY29uc3QgbGFiZWwgPSAvXlxcW3ZpZXc6IChbXlxcXV0rKVxcXS8uZXhlYyhpdGVtLnRleHQpPy5bMV0gfHwgJ2ltYWdlJ1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyNzEzIFZpZXdlZCAke2xhYmVsfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLm5vdGljZXMubGVuZ3RofSBhZ2VudHMgZmluaXNoZWRgfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2l0ZW0ubm90aWNlcy5tYXAoKG5vdGljZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19Pntub3RpY2UudGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcpIHtcbiAgICByZXR1cm4gPFRvb2xDYXJkIHsuLi5pdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N1bW1hcnknKSB7XG4gICAgY29uc3QgbGluZXMgPSBpdGVtLnRleHQuc3BsaXQoJ1xcbicpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntpdGVtLnNvdXJjZSA9PT0gJ2NvbXBhY3QnID8gJ1x1MjcyNiBzdW1tYXJ5ICBjb252ZXJzYXRpb24gY29tcGFjdGVkIGFib3ZlIHRoaXMgcG9pbnQnIDogJ1x1MjcyNiBzdW1tYXJ5ICByZXdvdW5kIGNvbnZlcnNhdGlvbid9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2xpbmVzLmxlbmd0aH0gJHtsaW5lcy5sZW5ndGggPT09IDEgPyAnbGluZScgOiAnbGluZXMnfWB9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtsaW5lcy5zbGljZSgwLCA1MDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtsaW5lcy5sZW5ndGggPiA1MDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7bGluZXMubGVuZ3RoIC0gNTAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8TWFya2Rvd24gdGV4dD17aXRlbS50ZXh0fSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpIHtcbiAgICByZXR1cm4gPGJveCBzdHlsZT17eyBtYXJnaW5Ub3A6IDEgfX0+PERlbGliZXJhdGlvblR1cm4gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz48L2JveD5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdub3RpY2UnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0udGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2tpbGwnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjcyNiBza2lsbDogJHtpdGVtLm5hbWV9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjUwMFx1MjUwMCAke2l0ZW0uY291bnR9IHRvb2wgJHtpdGVtLmNvdW50ID09PSAxID8gJ2ludGVyYWN0aW9uJyA6ICdpbnRlcmFjdGlvbnMnfSBoaWRkZW4gXHUyNTAwXHUyNTAwYH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtY29tbWFuZCcpIHtcbiAgICBjb25zdCBzaG93biA9IGhpZ2hsaWdodChpdGVtLnRleHQsICdiYXNoJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J2NvbW1hbmQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0+e2Ake2kgPT09IDAgPyAnJCAnIDogJyAgJ30ke2xpbmUgfHwgJyAnfWB9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLW91dHB1dCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J291dHB1dCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7aXRlbS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdwZWVyJykge1xuICAgIGNvbnN0IHN0YXR1cyA9IGl0ZW0uZGlyZWN0aW9uID09PSAnb3V0Z29pbmcnID8gYCAgJHtpdGVtLnN0YXR1cyB8fCAndW5rbm93bid9YCA6ICcnXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IFBFRVIgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiAxLCBwYWRkaW5nWTogMSwgYmc6IFBBTkVMX0JHIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFBFRVIsIGJvbGQ6IHRydWUgfX0+e2BAJHtpdGVtLmZyb20ubmFtZX0gXHUyMTkyIEAke2l0ZW0udG8ubmFtZX0ke3N0YXR1c31gfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBQRUVSIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAge2l0ZW0uZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57aXRlbS5lcnJvcn08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJykge1xuICAgIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ1VzZXInIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IFBBTkVMX0JHIH19IC8+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2l0ZW0udGV4dH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnQXNzaXN0YW50JyA6IG51bGxcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCB9fSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IHNob3dMb2NrZWQgPyAxIDogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dElucHV0LCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBjb252ZXJzYXRpb25NYXRjaGVzLCBoaWdobGlnaHRDb252ZXJzYXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnZlcnNhdGlvbi1zZWFyY2guanMnXG5cbmZ1bmN0aW9uIFNjcm9sbEFuY2hvcih7IHRhcmdldCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHRhcmdldC5hbmNob3JZID0gbGF5b3V0LnlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gU2VhcmNoTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIGN1cnJlbnRNYXRjaCwgc2VhcmNoIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgaWYgKGN1cnJlbnRNYXRjaCkgc2VhcmNoLnNjcm9sbFRvTWF0Y2gobGF5b3V0LCBjdXJyZW50TWF0Y2gpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pIHtcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtlbnRlckZvY3VzLCBzZXRFbnRlckZvY3VzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Njcm9sbFJlcXVlc3QsIHNldFNjcm9sbFJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzY3JvbGxdID0gY3JlYXRlU2lnbmFsKHsgYW5jaG9yWTogMCwga2V5OiBudWxsIH0pXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJGb2N1cygpIHtcbiAgICBpZiAoIWFjdGl2ZSgpKSByZXR1cm5cbiAgICBmbS5pdGVtKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICBpZiAoZW50ZXJGb2N1cygpKSB7XG4gICAgICBzZXRFbnRlckZvY3VzKGZhbHNlKVxuICAgICAgZm0uZm9jdXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0RW50ZXJGb2N1cyh0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2UoeyByZXN0b3JlRm9jdXMgPSB0cnVlIH0gPSB7fSkge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBpZiAocmVzdG9yZUZvY3VzICYmIGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIGZtLmZvY3VzKCdmZWVkJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBtYXRjaGVzKSB7XG4gICAgaWYgKGFjdGl2ZSgpICYmICFmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSB7XG4gICAgICBjbG9zZSh7IHJlc3RvcmVGb2N1czogZmFsc2UgfSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmICghYWN0aXZlKCkgfHwgIWNvbW1pdHRlZCgpKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBjb3VudCA9IG1hdGNoZXMubGVuZ3RoXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIGNsb3NlKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyAmJiAhZXZlbnQuc2hpZnQpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSArIDEpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgKGV2ZW50LnNoaWZ0ICYmIGV2ZW50LmtleSA9PT0gJ24nKSkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpIC0gMSArIGNvdW50KSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnbycpIHJldHVybiBmYWxzZVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKGl0ZW1zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnZlcnNhdGlvbk1hdGNoZXMoaXRlbXMsIHF1ZXJ5KCksIHZlcmJvc2UoKSlcbiAgICBjb25zdCBsYXN0SW5kZXggPSBNYXRoLm1heCgwLCBtYXRjaGVzLmxlbmd0aCAtIDEpXG4gICAgaWYgKGluZGV4KCkgPiBsYXN0SW5kZXgpIHNldEluZGV4KGxhc3RJbmRleClcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGl0ZW1zOiBhY3RpdmUoKSA/IGhpZ2hsaWdodENvbnZlcnNhdGlvbihpdGVtcywgcXVlcnkoKSwgaW5kZXgoKSwgdmVyYm9zZSgpKSA6IGl0ZW1zLFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvTWF0Y2gobGF5b3V0LCBtYXRjaCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHNjcm9sbCgpXG4gICAgY29uc3Qga2V5ID0gYCR7cXVlcnkoKX1cXDAke2luZGV4KCl9XFwwJHt2ZXJib3NlKCl9XFwwJHtzY3JvbGxSZXF1ZXN0KCl9YFxuICAgIGlmICh0YXJnZXQua2V5ID09PSBrZXkpIHJldHVyblxuICAgIHRhcmdldC5rZXkgPSBrZXlcbiAgICBzZXRGb2xsb3coZmFsc2UpXG4gICAgc2V0T2Zmc2V0KE1hdGgubWF4KDAsIGxheW91dC55IC0gdGFyZ2V0LmFuY2hvclkgKyBtYXRjaC5saW5lIC0gMykpXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVRdWVyeSh2YWx1ZSkge1xuICAgIHNldFF1ZXJ5KHZhbHVlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBxdWVyeSxcbiAgICBjb21taXR0ZWQsXG4gICAgaW5kZXgsXG4gICAgZm9jdXNlZDogKCkgPT4gZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSxcbiAgICByZWdpc3RlckZvY3VzLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgaGFuZGxlSW5wdXQsXG4gICAgcHJlcGFyZSxcbiAgICBzY3JvbGw6IHNjcm9sbCgpLFxuICAgIHNjcm9sbFRvTWF0Y2gsXG4gICAgY29tbWl0OiAoKSA9PiBzZXRDb21taXR0ZWQodHJ1ZSksXG4gICAgdXBkYXRlUXVlcnksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnZlcnNhdGlvblNlYXJjaEJhcih7IHNlYXJjaCwgbWF0Y2hlcyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFNocmluazogMCwgaGVpZ2h0OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnLyAnfTwvdGV4dD5cbiAgICAgIHtzZWFyY2guY29tbWl0dGVkKClcbiAgICAgICAgPyA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGZsZXhHcm93OiAxIH19PntzZWFyY2gucXVlcnkoKX08L3RleHQ+XG4gICAgICAgIDogPFRleHRJbnB1dFxuICAgICAgICAgICAgZm9jdXNlZD17c2VhcmNoLmZvY3VzZWQoKX1cbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2gucXVlcnkoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZWFyY2gudXBkYXRlUXVlcnl9XG4gICAgICAgICAgICBvblN1Ym1pdD17c2VhcmNoLmNvbW1pdH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtzZWFyY2guY2xvc2V9XG4gICAgICAgICAgLz59XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21hdGNoZXMubGVuZ3RoID8gYCR7c2VhcmNoLmluZGV4KCkgKyAxfS8ke21hdGNoZXMubGVuZ3RofWAgOiAnMC8wJ308L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQW5jaG9yIGFzIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgU2VhcmNoTWVzc2FnZSBhcyBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlIH1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW1zLCBhY3RpdmUgPSBmYWxzZSkge1xuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDspIHtcbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2ldLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbZW5kXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbZW5kXS5raW5kID09PSAndGhvdWdodHMnKSkgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIGNvbnN0IHRvb2xzID0gcnVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndG9vbCcpXG4gICAgICByZXN1bHQucHVzaCh7IGtpbmQ6ICd0b29sLWdyb3VwJywgY2FsbElkOiB0b29scy5hdCgtMSk/LmNhbGxJZCwgaXRlbXM6IHJ1biwgdG9vbHMsIGFjdGl2ZTogYWN0aXZlICYmIGVuZCA9PT0gaXRlbXMubGVuZ3RoIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbaV0uYWdlbnRDb21wbGV0aW9uKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbZW5kXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tlbmRdLmFnZW50Q29tcGxldGlvbikgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIHJlc3VsdC5wdXNoKHJ1bi5sZW5ndGggPT09IDEgPyBydW5bMF0gOiB7IGtpbmQ6ICdhZ2VudC1ub3RpY2UtZ3JvdXAnLCBub3RpY2VzOiBydW4gfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2krK10pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFdpbmRvdyhpdGVtcywgc2l6ZSkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGl0ZW1zLmxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IGhpZGRlbiA9IGl0ZW1zLnNsaWNlKDAsIHN0YXJ0KVxuICByZXR1cm4ge1xuICAgIGl0ZW1zOiBpdGVtcy5zbGljZShzdGFydCksXG4gICAgaGlkZGVuSXRlbXM6IGhpZGRlbi5sZW5ndGgsXG4gICAgaGlkZGVuQ291bnQ6IGhpZGRlbi5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIHNvdXJjZUl0ZW1Db3VudChpdGVtKSwgMCksXG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSXRlbUNvdW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gaXRlbS5pdGVtcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHJldHVybiBpdGVtLm5vdGljZXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHJldHVybiBpdGVtLmNvdW50XG4gIHJldHVybiAxXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIFRleHRJbnB1dCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVELCBGRywgRkdfU09GVCwgUEFORUxfQkcsIFNFTEVDVF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIGFuc3dlclRleHQocXVlc3Rpb24sIGFuc3dlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmpvaW4oJywgJylcbiAgcmV0dXJuIGFuc3dlciB8fCAnTm90IGFuc3dlcmVkJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUXVlc3Rpb25Gb3JtKHsgcmVxdWVzdCwgZm9jdXNlZCwgb25TdWJtaXQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgcXVlc3Rpb25zID0gcmVxdWVzdC5xdWVzdGlvbnNcbiAgY29uc3QgcmV2aWV3aW5nID0gcXVlc3Rpb25zLmxlbmd0aCA+IDFcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFthbnN3ZXJzLCBzZXRBbnN3ZXJzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY3VzdG9tLCBzZXRDdXN0b21dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmV2aWV3LCBzZXRSZXZpZXddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29udHJvbCwgc2V0Q29udHJvbF0gPSBjcmVhdGVTaWduYWwoJ2Fuc3dlcicpXG5cbiAgY29uc3QgcXVlc3Rpb24gPSAoKSA9PiBxdWVzdGlvbnNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gKCkgPT4gcXVlc3Rpb24oKS5vcHRpb25zIHx8IFtdXG4gIGNvbnN0IHJvd3MgPSAoKSA9PiBbLi4ub3B0aW9ucygpLCAuLi4ocXVlc3Rpb24oKS5hbGxvd090aGVyID09PSBmYWxzZSA/IFtdIDogW3sgbGFiZWw6ICdPdGhlcicsIG90aGVyOiB0cnVlIH1dKV1cbiAgY29uc3Qgc2VsZWN0ZWQgPSAobGFiZWwpID0+IChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmluY2x1ZGVzKGxhYmVsKVxuICBjb25zdCBvdGhlckFuc3dlciA9ICgpID0+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF1cbiAgICBjb25zdCBsYWJlbHMgPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmZpbmQoKHZhbHVlKSA9PiAhbGFiZWxzLmhhcyh2YWx1ZSkpIHx8ICcnXG4gICAgcmV0dXJuIGFuc3dlciAmJiAhbGFiZWxzLmhhcyhhbnN3ZXIpID8gYW5zd2VyIDogJydcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEFuc3dlcih2YWx1ZSkge1xuICAgIHNldEFuc3dlcnMoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIFtxdWVzdGlvbigpLmlkXTogdmFsdWUgfSkpXG4gIH1cblxuICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBzZXRDdXJzb3IoMClcbiAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgIGlmIChzdGVwKCkgPCBxdWVzdGlvbnMubGVuZ3RoIC0gMSkgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIGVsc2UgaWYgKHJldmlld2luZykgeyBzZXRDdXJzb3IocXVlc3Rpb25zLmxlbmd0aCk7IHNldFJldmlldyh0cnVlKSB9XG4gICAgZWxzZSBmaW5pc2goKVxuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIG9uU3VibWl0KHF1ZXN0aW9ucy5tYXAoKGl0ZW0pID0+ICh7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyOiBhbnN3ZXJzKClbaXRlbS5pZF0gPz8gJycgfSkpKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0VGV4dCh2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGlmICghYW5zd2VyKSByZXR1cm5cbiAgICBzZXRBbnN3ZXIoYW5zd2VyKVxuICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICBlbHNlIGFkdmFuY2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0T3RoZXIodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBjb25zdCBrbm93biA9IG5ldyBTZXQoKGl0ZW0ub3B0aW9ucyB8fCBbXSkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgY29uc3QgY2hvaWNlcyA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IChhbnN3ZXJzKClbaXRlbS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpIDogW11cbiAgICBjb25zdCBuZXh0QW5zd2VyID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gWy4uLmNob2ljZXMsIC4uLihhbnN3ZXIgPyBbYW5zd2VyXSA6IFtdKV0gOiBhbnN3ZXJcbiAgICBzZXRBbnN3ZXIobmV4dEFuc3dlcilcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3NpbmdsZScgJiYgYW5zd2VyKSB7XG4gICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgICBlbHNlIGFkdmFuY2UoKVxuICAgIH1cbiAgfVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIGlmIChjdXN0b20oKSkgeyBzZXRDdXN0b20oZmFsc2UpOyBzZXRDb250cm9sKCdhbnN3ZXInKSB9XG4gICAgICBlbHNlIGlmIChyZXZpZXcoKSkgc2V0UmV2aWV3KGZhbHNlKVxuICAgICAgZWxzZSBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZXZpZXcoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHF1ZXN0aW9ucy5sZW5ndGgsIGN1cnNvcigpICsgMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICAgIGlmIChjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCkgZmluaXNoKClcbiAgICAgICAgZWxzZSB7IHNldFN0ZXAoY3Vyc29yKCkpOyBzZXRDdXJzb3IoMCk7IHNldENvbnRyb2woJ2Fuc3dlcicpOyBzZXRSZXZpZXcoZmFsc2UpIH1cbiAgICAgIH0gZWxzZSByZXR1cm5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0ZXAoKSA+IDAgJiYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykpIHtcbiAgICAgIHNldENvbnRyb2woY29udHJvbCgpID09PSAnYmFjaycgPyAnYW5zd2VyJyA6ICdiYWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNvbnRyb2woKSA9PT0gJ2JhY2snKSByZXR1cm5cbiAgICBpZiAoY3VzdG9tKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpIHtcbiAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChxdWVzdGlvbigpPy50eXBlID09PSAndGV4dCcpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocm93cygpLmxlbmd0aCAtIDEsIGN1cnNvcigpICsgMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnc3BhY2UnICYmIHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHJvdy5vdGhlcikge1xuICAgICAgICBpZiAob3RoZXJBbnN3ZXIoKSkge1xuICAgICAgICAgIGNvbnN0IGtub3duID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgICAgICAgc2V0QW5zd2VyKChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpKVxuICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgfSBlbHNlIHNldEN1c3RvbSh0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXVxuICAgICAgICBzZXRBbnN3ZXIoY3VycmVudC5pbmNsdWRlcyhyb3cubGFiZWwpID8gY3VycmVudC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93LmxhYmVsKSA6IFsuLi5jdXJyZW50LCByb3cubGFiZWxdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykgYWR2YW5jZSgpXG4gICAgICBlbHNlIGlmIChyb3cub3RoZXIpIHNldEN1c3RvbSh0cnVlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldEFuc3dlcihyb3cubGFiZWwpXG4gICAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogcXVlc3Rpb24oKS5pZCwgcXVlc3Rpb246IHF1ZXN0aW9uKCkucXVlc3Rpb24sIGFuc3dlcjogcm93LmxhYmVsIH1dKVxuICAgICAgICBlbHNlIGFkdmFuY2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuXG4gIGlmIChyZXZpZXcoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXZpZXcgYW5zd2VyczwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyOiBlZGl0IG9yIHN1Ym1pdCAgZXNjOiBiYWNrPC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3F1ZXN0aW9ucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Fuc3dlclRleHQoaXRlbSwgYW5zd2VycygpW2l0ZW0uaWRdKX08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBiZzogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gJ2JsYWNrJyA6IEZHLCBib2xkOiB0cnVlIH19PiBTdWJtaXQgYW5zd2VycyA8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBpdGVtID0gcXVlc3Rpb24oKVxuICBjb25zdCBwcm9ncmVzcyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxID8gYCR7c3RlcCgpICsgMX0gb2YgJHtxdWVzdGlvbnMubGVuZ3RofWAgOiAnUXVlc3Rpb24nXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIHtzdGVwKCkgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBsYWJlbD1cIkJhY2tcIlxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2JhY2snfVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RlcChzdGVwKCkgLSAxKVxuICAgICAgICAgICAgICAgIHNldEN1cnNvcigwKVxuICAgICAgICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3Byb2dyZXNzfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2l0ZW0udHlwZSA9PT0gJ211bHRpJyA/ICdzcGFjZTogc2VsZWN0ICBlbnRlcjogY29udGludWUnIDogJ2VudGVyOiBhbnN3ZXInfSAgZXNjOiBjYW5jZWw8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgYm9sZDogdHJ1ZSB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICB7aXRlbS5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57aXRlbS5kZXNjcmlwdGlvbn08L3RleHQ+fVxuICAgICAge2l0ZW0udHlwZSA9PT0gJ3RleHQnID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBTRUxFQ1RfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTp0ZXh0YH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYW5zd2VyJ31cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB5b3VyIGFuc3dlclwiXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3R5cGVvZiBhbnN3ZXJzKClbaXRlbS5pZF0gPT09ICdzdHJpbmcnID8gYW5zd2VycygpW2l0ZW0uaWRdIDogJyd9XG4gICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0VGV4dH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7cm93cygpLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PlxuICAgICAgICAgICAgICAgIHtpdGVtLnR5cGUgPT09ICdtdWx0aSdcbiAgICAgICAgICAgICAgICAgID8gYCR7b3B0aW9uLm90aGVyID8gKG90aGVyQW5zd2VyKCkgPyAnW3hdJyA6ICdbIF0nKSA6IChzZWxlY3RlZChvcHRpb24ubGFiZWwpID8gJ1t4XScgOiAnWyBdJyl9IGBcbiAgICAgICAgICAgICAgICAgIDogYCR7Y3Vyc29yKCkgPT09IGluZGV4ID8gJ1x1MjAzQScgOiAnICd9IGB9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICB7b3B0aW9uLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntgICAke29wdGlvbi5kZXNjcmlwdGlvbn1gfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtvcHRpb24ub3RoZXIgJiYgKGN1c3RvbSgpIHx8IG90aGVyQW5zd2VyKCkpICYmIChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBjdXN0b20oKSA/IFBBTkVMX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nTGVmdDogNCB9fT5cbiAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTpvdGhlcmB9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY3VzdG9tKCl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBhbm90aGVyIGFuc3dlclwiXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17b3RoZXJBbnN3ZXIoKX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdE90aGVyfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCB1c2VNb3VzZSwgdXNlUmVzaXplIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIEVtcHR5Q2xvdWQoeyB3aWR0aCwgaGVpZ2h0LCB2ZXJzaW9uIH0pIHtcbiAgY29uc3QgW3BoYXNlLCBzZXRQaGFzZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3dha2UsIHNldFdha2VdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBsZXQgcHJldmlvdXMgPSBudWxsXG5cbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiAhPT0gJ21vdmUnICYmIGV2ZW50LmFjdGlvbiAhPT0gJ2RyYWcnKSByZXR1cm5cbiAgICBjb25zdCB4ID0gZXZlbnQueFxuICAgIGNvbnN0IHkgPSBldmVudC55XG4gICAgaWYgKHggPCAwIHx8IHggPj0gd2lkdGggfHwgeSA8IDAgfHwgeSA+PSBoZWlnaHQpIHJldHVyblxuICAgIGNvbnN0IGR4ID0gcHJldmlvdXMgPyB4IC0gcHJldmlvdXMueCA6IDBcbiAgICBjb25zdCBkeSA9IHByZXZpb3VzID8geSAtIHByZXZpb3VzLnkgOiAwXG4gICAgcHJldmlvdXMgPSB7IHgsIHkgfVxuICAgIGNvbnN0IHNwZWVkID0gTWF0aC5oeXBvdChkeCAqIDAuNSwgZHkpXG4gICAgaWYgKHNwZWVkID09PSAwKSByZXR1cm5cbiAgICBzZXRXYWtlKHBvaW50cyA9PiBbLi4ucG9pbnRzLnNsaWNlKC0yMCksIHsgeCwgeSwgZHgsIGR5LCBzcGVlZDogTWF0aC5taW4oNCwgc3BlZWQpLCBhZ2U6IDAgfV0pXG4gIH0pXG5cbiAgdXNlSW50ZXJ2YWwoKCkgPT4ge1xuICAgIHNldFBoYXNlKHZhbHVlID0+IHZhbHVlICsgMC4xNilcbiAgICBzZXRXYWtlKHBvaW50cyA9PiBwb2ludHMubWFwKHBvaW50ID0+ICh7IC4uLnBvaW50LCBhZ2U6IHBvaW50LmFnZSArIDEgfSkpLmZpbHRlcihwb2ludCA9PiBwb2ludC5hZ2UgPCAxOCkpXG4gIH0sIDkwKVxuXG4gIGNvbnN0IGdseXBocyA9ICcgIC4uOjorKyoqXHUyNTkxXHUyNTkyJ1xuICBjb25zdCByb3dzID0gW11cbiAgY29uc3QgYmFzZSA9IGFjY2VudCgpXG4gIGNvbnN0IHJnYiA9IC9eIyhbMC05YS1mXXs2fSkkL2kuZXhlYyhiYXNlKVxuICBjb25zdCBuZWlnaGJvcmluZyA9IHJnYlxuICAgID8gYCMke1tcbiAgICAgIE1hdGgubWF4KDAsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgwLCAyKSwgMTYpIC0gMTgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMiwgNCksIDE2KSArIDgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoNCwgNiksIDE2KSArIDI0KSxcbiAgICBdLm1hcCh2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxuICAgIDogYmFzZVxuXG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICBjb25zdCByb3cgPSBbXVxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgY29uc3QgcCA9IHBoYXNlKClcbiAgICAgIGNvbnN0IGJyb2FkID0gTWF0aC5zaW4oeCAqIDAuMDggKyBwKSArIE1hdGguc2luKHkgKiAwLjI5IC0gcCAqIDAuNykgKyBNYXRoLnNpbigoeCArIHkpICogMC4wNSArIHAgKiAwLjM1KVxuICAgICAgY29uc3Qgd2lzcHMgPSBNYXRoLnNpbih4ICogMC4xOSAtIHkgKiAwLjExIC0gcCAqIDAuNTUpICsgTWF0aC5zaW4oeCAqIDAuMDMgKyB5ICogMC40MyArIHAgKiAwLjQpXG4gICAgICBjb25zdCBwb2NrZXRzID0gTWF0aC5zaW4oeCAqIDAuMzEgKyBwICogMC44KSAqIE1hdGguc2luKHkgKiAwLjQ3IC0gcCAqIDAuMylcbiAgICAgIGxldCBicm9hZERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCB3aXNwRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IGludGVyYWN0aW9uID0gMFxuICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB3YWtlKCkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5oeXBvdChwb2ludC5keCAqIDAuNSwgcG9pbnQuZHkpIHx8IDFcbiAgICAgICAgY29uc3QgdXggPSBwb2ludC5keCAqIDAuNSAvIGxlbmd0aFxuICAgICAgICBjb25zdCB1eSA9IHBvaW50LmR5IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHJ4ID0gKHggLSBwb2ludC54KSAqIDAuNVxuICAgICAgICBjb25zdCByeSA9IHkgLSBwb2ludC55XG4gICAgICAgIGNvbnN0IGFsb25nID0gcnggKiB1eCArIHJ5ICogdXlcbiAgICAgICAgY29uc3QgYWNyb3NzID0gLXJ4ICogdXkgKyByeSAqIHV4XG4gICAgICAgIGNvbnN0IHRyYWlsaW5nID0gYWxvbmcgPD0gMiAmJiBhbG9uZyA+PSAtMTggLSBwb2ludC5zcGVlZCAqIDNcbiAgICAgICAgaWYgKCF0cmFpbGluZykgY29udGludWVcbiAgICAgICAgY29uc3QgYWdlID0gMSAtIHBvaW50LmFnZSAvIDE4XG4gICAgICAgIGNvbnN0IHRyYWlsID0gTWF0aC5leHAoLU1hdGgucG93KChhbG9uZyArIDQgKyBwb2ludC5hZ2UgKiAwLjM1KSAvICg3ICsgcG9pbnQuc3BlZWQgKiAyKSwgMikpXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IE1hdGguZXhwKC0oYWNyb3NzICogYWNyb3NzKSAvIDUpXG4gICAgICAgIGNvbnN0IGVkZ2VzID0gTWF0aC5leHAoLU1hdGgucG93KE1hdGguYWJzKGFjcm9zcykgLSAzLjIsIDIpIC8gMylcbiAgICAgICAgY29uc3QgZm9yY2UgPSBhZ2UgKiB0cmFpbCAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuNDUpXG4gICAgICAgIGNvbnN0IHJhZGlhbERpc3RhbmNlID0gTWF0aC5zcXJ0KHJ4ICogcnggKyByeSAqIHJ5KVxuICAgICAgICBjb25zdCByaXBwbGVFbnZlbG9wZSA9IE1hdGguZXhwKC0ocmFkaWFsRGlzdGFuY2UgKiByYWRpYWxEaXN0YW5jZSkgLyAoMzUgKyBwb2ludC5zcGVlZCAqIDEyKSlcbiAgICAgICAgY29uc3QgcmlwcGxlID0gTWF0aC5zaW4ocmFkaWFsRGlzdGFuY2UgKiAxLjM1IC0gcG9pbnQuYWdlICogMC43NSkgKiByaXBwbGVFbnZlbG9wZSAqIGFnZVxuICAgICAgICB3aXNwRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuOSAtIGNlbnRlcikgKiBmb3JjZSAqIDEuNSArIHJpcHBsZSAqICgxLjIgKyBwb2ludC5zcGVlZCAqIDAuMjUpXG4gICAgICAgIGJyb2FkRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuNDUgLSBjZW50ZXIgKiAwLjM1KSAqIGZvcmNlICogMC41NSArIHJpcHBsZSAqIDAuMjVcbiAgICAgICAgaW50ZXJhY3Rpb24gPSBNYXRoLm1heChpbnRlcmFjdGlvbiwgTWF0aC5hYnMocmlwcGxlKSAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuMTUpKVxuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoXG4gICAgICAgIGJyb2FkICsgYnJvYWREaXNwbGFjZW1lbnQgKyAod2lzcHMgKyB3aXNwRGlzcGxhY2VtZW50KSAqIDAuNjUgKyBwb2NrZXRzICogMC44ICsgMy4yXG4gICAgICApIC8gNy40KSlcbiAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5taW4oZ2x5cGhzLmxlbmd0aCAtIDEsIE1hdGguZmxvb3IodmFsdWUgKiBnbHlwaHMubGVuZ3RoKSlcbiAgICAgIHJvdy5wdXNoKHsgZ2x5cGg6IGdseXBoc1tpbmRleF0sIGNvbG9yOiBpbnRlcmFjdGlvbiA+IDAuMTYgPyBuZWlnaGJvcmluZyA6IGJhc2UsIGRpbTogaW5kZXggPCA4IH0pXG4gICAgfVxuICAgIHJvd3MucHVzaChyb3cpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gJ3BpY28nIDogaSA9PT0gMiA/IGB2JHt2ZXJzaW9ufWAgOiAnJ1xuICAgICAgICBjb25zdCBpbkJyYW5kQm94ID0gaSA+PSAxICYmIGkgPD0gMlxuICAgICAgICBjb25zdCBib3hTdGFydCA9IDFcbiAgICAgICAgY29uc3QgYm94V2lkdGggPSBgdiR7dmVyc2lvbn1gLmxlbmd0aCArIDJcbiAgICAgICAgY29uc3QgY2xvdWQgPSAoY2VsbHMpID0+IGNlbGxzLm1hcCgoY2VsbCwgeCkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17eH0gc3R5bGU9e3sgY29sb3I6IGNlbGwuY29sb3IsIGRpbTogY2VsbC5kaW0gfX0+e2NlbGwuZ2x5cGh9PC90ZXh0PlxuICAgICAgICApKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtpfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgY2xvdWQocm93LnNsaWNlKDAsIGJveFN0YXJ0KSl9XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IGJveFdpZHRoLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgYm9sZDogaSA9PT0gMSwgY29sb3I6IGkgPT09IDEgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvdWQocm93LnNsaWNlKGluQnJhbmRCb3ggPyBib3hTdGFydCArIGJveFdpZHRoIDogMCkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRW1wdHlTdGF0ZSh7IHZlcnNpb24sIGNsb3VkcyA9IGZhbHNlIH0pIHtcbiAgY29uc3QgW3NpemUsIHNldFNpemVdID0gY3JlYXRlU2lnbmFsKHsgd2lkdGg6IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODAsIGhlaWdodDogcHJvY2Vzcy5zdGRvdXQucm93cyB8fCAyNCB9KVxuICB1c2VSZXNpemUoc2V0U2l6ZSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBzaXplKCkud2lkdGgpXG4gIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIHNpemUoKS5oZWlnaHQgLSA0KVxuICBpZiAoIWNsb3Vkcykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IHRydWUsIGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgcGljbyd9PC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIHYke3ZlcnNpb259YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoLCBoZWlnaHQgfX0+XG4gICAgICA8RW1wdHlDbG91ZCB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fSB2ZXJzaW9uPXt2ZXJzaW9ufSAvPlxuICAgIDwvYm94PlxuICApXG59XG5cbiIsICJpbXBvcnQgeyBNYXJrZG93biwgU2Nyb2xsQm94LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBIRUxQX1RFWFQgPSAoY29tbWFuZHMpID0+IGBwaWNvIGlzIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWwuIEl0IHJlYWRzLCBlZGl0cywgYW5kIHNlYXJjaGVzIGZpbGVzLCBydW5zIGNvbW1hbmRzLCBhbmQgc3RyZWFtcyBpdHMgd29yayBpbnRvIHRoaXMgdHJhbnNjcmlwdC5cblxuIyMgQ29tbWFuZHNcblxuVHlwZSBcXGAvXFxgIGluIHRoZSBjb21wb3NlciB0byBmaWx0ZXIgdGhlc2UgYXMgeW91IHR5cGUuXG5cbiR7Y29tbWFuZHMubWFwKChjKSA9PiBgLSBcXGAvJHtjLm5hbWV9XFxgIC0gJHtjLmRlc2N9YCkuam9pbignXFxuJyl9XG5cblR3byBraW5kcyBvZiB1c2VyLWRlZmluZWQgZW50cmllcyBqb2luIHRoaXMgbWVudTpcblxuLSAqKmNvbW1hbmRzKiogKFxcYH4vLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgIG9yIFxcYC5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCk6IHByb21wdCB0ZW1wbGF0ZXMgeW91IGludm9rZSBhcyBcXGAvPG5hbWU+IFthcmdzXVxcYC4gXFxgJEFSR1VNRU5UU1xcYCBpbiB0aGUgYm9keSBpcyByZXBsYWNlZCB3aXRoIHdoYXRldmVyIGZvbGxvd3MgdGhlIGNvbW1hbmQ7IHdpdGhvdXQgYSBwbGFjZWhvbGRlciwgYXJncyBhcmUgYXBwZW5kZWQuIFRoZSBtb2RlbCBuZXZlciBzZWVzIHRoZXNlIHVudGlsIHlvdSBydW4gb25lLlxuLSAqKnNraWxscyoqIChcXGB+Ly5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGAgb3IgXFxgLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCk6IGNhcGFiaWxpdGllcyB3aXRoIGEgbmFtZSBhbmQgZGVzY3JpcHRpb24uIFlvdSBjYW4gaW52b2tlIHRoZW0gbGlrZSBjb21tYW5kcywgYW5kIHRoZSBhZ2VudCBjYW4gYWxzbyBkaXNjb3ZlciBhbmQgbG9hZCB0aGVtIGl0c2VsZiB2aWEgdGhlIHNraWxsIHRvb2wuXG4tICoqdG9vbHMqKiAoXFxgfi8ucGljby90b29scy88bmFtZT4uanNcXGAgb3IgXFxgLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgKTogRVMgbW9kdWxlcyBkZWZhdWx0LWV4cG9ydGluZyBcXGB7IG5hbWUsIGRlc2NyaXB0aW9uLCBzY2hlbWEsIGV4ZWN1dGUgfVxcYCAob3IgYSBmYWN0b3J5IHJlY2VpdmluZyBcXGB7IGN3ZCwgcm9vdCB9XFxgKS4gVGhleSBqb2luIHRoZSBhZ2VudCdzIHRvb2xzZXQgYW5kIGFyZSByZXNjYW5uZWQgZXZlcnkgdHVybiwgc28gZWRpdHMgYXBwbHkgb24gdGhlIG5leHQgbWVzc2FnZS4gQXNrIHRoZSBhZ2VudCB0byBidWlsZCBvbmUgZm9yIHlvdTogdGhlIGJ1aWx0LWluIFxcYC9uZXctdG9vbFxcYCBza2lsbCB0ZWFjaGVzIGl0IHRoZSBmb3JtYXQuXG5cbkluIHRoZSBNQ1AgcGFuZWw6IGVudGVyIGVuYWJsZXMvZGlzYWJsZXMgYSBzZXJ2ZXIgKGRpc2FibGVkIGlzIHN0aWNreSBhY3Jvc3MgcmVzdGFydHMgLSBjb25maWcga2VwdCwgbm8gY29ubmVjdGlvbiwgbm8gdG9vbHMgb2ZmZXJlZCB0byB0aGUgbW9kZWwsIHBlciBwcm9qZWN0KSwgXFxgdFxcYCBsaXN0cyBpdHMgdG9vbHMsIFxcYHJcXGAgcmVjb25uZWN0cywgXFxgYVxcYCBhZGRzLCBcXGBjdHJsK3hcXGAgcmVtb3ZlcyAocHJlc3MgdHdpY2UpLiBVbmZpbHRlcmVkIGxpc3RzIChlZmZvcnQsIHJld2luZCBvcHRpb25zLCBNQ1ApIGFsc28gbW92ZSB3aXRoIFxcYGpcXGAvXFxga1xcYCBhbmQganVtcCB3aXRoIFxcYGdcXGAvXFxgR1xcYC5cblxuIyMgQ29tcG9zZXJcblxuLSBcXGBjdHJsK3ZcXGA6IEF0dGFjaCBjbGlwYm9hcmQgaW1hZ2Vcbi0gXFxgY3RybCtvXFxgOiBDYXB0dXJlIHNjcmVlbiByZWdpb24gKG1hY09TKVxuLSBcXGBjdHJsK2dcXGA6IFJlY29yZCAobWFjT1MpXG4tIFxcYGVudGVyXFxgOiBUcmFuc2NyaWJlIHJlY29yZGluZ1xuLSBcXGBlc2NcXGA6IENhbmNlbCBkaWN0YXRpb25cblxuLSBcXGBlbnRlclxcYCBzZW5kczsgXFxgc2hpZnQrZW50ZXJcXGAgb3IgXFxgXFxcXDxlbnRlcj5cXGAgaW5zZXJ0cyBhIG5ld2xpbmVcbi0gXFxgQFxcYCBvcGVucyBhIGZ1enp5IGZpbGUgcGlja2VyOyBlbnRlciBpbnNlcnRzIHRoZSBzZWxlY3RlZCBwYXRoXG4tIGRyYWcgYW4gaW1hZ2UgZmlsZSBpbnRvIHRoZSB0ZXJtaW5hbCB0byBhdHRhY2ggaXQ6IGl0IGFwcGVhcnMgaW5saW5lIGFzIFxcYFtJbWFnZSAjTl1cXGAsIGV4YWN0bHkgd2hlcmUgeW91ciBjdXJzb3IgaXMsIHNvIGltYWdlcyBjYW4gc2l0IGJldHdlZW4gc2VudGVuY2VzOyBiYWNrc3BhY2UgYWZ0ZXIgb25lIHJlbW92ZXMgdGhlIHdob2xlIGF0dGFjaG1lbnRcbi0gXFxgdGFiXFxgIGNvbXBsZXRlczogXFxgL3N1bW08dGFiPlxcYCBmaW5pc2hlcyB0aGUgY29tbWFuZCBuYW1lIGFuZCBjeWNsZXMgdGhyb3VnaCBtYXRjaGVzIG9uIHJlcGVhdDsgYWZ0ZXIgYW4gYXJndW1lbnQgc3BhY2UgaXQgY29tcGxldGVzIHZhbHVlcyAoXFxgL21vZGVsIGZsYTx0YWI+XFxgLCBcXGAvY29sb3IgPHRhYj5cXGAsIFxcYC9lZmZvcnQgPHRhYj5cXGApIGFuZCBmaWxlIHBhdGhzIGZvciBza2lsbHMgYW5kIGNvbW1hbmRzLiBLZWVwIHR5cGluZyB0byBuYXJyb3csIHRhYiBvciBlbnRlciBpbnNlcnRzXG4tIFxcYHVwXFxgIGFuZCBcXGBkb3duXFxgIG9uIGFuIGVtcHR5IGNvbXBvc2VyIHJlY2FsbCBtZXNzYWdlcyB5b3UgYWxyZWFkeSBzZW50XG4tIFxcYGN0cmwrclxcYCBvcGVucyByZXdpbmQgKHNhbWUgYXMgXFxgL3Jld2luZFxcYCk7IFxcYC9oaXN0b3J5XFxgIGZ1enp5LXNlYXJjaGVzIHlvdXIgb2xkIHByb21wdHMgYW5kIHB1dHMgdGhlIHNlbGVjdGVkIG9uZSBiYWNrIGluIHRoZSBjb21wb3NlclxuLSBcXGBjdHJsK3NcXGAgb3BlbnMgdGhlIHNlc3Npb24gcGlja2VyIChzYW1lIGFzIFxcYC9yZXN1bWVcXGApOyBcXGBjdHJsK3RcXGAgb3BlbnMgdGhlIG1vZGVsIHBpY2tlclxuLSBcXGBjdHJsK3BcXGAgc3dpdGNoZXMgcHJvamVjdHM6IHBpY2sgb25lIGFuZCBwaWNvIGp1bXBzIHRvIGl0cyBtb3N0IHJlY2VudCBzZXNzaW9uLCBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnksIHRvb2xzLCBjb250ZXh0LCBhbmQgTUNQIHNlcnZlcnMgdG8gbWF0Y2g7IFxcYGN0cmwreFxcYCB0d2ljZSBkZWxldGVzIGEgcHJvamVjdCdzIHBpY28gaGlzdG9yeSAoYWxsIGl0cyBzZXNzaW9ucyBhbmQgbWVtb3JpZXMpOyBcXGAvbmV3XFxgIHN0YXJ0cyBhIGZyZXNoIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgcHJvamVjdFxuLSBcXGBjdHJsK2JcXGAgY3ljbGVzIHRoaW5raW5nIGVmZm9ydCAoZGVmYXVsdCwgbG93LCBtZWRpdW0sIGhpZ2gsIG1heCkgb24gbW9kZWxzIHRoYXQgc3VwcG9ydCBpdDsgXFxgL2VmZm9ydFxcYCBvcGVucyB0aGUgZnVsbCBwaWNrZXJcbi0gaW5zaWRlIGEgc2VhcmNoIHBhbmVsLCBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBpbnN0ZWFkOiB0aGlzIHNlc3Npb24sIHRoaXMgcHJvamVjdCwgb3IgZXZlcnl3aGVyZVxuLSBcXGAvcmV3aW5kXFxgIHJlc3RvcmVzIHRoZSBjb252ZXJzYXRpb24gdG8gYW4gZWFybGllciBtZXNzYWdlOyBhIHJld2luZCBjYW4gYmUgdW5kb25lIHdpdGggXFxgY3RybCt6XFxgXG4tIG1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIGFnZW50IGlzIHJlc3BvbmRpbmcgcXVldWUgdXAgYWJvdmUgdGhlIGNvbXBvc2VyIGFuZCBhcmUgZGVsaXZlcmVkIGFzIG9uZSBtZXNzYWdlIHdoZW4gdGhlIHR1cm4gZmluaXNoZXM7IFxcYHVwXFxgIHB1bGxzIHRoZW0gYmFjayBmb3IgZWRpdGluZ1xuLSBcXGBlc2NcXGAgaW50ZXJydXB0cyBhIHN0cmVhbWluZyByZXNwb25zZSwgb3IgY2xlYXJzIHRoZSBjb21wb3NlciB3aGVuIGlkbGVcblxuIyMgTW92aW5nIGFyb3VuZFxuXG4tIFxcYHRhYlxcYCBzd2l0Y2hlcyBmb2N1cyBiZXR3ZWVuIHRoZSB0cmFuc2NyaXB0IGFuZCB0aGUgY29tcG9zZXJcbi0gd2l0aCB0aGUgdHJhbnNjcmlwdCBmb2N1c2VkLCBcXGB1cFxcYC9cXGBkb3duXFxgL1xcYGpcXGAvXFxga1xcYCBzY3JvbGwgYW5kIFxcYGdcXGAvXFxgR1xcYCBqdW1wIHRvIHRoZSBlbmRzXG4tIGxvbmcgc2Vzc2lvbnMgcmVuZGVyIG9ubHkgdGhlIG5ld2VzdCA1MCBtZXNzYWdlczsgc2Nyb2xsaW5nIHRvIHRoZSB2ZXJ5IHRvcCBsb2FkcyBvbGRlciBvbmVzIGluIGJhdGNoZXMgKHRoZSB0b3AgbGluZSBzaG93cyBob3cgbWFueSBhcmUgaGlkZGVuKVxuLSB0aGUgbW91c2Ugd2hlZWwgc2Nyb2xsczsgY2xpY2stZHJhZyBzZWxlY3RzIHRleHQgYW5kIGNvcGllcyBpdCBvbiByZWxlYXNlXG4tIFxcYGN0cmwrY1xcYCB0d2ljZSBleGl0c1xuXG4jIyBTaGVsbHNcblxuVGhlIGFnZW50IGNhbiBydW4gbG9uZy1saXZlZCBwcm9jZXNzZXMgKGRldiBzZXJ2ZXJzLCB3YXRjaGVycykgd2l0aCBcXGBiYXNoIGJhY2tncm91bmQ6IHRydWVcXGAsIHRoZW4gcmVhZCB0aGVpciBvdXRwdXQgYW5kIHN0b3AgdGhlbSBpdHNlbGYuIFNoZWxscyBhcHBlYXIgYmVsb3cgdGhlIGNvbXBvc2VyIGFuZCByZW1haW4gdGhlcmUgYWZ0ZXIgZXhpdDogdGFiIGZvY3VzZXMgdGhlIGxpc3QsIGovayBtb3ZlcywgZW50ZXIgb3BlbnMgdGhlIGNvbW1hbmQgYW5kIGxpdmUgb3V0cHV0LCBhbmQgXFxgY3RybCt4XFxgIGtpbGxzIGEgcnVubmluZyBzaGVsbCBvciBkaXNtaXNzZXMgYSBmaW5pc2hlZCBvbmUuIFdoZW4gYSBzaGVsbCBleGl0cyBvbiBpdHMgb3duLCB0aGUgYWdlbnQgaXMgbm90aWZpZWQgYW5kIHJlc3BvbmRzOyBzaGVsbHMgZGllIHdpdGggcGljbywgYW5kIHF1aXR0aW5nIHdhcm5zIHlvdSBpZiBhbnkgYXJlIHN0aWxsIHVwLlxuXG4jIyBTdWJzY3JpcHRpb25zXG5cblxcYC9jb25uZWN0XFxgIGxpc3RzIHN1YnNjcmlwdGlvbiBwcm92aWRlcnMgeW91IGNhbiBzaWduIGluIHdpdGggaW5zdGVhZCBvZiBBUEkga2V5cy4gT3BlbkFJIChDaGF0R1BUIC8gQ29kZXggcGxhbikgc2lnbnMgaW4gdGhyb3VnaCB5b3VyIGJyb3dzZXIgdmlhIE9BdXRoOyB0b2tlbnMgYXJlIHN0b3JlZCBpbiBcXGB+Ly5waWNvL2F1dGguanNvblxcYCBhbmQgcmVmcmVzaGVkIGF1dG9tYXRpY2FsbHksIHNvIHlvdSBzaWduIGluIG9uY2UuIE9uY2UgY29ubmVjdGVkLCBjb2RleCBtb2RlbHMgYXBwZWFyIGluIFxcYC9tb2RlbFxcYCwgYmlsbGVkIHRvIHlvdXIgcGxhbi4gXFxgZFxcYCBpbiB0aGUgcGFuZWwgZGlzY29ubmVjdHMuXG5cbiMjIE1lbW9yeVxuXG5UaGUgYWdlbnQgc2F2ZXMgZHVyYWJsZSBmYWN0cyB3aXRoIHRoZSByZW1lbWJlciB0b29sOiBvbmUgZmlsZSBwZXIgbWVtb3J5IHVuZGVyIFxcYH4vLnBpY28vbWVtb3J5XFxgIChnbG9iYWwpIG9yIHRoZSBwcm9qZWN0J3MgZGlyZWN0b3J5IGluIFxcYH4vLnBpY28vcHJvamVjdHNcXGAuIE9ubHkgYSBvbmUtbGluZSBpbmRleCBpcyBpbiBpdHMgY29udGV4dDsgaXQgbG9hZHMgYSBzcGVjaWZpYyBtZW1vcnkgd2l0aCB0aGUgcmVjYWxsIHRvb2wgd2hlbiByZWxldmFudC4gXFxgL21lbW9yeVxcYCBsaXN0cyBldmVyeXRoaW5nIGl0IGtub3dzIHdpdGggYSBjb250ZW50IHByZXZpZXc6IFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGZpbHRlciAoYWxsLCBwcm9qZWN0LCBnbG9iYWwpIGFuZCBcXGBjdHJsK3hcXGAgdHdpY2UgZm9yZ2V0cyB0aGUgc2VsZWN0ZWQgbWVtb3J5LiBZb3UgY2FuIGFsc28gYXNrIHRoZSBhZ2VudCB0byByZW1lbWJlciwgZm9yZ2V0LCBvciBjbGVhbiB1cCBpdHMgbWVtb3JpZXMgaW4gcGxhaW4gbGFuZ3VhZ2UuXG5cbiMjIFdha2UtdXBzXG5cblRoZSBhZ2VudCBjYW4gc2NoZWR1bGUgb25lLXRpbWUgd2FrZS11cHMgZm9yIGl0c2VsZiB3aXRoIHRoZSBzY2hlZHVsZV93YWtldXAgdG9vbDogYWZ0ZXIgdGhlIGRlbGF5IGl0IHJlY2VpdmVzIGl0cyBvd24gbm90ZSBhcyBhIHN5c3RlbSBub3RpZmljYXRpb24gYW5kIGFjdHMgb24gaXQuIFJlY3VycmluZyBsb29wcyBhcmUganVzdCB0aGUgYWdlbnQgcmVzY2hlZHVsaW5nIGF0IHRoZSBlbmQgb2YgZWFjaCB3YWtlLXVwLiBcXGAvd2FrZXVwc1xcYCBsaXN0cyBwZW5kaW5nIG9uZXMgd2l0aCBsaXZlIGNvdW50ZG93bnM7IGVudGVyIG9yIFxcYGN0cmwreFxcYCBjYW5jZWxzIChwcmVzcyB0d2ljZSkuIEEgXFxgXHUyM0YwIE5cXGAgaW4gdGhlIGZvb3RlciBzaG93cyBob3cgbWFueSBhcmUgcGVuZGluZy4gV2FrZS11cHMgbGl2ZSBpbiBtZW1vcnkgYW5kIGFyZSBsb3N0IHdoZW4gcGljbyBleGl0cy5cblxuIyMgQXBwZWFyYW5jZVxuXG5waWNvIHBpY2tzIGEgbGlnaHQgb3IgZGFyayBwYWxldHRlIGF0IHN0YXJ0dXAgYnkgYXNraW5nIHRoZSB0ZXJtaW5hbCBmb3IgaXRzIGJhY2tncm91bmQgY29sb3IgKE9TQyAxMSksIHNvIGl0IG1hdGNoZXMgd2hhdGV2ZXIgdGhlbWUgeW91ciB0ZXJtaW5hbCB1c2VzLiBcXGAvdGhlbWVcXGAgb3BlbnMgYSBwaWNrZXIgdGhhdCBwcmV2aWV3cyBlYWNoIHRoZW1lIGFzIHlvdSBtb3ZlIGFuZCBwZXJzaXN0cyB5b3VyIGNob2ljZSBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgOyBcXGAvdGhlbWUgbGlnaHRcXGAsIFxcYC90aGVtZSBkYXJrXFxgLCBvciBcXGAvdGhlbWUgYXV0b1xcYCBhcHBsaWVzIG9uZSBkaXJlY3RseS4gXFxgL2NvbG9yXFxgIHRpbnRzIGEgc2luZ2xlIHNlc3Npb24ncyBhY2NlbnQgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYWxldHRlLlxuXG4jIyBDb250ZXh0XG5cbnBpY28gcmVhZHMgQUdFTlRTLm1kIGZpbGVzIGF1dG9tYXRpY2FsbHk6IGEgZ2xvYmFsIG9uZSBmcm9tIH4vLnBpY28sIHRoZW4gZXZlcnkgYW5jZXN0b3Igb2YgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB1cCB0byB0aGUgZ2l0IHJvb3QuIERlZXBlciBmaWxlcyB3aW4uIEFHRU5UUy5tZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBsb2FkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIHRvb2wgdG91Y2hlcyB0aGF0IHN1YnRyZWUuIEluIGFueSBwcm9qZWN0IGRpcmVjdG9yeSB3aXRob3V0IGFuIEFHRU5UUy5tZCwgYSBDTEFVREUubWQgaXMgaG9ub3JlZCBhcyBhIGZhbGxiYWNrIHNvIGV4aXN0aW5nIHJlcG9zIHdvcmsgdW5jaGFuZ2VkOyBBR0VOVFMubWQgYWx3YXlzIHdpbnMgd2hlbiBib3RoIGV4aXN0LCBhbmQgdGhlIGZhbGxiYWNrIG5ldmVyIGFwcGxpZXMgdG8gdGhlIGdsb2JhbCBmaWxlLlxuXG5TZXNzaW9ucyBhcmUgc3RvcmVkIHVuZGVyIH4vLnBpY28gYXMganNvbmwgZXZlbnQgbG9nczsgXFxgL3Jlc3VtZVxcYCBmb2xkcyBvbmUgYmFjayBpbnRvIGV4YWN0bHkgdGhpcyB2aWV3LlxuXG5cXGAvY29udGV4dFxcYCBicmVha3MgZG93biB3aGF0IHRoZSBuZXh0IHJlcXVlc3Qgd2lsbCBjb250YWluIC0gc3lzdGVtIHByb21wdCwgdG9vbCBzY2hlbWFzLCBwcm9qZWN0IGluc3RydWN0aW9ucywgbWVtb3J5IGluZGV4LCBjb21wYWN0aW9uIHN1bW1hcnksIGFuZCBjb252ZXJzYXRpb24gLSB3aXRoIGFuIGVzdGltYXRlZCBzaXplIGZvciBlYWNoIHBpZWNlIG5leHQgdG8gdGhlIHByb3ZpZGVyLW1lYXN1cmVkIHRvdGFsLlxuXG5UaGUgZm9vdGVyJ3MgXFxgY3R4ICVcXGAgc2hvd3MgaG93IGZ1bGwgdGhlIG1vZGVsJ3MgY29udGV4dCBpcy4gQXQgODUlIHBpY28gYXV0by1jb21wYWN0czogdGhlIG9sZGVyIGNvbnZlcnNhdGlvbiBpcyBzdW1tYXJpemVkIGluIGEgc3RydWN0dXJlZCBmb3JtLCB0aGUgbW9zdCByZWNlbnQgdHVybnMgYXJlIGtlcHQgdmVyYmF0aW0sIGFuZCB0aGUgbW9kZWwgaXMgdG9sZCB3aGVyZSB0aGUgZnVsbCBzZXNzaW9uIGZpbGUgbGl2ZXMgc28gaXQgY2FuIHJlYWQgZXhhY3QgZGV0YWlscyBiYWNrIG9uIGRlbWFuZC4gTm90aGluZyB2aXNpYmxlIGNoYW5nZXMgaW4gdGhlIHRyYW5zY3JpcHQsIGFuZCByZXdpbmQgc3RpbGwgd29ya3MgYWNyb3NzIGl0LiBcXGAvY29tcGFjdFxcYCBydW5zIGl0IG1hbnVhbGx5IGFuZCB0YWtlcyBvcHRpb25hbCBmb2N1cyBpbnN0cnVjdGlvbnMgKFxcYC9jb21wYWN0IGZvY3VzIG9uIHRoZSBBUEkgY2hhbmdlc1xcYCkuIFNldCBcXGBcImF1dG9Db21wYWN0XCI6IGZhbHNlXFxgIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGAgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIHRyaWdnZXIuXG5cbi0tLVxuXG4qZXNjIHRha2VzIHlvdSBiYWNrIHRvIHRoZSBjb252ZXJzYXRpb24qYFxuXG5leHBvcnQgZnVuY3Rpb24gSGVscCh7IGNvbW1hbmRzLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnBpY28gIGhlbHA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjE5MVx1MjE5MyBzY3JvbGwgIGVzYyBiYWNrPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkIHNjcm9sbGJhcj5cbiAgICAgICAgPE1hcmtkb3duIHRleHQ9e0hFTFBfVEVYVChjb21tYW5kcyl9IGNvZGVCZz17bnVsbH0gLz5cbiAgICAgIDwvU2Nyb2xsQm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIENoZWNrYm94LCBlYXNlLCBGaWVsZCwgRmllbGRMaXN0LCBNZW51LCBOdW1iZXJJbnB1dCwgUGlja0xpc3QsIFJhZGlvLCBTY3JvbGxCb3gsIFRleHRJbnB1dCwgdXNlQW5pbWF0ZWQsIHVzZUZvY3VzLCB1c2VJbnB1dCwgdXNlSW50ZXJ2YWwsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgZm9ybWF0SHR0cFNlcnZlclNwZWMsIHBhcnNlU2VydmVyU3BlYywgcmVkYWN0U2VydmVyU3BlYywgUkVEQUNURURfSEVBREVSIH0gZnJvbSAncGljb2NvZGUtY29yZS9tY3AuanMnXG5cbmZ1bmN0aW9uIHNob3J0ZW5Ib21lKHBhdGgpIHtcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocGF0aClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gdmFsdWUgPT09IGhvbWUgfHwgdmFsdWUuc3RhcnRzV2l0aChgJHtob21lfS9gKSA/IGB+JHt2YWx1ZS5zbGljZShob21lLmxlbmd0aCl9YCA6IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lQWdvKGF0KSB7XG4gIGNvbnN0IHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gYXQpIC8gMTAwMCkpXG4gIGlmIChzIDwgNjApIHJldHVybiBgJHtzfXMgYWdvYFxuICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApXG4gIGlmIChtIDwgNjApIHJldHVybiBgJHttfW0gYWdvYFxuICBjb25zdCBoID0gTWF0aC5mbG9vcihtIC8gNjApXG4gIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWggYWdvYFxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihoIC8gMjQpfWQgYWdvYFxufVxuXG5mdW5jdGlvbiBQYW5lbERpdmlkZXIoKSB7XG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogU0VMRUNUX0JHLCBvdmVyZmxvdzogJ2NsaXAnIH19PnsnXHUyNTAwJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCl9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBQYW5lbEZyYW1lKHsgdGl0bGUsIGhpbnQsIHJpZ2h0LCBmdWxsU2NyZWVuID0gZmFsc2UsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIGhlaWdodDogZnVsbFNjcmVlbiA/ICcxMDAlJyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57dGl0bGV9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICB7cmlnaHR9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2hpbnR9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogZnVsbFNjcmVlbiA/IDAgOiAyLCBwYWRkaW5nQm90dG9tOiAxLCBmbGV4R3JvdzogZnVsbFNjcmVlbiA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maXJtUGFuZWwoeyB0aXRsZSwgbWVzc2FnZSwgY29uZmlybUxhYmVsID0gJ0NvbmZpcm0nLCBmb2N1c2VkLCBvbkNvbmZpcm0sIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBvbkNvbmZpcm0oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9e2BlbnRlcjogJHtjb25maXJtTGFiZWwudG9Mb3dlckNhc2UoKX0gIGVzYzogY2FuY2VsYH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57bWVzc2FnZX08L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQsIGJvbGQ6IHRydWUgfX0+VGhpcyBjYW5ub3QgYmUgdW5kb25lLjwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdGaWVsZCh7IGZpZWxkLCB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxDaGVja2JveCBjaGVja2VkPXt2YWx1ZX0gbGFiZWw9e2ZpZWxkLmxhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntmaWVsZC5wYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7ZmllbGQuZGVzY31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdOdW1iZXJGaWVsZCh7IHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPE51bWJlcklucHV0IGZvY3VzZWQ9e2ZvY3VzZWR9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBtaW49ezF9IG1heD17MTAwfSB3aWR0aD17NX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PiBQYXJhbGxlbCBhZ2VudCBsaW1pdDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+cmVzZWFyY2guYWdlbnRMaW1pdDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PiAgICBNYXhpbXVtIGFnZW50cyBwZXIgcGFyYWxsZWwgcnVuICgxLTEwMCk8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTW9kZWxGaWVsZCh7IG1vZGVsLCBsYWJlbCwgcGF0aCwgZm9jdXNlZCwgb25QaWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPXtsYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17b25QaWNrfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke21vZGVsIHx8ICdOb3QgY29uZmlndXJlZCd9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ1BhbmVsKHsgdmFsdWVzLCBmb2N1c2VkLCBvbkNoYW5nZSwgb25QaWNrUmVzZWFyY2hNb2RlbCwgb25QaWNrU2hlbGxNb2RlbCwgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWwsIG9uUGlja1BhcnRpY2lwYW50TW9kZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBmaWVsZHMgPSBbXG4gICAgeyBuYW1lOiAnY2xvdWRzJywgbGFiZWw6ICdDbG91ZCBhbmltYXRpb24nLCBkZXNjOiAnU2hvdyBhbmltYXRlZCBjbG91ZHMgb24gdGhlIGVtcHR5IHNjcmVlbicsIHBhdGg6ICdhbmltYXRpb24uY2xvdWRzJyB9LFxuICAgIHsgbmFtZTogJ2NvbXBhY3RUb29scycsIGxhYmVsOiAnQ29tcGFjdCB0b29sIGhpc3RvcnknLCBkZXNjOiAnU3VtbWFyaXplIGNvbnNlY3V0aXZlIHRvb2wgY2FsbHMgaW4gb25lIHJvdycsIHBhdGg6ICdkaXNwbGF5LmNvbXBhY3RUb29sSGlzdG9yeScgfSxcbiAgICB7IG5hbWU6ICdnaXRTdGF0dXMnLCBsYWJlbDogJ0dpdCBpbmZvcm1hdGlvbicsIGRlc2M6ICdTaG93IGJyYW5jaCBhbmQgY2hhbmdlZCBsaW5lIGNvdW50cycsIHBhdGg6ICdkaXNwbGF5LmdpdFN0YXR1cycgfSxcbiAgICB7IG5hbWU6ICd3aWRlU2lkZWJhcicsIGxhYmVsOiAnV2lkZSBzaWRlYmFyJywgZGVzYzogJ01vdmUgcGFuZWxzIGFuZCBzdGF0dXMgZGV0YWlscyB0byBhIHJpZ2h0IHNpZGViYXIgd2hlbiB0aGUgdGVybWluYWwgaXMgd2lkZXIgdGhhbiAxNjAgY29sdW1ucycsIHBhdGg6ICdkaXNwbGF5LndpZGVTaWRlYmFyJyB9LFxuICBdXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiQ29uZmlndXJhdGlvblwiIGhpbnQ9XCJ0YWI6IG5leHQgc2V0dGluZyAgc3BhY2UvZW50ZXI6IGNoYW5nZSAgZXNjOiBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8RmllbGRMaXN0IGZvY3VzZWQ9e2ZvY3VzZWR9IGluaXRpYWxGb2N1cz1cImNsb3Vkc1wiIHNjcm9sbGJhciBmb2N1c1BhZGRpbmc9ezF9PlxuICAgICAgICAgIHtmaWVsZHMubWFwKChmaWVsZCkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIGtleT17ZmllbGQubmFtZX0gbmFtZT17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxDb25maWdGaWVsZCBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZXNbZmllbGQubmFtZV19IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoZmllbGQubmFtZSwgdmFsdWUpfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5yZXNlYXJjaE1vZGVsfSBsYWJlbD1cIlBhcmFsbGVsIHdvcmtlciBtb2RlbFwiIHBhdGg9XCJtb2RlbHMucmVzZWFyY2hXb3JrZXJcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrUmVzZWFyY2hNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInNoZWxsTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5zaGVsbE1vZGVsfSBsYWJlbD1cIlNoZWxsIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5zaGVsbFwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tTaGVsbE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIHtbJ3BhcnRpY2lwYW50QScsICdwYXJ0aWNpcGFudEInXS5tYXAoKHJvbGUpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtgJHtyb2xlfU1vZGVsYH0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlc1tgJHtyb2xlfU1vZGVsYF19IGxhYmVsPXtgUGFydGljaXBhbnQgJHtyb2xlID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgfSBwYXRoPXtgbW9kZWxzLiR7cm9sZX1gfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17KCkgPT4gb25QaWNrUGFydGljaXBhbnRNb2RlbChyb2xlKX0gLz59XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwiZGVsaWJlcmF0aW9uTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5kZWxpYmVyYXRpb25Nb2RlbH0gbGFiZWw9XCJTeW50aGVzaXMgbW9kZWxcIiBwYXRoPVwibW9kZWxzLmRlbGliZXJhdGlvblwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tEZWxpYmVyYXRpb25Nb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoQWdlbnRMaW1pdFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTnVtYmVyRmllbGQgdmFsdWU9e3ZhbHVlcy5yZXNlYXJjaEFnZW50TGltaXR9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoJ3Jlc2VhcmNoQWdlbnRMaW1pdCcsIHZhbHVlKX0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgPC9GaWVsZExpc3Q+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjb3BlVGFicyh7IHNjb3BlcywgYWN0aXZlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAge3Njb3Blcy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgPHRleHQga2V5PXtzfSBzdHlsZT17eyBjb2xvcjogaSA9PT0gYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogaSA9PT0gYWN0aXZlIH19PntgJHtpID4gMCA/ICcgICcgOiAnJ30ke3MgPT09ICdjaGVja291dCcgPyAndGhpcyBjaGVja291dCcgOiBzfWB9PC90ZXh0PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsUGFuZWwoeyBtb2RlbHMsIGN1cnJlbnQsIGRlZmF1bHROYW1lLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UsIHRpdGxlID0gJ1NlbGVjdCBtb2RlbCcsIGhpbnQgPSAnZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZScgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKG1vZGVsc1swXSB8fCBudWxsKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgcmFua2VkTW9kZWxzID0gcmFua0Z1enp5KG1vZGVscywgcXVlcnkoKSwgKHEsIG1vZGVsKSA9PiBmdXp6eVNjb3JlKHEsIG1vZGVsLm5hbWUpKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgY3Vyc29yKCkpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoY3Vyc29yKCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17aGludH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cmFua2VkTW9kZWxzfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbW9kZWxzLi4uXCJcbiAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3J9XG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBzY3JvbGxvZmY9ezF9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2ZmID0gbS5hdmFpbGFibGUgPT09IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiAhb2ZmLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogb2ZmID8gTVVURUQgOiBGRyB9fT57bS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGRlZmF1bHROYW1lICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57JyAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAge29mZiA/IGBuZWVkcyAke20ua2V5SGludH1gIDogbS5wcmljZSA/IGAkJHttLnByaWNlLmlufSBpbiAgJCR7bS5wcmljZS5vdXR9IG91dGAgOiBtLnByb3ZpZGVyID09PSAnY29kZXgnID8gJ3N1YnNjcmlwdGlvbicgOiAncHJpY2UgdW5rbm93bid9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnttLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIaXN0b3J5UGFuZWwoeyBwcm9tcHRzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChwcm9tcHRzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBhbnlNYXRjaCA9IHByb21wdHMuc29tZSgocCkgPT4gZnV6enlTY29yZShxdWVyeSgpLCBwLnRleHQpID49IDApXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJTZWFyY2ggcHJvbXB0c1wiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gZWRpdCAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17cHJvbXB0c31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9tcHRzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIHApID0+IGZ1enp5U2NvcmUocSwgcC50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhwKSA9PiBzZXRQcmV2aWV3KHApfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvblBpY2socC50ZXh0KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhwLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7YW55TWF0Y2ggJiYgcHJldmlldygpID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBwcm9tcHRzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRQaWNrUGFuZWwoeyBlbnRyaWVzLCBzdGF0cywgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKGVudHJpZXNbMF0gfHwgbnVsbClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiUmV3aW5kIHRvIGEgbWVzc2FnZVwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXIgdG8gY2hvb3NlICBlc2MgdG8gY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17ZW50cmllc31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZXNzYWdlcy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIG0udGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsobSkgPT4gc2V0UHJldmlldyhtKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e20udGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3N0YXRzKG0uaW5kZXgpLm1zZ3N9IGFmdGVyYH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YHJld2luZGluZyBoZXJlIGRyb3BzICR7c3RhdHMocHJldmlldygpLmluZGV4KS5tc2dzfSBlbnRyaWVzYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLmVkaXRzLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICBcdTIxQTkgJHttLnRpdGxlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIG1lc3NhZ2VzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRBY3Rpb25QYW5lbCh7IHRhcmdldCwgb3B0aW9ucywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQmFjayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXdpbmQgb3B0aW9uczwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J3RvOiAnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dGFyZ2V0LnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17b3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezR9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICBvbkNhbmNlbD17b25CYWNrfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhvLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e28ubGFiZWx9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke28uZGVzY31gfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlciB0byBjb25maXJtICBlc2MgdG8gcGljayBhIGRpZmZlcmVudCBtZXNzYWdlPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZUVzY2FwZShmb2N1c2VkLCBvbkNsb3NlKSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCgpKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZVBhbmVsKHsgc2Vzc2lvbnMsIHNjb3Blcywgc2NvcGVJbmRleCwgbG9hZGluZywgZm9jdXNlZCwgY3VycmVudElkLCBvblBpY2ssIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHNlc3Npb25zWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRTZXNzaW9ucyA9IHJhbmtGdXp6eShzZXNzaW9ucywgcXVlcnkoKSwgKHEsIHNlc3Npb24pID0+IHtcbiAgICBjb25zdCBjdXN0b21TY29yZSA9IHNlc3Npb24uY3VzdG9tVGl0bGUgPyBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY3VzdG9tVGl0bGUpIDogLTFcbiAgICBpZiAoY3VzdG9tU2NvcmUgPj0gMCkgcmV0dXJuIDIwXzAwMCArIGN1c3RvbVNjb3JlXG4gICAgcmV0dXJuIE1hdGgubWF4KGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5hdXRvbWF0aWNUaXRsZSB8fCBzZXNzaW9uLnRpdGxlKSwgZnV6enlTY29yZShxLCBzZXNzaW9uLmNoZWNrb3V0IHx8ICcnKSlcbiAgfSlcbiAgY29uc3Qgc2hvd0NoZWNrb3V0cyA9IG5ldyBTZXQoc2Vzc2lvbnMubWFwKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNoZWNrb3V0KS5maWx0ZXIoQm9vbGVhbikpLnNpemUgPiAxXG4gIGNvbnN0IHNlbGVjdGVkU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZiAobG9hZGluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzZWxlY3RlZCA9IHByZXZpZXcoKVxuICAgIHJldHVybiBzZXNzaW9ucy5pbmNsdWRlcyhzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IG51bGxcbiAgfVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2Vzc2lvbigpXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgc2VsZWN0ZWQpIHtcbiAgICAgIG9uRGVsZXRlKHNlbGVjdGVkKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJSZXN1bWUgYSBzZXNzaW9uXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIHJlc3VtZSAgY3RybCt4IGRlbGV0ZSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBzZXNzaW9ucy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogc2Vzc2lvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cmFua2VkU2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCcgJiYgIWxvYWRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocykgPT4gc2V0UHJldmlldyhzKX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IChzaG93Q2hlY2tvdXRzID8gcy5jb2xvciA6IG51bGwpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIHtzaG93Q2hlY2tvdXRzICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCwgYmc6IHNlbGVjdGVkID8gbnVsbCA6IHMuY29sb3IgfX0+e2Ake3MuY2hlY2tvdXR9ICBgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcsIGJnOiBzZWxlY3RlZCB8fCBzaG93Q2hlY2tvdXRzID8gbnVsbCA6IHMuY29sb3IgfX0+e3MudGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7cy5oZWFkZXIuaWQgPT09IGN1cnJlbnRJZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+IGN1cnJlbnQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocy5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKSA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnN9ICR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlbGVjdGVkU2Vzc2lvbigpLmF0KX0gICR7c2hvcnRlbkhvbWUoc2VsZWN0ZWRTZXNzaW9uKCkuaGVhZGVyLnJvb3QpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgPiBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50IC0gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGh9IGVhcmxpZXIgbWVzc2FnZXMgb21pdHRlZGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxib3gga2V5PXtgJHttZXNzYWdlLnJvbGV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWVzc2FnZS5yb2xlID09PSAndXNlcicgPyBGRyA6IE1VVEVEIH19PnttZXNzYWdlLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdHJhbnNjcmlwdCBwcmV2aWV3PC90ZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVtb3J5UGFuZWwoeyBtZW1vcmllcywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblRvZ2dsZURpc2FibGVkLCBvbkZvcmdldCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3JJdGVtLCBzZXRDdXJzb3JJdGVtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBwcmV2aWV3ID0gbWVtb3JpZXMuaW5jbHVkZXMoY3Vyc29ySXRlbSgpKSA/IGN1cnNvckl0ZW0oKSA6IG1lbW9yaWVzWzBdIHx8IG51bGxcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKHApID0+IChwID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KSB7XG4gICAgICBvbkZvcmdldChwcmV2aWV3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNZW1vcnlcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlcjogZW5hYmxlL2Rpc2FibGUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBjdHJsK3ggZm9yZ2V0ICh0d2ljZSkgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHttZW1vcmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttZW1vcmllc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVtb3JpZXMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIGAke20ubmFtZX0gJHttLmRlc2NyaXB0aW9ufWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3JJdGVtfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25Ub2dnbGVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgaXRhbGljOiBtLmRpc2FibGVkLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogKG0uZGlzYWJsZWQgPyBNVVRFRCA6IEZHKSB9fT57YCR7bS5kaXNhYmxlZCA/ICcgICAnIDogJyd9JHttLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHttLmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT4gIHN1cHByZXNzZWQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke20uc2NvcGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtwcmV2aWV3LmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT5TVVBQUkVTU0VEPC90ZXh0Pn1cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e3ByZXZpZXcuZGVzY3JpcHRpb24gfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwcmV2aWV3LmJvZHl9PC90ZXh0PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRWZmb3J0UGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gKGwua2V5ID09PSBudWxsID8gJ2RlZmF1bHQnIDogbC5rZXkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoaW5raW5nIGVmZm9ydFwiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2wuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxjQUFjLFdBQVcsZUFBZTtBQUNqRCxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxpQkFBaUIscUJBQUFBLDBCQUF5QjtBQUNuRCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGtCQUFrQjtBQUkzQixTQUFTLGFBQWEsYUFBYSxPQUFPO0FBQ3hDLFFBQU0sUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sTUFBTSxXQUFXLE9BQU8sT0FBTyxTQUFTLE9BQU8sT0FBTyxXQUFXO0FBQzFFO0FBRUEsZUFBZSxZQUFZLEVBQUUsV0FBQUMsWUFBVyxNQUFNLEdBQUc7QUFDL0MsUUFBTSxNQUFNLENBQUMsYUFBYUEsV0FBVSxTQUFTLFFBQVE7QUFDckQsUUFBTSxtQkFBbUIsSUFBSSxPQUFPLElBQUksTUFBTUQsbUJBQWtCLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSTtBQUN0RixRQUFNLENBQUMsYUFBYSxPQUFPLFVBQVUsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ3pELFlBQVksRUFBRSxNQUFNLENBQUM7QUFBQSxJQUNyQixnQkFBZ0Isa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQUEsSUFDM0MsSUFBSSxZQUFZLElBQUkscUJBQXFCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUFBLEVBQ3pELENBQUM7QUFDRCxTQUFPO0FBQUEsSUFDTCxHQUFHLGNBQWMsYUFBYSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVztBQUFBLE1BQy9ELEdBQUc7QUFBQSxNQUNILFdBQVcsSUFBSSxNQUFNLFFBQVE7QUFBQSxNQUM3QixTQUFTLFFBQVEsTUFBTSxRQUFRO0FBQUEsSUFDakMs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QSxFQUN2QyxjQUFjLENBQUMsT0FBTztBQUFFLGdCQUFZO0FBQUEsRUFBRztBQUFBLEVBQ3ZDLGlCQUFpQixDQUFDLE9BQU87QUFBRSxtQkFBZTtBQUFBLEVBQUc7QUFBQSxFQUM3QyxlQUFlLENBQUMsT0FBTztBQUFFLGlCQUFhO0FBQUEsRUFBRztBQUFBLEVBQ3pDLGtCQUFrQixDQUFDLE9BQU87QUFBRSxvQkFBZ0I7QUFBQSxFQUFHO0FBQUEsRUFDL0MsZ0JBQWdCLENBQUMsT0FBTztBQUFFLGtCQUFjO0FBQUEsRUFBRztBQUFBLEVBQzNDLFNBQVM7QUFBQSxFQUNULGVBQWUsTUFBTSxXQUFXLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDakQ7QUFFQSxJQUFJLFNBQVMsS0FBSyxJQUFJO0FBQ3RCLElBQUksV0FBVyxLQUFLLFNBQVM7QUFFN0IsSUFBTSxhQUFhLGlCQUFpQixFQUFFLEtBQUssQ0FBQztBQUM1QyxJQUFNLE1BQU0sTUFBTSxNQUFNLGdCQUFBVixNQUFDLE9BQUksTUFBWSxZQUF3QixHQUFJLEVBQUUsT0FBTyxTQUFTLEtBQUssS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDNUgsS0FBSyxXQUFXLElBQUk7QUFDcEIsS0FBSyxJQUFJLFdBQVc7IiwKICAibmFtZXMiOiBbIm9wZW5haUNyZWRlbnRpYWxzIiwgInByb3ZpZGVycyIsICJsb2FkTW9kZWxzIiwgIm1vZGVscyIsICJqb2luIiwgIm1ha2VFdmVudCIsICJwcm92aWRlcnMiLCAibW9kZWxzIiwgImNvbmZpZyIsICJib290IiwgInNoZWxscyIsICJydW5UdXJuIiwgInJlYWRDb25maWciLCAiY29uZmlnIiwgImRlZmF1bHRNb2RlbCIsICJyZWFkQ29uZmlnIiwgImJ1aWxkUHJvamVjdEJvb3QiLCAiY3JlYXRlU2hlbGxNYW5hZ2VyIiwgImNyZWF0ZVNpZ25hbCIsICJmdXp6eVNjb3JlIiwgImNyZWF0ZVNpZ25hbCIsICJmdXp6eVNjb3JlIiwgImhvbWVkaXIiLCAicGVuZGluZyIsICJmYWlsZWQiLCAicGVuZGluZyIsICJjYXB0dXJlUmVnaW9uIiwgInBlbmRpbmciLCAiZXhlY0ZpbGUiLCAibWtkdGVtcCIsICJleGlzdHNTeW5jIiwgInRtcGRpciIsICJqb2luIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJTcGlubmVyIiwgIlRleHRBcmVhIiwgInVzZUZvY3VzIiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAid2lkdGgiLCAianN4IiwgImhpZ2hsaWdodCIsICJlYXNlIiwgImxpbmVhciIsICJ1c2VBbmltYXRlZCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAibGFiZWwiLCAiY3JlYXRlU2lnbmFsIiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJNYXJrZG93biIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJNYXJrZG93biIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgImVhc2UiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiVGV4dElucHV0IiwgInVzZUFuaW1hdGVkIiwgInVzZUlucHV0IiwgInVzZUludGVydmFsIiwgInVzZUxheW91dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAibW9kZWxzIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgInVzZUxheW91dCIsICJ3aWR0aCIsICJ1c2VkIiwgInByb3ZpZGVycyIsICJ3YWtldXBzIiwgInVzZUludGVydmFsIiwgIm5hbWUiLCAiVGV4dElucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VNb3VzZSIsICJjcmVhdGVTaWduYWwiLCAiYm9vdCIsICJ2ZXJzaW9uIiwgIm1vZGVscyIsICJ1c2VSZXNpemUiLCAid2lkdGgiLCAiZGVmYXVsdE1vZGVsIiwgImVsYXBzZWQiLCAiaG9tZWRpciIsICJhcm1lZCIsICJ1c2VGb2N1cyIsICJpdGVtcyIsICJmdXp6eVNjb3JlIiwgIlNjcm9sbEJveCIsICJUZXh0QXJlYSIsICJNZW51IiwgInBlbmRpbmciLCAiU3Bpbm5lciIsICJjb21wYWN0TnVtYmVyIiwgImpzeCIsICJpc0Rldkluc3RhbGwiLCAicnVuVXBkYXRlIiwgImZldGNoTGF0ZXN0VmVyc2lvbiIsICJuZXdlclZlcnNpb24iLCAicnVuSGVhZGxlc3MiLCAicnVuU2hlbGwiLCAiY3JlYXRlU2hlbGxNYW5hZ2VyIiwgImJ1aWxkUHJvamVjdEJvb3QiLCAicmVhZENvbmZpZyIsICJkZWZhdWx0TW9kZWwiXQp9Cg==
|
|
5359
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS9hcHAuanN4IiwgIi4uL3NyYy91aS9jb21wb3Nlci1jb21tYW5kcy5qcyIsICIuLi9zcmMvdWkvY29tbWFuZC1mb3JtLmpzeCIsICIuLi9zcmMvdWkvdGhlbWUuanMiLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvY29udGV4dC1iYXIuanMiLCAiLi4vc3JjL3VpL2FuaW1hdGVkLXZhbHVlLmpzeCIsICIuLi9zcmMvdWkvdHJhbnNjcmlwdC5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQtd2luZG93LmpzIiwgIi4uL3NyYy91aS9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4IiwgIi4uL3NyYy91aS9xdWVzdGlvbi1mb3JtLmpzeCIsICIuLi9zcmMvdWkvZW1wdHktc3RhdGUuanN4IiwgIi4uL3NyYy91aS9oZWxwLmpzeCIsICIuLi9zcmMvdWkvcGFuZWxzLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGlzY292ZXJLZXlzLCBhcHBseUtleXMsIGtleUhpbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2tleXMuanMnXG5pbXBvcnQgeyBsb2FkQ2F0YWxvZywgZXh0cmFjdE1vZGVscywgYWRob2NNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY2F0YWxvZy5qcydcbmltcG9ydCB7IGxvYWRDb2RleE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29kZXgtbW9kZWxzLmpzJ1xuaW1wb3J0IHsgbG9hZE9wZW5Sb3V0ZXJNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5yb3V0ZXItbW9kZWxzLmpzJ1xuaW1wb3J0IHsgb3BlbmFpQ29ubmVjdGVkLCBvcGVuYWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuXG5jb25zdCBDQVRBTE9HX1BST1ZJREVSUyA9IFsnZ29vZ2xlJywgJ2FudGhyb3BpYycsICdvcGVuYWknLCAneGFpJ11cblxuZnVuY3Rpb24gY29kZXhDb250ZXh0KGNhdGFsb2dEYXRhLCBtb2RlbCkge1xuICBjb25zdCBlbnRyeSA9IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbW9kZWwubmFtZS5zcGxpdCgnLycpWzFdXVxuICByZXR1cm4gbW9kZWwuY29udGV4dCA/PyBlbnRyeT8ubGltaXQ/LmlucHV0ID8/IGVudHJ5Py5saW1pdD8uY29udGV4dCA/PyBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTW9kZWxzKHsgcHJvdmlkZXJzLCBmb3JjZSB9KSB7XG4gIGNvbnN0IGhhcyA9IChwcm92aWRlcikgPT4gcHJvdmlkZXJzLmluY2x1ZGVzKHByb3ZpZGVyKVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gaGFzKCdjb2RleCcpID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgW2NhdGFsb2dEYXRhLCBjb2RleCwgb3BlbnJvdXRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZENhdGFsb2coeyBmb3JjZSB9KSxcbiAgICBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkZW50aWFscywgeyBmb3JjZSB9KSxcbiAgICBoYXMoJ29wZW5yb3V0ZXInKSA/IGxvYWRPcGVuUm91dGVyTW9kZWxzKHsgZm9yY2UgfSkgOiBbXSxcbiAgXSlcbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBDQVRBTE9HX1BST1ZJREVSUykubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgYXZhaWxhYmxlOiBoYXMobW9kZWwucHJvdmlkZXIpLFxuICAgICAga2V5SGludDoga2V5SGludChtb2RlbC5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLmNvZGV4Lm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGNvbnRleHQ6IGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpLFxuICAgICAgYXZhaWxhYmxlOiBoYXMoJ2NvZGV4JyksXG4gICAgICBrZXlIaW50OiAnL2Nvbm5lY3QnLFxuICAgIH0pKSxcbiAgICAuLi5vcGVucm91dGVyLm1hcCgobW9kZWwpID0+ICh7IC4uLm1vZGVsLCBhdmFpbGFibGU6IHRydWUsIGtleUhpbnQ6IGtleUhpbnQoJ29wZW5yb3V0ZXInKSB9KSksXG4gIF1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbFJ1bnRpbWUoKSB7XG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGNvbnN0IGNvZGV4Q3JlZGVudGlhbHMgPSBjaGF0Z3B0ID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgbG9hZE1vZGVscyA9ICh7IGZvcmNlID0gZmFsc2UgfSA9IHt9KSA9PiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSlcbiAgcmV0dXJuIHsgcHJvdmlkZXJzLCBtb2RlbHM6IGF3YWl0IGxvYWRNb2RlbHMoKSwgY29kZXhDcmVkZW50aWFscywgbG9hZE1vZGVscyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBhdmFpbGFibGUgPSBtb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gbW9kZWwuYXZhaWxhYmxlICE9PSBmYWxzZSlcbiAgcmV0dXJuIGF2YWlsYWJsZVxuICAgICAgLm1hcCgobW9kZWwpID0+IFtmdXp6eVNjb3JlKG5hbWUsIG1vZGVsLm5hbWUpLCBtb2RlbF0pXG4gICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVswXT8uWzFdXG4gICAgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkLCBjb25maWd1cmVkIH0pIHtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkKVxuICAgIHx8IChjb25maWd1cmVkICYmIG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gY29uZmlndXJlZCAmJiBtb2RlbC5hdmFpbGFibGUpKVxuICAgIHx8IGRlZmF1bHRNb2RlbChtb2RlbHMpXG59XG4iLCAiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGZpbmRNb2RlbCwgdXNhZ2VDb3N0IH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBidWlsZFByb2plY3RCb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9ib290LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2hlbGxNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS9zaGVsbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVTZXNzaW9uLCBvcGVuU2Vzc2lvbiwgbG9hZFNlc3Npb24sIG9uU2Vzc2lvbldyaXRlRXJyb3IgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyBzZXNzaW9uc0RpciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGRlcml2ZVN0YXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBjcmVhdGVUb29sc2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9pbmRleC5qcydcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgYnVpbGRTeXN0ZW1Qcm9tcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N5c3RlbS1wcm9tcHQuanMnXG5pbXBvcnQgeyBtZW1vcnlJbmRleCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWVtb3J5LmpzJ1xuaW1wb3J0IHsgZmluYWxpemVVc2VyQ29udGVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCkge1xuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkgcmV0dXJuICcnXG4gIGxldCBkYXRhID0gJydcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBwcm9jZXNzLnN0ZGluKSB7XG4gICAgZGF0YSArPSBjaHVua1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDQwMDAwMCkgYnJlYWtcbiAgfVxuICByZXR1cm4gZGF0YS5zbGljZSgwLCA0MDAwMDApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5IZWFkbGVzcyhvcHRzKSB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KClcbiAgY29uc3QgbG9nID0gb3B0cy5xdWlldCA/ICgpID0+IHt9IDogKGxpbmUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGxpbmUgKyAnXFxuJylcblxuICBvblNlc3Npb25Xcml0ZUVycm9yKChlcnIsIGZpbGUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBjb3VsZCBub3Qgd3JpdGUgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1cXG5gKSlcblxuICBjb25zdCB7IHByb3ZpZGVycywgbW9kZWxzLCBjb2RleENyZWRlbnRpYWxzOiBjb2RleENyZWRzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLCBjb25maWd1cmVkOiBjb25maWcuZGVmYXVsdE1vZGVsIH0pXG4gIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBubyB1c2FibGUgbW9kZWwke29wdHMubW9kZWwgPyBgIG1hdGNoaW5nIFwiJHtvcHRzLm1vZGVsfVwiYCA6ICcnfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBlZmZvcnQgPSBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2F1dG8nIDogbnVsbClcblxuICBjb25zdCBib290ID0gYXdhaXQgYnVpbGRQcm9qZWN0Qm9vdChwcm9jZXNzLmN3ZCgpKVxuICBhd2FpdCBQcm9taXNlLnJhY2UoW2Jvb3QubWNwLmNvbm5lY3RBbGwoKSwgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMDApKV0pXG4gIGNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcigpXG5cbiAgbGV0IHNlc3Npb25cbiAgbGV0IGV2ZW50cyA9IFtdXG4gIGlmIChvcHRzLnJlc3VtZSkge1xuICAgIGNvbnN0IGZpbGUgPSBvcHRzLnJlc3VtZS5pbmNsdWRlcygnLycpID8gb3B0cy5yZXN1bWUgOiBqb2luKHNlc3Npb25zRGlyKGJvb3Qucm9vdCksIGAke29wdHMucmVzdW1lfS5qc29ubGApXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZFNlc3Npb24oZmlsZSlcbiAgICBzZXNzaW9uID0gb3BlblNlc3Npb24oeyBmaWxlLCBoZWFkZXI6IGxvYWRlZC5oZWFkZXIgfSlcbiAgICBldmVudHMgPSBsb2FkZWQuZXZlbnRzXG4gIH0gZWxzZSB7XG4gICAgc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oeyBjd2Q6IGJvb3QuY3dkLCByb290OiBib290LnJvb3QgfSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3QgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudHMucHVzaChldmVudClcbiAgICBzZXNzaW9uLmFwcGVuZChldmVudClcbiAgICBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShldmVudCkgKyAnXFxuJylcbiAgfVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke2VmZm9ydCA/IGAgICR7ZWZmb3J0fWAgOiAnJ30gIHNlc3Npb24gJHtzZXNzaW9uLmlkfWApXG4gIGxldCB0aG91Z2h0cyA9ICcnXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blR1cm4oe1xuICAgIGhpc3Rvcnk6IGRlcml2ZWQucHJvdmlkZXJIaXN0b3J5LFxuICAgIHRvb2xzLFxuICAgIHJlY29yZGVyLFxuICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICBlZmZvcnQsXG4gICAgYXV0aCxcbiAgICBzeXN0ZW06IGJ1aWxkU3lzdGVtUHJvbXB0KHtcbiAgICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgICBjb250ZXh0RmlsZXM6IGJvb3Quc3RhcnR1cENvbnRleHQuZmlsZXMsXG4gICAgICBza2lsbHM6IGJvb3Quc2tpbGxzLmxpc3QoKSxcbiAgICAgIG1lbW9yeUluZGV4VGV4dDogbWVtb3J5SW5kZXgoYXdhaXQgYm9vdC5tZW1vcnkubGlzdCgpLmNhdGNoKCgpID0+IFtdKSwgYm9vdC5yb290KSxcbiAgICB9KSxcbiAgICBvblN0cmVhbTogKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RoaW5raW5nJykgdGhvdWdodHMgKz0gZXZlbnQuY29udGVudFxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2NvbXBsZXRlJykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlY29yZGVyLmVudHJpZXMuYXQoLTEpXG4gICAgICAgIGxvZyhgICBcdTI3MTMgJHtlbnRyeT8ubmFtZSA/PyBldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2VudHJ5Py50aXRsZSA/PyAnJ31gKVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sX2Vycm9yJykgbG9nKGAgIFx1MjcxNyAke2V2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZXZlbnQuZXJyb3Iuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKHRob3VnaHRzKSBwZXJzaXN0KG1ha2VFdmVudCgndGhvdWdodHMnLCB7IHRleHQ6IHRob3VnaHRzIH0pKVxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcmVzdWx0Lm1lc3NhZ2VzKSBwZXJzaXN0KG1ha2VFdmVudCgnbWVzc2FnZScsIHsgbWVzc2FnZSB9KSlcbiAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRlci5lbnRyaWVzKSBwZXJzaXN0KG1ha2VFdmVudCgndG9vbF9tZXRhJywgZW50cnkpKVxuICBmb3IgKGNvbnN0IHBhdGggb2YgYm9vdC50cmFja2VyLmxvYWRlZCkge1xuICAgIGlmICghbG9hZGVkQmVmb3JlLmhhcyhwYXRoKSkgcGVyc2lzdChtYWtlRXZlbnQoJ2NvbnRleHRfZmlsZScsIHsgcGF0aCB9KSlcbiAgfVxuICBpZiAocmVzdWx0LnVzYWdlKSBwZXJzaXN0KG1ha2VFdmVudCgndXNhZ2UnLCB7IG1vZGVsOiBtb2RlbC5uYW1lLCB1c2FnZTogcmVzdWx0LnVzYWdlLCBsYXN0UHJvbXB0OiByZXN1bHQubGFzdFByb21wdFRva2VucyB9KSlcbiAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgcGVyc2lzdChtYWtlRXZlbnQoJ2ludGVycnVwdCcsIHt9KSlcblxuICBjb25zdCBydW5uaW5nID0gc2hlbGxzLnJ1bm5pbmcoKVxuICBpZiAocnVubmluZyA+IDApIGxvZyhgICBraWxsaW5nICR7cnVubmluZ30gYmFja2dyb3VuZCBzaGVsbCR7cnVubmluZyA9PT0gMSA/ICcnIDogJ3MnfWApXG4gIHNoZWxscy5raWxsQWxsKClcbiAgYXdhaXQgYm9vdC5tY3AuY2xvc2VBbGwoKS5jYXRjaCgoKSA9PiB7fSlcbiAgLy8gdGhlIGNhbGxlciBleGl0cyB0aGUgcHJvY2VzcyB0aGUgbW9tZW50IHRoaXMgcmV0dXJucywgd2hpY2ggd291bGQgZGlzY2FyZFxuICAvLyBldmVyeSBhcHBlbmQgc3RpbGwgaW4gZmxpZ2h0XG4gIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuXG4gIGNvbnN0IHRleHQgPSByZXN1bHQubWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmIG0uY29udGVudCkuYXQoLTEpPy5jb250ZW50ID8/ICcnXG4gIGNvbnN0IHN1bW1hcnkgPSB7XG4gICAgdGV4dCxcbiAgICBzZXNzaW9uOiBzZXNzaW9uLmlkLFxuICAgIHNlc3Npb25GaWxlOiBzZXNzaW9uLmZpbGUsXG4gICAgbW9kZWw6IG1vZGVsLm5hbWUsXG4gICAgdXNhZ2U6IHJlc3VsdC51c2FnZSxcbiAgICBjb3N0OiB1c2FnZUNvc3QoZmluZE1vZGVsKG1vZGVscywgbW9kZWwubmFtZSksIHJlc3VsdC51c2FnZSksXG4gICAgdG9vbENhbGxzOiByZWNvcmRlci5lbnRyaWVzLmxlbmd0aCxcbiAgICBpbnRlcnJ1cHRlZDogcmVzdWx0LmludGVycnVwdGVkLFxuICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gIH1cblxuICBpZiAob3B0cy5qc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShzdW1tYXJ5KSArICdcXG4nKVxuICBlbHNlIGlmIChvcHRzLnN0cmVhbUpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3Jlc3VsdCcsIC4uLnN1bW1hcnksIHRleHQ6IHVuZGVmaW5lZCwgYXQ6IERhdGUubm93KCkgfSkgKyAnXFxuJylcbiAgZWxzZSBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXh0ICsgJ1xcbicpXG5cbiAgcmV0dXJuIHJlc3VsdC5pbnRlcnJ1cHRlZCA/IDEgOiAwXG59XG4iLCAiaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUsIHNlbGVjdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuXG5jb25zdCBTWVNURU0gPSAoeyBwbGF0Zm9ybSwgc2hlbGwsIGN3ZCB9KSA9PiBgR2VuZXJhdGUgZXhhY3RseSBvbmUgc2hlbGwgY29tbWFuZCB0aGF0IHNhdGlzZmllcyB0aGUgdXNlcidzIHJlcXVlc3QuIFRoZSBvdXRwdXQgbXVzdCBiZSBhIHZhbGlkIHNoZWxsIGNvbW1hbmQgd2l0aG91dCBNYXJrZG93biBmb3JtYXR0aW5nLiBJZiBtdWx0aXBsZSBzdGVwcyBhcmUgcmVxdWlyZWQsIHRyeSB0byBjb21iaW5lIHRoZW0gdG9nZXRoZXIgdXNpbmcgJiYuXG5cbkVudmlyb25tZW50OlxuLSBvcGVyYXRpbmcgc3lzdGVtOiAke3BsYXRmb3JtfVxuLSBzaGVsbDogJHtzaGVsbH1cbi0gY3VycmVudCBkaXJlY3Rvcnk6ICR7Y3dkfVxuXG5PdXRwdXQgb25seSB0aGUgY29tbWFuZCBhcyBvbmUgbGluZS4gRG8gbm90IHVzZSBNYXJrZG93biBmb3JtYXR0aW5nIHN1Y2ggYXMgXFxgXFxgXFxgLiBEbyBub3QgZXhwbGFpbiB0aGUgY29tbWFuZC4gRG8gbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQuYFxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSB7XG4gIGNvbnN0IGNvbW1hbmQgPSB0ZXh0LnRyaW0oKVxuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIGFuIGVtcHR5IGNvbW1hbmQnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnXFwwJykgfHwgL1tcXHJcXG5dLy50ZXN0KGNvbW1hbmQpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGxpbmUnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnYGBgJykpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIE1hcmtkb3duIGluc3RlYWQgb2YgYSBjb21tYW5kJylcbiAgcmV0dXJuIGNvbW1hbmRcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNoZWxsKG9wdHMsIGRlcGVuZGVuY2llcyA9IHt9KSB7XG4gIGNvbnN0IHN0ZGVyciA9IGRlcGVuZGVuY2llcy5zdGRlcnIgfHwgcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3Qgc3Rkb3V0ID0gZGVwZW5kZW5jaWVzLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IChkZXBlbmRlbmNpZXMucmVhZENvbmZpZyB8fCByZWFkQ29uZmlnKSgpXG4gICAgY29uc3QgcnVudGltZSA9IGF3YWl0IChkZXBlbmRlbmNpZXMubG9hZE1vZGVsUnVudGltZSB8fCBsb2FkTW9kZWxSdW50aW1lKSgpXG4gICAgaWYgKHJ1bnRpbWUucHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdubyBjcmVkZW50aWFscyBmb3VuZCAoc2V0IGEgcHJvdmlkZXIga2V5IG9yIHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgY29uZmlndXJlZE1vZGVsID0gY29uZmlnLm1vZGVscz8uc2hlbGxcbiAgICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHtcbiAgICAgIG1vZGVsczogcnVudGltZS5tb2RlbHMsXG4gICAgICBwcm92aWRlcnM6IHJ1bnRpbWUucHJvdmlkZXJzLFxuICAgICAgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLFxuICAgICAgY29uZmlndXJlZDogY29uZmlndXJlZE1vZGVsIHx8IGNvbmZpZy5kZWZhdWx0TW9kZWwsXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0ZWROYW1lID0gb3B0cy5tb2RlbCB8fCBjb25maWd1cmVkTW9kZWxcbiAgICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdXNhYmxlIG1vZGVsJHtyZXF1ZXN0ZWROYW1lID8gYCBtYXRjaGluZyBcIiR7cmVxdWVzdGVkTmFtZX1cImAgOiAnJ31gKVxuICAgIH1cblxuICAgIGNvbnN0IGF1dGggPSBtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyA/IHJ1bnRpbWUuY29kZXhDcmVkZW50aWFscyA6IG51bGxcbiAgICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgIWF1dGgpIHRocm93IG5ldyBFcnJvcignY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGRlcGVuZGVuY2llcy5ydW5UdXJuIHx8IHJ1blR1cm4pKHtcbiAgICAgIGhpc3Rvcnk6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogb3B0cy5wcm9tcHQgfV0sXG4gICAgICB0b29sczogW10sXG4gICAgICByZWNvcmRlcjogbnVsbCxcbiAgICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICAgIGVmZm9ydDogb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdsb3cnIDogbnVsbCksXG4gICAgICBhdXRoLFxuICAgICAgc3lzdGVtOiBTWVNURU0oe1xuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyAnbWFjT1MnIDogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgc2hlbGw6IGJhc2VuYW1lKHByb2Nlc3MuZW52LlNIRUxMIHx8ICd6c2gnKSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgfSksXG4gICAgfSlcbiAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKVxuICAgIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHRocm93IG5ldyBFcnJvcignY29tbWFuZCBnZW5lcmF0aW9uIHdhcyBpbnRlcnJ1cHRlZCcpXG4gICAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlc1xuICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJylcbiAgICAgIC5hdCgtMSk/LmNvbnRlbnQgfHwgJydcbiAgICBzdGRvdXQud3JpdGUoY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSArICdcXG4nKVxuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RkZXJyLndyaXRlKGBwaWNvOiAke2Vycm9yLm1lc3NhZ2V9XFxuYClcbiAgICByZXR1cm4gMVxuICB9XG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IG1vdW50IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBVU0FHRSB9IGZyb20gJy4vY2xpLWFyZ3MuanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBkZXRlY3RUZXJtaW5hbFRoZW1lIH0gZnJvbSAncGljb2NvZGUtY29yZS90ZXJtaW5hbC10aGVtZS5qcydcbmltcG9ydCB7IGJ1aWxkUHJvamVjdEJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Jvb3QuanMnXG5pbXBvcnQgeyBjcmVhdGVTaGVsbE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NoZWxscy5qcydcbmltcG9ydCB7IGNyZWF0ZVdha2V1cE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dha2V1cHMuanMnXG5pbXBvcnQgeyBjcmVhdGVHaXRTZXJ2aWNlIH0gZnJvbSAncGljb2NvZGUtY29yZS9naXQuanMnXG5pbXBvcnQgeyBjcmVhdGVDb250cm9sbGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzLCBtb2RlbHMsIGxvYWRNb2RlbHMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5sZXQgbWNwTm90aWZ5ID0gKCkgPT4ge31cbmxldCBzaGVsbHNOb3RpZnkgPSAoKSA9PiB7fVxubGV0IHNoZWxsc0V4aXQgPSAoKSA9PiB7fVxuY29uc3Qgc2hlbGxzID0gY3JlYXRlU2hlbGxNYW5hZ2VyKHtcbiAgb25DaGFuZ2U6ICgpID0+IHNoZWxsc05vdGlmeSgpLFxuICBvbkV4aXQ6IChzaGVsbCkgPT4gc2hlbGxzRXhpdChzaGVsbCksXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHNoZWxscy5raWxsQWxsKCkpXG5cbmxldCB3YWtldXBzTm90aWZ5ID0gKCkgPT4ge31cbmxldCB3YWtldXBzRmlyZSA9ICgpID0+IHt9XG5jb25zdCB3YWtldXBzID0gY3JlYXRlV2FrZXVwTWFuYWdlcih7XG4gIG9uQ2hhbmdlOiAoKSA9PiB3YWtldXBzTm90aWZ5KCksXG4gIG9uRmlyZTogKHdha2V1cCkgPT4gd2FrZXVwc0ZpcmUod2FrZXVwKSxcbn0pXG5cbmxldCBnaXROb3RpZnkgPSAoKSA9PiB7fVxuY29uc3QgZ2l0ID0gY3JlYXRlR2l0U2VydmljZSh7IG9uQ2hhbmdlOiAoKSA9PiBnaXROb3RpZnkoKSB9KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGdpdC5kaXNwb3NlKCkpXG5cbmNvbnN0IGJvb3RQcm9qZWN0ID0gKGN3ZCkgPT4gYnVpbGRQcm9qZWN0Qm9vdChjd2QsIHsgb25NY3BDaGFuZ2U6ICgpID0+IG1jcE5vdGlmeSgpIH0pXG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuY29uc3QgY29uZmlndXJlZERlZmF1bHQgPSBjb25maWcuZGVmYXVsdE1vZGVsICYmIG1vZGVscy5maW5kKChtKSA9PiBtLm5hbWUgPT09IGNvbmZpZy5kZWZhdWx0TW9kZWwpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgYm9vdCA9IHtcbiAgLi4uKGF3YWl0IGJvb3RQcm9qZWN0KHByb2Nlc3MuY3dkKCkpKSxcbiAgdGhlbWUsXG4gIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICBtb2RlbHMsXG4gIHByb3ZpZGVycyxcbiAgaW5pdGlhbE1vZGVsOiBjb25maWd1cmVkRGVmYXVsdCB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKSxcbiAgcmVzZWFyY2hNb2RlbDogY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgc2hlbGxNb2RlbDogY29uZmlnLm1vZGVscz8uc2hlbGwgfHwgbnVsbCxcbiAgcGFydGljaXBhbnRBTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnBhcnRpY2lwYW50QSB8fCBudWxsLFxuICBwYXJ0aWNpcGFudEJNb2RlbDogY29uZmlnLm1vZGVscz8ucGFydGljaXBhbnRCIHx8IG51bGwsXG4gIGRlbGliZXJhdGlvbk1vZGVsOiBjb25maWcubW9kZWxzPy5kZWxpYmVyYXRpb24gfHwgY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgcmVzZWFyY2hBZ2VudExpbWl0OiBOdW1iZXIuaXNJbnRlZ2VyKGNvbmZpZy5yZXNlYXJjaD8uYWdlbnRMaW1pdCkgJiYgY29uZmlnLnJlc2VhcmNoLmFnZW50TGltaXQgPj0gMSAmJiBjb25maWcucmVzZWFyY2guYWdlbnRMaW1pdCA8PSAxMDBcbiAgICA/IGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0XG4gICAgOiAxMCxcbiAgZGV0ZWN0ZWRUaGVtZSxcbiAgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyxcbiAgaW5pdGlhbEVmZm9ydDogWydsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMoY29uZmlnLmRlZmF1bHRFZmZvcnQpID8gY29uZmlnLmRlZmF1bHRFZmZvcnQgOiBudWxsLFxuICBhdXRvQ29tcGFjdDogY29uZmlnLmF1dG9Db21wYWN0ICE9PSBmYWxzZSxcbiAgY2xvdWRzOiBjb25maWcuYW5pbWF0aW9uPy5jbG91ZHMgPT09IHRydWUsXG4gIGNvbXBhY3RUb29sSGlzdG9yeTogY29uZmlnLmRpc3BsYXk/LmNvbXBhY3RUb29sSGlzdG9yeSA9PT0gdHJ1ZSxcbiAgZ2l0Rm9vdGVyOiBjb25maWcuZGlzcGxheT8uZ2l0U3RhdHVzICE9PSBmYWxzZSxcbiAgd2lkZVNpZGViYXI6IGNvbmZpZy5kaXNwbGF5Py53aWRlU2lkZWJhciAhPT0gZmFsc2UsXG4gIHJlZnM6IHt9LFxuICBzaGVsbHMsXG4gIHdha2V1cHMsXG4gIGdpdCxcbiAgc2V0TWNwTm90aWZ5OiAoZm4pID0+IHsgbWNwTm90aWZ5ID0gZm4gfSxcbiAgc2V0R2l0Tm90aWZ5OiAoZm4pID0+IHsgZ2l0Tm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzTm90aWZ5OiAoZm4pID0+IHsgc2hlbGxzTm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzRXhpdDogKGZuKSA9PiB7IHNoZWxsc0V4aXQgPSBmbiB9LFxuICBzZXRXYWtldXBzTm90aWZ5OiAoZm4pID0+IHsgd2FrZXVwc05vdGlmeSA9IGZuIH0sXG4gIHNldFdha2V1cHNGaXJlOiAoZm4pID0+IHsgd2FrZXVwc0ZpcmUgPSBmbiB9LFxuICByZWJ1aWxkOiBib290UHJvamVjdCxcbiAgcmVmcmVzaE1vZGVsczogKCkgPT4gbG9hZE1vZGVscyh7IGZvcmNlOiB0cnVlIH0pLFxufVxuXG5naXQucmV0YXJnZXQoYm9vdC5yb290KVxuZ2l0LnNldEVuYWJsZWQoYm9vdC5naXRGb290ZXIpXG5cbmNvbnN0IGNvbnRyb2xsZXIgPSBjcmVhdGVDb250cm9sbGVyKHsgYm9vdCB9KVxuY29uc3QgYXBwID0gbW91bnQoKCkgPT4gPEFwcCBib290PXtib290fSBjb250cm9sbGVyPXtjb250cm9sbGVyfSAvPiwgeyB0aXRsZTogYHBpY28gICR7Ym9vdC5yb290LnNwbGl0KCcvJykucG9wKCl9YCwgdGhlbWUgfSlcbmJvb3Quc2V0VGhlbWUgPSBhcHAuc2V0VGhlbWVcbmJvb3QubWNwLmNvbm5lY3RBbGwoKVxuIiwgImV4cG9ydCBjb25zdCBVU0FHRSA9IGBwaWNvIC0gYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbFxuXG51c2FnZTpcbiAgcGljbyAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgcGljbyAtcCBcInByb21wdFwiICAgICAgICAgICBoZWFkbGVzczogcnVuIG9uZSBhZ2VudGljIHR1cm4sIHByaW50IHRoZSBhbnN3ZXJcbiAgcGljbyAtcyBcInJlcXVlc3RcIiAgICAgICAgICBnZW5lcmF0ZSBvbmUgc2hlbGwgY29tbWFuZCwgd2l0aG91dCBydW5uaW5nIGl0XG4gIGNhdCBsb2cgfCBwaWNvIC1wIFwiLi4uXCIgICAgc3RkaW4gaXMgYXBwZW5kZWQgdG8gdGhlIHByb21wdCBhcyBjb250ZXh0XG5cbmNvbW1hbmQgZmxhZ3M6XG4gIC1wLCAtLXByaW50IDxwcm9tcHQ+ICAgICAgIHJ1biBvbmUgYWdlbnRpYyB0dXJuIGFuZCBwcmludCB0aGUgYW5zd2VyXG4gIC1zLCAtLXNoZWxsIDxyZXF1ZXN0PiAgICAgIHByaW50IG9uZSBnZW5lcmF0ZWQgc2hlbGwgY29tbWFuZFxuICAtLWpzb24gICAgICAgICAgICAgICAgICAgICBwcmludCBhIHNpbmdsZSBKU09OIHJlc3VsdCBvYmplY3QgdG8gc3Rkb3V0XG4gIC0tc3RyZWFtLWpzb24gICAgICAgICAgICAgIHN0cmVhbSBzZXNzaW9uIGV2ZW50cyB0byBzdGRvdXQgYXMganNvbmxcbiAgLW0sIC0tbW9kZWwgPG5hbWU+ICAgICAgICAgbW9kZWwgdG8gdXNlIChmdXp6eSBtYXRjaGVkLCBvciByYXcgcHJvdmlkZXIvbW9kZWwpXG4gIC0tZWZmb3J0IDxsZXZlbD4gICAgICAgICAgIHRoaW5raW5nIGVmZm9ydDogYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4XG4gIC0tcmVzdW1lIDxzZXNzaW9uLWlkPiAgICAgIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHNlc3Npb24gZnJvbSB0aGlzIHByb2plY3RcbiAgLS1tYXgtdG9vbC1jYWxscyA8bj4gICAgICAgc3RvcCB0aGUgYWdlbnQgYWZ0ZXIgbiB0b29sIGNhbGxzIChkZWZhdWx0IDUwKVxuICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBubyBwcm9ncmVzcyBvdXRwdXQgb24gc3RkZXJyXG5cbiAgLS1jb25uZWN0ICAgICAgICAgICAgICAgICAgc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuIChPQXV0aCBpbiB5b3VyIGJyb3dzZXIpXG4gIHVwZGF0ZSwgLS11cGRhdGUgICAgICAgICAgIHVwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbVxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscFxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBzaG93IHZlcnNpb25gXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJndikge1xuICBjb25zdCBvcHRzID0geyBtb2RlOiAnaW50ZXJhY3RpdmUnIH1cbiAgY29uc3QgdGFrZVZhbHVlID0gKG5hbWUsIGkpID0+IHtcbiAgICBpZiAoaSArIDEgPj0gYXJndi5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSByZXF1aXJlcyBhIHZhbHVlYClcbiAgICByZXR1cm4gYXJndltpICsgMV1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV1cbiAgICBpZiAoYXJnID09PSAnLXAnIHx8IGFyZyA9PT0gJy0tcHJpbnQnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnaGVhZGxlc3MnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy1zJyB8fCBhcmcgPT09ICctLXNoZWxsJykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ3NoZWxsJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWpzb24nKSBvcHRzLmpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLS1zdHJlYW0tanNvbicpIG9wdHMuc3RyZWFtSnNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctbScgfHwgYXJnID09PSAnLS1tb2RlbCcpIHtcbiAgICAgIG9wdHMubW9kZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWVmZm9ydCcpIHtcbiAgICAgIGNvbnN0IGxldmVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghWydhdXRvJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXS5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGVmZm9ydCBcIiR7bGV2ZWx9XCI6IHVzZSBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhgKVxuICAgICAgfVxuICAgICAgb3B0cy5lZmZvcnQgPSBsZXZlbFxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLXJlc3VtZScpIHtcbiAgICAgIG9wdHMucmVzdW1lID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1tYXgtdG9vbC1jYWxscycpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgb3B0cy5tYXhUb29sQ2FsbHMgPSBOdW1iZXIodmFsdWUpXG4gICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdHMubWF4VG9vbENhbGxzKSB8fCBvcHRzLm1heFRvb2xDYWxscyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tY29ubmVjdCcpIG9wdHMubW9kZSA9ICdjb25uZWN0J1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJ3VwZGF0ZScgfHwgYXJnID09PSAnLS11cGRhdGUnKSBvcHRzLm1vZGUgPSAndXBkYXRlJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1xJyB8fCBhcmcgPT09ICctLXF1aWV0Jykgb3B0cy5xdWlldCA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctaCcgfHwgYXJnID09PSAnLS1oZWxwJykgb3B0cy5tb2RlID0gJ2hlbHAnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXYnIHx8IGFyZyA9PT0gJy0tdmVyc2lvbicpIG9wdHMubW9kZSA9ICd2ZXJzaW9uJ1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGFyZ3VtZW50IFwiJHthcmd9XCJgKVxuICB9XG5cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2hlYWRsZXNzJyAmJiAhb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcCByZXF1aXJlcyBhIG5vbi1lbXB0eSBwcm9tcHQnKVxuICBpZiAob3B0cy5tb2RlID09PSAnc2hlbGwnKSB7XG4gICAgaWYgKCFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1zIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHJlcXVlc3QnKVxuICAgIGNvbnN0IGluY29tcGF0aWJsZSA9IFtvcHRzLmpzb24gJiYgJy0tanNvbicsIG9wdHMuc3RyZWFtSnNvbiAmJiAnLS1zdHJlYW0tanNvbicsIG9wdHMucmVzdW1lICYmICctLXJlc3VtZScsIG9wdHMubWF4VG9vbENhbGxzICYmICctLW1heC10b29sLWNhbGxzJ10uZmluZChCb29sZWFuKVxuICAgIGlmIChpbmNvbXBhdGlibGUpIHRocm93IG5ldyBFcnJvcihgJHtpbmNvbXBhdGlibGV9IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1zaGVsbGApXG4gIH1cbiAgcmV0dXJuIG9wdHNcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9za2lsbHMuanMnXG5pbXBvcnQgeyBleHBhbmRDb21tYW5kLCBwYXJzZUNvbW1hbmRBcmd1bWVudHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgY29tbWFuZEF0LCByZXBsYWNlQ29tbWFuZCwgY29tbWFuZEZpZWxkcyB9IGZyb20gJy4vY29tcG9zZXItY29tbWFuZHMuanMnXG5pbXBvcnQgeyBDb21tYW5kRm9ybSB9IGZyb20gJy4vY29tbWFuZC1mb3JtLmpzeCdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uIH0gZnJvbSAnLi4vZGljdGF0aW9uLmpzJ1xuaW1wb3J0IHsgcmVhZENsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vY2xpcGJvYXJkLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ2xpcGJvYXJkSW5wdXQgfSBmcm9tICcuL2NsaXBib2FyZC1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbklucHV0IH0gZnJvbSAnLi9kaWN0YXRpb24taW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQgfSBmcm9tICcuL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzJ1xuaW1wb3J0IHsgY2FwdHVyZVJlZ2lvbiB9IGZyb20gJy4uL3NjcmVlbi1jYXB0dXJlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9zZXJGaWxlcyB9IGZyb20gJy4vY29tcG9zZXItZmlsZXMuanMnXG5pbXBvcnQgeyBkaWN0YXRpb25JbmRpY2F0b3IsIGFwcGVuZExldmVsIH0gZnJvbSAnLi9kaWN0YXRpb24taW5kaWNhdG9yLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBNZW51LCBQcm9ncmVzc0JhciwgU2Nyb2xsQm94LCBTaGltbWVyLCBTcGlubmVyLCBUZXh0QXJlYSwgdXNlRm9jdXMsIHVzZUZvY3VzVHJhcCwgdXNlRnJhbWVTdGF0cywgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZUxheW91dCwgdXNlTW91c2UsIHVzZVJlc2l6ZSwgdXNlU2VsZWN0aW9uLCB1c2VUb2FzdCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdFNlc3Npb25zLCBkZWxldGVTZXNzaW9uLCBkZWxldGVQcm9qZWN0RGF0YSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHVzZXJFbnRyaWVzLCByZXdpbmRTdGF0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgbG9hZFByb2plY3RQcm9tcHRzLCBsb2FkR2xvYmFsUHJvbXB0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvaGlzdG9yeS5qcydcbmltcG9ydCB7IGltcGxpY2l0UmV3aW5kVGFyZ2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS9yZXdpbmQuanMnXG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24sIGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS91cGRhdGUuanMnXG5pbXBvcnQgeyBTVEVFUl9ST0xFUywgc3RlZXJhYmxlVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RlZXIuanMnXG5pbXBvcnQgeyB3cml0ZUNvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgb3BlbmFpU3RhdHVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IEVGRk9SVF9MRVZFTFMsIFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgYWdlbnRUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC10cmFuc2NyaXB0LmpzJ1xuaW1wb3J0IHsgc3RyZWFtVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RyZWFtLXRyYW5zY3JpcHQuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGNvbXBsZXRpb25Db250ZXh0LCBhcHBseUNvbXBsZXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbXBsZXRpb24uanMnXG5pbXBvcnQgeyBleHRyYWN0SW1hZ2VQYXRocywgcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzIH0gZnJvbSAncGljb2NvZGUtY29yZS9hdHRhY2htZW50cy5qcydcbmltcG9ydCB7IGxpc3RGaWxlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZmlsZXMuanMnXG5pbXBvcnQgeyBsaXN0V29ya3RyZWVzIH0gZnJvbSAncGljb2NvZGUtY29yZS93b3JrdHJlZXMuanMnXG5pbXBvcnQgeyBvd25lclJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0VmVyc2lvbiB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBBbmltYXRlZFZhbHVlIH0gZnJvbSAnLi9hbmltYXRlZC12YWx1ZS5qc3gnXG5pbXBvcnQgeyBEZWxpYmVyYXRpb25FeGNoYW5nZSwgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZWFyY2hCYXIsIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSwgY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoIH0gZnJvbSAnLi9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4J1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zLCB0cmFuc2NyaXB0V2luZG93IH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcbmltcG9ydCB7IFF1ZXN0aW9uRm9ybSB9IGZyb20gJy4vcXVlc3Rpb24tZm9ybS5qc3gnXG5pbXBvcnQgeyBFbXB0eVN0YXRlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS5qc3gnXG5pbXBvcnQgeyBIZWxwIH0gZnJvbSAnLi9oZWxwLmpzeCdcbmltcG9ydCB7IE1vZGVsUGFuZWwsIEVmZm9ydFBhbmVsLCBUaGVtZVBhbmVsLCBDb25maWdQYW5lbCwgQ29uZmlybVBhbmVsLCBIaXN0b3J5UGFuZWwsIFJld2luZFBpY2tQYW5lbCwgUmV3aW5kQWN0aW9uUGFuZWwsIFJlc3VtZVBhbmVsLCBQcm9qZWN0UGFuZWwsIE1jcFBhbmVsLCBNZW1vcnlQYW5lbCwgSW5mb0xpc3RQYW5lbCwgV2FrZXVwc1BhbmVsLCBDb25uZWN0UGFuZWwsIHRpbWVBZ28gfSBmcm9tICcuL3BhbmVscy5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIHNldEFjY2VudCwgc2V0UGFsZXR0ZSwgcGFsZXR0ZU5hbWUsIHBhbGV0dGVMaXN0LCBERUZBVUxUX0FDQ0VOVCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgUkVELCBHUkVFTiwgSElHSExJR0hUIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgQ09NTUFORFMgPSBbXG4gIHsgbmFtZTogJ21vZGVsJywgZGVzYzogJ1N3aXRjaCB0aGUgYWN0aXZlIG1vZGVsIGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3JlZnJlc2gtbW9kZWxzJywgZGVzYzogJ1JlZnJlc2ggYXZhaWxhYmxlIG1vZGVscyBmcm9tIHByb3ZpZGVycycgfSxcbiAgeyBuYW1lOiAnY29ubmVjdCcsIGRlc2M6ICdTaWduIGluIHdpdGggQ2hhdEdQVCB0byB1c2UgYSBDb2RleCBzdWJzY3JpcHRpb24nIH0sXG4gIHsgbmFtZTogJ2VmZm9ydCcsIGRlc2M6ICdTZXQgdGhlIHRoaW5raW5nIGVmZm9ydCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZXN1bWUnLCBkZXNjOiAnUGljayB1cCBhIHByZXZpb3VzIHNlc3Npb24gd2hlcmUgeW91IGxlZnQgb2ZmJyB9LFxuICB7IG5hbWU6ICduZXcnLCBkZXNjOiAnU3RhcnQgYSBuZXcgc2Vzc2lvbiBpbiB0aGlzIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2ZvcmsnLCBkZXNjOiAnRm9yayBjb252ZXJzYXRpb24nIH0sXG4gIHsgbmFtZTogJ2RlbGV0ZScsIGRlc2M6ICdQZXJtYW5lbnRseSBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbmQgc3RhcnQgZnJlc2gnIH0sXG4gIHsgbmFtZTogJ3Byb2plY3QnLCBkZXNjOiAnU3dpdGNoIHByb2plY3RzOiBqdW1wIHRvIGFub3RoZXIgcHJvamVjdCwgc2FtZSBhcyBjdHJsK3AnIH0sXG4gIHsgbmFtZTogJ2N3ZCcsIGRlc2M6ICdTaG93IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBwcm9qZWN0IHJvb3QnIH0sXG4gIHsgbmFtZTogJ3NraWxscycsIGRlc2M6ICdMaXN0IGV2ZXJ5IHNraWxsOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdjb21tYW5kcycsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQ6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2luaXQnLCBkZXNjOiAnQ3JlYXRlIG9yIGltcHJvdmUgcmVwb3NpdG9yeSBBR0VOVFMubWQgZ3VpZGFuY2UnIH0sXG4gIHsgbmFtZTogJ3Rvb2xzJywgZGVzYzogJ0xpc3QgYnVpbHRpbiBhbmQgdXNlci1kZWZpbmVkIHRvb2xzOyBNQ1AgdG9vbHMgbGl2ZSBpbiAvbWNwJyB9LFxuICB7IG5hbWU6ICdyZXdpbmQnLCBkZXNjOiAnUmVzdG9yZSB0aGUgY29udmVyc2F0aW9uIHRvIGEgcHJldmlvdXMgbWVzc2FnZScgfSxcbiAgeyBuYW1lOiAnc3RlZXInLCBkZXNjOiAnRWRpdCBvciBhZGQgY29udmVyc2F0aW9uIG1lc3NhZ2VzIHdpdGhvdXQgc2VuZGluZycgfSxcbiAgeyBuYW1lOiAnaGlzdG9yeScsIGRlc2M6ICdTZWFyY2ggcHJvbXB0cyB5b3UgcHJldmlvdXNseSBzZW50JyB9LFxuICB7IG5hbWU6ICdyZW5hbWUnLCBkZXNjOiAnTmFtZSB0aGlzIHNlc3Npb247IG9taXQgdGhlIG5hbWUgdG8gcmVzdG9yZSBpdHMgYXV0b21hdGljIHRpdGxlJyB9LFxuICB7IG5hbWU6ICdjb2xvcicsIGRlc2M6ICdDb2xvciB0aGlzIHNlc3Npb246IC9jb2xvciA8bmFtZSBvciAjaGV4PiwgL2NvbG9yIG5vbmUgdG8gY2xlYXInIH0sXG4gIHsgbmFtZTogJ3RoZW1lJywgZGVzYzogJ1BpY2sgYSBjb2xvciB0aGVtZTsgL3RoZW1lIDxuYW1lPiBhcHBsaWVzIG9uZSBkaXJlY3RseScgfSxcbiAgeyBuYW1lOiAnY29uZmlnJywgZGVzYzogJ0NvbmZpZ3VyZSBwaWNvIGRpc3BsYXkgYW5kIGJlaGF2aW9yJyB9LFxuICB7IG5hbWU6ICdtY3AnLCBkZXNjOiAnTWFuYWdlIE1DUCBzZXJ2ZXJzOiBhZGQsIHRvZ2dsZSwgcmVjb25uZWN0JyB9LFxuICB7IG5hbWU6ICdwYXJhbGxlbCcsIGRlc2M6ICdSdW4gYSB0YXNrIHdpdGggcGFyYWxsZWwgYWdlbnRzOiAvcGFyYWxsZWwgPHRhc2s+JyB9LFxuICB7IG5hbWU6ICdkZWxpYmVyYXRlJywgZGVzYzogJ0RlbGliZXJhdGUgb24gYSBkZWNpc2lvbjogL2RlbGliZXJhdGUgPGRlY2lzaW9uPicgfSxcbiAgeyBuYW1lOiAnd2FrZXVwcycsIGRlc2M6ICdWaWV3IGFuZCBjYW5jZWwgc2NoZWR1bGVkIHdha2UtdXBzJyB9LFxuICB7IG5hbWU6ICdtZW1vcnknLCBkZXNjOiAnQnJvd3NlIGFuZCBtYW5hZ2Ugc2F2ZWQgbWVtb3JpZXM6IHByb2plY3QgYW5kIGdsb2JhbCcgfSxcbiAgeyBuYW1lOiAnY29tcGFjdCcsIGRlc2M6ICdTdW1tYXJpemUgdGhlIGNvbnZlcnNhdGlvbiB0byBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY2xlYXInLCBkZXNjOiAnQ2xlYXIgdGhlIGNvbnZlcnNhdGlvbiBhbmQgZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2Nvc3QnLCBkZXNjOiAnU2hvdyB0b2tlbiB1c2FnZSBhbmQgZXN0aW1hdGVkIGNvc3Qgc28gZmFyJyB9LFxuICB7IG5hbWU6ICdjb250ZXh0JywgZGVzYzogXCJTaG93IHdoYXQncyBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGFuZCBob3cgYmlnIGVhY2ggcGllY2UgaXNcIiB9LFxuICB7IG5hbWU6ICdleHBvcnQnLCBkZXNjOiAnU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gdG8gYSBtYXJrZG93biBmaWxlJyB9LFxuICB7IG5hbWU6ICd1cGRhdGUnLCBkZXNjOiAnVXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtJyB9LFxuICB7IG5hbWU6ICdoZWxwJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZCBhbmQgd2hhdCBpdCBkb2VzJyB9LFxuXVxuXG5jb25zdCBISVNUT1JZX1NDT1BFUyA9IFsnc2Vzc2lvbicsICdwcm9qZWN0JywgJ2V2ZXJ5d2hlcmUnXVxuY29uc3QgTUVNT1JZX1NDT1BFUyA9IFsnYWxsJywgJ3Byb2plY3QnLCAnZ2xvYmFsJ11cbmNvbnN0IFNIRUxMX1NUUklQX01BWCA9IDVcbmNvbnN0IEFHRU5UX1NUUklQX01BWCA9IDVcbmNvbnN0IFNUUklQX1NDUk9MTE9GRiA9IDFcblxuZnVuY3Rpb24gc3RyaXBXaW5kb3dTdGFydChjdXJyZW50LCB0YXJnZXQsIGxlbmd0aCwgc2l6ZSkge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCgwLCBsZW5ndGggLSBzaXplKVxuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnQsIG1heCkpXG4gIGlmICh0YXJnZXQgPCAwKSByZXR1cm4gc3RhcnRcbiAgaWYgKHRhcmdldCA8IHN0YXJ0ICsgU1RSSVBfU0NST0xMT0ZGKSByZXR1cm4gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gU1RSSVBfU0NST0xMT0ZGKVxuICBpZiAodGFyZ2V0ID49IHN0YXJ0ICsgc2l6ZSAtIFNUUklQX1NDUk9MTE9GRikgcmV0dXJuIE1hdGgubWluKG1heCwgdGFyZ2V0IC0gc2l6ZSArIFNUUklQX1NDUk9MTE9GRiArIDEpXG4gIHJldHVybiBzdGFydFxufVxuXG5cbmZ1bmN0aW9uIGFnZW50RWxhcHNlZChhZ2VudCwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBpZiAoIWFnZW50LnN0YXJ0ZWRBdCkgcmV0dXJuICd3YWl0aW5nJ1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoKGFnZW50LmVuZGVkQXQgfHwgbm93KSAtIGFnZW50LnN0YXJ0ZWRBdCkgLyAxMDAwKSlcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKVxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKVxuICBpZiAoaG91cnMpIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlcyAlIDYwfW1gXG4gIGlmIChtaW51dGVzKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgXG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmZ1bmN0aW9uIGFnZW50U3RhdHVzKGFnZW50KSB7XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIHsgaWNvbjogJycsIGxhYmVsOiAnJywgY29sb3I6IGFjY2VudCgpIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0MnLCBsYWJlbDogJ3F1ZXVlZCcsIGNvbG9yOiBNVVRFRCB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNGJywgbGFiZWw6ICcnLCBjb2xvcjogR1JFRU4gfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnZmFpbGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MDBENycsIGxhYmVsOiAnZmFpbGVkJywgY29sb3I6IFJFRCB9XG4gIHJldHVybiB7IGljb246ICdcdTI1QTAnLCBsYWJlbDogJ2NhbmNlbGxlZCcsIGNvbG9yOiBNVVRFRCB9XG59XG5cbmZ1bmN0aW9uIFN0ZWVyTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNlbGVjdGVkLCBmb2N1cyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0oaXRlbS5tZXNzYWdlSWQsIGxheW91dClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IHNob3dMb2NrZWQgLz5cbn1cblxuZnVuY3Rpb24gRGljdGF0aW9uS2V5cyh7IGlucHV0IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGlucHV0LmhhbmRsZShldmVudCkpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE1vdXNlRm9jdXNSZWdpb24oeyBjaGlsZHJlbiwgb25QcmVzcywgLi4ucHJvcHMgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSkgb25QcmVzcygpXG4gIH0pXG4gIHJldHVybiA8Ym94IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvYm94PlxufVxuXG5mdW5jdGlvbiBDb21wb3NlckFjdGlvbih7IGljb24sIGFjdGl2ZUljb24sIGFjdGl2ZSA9IGZhbHNlLCBvblByZXNzLCBvbkhvdmVyIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScgJiYgaW5zaWRlICE9PSBob3ZlcmVkKCkpIHtcbiAgICAgIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgICAgb25Ib3Zlcj8uKGluc2lkZSlcbiAgICB9XG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGhpZ2hsaWdodGVkID0gaG92ZXJlZCgpIHx8IGFjdGl2ZVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgYmc6IGhpZ2hsaWdodGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBoaWdobGlnaHRlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAke2hpZ2hsaWdodGVkID8gYWN0aXZlSWNvbiA6IGljb259IGB9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBBZ2VudFN0cmlwUm93KHsgc2VsZWN0ZWQsIGZvY3VzZWQsIGNoaWxkcmVuLCBvblByZXNzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScpIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBmb2N1c2VkID8gYWNjZW50KCkgOiBudWxsLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBob3ZlcmVkKCkgPyBGR19TT0ZUIDogTVVURUQgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHNlbGVjdGVkIH19PntzZWxlY3RlZCA/ICdcdTI3NkYgJyA6ICcgICd9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYm94PlxuICApXG59XG5cbi8vIG9ubHkgdGhlIG5ld2VzdCBzbGljZSBvZiBhIGxvbmcgdHJhbnNjcmlwdCByZW5kZXJzOyBvbGRlciBpdGVtcyBsb2FkIGluXG4vLyBiYXRjaGVzIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgdG9wLiByZW5kZXIgY29zdCBpcyBwZXItaXRlbSwgc28gdGhpc1xuLy8ga2VlcHMgZGF5LWxvbmcgc2Vzc2lvbnMgYXMgZmFzdCBhcyBmcmVzaCBvbmVzXG5jb25zdCBISVNUT1JZX1dJTkRPVyA9IDUwXG5cbmZ1bmN0aW9uIGNvbGxhcHNlU3RlZXJUb29scyhpdGVtcykge1xuICBjb25zdCBjb2xsYXBzZWQgPSBbXVxuICBsZXQgaGlkZGVuID0gMFxuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWhpZGRlbikgcmV0dXJuXG4gICAgY29sbGFwc2VkLnB1c2goeyBraW5kOiAnc3RlZXItdG9vbHMnLCBjb3VudDogaGlkZGVuIH0pXG4gICAgaGlkZGVuID0gMFxuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyB8fCBpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGhpZGRlbiArPSBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyA/IGl0ZW0uaXRlbXMubGVuZ3RoIDogMVxuICAgIH0gZWxzZSB7XG4gICAgICBmbHVzaCgpXG4gICAgICBjb2xsYXBzZWQucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuICBmbHVzaCgpXG4gIHJldHVybiBjb2xsYXBzZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGJvb3QsIGNvbnRyb2xsZXI6IGN0bCB9KSB7XG4gIGNvbnN0IHsgY3dkLCByb290LCB2ZXJzaW9uLCBza2lsbHMsIG1jcCB9ID0gYm9vdFxuICBjb25zdCBzdGF0ZSA9IGN0bC5zdGF0ZVxuICBjb25zdCBbbW9kZWxzLCBzZXRNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGJvb3QubW9kZWxzKVxuICBjb25zdCBbcmVmcmVzaGluZ01vZGVscywgc2V0UmVmcmVzaGluZ01vZGVsc10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG5cbiAgY29uc3QgW2Rlcml2ZWQsIHNldERlcml2ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlcml2ZWQpXG4gIGNvbnN0IFt0ZXJtaW5hbFdpZHRoLCBzZXRUZXJtaW5hbFdpZHRoXSA9IGNyZWF0ZVNpZ25hbChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKVxuICB1c2VSZXNpemUoKHsgd2lkdGggfSkgPT4gc2V0VGVybWluYWxXaWR0aCh3aWR0aCkpXG4gIGNvbnN0IFtvdmVybGF5LCBzZXRPdmVybGF5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5vdmVybGF5KVxuICBjb25zdCBbc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmddID0gY3JlYXRlU2lnbmFsKHN0YXRlLnN0cmVhbWluZylcbiAgY29uc3QgW2xpdmVVc2FnZSwgc2V0TGl2ZVVzYWdlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5saXZlVXNhZ2UpXG4gIGNvbnN0IFt0dXJuUGhhc2UsIHNldFR1cm5QaGFzZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUudHVyblBoYXNlKVxuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBjcmVhdGVTaWduYWwoc3RhdGUuYnVzeSlcbiAgY29uc3QgW2NvbXBhY3RpbmcsIHNldENvbXBhY3RpbmddID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RpbmcpXG4gIGNvbnN0IFtjb21wYWN0U3RhdHVzLCBzZXRDb21wYWN0U3RhdHVzXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0U3RhdHVzKVxuICBjb25zdCBbc3RhcnRlZEF0LCBzZXRTdGFydGVkQXRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnN0YXJ0ZWRBdClcbiAgY29uc3QgW2lucHV0LCBzZXRJbnB1dFZhbHVlXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgY29tcG9zZXJGaWxlcyA9IGJvb3QucmVmcy5jb21wb3NlckZpbGVzID8/PSBjcmVhdGVDb21wb3NlckZpbGVzKClcbiAgY29uc3QgW2lucHV0Q3Vyc29yLCBzZXRJbnB1dEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2NvbW1hbmRGb3JtLCBzZXRDb21tYW5kRm9ybV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3Qgc2V0SW5wdXQgPSAodGV4dCwgY3Vyc29yKSA9PiB7XG4gICAgYm9vdC5yZWZzLmRyYWZ0UmV2aXNpb24gPSAoYm9vdC5yZWZzLmRyYWZ0UmV2aXNpb24gPz8gMCkgKyAxXG4gICAgY29uc3QgdmFsdWUgPSBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBzZXRJbnB1dFZhbHVlKHZhbHVlKVxuICAgIHNldElucHV0Q3Vyc29yKGN1cnNvciA/PyB2YWx1ZS5sZW5ndGgpXG4gIH1cbiAgY29uc3QgW2RpY3RhdGlvblN0YXR1cywgc2V0RGljdGF0aW9uU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnaWRsZScpXG4gIGNvbnN0IFtkaWN0YXRpb25MZXZlbHMsIHNldERpY3RhdGlvbkxldmVsc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtjYXB0dXJlU3RhdHVzLCBzZXRDYXB0dXJlU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnaWRsZScpXG4gIGNvbnN0IFtjb21wb3NlckFjdGlvbkxhYmVsLCBzZXRDb21wb3NlckFjdGlvbkxhYmVsXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW21vZGVsLCBzZXRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUubW9kZWwpXG4gIGNvbnN0IFtkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdE1vZGVsKVxuICBjb25zdCBbZWZmb3J0LCBzZXRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmVmZm9ydClcbiAgY29uc3QgW2RlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZXMsIHNldFJlc3VtZVNjb3Blc10gPSBjcmVhdGVTaWduYWwoWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuICByZWZzLnJlc3VtZU9wZW4gPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGNvbnN0IFtwZWVyU3RhdHVzLCBzZXRQZWVyU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBmdW5jdGlvbiBzeW5jRnJvbUNvbnRyb2xsZXIoKSB7XG4gICAgc2V0UGVlclN0YXR1cyhzdGF0ZS5wZWVyRXJyb3IgPyBgcGVlciBkaXNjb25uZWN0ZWQ6ICR7c3RhdGUucGVlckVycm9yfWAgOiBzdGF0ZS5wZWVyUGF1c2VkICYmIHN0YXRlLnBlZXJDb25uZWN0aW9uID8gJ3BlZXIgcmVzcG9uc2VzIHBhdXNlZCcgOiAnJylcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3IoZWZmb3J0LCBzZXRFZmZvcnQsIHN0YXRlLmVmZm9ydClcbiAgICBtaXJyb3IoZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydCwgc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgICBtaXJyb3IocXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3QsIHN0YXRlLnF1ZXN0aW9uKVxuICAgIG1pcnJvcihxdWV1ZWQsIHNldFF1ZXVlZCwgc3RhdGUucXVldWVkKVxuICAgIG1pcnJvcihleHBlZGl0ZWQsIHNldEV4cGVkaXRlZCwgc3RhdGUuZXhwZWRpdGVkKVxuICAgIG1pcnJvcihzZW50LCBzZXRTZW50LCBzdGF0ZS5zZW50KVxuICAgIG1pcnJvcihhZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uLCBzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIH1cblxuICAvLyB0cmVuZCByZS1ydW5zIHRoaXMgY29tcG9uZW50IG9uIGV2ZXJ5IHNpZ25hbCBjaGFuZ2UsIHNvIHRoZSBjb250cm9sbGVyXG4gIC8vIGlzIHN1YnNjcmliZWQgb25jZSBhbmQgZWFjaCBoYW5kbGVyIHJlYWNoZXMgdGhlIG5ld2VzdCByZW5kZXIgdGhyb3VnaFxuICAvLyByZWZzLnVpLCB3aGljaCBpcyByZXBsYWNlZCBiZWxvdyBvbiBldmVyeSBwYXNzXG4gIHJlZnMudWkgPSB7XG4gICAgc3luYzogc3luY0Zyb21Db250cm9sbGVyLFxuICAgIGZsYXNoOiAobWVzc2FnZSkgPT4gZmxhc2gobWVzc2FnZSksXG4gICAgZGVyaXZlZDogKG5leHQpID0+IHtcbiAgICAgIHNldEFjY2VudChuZXh0LmNvbG9yKVxuICAgICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBuZXh0LmNvbG9yIHx8IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfSlcbiAgICB9LFxuICAgIHF1ZXN0aW9uOiAoKSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgICB9LFxuICAgIHR1cm46ICgpID0+IHtcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9LFxuICAgIGlucHV0OiAodGV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldElucHV0KHRleHQpXG4gICAgfSxcbiAgICBzZXNzaW9uOiAoKSA9PiB7XG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSxcbiAgICByZXN1bWVkOiAobWV0YSkgPT4gZmxhc2goYHJlc3VtZWQgICR7bWV0YS50dXJuc30gJHttZXRhLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhtZXRhLmF0KX1gKSxcbiAgICBwcm9qZWN0OiAobmV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHgxYl0wO3BpY28gICR7bmV4dC5yb290LnNwbGl0KCcvJykucG9wKCl9XFx4MDdgKVxuICAgICAgc2V0TWNwU2VydmVycyhuZXh0Lm1jcC5saXN0KCkpXG4gICAgICBzZXRGaWxlTGlzdChbXSlcbiAgICB9LFxuICAgIG1jcDogKHNlcnZlcnMpID0+IHNldE1jcFNlcnZlcnMoc2VydmVycyksXG4gICAgc2hlbGxzOiAoKSA9PiBzZXRTaGVsbHNWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gICAgZ2l0OiAoKSA9PiBzZXRHaXRWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gIH1cbiAgaWYgKCFyZWZzLnN1YnNjcmliZWQpIHtcbiAgICByZWZzLnN1YnNjcmliZWQgPSB0cnVlXG4gICAgY3RsLm9uKCdjaGFuZ2UnLCAoKSA9PiByZWZzLnVpLnN5bmMoKSlcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydmbGFzaCcsICdkZXJpdmVkJywgJ3F1ZXN0aW9uJywgJ3R1cm4nLCAnaW5wdXQnLCAnc2Vzc2lvbicsICdyZXN1bWVkJywgJ3Byb2plY3QnLCAnbWNwJywgJ3NoZWxscycsICdnaXQnXSkge1xuICAgICAgY3RsLm9uKHR5cGUsIChwYXlsb2FkKSA9PiByZWZzLnVpW3R5cGVdKHBheWxvYWQpKVxuICAgIH1cbiAgfVxuICBzeW5jRnJvbUNvbnRyb2xsZXIoKVxuXG4gIGNvbnN0IHNraWxsQ29tbWFuZHMgPSBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBgc2tpbGwgICR7cy5kZXNjcmlwdGlvbiB8fCBzLnNvdXJjZX1gLCBza2lsbDogdHJ1ZSB9KSlcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjKSA9PiAoeyBuYW1lOiBjLm5hbWUsIGRlc2M6IGBjb21tYW5kICAke2MuZGVzY3JpcHRpb24gfHwgYy5zb3VyY2V9YCwgY29tbWFuZDogdHJ1ZSB9KSlcbiAgY29uc3QgYnlOYW1lID0gbmV3IE1hcCgpXG4gIGNvbnN0IHNoYWRvd2VkID0gW11cbiAgZm9yIChjb25zdCBjIG9mIFsuLi5DT01NQU5EUywgLi4uc2tpbGxDb21tYW5kcywgLi4udXNlckNvbW1hbmRzXSkge1xuICAgIGlmIChieU5hbWUuaGFzKGMubmFtZSkpIHNoYWRvd2VkLnB1c2goYCR7Yy5za2lsbCA/ICdza2lsbCcgOiAnY29tbWFuZCd9IFwiJHtjLm5hbWV9XCJgKVxuICAgIGVsc2UgYnlOYW1lLnNldChjLm5hbWUsIGMpXG4gIH1cbiAgY29uc3QgYWxsQ29tbWFuZHMgPSBbLi4uYnlOYW1lLnZhbHVlcygpXVxuICBpZiAoc2hhZG93ZWQubGVuZ3RoICYmICFyZWZzLndhcm5lZFNoYWRvd2VkKSB7XG4gICAgcmVmcy53YXJuZWRTaGFkb3dlZCA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZsYXNoKGBzaGFkb3dlZCBieSBhbiBlYXJsaWVyIG5hbWUsIHJlbmFtZSB0byB1c2U6ICR7c2hhZG93ZWQuam9pbignLCAnKX1gKSwgMClcbiAgfVxuXG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0JyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiA8dGV4dCBzdHlsZT17eyBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7bWVzc2FnZX0gYH08L3RleHQ+LFxuICB9KVxuXG4gIGNvbnN0IHVwZGF0ZVRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiA4MDAwLFxuICAgIHBvc2l0aW9uOiAndG9wLWNlbnRlcicsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gKFxuICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCkgfX0+XG4gICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9PntgICR7bWVzc2FnZX0gYH08L1NoaW1tZXI+XG4gICAgICA8L2JveD5cbiAgICApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIGZsYXNoKG1zZykge1xuICAgIHRvYXN0KG1zZylcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNb2RlbHMoKSB7XG4gICAgaWYgKHJlZnJlc2hpbmdNb2RlbHMoKSkgcmV0dXJuXG4gICAgc2V0UmVmcmVzaGluZ01vZGVscyh0cnVlKVxuICAgIGZsYXNoKCdyZWZyZXNoaW5nIG1vZGVscycpXG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IGJvb3QucmVmcmVzaE1vZGVscygpXG4gICAgICBib290Lm1vZGVscyA9IHJlZnJlc2hlZFxuICAgICAgc2V0TW9kZWxzKHJlZnJlc2hlZClcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZClcbiAgICAgIGZsYXNoKGBtb2RlbHMgcmVmcmVzaGVkICAke3JlZnJlc2hlZC5sZW5ndGh9IG1vZGVscyAgJHtlbGFwc2VkfW1zYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtb2RlbCByZWZyZXNoIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFJlZnJlc2hpbmdNb2RlbHMoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmVmcy5wYXN0ZUltYWdlID8/PSBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7XG4gICAgcmVhZEltYWdlOiByZWFkQ2xpcGJvYXJkSW1hZ2UsXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgfSlcbiAgcmVmcy5jYXB0dXJlSW1hZ2UgPz89IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7XG4gICAgY2FwdHVyZVJlZ2lvbixcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICAgIG9uU3RhdHVzOiBzZXRDYXB0dXJlU3RhdHVzLFxuICB9KVxuXG4gIGlmICghcmVmcy5kaWN0YXRpb24pIHtcbiAgICByZWZzLmRpY3RhdGlvbiA9IGNyZWF0ZURpY3RhdGlvbih7XG4gICAgICBvblN0YXR1czogKHN0YXR1cykgPT4ge1xuICAgICAgICBzZXREaWN0YXRpb25TdGF0dXMoc3RhdHVzKVxuICAgICAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgc2V0RGljdGF0aW9uTGV2ZWxzKFtdKVxuICAgICAgfSxcbiAgICAgIG9uTGV2ZWw6IChsZXZlbCkgPT4gc2V0RGljdGF0aW9uTGV2ZWxzKGFwcGVuZExldmVsKGRpY3RhdGlvbkxldmVscygpLCBsZXZlbCkpLFxuICAgICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2goYGRpY3RhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gKSxcbiAgICB9KVxuICAgIHJlZnMuZGljdGF0aW9uSW5wdXQgPSBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbjogcmVmcy5kaWN0YXRpb24sIGdldElucHV0OiBpbnB1dCwgc2V0SW5wdXQgfSlcbiAgICBjb25zdCBwcmVsb2FkID0gc2V0SW1tZWRpYXRlKCgpID0+IHJlZnMuZGljdGF0aW9uLnByZWxvYWQoKSlcbiAgICBwcmVsb2FkLnVucmVmKClcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBjbGVhckltbWVkaWF0ZShwcmVsb2FkKVxuICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IFtzaWduYWwsIGNvZGVdIG9mIFtbJ1NJR1RFUk0nLCAxNDNdLCBbJ1NJR0hVUCcsIDEyOV1dKSB7XG4gICAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZWZzLnVwZGF0ZUNoZWNrZWQpIHtcbiAgICByZWZzLnVwZGF0ZUNoZWNrZWQgPSB0cnVlXG4gICAgY2hlY2tGb3JVcGRhdGUodmVyc2lvbikudGhlbigoZm91bmQpID0+IHtcbiAgICAgIGlmICghZm91bmQpIHJldHVyblxuICAgICAgdXBkYXRlVG9hc3QoYHBpY28gdiR7Zm91bmQudmVyc2lvbn0gYXZhaWxhYmxlICAvdXBkYXRlYClcbiAgICAgIGZvdW5kLm1hcmtOb3RpZmllZCgpXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pXG4gIH1cblxuICBjb25zdCBwZXJmb3JtQ29tcGFjdGlvbiA9IGN0bC5jb21wYWN0XG5cbiAgZnVuY3Rpb24gY29tcGxldGlvblNvdXJjZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7Ym9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJ30pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycgOiBwcmVmXG4gIH1cblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICByZXR1cm4gY3RsLnByZXZpZXdTdGVlcihzdGVlcigpPy5jaGFuZ2VzKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJSb3dzKCkge1xuICAgIHJldHVybiBzdGVlcmFibGVUcmFuc2NyaXB0KHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQpXG4gIH1cblxuICBmdW5jdGlvbiBiZWdpblN0ZWVyKCkge1xuICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgc2V0U3RlZXIoeyBzZWxlY3RlZCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIHJvbGU6ICd1c2VyJywgY2hhbmdlczogW10gfSlcbiAgICBpZiAocm93c1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgICBzZXRIaXN0V2luZG93KEluZmluaXR5KVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0ZWVyKGFwcGxpZWQgPSBmYWxzZSkge1xuICAgIHNldFN0ZWVyKG51bGwpXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICBpZiAoYXBwbGllZCkgZmxhc2goJ2NvbnZlcnNhdGlvbiBzdGVlcmluZyBhcHBsaWVkICBub3RoaW5nIHNlbnQnKVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlTdGVlcigpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIWRyYWZ0Py5jaGFuZ2VzLmxlbmd0aCkgcmV0dXJuIGNsb3NlU3RlZXIoKVxuICAgIGN0bC5hcHBseVN0ZWVyKGRyYWZ0LmNoYW5nZXMpXG4gICAgY2xvc2VTdGVlcih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckVkaXQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93ID0gc3RlZXJSb3dzKClbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCFyb3cpIHJldHVybiBzdGFydFN0ZWVyQWRkKClcbiAgICBpZiAocm93LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBzZXRTdGVlclRleHQocm93LnRleHQpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogcm93LnJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJBZGQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IHByZXZpb3VzUm9sZSA9IHNlbGVjdGVkPy5yb2xlXG4gICAgY29uc3Qgcm9sZSA9IHByZXZpb3VzUm9sZSA9PT0gJ3VzZXInID8gJ2Fzc2lzdGFudCcgOiBTVEVFUl9ST0xFU1swXVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IHRydWUsIHJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJUZXh0KHRleHQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZsYXNoKCdtZXNzYWdlIGNhbm5vdCBiZSBlbXB0eScpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBjaGFuZ2UgPSBkcmFmdC5hZGRpbmdcbiAgICAgID8geyBvcDogJ2luc2VydCcsIGlkOiBtYWtlRXZlbnQoJ21lc3NhZ2UnKS5pZCwgYWZ0ZXI6IHRhcmdldD8ubWVzc2FnZUlkID8/IG51bGwsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgICA6IHsgb3A6ICdyZXBsYWNlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCBjaGFuZ2VzOiBbLi4uZHJhZnQuY2hhbmdlcywgY2hhbmdlXSB9KVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJEZWxldGUoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgaWYgKHRhcmdldC5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgY29uc3QgY2hhbmdlcyA9IFsuLi5kcmFmdC5jaGFuZ2VzLCB7IG9wOiAnZGVsZXRlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkIH1dXG4gICAgY29uc3QgcmVtYWluaW5nID0gcm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm1lc3NhZ2VJZCAhPT0gdGFyZ2V0Lm1lc3NhZ2VJZClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKGRyYWZ0LnNlbGVjdGVkLCBNYXRoLm1heCgwLCByZW1haW5pbmcubGVuZ3RoIC0gMSkpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQsIGNoYW5nZXMgfSlcbiAgICBpZiAocmVtYWluaW5nW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocmVtYWluaW5nW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnNlcnRDb21tYW5kKGNvbW1hbmQsIHJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpLCBhcmdzID0gJycpIHtcbiAgICBpZiAoIXJhbmdlKSByZXR1cm5cbiAgICBjb25zdCBkcmFmdCA9IGlucHV0KClcbiAgICBjb25zdCB0b2tlbiA9IHt9XG4gICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gdG9rZW5cbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGJvb3QuY29tbWFuZHMubGlzdCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29tbWFuZC5uYW1lKVxuICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUZyb250bWF0dGVyKGF3YWl0IHJlYWRGaWxlKG1ldGFkYXRhLmZpbGUsICd1dGYtOCcpKVxuICAgICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gdG9rZW4gfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgY29uc3QgZm9ybSA9IHsgbmFtZTogY29tbWFuZC5uYW1lLCBib2R5OiBib2R5LnRyaW0oKSwgZHJhZnQsIHJhbmdlLCBhcmdzLCB0b2tlbiB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb21tYW5kRmllbGRzKHsgYXJndW1lbnRzOiBwYXJzZUNvbW1hbmRBcmd1bWVudHMoYm9keSkgfSwgYm9keSwgYXJncylcbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldENvbW1hbmRGb3JtKHsgLi4uZm9ybSwgZmllbGRzIH0pXG4gICAgICAgIGlmIChmaWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdwYXRoJykpIHtcbiAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKHNldEZpbGVMaXN0KS5jYXRjaCgoZXJyb3IpID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgZmluaXNoQ29tbWFuZChmb3JtLCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goYGNvdWxkIG5vdCBsb2FkIC8ke2NvbW1hbmQubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaENvbW1hbmQoZm9ybSwgdmFsdWVzKSB7XG4gICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gZm9ybS50b2tlbiB8fCBpbnB1dCgpICE9PSBmb3JtLmRyYWZ0KSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IGV4cGFuZENvbW1hbmQoZm9ybS5ib2R5LCB2YWx1ZXNbJyRhcmdzJ10gPz8gZm9ybS5hcmdzLCB2YWx1ZXMpXG4gICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoZm9ybS5kcmFmdCwgZm9ybS5yYW5nZSwgYm9keSlcbiAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3N0cmluZycpIGFyZ3MgPSAnJ1xuICAgIGlmIChjLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKGMpXG4gICAgc2V0SW5wdXQoJycpXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICBpZiAoYy5uYW1lID09PSAnZm9yaycpIHJldHVybiBjdGwuZm9yayhhcmdzLnRyaW0oKSlcbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnZWZmb3J0Jykge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd0VmZm9ydFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnNldEVmZm9ydEJ5TmFtZShhcmdzLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd1cGRhdGUnKSB7XG4gICAgICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHJldHVybiBmbGFzaCgndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dCAgdXBkYXRlIGl0IHdpdGggZ2l0JylcbiAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24odmVyc2lvbiwgbGF0ZXN0KSkgcmV0dXJuIGZsYXNoKGBwaWNvIHYke3ZlcnNpb259IGlzIGFscmVhZHkgdGhlIGxhdGVzdGApXG4gICAgICBmbGFzaChgdXBkYXRpbmcke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30uLi5gKVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiBmbGFzaChgdXBkYXRlZCR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfSAgcmVzdGFydCBwaWNvIHRvIHVzZSBpdGApXG4gICAgICByZXR1cm4gZmxhc2goYHVwZGF0ZSBmYWlsZWQ6ICR7cmVzdWx0Lm91dHB1dC5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdzdGVlcicpIHJldHVybiBiZWdpblN0ZWVyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29udGV4dCcpIHJldHVybiBvcGVuQ29udGV4dFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGlzdG9yeScpIHJldHVybiBvcGVuSGlzdG9yeVNlYXJjaCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hlbHAnKSByZXR1cm4gc2V0VmlldygnaGVscCcpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21jcCcpIHJldHVybiBzZXRTaG93TWNwUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnd2FrZXVwcycpIHJldHVybiBzZXRTaG93V2FrZXVwc1BhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICByZXR1cm4gc2V0U2hvd01lbW9yeVBhbmVsKHRydWUpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXN1bWUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Byb2plY3QnKSByZXR1cm4gb3BlblByb2plY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2N3ZCcpIHtcbiAgICAgIGNvbnN0IHJvb3ROb3RlID0gYm9vdC5yb290ICE9PSBib290LmN3ZCA/IGAgIHByb2plY3Qgcm9vdCAke3Nob3J0ZW5QYXRoKGJvb3Qucm9vdCl9YCA6ICcnXG4gICAgICByZXR1cm4gZmxhc2goYCR7Ym9vdC5kaXNwbGF5Q3dkfSR7cm9vdE5vdGV9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3NraWxscycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ1NraWxscycsXG4gICAgICAgIHJvd3M6IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IHMuZGVzY3JpcHRpb24sIG5vdGU6IHMuc291cmNlIH0pKSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21tYW5kcycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ0NvbW1hbmRzJyxcbiAgICAgICAgcm93czogW1xuICAgICAgICAgIC4uLkNPTU1BTkRTLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2MsIG5vdGU6ICdidWlsdGluJyB9KSksXG4gICAgICAgICAgLi4uYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzY3JpcHRpb24sIG5vdGU6IGNtZC5zb3VyY2UgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Rvb2xzJykge1xuICAgICAgY29uc3QgeyByb3dzLCBtY3BDb3VudCB9ID0gYXdhaXQgY3RsLmRlc2NyaWJlVG9vbHMoKVxuICAgICAgc2V0SW5mb1BhbmVsKHsgdGl0bGU6IGBUb29scyR7bWNwQ291bnQgPyBgICBwbHVzICR7bWNwQ291bnR9IE1DUCAoc2VlIC9tY3ApYCA6ICcnfWAsIHJvd3MgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbmV3JykgcmV0dXJuIGN0bC5uZXdTZXNzaW9uKClcbiAgICBpZiAoYy5uYW1lID09PSAnZGVsZXRlJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKCFzdGF0ZS5zZXNzaW9uKSByZXR1cm4gZmxhc2goJ25vIGN1cnJlbnQgc2Vzc2lvbiB0byBkZWxldGUnKVxuICAgICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0odHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmV3aW5kJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93RWZmb3J0UGFuZWwoKSB8fCBzaG93VGhlbWVQYW5lbCgpIHx8IHNob3dDb25maWdQYW5lbCgpIHx8IHNob3dEZWxldGVDb25maXJtKCkgfHwgc2hvd01lbW9yeVBhbmVsKCkgfHwgc2hvd0hpc3RvcnlQYW5lbCgpIHx8IHNob3dSZXN1bWVQYW5lbCgpIHx8IHNob3dNY3BQYW5lbCgpIHx8XG4gICAgc2hvd1Byb2plY3RQYW5lbCgpIHx8IHNob3dXYWtldXBzUGFuZWwoKSB8fCBzaG93Q29ubmVjdFBhbmVsKCkgfHxcbiAgICBjb21tYW5kRm9ybSgpICE9PSBudWxsIHx8IGluZm9QYW5lbCgpICE9PSBudWxsIHx8IHJld2luZFN0ZXAoKSAhPT0gbnVsbFxuXG4gIC8vIGV2ZXJ5IGZvY3VzLXRha2luZyBwYW5lbCBkaW1zIHRoZSBjb252ZXJzYXRpb24gYmVoaW5kIGl0OyB0aGUgdGhlbWVcbiAgLy8gcGlja2VyIGlzIHRoZSBvbmUgZXhlbXB0aW9uLCBzaW5jZSBpdHMgam9iIGlzIHByZXZpZXdpbmcgcGFsZXR0ZXMgb25cbiAgLy8gdGhlIHVuZGltbWVkIHVpXG4gIGNvbnN0IGRpbW1pbmdQYW5lbCA9ICgpID0+IGFueVBhbmVsKCkgJiYgIXNob3dUaGVtZVBhbmVsKClcblxuICBmdW5jdGlvbiBjYW5jZWxBZ2VudChhZ2VudCkge1xuICAgIGN0bC5jYW5jZWxBZ2VudChhZ2VudC5pZClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NBZ2VudChhZ2VudCkge1xuICAgIGlmICghY3RsLmRpc21pc3NBZ2VudChhZ2VudC5pZCkpIHJldHVyblxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGFnZW50LmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdGwuZGlzbWlzc0RlbGliZXJhdGlvbihpdGVtLmRlbGliZXJhdGlvbklkKVxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGl0ZW0uaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NTaGVsbChzaGVsbCkge1xuICAgIGJvb3Quc2hlbGxzLmRpc21pc3Moc2hlbGwuaWQpXG4gICAgaWYgKHZpZXdlZFNoZWxsSWQoKSA9PT0gc2hlbGwuaWQpIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGxTaGVsbChzaGVsbCkge1xuICAgIGlmIChzaGVsbC5zdGF0dXMgIT09ICdydW5uaW5nJykgcmV0dXJuIGZsYXNoKGBzaGVsbCAke3NoZWxsLmlkfSBhbHJlYWR5IGV4aXRlZGApXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnNoZWxsS2lsbEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHNoZWxsLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuc2hlbGxLaWxsQXJtID0geyBpZDogc2hlbGwuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGtpbGwgXCIke3NoZWxsLmRlc2NyaXB0aW9uIHx8IGBzaGVsbCAke3NoZWxsLmlkfWB9XCJgKVxuICAgIH1cbiAgICByZWZzLnNoZWxsS2lsbEFybSA9IG51bGxcbiAgICBib290LnNoZWxscy5raWxsKHNoZWxsLmlkLCAndXNlcicpXG4gIH1cblxuICBjb25zdCBlZmZvcnRBcHBsaWVzID0gY3RsLmVmZm9ydEFwcGxpZXNcbiAgY29uc3Qgc2V0U2Vzc2lvbkVmZm9ydCA9IGN0bC5zZXRFZmZvcnRcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogJ2lucHV0JyB9KVxuICBjb25zdCBzdGVlckxpc3RGb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgY3ljbGU6ICdub25lJywgYWN0aXZlOiBmYWxzZSB9KVxuICBmbS5pdGVtKCdmZWVkJylcbiAgaWYgKHN0ZWVyKCkpIHtcbiAgICBmbS5pdGVtKCdzdGVlcicpXG4gICAgaWYgKCFmbS5pcygnc3RlZXInKSkgZm0uZm9jdXMoJ3N0ZWVyJylcbiAgfVxuICBjb25zdCBjb252ZXJzYXRpb25TZWFyY2ggPSBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSlcbiAgY29udmVyc2F0aW9uU2VhcmNoLnJlZ2lzdGVyRm9jdXMoKVxuICBsZXQgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcyA9IFtdXG4gIGFnZW50c1ZlcnNpb24oKVxuICBjb25zdCBhZ2VudFJvd3MgPSBjdGwuYWN0aXZpdHkoKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gY3RsLnNoZWxsUm93cygpXG4gIGlmIChxdWVzdGlvblJlcXVlc3QoKSkge1xuICAgIGZtLml0ZW0oJ3F1ZXN0aW9uJylcbiAgICBpZiAoIWZtLmlzKCdxdWVzdGlvbicpKSBmbS5mb2N1cygncXVlc3Rpb24nKVxuICB9IGVsc2Uge1xuICAgIGlmICghdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIGZtLml0ZW0oJ2lucHV0JylcbiAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZtLmdyb3VwKCdhY3Rpdml0eS1zdHJpcCcsIHsgaXRlbXM6IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ3NoZWxsLXN0cmlwJywgeyBpdGVtczogWydzaGVsbC1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICAgIGlmIChhZ2VudFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ2FnZW50LXN0cmlwJywgeyBpdGVtczogWydhZ2VudC1tYWluJywgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gJiYgIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSB7XG4gICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gZmFsc2VcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfVxuICB9XG4gIHVzZUZvY3VzVHJhcChhbnlQYW5lbCgpIHx8IHZpZXcoKSA9PT0gJ2hlbHAnKVxuICB1c2VTZWxlY3Rpb24oe1xuICAgIG9uQ29weTogKHRleHQpID0+IGZsYXNoKGBjb3BpZWQgJHt0ZXh0Lmxlbmd0aH0gJHt0ZXh0Lmxlbmd0aCA9PT0gMSA/ICdjaGFyYWN0ZXInIDogJ2NoYXJhY3RlcnMnfWApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkge1xuICAgIGNvbnN0IGl0ZW1zID0gWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgoc2hlbGwpID0+IGBzaGVsbC0ke3NoZWxsLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhZ2VudCkgPT4gYGFnZW50LSR7YWdlbnQuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBjb252ZXJzYXRpb25TZWFyY2gub3BlbigpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGVsc2UgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIGVsc2Ugc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgZWxzZSBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdiJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbbnVsbCwgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgICAgICBjb25zdCBuZXh0ID0gb3JkZXJbKG9yZGVyLmluZGV4T2YoZWZmb3J0KCkgPz8gbnVsbCkgKyAxKSAlIG9yZGVyLmxlbmd0aF1cbiAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChuZXh0KVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93SGlzdG9yeVBhbmVsKCkpIHtcbiAgICAgIHN3aXRjaEhpc3RTY29wZSgoaGlzdFNjb3BlKCkgKyAxKSAlIEhJU1RPUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICAgIHNldE1lbVNjb3BlKChzKSA9PiAocyArIDEpICUgTUVNT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKHJlc3VtZVNjb3BlKCkgKyAxKSAlIHJlc3VtZVNjb3BlcygpLmxlbmd0aFxuICAgICAgc2V0UmVzdW1lU2NvcGUobmV4dClcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhuZXh0KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd6JyAmJiBzdGF0ZS5yZXdpbmRVbmRvICYmICFidXN5KCkgJiYgdmlldygpID09PSAnY2hhdCcpIHtcbiAgICAgIHVuZG9SZXdpbmQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgZm10RWxhcHNlZCA9IChzKSA9PiAocyA8IDYwID8gYCR7c31zYCA6IGAke01hdGguZmxvb3IocyAvIDYwKX1tICR7cyAlIDYwfXNgKVxuICBjb25zdCBlbGFwc2VkID0gZm10RWxhcHNlZChidXN5KCkgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KCkpIC8gMTAwMCkpIDogMClcblxuICBjb25zdCBzbGFzaFJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpXG4gIGNvbnN0IHNsYXNoUXVlcnkgPSBzbGFzaFJhbmdlPy5xdWVyeSA/PyBudWxsXG4gIGNvbnN0IHNob3dDb21tYW5kcyA9IHNsYXNoUmFuZ2UgIT09IG51bGwgJiYgIWFueVBhbmVsKClcbiAgY29uc3QgbWF0Y2hlZENvbW1hbmRzID0gIXNob3dDb21tYW5kc1xuICAgID8gW11cbiAgICA6IGNtZEN5Y2xlKClcbiAgICAgID8gY21kQ3ljbGUoKS5tYXRjaGVzXG4gICAgICA6IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gKGMuY29tbWFuZCB8fCAoc2xhc2hSYW5nZS5zdGFydCA9PT0gMCAmJiBzbGFzaFJhbmdlLmVuZCA9PT0gaW5wdXQoKS5sZW5ndGgpKSAmJiBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNsYXNoUXVlcnkudG9Mb3dlckNhc2UoKSkpXG5cbiAgY29uc3QgYXRNYXRjaCA9IGlucHV0KCkubWF0Y2goLyhefFtcXHMoXSlAKFteXFxzQF0qKSQvKVxuICBjb25zdCBzaG93RmlsZXMgPSBhdE1hdGNoICE9PSBudWxsICYmICFzaG93Q29tbWFuZHMgJiYgIWZpbGVzRGlzbWlzc2VkKCkgJiYgIWFueVBhbmVsKClcbiAgaWYgKHNob3dGaWxlcykge1xuICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWF0Y2hlZEZpbGVzID0gc2hvd0ZpbGVzXG4gICAgPyBmaWxlTGlzdCgpXG4gICAgICAgIC5tYXAoKGYpID0+IFtmdXp6eVNjb3JlKGF0TWF0Y2hbMl0sIGYpLCBmXSlcbiAgICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICAgICAgICAubWFwKChbLCBmXSkgPT4gZilcbiAgICA6IFtdXG5cbiAgZnVuY3Rpb24gcGlja0ZpbGUoZikge1xuICAgIGNvbnN0IHYgPSBpbnB1dCgpXG4gICAgY29uc3QgYXQgPSB2Lmxhc3RJbmRleE9mKCdAJylcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGN0bC5hdHRhY2hQcm9qZWN0RmlsZShmKVxuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlciArICcgJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCArIDEpICsgZiArICcgJylcbiAgICB9XG4gICAgc2V0RmlsZUluZGV4KDApXG4gIH1cblxuICBjb25zdCBjb21wQ3R4ID0gY29tcGxldGluZygpID8gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogaW5wdXQoKSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KSA6IG51bGxcbiAgY29uc3Qgc2hvd0NvbXBsZXRpb24gPSAhIWNvbXBDdHggJiYgY29tcEN0eC5tYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXNob3dDb21tYW5kcyAmJiAhc2hvd0ZpbGVzICYmICFhbnlQYW5lbCgpXG5cbiAgY29uc3QgcmV3aW5kRW50cmllcyA9ICgpID0+IHVzZXJFbnRyaWVzKGRlcml2ZWQoKSlcbiAgY29uc3QgcmV3aW5kT3B0aW9ucyA9ICgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmV3aW5kVGFyZ2V0KClcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIFtdXG4gICAgY29uc3QgeyBtc2dzLCBlZGl0cyB9ID0gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCB0YXJnZXQuaW5kZXgpXG4gICAgY29uc3QgZSA9IGVkaXRzLmxlbmd0aFxuICAgIGNvbnN0IGVkaXRzTGFiZWwgPSBgJHtlfSAke2UgPT09IDEgPyAnZWRpdCcgOiAnZWRpdHMnfWBcbiAgICBjb25zdCBvcHRzID0gW11cbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2JvdGgnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBhbmQgY29udmVyc2F0aW9uJywgZGVzYzogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHtcbiAgICAgIGtleTogJ2NoYXQnLFxuICAgICAgbGFiZWw6IGUgPiAwID8gJ3Jlc3RvcmUgY29udmVyc2F0aW9uIG9ubHknIDogJ3Jlc3RvcmUgY29udmVyc2F0aW9uJyxcbiAgICAgIGRlc2M6IGUgPiAwID8gJ2NoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGZpbGUgY2hhbmdlcyBrZXB0JyA6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBkcm9wcyAke21zZ3N9IGVudHJpZXNgLFxuICAgIH0pXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdjb2RlJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgb25seScsIGRlc2M6IGBjb252ZXJzYXRpb24ga2VwdCAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goeyBrZXk6ICdzdW1tYXJ5JywgbGFiZWw6ICdyZXdpbmQgYW5kIGtlZXAgYSBzdW1tYXJ5JywgZGVzYzogJ2Ryb3BwZWQgZW50cmllcyBjb2xsYXBzZSBpbnRvIGEgb25lLWxpbmUgbm90ZScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9KSgpXG5cbiAgY29uc3QgdXNhZ2UgPSBsaXZlVXNhZ2UoKSB8fCBkZXJpdmVkKCkudXNhZ2VBY3RpdmVcbiAgY29uc3QgY29udGV4dFBlcmNlbnQgPSBtb2RlbCgpLmNvbnRleHQgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdE1vZGVsID09PSBtb2RlbCgpLm5hbWVcbiAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgLyBtb2RlbCgpLmNvbnRleHQpICogMTAwKSlcbiAgICA6IDBcbiAgY29uc3QgdmlzaWJsZVNoZWxscyA9IHNoZWxsUm93c1xuICBjb25zdCB2aWV3ZWRTaGVsbCA9IHZpZXdlZFNoZWxsSWQoKSA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gdmlld2VkU2hlbGxJZCgpKSA6IG51bGxcbiAgY29uc3QgY29tYmluZWRBY3Rpdml0eSA9IHZpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMFxuICBjb25zdCBzaGVsbFN0cmlwRm9jdXMgPSBmbS5pcygnc2hlbGwtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsSWQgPSBzaGVsbFN0cmlwRm9jdXMgJiYgc2hlbGxTdHJpcEZvY3VzICE9PSAnc2hlbGwtbWFpbicgPyBzaGVsbFN0cmlwRm9jdXMuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsID0gZm9jdXNlZFNoZWxsSWQgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IGZvY3VzZWRTaGVsbElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkU2hlbGwgPSBmb2N1c2VkU2hlbGwgfHwgdmlld2VkU2hlbGxcbiAgY29uc3Qgc2hlbGxBY3Rpb25IaW50ID0gaGludGVkU2hlbGwgPyBgY3RybCt4ICR7aGludGVkU2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyAna2lsbCcgOiAnZGlzbWlzcyd9YCA6ICcnXG4gIGNvbnN0IHNoZWxsV2luZG93VGFyZ2V0ID0gc2hlbGxTdHJpcEZvY3VzID09PSAnc2hlbGwtbWFpbicgPyAwIDogdmlzaWJsZVNoZWxscy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IChmb2N1c2VkU2hlbGxJZCB8fCB2aWV3ZWRTaGVsbElkKCkpKVxuICBjb25zdCBzaGVsbFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChzaGVsbFdpbmRvd09mZnNldCgpLCBzaGVsbFdpbmRvd1RhcmdldCwgdmlzaWJsZVNoZWxscy5sZW5ndGgsIFNIRUxMX1NUUklQX01BWClcbiAgaWYgKHNoZWxsV2luZG93U3RhcnQgIT09IHNoZWxsV2luZG93T2Zmc2V0KCkpIHNldFNoZWxsV2luZG93T2Zmc2V0KHNoZWxsV2luZG93U3RhcnQpXG4gIGNvbnN0IHNoZWxsV2luZG93ID0gdmlzaWJsZVNoZWxscy5zbGljZShzaGVsbFdpbmRvd1N0YXJ0LCBzaGVsbFdpbmRvd1N0YXJ0ICsgU0hFTExfU1RSSVBfTUFYKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgQUdFTlRfU1RSSVBfTUFYKVxuICBpZiAoYWdlbnRXaW5kb3dTdGFydCAhPT0gYWdlbnRXaW5kb3dPZmZzZXQoKSkgc2V0QWdlbnRXaW5kb3dPZmZzZXQoYWdlbnRXaW5kb3dTdGFydClcbiAgY29uc3QgYWdlbnRXaW5kb3cgPSB2aXNpYmxlQWdlbnRzLnNsaWNlKGFnZW50V2luZG93U3RhcnQsIGFnZW50V2luZG93U3RhcnQgKyBBR0VOVF9TVFJJUF9NQVgpXG4gIGNvbnN0IHBlbmRpbmdXYWtldXBzID0gYm9vdC53YWtldXBzLnBlbmRpbmcoKVxuICBnaXRWZXJzaW9uKClcbiAgY29uc3QgZ2l0SW5mbyA9IGdpdEZvb3RlcigpID8gYm9vdC5naXQuc3RhdHVzKCkgOiBudWxsXG5cbiAgaWYgKHZpZXcoKSA9PT0gJ2hlbHAnKSB7XG4gICAgcmV0dXJuIDxIZWxwIGNvbW1hbmRzPXtDT01NQU5EU30gb25DbG9zZT17KCkgPT4gc2V0VmlldygnY2hhdCcpfSAvPlxuICB9XG5cbiAgaGlnaGxpZ2h0VmVyc2lvbigpXG5cbiAgY29uc3QgbWFpblRyYW5zY3JpcHQgPSBzdGVlcigpID8gc3RlZXJQcmV2aWV3KCkudHJhbnNjcmlwdCA6IGRlcml2ZWQoKS50cmFuc2NyaXB0XG4gIGNvbnN0IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQgPSBzdGVlclJvd3MoKVtzdGVlcigpPy5zZWxlY3RlZF0/Lm1lc3NhZ2VJZFxuICBjb25zdCBkZWNvcmF0ZWRUcmFuc2NyaXB0ID0gc3RlZXIoKSA/IG1haW5UcmFuc2NyaXB0Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAuLi5pdGVtLFxuICAgIHN0ZWVyU2VsZWN0ZWQ6IGl0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkLFxuICB9KSkgOiBtYWluVHJhbnNjcmlwdFxuICBjb25zdCBhY3RpdmVTaGVsbCA9IHNoZWxsU3RyaXBGb2N1cyA/IGZvY3VzZWRTaGVsbCA6IGFnZW50U3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRTaGVsbFxuICBjb25zdCBhY3RpdmVBZ2VudCA9IGFnZW50U3RyaXBGb2N1cyA/IGZvY3VzZWRBZ2VudCA6IHNoZWxsU3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRBZ2VudFxuICBsZXQgc2hlbGxPdXRwdXQgPSBudWxsXG4gIGlmIChhY3RpdmVTaGVsbCkge1xuICAgIHRyeSB7IHNoZWxsT3V0cHV0ID0gYm9vdC5zaGVsbHMub3V0cHV0KGFjdGl2ZVNoZWxsLmlkLCB7IHRhaWw6IDIwMDAgfSkgfSBjYXRjaCB7fVxuICB9XG4gIGNvbnN0IHNoZWxsVHJhbnNjcmlwdCA9IGFjdGl2ZVNoZWxsID8gW1xuICAgIHsga2luZDogJ3NoZWxsLWNvbW1hbmQnLCB0ZXh0OiBhY3RpdmVTaGVsbC5jb21tYW5kIH0sXG4gICAgeyBraW5kOiAnc2hlbGwtb3V0cHV0JywgdGV4dDogc2hlbGxPdXRwdXQ/Lm91dHB1dCB8fCAnbm8gb3V0cHV0IHlldCcgfSxcbiAgXSA6IG51bGxcbiAgY29uc3QgdHJhbnNjcmlwdFNvdXJjZSA9IGFjdGl2ZVNoZWxsID8gYHNoZWxsOiR7YWN0aXZlU2hlbGwuaWR9YCA6IGFjdGl2ZUFnZW50ID8gYGFnZW50OiR7YWN0aXZlQWdlbnQuaWR9YCA6ICdtYWluJ1xuICBjb25zdCBsaXZlUGVlcklkcyA9IG5ldyBTZXQob3ZlcmxheSgpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAncGVlcicpLm1hcCgoaXRlbSkgPT4gaXRlbS5tZXNzYWdlSWQpKVxuICBjb25zdCB0cmFuc2NyaXB0ID0gc2hlbGxUcmFuc2NyaXB0IHx8IChhY3RpdmVBZ2VudCA/IGFnZW50VHJhbnNjcmlwdChhY3RpdmVBZ2VudCkgOiBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAncGVlcicgfHwgIWxpdmVQZWVySWRzLmhhcyhpdGVtLm1lc3NhZ2VJZCkpKVxuICBjb25zdCBkZWxpYmVyYXRpb25WaWV3ID0gYWN0aXZlQWdlbnQ/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nXG4gIGNvbnN0IGlzb2xhdGVkVHJhbnNjcmlwdCA9IGFjdGl2ZUFnZW50IHx8IGFjdGl2ZVNoZWxsXG4gIGNvbnN0IGdyb3VwSXRlbXMgPSAoc291cmNlLCBhY3RpdmUgPSBmYWxzZSkgPT4gc3RlZXIoKVxuICAgID8gY29sbGFwc2VTdGVlclRvb2xzKHNvdXJjZSlcbiAgICA6IGNvbXBhY3RUb29sSGlzdG9yeSgpXG4gICAgICA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhzb3VyY2UsIGFjdGl2ZSlcbiAgICAgIDogc291cmNlXG4gIGNvbnN0IHRyYW5zY3JpcHRJdGVtcyA9IGdyb3VwSXRlbXModHJhbnNjcmlwdCwgYWN0aXZlQWdlbnQ/LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKVxuICBjb25zdCB3aW5kb3dlZCA9IGRlbGliZXJhdGlvblZpZXcgPyB7IGl0ZW1zOiB0cmFuc2NyaXB0SXRlbXMsIGhpZGRlbkl0ZW1zOiAwLCBoaWRkZW5Db3VudDogMCB9IDogdHJhbnNjcmlwdFdpbmRvdyh0cmFuc2NyaXB0SXRlbXMsIGhpc3RXaW5kb3coKSlcbiAgY29uc3QgaGlkZGVuQ291bnQgPSB3aW5kb3dlZC5oaWRkZW5Db3VudFxuICBjb25zdCB2aXNpYmxlSXRlbXMgPSBpc29sYXRlZFRyYW5zY3JpcHQgPyB3aW5kb3dlZC5pdGVtcyA6IFsuLi53aW5kb3dlZC5pdGVtcywgLi4uZ3JvdXBJdGVtcyhzdHJlYW1UcmFuc2NyaXB0KG92ZXJsYXkoKSwgc3RyZWFtaW5nKCkgPyBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIDogbnVsbCksIHR1cm5QaGFzZSgpID09PSAndG9vbHMnKV1cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3aWRlTGF5b3V0ID0gd2lkZVNpZGViYXIoKSAmJiB0ZXJtaW5hbFdpZHRoKCkgPiAxNjBcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudCAmJiAhdmlld2VkU2hlbGwgJiYgIWFueVBhbmVsKCkgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbidcblxuICBpZiAoc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lbW9yeVBhbmVsXG4gICAgICAgIG1lbW9yaWVzPXttZW1vcnlMaXN0KCkuZmlsdGVyKChtKSA9PiBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldID09PSAnYWxsJyB8fCBtLnNjb3BlID09PSBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldKX1cbiAgICAgICAgc2NvcGVzPXtNRU1PUllfU0NPUEVTfVxuICAgICAgICBzY29wZUluZGV4PXttZW1TY29wZSgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uVG9nZ2xlRGlzYWJsZWQ9e3RvZ2dsZU1lbW9yeURpc2FibGVkfVxuICAgICAgICBvbkZvcmdldD17Zm9yZ2V0TWVtb3J5fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWVtb3J5UGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd01jcFBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1jcFBhbmVsXG4gICAgICAgIHNlcnZlcnM9e21jcFNlcnZlcnMoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZT17KG5hbWUpID0+IG1jcC50b2dnbGUobmFtZSl9XG4gICAgICAgIG9uUmVjb25uZWN0PXsobmFtZSkgPT4gbWNwLnJlY29ubmVjdChuYW1lKX1cbiAgICAgICAgb25SZW1vdmU9eyhuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJtZWQgPSByZWZzLm1jcFJlbW92ZUFybVxuICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQubmFtZSAhPT0gbmFtZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgICAgICByZWZzLm1jcFJlbW92ZUFybSA9IHsgbmFtZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtuYW1lfVwiIGFuZCBpdHMgY29uZmlnYClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSBudWxsXG4gICAgICAgICAgbWNwLnJlbW92ZShuYW1lKVxuICAgICAgICAgIGZsYXNoKGByZW1vdmVkIG1jcCBzZXJ2ZXIgJHtuYW1lfWApXG4gICAgICAgIH19XG4gICAgICAgIG9uQWRkPXsobmFtZSwgY29tbWFuZCwgc2NvcGUpID0+IHtcbiAgICAgICAgICBtY3AuYWRkKG5hbWUsIGNvbW1hbmQsIHNjb3BlKVxuICAgICAgICAgIGZsYXNoKGBhZGRlZCAke25hbWV9ICgke3Njb3BlfSlgKVxuICAgICAgICB9fVxuICAgICAgICBvbkVkaXQ9eyhuYW1lLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgbWNwLnVwZGF0ZShuYW1lLCBjb21tYW5kKVxuICAgICAgICAgIGZsYXNoKGB1cGRhdGVkICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkludmFsaWQ9e2ZsYXNofVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWNwUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlc3VtZVBhbmVsXG4gICAgICAgIHNlc3Npb25zPXtyZXN1bWVTZXNzaW9ucygpfVxuICAgICAgICBzY29wZXM9e3Jlc3VtZVNjb3BlcygpfVxuICAgICAgICBzY29wZUluZGV4PXtyZXN1bWVTY29wZSgpfVxuICAgICAgICBsb2FkaW5nPXtyZXN1bWVMb2FkaW5nKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgY3VycmVudElkPXtzdGF0ZS5zZXNzaW9uPy5pZH1cbiAgICAgICAgb25QaWNrPXsobWV0YSkgPT4ge1xuICAgICAgICAgIGlmIChtZXRhLmhlYWRlci5pZCA9PT0gc3RhdGUuc2Vzc2lvbj8uaWQpIHJldHVybiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgcmVzdW1lU2Vzc2lvbihtZXRhKVxuICAgICAgICB9fVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlU2Vzc2lvbk1ldGF9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93UHJvamVjdFBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFByb2plY3RQYW5lbFxuICAgICAgICBwcm9qZWN0cz17cHJvamVjdHMoKX1cbiAgICAgICAgbG9hZGluZz17cHJvamVjdHNMb2FkaW5nKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrQ2hlY2tvdXQ9eyhjaGVja291dCkgPT4gY2hlY2tvdXQubGF0ZXN0ID8gcmVzdW1lU2Vzc2lvbihjaGVja291dC5sYXRlc3QpIDogY3RsLnN3aXRjaFRvV29ya3RyZWUoY2hlY2tvdXQpLnRoZW4oKCkgPT4gc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSkpfVxuICAgICAgICBvblBpY2tTZXNzaW9uPXtyZXN1bWVTZXNzaW9ufVxuICAgICAgICBvbkFkZFdvcmt0cmVlPXthZGRQcm9qZWN0V29ya3RyZWV9XG4gICAgICAgIG9uRGVsZXRlPXtkZWxldGVQcm9qZWN0Q2hlY2tvdXR9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd0NvbmZpZ1BhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbmZpZ1BhbmVsXG4gICAgICAgIHZhbHVlcz17eyBjbG91ZHM6IGNsb3VkcygpLCBjb21wYWN0VG9vbHM6IGNvbXBhY3RUb29sSGlzdG9yeSgpLCBnaXRTdGF0dXM6IGdpdEZvb3RlcigpLCB3aWRlU2lkZWJhcjogd2lkZVNpZGViYXIoKSwgcmVzZWFyY2hNb2RlbDogYm9vdC5yZXNlYXJjaE1vZGVsLCBzaGVsbE1vZGVsOiBib290LnNoZWxsTW9kZWwsIGRlbGliZXJhdGlvbk1vZGVsOiBib290LmRlbGliZXJhdGlvbk1vZGVsLCBwYXJ0aWNpcGFudEFNb2RlbDogYm9vdC5wYXJ0aWNpcGFudEFNb2RlbCwgcGFydGljaXBhbnRCTW9kZWw6IGJvb3QucGFydGljaXBhbnRCTW9kZWwsIHJlc2VhcmNoQWdlbnRMaW1pdDogcmVzZWFyY2hBZ2VudExpbWl0KCkgfX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblBpY2tTaGVsbE1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUmVzZWFyY2hNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tQYXJ0aWNpcGFudE1vZGVsPXsodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldCh0YXJnZXQpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKHRydWUpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvbkNoYW5nZT17KG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdjbG91ZHMnKSB7XG4gICAgICAgICAgICBzZXRDbG91ZHModmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGFuaW1hdGlvbjogeyBjbG91ZHM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdnaXRTdGF0dXMnKSB7XG4gICAgICAgICAgICBzZXRHaXRGb290ZXIodmFsdWUpXG4gICAgICAgICAgICBib290LmdpdEZvb3RlciA9IHZhbHVlXG4gICAgICAgICAgICBib290LmdpdC5zZXRFbmFibGVkKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGdpdFN0YXR1czogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dpZGVTaWRlYmFyJykge1xuICAgICAgICAgICAgc2V0V2lkZVNpZGViYXIodmFsdWUpXG4gICAgICAgICAgICBib290LndpZGVTaWRlYmFyID0gdmFsdWVcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogd2lkZUxheW91dCA/ICdyb3cnIDogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxLCBiZzogUEFORUxfQkcgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpXG4gICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtQQU5FTF9CR30gZHVyYXRpb249ezE1MDB9IHJldmVyc2U+XG4gICAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgICA6IHR1cm5QaGFzZSgpID09PSAndGhpbmtpbmcnID8gJ1RoaW5raW5nJyA6IHR1cm5QaGFzZSgpID09PSAndG9vbHMnID8gJ1dvcmtpbmcnIDogJ1Jlc3BvbmRpbmcnfVxuICAgICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7ZWxhcHNlZH0gIGVzYyB0byBpbnRlcnJ1cHRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICAge2dpdEluZm8/LmJyYW5jaCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntnaXRJbmZvLmJyYW5jaH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8uYWRkZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57YCske2dpdEluZm8uYWRkZWR9YH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YC0ke2dpdEluZm8ucmVtb3ZlZH1gfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICAgIHt0cmFuc2NyaXB0Lmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZSB2ZXJzaW9uPXt2ZXJzaW9ufSBjbG91ZHM9e2Nsb3VkcygpfSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge2RlbGliZXJhdGlvblZpZXcgJiYgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd1c2VyJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnByb21wdDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyLCBwYWRkaW5nUmlnaHQ6IDQsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX1cbiAgICAgICAgICBmb2N1c2VkPXshZGVsaWJlcmF0aW9uVmlldyAmJiAoZm0uaXMoJ2ZlZWQnKSB8fCBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKX1cbiAgICAgICAgICBmb2xsb3dGb2N1cz17c3RlZXIoKSA/IHN0ZWVyTGlzdEZvY3VzIDogbnVsbH1cbiAgICAgICAgICBmb2N1c1BhZGRpbmc9ezF9XG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgIG9uTWV0cmljcz17KG1ldHJpY3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdHJhbnNjcmlwdE1ldHJpY3MoKVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzPy52aXNpYmxlSGVpZ2h0ID09PSBtZXRyaWNzLnZpc2libGVIZWlnaHQgJiYgcHJldmlvdXM/LmNvbnRlbnRIZWlnaHQgPT09IG1ldHJpY3MuY29udGVudEhlaWdodCkgcmV0dXJuXG4gICAgICAgICAgICBzZXRUcmFuc2NyaXB0TWV0cmljcyhtZXRyaWNzKVxuICAgICAgICAgICAgaWYgKGhpZGRlbkNvdW50ID4gMCAmJiBtZXRyaWNzLnZpc2libGVIZWlnaHQgPiAwICYmIG1ldHJpY3MuY29udGVudEhlaWdodCA8PSBtZXRyaWNzLnZpc2libGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygoc2l6ZSkgPT4gc2l6ZSArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7XG4gICAgICAgICAgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pXG4gICAgICAgICAgLy8gYmFjayBhdCB0aGUgYm90dG9tOiBsb2FkZWQgaGlzdG9yeSBpcyBvZmYtc2NyZWVuLCBzbyByZS1oaWRpbmdcbiAgICAgICAgICAvLyBpdCBpcyBpbnZpc2libGUgYW5kIHJlc3RvcmVzIHRoZSBzbWFsbCByZW5kZXIgd2luZG93XG4gICAgICAgICAgaWYgKG1ldGE/LmF0Qm90dG9tICYmIGhpc3RXaW5kb3coKSA+IEhJU1RPUllfV0lORE9XKSBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwICYmIGhpZGRlbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8ga2VlcCB0aGUgdmlldyBhbmNob3JlZDogZXN0aW1hdGUgdGhlIHJvd3MgdGhlIG5ldyBiYXRjaCBhZGRzXG4gICAgICAgICAgICAvLyBhbmQgc2Nyb2xsIHBhc3QgdGhlbSBzbyB0aGUgY3VycmVudCB0b3AgaXRlbSBzdGF5cyBpbiBwbGFjZVxuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSBNYXRoLm1pbihISVNUT1JZX1dJTkRPVywgd2luZG93ZWQuaGlkZGVuSXRlbXMpXG4gICAgICAgICAgICBjb25zdCBhdmdSb3dzID0gTWF0aC5tYXgoMiwgTWF0aC5yb3VuZCgobWV0YT8ubWF4T2Zmc2V0IHx8IDApIC8gTWF0aC5tYXgoMSwgaXRlbXMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzZXRIaXN0V2luZG93KCh3KSA9PiB3ICsgSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgICBzZXRPZmZzZXQoYWRkZWQgKiBhdmdSb3dzKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE9mZnNldChuZXh0KVxuICAgICAgICB9fVxuICAgICAgICBzY3JvbGxiYXJcbiAgICAgID5cbiAgICAgICAgPENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciB0YXJnZXQ9e2NvbnZlcnNhdGlvblNlYXJjaC5zY3JvbGx9IC8+XG4gICAgICAgIHtoaWRkZW5Db3VudCA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjMwMyAke2hpZGRlbkNvdW50LnRvTG9jYWxlU3RyaW5nKCl9IG9sZGVyICR7aGlkZGVuQ291bnQgPT09IDEgPyAnbWVzc2FnZScgOiAnbWVzc2FnZXMnfSAgc2Nyb2xsIHRvIHRvcCB0byBsb2FkYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZWxpYmVyYXRpb25WaWV3ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RGVsaWJlcmF0aW9uRXhjaGFuZ2UgdHVybnM9e2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKX0gdmVyYm9zZT17dmVyYm9zZSgpfSB3aWRlPXt0ZXJtaW5hbFdpZHRoKCkgPj0gMTEwfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeSgpfSB2aWV3cG9ydEhlaWdodD17dHJhbnNjcmlwdE1ldHJpY3MoKT8udmlzaWJsZUhlaWdodH0gZm9jdXNlZD17Zm0uaXMoJ2ZlZWQnKX0gb25Gb2N1cz17KCkgPT4gZm0uZm9jdXMoJ2ZlZWQnKX0gLz5cbiAgICAgICAgICAgIHtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3VzZXInICYmIGl0ZW0ua2luZCAhPT0gJ2RlbGliZXJhdGlvbi10dXJuJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06dGFpbDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGl9YH0gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZSgpfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBpdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHN0ZWVyKCkgJiYgaXRlbS5tZXNzYWdlSWQgPyAoXG4gICAgICAgICAgPFN0ZWVyTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXtpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZH1cbiAgICAgICAgICAgIGZvY3VzPXtzdGVlckxpc3RGb2N1c31cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgY3VycmVudE1hdGNoPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXT8uaXRlbUluZGV4ID09PSBpID8gY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0gOiBudWxsfVxuICAgICAgICAgICAgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICB7Y29udmVyc2F0aW9uU2VhcmNoLmFjdGl2ZSgpID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hCYXIgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9IG1hdGNoZXM9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXN9IC8+XG4gICAgICAgICkgOiBmbS5pcygnZmVlZCcpICYmICFhbnlQYW5lbCgpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiAnYmxhY2snIH19Pnsnai9rICBcdTIxOTEvXHUyMTkzIHNjcm9sbCAgIGcvRyBlbmRzICAgLyBzZWFyY2ggICBjdHJsLXUvZCBwYWdlJ308L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD59XG5cbiAgICAgIHsoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge2V4cGVkaXRlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BleHBlZGl0ZWQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+eydcdTIxQTAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGFjY2VudCgpIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgYWZ0ZXIgbmV4dCB0b29sICBcdTIxOTEgdG8gZWRpdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtxdWV1ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgcGVuZGluZy0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjAzQSAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgZXhwZWRpdGVkKCkubGVuZ3RoID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgcGVuZGluZyAgXHUyMTkxIGVkaXQgIFx1MjE5MiBzZW5kIGFmdGVyIG5leHQgdG9vbCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb21tYW5kRm9ybSgpICYmIDxDb21tYW5kRm9ybVxuICAgICAgICBuYW1lPXtjb21tYW5kRm9ybSgpLm5hbWV9XG4gICAgICAgIGZpZWxkcz17Y29tbWFuZEZvcm0oKS5maWVsZHN9XG4gICAgICAgIGZpbGVzPXtmaWxlTGlzdCgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uU3VibWl0PXsodmFsdWVzKSA9PiBmaW5pc2hDb21tYW5kKGNvbW1hbmRGb3JtKCksIHZhbHVlcyl9XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7IHNldENvbW1hbmRGb3JtKG51bGwpOyByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsOyBmbS5mb2N1cygnaW5wdXQnKSB9fVxuICAgICAgLz59XG5cbiAgICAgIHtxdWVzdGlvblJlcXVlc3QoKSAmJiAoXG4gICAgICAgIDxRdWVzdGlvbkZvcm1cbiAgICAgICAgICByZXF1ZXN0PXtxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiBmbS5mb2N1cygnaW5wdXQnKX0gc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IHRyYW5zY3JpcHQubGVuZ3RoID09PSAwICYmIGNsb3VkcygpID8gMCA6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfHwgISFxdWVzdGlvblJlcXVlc3QoKSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydcdTI3NkYnfTwvdGV4dD5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgeyhzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSB8fCBkZXJpdmVkKCkudGl0bGUpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlcml2ZWQoKS50aXRsZSA/ICdcdTI0NDIgJyA6ICdcdTI0NDInfTwvdGV4dD59XG4gICAgICAgICAgICB7ZGVyaXZlZCgpLnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGJnOiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCkgPyBhY2NlbnQoKSA6IE1VVEVELCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke2Rlcml2ZWQoKS50aXRsZX0gYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICBjb2xvcj17Rkd9XG4gICAgICAgICAgbGluZUNvdW50ZXJcbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgdmFsdWU9e2lucHV0KCl9XG4gICAgICAgICAgY3Vyc29yT2Zmc2V0PXtpbnB1dEN1cnNvcigpfVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IpXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzKHYsIHtcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHN0YXRlLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBuZXh0SWQ6ICgpID0+ICsrc3RhdGUuaW1hZ2VDb3VudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRJbnB1dChjb252ZXJ0ZWQudGV4dCwgY29udmVydGVkLnRleHQgPT09IHYgPyBpbnB1dEN1cnNvcigpIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRGaWxlSW5kZXgoMClcbiAgICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVzeSgpKSBpbnRlcnJ1cHQoKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGltcGxpY2l0UmV3aW5kVGFyZ2V0KGRlcml2ZWQoKSwgaW5wdXQoKSlcbiAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcGVyZm9ybVJld2luZFRvKHRhcmdldCwgeyBrZXk6ICdjaGF0JyB9KVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TdWJtaXQ9e3NlbmR9XG4gICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5wYXN0ZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdnJykge1xuICAgICAgICAgICAgICByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KGUpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnbycpIHtcbiAgICAgICAgICAgICAgdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGlja0ZpbGUobWF0Y2hlZEZpbGVzW01hdGgubWluKGZpbGVJbmRleCgpLCBtYXRjaGVkRmlsZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0NvbW1hbmRzICYmIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN5Y2xlID0gY21kQ3ljbGUoKVxuICAgICAgICAgICAgICBpZiAoIWN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihjbWRJbmRleCgpLCBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZSh7IG1hdGNoZXM6IG1hdGNoZWRDb21tYW5kcyB9KVxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KHN0YXJ0KVxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBtYXRjaGVkQ29tbWFuZHNbc3RhcnRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQobmV4dC50ZXh0LCBuZXh0LmN1cnNvcilcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKGNtZEluZGV4KCkgKyAxKSAlIGN5Y2xlLm1hdGNoZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgobmV4dClcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIGN5Y2xlLm1hdGNoZXNbbmV4dF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChyZXBsYWNlbWVudC50ZXh0LCByZXBsYWNlbWVudC5jdXJzb3IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3Bhc3RlJyAmJiBlLnRleHQpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBleHRyYWN0SW1hZ2VQYXRocyhlLnRleHQpXG4gICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gcGF0aHMubWFwKChwYXRoKSA9PiBjdGwuYXR0YWNoSW1hZ2UocGF0aCkpXG4gICAgICAgICAgICAgICAgY29uc3QgYXQgPSBlLmN1cnNvciA/PyBlLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldElucHV0KGUudmFsdWUuc2xpY2UoMCwgYXQpICsgcGxhY2Vob2xkZXJzLmpvaW4oJyAnKSArIGUudmFsdWUuc2xpY2UoYXQpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdiYWNrc3BhY2UnICYmIGUuY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IpLm1hdGNoKC9cXFtJbWFnZSAjXFxkK1xcXSQvKVxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjdGwuZGV0YWNoSW1hZ2UobWF0Y2hbMF0pXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvciAtIG1hdGNoWzBdLmxlbmd0aCkgKyBlLnZhbHVlLnNsaWNlKGUuY3Vyc29yKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjdHggPSBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBlLnZhbHVlLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pXG4gICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0Q29tcEluZGV4KDApXG4gICAgICAgICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0Q29tcGxldGlvbihlLnZhbHVlLCBjdHgsIGN0eC5tYXRjaGVzW01hdGgubWluKGNvbXBJbmRleCgpLCBjdHgubWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgfHwgZS5tZXRhIHx8IHNob3dDb21tYW5kcyB8fCBzaG93RmlsZXMpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIGUudmFsdWUgPT09ICcnICYmIChleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgIHNldElucHV0KGN0bC5yZWNhbGxQZW5kaW5nKCkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdyaWdodCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgcXVldWVkKCkubGVuZ3RoID4gMCAmJiBidXN5KCkgJiYgIWNvbXBhY3RpbmcoKSkge1xuICAgICAgICAgICAgICBjdGwuZXhwZWRpdGVRdWV1ZWQoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJvd3NpbmcgPSBoaXN0SWR4KCkgPj0gMFxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIChicm93c2luZyB8fCBlLnZhbHVlID09PSAnJykgJiYgaGlzdElkeCgpIDwgc2VudCgpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSArIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnZG93bicgJiYgYnJvd3NpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSAtIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChuIDwgMCA/ICcnIDogc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9Nb3VzZUZvY3VzUmVnaW9uPn1cblxuICAgICAge3Nob3dDb21wb3NlckFjdGlvbnMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG1hcmdpbkxlZnQ6IDEgfX0+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUNCXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1Q0ZcIlxuICAgICAgICAgICAgYWN0aXZlPXtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGF1ZGlvIChjdHJsLWcpJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZydcbiAgICAgICAgICAgICAgPyB2b2lkIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RvcCgpXG4gICAgICAgICAgICAgIDogcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydCh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCkgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1QTFcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVBMFwiXG4gICAgICAgICAgICBhY3RpdmU9e2NhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZyd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgaW1hZ2UgKGN0cmwtbyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2RpY3RhdGlvbkluZGljYXRvcihkaWN0YXRpb25TdGF0dXMoKSwgZGljdGF0aW9uTGV2ZWxzKCkpfTwvdGV4dD59XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZycgPyAnZXNjIGNhbmNlbCAgZW50ZXIgY29uZmlybScgOiBjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnID8gJyBlc2MgY2FuY2VsJyA6IGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA/IGAgJHtjb21wb3NlckFjdGlvbkxhYmVsKCl9YCA6ICcnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbW1hbmRzICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge21hdGNoZWRDb21tYW5kcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgY29tbWFuZHM8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRDb21tYW5kc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NtZEluZGV4KCl9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDbWRJbmRleH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhjKSA9PiBydW5Db21tYW5kKGMpfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tbWFuZHMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoYywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2AvJHtjLm5hbWV9YC5wYWRFbmQobWF0Y2hlZENvbW1hbmRzLnJlZHVjZSgobSwgeCkgPT4gTWF0aC5tYXgobSwgeC5uYW1lLmxlbmd0aCArIDMpLCAxMikpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBGRyA6IE1VVEVEIH19PntjLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRGaWxlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtmaWxlSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRGaWxlSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17cGlja0ZpbGV9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSl9XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93RmlsZXMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoZiwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Zn08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tcGxldGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17Y29tcEN0eC5tYXRjaGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvbXBJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldENvbXBJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXsoY2FuZGlkYXRlKSA9PiBhY2NlcHRDb21wbGV0aW9uKGlucHV0KCksIGNvbXBDdHgsIGNhbmRpZGF0ZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17ZGlzbWlzc0NvbXBsZXRpb259XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tcGxldGlvbiAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjYW5kaWRhdGUsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2NhbmRpZGF0ZX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cblxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6IHdpZGVMYXlvdXQgPyA2NCA6IHVuZGVmaW5lZCwgaGVpZ2h0OiB3aWRlTGF5b3V0ID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAge3Nob3dNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCl9XG4gICAgICAgICAgY3VycmVudD17bW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtkZWZhdWx0TW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGN0bC5zd2l0Y2hNb2RlbChtKSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGN0bC5zd2l0Y2hNb2RlbChtLCB7IGFzRGVmYXVsdDogdHJ1ZSB9KSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKX1cbiAgICAgICAgICBjdXJyZW50PXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBib290W2Ake3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKX1Nb2RlbGBdIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gYm9vdC5zaGVsbE1vZGVsIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgOiBib290LnJlc2VhcmNoTW9kZWx9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e251bGx9XG4gICAgICAgICAgdGl0bGU9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGBDaG9vc2UgUGFydGljaXBhbnQgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGAgOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyAnQ2hvb3NlIHNoZWxsIG1vZGVsJyA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyAnQ2hvb3NlIHN5bnRoZXNpcyBtb2RlbCcgOiAnQ2hvb3NlIHBhcmFsbGVsIHdvcmtlciBtb2RlbCd9XG4gICAgICAgICAgaGludD1cImVudGVyOiBzYXZlIG1vZGVsICBlc2M6IGNhbmNlbFwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdzZXRQYXJ0aWNpcGFudEFNb2RlbCcgOiAnc2V0UGFydGljaXBhbnRCTW9kZWwnXG4gICAgICAgICAgICAgIGN0bFttZXRob2RdKG0ubmFtZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nU2hlbGxNb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGN0bC5zZXRTaGVsbE1vZGVsKG0ubmFtZSlcbiAgICAgICAgICAgICAgZmxhc2goYHNoZWxsOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgd3JpdGVDb25maWcoeyBtb2RlbHM6IHsgZGVsaWJlcmF0aW9uOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYGRlbGliZXJhdGlvbjogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvb3QucmVzZWFyY2hNb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyByZXNlYXJjaFdvcmtlcjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBwYXJhbGxlbCB3b3JrZXJzOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nUmVzZWFyY2goKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZ0RlY2lzaW9uID0gcGVuZGluZ0RlbGliZXJhdGlvbigpXG4gICAgICAgICAgICBjb25zdCByZXR1cm5UbyA9IHJlc2VhcmNoTW9kZWxSZXR1cm4oKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgICBpZiAocGVuZGluZykgcnVuQ29tbWFuZCh7IG5hbWU6ICdwYXJhbGxlbCcgfSwgcGVuZGluZy50YXNrKVxuICAgICAgICAgICAgZWxzZSBpZiAocGVuZGluZ0RlY2lzaW9uKSBydW5Db21tYW5kKHsgbmFtZTogJ2RlbGliZXJhdGUnIH0sIHBlbmRpbmdEZWNpc2lvbi5kZWNpc2lvbilcbiAgICAgICAgICAgIGVsc2UgaWYgKHJldHVyblRvID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsoKSA9PiB7fX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBpZiAocmVzZWFyY2hNb2RlbFJldHVybigpID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RWZmb3J0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxFZmZvcnRQYW5lbFxuICAgICAgICAgIGxldmVscz17RUZGT1JUX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtlZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17ZGVmYXVsdEVmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0VmZm9ydFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5LCB7IGFzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93VGhlbWVQYW5lbCgpICYmIChcbiAgICAgICAgPFRoZW1lUGFuZWxcbiAgICAgICAgICB0aGVtZXM9e3RoZW1lSXRlbXMoKX1cbiAgICAgICAgICBwcmVmPXt0aGVtZVByZWYoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93VGhlbWVQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHQpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgYXBwbHlUaGVtZVByZWYodC5rZXkpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblByZXZpZXc9eyh0KSA9PiBwcmV2aWV3UGFsZXR0ZSh0LmtleSl9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBwcmV2aWV3UGFsZXR0ZSh0aGVtZVByZWYoKSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dEZWxldGVDb25maXJtKCkgJiYgKFxuICAgICAgICA8Q29uZmlybVBhbmVsXG4gICAgICAgICAgdGl0bGU9XCJEZWxldGUgY3VycmVudCBzZXNzaW9uP1wiXG4gICAgICAgICAgbWVzc2FnZT1cIlRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBhbmQgaXRzIHBlcnNpc3RlZCBoaXN0b3J5IHdpbGwgYmUgcGVybWFuZW50bHkgZGVsZXRlZC5cIlxuICAgICAgICAgIGNvbmZpcm1MYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd0RlbGV0ZUNvbmZpcm0oKX1cbiAgICAgICAgICBvbkNvbmZpcm09e2NvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0hpc3RvcnlQYW5lbCgpICYmIChcbiAgICAgICAgPEhpc3RvcnlQYW5lbFxuICAgICAgICAgIHByb21wdHM9e2hpc3RQcm9tcHRzKCl9XG4gICAgICAgICAgc2NvcGVzPXtISVNUT1JZX1NDT1BFU31cbiAgICAgICAgICBzY29wZUluZGV4PXtoaXN0U2NvcGUoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93SGlzdG9yeVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodGV4dCkgPT4geyBzZXRJbnB1dCh0ZXh0KTsgc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSkgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtpbmZvUGFuZWwoKSAmJiAoXG4gICAgICAgIDxJbmZvTGlzdFBhbmVsXG4gICAgICAgICAgdGl0bGU9e2luZm9QYW5lbCgpLnRpdGxlfVxuICAgICAgICAgIHJvd3M9e2luZm9QYW5lbCgpLnJvd3N9XG4gICAgICAgICAgb3ZlcnZpZXc9e2luZm9QYW5lbCgpLm92ZXJ2aWV3fVxuICAgICAgICAgIGZvY3VzZWQ9e2luZm9QYW5lbCgpICE9PSBudWxsfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEluZm9QYW5lbChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29ubmVjdFBhbmVsKCkgJiYgKFxuICAgICAgICA8Q29ubmVjdFBhbmVsXG4gICAgICAgICAgcHJvdmlkZXJzPXthdXRoUHJvdmlkZXJzKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0Nvbm5lY3RQYW5lbCgpfVxuICAgICAgICAgIG9uQ29ubmVjdD17Y29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uRGlzY29ubmVjdD17ZGlzY29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dXYWtldXBzUGFuZWwoKSAmJiAoXG4gICAgICAgIDxXYWtldXBzUGFuZWxcbiAgICAgICAgICB3YWtldXBzPXsoc2hlbGxzVmVyc2lvbigpLCBib290Lndha2V1cHMubGlzdCgpKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93V2FrZXVwc1BhbmVsKCl9XG4gICAgICAgICAgb25DYW5jZWw9eyh3KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMud2FrZXVwQ2FuY2VsQXJtXG4gICAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSB3LmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSB7IGlkOiB3LmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICAgIHJldHVybiBmbGFzaChgYWdhaW4gdG8gY2FuY2VsIHdha2UtdXAgJHt3LmlkfSAoJHt3Lm5vdGUuc3BsaXQoJ1xcbicpWzBdLnNsaWNlKDAsIDQwKX0pYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0gbnVsbFxuICAgICAgICAgICAgY3RsLmNhbmNlbFdha2V1cCh3KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1dha2V1cHNQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAncGljaycgJiYgKFxuICAgICAgICA8UmV3aW5kUGlja1BhbmVsXG4gICAgICAgICAgZW50cmllcz17Wy4uLnJld2luZEVudHJpZXMoKV0ucmV2ZXJzZSgpfVxuICAgICAgICAgIHN0YXRzPXsoaW5kZXgpID0+IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgaW5kZXgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snfVxuICAgICAgICAgIG9uUGljaz17KGVudHJ5KSA9PiB7IHNldFJld2luZFRhcmdldChlbnRyeSk7IHNldFJld2luZFN0ZXAoJ2FjdGlvbicpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmV3aW5kU3RlcChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nICYmIHJld2luZFRhcmdldCgpICYmIChcbiAgICAgICAgPFJld2luZEFjdGlvblBhbmVsXG4gICAgICAgICAgdGFyZ2V0PXtyZXdpbmRUYXJnZXQoKX1cbiAgICAgICAgICBvcHRpb25zPXtyZXdpbmRPcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbid9XG4gICAgICAgICAgb25TdWJtaXQ9e3BlcmZvcm1SZXdpbmR9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiBzZXRSZXdpbmRTdGVwKCdwaWNrJyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhY3Rpdml0eS1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2hlbGxBY3Rpb25IaW50ID8gYCR7c2hlbGxBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGx9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdzaGVsbC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaGVsbFdpbmRvdy5tYXAoKHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBzaGVsbC0ke3MuaWR9YFxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3ZWRTaGVsbElkKCkgPT09IHMuaWRcbiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBhZ2VudEVsYXBzZWQoeyBzdGFydGVkQXQ6IHMuc3RhcnRlZEF0LCBlbmRlZEF0OiBzLmVuZGVkQXQgfSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YHNoZWxsLSR7cy5pZH1gfSBzZWxlY3RlZD17c2VsZWN0ZWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYHNoZWxsLSR7cy5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChzLmlkKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzLmV4aXRDb2RlID09PSAwID8gR1JFRU4gOiBSRUQgfX0+e3MuZXhpdENvZGUgPT09IDAgPyAnXHUyNUNGJyA6ICdcdTAwRDcnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBGRyA6IE1VVEVEIH19Pntgc2hlbGwgWyR7cy5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e3MuZGVzY3JpcHRpb24gfHwgcy5jb21tYW5kLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJycgOiBgZXhpdCAke3MuZXhpdENvZGV9ICBgfSR7ZWxhcHNlZH1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IFNIRUxMX1NUUklQX01BWCAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7c2hlbGxXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7c2hlbGxXaW5kb3dTdGFydH1gIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCAmJiBzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyAnICAnIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZVNoZWxscy5sZW5ndGggLSBzaGVsbFdpbmRvd1N0YXJ0IC0gc2hlbGxXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHthZ2VudEFjdGlvbkhpbnQgPyBgJHthZ2VudEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FnZW50LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthZ2VudFdpbmRvdy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGFnZW50U3RhdHVzKGEpXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgYWdlbnQtJHthLmlkfWBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YGFnZW50LSR7YS5pZH1gfSBzZWxlY3RlZD17dmlld2VkQWdlbnRJZCgpID09PSBhLmlkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBhZ2VudC0ke2EuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQoYS5pZCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgICAge2Euc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57c3RhdHVzLmljb259PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiB2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWQgPyBGRyA6IE1VVEVEIH19PntgJHthLnJvbGUgfHwgJ2FnZW50J30gWyR7YS5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2EuZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIHtzdGF0dXMubGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntgICAke3N0YXR1cy5sYWJlbH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2Ake3N0YXR1cy5sYWJlbCA/ICcgICcgOiAnICAnfSAke2FnZW50RWxhcHNlZChhKX0gIFx1MjE5MyBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17YS51c2FnZT8udG90YWxUb2tlbnMgfHwgYS51c2FnZT8ucHJvbXB0VG9rZW5zIHx8IDB9IGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEfSBoaWdobGlnaHQ9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IHRva2Vuc2B9IC8+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiBBR0VOVF9TVFJJUF9NQVggJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHtlZmZvcnRBcHBsaWVzKCkgJiYgZWZmb3J0KCkgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydFZmZvcnQgICAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57ZWZmb3J0KCl9PC90ZXh0PjwvYm94Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnSW5wdXQgdG9rZW5zICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e01hdGgucm91bmQodXNhZ2UucHJvbXB0VG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnT3V0cHV0IHRva2VucyAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e01hdGgucm91bmQodXNhZ2UuY29tcGxldGlvblRva2VucykudG9Mb2NhbGVTdHJpbmcoKX08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICB7dXNhZ2UudGhvdWdodFRva2VucyA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydUaG91Z2h0IHRva2VucyAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e0ZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IE1hdGgucm91bmQobikudG9Mb2NhbGVTdHJpbmcoKX0gLz48L2JveD59XG4gICAgICAgICAgICB7Y29udGV4dFBlcmNlbnQgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ29udGV4dCB1c2VkICAgJ308L3RleHQ+PEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBGR19TT0ZUfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtNYXRoLnJvdW5kKG4pfSVgfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydXYWtlLXVwcyAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57cGVuZGluZ1dha2V1cHN9PC90ZXh0PjwvYm94Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgIHtlZmZvcnRBcHBsaWVzKCkgJiYgZWZmb3J0KCkgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntlZmZvcnQoKX08L3RleHQ+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIzRjAgJHtwZW5kaW5nV2FrZXVwc31gfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UucHJvbXB0VG9rZW5zKX0gXHUyMTkzYH08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UuY29tcGxldGlvblRva2Vucyl9IFx1MjE5MWB9PC90ZXh0PlxuICAgICAgICAgICAge3VzYWdlLnRob3VnaHRUb2tlbnMgPiAwICYmIDxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17TVVURUR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IFx1MjVDOGB9IC8+fVxuICAgICAgICAgICAge2NvbnRleHRQZXJjZW50ID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IE1VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBiYWNrZ3JvdW5kPXtQQU5FTF9CR30gZm9ybWF0PXtjb250ZXh0QmFyfSAvPn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICA8RGljdGF0aW9uS2V5cyBpbnB1dD17cmVmcy5kaWN0YXRpb25JbnB1dH0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjb21tYW5kQXQodGV4dCwgY3Vyc29yID0gdGV4dC5sZW5ndGgpIHtcbiAgY29uc3QgbWF0Y2ggPSB0ZXh0LnNsaWNlKDAsIGN1cnNvcikubWF0Y2goLyhefFtcXHMoXSlcXC8oW0EtWmEtejAtOV8tXSopJC8pXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsXG4gIGNvbnN0IHN0YXJ0ID0gY3Vyc29yIC0gbWF0Y2hbMl0ubGVuZ3RoIC0gMVxuICBjb25zdCBzdWZmaXggPSB0ZXh0LnNsaWNlKGN1cnNvcikubWF0Y2goL15bQS1aYS16MC05Xy1dKi8pWzBdXG4gIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGN1cnNvciArIHN1ZmZpeC5sZW5ndGgsIHF1ZXJ5OiBtYXRjaFsyXSB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ29tbWFuZCh0ZXh0LCByYW5nZSwgYm9keSkge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHRleHQuc2xpY2UoMCwgcmFuZ2Uuc3RhcnQpICsgYm9keSArIHRleHQuc2xpY2UocmFuZ2UuZW5kKSxcbiAgICBjdXJzb3I6IHJhbmdlLnN0YXJ0ICsgYm9keS5sZW5ndGgsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRGaWVsZHMoY29tbWFuZCwgYm9keSwgYXJncyA9ICcnKSB7XG4gIGNvbnN0IGZpZWxkcyA9IFsuLi4oY29tbWFuZC5hcmd1bWVudHMgPz8gW10pXVxuICBpZiAoYm9keS5pbmNsdWRlcygnJEFSR1VNRU5UUycpICYmICFhcmdzKSB7XG4gICAgZmllbGRzLnB1c2goeyBuYW1lOiAnJGFyZ3MnLCBsYWJlbDogJ0FyZ3VtZW50cycsIHR5cGU6ICd0ZXh0JyB9KVxuICB9XG4gIHJldHVybiBmaWVsZHNcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRBcmVhLCBNZW51LCBCdXR0b24sIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgZnV6enlTY29yZSwgcmFua0Z1enp5IH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBDb21tYW5kRm9ybSh7IG5hbWUsIGZpZWxkcywgZmlsZXMsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgZmllbGQgPSBmaWVsZHNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gZmllbGQudHlwZSA9PT0gJ2Nob2ljZScgPyBmaWVsZC5jaG9pY2VzIDogZmllbGQudHlwZSA9PT0gJ3BhdGgnID8gZmlsZXMgOiBbXVxuICBjb25zdCBtYXRjaGVzID0gcmFua0Z1enp5KG9wdGlvbnMsIHF1ZXJ5KCksIChxLCB2YWx1ZSkgPT4gZnV6enlTY29yZShxLCB2YWx1ZSkpXG5cbiAgZnVuY3Rpb24gYWR2YW5jZSh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLnZhbHVlcygpLCBbZmllbGQubmFtZV06IHZhbHVlIH1cbiAgICBzZXRWYWx1ZXMobmV4dClcbiAgICBpZiAoc3RlcCgpID09PSBmaWVsZHMubGVuZ3RoIC0gMSkgcmV0dXJuIG9uU3VibWl0KG5leHQpXG4gICAgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldFNlbGVjdGVkKDApXG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZ2FwOiAyIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e2AvJHtuYW1lfWB9PC90ZXh0PlxuICAgICAgICB7ZmllbGRzLnNsaWNlKDAsIHN0ZXAoKSkubWFwKChpdGVtKSA9PiA8dGV4dCBrZXk9e2l0ZW0ubmFtZX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt2YWx1ZXMoKVtpdGVtLm5hbWVdfTwvdGV4dD4pfVxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiQ2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57ZmllbGQubGFiZWx9PC90ZXh0PlxuICAgICAgPFRleHRBcmVhXG4gICAgICAgIGtleT17ZmllbGQubmFtZX1cbiAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgdmFsdWU9e3F1ZXJ5KCl9XG4gICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgIG1heEhlaWdodD17MX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e2ZpZWxkLmxhYmVsfVxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+IHsgc2V0UXVlcnkodmFsdWUpOyBzZXRTZWxlY3RlZCgwKSB9fVxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIGFkdmFuY2UobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICB9IGVsc2UgYWR2YW5jZShmaWVsZC50eXBlID09PSAncGF0aCcgJiYgbWF0Y2hlcy5sZW5ndGggJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJy8nKSAmJiAhdmFsdWUuc3RhcnRzV2l0aCgnficpID8gbWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSA6IHZhbHVlKVxuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdkb3duJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5taW4oc2VsZWN0ZWQoKSArIDEsIG1hdGNoZXMubGVuZ3RoIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChNYXRoLm1heCgwLCBzZWxlY3RlZCgpIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0UXVlcnkobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIHttYXRjaGVzLmxlbmd0aCA+IDAgJiYgPE1lbnVcbiAgICAgICAgaXRlbXM9e21hdGNoZXN9XG4gICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZCgpfVxuICAgICAgICBvblNlbGVjdD17c2V0U2VsZWN0ZWR9XG4gICAgICAgIG9uU3VibWl0PXthZHZhbmNlfVxuICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgcmVuZGVySXRlbT17KHZhbHVlLCB7IGFjdGl2ZSB9KSA9PiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YCR7YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ30ke3ZhbHVlfWB9PC90ZXh0Pn1cbiAgICAgIC8+fVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5jb25zdCBQQUxFVFRFUyA9IHtcbiAgZGFyazoge1xuICAgIGRlc2M6ICdsaWdodCB0ZXh0IGZvciBkYXJrIHRlcm1pbmFscycsXG4gICAgYWNjZW50OiAnI2Y4NzE3MScsXG4gICAgZmc6ICcjZTVlN2ViJyxcbiAgICBmZ1NvZnQ6ICcjOWNhM2FmJyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjMWUxZTIyJyxcbiAgICBzZWxlY3RCZzogJyMzNzQxNTEnLFxuICAgIHJlZDogJyNmODcxNzEnLFxuICAgIGdyZWVuOiAnIzRhZGU4MCcsXG4gICAgcGVlcjogJyNjNGI1ZmQnLFxuICAgIGhpZ2hsaWdodDogJyNmZmZmZmYnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG4gIGxpZ2h0OiB7XG4gICAgZGVzYzogJ2RhcmsgdGV4dCBmb3IgbGlnaHQgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZGMyNjI2JyxcbiAgICBmZzogJyMxZjI0MzAnLFxuICAgIGZnU29mdDogJyM0YjU1NjMnLFxuICAgIG11dGVkOiAnIzRiNTU2MycsXG4gICAgcGFuZWxCZzogJyNlOWU5ZWUnLFxuICAgIHNlbGVjdEJnOiAnI2Q0ZDRkYycsXG4gICAgcmVkOiAnI2RjMjYyNicsXG4gICAgZ3JlZW46ICcjMTZhMzRhJyxcbiAgICBwZWVyOiAnIzZkMjhkOScsXG4gICAgaGlnaGxpZ2h0OiAnIzExMTgyNycsXG4gICAgc2hpa2k6ICdnaXRodWItbGlnaHQnLFxuICB9LFxuICBub3JkOiB7XG4gICAgZGVzYzogJ2FyY3RpYyBibHVlcyBvbiBwb2xhciBuaWdodCcsXG4gICAgYWNjZW50OiAnIzg4YzBkMCcsXG4gICAgZmc6ICcjZDhkZWU5JyxcbiAgICBmZ1NvZnQ6ICcjYWFiMmM0JyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjM2I0MjUyJyxcbiAgICBzZWxlY3RCZzogJyM0MzRjNWUnLFxuICAgIHJlZDogJyNiZjYxNmEnLFxuICAgIGdyZWVuOiAnI2EzYmU4YycsXG4gICAgcGVlcjogJyNkOGI0ZmUnLFxuICAgIGhpZ2hsaWdodDogJyNlY2VmZjQnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG59XG5cbmV4cG9ydCBsZXQgREVGQVVMVF9BQ0NFTlQgPSBQQUxFVFRFUy5kYXJrLmFjY2VudFxuZXhwb3J0IGxldCBGRyA9IFBBTEVUVEVTLmRhcmsuZmdcbmV4cG9ydCBsZXQgRkdfU09GVCA9IFBBTEVUVEVTLmRhcmsuZmdTb2Z0XG5leHBvcnQgbGV0IE1VVEVEID0gUEFMRVRURVMuZGFyay5tdXRlZFxuZXhwb3J0IGxldCBQQU5FTF9CRyA9IFBBTEVUVEVTLmRhcmsucGFuZWxCZ1xuZXhwb3J0IGxldCBTRUxFQ1RfQkcgPSBQQUxFVFRFUy5kYXJrLnNlbGVjdEJnXG5leHBvcnQgbGV0IFJFRCA9IFBBTEVUVEVTLmRhcmsucmVkXG5leHBvcnQgbGV0IEdSRUVOID0gUEFMRVRURVMuZGFyay5ncmVlblxuZXhwb3J0IGxldCBQRUVSID0gUEFMRVRURVMuZGFyay5wZWVyXG5leHBvcnQgbGV0IEhJR0hMSUdIVCA9IFBBTEVUVEVTLmRhcmsuaGlnaGxpZ2h0XG5cbmxldCBjdXJyZW50UGFsZXR0ZSA9ICdkYXJrJ1xubGV0IGV4cGxpY2l0QWNjZW50ID0gbnVsbFxuXG5jb25zdCBbYWNjZW50VmFsdWUsIHNldEFjY2VudFZhbHVlXSA9IGNyZWF0ZVNpZ25hbChERUZBVUxUX0FDQ0VOVClcblxuZXhwb3J0IGNvbnN0IGFjY2VudCA9IGFjY2VudFZhbHVlXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY2NlbnQoY29sb3IpIHtcbiAgZXhwbGljaXRBY2NlbnQgPSBjb2xvciB8fCBudWxsXG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IERFRkFVTFRfQUNDRU5UKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFsZXR0ZShuYW1lKSB7XG4gIGN1cnJlbnRQYWxldHRlID0gUEFMRVRURVNbbmFtZV0gPyBuYW1lIDogJ2RhcmsnXG4gIGNvbnN0IHAgPSBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV1cbiAgREVGQVVMVF9BQ0NFTlQgPSBwLmFjY2VudFxuICBGRyA9IHAuZmdcbiAgRkdfU09GVCA9IHAuZmdTb2Z0XG4gIE1VVEVEID0gcC5tdXRlZFxuICBQQU5FTF9CRyA9IHAucGFuZWxCZ1xuICBTRUxFQ1RfQkcgPSBwLnNlbGVjdEJnXG4gIFJFRCA9IHAucmVkXG4gIEdSRUVOID0gcC5ncmVlblxuICBQRUVSID0gcC5wZWVyXG4gIEhJR0hMSUdIVCA9IHAuaGlnaGxpZ2h0XG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IHAuYWNjZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZU5hbWUoKSB7XG4gIHJldHVybiBjdXJyZW50UGFsZXR0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZUxpc3QoKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhQQUxFVFRFUykubWFwKChba2V5LCBwXSkgPT4gKHsga2V5LCBkZXNjOiBwLmRlc2MgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlraVRoZW1lKCkge1xuICByZXR1cm4gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdLnNoaWtpXG59XG4iLCAiY29uc3QgZmlsbGVyID0gLyg/PCFbXlxccyw7OiE/XSkoPzp1aHx1bSkoPz0kfFtcXHMsOzouIT9dKShbIFxcdF0qWyw7Oi4hP10qKVsgXFx0XSovZ2l1XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRpY3RhdGlvbih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoY2xlYW5MaW5lKS5qb2luKCdcXG4nKS50cmltKClcbn1cblxuZnVuY3Rpb24gY2xlYW5MaW5lKGxpbmUpIHtcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBvZmZzZXQgPSAwXG4gIGxldCBjYXBpdGFsaXplID0gZmFsc2VcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBsaW5lLm1hdGNoQWxsKGZpbGxlcikpIHtcbiAgICBsZXQgYmVmb3JlID0gbGluZS5zbGljZShvZmZzZXQsIG1hdGNoLmluZGV4KVxuICAgIGlmIChjYXBpdGFsaXplKSBiZWZvcmUgPSB1cHBlckZpcnN0KGJlZm9yZSlcbiAgICByZXN1bHQgKz0gYmVmb3JlXG4gICAgY29uc3QgYWZ0ZXIgPSBsaW5lLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgIGNvbnN0IHRlcm1pbmFsID0gbWF0Y2hbMV0ubWF0Y2goL1suIT9dKy8pPy5bMF0gPz8gJydcbiAgICByZXN1bHQgPSByZXN1bHQudHJpbUVuZCgpXG4gICAgY29uc3Qgc2VudGVuY2VTdGFydCA9ICFyZXN1bHQgfHwgL1suIT9dJC8udGVzdChyZXN1bHQpXG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLywkLywgJycpXG4gICAgaWYgKCFhZnRlcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1s7Ol0kLywgJycpXG4gICAgaWYgKHRlcm1pbmFsICYmICFzZW50ZW5jZVN0YXJ0KSByZXN1bHQgKz0gdGVybWluYWxcbiAgICBjYXBpdGFsaXplID0gc2VudGVuY2VTdGFydCB8fCBCb29sZWFuKHRlcm1pbmFsKVxuICAgIGlmIChyZXN1bHQgJiYgYWZ0ZXIpIHJlc3VsdCArPSAnICdcbiAgICBvZmZzZXQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICB9XG4gIGNvbnN0IHRhaWwgPSBsaW5lLnNsaWNlKG9mZnNldClcbiAgcmV0dXJuIHJlc3VsdCArIChjYXBpdGFsaXplID8gdXBwZXJGaXJzdCh0YWlsKSA6IHRhaWwpXG59XG5cbmZ1bmN0aW9uIHVwcGVyRmlyc3QodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9eKFxccyopKFxccHtMbH0pKD8hXFxwe0x1fSkvdSwgKF8sIHNwYWNlLCBsZXR0ZXIpID0+IHNwYWNlICsgbGV0dGVyLnRvVXBwZXJDYXNlKCkpXG59XG5cbiIsICJpbXBvcnQgeyBjbGVhbkRpY3RhdGlvbiB9IGZyb20gJy4vZGljdGF0aW9uLXRleHQuanMnXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGljdGF0aW9uSGVscGVyUGF0aCgpIHtcbiAgY29uc3QgYnVuZGxlZCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxuICByZXR1cm4gZXhpc3RzU3luYyhidW5kbGVkKSA/IGJ1bmRsZWQgOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL2hlbHBlci8uYnVpbGQvcmVsZWFzZS9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uKHsgb25TdGF0dXMgPSAoKSA9PiB7fSwgb25MZXZlbCA9ICgpID0+IHt9LCBvbkVycm9yID0gKCkgPT4ge30sIHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgYXJjaCA9IHByb2Nlc3MuYXJjaCwgbGF1bmNoID0gKCkgPT4gc3Bhd24oZGljdGF0aW9uSGVscGVyUGF0aCgpLCBbXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pLCBsb2FkaW5nVGltZW91dCA9IDYwMDAwMCwgcmVxdWVzdFRpbWVvdXQgPSA0NTAwMCB9ID0ge30pIHtcbiAgbGV0IGNoaWxkID0gbnVsbFxuICBsZXQgc3RhdHVzID0gJ2lkbGUnXG4gIGxldCBzZXF1ZW5jZSA9IDBcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG4gIGxldCByZWFkeSA9IG51bGxcbiAgbGV0IGRpc3Bvc2VkID0gZmFsc2VcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXR1cyh2YWx1ZSkge1xuICAgIHN0YXR1cyA9IHZhbHVlXG4gICAgb25TdGF0dXModmFsdWUpXG4gIH1cblxuICBmdW5jdGlvbiByZXNldChlcnJvciA9IG5ldyBFcnJvcignZGljdGF0aW9uIGNhbmNlbGxlZCcpKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjaGlsZFxuICAgIGNoaWxkID0gbnVsbFxuICAgIHJlYWR5ID0gbnVsbFxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGVuZGluZy52YWx1ZXMoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgICAgZW50cnkucmVqZWN0KGVycm9yKVxuICAgIH1cbiAgICBwZW5kaW5nLmNsZWFyKClcbiAgICBwcmV2aW91cz8uc3RkaW4uZW5kKClcbiAgICBwcmV2aW91cz8ua2lsbCgpXG4gICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhaXRGb3IoaWQsIHRpbWVvdXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc2V0KG5ldyBFcnJvcignZGljdGF0aW9uIHRpbWVkIG91dCcpKSwgdGltZW91dClcbiAgICAgIHBlbmRpbmcuc2V0KGlkLCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGlkLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZW50cnkgPSBwZW5kaW5nLmdldChpZClcbiAgICBpZiAoIWVudHJ5KSByZXR1cm5cbiAgICBwZW5kaW5nLmRlbGV0ZShpZClcbiAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgaWYgKG1lc3NhZ2UuZXJyb3IpIGVudHJ5LnJlamVjdChuZXcgRXJyb3IobWVzc2FnZS5lcnJvcikpXG4gICAgZWxzZSBlbnRyeS5yZXNvbHZlKG1lc3NhZ2UpXG4gIH1cblxuICBmdW5jdGlvbiBsb2FkKCkge1xuICAgIGlmIChyZWFkeSkgcmV0dXJuIHJlYWR5XG4gICAgaWYgKHBsYXRmb3JtICE9PSAnZGFyd2luJyB8fCBhcmNoICE9PSAnYXJtNjQnKSB0aHJvdyBuZXcgRXJyb3IoJ2RpY3RhdGlvbiByZXF1aXJlcyBhbiBBcHBsZSBTaWxpY29uIE1hYycpXG4gICAgY29uc3QgaW5zdGFuY2UgPSBsYXVuY2goKVxuICAgIGNoaWxkID0gaW5zdGFuY2VcbiAgICByZWFkeSA9IHdhaXRGb3IoJ3JlYWR5JywgbG9hZGluZ1RpbWVvdXQpXG4gICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgaW5zdGFuY2Uuc3Rkb3V0Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDEwMjQgKiAxMDI0KSByZXR1cm4gcmVzZXQobmV3IEVycm9yKCdpbnZhbGlkIGRpY3RhdGlvbiBoZWxwZXIgb3V0cHV0JykpXG4gICAgICBsZXQgYXRcbiAgICAgIHdoaWxlICgoYXQgPSBidWZmZXIuaW5kZXhPZignXFxuJykpID49IDApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBhdClcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF0ICsgMSlcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgdHJ5IHsgbWVzc2FnZSA9IEpTT04ucGFyc2UobGluZSkgfSBjYXRjaCB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnbGV2ZWwnKSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3JlY29yZGluZycgJiYgTnVtYmVyLmlzRmluaXRlKG1lc3NhZ2UubGV2ZWwpKSBvbkxldmVsKE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG1lc3NhZ2UubGV2ZWwpKSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ3JlYWR5Jykgc2V0dGxlKCdyZWFkeScsIG1lc3NhZ2UpXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5tZXNzYWdlIHx8ICdkaWN0YXRpb24gZmFpbGVkJylcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgICAgaWYgKCFhY3RpdmUpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkICE9IG51bGwpIHNldHRsZShtZXNzYWdlLmlkLCBtZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gICAgaW5zdGFuY2Uuc3RkZXJyLm9uKCdkYXRhJywgKCkgPT4ge30pXG4gICAgY29uc3QgZmFpbGVkID0gKGVycm9yKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgIGNvbnN0IHJlY29yZGluZyA9IHN0YXR1cyA9PT0gJ3JlY29yZGluZydcbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgaWYgKCFhY3RpdmUgJiYgcmVjb3JkaW5nKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICAgIGluc3RhbmNlLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbGVkKG5ldyBFcnJvcihgZGljdGF0aW9uIGhlbHBlciB1bmF2YWlsYWJsZTogJHtlcnJvci5tZXNzYWdlfWApKSlcbiAgICBpbnN0YW5jZS5zdGRpbi5vbignZXJyb3InLCBmYWlsZWQpXG4gICAgaW5zdGFuY2Uub24oJ2V4aXQnLCAoKSA9PiBmYWlsZWQobmV3IEVycm9yKCdkaWN0YXRpb24gaGVscGVyIGV4aXRlZCcpKSlcbiAgICByZXR1cm4gcmVhZHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3Qob3ApIHtcbiAgICBjb25zdCBpZCA9ICsrc2VxdWVuY2VcbiAgICBjb25zdCByZXN1bHQgPSB3YWl0Rm9yKGlkLCByZXF1ZXN0VGltZW91dClcbiAgICB0cnkgeyBjaGlsZC5zdGRpbi53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGlkLCBvcCB9KX1cXG5gKSB9IGNhdGNoIChlcnJvcikgeyByZXNldChlcnJvcikgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZWxvYWQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSByZXR1cm5cbiAgICB0cnkgeyBhd2FpdCBsb2FkKCkgfSBjYXRjaCB7fVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkIHx8IHN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygnbG9hZGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHNldFN0YXR1cygnc3RhcnRpbmcnKVxuICAgICAgYXdhaXQgcmVxdWVzdCgnc3RhcnQnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ3JlY29yZGluZycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygndHJhbnNjcmliaW5nJylcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdCgnc3RvcCcpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVybiBudWxsXG4gICAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgICAgcmV0dXJuIGNsZWFuRGljdGF0aW9uKHJlc3VsdC50ZXh0IHx8ICcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHtcbiAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm5cbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIHJlc2V0KClcbiAgICBzZXRTdGF0dXMoJ2NhbmNlbGxpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZXF1ZXN0KCdjYW5jZWwnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHJlc2V0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gICAgKytnZW5lcmF0aW9uXG4gICAgcmVzZXQoKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJlbG9hZCwgc3RhcnQsIHN0b3AsIGNhbmNlbCwgZGlzcG9zZSwgZ2V0IHN0YXR1cygpIHsgcmV0dXJuIHN0YXR1cyB9IH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB7IG1rZHRlbXAsIHdyaXRlRmlsZSwgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5jb25zdCBleGVjdXRlID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKVxuY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgU2V0KClcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyZWN0b3JpZXMpIHJtU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufSlcblxuY29uc3QgbWFjU2NyaXB0ID0gYE9iakMuaW1wb3J0KCdBcHBLaXQnKTsgT2JqQy5pbXBvcnQoJ0ZvdW5kYXRpb24nKTtcbmNvbnN0IHBhc3RlYm9hcmQgPSAkLk5TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZDtcbmNvbnN0IGZpbGVzID0gcGFzdGVib2FyZC5wcm9wZXJ0eUxpc3RGb3JUeXBlKCdOU0ZpbGVuYW1lc1Bib2FyZFR5cGUnKTtcbmxldCBpbWFnZSA9IG51bGw7XG5pZiAoIWZpbGVzLmlzTmlsKCkgJiYgZmlsZXMuY291bnQgPiAwKSB7XG4gIGNvbnN0IHBhdGggPSBPYmpDLnVud3JhcChmaWxlcy5vYmplY3RBdEluZGV4KDApKTtcbiAgaWYgKC9cXFxcLihwbmd8anBlP2d8Z2lmfHdlYnApJC9pLnRlc3QocGF0aCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoQ29udGVudHNPZkZpbGUocGF0aCk7XG59XG5pZiAoIWltYWdlIHx8IGltYWdlLmlzTmlsKCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTtcbmxldCBkYXRhID0gbnVsbDtcbmlmICghaW1hZ2UuaXNOaWwoKSkge1xuICBjb25zdCBiaXRtYXAgPSAkLk5TQml0bWFwSW1hZ2VSZXAuaW1hZ2VSZXBXaXRoRGF0YShpbWFnZS5USUZGUmVwcmVzZW50YXRpb24pO1xuICBkYXRhID0gYml0bWFwLnJlcHJlc2VudGF0aW9uVXNpbmdUeXBlUHJvcGVydGllcygkLk5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORywgJCh7fSkpO1xufVxuZGF0YSA/IE9iakMudW53cmFwKGRhdGEuYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zKDApKSA6ICcnYFxuXG5jb25zdCB3aW5kb3dzU2NyaXB0ID0gYEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLldpbmRvd3MuRm9ybXM7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLkRyYXdpbmc7XG5pZiAoW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkNvbnRhaW5zSW1hZ2UoKSkge1xuICAkaW1hZ2UgPSBbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6R2V0SW1hZ2UoKTtcbiAgJHN0cmVhbSA9IE5ldy1PYmplY3QgU3lzdGVtLklPLk1lbW9yeVN0cmVhbTtcbiAgdHJ5IHsgJGltYWdlLlNhdmUoJHN0cmVhbSwgW1N5c3RlbS5EcmF3aW5nLkltYWdpbmcuSW1hZ2VGb3JtYXRdOjpQbmcpOyBbQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRzdHJlYW0uVG9BcnJheSgpKSB9XG4gIGZpbmFsbHkgeyAkc3RyZWFtLkRpc3Bvc2UoKTsgJGltYWdlLkRpc3Bvc2UoKSB9XG59YFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENsaXBib2FyZEltYWdlKHsgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBlbnYgPSBwcm9jZXNzLmVudiwgcnVuID0gZXhlY3V0ZSB9ID0ge30pIHtcbiAgaWYgKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX1RUWSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bmF2YWlsYWJsZSBvdmVyIFNTSCcpXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGVuY29kaW5nOiAnYnVmZmVyJywgdGltZW91dDogMTAwMDAsIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCB9XG4gIGxldCBkYXRhXG4gIHRyeSB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bignb3Nhc2NyaXB0JywgWyctbCcsICdKYXZhU2NyaXB0JywgJy1lJywgbWFjU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ3Bvd2Vyc2hlbGwuZXhlJywgWyctTm9Qcm9maWxlJywgJy1Ob25JbnRlcmFjdGl2ZScsICctU1RBJywgJy1Db21tYW5kJywgd2luZG93c1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICBjb25zdCB3YXlsYW5kID0gQm9vbGVhbihlbnYuV0FZTEFORF9ESVNQTEFZKVxuICAgICAgY29uc3QgY29tbWFuZCA9IHdheWxhbmQgPyAnd2wtcGFzdGUnIDogJ3hjbGlwJ1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHR5cGVzIH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS1saXN0LXR5cGVzJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ1RBUkdFVFMnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGlmICghdHlwZXMudG9TdHJpbmcoKS5zcGxpdCgvXFxzKy8pLmluY2x1ZGVzKCdpbWFnZS9wbmcnKSkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS10eXBlJywgJ2ltYWdlL3BuZycsICctLW5vLW5ld2xpbmUnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnaW1hZ2UvcG5nJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0nKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIHJlYWRlciB1bmF2YWlsYWJsZTogaW5zdGFsbCAnICsgKGVudi5XQVlMQU5EX0RJU1BMQVkgPyAnd2wtY2xpcGJvYXJkJyA6IHBsYXRmb3JtID09PSAnbGludXgnID8gJ3hjbGlwJyA6ICd0aGUgc3lzdGVtIGNsaXBib2FyZCB0b29scycpKVxuICAgIHRocm93IGVycm9yXG4gIH1cbiAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgaWYgKCFkYXRhLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgZGlkIG5vdCByZXR1cm4gYSBQTkcgaW1hZ2UnKVxuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNsaXBib2FyZC0nKSlcbiAgZGlyZWN0b3JpZXMuYWRkKGRpcilcbiAgY29uc3QgZGlzcG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIGRpcmVjdG9yaWVzLmRlbGV0ZShkaXIpXG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4oZGlyLCAnY2xpcGJvYXJkLnBuZycpXG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGRhdGEsIHsgbW9kZTogMG82MDAgfSlcbiAgICByZXR1cm4geyBwYXRoLCBkaXNwb3NlIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBkaXNwb3NlKClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsaXBib2FyZElucHV0KHsgcmVhZEltYWdlLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yIH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcGFzdGVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcmVhZEltYWdlKClcbiAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgb25FcnJvcignTm8gaW1hZ2Ugb24gdGhlIGNsaXBib2FyZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ0NsaXBib2FyZCBpbWFnZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYENsaXBib2FyZCBwYXN0ZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb24sIGdldElucHV0LCBzZXRJbnB1dCB9KSB7XG4gIGxldCBkcmFmdCA9IG51bGxcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG5cbiAgZnVuY3Rpb24gc3RhcnQoeyB2YWx1ZSwgY3Vyc29yIH0pIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBkcmFmdCA9IHsgdmFsdWUsIGN1cnNvciB9XG4gICAgKytnZW5lcmF0aW9uXG4gICAgdm9pZCBkaWN0YXRpb24uc3RhcnQoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBjb25zdCB0YXJnZXQgPSBkcmFmdFxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkaWN0YXRpb24uc3RvcCgpXG4gICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uIHx8ICF0YXJnZXQgfHwgdGV4dCA9PSBudWxsIHx8IGdldElucHV0KCkgIT09IHRhcmdldC52YWx1ZSkgcmV0dXJuXG4gICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgbGVhZCA9IHRleHQgJiYgYmVmb3JlICYmICEvXFxzJC8udGVzdChiZWZvcmUpICYmICEvXlxccy8udGVzdCh0ZXh0KSA/ICcgJyA6ICcnXG4gICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCB0cmFpbCA9IHRleHQgJiYgYWZ0ZXIgJiYgIS9cXHMkLy50ZXN0KHRleHQpICYmICEvXltcXHMuLDs6IT9dLy50ZXN0KGFmdGVyKSA/ICcgJyA6ICcnXG4gICAgc2V0SW5wdXQoYmVmb3JlICsgbGVhZCArIHRleHQgKyB0cmFpbCArIGFmdGVyKVxuICAgIGRyYWZ0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICsrZ2VuZXJhdGlvblxuICAgIGRyYWZ0ID0gbnVsbFxuICAgIHZvaWQgZGljdGF0aW9uLmNhbmNlbCgpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyB8fCAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdjJykpIGNhbmNlbCgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJyAmJiAhZXZlbnQuc2hpZnQgJiYgIWV2ZW50Lm1ldGEgJiYgZGljdGF0aW9uLnN0YXR1cyA9PT0gJ3JlY29yZGluZycpIHZvaWQgc3RvcCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7IHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGhhbmRsZSB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7IGNhcHR1cmVSZWdpb24sIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IsIG9uU3RhdHVzID0gKCkgPT4ge30gfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBjYXB0dXJlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgb25TdGF0dXMoJ2NhcHR1cmluZycpXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNhcHR1cmVSZWdpb24oKVxuICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignU2NyZWVuIGNhcHR1cmUgbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBTY3JlZW4gY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICAgIG9uU3RhdHVzKCdpZGxlJylcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IG1rZHRlbXAsIHVubGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5sZXQgY2FwdHVyZURpciA9IG51bGxcblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ2FwdHVyZURpcigpIHtcbiAgY2FwdHVyZURpciA/Pz0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jYXB0dXJlLScpKVxuICByZXR1cm4gY2FwdHVyZURpclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FwdHVyZVJlZ2lvbigpIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICdkYXJ3aW4nKSB0aHJvdyBuZXcgRXJyb3IoJ3NjcmVlbiBjYXB0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIG9uIG1hY09TJylcbiAgY29uc3QgZmlsZSA9IGpvaW4oYXdhaXQgZW5zdXJlQ2FwdHVyZURpcigpLCBgY2FwdHVyZS0ke0RhdGUubm93KCl9LnBuZ2ApXG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBleGVjRmlsZSgnc2NyZWVuY2FwdHVyZScsIFsnLWknLCAnLXgnLCBmaWxlXSwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoIWVycm9yIHx8ICFleGlzdHNTeW5jKGZpbGUpKSByZXNvbHZlKClcbiAgICAgIGVsc2UgcmVqZWN0KGVycm9yKVxuICAgIH0pXG4gIH0pXG4gIGlmICghZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBmaWxlLFxuICAgIGRpc3Bvc2U6ICgpID0+IHVubGluayhmaWxlKS5jYXRjaCgoKSA9PiB7fSksXG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zZXJGaWxlcygpIHtcbiAgbGV0IHRleHQgPSAnJ1xuICBsZXQgcmVmZXJlbmNlcyA9IFtdXG5cbiAgZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBhdHRhY2htZW50cykge1xuICAgIGxldCBzdGFydCA9IDBcbiAgICB3aGlsZSAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCAmJiBzdGFydCA8IHZhbHVlLmxlbmd0aCAmJiB0ZXh0W3N0YXJ0XSA9PT0gdmFsdWVbc3RhcnRdKSBzdGFydCsrXG4gICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoXG4gICAgbGV0IG5leHRFbmQgPSB2YWx1ZS5sZW5ndGhcbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbmV4dEVuZCA+IHN0YXJ0ICYmIHRleHRbZW5kIC0gMV0gPT09IHZhbHVlW25leHRFbmQgLSAxXSkge1xuICAgICAgZW5kLS1cbiAgICAgIG5leHRFbmQtLVxuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IG5leHRFbmQgLSBlbmRcbiAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UuZW5kIDw9IHN0YXJ0KSByZXR1cm4gW3JlZmVyZW5jZV1cbiAgICAgIGlmIChyZWZlcmVuY2Uuc3RhcnQgPj0gZW5kKSByZXR1cm4gW3sgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgZGVsdGEsIGVuZDogcmVmZXJlbmNlLmVuZCArIGRlbHRhIH1dXG4gICAgICByZXR1cm4gW11cbiAgICB9KVxuICAgIHRleHQgPSB2YWx1ZVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4udGV4dC5tYXRjaEFsbCgvXFxbRmlsZSAjXFxkK1xcXS9nKV0ucmV2ZXJzZSgpXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0YWNobWVudHMuZ2V0KG1hdGNoWzBdKVxuICAgICAgaWYgKGF0dGFjaG1lbnQ/LmtpbmQgIT09ICdmaWxlJykgY29udGludWVcbiAgICAgIGNvbnN0IHBhdGggPSBhdHRhY2htZW50LnBhdGhcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBhdGgubGVuZ3RoIC0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnN0YXJ0ID49IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgID8geyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBvZmZzZXQsIGVuZDogcmVmZXJlbmNlLmVuZCArIG9mZnNldCB9XG4gICAgICAgIDogcmVmZXJlbmNlKVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgcGF0aCArIHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBzdGFydDogbWF0Y2guaW5kZXgsIGVuZDogbWF0Y2guaW5kZXggKyBwYXRoLmxlbmd0aCwgcGxhY2Vob2xkZXI6IG1hdGNoWzBdIH0pXG4gICAgfVxuICAgIHJlZmVyZW5jZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgbGV0IHZhbHVlID0gdGV4dFxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIFsuLi5yZWZlcmVuY2VzXS5yZXZlcnNlKCkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcmVmZXJlbmNlLnN0YXJ0KSArIHJlZmVyZW5jZS5wbGFjZWhvbGRlciArIHZhbHVlLnNsaWNlKHJlZmVyZW5jZS5lbmQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHsgdXBkYXRlLCBjb250ZW50IH1cbn1cbiIsICJjb25zdCBiYXJzID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCdcbmNvbnN0IHdpZHRoID0gMTZcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZExldmVsKGxldmVscywgbGV2ZWwpIHtcbiAgcmV0dXJuIFsuLi5sZXZlbHMuc2xpY2UoMSAtIHdpZHRoKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbGV2ZWwpKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkluZGljYXRvcihzdGF0dXMsIGxldmVscykge1xuICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVybiAnJ1xuICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIGAgJHtzdGF0dXN9IGBcbiAgY29uc3Qgc2FtcGxlcyA9IFsuLi5BcnJheShNYXRoLm1heCgwLCB3aWR0aCAtIGxldmVscy5sZW5ndGgpKS5maWxsKDApLCAuLi5sZXZlbHMuc2xpY2UoLXdpZHRoKV1cbiAgcmV0dXJuIGAgJHtzYW1wbGVzLm1hcCgobGV2ZWwpID0+IGJhcnNbTWF0aC5yb3VuZChsZXZlbCAqIChiYXJzLmxlbmd0aCAtIDEpKV0pLmpvaW4oJycpfSByZWNvcmRpbmcgYFxufVxuIiwgImltcG9ydCB7IGNvZGVUb0FOU0kgfSBmcm9tICdAc2hpa2lqcy9jbGknXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBzaGlraVRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgTEFOR1MgPSB7XG4gIGpzOiAnanMnLCBtanM6ICdqcycsIGNqczogJ2pzJywganN4OiAnanN4JywgdHM6ICd0cycsIHRzeDogJ3RzeCcsXG4gIGpzb246ICdqc29uJywganNvbmw6ICdqc29uJywgbWQ6ICdtZCcsIHB5OiAncHl0aG9uJywgcmI6ICdydWJ5JywgZ286ICdnbycsXG4gIHJzOiAncnVzdCcsIGM6ICdjJywgaDogJ2MnLCBjcHA6ICdjcHAnLCBqYXZhOiAnamF2YScsIGNzczogJ2NzcycsXG4gIGh0bWw6ICdodG1sJywgdnVlOiAndnVlJywgc2g6ICdiYXNoJywgYmFzaDogJ2Jhc2gnLCB6c2g6ICdiYXNoJyxcbiAgeW1sOiAneWFtbCcsIHlhbWw6ICd5YW1sJywgdG9tbDogJ3RvbWwnLCBzcWw6ICdzcWwnLCBzdmVsdGU6ICdzdmVsdGUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0ZvclBhdGgocGF0aCkge1xuICBjb25zdCBleHQgPSBTdHJpbmcocGF0aCkuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBMQU5HU1tleHRdIHx8ICd0eHQnXG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBwZW5kaW5nID0gbmV3IFNldCgpXG5jb25zdCBmYWlsZWQgPSBuZXcgU2V0KClcbmNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0VmVyc2lvbiA9IHZlcnNpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlLCBsYW5nKSB7XG4gIGNvbnN0IHNhZmVMYW5nID0gbGFuZyAmJiAhZmFpbGVkLmhhcyhsYW5nKSA/IGxhbmcgOiAndHh0J1xuICBjb25zdCB0aGVtZSA9IHNoaWtpVGhlbWUoKVxuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX1cXG4ke3NhZmVMYW5nfVxcbiR7bGluZX1gXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHJldHVybiBjYWNoZS5nZXQoa2V5KVxuICAgICAgd2FybShsaW5lLCBzYWZlTGFuZywgdGhlbWUsIGtleSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfSlcbiAgICAuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gd2FybShsaW5lLCBsYW5nLCB0aGVtZSwga2V5KSB7XG4gIGlmIChwZW5kaW5nLmhhcyhrZXkpKSByZXR1cm5cbiAgcGVuZGluZy5hZGQoa2V5KVxuICBjb2RlVG9BTlNJKGxpbmUsIGxhbmcsIHRoZW1lKVxuICAgIC50aGVuKChhbnNpKSA9PiBjYWNoZS5zZXQoa2V5LCBhbnNpLnJlcGxhY2UoL1xcbiQvLCAnJykpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBmYWlsZWQuYWRkKGxhbmcpXG4gICAgICBjYWNoZS5zZXQoa2V5LCBsaW5lKVxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcGVuZGluZy5kZWxldGUoa2V5KVxuICAgICAgc2V0VmVyc2lvbigodikgPT4gdiArIDEpXG4gICAgfSlcbn1cbiIsICJjb25zdCBMRVZFTFMgPSBbJyAnLCAnXHUyNThGJywgJ1x1MjU4RScsICdcdTI1OEQnLCAnXHUyNThDJywgJ1x1MjU4QicsICdcdTI1OEEnLCAnXHUyNTg5JywgJ1x1MjU4OCddXG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0QmFyKHBlcmNlbnQsIHdpZHRoID0gNCkge1xuICBjb25zdCBlaWdodGhzID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHBlcmNlbnQpKSAqIHdpZHRoICogOCAvIDEwMClcbiAgY29uc3QgZnVsbCA9IE1hdGguZmxvb3IoZWlnaHRocyAvIDgpXG4gIGNvbnN0IHBhcnRpYWwgPSBlaWdodGhzICUgOFxuICByZXR1cm4gJ1x1MjU4OCcucmVwZWF0KGZ1bGwpICsgKHBhcnRpYWwgPyBMRVZFTFNbcGFydGlhbF0gOiAnJykgKyAnICcucmVwZWF0KHdpZHRoIC0gZnVsbCAtIChwYXJ0aWFsID8gMSA6IDApKVxufVxuIiwgImltcG9ydCB7IGVhc2UsIGxpbmVhciwgdXNlQW5pbWF0ZWQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmZ1bmN0aW9uIHRvUmdiKGNvbG9yKSB7XG4gIGlmIChjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgxLCAzKSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMywgNSksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDUsIDcpLCAxNiksXG4gICAgXVxuICB9XG4gIHJldHVybiBbMTI3LCAxMjcsIDEyN11cbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBmcm9tXG4gIGNvbnN0IGEgPSB0b1JnYihmcm9tKVxuICBjb25zdCBiID0gdG9SZ2IodG8pXG4gIGNvbnN0IGNoYW5uZWxzID0gYS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpKVxuICByZXR1cm4gYCMke2NoYW5uZWxzLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbmltYXRlZFZhbHVlKHsgdmFsdWUsIGluaXRpYWwgPSB2YWx1ZSwgZHVyYXRpb24gPSAxMDAwLCBjb2xvciwgaGlnaGxpZ2h0LCBiYWNrZ3JvdW5kLCBmb3JtYXQgPSBTdHJpbmcgfSkge1xuICBjb25zdCBkaXNwbGF5ZWQgPSB1c2VBbmltYXRlZChpbml0aWFsLCBlYXNlKGR1cmF0aW9uKSlcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoZHVyYXRpb24sIGxpbmVhcikpXG5cbiAgaWYgKHZhbHVlICE9PSBkaXNwbGF5ZWQuX2FuaW0udGFyZ2V0KSB7XG4gICAgZGlzcGxheWVkLnNldCh2YWx1ZSlcbiAgICBnbG93LnNuYXAoMSlcbiAgICBnbG93LnNldCgwKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoY29sb3IsIGhpZ2hsaWdodCwgZ2xvdygpKSwgYmc6IGJhY2tncm91bmQgfX0+XG4gICAgICB7Zm9ybWF0KGRpc3BsYXllZCgpKX1cbiAgICA8L3RleHQ+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIERpZmYsIGVhc2UsIEhvcml6b250YWxTY3JvbGxCb3gsIGxpbmVhciwgTWFya2Rvd24sIFNjcm9sbEJveCwgU3Bpbm5lciwgdXNlQW5pbWF0ZWQsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VNb3VzZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOLCBQRUVSIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGhpZ2hsaWdodCwgbGFuZ0ZvclBhdGggfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5cbmV4cG9ydCB7IGRlZmF1bHRUaXRsZSBhcyB1aVRpdGxlIH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9yZWNvcmRlci5qcydcblxuZnVuY3Rpb24gUHJvc2VTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBiZzogY29kZUJnLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgIDx0ZXh0PntzaG93bn08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29kZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgY29uc3QgY29udGVudFdpZHRoID0gTWF0aC5tYXgoMCwgLi4udmFsdWUuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gWy4uLmxpbmVdLmxlbmd0aCkpICsgMlxuICByZXR1cm4gKFxuICAgIDxIb3Jpem9udGFsU2Nyb2xsQm94IGNvbnRlbnRXaWR0aD17Y29udGVudFdpZHRofSBzdHlsZT17eyBiZzogY29kZUJnLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBrZXkpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e2tleX0gc3R5bGU9e3sgb3ZlcmZsb3c6ICdub3dyYXAnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICkpfVxuICAgICAgPC9ib3g+XG4gICAgPC9Ib3Jpem9udGFsU2Nyb2xsQm94PlxuICApXG59XG5cbmZ1bmN0aW9uIFRyYW5zY3JpcHRDb2RlQmxvY2socHJvcHMpIHtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBwcm9wcy5sYW5ndWFnZT8udG9Mb3dlckNhc2UoKVxuICBjb25zdCBDb21wb25lbnQgPSBbJ21kJywgJ21hcmtkb3duJywgJ3RleHQnLCAndHh0JywgJ3BsYWludGV4dCddLmluY2x1ZGVzKGxhbmd1YWdlKSA/IFByb3NlU25pcHBldCA6IENvZGVTbmlwcGV0XG4gIHJldHVybiA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KSB7XG4gIGlmICghZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIHsgYmVmb3JlOiBTdHJpbmcocmV2ZXJ0Py5iZWZvcmUgfHwgJycpLCBhZnRlcjogU3RyaW5nKHJldmVydD8uYWZ0ZXIgfHwgJycpIH1cbiAgY29uc3QgYmVmb3JlID0gW11cbiAgY29uc3QgYWZ0ZXIgPSBbXVxuICBkaWZmLmh1bmtzLmZvckVhY2goKGh1bmssIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4KSB7XG4gICAgICBiZWZvcmUucHVzaCgnXHUyMkVGJylcbiAgICAgIGFmdGVyLnB1c2goJ1x1MjJFRicpXG4gICAgfVxuICAgIGZvciAoY29uc3QgbGluZSBvZiBodW5rLmxpbmVzKSB7XG4gICAgICBpZiAobGluZS50eXBlICE9PSAnYWRkJykgYmVmb3JlLnB1c2gobGluZS50ZXh0KVxuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ3JlbW92ZScpIGFmdGVyLnB1c2gobGluZS50ZXh0KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHsgYmVmb3JlOiBiZWZvcmUuam9pbignXFxuJyksIGFmdGVyOiBhZnRlci5qb2luKCdcXG4nKSB9XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSB7XG4gIGlmIChkaWZmPy5odW5rcz8ubGVuZ3RoKSByZXR1cm4gZGlmZi5odW5rcy5yZWR1Y2UoKHN1bSwgaCkgPT4gc3VtICsgaC5saW5lcy5sZW5ndGgsIDApXG4gIGNvbnN0IHByZXZpZXcgPSBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpXG4gIHJldHVybiBNYXRoLm1heChwcmV2aWV3LmFmdGVyLnNwbGl0KCdcXG4nKS5sZW5ndGgsIHByZXZpZXcuYmVmb3JlLnNwbGl0KCdcXG4nKS5sZW5ndGgsIDIpXG59XG5cbmZ1bmN0aW9uIGZtdER1cmF0aW9uKG1zKSB7XG4gIGlmIChtcyA8IDYwMDAwKSByZXR1cm4gYCR7KG1zIC8gMTAwMCkudG9GaXhlZCgyKX1zYFxuICBjb25zdCBzZWNzID0gTWF0aC5yb3VuZChtcyAvIDEwMDApXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKHNlY3MgLyA2MCl9bSAke3NlY3MgJSA2MH1zYFxufVxuXG5mdW5jdGlvbiBmbXRSdW5uaW5nKG1zKSB7XG4gIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKG1zIC8gMTAwMClcbiAgcmV0dXJuIHNlY3MgPCA2MCA/IGAke3NlY3N9c2AgOiBgJHtNYXRoLmZsb29yKHNlY3MgLyA2MCl9bSAke3NlY3MgJSA2MH1zYFxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGNvbnN0IHJnYiA9IChjb2xvcikgPT4gY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDdcbiAgICA/IFsxLCAzLCA1XS5tYXAoKGkpID0+IHBhcnNlSW50KGNvbG9yLnNsaWNlKGksIGkgKyAyKSwgMTYpKVxuICAgIDogWzEyNywgMTI3LCAxMjddXG4gIGNvbnN0IGEgPSByZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHJnYih0bylcbiAgcmV0dXJuIGAjJHthLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuY29uc3QgVE9PTF9ERVNDUklQVElPTl9MSU1JVCA9IDVcbmNvbnN0IEJBU0hfT1VUUFVUX0xJTkVTID0gMTBcbmNvbnN0IFRPT0xfTkFNRV9GTEFTSF9NUyA9IDkwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TID0gNTAwXG5jb25zdCBERVNDUklQVElPTl9SRVZFQUxfTVMgPSA3MDBcblxuZnVuY3Rpb24gZGVsYXllZExpbmVhcih0KSB7XG4gIGNvbnN0IGRlbGF5ID0gREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TIC8gKERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyArIERFU0NSSVBUSU9OX1JFVkVBTF9NUylcbiAgcmV0dXJuIHQgPD0gZGVsYXkgPyAwIDogKHQgLSBkZWxheSkgLyAoMSAtIGRlbGF5KVxufVxuXG5mdW5jdGlvbiBEZXNjcmlwdGlvblJldmVhbCh7IGNoaWxkcmVuLCBydW5uaW5nIH0pIHtcbiAgY29uc3QgcmV2ZWFsID0gdXNlQW5pbWF0ZWQocnVubmluZyA/IDAgOiAxLCBlYXNlKERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyArIERFU0NSSVBUSU9OX1JFVkVBTF9NUywgZGVsYXllZExpbmVhcikpXG4gIGlmICghcnVubmluZykgcmV2ZWFsLnNldCgxKVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGFjY2VudCgpLCBGRywgcmV2ZWFsKCkpLCBvdmVyZmxvdzogJ3RydW5jYXRlJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwIH19PntjaGlsZHJlbn08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIG91dHB1dExpbmVzKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXVxuICBjb25zdCBsaW5lcyA9IHZhbHVlLnNwbGl0KCdcXG4nKVxuICBpZiAobGluZXMuYXQoLTEpID09PSAnJykgbGluZXMucG9wKClcbiAgcmV0dXJuIGxpbmVzXG59XG5cbmZ1bmN0aW9uIEJhc2hPdXRwdXQoeyB2YWx1ZSwgbGluZVN0YXJ0LCBsaW5lQ291bnQgfSkge1xuICBjb25zdCBsaW5lcyA9IG91dHB1dExpbmVzKHZhbHVlKVxuICBpZiAoIWxpbmVzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvd24gPSBsaW5lcy5zbGljZSgtQkFTSF9PVVRQVVRfTElORVMpXG4gIGNvbnN0IGZpcnN0ID0gbGluZVN0YXJ0IHx8IChsaW5lQ291bnQgPyBsaW5lQ291bnQgLSBzaG93bi5sZW5ndGggKyAxIDogbGluZXMubGVuZ3RoIC0gc2hvd24ubGVuZ3RoICsgMSlcbiAgY29uc3QgbGFzdCA9IGxpbmVDb3VudCB8fCBmaXJzdCArIHNob3duLmxlbmd0aCAtIDFcbiAgY29uc3QgZ3V0dGVyV2lkdGggPSBTdHJpbmcobGFzdCkubGVuZ3RoXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge3Nob3duLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICA8Ym94IGtleT17Zmlyc3QgKyBpfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake1N0cmluZyhmaXJzdCArIGkpLnBhZFN0YXJ0KGd1dHRlcldpZHRoKX0gYH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29tcGFjdFRvb2xTaWduKHsgdG9vbCB9KSB7XG4gIGlmICh0b29sLm5hbWUgIT09ICdiYXNoJykgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuYmFja2dyb3VuZCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57J1x1MjFBQSAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAyIH19PjxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz48L2JveD5cbiAgaWYgKHRvb2wuZXhpdENvZGUgPT09IDApIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+eydcdTI3MTMgJ308L3RleHQ+XG4gIGlmICh0b29sLmV4aXRDb2RlICE9IG51bGwpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PnsnXHUwMEQ3ICd9PC90ZXh0PlxuICByZXR1cm4gPHRleHQ+eycgICd9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBUb29sR3JvdXAoeyBpdGVtLCB2ZXJib3NlIH0pIHtcbiAgY29uc3QgbGF0ZXN0Q2FsbElkID0gaXRlbS50b29scy5hdCgtMSk/LmNhbGxJZFxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShUT09MX05BTUVfRkxBU0hfTVMsIGxpbmVhcikpXG4gIGlmIChsYXRlc3RDYWxsSWQgIT09IGdsb3cuX2NhbGxJZCkge1xuICAgIGdsb3cuX2NhbGxJZCA9IGxhdGVzdENhbGxJZFxuICAgIGlmIChpdGVtLmFjdGl2ZSkge1xuICAgICAgZ2xvdy5zbmFwKDEpXG4gICAgICBnbG93LnNldCgwKVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHsoaXRlbS5pdGVtcyB8fCBpdGVtLnRvb2xzKS5tYXAoKGVudHJ5LCBpKSA9PiBlbnRyeS5raW5kID09PSAndGhvdWdodHMnXG4gICAgICAgICAgPyA8TWVzc2FnZSBrZXk9e2l9IGl0ZW09e2VudHJ5fSB2ZXJib3NlIC8+XG4gICAgICAgICAgOiA8VG9vbENhcmQga2V5PXtpfSB7Li4uZW50cnl9IHZlcmJvc2UgLz4pfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY291bnRzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3QgdG9vbCBvZiBpdGVtLnRvb2xzKSBjb3VudHMuc2V0KHRvb2wubmFtZSwgKGNvdW50cy5nZXQodG9vbC5uYW1lKSB8fCAwKSArIDEpXG4gIGNvbnN0IGVudHJpZXMgPSBbLi4uY291bnRzXVxuICBjb25zdCB0b3RhbE1zID0gaXRlbS50b29scy5yZWR1Y2UoKHN1bSwgdG9vbCkgPT4gc3VtICsgKHRvb2wuZHVyYXRpb25NcyB8fCAwKSwgMClcbiAgY29uc3QgbGF0ZXN0TmFtZSA9IGl0ZW0udG9vbHMuYXQoLTEpPy5uYW1lXG4gIGNvbnN0IGFjdGl2aXR5ID0gKGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgID8geyAuLi5lbnRyeSwgbmFtZTogJ3Rob3VnaHRzJywgZGVzY3JpcHRpb246IGVudHJ5LnRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSwgdGhvdWdodDogdHJ1ZSB9XG4gICAgOiBlbnRyeSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuZGVzY3JpcHRpb24pXG4gIGNvbnN0IGRlc2NyaXB0aW9ucyA9IGFjdGl2aXR5LnNsaWNlKC1UT09MX0RFU0NSSVBUSU9OX0xJTUlUKVxuICBjb25zdCBoaWRkZW5EZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5sZW5ndGggLSBkZXNjcmlwdGlvbnMubGVuZ3RoXG4gIGNvbnN0IHRvb2xOYW1lV2lkdGggPSBNYXRoLm1heCgwLCAuLi5kZXNjcmlwdGlvbnMubWFwKChlbnRyeSkgPT4gZW50cnkubmFtZS5sZW5ndGgpKVxuICBjb25zdCB2aXNpYmxlQmFzaCA9IGl0ZW0uYWN0aXZlICYmIGl0ZW0udG9vbHMuYXQoLTEpPy5uYW1lID09PSAnYmFzaCcgPyBpdGVtLnRvb2xzLmF0KC0xKSA6IG51bGxcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgIHtpdGVtLmFjdGl2ZSA/IDxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+XHUyNzEzPC90ZXh0Pn1cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFdyYXA6ICd3cmFwJywgZmxleEdyb3c6IDEsIG1hcmdpblJpZ2h0OiAyIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLmFjdGl2ZSA/IEZHIDogTVVURUQgfX0+IENhbGxlZCA8L3RleHQ+XG4gICAgICAgICAge2VudHJpZXMubWFwKChbbmFtZSwgY291bnRdLCBpKSA9PiAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e25hbWV9IHN0eWxlPXt7IGNvbG9yOiBpdGVtLmFjdGl2ZSAmJiBuYW1lID09PSBsYXRlc3ROYW1lID8gbWl4Q29sb3IoRkcsIGFjY2VudCgpLCBnbG93KCkpIDogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICB7YCR7aSA/ICcsICcgOiAnJ30ke25hbWV9JHtjb3VudCA9PT0gMSA/ICcnIDogYCAke2NvdW50fSB0aW1lc2B9YH1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt0b3RhbE1zID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAgfX0+e2ZtdER1cmF0aW9uKHRvdGFsTXMpfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICB7aGlkZGVuRGVzY3JpcHRpb25zID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDx0ZXh0PnsnICcucmVwZWF0KHRvb2xOYW1lV2lkdGggKyA0KX08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AuLi4ke2hpZGRlbkRlc2NyaXB0aW9uc30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVzY3JpcHRpb25zLm1hcCgodG9vbCwgaSkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXt0b29sLmNhbGxJZCB8fCBgdGhvdWdodC0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0ID8gPHRleHQ+eycgICd9PC90ZXh0PiA6IDxDb21wYWN0VG9vbFNpZ24gdG9vbD17dG9vbH0gLz59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdG9vbC50aG91Z2h0IH19PntgJHt0b29sLm5hbWUucGFkU3RhcnQodG9vbE5hbWVXaWR0aCl9ICBgfTwvdGV4dD5cbiAgICAgICAgICAgIHt0b29sLnRob3VnaHRcbiAgICAgICAgICAgICAgPyA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+PE1hcmtkb3duIHRleHQ9e3Rvb2wuZGVzY3JpcHRpb259IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fSAvPjwvYm94PlxuICAgICAgICAgICAgICA6IDxEZXNjcmlwdGlvblJldmVhbCBydW5uaW5nPXt0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnfT57dG9vbC5kZXNjcmlwdGlvbn08L0Rlc2NyaXB0aW9uUmV2ZWFsPn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIHt2aXNpYmxlQmFzaD8udGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHZpc2libGVCYXNoLnRpdGxlLCAnYmFzaCcpfTwvdGV4dD59XG4gICAgICAgIHt2aXNpYmxlQmFzaD8uZnVsbE91dHB1dCAmJiA8QmFzaE91dHB1dCB2YWx1ZT17dmlzaWJsZUJhc2guZnVsbE91dHB1dH0gbGluZVN0YXJ0PXt2aXNpYmxlQmFzaC5vdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17dmlzaWJsZUJhc2gub3V0cHV0TGluZUNvdW50fSAvPn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIFRvb2xDYXJkKHsgbmFtZSwgdGl0bGUsIHRpdGxlTGFuZywgZGVzY3JpcHRpb24sIHN0YXR1cywgZGlmZiwgcmV2ZXJ0LCBmdWxsT3V0cHV0LCBvdXRwdXRMaW5lU3RhcnQsIG91dHB1dExpbmVDb3VudCwgZXJyb3IsIGJhY2tncm91bmQsIHZlcmJvc2UsIHN0YXJ0ZWRBdCwgZHVyYXRpb25NcyB9KSB7XG4gIGNvbnN0IHNob3duVGl0bGUgPSBuYW1lID09PSAnYmFzaCcgPyBudWxsIDogdGl0bGVMYW5nICYmIHRpdGxlID8gaGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcpIDogdGl0bGVcbiAgY29uc3QgaW5saW5lRGVzY3JpcHRpb24gPSAhc2hvd25UaXRsZVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICBjb25zdCBydW5uaW5nID0gc3RhdHVzID09PSAncnVubmluZydcbiAgY29uc3QgaW50ZXJydXB0ZWQgPSBzdGF0dXMgPT09ICdpbnRlcnJ1cHRlZCdcbiAgY29uc3QgcmV2ZXJ0ZWQgPSBzdGF0dXMgPT09ICdyZXZlcnRlZCdcbiAgY29uc3QgZmFpbGVkID0gc3RhdHVzID09PSAnZXJyb3InXG4gIGNvbnN0IG91dExpbmVzID0gZnVsbE91dHB1dCA/IGZ1bGxPdXRwdXQuc3BsaXQoJ1xcbicpIDogbnVsbFxuXG4gIGNvbnN0IGVsYXBzZWQgPSBydW5uaW5nICYmIHN0YXJ0ZWRBdCA/IERhdGUubm93KCkgLSBzdGFydGVkQXQgOiAwXG4gIGNvbnN0IHRvb2sgPSAhcnVubmluZyAmJiAhYmFja2dyb3VuZCAmJiBkdXJhdGlvbk1zICE9IG51bGwgPyBmbXREdXJhdGlvbihkdXJhdGlvbk1zKSA6IG51bGxcblxuICBjb25zdCBpbmZvID0gcnVubmluZyA/IChlbGFwc2VkID49IDUwMDAgPyBgcnVubmluZyAoJHtmbXRSdW5uaW5nKGVsYXBzZWQpfSlgIDogJ3J1bm5pbmcnKVxuICAgIDogaW50ZXJydXB0ZWQgPyAnaW50ZXJydXB0ZWQnXG4gICAgOiByZXZlcnRlZCA/ICdyZXZlcnRlZCdcbiAgICA6IGZhaWxlZCA/IGBmYWlsZWQke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IGJhY2tncm91bmQgPyAnYmFja2dyb3VuZCAgc2hlbGwgbGlzdGVkIGJlbG93J1xuICAgIDogZGlmZiA/IGArJHtkaWZmLmFkZGl0aW9uc30gLSR7ZGlmZi5kZWxldGlvbnN9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBvdXRMaW5lcyA/IGAke291dHB1dExpbmVDb3VudCB8fCBvdXRMaW5lcy5sZW5ndGh9ICR7KG91dHB1dExpbmVDb3VudCB8fCBvdXRMaW5lcy5sZW5ndGgpID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ30ke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IGBkb25lJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG92ZXJmbG93OiAnY2xpcCcgfX0+XG4gICAgICAgIHtydW5uaW5nXG4gICAgICAgICAgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+XG4gICAgICAgICAgOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaW50ZXJydXB0ZWQgfHwgZmFpbGVkID8gUkVEIDogcmV2ZXJ0ZWQgPyBNVVRFRCA6IGFjY2VudCgpIH19PntpbnRlcnJ1cHRlZCA/ICdcdTI3MTcnIDogZmFpbGVkID8gJ1x1MjcxNycgOiByZXZlcnRlZCA/ICdcdTIxQTknIDogJ1x1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntgJHtuYW1lLnBhZEVuZCg1KX0gYH08L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGRyB9fT57c2hvd25UaXRsZSB8fCBkZXNjcmlwdGlvbiB8fCBuYW1lfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7aW5mb31gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAge2Rlc2NyaXB0aW9uICYmICFpbmxpbmVEZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIHRpdGxlICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntoaWdobGlnaHQodGl0bGUsIHRpdGxlTGFuZyB8fCAnYmFzaCcpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge2ZhaWxlZCAmJiBlcnJvciAmJiAoXG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7ZXJyb3J9YH08L3RleHQ+XG4gICAgICApfVxuICAgICAge3JldmVydCAmJiAhcnVubmluZyAmJiAhcmV2ZXJ0ZWQgJiYgIShkaWZmICYmIGRpZmYuYWRkaXRpb25zID09PSAwICYmIGRpZmYuZGVsZXRpb25zID09PSAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogZGlmZlByZXZpZXdMaW5lcyhkaWZmLCByZXZlcnQpLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDxEaWZmXG4gICAgICAgICAgICBiZWZvcmU9e3ByZXZpZXcuYmVmb3JlfVxuICAgICAgICAgICAgYWZ0ZXI9e3ByZXZpZXcuYWZ0ZXJ9XG4gICAgICAgICAgICBsYW5ndWFnZT17bGFuZ0ZvclBhdGgocmV2ZXJ0LnBhdGgpfVxuICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICBjb250ZXh0PXszfVxuICAgICAgICAgICAgZm9sZHM9e2ZhbHNlfVxuICAgICAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXI9e2ZhbHNlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtuYW1lID09PSAnYmFzaCcgJiYgZnVsbE91dHB1dCAmJiA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PjxCYXNoT3V0cHV0IHZhbHVlPXtmdWxsT3V0cHV0fSBsaW5lU3RhcnQ9e291dHB1dExpbmVTdGFydH0gbGluZUNvdW50PXtvdXRwdXRMaW5lQ291bnR9IC8+PC9ib3g+fVxuICAgICAge291dExpbmVzICYmIHZlcmJvc2UgJiYgbmFtZSAhPT0gJ2Jhc2gnICYmICFydW5uaW5nICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtvdXRMaW5lcy5zbGljZSgwLCAyMDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7b3V0TGluZXMubGVuZ3RoID4gMjAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke291dExpbmVzLmxlbmd0aCAtIDIwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIERlbGliZXJhdGlvblR1cm4oeyBpdGVtLCB2ZXJib3NlLCBjb21wYWN0VG9vbEhpc3RvcnkgPSBmYWxzZSwgcGFpcmVkID0gZmFsc2UsIGJvcmRlciA9IHRydWUsIHBhbmVIZWlnaHQsIGZvY3VzZWQgPSBmYWxzZSwgb25Gb2N1cyB9KSB7XG4gIGNvbnN0IHBhcnRpY2lwYW50QSA9IGl0ZW0ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IGl0ZW0ucm9sZSA9PT0gJ3Byb3Bvc2VyJ1xuICBjb25zdCBzeW50aGVzaXMgPSBpdGVtLnJvbGUgPT09ICdzeW50aGVzaXMnXG4gIGNvbnN0IGxhYmVsID0gc3ludGhlc2lzID8gJ1N5bnRoZXNpcycgOiBgJHtwYXJ0aWNpcGFudEEgPyAnUGFydGljaXBhbnQgQScgOiAnUGFydGljaXBhbnQgQid9ICByb3VuZCAke2l0ZW0ucm91bmR9YFxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAocGFuZUhlaWdodCAmJiBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpICYmIChldmVudC5hY3Rpb24gPT09ICdzY3JvbGwnIHx8IGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJykpIG9uRm9jdXM/LigpXG4gIH0pXG4gIGNvbnN0IHRvb2xzID0gY29tcGFjdFRvb2xIaXN0b3J5ID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW0udG9vbHMgfHwgW10sICEhaXRlbS5hY3RpdmUgJiYgIWl0ZW0udGV4dCkgOiBpdGVtLnRvb2xzIHx8IFtdXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBwYWRkaW5nWDogcGFpcmVkID8gMCA6IDIsIGhlaWdodDogcGFuZUhlaWdodCwgYmc6IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleEdyb3c6IHBhbmVIZWlnaHQgPyAxIDogdW5kZWZpbmVkIH19PlxuICAgICAgICB7Ym9yZGVyICYmIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCB9fSAvPn1cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIGJnOiBzeW50aGVzaXMgPyBTRUxFQ1RfQkcgOiBwYXJ0aWNpcGFudEEgfHwgcGFpcmVkID8gUEFORUxfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgfHwgc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgICAgICB7cGFuZUhlaWdodCA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEgfX1cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgICAgICBvblNjcm9sbD17KG5leHQsIG1ldGEpID0+IHsgc2V0T2Zmc2V0KG5leHQpOyBzZXRGb2xsb3coISFtZXRhPy5hdEJvdHRvbSkgfX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxEZWxpYmVyYXRpb25Db250ZW50IHRvb2xzPXt0b29sc30gdGV4dD17dGV4dH0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICkgOiA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+fVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIERlbGliZXJhdGlvbkNvbnRlbnQoeyB0b29scywgdGV4dCwgdmVyYm9zZSB9KSB7XG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgIHt0b29scy5tYXAoKHRvb2wpID0+IDxNZXNzYWdlIGtleT17dG9vbC5jYWxsSWR9IGl0ZW09e3Rvb2x9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+KX1cbiAgICAgICAgICB7dGV4dCAmJiB0b29scy5sZW5ndGggPiAwICYmIDx0ZXh0PiA8L3RleHQ+fVxuICAgICAgICAgIHt0ZXh0ICYmIChcbiAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICA8L2JveD5cbn1cblxuZnVuY3Rpb24gZGVsaWJlcmF0aW9uUm93cyh0dXJucykge1xuICBjb25zdCByb3dzID0gW11cbiAgZm9yIChjb25zdCB0dXJuIG9mIHR1cm5zKSB7XG4gICAgaWYgKHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycgfHwgIXR1cm4ucGFyYWxsZWxHcm91cCkge1xuICAgICAgcm93cy5wdXNoKFt0dXJuXSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gcm93cy5maW5kKChyb3cpID0+IHJvd1swXT8ucGFyYWxsZWxHcm91cCA9PT0gdHVybi5wYXJhbGxlbEdyb3VwKVxuICAgIGlmIChleGlzdGluZykgZXhpc3RpbmcucHVzaCh0dXJuKVxuICAgIGVsc2Ugcm93cy5wdXNoKFt0dXJuXSlcbiAgfVxuICByZXR1cm4gcm93c1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGVsaWJlcmF0aW9uRXhjaGFuZ2UoeyB0dXJucywgdmVyYm9zZSwgd2lkZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHZpZXdwb3J0SGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBpZCA9IHR1cm4gPT4gYCR7dHVybi5yb2xlfToke3R1cm4ucm91bmQgPz8gJ3N5bnRoZXNpcyd9YFxuICBjb25zdCBzZWxlY3RlZElkID0gc2VsZWN0ZWQoKSB8fCAodHVybnNbMF0gJiYgaWQodHVybnNbMF0pKVxuICBjb25zdCBmb2N1c1R1cm4gPSB0dXJuID0+IHsgc2V0U2VsZWN0ZWQoaWQodHVybikpOyBvbkZvY3VzPy4oKSB9XG4gIHVzZUlucHV0KGV2ZW50ID0+IHtcbiAgICBpZiAoIWZvY3VzZWQgfHwgKGV2ZW50LmtleSAhPT0gJ2xlZnQnICYmIGV2ZW50LmtleSAhPT0gJ3JpZ2h0JykpIHJldHVyblxuICAgIGNvbnN0IGluZGV4ID0gdHVybnMuZmluZEluZGV4KHR1cm4gPT4gaWQodHVybikgPT09IHNlbGVjdGVkSWQpXG4gICAgY29uc3QgbmV4dCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHR1cm5zLmxlbmd0aCAtIDEsIGluZGV4ICsgKGV2ZW50LmtleSA9PT0gJ2xlZnQnID8gLTEgOiAxKSkpXG4gICAgaWYgKHR1cm5zW25leHRdKSBmb2N1c1R1cm4odHVybnNbbmV4dF0pXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcbiAgY29uc3QgcGFuZUhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqICh0dXJucy5zb21lKHR1cm4gPT4gdHVybi5yb2xlID09PSAnc3ludGhlc2lzJykgPyAwLjYgOiAxKSkgLSAxKSA6IHVuZGVmaW5lZFxuICBjb25zdCBwYW5lUHJvcHMgPSB0dXJuID0+ICh7IHBhbmVIZWlnaHQ6IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycgJiYgdmlld3BvcnRIZWlnaHQgPyBNYXRoLm1heCg2LCBNYXRoLmZsb29yKHZpZXdwb3J0SGVpZ2h0ICogMC4zNSkpIDogcGFuZUhlaWdodCwgZm9jdXNlZDogZm9jdXNlZCAmJiBzZWxlY3RlZElkID09PSBpZCh0dXJuKSwgb25Gb2N1czogKCkgPT4gZm9jdXNUdXJuKHR1cm4pIH0pXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7ZGVsaWJlcmF0aW9uUm93cyh0dXJucykubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHN5bnRoZXNpcyA9IHJvd1swXT8ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgICAgICAgaWYgKCF3aWRlIHx8IHN5bnRoZXNpcykgcmV0dXJuIHJvdy5tYXAoKHR1cm4pID0+IDxEZWxpYmVyYXRpb25UdXJuIGtleT17YCR7dHVybi5yb2xlfToke3R1cm4ucm91bmQgPz8gJ3N5bnRoZXNpcyd9YH0gaXRlbT17dHVybn0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHsuLi5wYW5lUHJvcHModHVybil9IC8+KVxuICAgICAgICBjb25zdCBsZWZ0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IHR1cm4ucm9sZSA9PT0gJ3Byb3Bvc2VyJylcbiAgICAgICAgY29uc3QgcmlnaHQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYicgfHwgdHVybi5yb2xlID09PSAncmV2aWV3ZXInKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dbMF0/LnBhcmFsbGVsR3JvdXAgfHwgYCR7cm93WzBdPy5yb2xlfToke3Jvd1swXT8ucm91bmR9OiR7aW5kZXh9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHdpZHRoOiAnMTAwJScsIG92ZXJmbG93OiAnY2xpcCcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogJzUwJScsIG1pbldpZHRoOiAwLCBvdmVyZmxvdzogJ2NsaXAnIH19PntsZWZ0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2xlZnR9IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSBwYWlyZWQgYm9yZGVyPXtmYWxzZX0gey4uLnBhbmVQcm9wcyhsZWZ0KX0gLz59PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57cmlnaHQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17cmlnaHR9IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSBwYWlyZWQgYm9yZGVyPXtmYWxzZX0gey4uLnBhbmVQcm9wcyhyaWdodCl9IC8+fTwvYm94PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNob3dMb2NrZWQgPSBmYWxzZSB9KSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIDxUb29sR3JvdXAgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicgJiYgaXRlbS5vcmlnaW4gPT09ICd2aWV3Jykge1xuICAgIGNvbnN0IGxhYmVsID0gL15cXFt2aWV3OiAoW15cXF1dKylcXF0vLmV4ZWMoaXRlbS50ZXh0KT8uWzFdIHx8ICdpbWFnZSdcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjcxMyBWaWV3ZWQgJHtsYWJlbH1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS5ub3RpY2VzLmxlbmd0aH0gYWdlbnRzIGZpbmlzaGVkYH08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtpdGVtLm5vdGljZXMubWFwKChub3RpY2UsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bm90aWNlLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKSB7XG4gICAgcmV0dXJuIDxUb29sQ2FyZCB7Li4uaXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdW1tYXJ5Jykge1xuICAgIGNvbnN0IGxpbmVzID0gaXRlbS50ZXh0LnNwbGl0KCdcXG4nKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57aXRlbS5zb3VyY2UgPT09ICdjb21wYWN0JyA/ICdcdTI3MjYgc3VtbWFyeSAgY29udmVyc2F0aW9uIGNvbXBhY3RlZCBhYm92ZSB0aGlzIHBvaW50JyA6ICdcdTI3MjYgc3VtbWFyeSAgcmV3b3VuZCBjb252ZXJzYXRpb24nfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsaW5lcy5sZW5ndGh9ICR7bGluZXMubGVuZ3RoID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ31gfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7bGluZXMuc2xpY2UoMCwgNTAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7bGluZXMubGVuZ3RoID4gNTAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke2xpbmVzLmxlbmd0aCAtIDUwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgPE1hcmtkb3duIHRleHQ9e2l0ZW0udGV4dH0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKSB7XG4gICAgcmV0dXJuIDxib3ggc3R5bGU9e3sgbWFyZ2luVG9wOiAxIH19PjxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+PC9ib3g+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnbm90aWNlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI3MjYgc2tpbGw6ICR7aXRlbS5uYW1lfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI1MDBcdTI1MDAgJHtpdGVtLmNvdW50fSB0b29sICR7aXRlbS5jb3VudCA9PT0gMSA/ICdpbnRlcmFjdGlvbicgOiAnaW50ZXJhY3Rpb25zJ30gaGlkZGVuIFx1MjUwMFx1MjUwMGB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLWNvbW1hbmQnKSB7XG4gICAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHQoaXRlbS50ZXh0LCAnYmFzaCcpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydjb21tYW5kJ308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9PntgJHtpID09PSAwID8gJyQgJyA6ICcgICd9JHtsaW5lIHx8ICcgJ31gfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1vdXRwdXQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydvdXRwdXQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge2l0ZW0udGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAncGVlcicpIHtcbiAgICBjb25zdCBpbmNvbWluZyA9IGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnXG4gICAgY29uc3QgdW5yZWFkID0gaW5jb21pbmcgJiYgIWl0ZW0ucmVhZFxuICAgIGNvbnN0IGJvcmRlciA9IGluY29taW5nICYmIGl0ZW0ucmVhZCA/IE1VVEVEIDogUEVFUlxuICAgIGNvbnN0IHN0YXR1cyA9IGluY29taW5nID8gYCAgJHt1bnJlYWQgPyAndW5yZWFkJyA6ICdyZWFkJ31gIDogYCAgJHtpdGVtLnN0YXR1cyB8fCAndW5rbm93bid9YFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBib3JkZXIgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiAxLCBwYWRkaW5nWTogMSwgYmc6IFBBTkVMX0JHIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFBFRVIsIGJvbGQ6IHRydWUgfX0+e2BAJHtpdGVtLmZyb20ubmFtZX0gXHUyMTkyIEAke2l0ZW0udG8ubmFtZX0ke2l0ZW0udXJnZW50ID8gJyAgdXJnZW50JyA6ICcnfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYm9yZGVyLCBib2xkOiB1bnJlYWQgfX0+e3N0YXR1c308L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBQRUVSIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAge2l0ZW0uZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57aXRlbS5lcnJvcn08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJykge1xuICAgIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ1VzZXInIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IFBBTkVMX0JHIH19IC8+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2l0ZW0udGV4dH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnQXNzaXN0YW50JyA6IG51bGxcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCB9fSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgcGFkZGluZ0xlZnQ6IDEsIHBhZGRpbmdSaWdodDogMiwgcGFkZGluZ1k6IHNob3dMb2NrZWQgPyAxIDogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICBjb2RlQmxvY2s9e1RyYW5zY3JpcHRDb2RlQmxvY2t9XG4gICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoaXRlbXMsIGFjdGl2ZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOykge1xuICAgIGlmIChpdGVtc1tpXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbaV0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIChpdGVtc1tlbmRdLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tlbmRdLmtpbmQgPT09ICd0aG91Z2h0cycpKSBlbmQrK1xuICAgICAgY29uc3QgcnVuID0gaXRlbXMuc2xpY2UoaSwgZW5kKVxuICAgICAgY29uc3QgdG9vbHMgPSBydW4uZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd0b29sJylcbiAgICAgIHJlc3VsdC5wdXNoKHsga2luZDogJ3Rvb2wtZ3JvdXAnLCBjYWxsSWQ6IHRvb2xzLmF0KC0xKT8uY2FsbElkLCBpdGVtczogcnVuLCB0b29scywgYWN0aXZlOiBhY3RpdmUgJiYgZW5kID09PSBpdGVtcy5sZW5ndGggfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChpdGVtc1tpXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tpXS5hZ2VudENvbXBsZXRpb24pIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiBpdGVtc1tlbmRdLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2VuZF0uYWdlbnRDb21wbGV0aW9uKSBlbmQrK1xuICAgICAgY29uc3QgcnVuID0gaXRlbXMuc2xpY2UoaSwgZW5kKVxuICAgICAgcmVzdWx0LnB1c2gocnVuLmxlbmd0aCA9PT0gMSA/IHJ1blswXSA6IHsga2luZDogJ2FnZW50LW5vdGljZS1ncm91cCcsIG5vdGljZXM6IHJ1biB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbaSsrXSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2NyaXB0V2luZG93KGl0ZW1zLCBzaXplKSB7XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaXRlbXMubGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3QgaGlkZGVuID0gaXRlbXMuc2xpY2UoMCwgc3RhcnQpXG4gIHJldHVybiB7XG4gICAgaXRlbXM6IGl0ZW1zLnNsaWNlKHN0YXJ0KSxcbiAgICBoaWRkZW5JdGVtczogaGlkZGVuLmxlbmd0aCxcbiAgICBoaWRkZW5Db3VudDogaGlkZGVuLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHRvdGFsICsgc291cmNlSXRlbUNvdW50KGl0ZW0pLCAwKSxcbiAgfVxufVxuXG5mdW5jdGlvbiBzb3VyY2VJdGVtQ291bnQoaXRlbSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiBpdGVtLml0ZW1zLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykgcmV0dXJuIGl0ZW0ubm90aWNlcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykgcmV0dXJuIGl0ZW0uY291bnRcbiAgcmV0dXJuIDFcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRJbnB1dCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgY29udmVyc2F0aW9uTWF0Y2hlcywgaGlnaGxpZ2h0Q29udmVyc2F0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb252ZXJzYXRpb24tc2VhcmNoLmpzJ1xuXG5mdW5jdGlvbiBTY3JvbGxBbmNob3IoeyB0YXJnZXQgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICB0YXJnZXQuYW5jaG9yWSA9IGxheW91dC55XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIFNlYXJjaE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBjdXJyZW50TWF0Y2gsIHNlYXJjaCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGlmIChjdXJyZW50TWF0Y2gpIHNlYXJjaC5zY3JvbGxUb01hdGNoKGxheW91dCwgY3VycmVudE1hdGNoKVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KSB7XG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbY29tbWl0dGVkLCBzZXRDb21taXR0ZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZW50ZXJGb2N1cywgc2V0RW50ZXJGb2N1c10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzY3JvbGxSZXF1ZXN0LCBzZXRTY3JvbGxSZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2Nyb2xsXSA9IGNyZWF0ZVNpZ25hbCh7IGFuY2hvclk6IDAsIGtleTogbnVsbCB9KVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRm9jdXMoKSB7XG4gICAgaWYgKCFhY3RpdmUoKSkgcmV0dXJuXG4gICAgZm0uaXRlbSgnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgaWYgKGVudGVyRm9jdXMoKSkge1xuICAgICAgc2V0RW50ZXJGb2N1cyhmYWxzZSlcbiAgICAgIGZtLmZvY3VzKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuKCkge1xuICAgIHNldEFjdGl2ZSh0cnVlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldEVudGVyRm9jdXModHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKHsgcmVzdG9yZUZvY3VzID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgaWYgKHJlc3RvcmVGb2N1cyAmJiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSBmbS5mb2N1cygnZmVlZCcpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCwgbWF0Y2hlcykge1xuICAgIGlmIChhY3RpdmUoKSAmJiAhZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkge1xuICAgICAgY2xvc2UoeyByZXN0b3JlRm9jdXM6IGZhbHNlIH0pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoIWFjdGl2ZSgpIHx8ICFjb21taXR0ZWQoKSkgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgY291bnQgPSBtYXRjaGVzLmxlbmd0aFxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZSgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnbicgJiYgIWV2ZW50LnNoaWZ0KSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgKyAxKSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ04nIHx8IChldmVudC5zaGlmdCAmJiBldmVudC5rZXkgPT09ICduJykpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSAtIDEgKyBjb3VudCkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ28nKSByZXR1cm4gZmFsc2VcbiAgICBlbHNlIHJldHVybiB0cnVlXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShpdGVtcykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb252ZXJzYXRpb25NYXRjaGVzKGl0ZW1zLCBxdWVyeSgpLCB2ZXJib3NlKCkpXG4gICAgY29uc3QgbGFzdEluZGV4ID0gTWF0aC5tYXgoMCwgbWF0Y2hlcy5sZW5ndGggLSAxKVxuICAgIGlmIChpbmRleCgpID4gbGFzdEluZGV4KSBzZXRJbmRleChsYXN0SW5kZXgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICBpdGVtczogYWN0aXZlKCkgPyBoaWdobGlnaHRDb252ZXJzYXRpb24oaXRlbXMsIHF1ZXJ5KCksIGluZGV4KCksIHZlcmJvc2UoKSkgOiBpdGVtcyxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxUb01hdGNoKGxheW91dCwgbWF0Y2gpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzY3JvbGwoKVxuICAgIGNvbnN0IGtleSA9IGAke3F1ZXJ5KCl9XFwwJHtpbmRleCgpfVxcMCR7dmVyYm9zZSgpfVxcMCR7c2Nyb2xsUmVxdWVzdCgpfWBcbiAgICBpZiAodGFyZ2V0LmtleSA9PT0ga2V5KSByZXR1cm5cbiAgICB0YXJnZXQua2V5ID0ga2V5XG4gICAgc2V0Rm9sbG93KGZhbHNlKVxuICAgIHNldE9mZnNldChNYXRoLm1heCgwLCBsYXlvdXQueSAtIHRhcmdldC5hbmNob3JZICsgbWF0Y2gubGluZSAtIDMpKVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUXVlcnkodmFsdWUpIHtcbiAgICBzZXRRdWVyeSh2YWx1ZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmUsXG4gICAgcXVlcnksXG4gICAgY29tbWl0dGVkLFxuICAgIGluZGV4LFxuICAgIGZvY3VzZWQ6ICgpID0+IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyksXG4gICAgcmVnaXN0ZXJGb2N1cyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIGhhbmRsZUlucHV0LFxuICAgIHByZXBhcmUsXG4gICAgc2Nyb2xsOiBzY3JvbGwoKSxcbiAgICBzY3JvbGxUb01hdGNoLFxuICAgIGNvbW1pdDogKCkgPT4gc2V0Q29tbWl0dGVkKHRydWUpLFxuICAgIHVwZGF0ZVF1ZXJ5LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJzYXRpb25TZWFyY2hCYXIoeyBzZWFyY2gsIG1hdGNoZXMgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57Jy8gJ308L3RleHQ+XG4gICAgICB7c2VhcmNoLmNvbW1pdHRlZCgpXG4gICAgICAgID8gPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBmbGV4R3JvdzogMSB9fT57c2VhcmNoLnF1ZXJ5KCl9PC90ZXh0PlxuICAgICAgICA6IDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e3NlYXJjaC5mb2N1c2VkKCl9XG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNoLnF1ZXJ5KCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2VhcmNoLnVwZGF0ZVF1ZXJ5fVxuICAgICAgICAgICAgb25TdWJtaXQ9e3NlYXJjaC5jb21taXR9XG4gICAgICAgICAgICBvbkNhbmNlbD17c2VhcmNoLmNsb3NlfVxuICAgICAgICAgIC8+fVxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnttYXRjaGVzLmxlbmd0aCA/IGAke3NlYXJjaC5pbmRleCgpICsgMX0vJHttYXRjaGVzLmxlbmd0aH1gIDogJzAvMCd9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFuY2hvciBhcyBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIFNlYXJjaE1lc3NhZ2UgYXMgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSB9XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIFRleHRJbnB1dCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVELCBGRywgRkdfU09GVCwgUEFORUxfQkcsIFNFTEVDVF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIGFuc3dlclRleHQocXVlc3Rpb24sIGFuc3dlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmpvaW4oJywgJylcbiAgcmV0dXJuIGFuc3dlciB8fCAnTm90IGFuc3dlcmVkJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUXVlc3Rpb25Gb3JtKHsgcmVxdWVzdCwgZm9jdXNlZCwgb25TdWJtaXQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgcXVlc3Rpb25zID0gcmVxdWVzdC5xdWVzdGlvbnNcbiAgY29uc3QgcmV2aWV3aW5nID0gcXVlc3Rpb25zLmxlbmd0aCA+IDFcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFthbnN3ZXJzLCBzZXRBbnN3ZXJzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY3VzdG9tLCBzZXRDdXN0b21dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmV2aWV3LCBzZXRSZXZpZXddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29udHJvbCwgc2V0Q29udHJvbF0gPSBjcmVhdGVTaWduYWwoJ2Fuc3dlcicpXG5cbiAgY29uc3QgcXVlc3Rpb24gPSAoKSA9PiBxdWVzdGlvbnNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gKCkgPT4gcXVlc3Rpb24oKS5vcHRpb25zIHx8IFtdXG4gIGNvbnN0IHJvd3MgPSAoKSA9PiBbLi4ub3B0aW9ucygpLCAuLi4ocXVlc3Rpb24oKS5hbGxvd090aGVyID09PSBmYWxzZSA/IFtdIDogW3sgbGFiZWw6ICdPdGhlcicsIG90aGVyOiB0cnVlIH1dKV1cbiAgY29uc3Qgc2VsZWN0ZWQgPSAobGFiZWwpID0+IChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmluY2x1ZGVzKGxhYmVsKVxuICBjb25zdCBvdGhlckFuc3dlciA9ICgpID0+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF1cbiAgICBjb25zdCBsYWJlbHMgPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmZpbmQoKHZhbHVlKSA9PiAhbGFiZWxzLmhhcyh2YWx1ZSkpIHx8ICcnXG4gICAgcmV0dXJuIGFuc3dlciAmJiAhbGFiZWxzLmhhcyhhbnN3ZXIpID8gYW5zd2VyIDogJydcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEFuc3dlcih2YWx1ZSkge1xuICAgIHNldEFuc3dlcnMoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIFtxdWVzdGlvbigpLmlkXTogdmFsdWUgfSkpXG4gIH1cblxuICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBzZXRDdXJzb3IoMClcbiAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgIGlmIChzdGVwKCkgPCBxdWVzdGlvbnMubGVuZ3RoIC0gMSkgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIGVsc2UgaWYgKHJldmlld2luZykgeyBzZXRDdXJzb3IocXVlc3Rpb25zLmxlbmd0aCk7IHNldFJldmlldyh0cnVlKSB9XG4gICAgZWxzZSBmaW5pc2goKVxuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIG9uU3VibWl0KHF1ZXN0aW9ucy5tYXAoKGl0ZW0pID0+ICh7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyOiBhbnN3ZXJzKClbaXRlbS5pZF0gPz8gJycgfSkpKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0VGV4dCh2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGlmICghYW5zd2VyKSByZXR1cm5cbiAgICBzZXRBbnN3ZXIoYW5zd2VyKVxuICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICBlbHNlIGFkdmFuY2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gc3VibWl0T3RoZXIodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBjb25zdCBrbm93biA9IG5ldyBTZXQoKGl0ZW0ub3B0aW9ucyB8fCBbXSkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgY29uc3QgY2hvaWNlcyA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IChhbnN3ZXJzKClbaXRlbS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpIDogW11cbiAgICBjb25zdCBuZXh0QW5zd2VyID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gWy4uLmNob2ljZXMsIC4uLihhbnN3ZXIgPyBbYW5zd2VyXSA6IFtdKV0gOiBhbnN3ZXJcbiAgICBzZXRBbnN3ZXIobmV4dEFuc3dlcilcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3NpbmdsZScgJiYgYW5zd2VyKSB7XG4gICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgICBlbHNlIGFkdmFuY2UoKVxuICAgIH1cbiAgfVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIGlmIChjdXN0b20oKSkgeyBzZXRDdXN0b20oZmFsc2UpOyBzZXRDb250cm9sKCdhbnN3ZXInKSB9XG4gICAgICBlbHNlIGlmIChyZXZpZXcoKSkgc2V0UmV2aWV3KGZhbHNlKVxuICAgICAgZWxzZSBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZXZpZXcoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHF1ZXN0aW9ucy5sZW5ndGgsIGN1cnNvcigpICsgMSkpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICAgIGlmIChjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCkgZmluaXNoKClcbiAgICAgICAgZWxzZSB7IHNldFN0ZXAoY3Vyc29yKCkpOyBzZXRDdXJzb3IoMCk7IHNldENvbnRyb2woJ2Fuc3dlcicpOyBzZXRSZXZpZXcoZmFsc2UpIH1cbiAgICAgIH0gZWxzZSByZXR1cm5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0ZXAoKSA+IDAgJiYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykpIHtcbiAgICAgIHNldENvbnRyb2woY29udHJvbCgpID09PSAnYmFjaycgPyAnYW5zd2VyJyA6ICdiYWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNvbnRyb2woKSA9PT0gJ2JhY2snKSByZXR1cm5cbiAgICBpZiAoY3VzdG9tKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpIHtcbiAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChxdWVzdGlvbigpPy50eXBlID09PSAndGV4dCcpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocm93cygpLmxlbmd0aCAtIDEsIGN1cnNvcigpICsgMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnc3BhY2UnICYmIHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHJvdy5vdGhlcikge1xuICAgICAgICBpZiAob3RoZXJBbnN3ZXIoKSkge1xuICAgICAgICAgIGNvbnN0IGtub3duID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgICAgICAgc2V0QW5zd2VyKChhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW10pLmZpbHRlcigoZW50cnkpID0+IGtub3duLmhhcyhlbnRyeSkpKVxuICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgfSBlbHNlIHNldEN1c3RvbSh0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXVxuICAgICAgICBzZXRBbnN3ZXIoY3VycmVudC5pbmNsdWRlcyhyb3cubGFiZWwpID8gY3VycmVudC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93LmxhYmVsKSA6IFsuLi5jdXJyZW50LCByb3cubGFiZWxdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cygpW2N1cnNvcigpXVxuICAgICAgaWYgKHF1ZXN0aW9uKCkudHlwZSA9PT0gJ211bHRpJykgYWR2YW5jZSgpXG4gICAgICBlbHNlIGlmIChyb3cub3RoZXIpIHNldEN1c3RvbSh0cnVlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldEFuc3dlcihyb3cubGFiZWwpXG4gICAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogcXVlc3Rpb24oKS5pZCwgcXVlc3Rpb246IHF1ZXN0aW9uKCkucXVlc3Rpb24sIGFuc3dlcjogcm93LmxhYmVsIH1dKVxuICAgICAgICBlbHNlIGFkdmFuY2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuXG4gIGlmIChyZXZpZXcoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXZpZXcgYW5zd2VyczwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyOiBlZGl0IG9yIHN1Ym1pdCAgZXNjOiBiYWNrPC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3F1ZXN0aW9ucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Fuc3dlclRleHQoaXRlbSwgYW5zd2VycygpW2l0ZW0uaWRdKX08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBiZzogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gJ2JsYWNrJyA6IEZHLCBib2xkOiB0cnVlIH19PiBTdWJtaXQgYW5zd2VycyA8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBpdGVtID0gcXVlc3Rpb24oKVxuICBjb25zdCBwcm9ncmVzcyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxID8gYCR7c3RlcCgpICsgMX0gb2YgJHtxdWVzdGlvbnMubGVuZ3RofWAgOiAnUXVlc3Rpb24nXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIHtzdGVwKCkgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBsYWJlbD1cIkJhY2tcIlxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2JhY2snfVxuICAgICAgICAgICAgICBvblByZXNzPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RlcChzdGVwKCkgLSAxKVxuICAgICAgICAgICAgICAgIHNldEN1cnNvcigwKVxuICAgICAgICAgICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRDb250cm9sKCdhbnN3ZXInKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3Byb2dyZXNzfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2l0ZW0udHlwZSA9PT0gJ211bHRpJyA/ICdzcGFjZTogc2VsZWN0ICBlbnRlcjogY29udGludWUnIDogJ2VudGVyOiBhbnN3ZXInfSAgZXNjOiBjYW5jZWw8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgYm9sZDogdHJ1ZSB9fT57aXRlbS5xdWVzdGlvbn08L3RleHQ+XG4gICAgICB7aXRlbS5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57aXRlbS5kZXNjcmlwdGlvbn08L3RleHQ+fVxuICAgICAge2l0ZW0udHlwZSA9PT0gJ3RleHQnID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBTRUxFQ1RfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTp0ZXh0YH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYW5zd2VyJ31cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB5b3VyIGFuc3dlclwiXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3R5cGVvZiBhbnN3ZXJzKClbaXRlbS5pZF0gPT09ICdzdHJpbmcnID8gYW5zd2VycygpW2l0ZW0uaWRdIDogJyd9XG4gICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0VGV4dH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7cm93cygpLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IGN1cnNvcigpID09PSBpbmRleCA/IFNFTEVDVF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PlxuICAgICAgICAgICAgICAgIHtpdGVtLnR5cGUgPT09ICdtdWx0aSdcbiAgICAgICAgICAgICAgICAgID8gYCR7b3B0aW9uLm90aGVyID8gKG90aGVyQW5zd2VyKCkgPyAnW3hdJyA6ICdbIF0nKSA6IChzZWxlY3RlZChvcHRpb24ubGFiZWwpID8gJ1t4XScgOiAnWyBdJyl9IGBcbiAgICAgICAgICAgICAgICAgIDogYCR7Y3Vyc29yKCkgPT09IGluZGV4ID8gJ1x1MjAzQScgOiAnICd9IGB9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICB7b3B0aW9uLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntgICAke29wdGlvbi5kZXNjcmlwdGlvbn1gfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtvcHRpb24ub3RoZXIgJiYgKGN1c3RvbSgpIHx8IG90aGVyQW5zd2VyKCkpICYmIChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBjdXN0b20oKSA/IFBBTkVMX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nTGVmdDogNCB9fT5cbiAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpdGVtLmlkfTpvdGhlcmB9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY3VzdG9tKCl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBhbm90aGVyIGFuc3dlclwiXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17b3RoZXJBbnN3ZXIoKX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdE90aGVyfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCB1c2VNb3VzZSwgdXNlUmVzaXplIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmZ1bmN0aW9uIEVtcHR5Q2xvdWQoeyB3aWR0aCwgaGVpZ2h0LCB2ZXJzaW9uIH0pIHtcbiAgY29uc3QgW3BoYXNlLCBzZXRQaGFzZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3dha2UsIHNldFdha2VdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBsZXQgcHJldmlvdXMgPSBudWxsXG5cbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiAhPT0gJ21vdmUnICYmIGV2ZW50LmFjdGlvbiAhPT0gJ2RyYWcnKSByZXR1cm5cbiAgICBjb25zdCB4ID0gZXZlbnQueFxuICAgIGNvbnN0IHkgPSBldmVudC55XG4gICAgaWYgKHggPCAwIHx8IHggPj0gd2lkdGggfHwgeSA8IDAgfHwgeSA+PSBoZWlnaHQpIHJldHVyblxuICAgIGNvbnN0IGR4ID0gcHJldmlvdXMgPyB4IC0gcHJldmlvdXMueCA6IDBcbiAgICBjb25zdCBkeSA9IHByZXZpb3VzID8geSAtIHByZXZpb3VzLnkgOiAwXG4gICAgcHJldmlvdXMgPSB7IHgsIHkgfVxuICAgIGNvbnN0IHNwZWVkID0gTWF0aC5oeXBvdChkeCAqIDAuNSwgZHkpXG4gICAgaWYgKHNwZWVkID09PSAwKSByZXR1cm5cbiAgICBzZXRXYWtlKHBvaW50cyA9PiBbLi4ucG9pbnRzLnNsaWNlKC0yMCksIHsgeCwgeSwgZHgsIGR5LCBzcGVlZDogTWF0aC5taW4oNCwgc3BlZWQpLCBhZ2U6IDAgfV0pXG4gIH0pXG5cbiAgdXNlSW50ZXJ2YWwoKCkgPT4ge1xuICAgIHNldFBoYXNlKHZhbHVlID0+IHZhbHVlICsgMC4xNilcbiAgICBzZXRXYWtlKHBvaW50cyA9PiBwb2ludHMubWFwKHBvaW50ID0+ICh7IC4uLnBvaW50LCBhZ2U6IHBvaW50LmFnZSArIDEgfSkpLmZpbHRlcihwb2ludCA9PiBwb2ludC5hZ2UgPCAxOCkpXG4gIH0sIDkwKVxuXG4gIGNvbnN0IGdseXBocyA9ICcgIC4uOjorKyoqXHUyNTkxXHUyNTkyJ1xuICBjb25zdCByb3dzID0gW11cbiAgY29uc3QgYmFzZSA9IGFjY2VudCgpXG4gIGNvbnN0IHJnYiA9IC9eIyhbMC05YS1mXXs2fSkkL2kuZXhlYyhiYXNlKVxuICBjb25zdCBuZWlnaGJvcmluZyA9IHJnYlxuICAgID8gYCMke1tcbiAgICAgIE1hdGgubWF4KDAsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgwLCAyKSwgMTYpIC0gMTgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMiwgNCksIDE2KSArIDgpLFxuICAgICAgTWF0aC5taW4oMjU1LCBwYXJzZUludChyZ2JbMV0uc2xpY2UoNCwgNiksIDE2KSArIDI0KSxcbiAgICBdLm1hcCh2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxuICAgIDogYmFzZVxuXG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICBjb25zdCByb3cgPSBbXVxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgY29uc3QgcCA9IHBoYXNlKClcbiAgICAgIGNvbnN0IGJyb2FkID0gTWF0aC5zaW4oeCAqIDAuMDggKyBwKSArIE1hdGguc2luKHkgKiAwLjI5IC0gcCAqIDAuNykgKyBNYXRoLnNpbigoeCArIHkpICogMC4wNSArIHAgKiAwLjM1KVxuICAgICAgY29uc3Qgd2lzcHMgPSBNYXRoLnNpbih4ICogMC4xOSAtIHkgKiAwLjExIC0gcCAqIDAuNTUpICsgTWF0aC5zaW4oeCAqIDAuMDMgKyB5ICogMC40MyArIHAgKiAwLjQpXG4gICAgICBjb25zdCBwb2NrZXRzID0gTWF0aC5zaW4oeCAqIDAuMzEgKyBwICogMC44KSAqIE1hdGguc2luKHkgKiAwLjQ3IC0gcCAqIDAuMylcbiAgICAgIGxldCBicm9hZERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCB3aXNwRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IGludGVyYWN0aW9uID0gMFxuICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB3YWtlKCkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5oeXBvdChwb2ludC5keCAqIDAuNSwgcG9pbnQuZHkpIHx8IDFcbiAgICAgICAgY29uc3QgdXggPSBwb2ludC5keCAqIDAuNSAvIGxlbmd0aFxuICAgICAgICBjb25zdCB1eSA9IHBvaW50LmR5IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHJ4ID0gKHggLSBwb2ludC54KSAqIDAuNVxuICAgICAgICBjb25zdCByeSA9IHkgLSBwb2ludC55XG4gICAgICAgIGNvbnN0IGFsb25nID0gcnggKiB1eCArIHJ5ICogdXlcbiAgICAgICAgY29uc3QgYWNyb3NzID0gLXJ4ICogdXkgKyByeSAqIHV4XG4gICAgICAgIGNvbnN0IHRyYWlsaW5nID0gYWxvbmcgPD0gMiAmJiBhbG9uZyA+PSAtMTggLSBwb2ludC5zcGVlZCAqIDNcbiAgICAgICAgaWYgKCF0cmFpbGluZykgY29udGludWVcbiAgICAgICAgY29uc3QgYWdlID0gMSAtIHBvaW50LmFnZSAvIDE4XG4gICAgICAgIGNvbnN0IHRyYWlsID0gTWF0aC5leHAoLU1hdGgucG93KChhbG9uZyArIDQgKyBwb2ludC5hZ2UgKiAwLjM1KSAvICg3ICsgcG9pbnQuc3BlZWQgKiAyKSwgMikpXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IE1hdGguZXhwKC0oYWNyb3NzICogYWNyb3NzKSAvIDUpXG4gICAgICAgIGNvbnN0IGVkZ2VzID0gTWF0aC5leHAoLU1hdGgucG93KE1hdGguYWJzKGFjcm9zcykgLSAzLjIsIDIpIC8gMylcbiAgICAgICAgY29uc3QgZm9yY2UgPSBhZ2UgKiB0cmFpbCAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuNDUpXG4gICAgICAgIGNvbnN0IHJhZGlhbERpc3RhbmNlID0gTWF0aC5zcXJ0KHJ4ICogcnggKyByeSAqIHJ5KVxuICAgICAgICBjb25zdCByaXBwbGVFbnZlbG9wZSA9IE1hdGguZXhwKC0ocmFkaWFsRGlzdGFuY2UgKiByYWRpYWxEaXN0YW5jZSkgLyAoMzUgKyBwb2ludC5zcGVlZCAqIDEyKSlcbiAgICAgICAgY29uc3QgcmlwcGxlID0gTWF0aC5zaW4ocmFkaWFsRGlzdGFuY2UgKiAxLjM1IC0gcG9pbnQuYWdlICogMC43NSkgKiByaXBwbGVFbnZlbG9wZSAqIGFnZVxuICAgICAgICB3aXNwRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuOSAtIGNlbnRlcikgKiBmb3JjZSAqIDEuNSArIHJpcHBsZSAqICgxLjIgKyBwb2ludC5zcGVlZCAqIDAuMjUpXG4gICAgICAgIGJyb2FkRGlzcGxhY2VtZW50ICs9IChlZGdlcyAqIDAuNDUgLSBjZW50ZXIgKiAwLjM1KSAqIGZvcmNlICogMC41NSArIHJpcHBsZSAqIDAuMjVcbiAgICAgICAgaW50ZXJhY3Rpb24gPSBNYXRoLm1heChpbnRlcmFjdGlvbiwgTWF0aC5hYnMocmlwcGxlKSAqICgwLjUgKyBwb2ludC5zcGVlZCAqIDAuMTUpKVxuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoXG4gICAgICAgIGJyb2FkICsgYnJvYWREaXNwbGFjZW1lbnQgKyAod2lzcHMgKyB3aXNwRGlzcGxhY2VtZW50KSAqIDAuNjUgKyBwb2NrZXRzICogMC44ICsgMy4yXG4gICAgICApIC8gNy40KSlcbiAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5taW4oZ2x5cGhzLmxlbmd0aCAtIDEsIE1hdGguZmxvb3IodmFsdWUgKiBnbHlwaHMubGVuZ3RoKSlcbiAgICAgIHJvdy5wdXNoKHsgZ2x5cGg6IGdseXBoc1tpbmRleF0sIGNvbG9yOiBpbnRlcmFjdGlvbiA+IDAuMTYgPyBuZWlnaGJvcmluZyA6IGJhc2UsIGRpbTogaW5kZXggPCA4IH0pXG4gICAgfVxuICAgIHJvd3MucHVzaChyb3cpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gJ3BpY28nIDogaSA9PT0gMiA/IGB2JHt2ZXJzaW9ufWAgOiAnJ1xuICAgICAgICBjb25zdCBpbkJyYW5kQm94ID0gaSA+PSAxICYmIGkgPD0gMlxuICAgICAgICBjb25zdCBib3hTdGFydCA9IDFcbiAgICAgICAgY29uc3QgYm94V2lkdGggPSBgdiR7dmVyc2lvbn1gLmxlbmd0aCArIDJcbiAgICAgICAgY29uc3QgY2xvdWQgPSAoY2VsbHMpID0+IGNlbGxzLm1hcCgoY2VsbCwgeCkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17eH0gc3R5bGU9e3sgY29sb3I6IGNlbGwuY29sb3IsIGRpbTogY2VsbC5kaW0gfX0+e2NlbGwuZ2x5cGh9PC90ZXh0PlxuICAgICAgICApKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxib3gga2V5PXtpfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgY2xvdWQocm93LnNsaWNlKDAsIGJveFN0YXJ0KSl9XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IGJveFdpZHRoLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICB7bGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgYm9sZDogaSA9PT0gMSwgY29sb3I6IGkgPT09IDEgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvdWQocm93LnNsaWNlKGluQnJhbmRCb3ggPyBib3hTdGFydCArIGJveFdpZHRoIDogMCkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRW1wdHlTdGF0ZSh7IHZlcnNpb24sIGNsb3VkcyA9IGZhbHNlIH0pIHtcbiAgY29uc3QgW3NpemUsIHNldFNpemVdID0gY3JlYXRlU2lnbmFsKHsgd2lkdGg6IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODAsIGhlaWdodDogcHJvY2Vzcy5zdGRvdXQucm93cyB8fCAyNCB9KVxuICB1c2VSZXNpemUoc2V0U2l6ZSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBzaXplKCkud2lkdGgpXG4gIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIHNpemUoKS5oZWlnaHQgLSA0KVxuICBpZiAoIWNsb3Vkcykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IHRydWUsIGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgcGljbyd9PC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIHYke3ZlcnNpb259YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoLCBoZWlnaHQgfX0+XG4gICAgICA8RW1wdHlDbG91ZCB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fSB2ZXJzaW9uPXt2ZXJzaW9ufSAvPlxuICAgIDwvYm94PlxuICApXG59XG5cbiIsICJpbXBvcnQgeyBNYXJrZG93biwgU2Nyb2xsQm94LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBIRUxQX1RFWFQgPSAoY29tbWFuZHMpID0+IGBwaWNvIGlzIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWwuIEl0IHJlYWRzLCBlZGl0cywgYW5kIHNlYXJjaGVzIGZpbGVzLCBydW5zIGNvbW1hbmRzLCBhbmQgc3RyZWFtcyBpdHMgd29yayBpbnRvIHRoaXMgdHJhbnNjcmlwdC5cblxuIyMgQ29tbWFuZHNcblxuVHlwZSBcXGAvXFxgIGluIHRoZSBjb21wb3NlciB0byBmaWx0ZXIgdGhlc2UgYXMgeW91IHR5cGUuXG5cbiR7Y29tbWFuZHMubWFwKChjKSA9PiBgLSBcXGAvJHtjLm5hbWV9XFxgIC0gJHtjLmRlc2N9YCkuam9pbignXFxuJyl9XG5cblR3byBraW5kcyBvZiB1c2VyLWRlZmluZWQgZW50cmllcyBqb2luIHRoaXMgbWVudTpcblxuLSAqKmNvbW1hbmRzKiogKFxcYH4vLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgIG9yIFxcYC5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCk6IHByb21wdCB0ZW1wbGF0ZXMgeW91IGludm9rZSBhcyBcXGAvPG5hbWU+IFthcmdzXVxcYC4gXFxgJEFSR1VNRU5UU1xcYCBpbiB0aGUgYm9keSBpcyByZXBsYWNlZCB3aXRoIHdoYXRldmVyIGZvbGxvd3MgdGhlIGNvbW1hbmQ7IHdpdGhvdXQgYSBwbGFjZWhvbGRlciwgYXJncyBhcmUgYXBwZW5kZWQuIFRoZSBtb2RlbCBuZXZlciBzZWVzIHRoZXNlIHVudGlsIHlvdSBydW4gb25lLlxuLSAqKnNraWxscyoqIChcXGB+Ly5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGAgb3IgXFxgLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCk6IGNhcGFiaWxpdGllcyB3aXRoIGEgbmFtZSBhbmQgZGVzY3JpcHRpb24uIFlvdSBjYW4gaW52b2tlIHRoZW0gbGlrZSBjb21tYW5kcywgYW5kIHRoZSBhZ2VudCBjYW4gYWxzbyBkaXNjb3ZlciBhbmQgbG9hZCB0aGVtIGl0c2VsZiB2aWEgdGhlIHNraWxsIHRvb2wuXG4tICoqdG9vbHMqKiAoXFxgfi8ucGljby90b29scy88bmFtZT4uanNcXGAgb3IgXFxgLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgKTogRVMgbW9kdWxlcyBkZWZhdWx0LWV4cG9ydGluZyBcXGB7IG5hbWUsIGRlc2NyaXB0aW9uLCBzY2hlbWEsIGV4ZWN1dGUgfVxcYCAob3IgYSBmYWN0b3J5IHJlY2VpdmluZyBcXGB7IGN3ZCwgcm9vdCB9XFxgKS4gVGhleSBqb2luIHRoZSBhZ2VudCdzIHRvb2xzZXQgYW5kIGFyZSByZXNjYW5uZWQgZXZlcnkgdHVybiwgc28gZWRpdHMgYXBwbHkgb24gdGhlIG5leHQgbWVzc2FnZS4gQXNrIHRoZSBhZ2VudCB0byBidWlsZCBvbmUgZm9yIHlvdTogdGhlIGJ1aWx0LWluIFxcYC9uZXctdG9vbFxcYCBza2lsbCB0ZWFjaGVzIGl0IHRoZSBmb3JtYXQuXG5cbkluIHRoZSBNQ1AgcGFuZWw6IGVudGVyIGVuYWJsZXMvZGlzYWJsZXMgYSBzZXJ2ZXIgKGRpc2FibGVkIGlzIHN0aWNreSBhY3Jvc3MgcmVzdGFydHMgLSBjb25maWcga2VwdCwgbm8gY29ubmVjdGlvbiwgbm8gdG9vbHMgb2ZmZXJlZCB0byB0aGUgbW9kZWwsIHBlciBwcm9qZWN0KSwgXFxgdFxcYCBsaXN0cyBpdHMgdG9vbHMsIFxcYHJcXGAgcmVjb25uZWN0cywgXFxgYVxcYCBhZGRzLCBcXGBjdHJsK3hcXGAgcmVtb3ZlcyAocHJlc3MgdHdpY2UpLiBVbmZpbHRlcmVkIGxpc3RzIChlZmZvcnQsIHJld2luZCBvcHRpb25zLCBNQ1ApIGFsc28gbW92ZSB3aXRoIFxcYGpcXGAvXFxga1xcYCBhbmQganVtcCB3aXRoIFxcYGdcXGAvXFxgR1xcYC5cblxuIyMgQ29tcG9zZXJcblxuLSBcXGBjdHJsK3ZcXGA6IEF0dGFjaCBjbGlwYm9hcmQgaW1hZ2Vcbi0gXFxgY3RybCtvXFxgOiBDYXB0dXJlIHNjcmVlbiByZWdpb24gKG1hY09TKVxuLSBcXGBjdHJsK2dcXGA6IFJlY29yZCAobWFjT1MpXG4tIFxcYGVudGVyXFxgOiBUcmFuc2NyaWJlIHJlY29yZGluZ1xuLSBcXGBlc2NcXGA6IENhbmNlbCBkaWN0YXRpb25cblxuLSBcXGBlbnRlclxcYCBzZW5kczsgXFxgc2hpZnQrZW50ZXJcXGAgb3IgXFxgXFxcXDxlbnRlcj5cXGAgaW5zZXJ0cyBhIG5ld2xpbmVcbi0gXFxgQFxcYCBvcGVucyBhIGZ1enp5IGZpbGUgcGlja2VyOyBlbnRlciBpbnNlcnRzIHRoZSBzZWxlY3RlZCBwYXRoXG4tIGRyYWcgYW4gaW1hZ2UgZmlsZSBpbnRvIHRoZSB0ZXJtaW5hbCB0byBhdHRhY2ggaXQ6IGl0IGFwcGVhcnMgaW5saW5lIGFzIFxcYFtJbWFnZSAjTl1cXGAsIGV4YWN0bHkgd2hlcmUgeW91ciBjdXJzb3IgaXMsIHNvIGltYWdlcyBjYW4gc2l0IGJldHdlZW4gc2VudGVuY2VzOyBiYWNrc3BhY2UgYWZ0ZXIgb25lIHJlbW92ZXMgdGhlIHdob2xlIGF0dGFjaG1lbnRcbi0gXFxgdGFiXFxgIGNvbXBsZXRlczogXFxgL3N1bW08dGFiPlxcYCBmaW5pc2hlcyB0aGUgY29tbWFuZCBuYW1lIGFuZCBjeWNsZXMgdGhyb3VnaCBtYXRjaGVzIG9uIHJlcGVhdDsgYWZ0ZXIgYW4gYXJndW1lbnQgc3BhY2UgaXQgY29tcGxldGVzIHZhbHVlcyAoXFxgL21vZGVsIGZsYTx0YWI+XFxgLCBcXGAvY29sb3IgPHRhYj5cXGAsIFxcYC9lZmZvcnQgPHRhYj5cXGApIGFuZCBmaWxlIHBhdGhzIGZvciBza2lsbHMgYW5kIGNvbW1hbmRzLiBLZWVwIHR5cGluZyB0byBuYXJyb3csIHRhYiBvciBlbnRlciBpbnNlcnRzXG4tIFxcYHVwXFxgIGFuZCBcXGBkb3duXFxgIG9uIGFuIGVtcHR5IGNvbXBvc2VyIHJlY2FsbCBtZXNzYWdlcyB5b3UgYWxyZWFkeSBzZW50XG4tIFxcYGN0cmwrclxcYCBvcGVucyByZXdpbmQgKHNhbWUgYXMgXFxgL3Jld2luZFxcYCk7IFxcYC9oaXN0b3J5XFxgIGZ1enp5LXNlYXJjaGVzIHlvdXIgb2xkIHByb21wdHMgYW5kIHB1dHMgdGhlIHNlbGVjdGVkIG9uZSBiYWNrIGluIHRoZSBjb21wb3NlclxuLSBcXGBjdHJsK3NcXGAgb3BlbnMgdGhlIHNlc3Npb24gcGlja2VyIChzYW1lIGFzIFxcYC9yZXN1bWVcXGApOyBcXGBjdHJsK3RcXGAgb3BlbnMgdGhlIG1vZGVsIHBpY2tlclxuLSBcXGBjdHJsK3BcXGAgc3dpdGNoZXMgcHJvamVjdHM6IHBpY2sgb25lIGFuZCBwaWNvIGp1bXBzIHRvIGl0cyBtb3N0IHJlY2VudCBzZXNzaW9uLCBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnksIHRvb2xzLCBjb250ZXh0LCBhbmQgTUNQIHNlcnZlcnMgdG8gbWF0Y2g7IFxcYGN0cmwreFxcYCB0d2ljZSBkZWxldGVzIGEgcHJvamVjdCdzIHBpY28gaGlzdG9yeSAoYWxsIGl0cyBzZXNzaW9ucyBhbmQgbWVtb3JpZXMpOyBcXGAvbmV3XFxgIHN0YXJ0cyBhIGZyZXNoIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgcHJvamVjdFxuLSBcXGBjdHJsK2JcXGAgY3ljbGVzIHRoaW5raW5nIGVmZm9ydCAoZGVmYXVsdCwgbG93LCBtZWRpdW0sIGhpZ2gsIG1heCkgb24gbW9kZWxzIHRoYXQgc3VwcG9ydCBpdDsgXFxgL2VmZm9ydFxcYCBvcGVucyB0aGUgZnVsbCBwaWNrZXJcbi0gaW5zaWRlIGEgc2VhcmNoIHBhbmVsLCBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBpbnN0ZWFkOiB0aGlzIHNlc3Npb24sIHRoaXMgcHJvamVjdCwgb3IgZXZlcnl3aGVyZVxuLSBcXGAvcmV3aW5kXFxgIHJlc3RvcmVzIHRoZSBjb252ZXJzYXRpb24gdG8gYW4gZWFybGllciBtZXNzYWdlOyBhIHJld2luZCBjYW4gYmUgdW5kb25lIHdpdGggXFxgY3RybCt6XFxgXG4tIG1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIGFnZW50IGlzIHJlc3BvbmRpbmcgcXVldWUgdXAgYWJvdmUgdGhlIGNvbXBvc2VyIGFuZCBhcmUgZGVsaXZlcmVkIGFzIG9uZSBtZXNzYWdlIHdoZW4gdGhlIHR1cm4gZmluaXNoZXM7IFxcYHVwXFxgIHB1bGxzIHRoZW0gYmFjayBmb3IgZWRpdGluZ1xuLSBcXGBlc2NcXGAgaW50ZXJydXB0cyBhIHN0cmVhbWluZyByZXNwb25zZSwgb3IgY2xlYXJzIHRoZSBjb21wb3NlciB3aGVuIGlkbGVcblxuIyMgTW92aW5nIGFyb3VuZFxuXG4tIFxcYHRhYlxcYCBzd2l0Y2hlcyBmb2N1cyBiZXR3ZWVuIHRoZSB0cmFuc2NyaXB0IGFuZCB0aGUgY29tcG9zZXJcbi0gd2l0aCB0aGUgdHJhbnNjcmlwdCBmb2N1c2VkLCBcXGB1cFxcYC9cXGBkb3duXFxgL1xcYGpcXGAvXFxga1xcYCBzY3JvbGwgYW5kIFxcYGdcXGAvXFxgR1xcYCBqdW1wIHRvIHRoZSBlbmRzXG4tIGxvbmcgc2Vzc2lvbnMgcmVuZGVyIG9ubHkgdGhlIG5ld2VzdCA1MCBtZXNzYWdlczsgc2Nyb2xsaW5nIHRvIHRoZSB2ZXJ5IHRvcCBsb2FkcyBvbGRlciBvbmVzIGluIGJhdGNoZXMgKHRoZSB0b3AgbGluZSBzaG93cyBob3cgbWFueSBhcmUgaGlkZGVuKVxuLSB0aGUgbW91c2Ugd2hlZWwgc2Nyb2xsczsgY2xpY2stZHJhZyBzZWxlY3RzIHRleHQgYW5kIGNvcGllcyBpdCBvbiByZWxlYXNlXG4tIFxcYGN0cmwrY1xcYCB0d2ljZSBleGl0c1xuXG4jIyBTaGVsbHNcblxuVGhlIGFnZW50IGNhbiBydW4gbG9uZy1saXZlZCBwcm9jZXNzZXMgKGRldiBzZXJ2ZXJzLCB3YXRjaGVycykgd2l0aCBcXGBiYXNoIGJhY2tncm91bmQ6IHRydWVcXGAsIHRoZW4gcmVhZCB0aGVpciBvdXRwdXQgYW5kIHN0b3AgdGhlbSBpdHNlbGYuIFNoZWxscyBhcHBlYXIgYmVsb3cgdGhlIGNvbXBvc2VyIGFuZCByZW1haW4gdGhlcmUgYWZ0ZXIgZXhpdDogdGFiIGZvY3VzZXMgdGhlIGxpc3QsIGovayBtb3ZlcywgZW50ZXIgb3BlbnMgdGhlIGNvbW1hbmQgYW5kIGxpdmUgb3V0cHV0LCBhbmQgXFxgY3RybCt4XFxgIGtpbGxzIGEgcnVubmluZyBzaGVsbCBvciBkaXNtaXNzZXMgYSBmaW5pc2hlZCBvbmUuIFdoZW4gYSBzaGVsbCBleGl0cyBvbiBpdHMgb3duLCB0aGUgYWdlbnQgaXMgbm90aWZpZWQgYW5kIHJlc3BvbmRzOyBzaGVsbHMgZGllIHdpdGggcGljbywgYW5kIHF1aXR0aW5nIHdhcm5zIHlvdSBpZiBhbnkgYXJlIHN0aWxsIHVwLlxuXG4jIyBTdWJzY3JpcHRpb25zXG5cblxcYC9jb25uZWN0XFxgIGxpc3RzIHN1YnNjcmlwdGlvbiBwcm92aWRlcnMgeW91IGNhbiBzaWduIGluIHdpdGggaW5zdGVhZCBvZiBBUEkga2V5cy4gT3BlbkFJIChDaGF0R1BUIC8gQ29kZXggcGxhbikgc2lnbnMgaW4gdGhyb3VnaCB5b3VyIGJyb3dzZXIgdmlhIE9BdXRoOyB0b2tlbnMgYXJlIHN0b3JlZCBpbiBcXGB+Ly5waWNvL2F1dGguanNvblxcYCBhbmQgcmVmcmVzaGVkIGF1dG9tYXRpY2FsbHksIHNvIHlvdSBzaWduIGluIG9uY2UuIE9uY2UgY29ubmVjdGVkLCBjb2RleCBtb2RlbHMgYXBwZWFyIGluIFxcYC9tb2RlbFxcYCwgYmlsbGVkIHRvIHlvdXIgcGxhbi4gXFxgZFxcYCBpbiB0aGUgcGFuZWwgZGlzY29ubmVjdHMuXG5cbiMjIE1lbW9yeVxuXG5UaGUgYWdlbnQgc2F2ZXMgZHVyYWJsZSBmYWN0cyB3aXRoIHRoZSByZW1lbWJlciB0b29sOiBvbmUgZmlsZSBwZXIgbWVtb3J5IHVuZGVyIFxcYH4vLnBpY28vbWVtb3J5XFxgIChnbG9iYWwpIG9yIHRoZSBwcm9qZWN0J3MgZGlyZWN0b3J5IGluIFxcYH4vLnBpY28vcHJvamVjdHNcXGAuIE9ubHkgYSBvbmUtbGluZSBpbmRleCBpcyBpbiBpdHMgY29udGV4dDsgaXQgbG9hZHMgYSBzcGVjaWZpYyBtZW1vcnkgd2l0aCB0aGUgcmVjYWxsIHRvb2wgd2hlbiByZWxldmFudC4gXFxgL21lbW9yeVxcYCBsaXN0cyBldmVyeXRoaW5nIGl0IGtub3dzIHdpdGggYSBjb250ZW50IHByZXZpZXc6IFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGZpbHRlciAoYWxsLCBwcm9qZWN0LCBnbG9iYWwpIGFuZCBcXGBjdHJsK3hcXGAgdHdpY2UgZm9yZ2V0cyB0aGUgc2VsZWN0ZWQgbWVtb3J5LiBZb3UgY2FuIGFsc28gYXNrIHRoZSBhZ2VudCB0byByZW1lbWJlciwgZm9yZ2V0LCBvciBjbGVhbiB1cCBpdHMgbWVtb3JpZXMgaW4gcGxhaW4gbGFuZ3VhZ2UuXG5cbiMjIFdha2UtdXBzXG5cblRoZSBhZ2VudCBjYW4gc2NoZWR1bGUgb25lLXRpbWUgd2FrZS11cHMgZm9yIGl0c2VsZiB3aXRoIHRoZSBzY2hlZHVsZV93YWtldXAgdG9vbDogYWZ0ZXIgdGhlIGRlbGF5IGl0IHJlY2VpdmVzIGl0cyBvd24gbm90ZSBhcyBhIHN5c3RlbSBub3RpZmljYXRpb24gYW5kIGFjdHMgb24gaXQuIFJlY3VycmluZyBsb29wcyBhcmUganVzdCB0aGUgYWdlbnQgcmVzY2hlZHVsaW5nIGF0IHRoZSBlbmQgb2YgZWFjaCB3YWtlLXVwLiBcXGAvd2FrZXVwc1xcYCBsaXN0cyBwZW5kaW5nIG9uZXMgd2l0aCBsaXZlIGNvdW50ZG93bnM7IGVudGVyIG9yIFxcYGN0cmwreFxcYCBjYW5jZWxzIChwcmVzcyB0d2ljZSkuIEEgXFxgXHUyM0YwIE5cXGAgaW4gdGhlIGZvb3RlciBzaG93cyBob3cgbWFueSBhcmUgcGVuZGluZy4gV2FrZS11cHMgbGl2ZSBpbiBtZW1vcnkgYW5kIGFyZSBsb3N0IHdoZW4gcGljbyBleGl0cy5cblxuIyMgQXBwZWFyYW5jZVxuXG5waWNvIHBpY2tzIGEgbGlnaHQgb3IgZGFyayBwYWxldHRlIGF0IHN0YXJ0dXAgYnkgYXNraW5nIHRoZSB0ZXJtaW5hbCBmb3IgaXRzIGJhY2tncm91bmQgY29sb3IgKE9TQyAxMSksIHNvIGl0IG1hdGNoZXMgd2hhdGV2ZXIgdGhlbWUgeW91ciB0ZXJtaW5hbCB1c2VzLiBcXGAvdGhlbWVcXGAgb3BlbnMgYSBwaWNrZXIgdGhhdCBwcmV2aWV3cyBlYWNoIHRoZW1lIGFzIHlvdSBtb3ZlIGFuZCBwZXJzaXN0cyB5b3VyIGNob2ljZSBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgOyBcXGAvdGhlbWUgbGlnaHRcXGAsIFxcYC90aGVtZSBkYXJrXFxgLCBvciBcXGAvdGhlbWUgYXV0b1xcYCBhcHBsaWVzIG9uZSBkaXJlY3RseS4gXFxgL2NvbG9yXFxgIHRpbnRzIGEgc2luZ2xlIHNlc3Npb24ncyBhY2NlbnQgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYWxldHRlLlxuXG4jIyBDb250ZXh0XG5cbnBpY28gcmVhZHMgQUdFTlRTLm1kIGZpbGVzIGF1dG9tYXRpY2FsbHk6IGEgZ2xvYmFsIG9uZSBmcm9tIH4vLnBpY28sIHRoZW4gZXZlcnkgYW5jZXN0b3Igb2YgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB1cCB0byB0aGUgZ2l0IHJvb3QuIERlZXBlciBmaWxlcyB3aW4uIEFHRU5UUy5tZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBsb2FkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIHRvb2wgdG91Y2hlcyB0aGF0IHN1YnRyZWUuIEluIGFueSBwcm9qZWN0IGRpcmVjdG9yeSB3aXRob3V0IGFuIEFHRU5UUy5tZCwgYSBDTEFVREUubWQgaXMgaG9ub3JlZCBhcyBhIGZhbGxiYWNrIHNvIGV4aXN0aW5nIHJlcG9zIHdvcmsgdW5jaGFuZ2VkOyBBR0VOVFMubWQgYWx3YXlzIHdpbnMgd2hlbiBib3RoIGV4aXN0LCBhbmQgdGhlIGZhbGxiYWNrIG5ldmVyIGFwcGxpZXMgdG8gdGhlIGdsb2JhbCBmaWxlLlxuXG5TZXNzaW9ucyBhcmUgc3RvcmVkIHVuZGVyIH4vLnBpY28gYXMganNvbmwgZXZlbnQgbG9nczsgXFxgL3Jlc3VtZVxcYCBmb2xkcyBvbmUgYmFjayBpbnRvIGV4YWN0bHkgdGhpcyB2aWV3LlxuXG5cXGAvY29udGV4dFxcYCBicmVha3MgZG93biB3aGF0IHRoZSBuZXh0IHJlcXVlc3Qgd2lsbCBjb250YWluIC0gc3lzdGVtIHByb21wdCwgdG9vbCBzY2hlbWFzLCBwcm9qZWN0IGluc3RydWN0aW9ucywgbWVtb3J5IGluZGV4LCBjb21wYWN0aW9uIHN1bW1hcnksIGFuZCBjb252ZXJzYXRpb24gLSB3aXRoIGFuIGVzdGltYXRlZCBzaXplIGZvciBlYWNoIHBpZWNlIG5leHQgdG8gdGhlIHByb3ZpZGVyLW1lYXN1cmVkIHRvdGFsLlxuXG5UaGUgZm9vdGVyJ3MgXFxgY3R4ICVcXGAgc2hvd3MgaG93IGZ1bGwgdGhlIG1vZGVsJ3MgY29udGV4dCBpcy4gQXQgODUlIHBpY28gYXV0by1jb21wYWN0czogdGhlIG9sZGVyIGNvbnZlcnNhdGlvbiBpcyBzdW1tYXJpemVkIGluIGEgc3RydWN0dXJlZCBmb3JtLCB0aGUgbW9zdCByZWNlbnQgdHVybnMgYXJlIGtlcHQgdmVyYmF0aW0sIGFuZCB0aGUgbW9kZWwgaXMgdG9sZCB3aGVyZSB0aGUgZnVsbCBzZXNzaW9uIGZpbGUgbGl2ZXMgc28gaXQgY2FuIHJlYWQgZXhhY3QgZGV0YWlscyBiYWNrIG9uIGRlbWFuZC4gTm90aGluZyB2aXNpYmxlIGNoYW5nZXMgaW4gdGhlIHRyYW5zY3JpcHQsIGFuZCByZXdpbmQgc3RpbGwgd29ya3MgYWNyb3NzIGl0LiBcXGAvY29tcGFjdFxcYCBydW5zIGl0IG1hbnVhbGx5IGFuZCB0YWtlcyBvcHRpb25hbCBmb2N1cyBpbnN0cnVjdGlvbnMgKFxcYC9jb21wYWN0IGZvY3VzIG9uIHRoZSBBUEkgY2hhbmdlc1xcYCkuIFNldCBcXGBcImF1dG9Db21wYWN0XCI6IGZhbHNlXFxgIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGAgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIHRyaWdnZXIuXG5cbi0tLVxuXG4qZXNjIHRha2VzIHlvdSBiYWNrIHRvIHRoZSBjb252ZXJzYXRpb24qYFxuXG5leHBvcnQgZnVuY3Rpb24gSGVscCh7IGNvbW1hbmRzLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnBpY28gIGhlbHA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjE5MVx1MjE5MyBzY3JvbGwgIGVzYyBiYWNrPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkIHNjcm9sbGJhcj5cbiAgICAgICAgPE1hcmtkb3duIHRleHQ9e0hFTFBfVEVYVChjb21tYW5kcyl9IGNvZGVCZz17bnVsbH0gLz5cbiAgICAgIDwvU2Nyb2xsQm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIENoZWNrYm94LCBlYXNlLCBGaWVsZCwgRmllbGRMaXN0LCBNZW51LCBOdW1iZXJJbnB1dCwgUGlja0xpc3QsIFJhZGlvLCBTY3JvbGxCb3gsIFRleHRJbnB1dCwgdXNlQW5pbWF0ZWQsIHVzZUZvY3VzLCB1c2VJbnB1dCwgdXNlSW50ZXJ2YWwsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgZm9ybWF0SHR0cFNlcnZlclNwZWMsIHBhcnNlU2VydmVyU3BlYywgcmVkYWN0U2VydmVyU3BlYywgUkVEQUNURURfSEVBREVSIH0gZnJvbSAncGljb2NvZGUtY29yZS9tY3AuanMnXG5cbmZ1bmN0aW9uIHNob3J0ZW5Ib21lKHBhdGgpIHtcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocGF0aClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gdmFsdWUgPT09IGhvbWUgfHwgdmFsdWUuc3RhcnRzV2l0aChgJHtob21lfS9gKSA/IGB+JHt2YWx1ZS5zbGljZShob21lLmxlbmd0aCl9YCA6IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lQWdvKGF0KSB7XG4gIGNvbnN0IHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gYXQpIC8gMTAwMCkpXG4gIGlmIChzIDwgNjApIHJldHVybiBgJHtzfXMgYWdvYFxuICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApXG4gIGlmIChtIDwgNjApIHJldHVybiBgJHttfW0gYWdvYFxuICBjb25zdCBoID0gTWF0aC5mbG9vcihtIC8gNjApXG4gIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWggYWdvYFxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihoIC8gMjQpfWQgYWdvYFxufVxuXG5mdW5jdGlvbiBQYW5lbERpdmlkZXIoKSB7XG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogU0VMRUNUX0JHLCBvdmVyZmxvdzogJ2NsaXAnIH19PnsnXHUyNTAwJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCl9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBQYW5lbEZyYW1lKHsgdGl0bGUsIGhpbnQsIHJpZ2h0LCBmdWxsU2NyZWVuID0gZmFsc2UsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIGhlaWdodDogZnVsbFNjcmVlbiA/ICcxMDAlJyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57dGl0bGV9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICB7cmlnaHR9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2hpbnR9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogZnVsbFNjcmVlbiA/IDAgOiAyLCBwYWRkaW5nQm90dG9tOiAxLCBmbGV4R3JvdzogZnVsbFNjcmVlbiA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maXJtUGFuZWwoeyB0aXRsZSwgbWVzc2FnZSwgY29uZmlybUxhYmVsID0gJ0NvbmZpcm0nLCBmb2N1c2VkLCBvbkNvbmZpcm0sIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBvbkNvbmZpcm0oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9e2BlbnRlcjogJHtjb25maXJtTGFiZWwudG9Mb3dlckNhc2UoKX0gIGVzYzogY2FuY2VsYH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57bWVzc2FnZX08L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQsIGJvbGQ6IHRydWUgfX0+VGhpcyBjYW5ub3QgYmUgdW5kb25lLjwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdGaWVsZCh7IGZpZWxkLCB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxDaGVja2JveCBjaGVja2VkPXt2YWx1ZX0gbGFiZWw9e2ZpZWxkLmxhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntmaWVsZC5wYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7ZmllbGQuZGVzY31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdOdW1iZXJGaWVsZCh7IHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPE51bWJlcklucHV0IGZvY3VzZWQ9e2ZvY3VzZWR9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBtaW49ezF9IG1heD17MTAwfSB3aWR0aD17NX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PiBQYXJhbGxlbCBhZ2VudCBsaW1pdDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+cmVzZWFyY2guYWdlbnRMaW1pdDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PiAgICBNYXhpbXVtIGFnZW50cyBwZXIgcGFyYWxsZWwgcnVuICgxLTEwMCk8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTW9kZWxGaWVsZCh7IG1vZGVsLCBsYWJlbCwgcGF0aCwgZm9jdXNlZCwgb25QaWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPXtsYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17b25QaWNrfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke21vZGVsIHx8ICdOb3QgY29uZmlndXJlZCd9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ1BhbmVsKHsgdmFsdWVzLCBmb2N1c2VkLCBvbkNoYW5nZSwgb25QaWNrUmVzZWFyY2hNb2RlbCwgb25QaWNrU2hlbGxNb2RlbCwgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWwsIG9uUGlja1BhcnRpY2lwYW50TW9kZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBmaWVsZHMgPSBbXG4gICAgeyBuYW1lOiAnY2xvdWRzJywgbGFiZWw6ICdDbG91ZCBhbmltYXRpb24nLCBkZXNjOiAnU2hvdyBhbmltYXRlZCBjbG91ZHMgb24gdGhlIGVtcHR5IHNjcmVlbicsIHBhdGg6ICdhbmltYXRpb24uY2xvdWRzJyB9LFxuICAgIHsgbmFtZTogJ2NvbXBhY3RUb29scycsIGxhYmVsOiAnQ29tcGFjdCB0b29sIGhpc3RvcnknLCBkZXNjOiAnU3VtbWFyaXplIGNvbnNlY3V0aXZlIHRvb2wgY2FsbHMgaW4gb25lIHJvdycsIHBhdGg6ICdkaXNwbGF5LmNvbXBhY3RUb29sSGlzdG9yeScgfSxcbiAgICB7IG5hbWU6ICdnaXRTdGF0dXMnLCBsYWJlbDogJ0dpdCBpbmZvcm1hdGlvbicsIGRlc2M6ICdTaG93IGJyYW5jaCBhbmQgY2hhbmdlZCBsaW5lIGNvdW50cycsIHBhdGg6ICdkaXNwbGF5LmdpdFN0YXR1cycgfSxcbiAgICB7IG5hbWU6ICd3aWRlU2lkZWJhcicsIGxhYmVsOiAnV2lkZSBzaWRlYmFyJywgZGVzYzogJ01vdmUgcGFuZWxzIGFuZCBzdGF0dXMgZGV0YWlscyB0byBhIHJpZ2h0IHNpZGViYXIgd2hlbiB0aGUgdGVybWluYWwgaXMgd2lkZXIgdGhhbiAxNjAgY29sdW1ucycsIHBhdGg6ICdkaXNwbGF5LndpZGVTaWRlYmFyJyB9LFxuICBdXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiQ29uZmlndXJhdGlvblwiIGhpbnQ9XCJ0YWI6IG5leHQgc2V0dGluZyAgc3BhY2UvZW50ZXI6IGNoYW5nZSAgZXNjOiBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8RmllbGRMaXN0IGZvY3VzZWQ9e2ZvY3VzZWR9IGluaXRpYWxGb2N1cz1cImNsb3Vkc1wiIHNjcm9sbGJhciBmb2N1c1BhZGRpbmc9ezF9PlxuICAgICAgICAgIHtmaWVsZHMubWFwKChmaWVsZCkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIGtleT17ZmllbGQubmFtZX0gbmFtZT17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxDb25maWdGaWVsZCBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZXNbZmllbGQubmFtZV19IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoZmllbGQubmFtZSwgdmFsdWUpfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5yZXNlYXJjaE1vZGVsfSBsYWJlbD1cIlBhcmFsbGVsIHdvcmtlciBtb2RlbFwiIHBhdGg9XCJtb2RlbHMucmVzZWFyY2hXb3JrZXJcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrUmVzZWFyY2hNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInNoZWxsTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5zaGVsbE1vZGVsfSBsYWJlbD1cIlNoZWxsIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5zaGVsbFwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tTaGVsbE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIHtbJ3BhcnRpY2lwYW50QScsICdwYXJ0aWNpcGFudEInXS5tYXAoKHJvbGUpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtgJHtyb2xlfU1vZGVsYH0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlc1tgJHtyb2xlfU1vZGVsYF19IGxhYmVsPXtgUGFydGljaXBhbnQgJHtyb2xlID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgfSBwYXRoPXtgbW9kZWxzLiR7cm9sZX1gfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17KCkgPT4gb25QaWNrUGFydGljaXBhbnRNb2RlbChyb2xlKX0gLz59XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwiZGVsaWJlcmF0aW9uTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5kZWxpYmVyYXRpb25Nb2RlbH0gbGFiZWw9XCJTeW50aGVzaXMgbW9kZWxcIiBwYXRoPVwibW9kZWxzLmRlbGliZXJhdGlvblwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tEZWxpYmVyYXRpb25Nb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoQWdlbnRMaW1pdFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTnVtYmVyRmllbGQgdmFsdWU9e3ZhbHVlcy5yZXNlYXJjaEFnZW50TGltaXR9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoJ3Jlc2VhcmNoQWdlbnRMaW1pdCcsIHZhbHVlKX0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgPC9GaWVsZExpc3Q+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjb3BlVGFicyh7IHNjb3BlcywgYWN0aXZlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAge3Njb3Blcy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgPHRleHQga2V5PXtzfSBzdHlsZT17eyBjb2xvcjogaSA9PT0gYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogaSA9PT0gYWN0aXZlIH19PntgJHtpID4gMCA/ICcgICcgOiAnJ30ke3MgPT09ICdjaGVja291dCcgPyAndGhpcyBjaGVja291dCcgOiBzfWB9PC90ZXh0PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsUGFuZWwoeyBtb2RlbHMsIGN1cnJlbnQsIGRlZmF1bHROYW1lLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UsIHRpdGxlID0gJ1NlbGVjdCBtb2RlbCcsIGhpbnQgPSAnZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZScgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKG1vZGVsc1swXSB8fCBudWxsKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgcmFua2VkTW9kZWxzID0gcmFua0Z1enp5KG1vZGVscywgcXVlcnkoKSwgKHEsIG1vZGVsKSA9PiBmdXp6eVNjb3JlKHEsIG1vZGVsLm5hbWUpKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgY3Vyc29yKCkpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoY3Vyc29yKCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17aGludH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cmFua2VkTW9kZWxzfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbW9kZWxzLi4uXCJcbiAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3J9XG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBzY3JvbGxvZmY9ezF9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2ZmID0gbS5hdmFpbGFibGUgPT09IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiAhb2ZmLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogb2ZmID8gTVVURUQgOiBGRyB9fT57bS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGRlZmF1bHROYW1lICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57JyAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAge29mZiA/IGBuZWVkcyAke20ua2V5SGludH1gIDogbS5wcmljZSA/IGAkJHttLnByaWNlLmlufSBpbiAgJCR7bS5wcmljZS5vdXR9IG91dGAgOiBtLnByb3ZpZGVyID09PSAnY29kZXgnID8gJ3N1YnNjcmlwdGlvbicgOiAncHJpY2UgdW5rbm93bid9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnttLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIaXN0b3J5UGFuZWwoeyBwcm9tcHRzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChwcm9tcHRzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBhbnlNYXRjaCA9IHByb21wdHMuc29tZSgocCkgPT4gZnV6enlTY29yZShxdWVyeSgpLCBwLnRleHQpID49IDApXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJTZWFyY2ggcHJvbXB0c1wiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gZWRpdCAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17cHJvbXB0c31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9tcHRzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIHApID0+IGZ1enp5U2NvcmUocSwgcC50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhwKSA9PiBzZXRQcmV2aWV3KHApfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvblBpY2socC50ZXh0KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhwLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7YW55TWF0Y2ggJiYgcHJldmlldygpID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBwcm9tcHRzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRQaWNrUGFuZWwoeyBlbnRyaWVzLCBzdGF0cywgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKGVudHJpZXNbMF0gfHwgbnVsbClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiUmV3aW5kIHRvIGEgbWVzc2FnZVwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXIgdG8gY2hvb3NlICBlc2MgdG8gY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17ZW50cmllc31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZXNzYWdlcy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIG0udGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsobSkgPT4gc2V0UHJldmlldyhtKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e20udGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3N0YXRzKG0uaW5kZXgpLm1zZ3N9IGFmdGVyYH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YHJld2luZGluZyBoZXJlIGRyb3BzICR7c3RhdHMocHJldmlldygpLmluZGV4KS5tc2dzfSBlbnRyaWVzYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLmVkaXRzLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICBcdTIxQTkgJHttLnRpdGxlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIG1lc3NhZ2VzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRBY3Rpb25QYW5lbCh7IHRhcmdldCwgb3B0aW9ucywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQmFjayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXdpbmQgb3B0aW9uczwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J3RvOiAnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dGFyZ2V0LnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17b3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezR9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICBvbkNhbmNlbD17b25CYWNrfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhvLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e28ubGFiZWx9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke28uZGVzY31gfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlciB0byBjb25maXJtICBlc2MgdG8gcGljayBhIGRpZmZlcmVudCBtZXNzYWdlPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZUVzY2FwZShmb2N1c2VkLCBvbkNsb3NlKSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCgpKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZVBhbmVsKHsgc2Vzc2lvbnMsIHNjb3Blcywgc2NvcGVJbmRleCwgbG9hZGluZywgZm9jdXNlZCwgY3VycmVudElkLCBvblBpY2ssIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHNlc3Npb25zWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRTZXNzaW9ucyA9IHJhbmtGdXp6eShzZXNzaW9ucywgcXVlcnkoKSwgKHEsIHNlc3Npb24pID0+IHtcbiAgICBjb25zdCBjdXN0b21TY29yZSA9IHNlc3Npb24uY3VzdG9tVGl0bGUgPyBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY3VzdG9tVGl0bGUpIDogLTFcbiAgICBpZiAoY3VzdG9tU2NvcmUgPj0gMCkgcmV0dXJuIDIwXzAwMCArIGN1c3RvbVNjb3JlXG4gICAgcmV0dXJuIE1hdGgubWF4KGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5hdXRvbWF0aWNUaXRsZSB8fCBzZXNzaW9uLnRpdGxlKSwgZnV6enlTY29yZShxLCBzZXNzaW9uLmNoZWNrb3V0IHx8ICcnKSlcbiAgfSlcbiAgY29uc3Qgc2hvd0NoZWNrb3V0cyA9IG5ldyBTZXQoc2Vzc2lvbnMubWFwKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNoZWNrb3V0KS5maWx0ZXIoQm9vbGVhbikpLnNpemUgPiAxXG4gIGNvbnN0IHNlbGVjdGVkU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZiAobG9hZGluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzZWxlY3RlZCA9IHByZXZpZXcoKVxuICAgIHJldHVybiBzZXNzaW9ucy5pbmNsdWRlcyhzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IG51bGxcbiAgfVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2Vzc2lvbigpXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgc2VsZWN0ZWQpIHtcbiAgICAgIG9uRGVsZXRlKHNlbGVjdGVkKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJSZXN1bWUgYSBzZXNzaW9uXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIHJlc3VtZSAgY3RybCt4IGRlbGV0ZSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBzZXNzaW9ucy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogc2Vzc2lvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cmFua2VkU2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCcgJiYgIWxvYWRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocykgPT4gc2V0UHJldmlldyhzKX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IChzaG93Q2hlY2tvdXRzID8gcy5jb2xvciA6IG51bGwpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIHtzaG93Q2hlY2tvdXRzICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCwgYmc6IHNlbGVjdGVkID8gbnVsbCA6IHMuY29sb3IgfX0+e2Ake3MuY2hlY2tvdXR9ICBgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcsIGJnOiBzZWxlY3RlZCB8fCBzaG93Q2hlY2tvdXRzID8gbnVsbCA6IHMuY29sb3IgfX0+e3MudGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7cy5oZWFkZXIuaWQgPT09IGN1cnJlbnRJZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+IGN1cnJlbnQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocy5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKSA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnN9ICR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlbGVjdGVkU2Vzc2lvbigpLmF0KX0gICR7c2hvcnRlbkhvbWUoc2VsZWN0ZWRTZXNzaW9uKCkuaGVhZGVyLnJvb3QpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgPiBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50IC0gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGh9IGVhcmxpZXIgbWVzc2FnZXMgb21pdHRlZGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxib3gga2V5PXtgJHttZXNzYWdlLnJvbGV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWVzc2FnZS5yb2xlID09PSAndXNlcicgPyBGRyA6IE1VVEVEIH19PnttZXNzYWdlLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdHJhbnNjcmlwdCBwcmV2aWV3PC90ZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVtb3J5UGFuZWwoeyBtZW1vcmllcywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblRvZ2dsZURpc2FibGVkLCBvbkZvcmdldCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3JJdGVtLCBzZXRDdXJzb3JJdGVtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBwcmV2aWV3ID0gbWVtb3JpZXMuaW5jbHVkZXMoY3Vyc29ySXRlbSgpKSA/IGN1cnNvckl0ZW0oKSA6IG1lbW9yaWVzWzBdIHx8IG51bGxcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKHApID0+IChwID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KSB7XG4gICAgICBvbkZvcmdldChwcmV2aWV3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNZW1vcnlcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlcjogZW5hYmxlL2Rpc2FibGUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBjdHJsK3ggZm9yZ2V0ICh0d2ljZSkgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHttZW1vcmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttZW1vcmllc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVtb3JpZXMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIGAke20ubmFtZX0gJHttLmRlc2NyaXB0aW9ufWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3JJdGVtfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25Ub2dnbGVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgaXRhbGljOiBtLmRpc2FibGVkLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogKG0uZGlzYWJsZWQgPyBNVVRFRCA6IEZHKSB9fT57YCR7bS5kaXNhYmxlZCA/ICcgICAnIDogJyd9JHttLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHttLmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT4gIHN1cHByZXNzZWQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke20uc2NvcGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtwcmV2aWV3LmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT5TVVBQUkVTU0VEPC90ZXh0Pn1cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e3ByZXZpZXcuZGVzY3JpcHRpb24gfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwcmV2aWV3LmJvZHl9PC90ZXh0PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRWZmb3J0UGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gKGwua2V5ID09PSBudWxsID8gJ2RlZmF1bHQnIDogbC5rZXkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoaW5raW5nIGVmZm9ydFwiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2wuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxjQUFjLFdBQVcsZUFBZTtBQUNqRCxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxpQkFBaUIscUJBQUFBLDBCQUF5QjtBQUNuRCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGtCQUFrQjtBQUkzQixTQUFTLGFBQWEsYUFBYSxPQUFPO0FBQ3hDLFFBQU0sUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sTUFBTSxXQUFXLE9BQU8sT0FBTyxTQUFTLE9BQU8sT0FBTyxXQUFXO0FBQzFFO0FBRUEsZUFBZSxZQUFZLEVBQUUsV0FBQUMsWUFBVyxNQUFNLEdBQUc7QUFDL0MsUUFBTSxNQUFNLENBQUMsYUFBYUEsV0FBVSxTQUFTLFFBQVE7QUFDckQsUUFBTSxtQkFBbUIsSUFBSSxPQUFPLElBQUksTUFBTUQsbUJBQWtCLEVBQUUsTUFBTSxNQUFNLElBQUksSUFBSTtBQUN0RixRQUFNLENBQUMsYUFBYSxPQUFPLFVBQVUsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ3pELFlBQVksRUFBRSxNQUFNLENBQUM7QUFBQSxJQUNyQixnQkFBZ0Isa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQUEsSUFDM0MsSUFBSSxZQUFZLElBQUkscUJBQXFCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUFBLEVBQ3pELENBQUM7QUFDRCxTQUFPO0FBQUEsSUFDTCxHQUFHLGNBQWMsYUFBYSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVztBQUFBLE1BQy9ELEdBQUc7QUFBQSxNQUNILFdBQVcsSUFBSSxNQUFNLFFBQVE7QUFBQSxNQUM3QixTQUFTLFFBQVEsTUFBTSxRQUFRO0FBQUEsSUFDakMsRUFBRTtBQUFBLElBQ0YsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXO0FBQUEsTUFDdkIsR0FBRztBQUFBLE1BQ0gsU0FBUyxhQUFhLGFBQWEsS0FBSztBQUFBLE1BQ3hDLFdBQVcsSUFBSSxPQUFPO0FBQUEsTUFDdEIsU0FBUztBQUFBLElBQ1gsRUFBRTtBQUFBLElBQ0YsR0FBRyxXQUFXLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLFdBQVcsTUFBTSxTQUFTLFFBQVEsWUFBWSxFQUFFLEVBQUU7QUFBQSxFQUM5RjtBQUNGO0FBRUEsZUFBc0IsbUJBQW1CO0FBQ3ZDLFFBQU0sVUFBVSxNQUFNLGdCQUFnQjtBQUN0QyxRQUFNQyxhQUFZLENBQUMsR0FBRyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEdBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUU7QUFDOUUsUUFBTSxtQkFBbUIsVUFBVSxNQUFNRCxtQkFBa0IsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJO0FBQ2pGLFFBQU1FLGNBQWEsQ0FBQyxFQUFFLFFBQVEsTUFBTSxJQUFJLENBQUMsTUFBTSxZQUFZLEVBQUUsV0FBQUQsWUFBVyxNQUFNLENBQUM7QUFDL0UsU0FBTyxFQUFFLFdBQUFBLFlBQVcsUUFBUSxNQUFNQyxZQUFXLEdBQUcsa0JBQWtCLFlBQUFBLFlBQVc7QUFDL0U7QUFFTyxTQUFTLGFBQWFDLFNBQVFGLFlBQVcsTUFBTTtBQUNwRCxNQUFJLENBQUMsS0FBTSxRQUFPO0FBQ2xCLFFBQU0sUUFBUUUsUUFBTyxLQUFLLENBQUMsVUFBVSxNQUFNLFNBQVMsSUFBSTtBQUN4RCxNQUFJLE1BQU8sUUFBTztBQUNsQixNQUFJLEtBQUssU0FBUyxHQUFHLEVBQUcsUUFBTyxXQUFXLE1BQU1GLFVBQVM7QUFDekQsUUFBTSxZQUFZRSxRQUFPLE9BQU8sQ0FBQyxVQUFVLE1BQU0sY0FBYyxLQUFLO0FBQ3BFLFNBQU8sVUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsTUFBTSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFDcEQsT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLFNBQVMsQ0FBQyxFQUM5QixLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FDbEM7QUFDUDtBQUVPLFNBQVMsWUFBWSxFQUFFLFFBQUFBLFNBQVEsV0FBQUYsWUFBVyxXQUFXLFdBQVcsR0FBRztBQUN4RSxTQUFPLGFBQWFFLFNBQVFGLFlBQVcsU0FBUyxLQUMxQyxjQUFjRSxRQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sU0FBUyxjQUFjLE1BQU0sU0FBUyxLQUNsRixhQUFhQSxPQUFNO0FBQzFCO0FBaEVBLElBUU07QUFSTjtBQUFBO0FBUUEsSUFBTSxvQkFBb0IsQ0FBQyxVQUFVLGFBQWEsVUFBVSxLQUFLO0FBQUE7QUFBQTs7O0FDUmpFO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUyxRQUFBQyxhQUFZO0FBQ3JCLFNBQVMsV0FBVyxpQkFBaUI7QUFDckMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxlQUFlLGFBQWEsYUFBYSwyQkFBMkI7QUFDN0UsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxhQUFBQyxrQkFBaUI7QUFDMUIsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsMkJBQTJCO0FBR3BDLGVBQWUsWUFBWTtBQUN6QixNQUFJLFFBQVEsTUFBTSxNQUFPLFFBQU87QUFDaEMsTUFBSSxPQUFPO0FBQ1gsbUJBQWlCLFNBQVMsUUFBUSxPQUFPO0FBQ3ZDLFlBQVE7QUFDUixRQUFJLEtBQUssU0FBUyxJQUFRO0FBQUEsRUFDNUI7QUFDQSxTQUFPLEtBQUssTUFBTSxHQUFHLEdBQU07QUFDN0I7QUFFQSxlQUFzQixZQUFZLE1BQU07QUFDdEMsUUFBTSxZQUFZLEtBQUssSUFBSTtBQUMzQixRQUFNLE1BQU0sS0FBSyxRQUFRLE1BQU07QUFBQSxFQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsT0FBTyxNQUFNLE9BQU8sSUFBSTtBQUU5RSxzQkFBb0IsQ0FBQyxLQUFLLFNBQVMsUUFBUSxPQUFPLE1BQU0seUJBQXlCLElBQUksS0FBSyxJQUFJLE9BQU87QUFBQSxDQUFJLENBQUM7QUFFMUcsUUFBTSxFQUFFLFdBQUFDLFlBQVcsUUFBQUMsU0FBUSxrQkFBa0IsV0FBVyxJQUFJLE1BQU0saUJBQWlCO0FBQ25GLE1BQUlELFdBQVUsV0FBVyxHQUFHO0FBQzFCLFlBQVEsT0FBTyxNQUFNLHlFQUF5RTtBQUM5RixXQUFPO0FBQUEsRUFDVDtBQUNBLFFBQU1FLFVBQVMsTUFBTSxXQUFXO0FBRWhDLFFBQU0sUUFBUSxZQUFZLEVBQUUsUUFBQUQsU0FBUSxXQUFBRCxZQUFXLFdBQVcsS0FBSyxPQUFPLFlBQVlFLFFBQU8sYUFBYSxDQUFDO0FBQ3ZHLE1BQUksQ0FBQyxTQUFTLE1BQU0sY0FBYyxPQUFPO0FBQ3ZDLFlBQVEsT0FBTyxNQUFNLHdCQUF3QixLQUFLLFFBQVEsY0FBYyxLQUFLLEtBQUssTUFBTSxFQUFFO0FBQUEsQ0FBSTtBQUM5RixXQUFPO0FBQUEsRUFDVDtBQUNBLFFBQU0sU0FBUyxLQUFLLFdBQVcsTUFBTSxTQUFTLFNBQVM7QUFFdkQsUUFBTUMsUUFBTyxNQUFNLGlCQUFpQixRQUFRLElBQUksQ0FBQztBQUNqRCxRQUFNLFFBQVEsS0FBSyxDQUFDQSxNQUFLLElBQUksV0FBVyxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEYsUUFBTUMsVUFBUyxtQkFBbUI7QUFFbEMsTUFBSTtBQUNKLE1BQUksU0FBUyxDQUFDO0FBQ2QsTUFBSSxLQUFLLFFBQVE7QUFDZixVQUFNLE9BQU8sS0FBSyxPQUFPLFNBQVMsR0FBRyxJQUFJLEtBQUssU0FBU04sTUFBSyxZQUFZSyxNQUFLLElBQUksR0FBRyxHQUFHLEtBQUssTUFBTSxRQUFRO0FBQzFHLFVBQU0sU0FBUyxNQUFNLFlBQVksSUFBSTtBQUNyQyxjQUFVLFlBQVksRUFBRSxNQUFNLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDckQsYUFBUyxPQUFPO0FBQUEsRUFDbEIsT0FBTztBQUNMLGNBQVUsY0FBYyxFQUFFLEtBQUtBLE1BQUssS0FBSyxNQUFNQSxNQUFLLEtBQUssQ0FBQztBQUFBLEVBQzVEO0FBRUEsUUFBTSxVQUFVLENBQUMsVUFBVTtBQUN6QixXQUFPLEtBQUssS0FBSztBQUNqQixZQUFRLE9BQU8sS0FBSztBQUNwQixRQUFJLEtBQUssV0FBWSxTQUFRLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxJQUFJLElBQUk7QUFBQSxFQUN4RTtBQUVBLFFBQU0sWUFBWSxNQUFNLFVBQVU7QUFDbEMsUUFBTSxhQUFhLFlBQVksR0FBRyxLQUFLLE1BQU07QUFBQTtBQUFBO0FBQUEsRUFBc0IsU0FBUyxLQUFLLEtBQUs7QUFDdEYsUUFBTSxFQUFFLFFBQVEsSUFBSSxvQkFBb0IsWUFBWSxvQkFBSSxJQUFJLENBQUM7QUFDN0QsVUFBUUosV0FBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXBFLFFBQU0sVUFBVSxZQUFZLE1BQU07QUFDbEMsUUFBTSxlQUFlLElBQUksSUFBSUksTUFBSyxRQUFRLE1BQU07QUFDaEQsUUFBTSxFQUFFLE9BQU8sU0FBUyxJQUFJLGNBQWM7QUFBQSxJQUN4QyxLQUFLQSxNQUFLO0FBQUEsSUFDVixTQUFTQSxNQUFLO0FBQUEsSUFDZCxRQUFRQSxNQUFLO0FBQUEsSUFDYixRQUFBQztBQUFBLElBQ0EsUUFBUUQsTUFBSztBQUFBLElBQ2IsVUFBVUEsTUFBSyxJQUFJLE1BQU07QUFBQSxJQUN6QixXQUFXLENBQUM7QUFBQSxJQUNaLGNBQWMsS0FBSyxnQkFBZ0I7QUFBQSxFQUNyQyxDQUFDO0FBRUQsTUFBSSxPQUFPO0FBQ1gsTUFBSSxNQUFNLGFBQWEsU0FBUztBQUM5QixXQUFPLE1BQU0sa0JBQWtCLEVBQUUsTUFBTSxNQUFNLElBQUk7QUFDakQsUUFBSSxDQUFDLE1BQU07QUFDVCxjQUFRLE9BQU8sTUFBTSxrRUFBa0U7QUFDdkYsWUFBTSxRQUFRLE1BQU07QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsTUFBSSxTQUFTLE1BQU0sSUFBSSxHQUFHLFNBQVMsS0FBSyxNQUFNLEtBQUssRUFBRSxhQUFhLFFBQVEsRUFBRSxFQUFFO0FBQzlFLE1BQUksV0FBVztBQUNmLFFBQU0sU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUMzQixTQUFTLFFBQVE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsTUFBTTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUSxrQkFBa0I7QUFBQSxNQUN4QixLQUFLQSxNQUFLO0FBQUEsTUFDVixjQUFjQSxNQUFLLGVBQWU7QUFBQSxNQUNsQyxRQUFRQSxNQUFLLE9BQU8sS0FBSztBQUFBLE1BQ3pCLGlCQUFpQixZQUFZLE1BQU1BLE1BQUssT0FBTyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQyxHQUFHQSxNQUFLLElBQUk7QUFBQSxJQUNsRixDQUFDO0FBQUEsSUFDRCxVQUFVLENBQUMsVUFBVTtBQUNuQixVQUFJLE1BQU0sU0FBUyxXQUFZLGFBQVksTUFBTTtBQUNqRCxVQUFJLE1BQU0sU0FBUyxpQkFBaUI7QUFDbEMsY0FBTSxRQUFRLFNBQVMsUUFBUSxHQUFHLEVBQUU7QUFDcEMsWUFBSSxZQUFPLE9BQU8sUUFBUSxNQUFNLEtBQUssU0FBUyxJQUFJLEtBQUssT0FBTyxTQUFTLEVBQUUsRUFBRTtBQUFBLE1BQzdFO0FBQ0EsVUFBSSxNQUFNLFNBQVMsYUFBYyxLQUFJLFlBQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUN0RztBQUFBLEVBQ0YsQ0FBQztBQUVELE1BQUksU0FBVSxTQUFRSixXQUFVLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELGFBQVcsV0FBVyxPQUFPLFNBQVUsU0FBUUEsV0FBVSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEYsYUFBVyxTQUFTLFNBQVMsUUFBUyxTQUFRQSxXQUFVLGFBQWEsS0FBSyxDQUFDO0FBQzNFLGFBQVcsUUFBUUksTUFBSyxRQUFRLFFBQVE7QUFDdEMsUUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUcsU0FBUUosV0FBVSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUFBLEVBQzFFO0FBQ0EsTUFBSSxPQUFPLE1BQU8sU0FBUUEsV0FBVSxTQUFTLEVBQUUsT0FBTyxNQUFNLE1BQU0sT0FBTyxPQUFPLE9BQU8sWUFBWSxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFDN0gsTUFBSSxPQUFPLFlBQWEsU0FBUUEsV0FBVSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBRTFELFFBQU0sVUFBVUssUUFBTyxRQUFRO0FBQy9CLE1BQUksVUFBVSxFQUFHLEtBQUksYUFBYSxPQUFPLG9CQUFvQixZQUFZLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDdkYsRUFBQUEsUUFBTyxRQUFRO0FBQ2YsUUFBTUQsTUFBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU07QUFBQSxFQUFDLENBQUM7QUFHeEMsUUFBTSxRQUFRLE1BQU07QUFFcEIsUUFBTSxPQUFPLE9BQU8sU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsZUFBZSxPQUFPLEVBQUUsWUFBWSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVc7QUFDcEksUUFBTSxVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0EsU0FBUyxRQUFRO0FBQUEsSUFDakIsYUFBYSxRQUFRO0FBQUEsSUFDckIsT0FBTyxNQUFNO0FBQUEsSUFDYixPQUFPLE9BQU87QUFBQSxJQUNkLE1BQU0sVUFBVSxVQUFVRixTQUFRLE1BQU0sSUFBSSxHQUFHLE9BQU8sS0FBSztBQUFBLElBQzNELFdBQVcsU0FBUyxRQUFRO0FBQUEsSUFDNUIsYUFBYSxPQUFPO0FBQUEsSUFDcEIsWUFBWSxLQUFLLElBQUksSUFBSTtBQUFBLEVBQzNCO0FBRUEsTUFBSSxLQUFLLEtBQU0sU0FBUSxPQUFPLE1BQU0sS0FBSyxVQUFVLE9BQU8sSUFBSSxJQUFJO0FBQUEsV0FDekQsS0FBSyxXQUFZLFNBQVEsT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sVUFBVSxHQUFHLFNBQVMsTUFBTSxRQUFXLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUk7QUFBQSxNQUNoSSxTQUFRLE9BQU8sTUFBTSxPQUFPLElBQUk7QUFFckMsU0FBTyxPQUFPLGNBQWMsSUFBSTtBQUNsQztBQTNKQTtBQUFBO0FBY0E7QUFBQTtBQUFBOzs7QUNkQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxXQUFBSSxnQkFBZTtBQUN4QixTQUFTLGNBQUFDLG1CQUFrQjtBQVlwQixTQUFTLG9CQUFvQixNQUFNO0FBQ3hDLFFBQU0sVUFBVSxLQUFLLEtBQUs7QUFDMUIsTUFBSSxDQUFDLFFBQVMsT0FBTSxJQUFJLE1BQU0scUNBQXFDO0FBQ25FLE1BQUksUUFBUSxTQUFTLElBQUksS0FBSyxTQUFTLEtBQUssT0FBTyxFQUFHLE9BQU0sSUFBSSxNQUFNLHVDQUF1QztBQUM3RyxNQUFJLFFBQVEsU0FBUyxLQUFLLEVBQUcsT0FBTSxJQUFJLE1BQU0sa0RBQWtEO0FBQy9GLFNBQU87QUFDVDtBQUVBLGVBQXNCLFNBQVMsTUFBTSxlQUFlLENBQUMsR0FBRztBQUN0RCxRQUFNLFNBQVMsYUFBYSxVQUFVLFFBQVE7QUFDOUMsUUFBTSxTQUFTLGFBQWEsVUFBVSxRQUFRO0FBQzlDLE1BQUk7QUFDRixVQUFNQyxVQUFTLE9BQU8sYUFBYSxjQUFjRCxhQUFZO0FBQzdELFVBQU0sVUFBVSxPQUFPLGFBQWEsb0JBQW9CLGtCQUFrQjtBQUMxRSxRQUFJLFFBQVEsVUFBVSxXQUFXLEVBQUcsT0FBTSxJQUFJLE1BQU0saUVBQWlFO0FBRXJILFVBQU0sa0JBQWtCQyxRQUFPLFFBQVE7QUFDdkMsVUFBTSxRQUFRLFlBQVk7QUFBQSxNQUN4QixRQUFRLFFBQVE7QUFBQSxNQUNoQixXQUFXLFFBQVE7QUFBQSxNQUNuQixXQUFXLEtBQUs7QUFBQSxNQUNoQixZQUFZLG1CQUFtQkEsUUFBTztBQUFBLElBQ3hDLENBQUM7QUFDRCxVQUFNLGdCQUFnQixLQUFLLFNBQVM7QUFDcEMsUUFBSSxDQUFDLFNBQVMsTUFBTSxjQUFjLE9BQU87QUFDdkMsWUFBTSxJQUFJLE1BQU0sa0JBQWtCLGdCQUFnQixjQUFjLGFBQWEsTUFBTSxFQUFFLEVBQUU7QUFBQSxJQUN6RjtBQUVBLFVBQU0sT0FBTyxNQUFNLGFBQWEsVUFBVSxRQUFRLG1CQUFtQjtBQUNyRSxRQUFJLE1BQU0sYUFBYSxXQUFXLENBQUMsS0FBTSxPQUFNLElBQUksTUFBTSwwREFBMEQ7QUFFbkgsVUFBTSxTQUFTLE9BQU8sYUFBYSxXQUFXRixVQUFTO0FBQUEsTUFDckQsU0FBUyxDQUFDLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBSyxPQUFPLENBQUM7QUFBQSxNQUNoRCxPQUFPLENBQUM7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUNWLFdBQVcsTUFBTTtBQUFBLE1BQ2pCLFFBQVEsS0FBSyxXQUFXLE1BQU0sU0FBUyxRQUFRO0FBQUEsTUFDL0M7QUFBQSxNQUNBLFFBQVEsT0FBTztBQUFBLFFBQ2IsVUFBVSxRQUFRLGFBQWEsV0FBVyxVQUFVLFFBQVE7QUFBQSxRQUM1RCxPQUFPLFNBQVMsUUFBUSxJQUFJLFNBQVMsS0FBSztBQUFBLFFBQzFDLEtBQUssUUFBUSxJQUFJO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUNELFFBQUksT0FBTyxNQUFPLE9BQU0sSUFBSSxNQUFNLE9BQU8sS0FBSztBQUM5QyxRQUFJLE9BQU8sWUFBYSxPQUFNLElBQUksTUFBTSxvQ0FBb0M7QUFDNUUsVUFBTSxPQUFPLE9BQU8sU0FDakIsT0FBTyxDQUFDLFlBQVksUUFBUSxTQUFTLGVBQWUsT0FBTyxRQUFRLFlBQVksUUFBUSxFQUN2RixHQUFHLEVBQUUsR0FBRyxXQUFXO0FBQ3RCLFdBQU8sTUFBTSxvQkFBb0IsSUFBSSxJQUFJLElBQUk7QUFDN0MsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFPO0FBQ2QsV0FBTyxNQUFNLFNBQVMsTUFBTSxPQUFPO0FBQUEsQ0FBSTtBQUN2QyxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBckVBLElBS007QUFMTjtBQUFBO0FBR0E7QUFFQSxJQUFNLFNBQVMsQ0FBQyxFQUFFLFVBQVUsT0FBTyxJQUFJLE1BQU07QUFBQTtBQUFBO0FBQUEsc0JBR3ZCLFFBQVE7QUFBQSxXQUNuQixLQUFLO0FBQUEsdUJBQ08sR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNWMUIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxhQUFhOzs7QUNEZixJQUFNLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdCZCxTQUFTLFVBQVUsTUFBTTtBQUM5QixRQUFNLE9BQU8sRUFBRSxNQUFNLGNBQWM7QUFDbkMsUUFBTSxZQUFZLENBQUMsTUFBTSxNQUFNO0FBQzdCLFFBQUksSUFBSSxLQUFLLEtBQUssT0FBUSxPQUFNLElBQUksTUFBTSxHQUFHLElBQUksbUJBQW1CO0FBQ3BFLFdBQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxFQUNuQjtBQUVBLFdBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsVUFBTSxNQUFNLEtBQUssQ0FBQztBQUNsQixRQUFJLFFBQVEsUUFBUSxRQUFRLFdBQVc7QUFDckMsVUFBSSxLQUFLLFNBQVMsY0FBZSxPQUFNLElBQUksTUFBTSxHQUFHLEdBQUcsK0NBQStDO0FBQ3RHLFdBQUssT0FBTztBQUNaLFdBQUssU0FBUyxVQUFVLEtBQUssQ0FBQztBQUM5QjtBQUFBLElBQ0YsV0FBVyxRQUFRLFFBQVEsUUFBUSxXQUFXO0FBQzVDLFVBQUksS0FBSyxTQUFTLGNBQWUsT0FBTSxJQUFJLE1BQU0sR0FBRyxHQUFHLCtDQUErQztBQUN0RyxXQUFLLE9BQU87QUFDWixXQUFLLFNBQVMsVUFBVSxLQUFLLENBQUM7QUFDOUI7QUFBQSxJQUNGLFdBQVcsUUFBUSxTQUFVLE1BQUssT0FBTztBQUFBLGFBQ2hDLFFBQVEsZ0JBQWlCLE1BQUssYUFBYTtBQUFBLGFBQzNDLFFBQVEsUUFBUSxRQUFRLFdBQVc7QUFDMUMsV0FBSyxRQUFRLFVBQVUsS0FBSyxDQUFDO0FBQzdCO0FBQUEsSUFDRixXQUFXLFFBQVEsWUFBWTtBQUM3QixZQUFNLFFBQVEsVUFBVSxLQUFLLENBQUM7QUFDOUIsVUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLFVBQVUsUUFBUSxLQUFLLEVBQUUsU0FBUyxLQUFLLEdBQUc7QUFDN0QsY0FBTSxJQUFJLE1BQU0sbUJBQW1CLEtBQUssaUNBQWlDO0FBQUEsTUFDM0U7QUFDQSxXQUFLLFNBQVM7QUFDZDtBQUFBLElBQ0YsV0FBVyxRQUFRLFlBQVk7QUFDN0IsV0FBSyxTQUFTLFVBQVUsS0FBSyxDQUFDO0FBQzlCO0FBQUEsSUFDRixXQUFXLFFBQVEsb0JBQW9CO0FBQ3JDLFlBQU0sUUFBUSxVQUFVLEtBQUssQ0FBQztBQUM5QixVQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRyxPQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFDeEYsV0FBSyxlQUFlLE9BQU8sS0FBSztBQUNoQyxVQUFJLENBQUMsT0FBTyxjQUFjLEtBQUssWUFBWSxLQUFLLEtBQUssZUFBZSxHQUFHO0FBQ3JFLGNBQU0sSUFBSSxNQUFNLDhDQUE4QztBQUFBLE1BQ2hFO0FBQ0E7QUFBQSxJQUNGLFdBQVcsUUFBUSxZQUFhLE1BQUssT0FBTztBQUFBLGFBQ25DLFFBQVEsWUFBWSxRQUFRLFdBQVksTUFBSyxPQUFPO0FBQUEsYUFDcEQsUUFBUSxRQUFRLFFBQVEsVUFBVyxNQUFLLFFBQVE7QUFBQSxhQUNoRCxRQUFRLFFBQVEsUUFBUSxTQUFVLE1BQUssT0FBTztBQUFBLGFBQzlDLFFBQVEsUUFBUSxRQUFRLFlBQWEsTUFBSyxPQUFPO0FBQUEsUUFDckQsT0FBTSxJQUFJLE1BQU0scUJBQXFCLEdBQUcsR0FBRztBQUFBLEVBQ2xEO0FBRUEsTUFBSSxLQUFLLFNBQVMsY0FBYyxDQUFDLEtBQUssUUFBUSxLQUFLLEVBQUcsT0FBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQ3RHLE1BQUksS0FBSyxTQUFTLFNBQVM7QUFDekIsUUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLEVBQUcsT0FBTSxJQUFJLE1BQU0saUNBQWlDO0FBQzNFLFVBQU0sZUFBZSxDQUFDLEtBQUssUUFBUSxVQUFVLEtBQUssY0FBYyxpQkFBaUIsS0FBSyxVQUFVLFlBQVksS0FBSyxnQkFBZ0Isa0JBQWtCLEVBQUUsS0FBSyxPQUFPO0FBQ2pLLFFBQUksYUFBYyxPQUFNLElBQUksTUFBTSxHQUFHLFlBQVksOEJBQThCO0FBQUEsRUFDakY7QUFDQSxTQUFPO0FBQ1Q7OztBRDdFQTtBQURBLFNBQVMsZ0JBQUFHLHFCQUFvQjtBQUU3QixTQUFTLGNBQUFDLG1CQUFrQjtBQUMzQixTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLG9CQUFBQyx5QkFBd0I7QUFDakMsU0FBUyxzQkFBQUMsMkJBQTBCO0FBQ25DLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsd0JBQXdCOzs7QUVYakMsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxlQUFlLDZCQUE2Qjs7O0FDRjlDLFNBQVMsVUFBVSxNQUFNLFNBQVMsS0FBSyxRQUFRO0FBQ3BELFFBQU0sUUFBUSxLQUFLLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSw4QkFBOEI7QUFDeEUsTUFBSSxDQUFDLE1BQU8sUUFBTztBQUNuQixRQUFNLFFBQVEsU0FBUyxNQUFNLENBQUMsRUFBRSxTQUFTO0FBQ3pDLFFBQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFFLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztBQUM1RCxTQUFPLEVBQUUsT0FBTyxLQUFLLFNBQVMsT0FBTyxRQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUU7QUFDL0Q7QUFFTyxTQUFTLGVBQWUsTUFBTSxPQUFPLE1BQU07QUFDaEQsU0FBTztBQUFBLElBQ0wsTUFBTSxLQUFLLE1BQU0sR0FBRyxNQUFNLEtBQUssSUFBSSxPQUFPLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFBQSxJQUM5RCxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQUEsRUFDN0I7QUFDRjtBQUVPLFNBQVMsY0FBYyxTQUFTLE1BQU0sT0FBTyxJQUFJO0FBQ3RELFFBQU0sU0FBUyxDQUFDLEdBQUksUUFBUSxhQUFhLENBQUMsQ0FBRTtBQUM1QyxNQUFJLEtBQUssU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNO0FBQ3hDLFdBQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLGFBQWEsTUFBTSxPQUFPLENBQUM7QUFBQSxFQUNqRTtBQUNBLFNBQU87QUFDVDs7O0FDckJBLFNBQVMsZ0JBQUFDLGVBQWMsVUFBVSxNQUFNLFFBQVEsZ0JBQWdCO0FBQy9ELFNBQVMsY0FBQUMsYUFBWSxpQkFBaUI7OztBQ0R0QyxTQUFTLG9CQUFvQjtBQUU3QixJQUFNLFdBQVc7QUFBQSxFQUNmLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLElBQUk7QUFBQSxJQUNKLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixJQUFJO0FBQUEsSUFDSixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsSUFBSTtBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVPLElBQUksaUJBQWlCLFNBQVMsS0FBSztBQUNuQyxJQUFJLEtBQUssU0FBUyxLQUFLO0FBQ3ZCLElBQUksVUFBVSxTQUFTLEtBQUs7QUFDNUIsSUFBSSxRQUFRLFNBQVMsS0FBSztBQUMxQixJQUFJLFdBQVcsU0FBUyxLQUFLO0FBQzdCLElBQUksWUFBWSxTQUFTLEtBQUs7QUFDOUIsSUFBSSxNQUFNLFNBQVMsS0FBSztBQUN4QixJQUFJLFFBQVEsU0FBUyxLQUFLO0FBQzFCLElBQUksT0FBTyxTQUFTLEtBQUs7QUFDekIsSUFBSSxZQUFZLFNBQVMsS0FBSztBQUVyQyxJQUFJLGlCQUFpQjtBQUNyQixJQUFJLGlCQUFpQjtBQUVyQixJQUFNLENBQUMsYUFBYSxjQUFjLElBQUksYUFBYSxjQUFjO0FBRTFELElBQU0sU0FBUztBQUVmLFNBQVMsVUFBVSxPQUFPO0FBQy9CLG1CQUFpQixTQUFTO0FBQzFCLGlCQUFlLGtCQUFrQixjQUFjO0FBQ2pEO0FBRU8sU0FBUyxXQUFXLE1BQU07QUFDL0IsbUJBQWlCLFNBQVMsSUFBSSxJQUFJLE9BQU87QUFDekMsUUFBTSxJQUFJLFNBQVMsY0FBYztBQUNqQyxtQkFBaUIsRUFBRTtBQUNuQixPQUFLLEVBQUU7QUFDUCxZQUFVLEVBQUU7QUFDWixVQUFRLEVBQUU7QUFDVixhQUFXLEVBQUU7QUFDYixjQUFZLEVBQUU7QUFDZCxRQUFNLEVBQUU7QUFDUixVQUFRLEVBQUU7QUFDVixTQUFPLEVBQUU7QUFDVCxjQUFZLEVBQUU7QUFDZCxpQkFBZSxrQkFBa0IsRUFBRSxNQUFNO0FBQzNDO0FBRU8sU0FBUyxjQUFjO0FBQzVCLFNBQU87QUFDVDtBQUVPLFNBQVMsY0FBYztBQUM1QixTQUFPLE9BQU8sUUFBUSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDM0U7QUFFTyxTQUFTLGFBQWE7QUFDM0IsU0FBTyxTQUFTLGNBQWMsRUFBRTtBQUNsQzs7O0FEaEVNLFNBQ0UsS0FERjtBQTVCQyxTQUFTLFlBQVksRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFVBQVUsU0FBUyxHQUFHO0FBQ2hGLFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUMsY0FBYSxDQUFDO0FBQ3RDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsY0FBYSxDQUFDLENBQUM7QUFDM0MsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLEVBQUU7QUFDekMsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQSxjQUFhLENBQUM7QUFDOUMsUUFBTSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQzNCLFFBQU0sVUFBVSxNQUFNLFNBQVMsV0FBVyxNQUFNLFVBQVUsTUFBTSxTQUFTLFNBQVMsUUFBUSxDQUFDO0FBQzNGLFFBQU0sVUFBVSxVQUFVLFNBQVMsTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVQyxZQUFXLEdBQUcsS0FBSyxDQUFDO0FBRTlFLFdBQVMsUUFBUSxPQUFPO0FBQ3RCLFVBQU0sT0FBTyxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTTtBQUNoRCxjQUFVLElBQUk7QUFDZCxRQUFJLEtBQUssTUFBTSxPQUFPLFNBQVMsRUFBRyxRQUFPLFNBQVMsSUFBSTtBQUN0RCxZQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLGFBQVMsRUFBRTtBQUNYLGdCQUFZLENBQUM7QUFBQSxFQUNmO0FBRUEsV0FBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxVQUFVO0FBQzFCLGVBQVM7QUFDVCxZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxVQUFVLEVBQUUsR0FDNUU7QUFBQSx5QkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sS0FBSyxFQUFFLEdBQ3pDO0FBQUEsMEJBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUksY0FBSSxJQUFJLElBQUc7QUFBQSxNQUN6RCxPQUFPLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxvQkFBQyxVQUFxQixPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksaUJBQU8sRUFBRSxLQUFLLElBQUksS0FBdkQsS0FBSyxJQUFvRCxDQUFPO0FBQUEsTUFDbEgsb0JBQUMsVUFBTyxPQUFNLFVBQVMsU0FBUyxVQUFVO0FBQUEsT0FDNUM7QUFBQSxJQUNBLG9CQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxHQUFJLGdCQUFNLE9BQU07QUFBQSxJQUN6QztBQUFBLE1BQUM7QUFBQTtBQUFBLFFBRUM7QUFBQSxRQUNBLE9BQU8sTUFBTTtBQUFBLFFBQ2IsZUFBYTtBQUFBLFFBQ2IsZUFBZTtBQUFBLFFBQ2YsV0FBVztBQUFBLFFBQ1gsYUFBYSxNQUFNO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFVBQVUsQ0FBQyxVQUFVO0FBQUUsbUJBQVMsS0FBSztBQUFHLHNCQUFZLENBQUM7QUFBQSxRQUFFO0FBQUEsUUFDdkQsVUFBVSxDQUFDLFVBQVU7QUFDbkIsY0FBSSxNQUFNLFNBQVMsVUFBVTtBQUMzQixnQkFBSSxRQUFRLE9BQVEsU0FBUSxRQUFRLEtBQUssSUFBSSxTQUFTLEdBQUcsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQUEsVUFDL0UsTUFBTyxTQUFRLE1BQU0sU0FBUyxVQUFVLFFBQVEsVUFBVSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFFBQVEsS0FBSyxJQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLElBQUksS0FBSztBQUFBLFFBQ3hLO0FBQUEsUUFDQSxXQUFXLENBQUMsVUFBVTtBQUNwQixjQUFJLE1BQU0sUUFBUSxVQUFVLFFBQVEsUUFBUTtBQUMxQyx3QkFBWSxLQUFLLElBQUksU0FBUyxJQUFJLEdBQUcsUUFBUSxTQUFTLENBQUMsQ0FBQztBQUN4RCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxjQUFJLE1BQU0sUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUN4Qyx3QkFBWSxLQUFLLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGNBQUksTUFBTSxRQUFRLFNBQVMsUUFBUSxRQUFRO0FBQ3pDLHFCQUFTLFFBQVEsS0FBSyxJQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsbUJBQU87QUFBQSxVQUNUO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQSxNQTVCSyxNQUFNO0FBQUEsSUE2QmI7QUFBQSxJQUNDLFFBQVEsU0FBUyxLQUFLO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDdEIsT0FBTztBQUFBLFFBQ1AsVUFBVSxTQUFTO0FBQUEsUUFDbkIsVUFBVTtBQUFBLFFBQ1YsVUFBVTtBQUFBLFFBQ1YsU0FBUztBQUFBLFFBQ1QsWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLE1BQU0sb0JBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxNQUFNLEdBQUksYUFBRyxTQUFTLFlBQU8sSUFBSSxHQUFHLEtBQUssSUFBRztBQUFBO0FBQUEsSUFDM0g7QUFBQSxLQUNGO0FBRUo7OztBRjNFQSxTQUFTLFdBQUFDLGdCQUFlOzs7QUlMeEIsSUFBTSxTQUFTO0FBRVIsU0FBUyxlQUFlLE1BQU07QUFDbkMsU0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFLElBQUksU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFDekQ7QUFFQSxTQUFTLFVBQVUsTUFBTTtBQUN2QixNQUFJLFNBQVM7QUFDYixNQUFJLFNBQVM7QUFDYixNQUFJLGFBQWE7QUFDakIsYUFBVyxTQUFTLEtBQUssU0FBUyxNQUFNLEdBQUc7QUFDekMsUUFBSSxTQUFTLEtBQUssTUFBTSxRQUFRLE1BQU0sS0FBSztBQUMzQyxRQUFJLFdBQVksVUFBUyxXQUFXLE1BQU07QUFDMUMsY0FBVTtBQUNWLFVBQU0sUUFBUSxLQUFLLE1BQU0sTUFBTSxRQUFRLE1BQU0sQ0FBQyxFQUFFLE1BQU07QUFDdEQsVUFBTSxXQUFXLE1BQU0sQ0FBQyxFQUFFLE1BQU0sUUFBUSxJQUFJLENBQUMsS0FBSztBQUNsRCxhQUFTLE9BQU8sUUFBUTtBQUN4QixVQUFNLGdCQUFnQixDQUFDLFVBQVUsU0FBUyxLQUFLLE1BQU07QUFDckQsYUFBUyxPQUFPLFFBQVEsTUFBTSxFQUFFO0FBQ2hDLFFBQUksQ0FBQyxNQUFPLFVBQVMsT0FBTyxRQUFRLFNBQVMsRUFBRTtBQUMvQyxRQUFJLFlBQVksQ0FBQyxjQUFlLFdBQVU7QUFDMUMsaUJBQWEsaUJBQWlCLFFBQVEsUUFBUTtBQUM5QyxRQUFJLFVBQVUsTUFBTyxXQUFVO0FBQy9CLGFBQVMsTUFBTSxRQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQUEsRUFDbEM7QUFDQSxRQUFNLE9BQU8sS0FBSyxNQUFNLE1BQU07QUFDOUIsU0FBTyxVQUFVLGFBQWEsV0FBVyxJQUFJLElBQUk7QUFDbkQ7QUFFQSxTQUFTLFdBQVcsTUFBTTtBQUN4QixTQUFPLEtBQUssUUFBUSxXQUFDLCtCQUF5QixHQUFDLEdBQUUsQ0FBQyxHQUFHLE9BQU8sV0FBVyxRQUFRLE9BQU8sWUFBWSxDQUFDO0FBQ3JHOzs7QUM5QkEsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMscUJBQXFCO0FBRXZCLFNBQVMsc0JBQXNCO0FBQ3BDLFFBQU0sVUFBVSxjQUFjLElBQUksSUFBSSxrQkFBa0IsWUFBWSxHQUFHLENBQUM7QUFDeEUsU0FBTyxXQUFXLE9BQU8sSUFBSSxVQUFVLGNBQWMsSUFBSSxJQUFJLHlDQUF5QyxZQUFZLEdBQUcsQ0FBQztBQUN4SDtBQUVPLFNBQVMsZ0JBQWdCLEVBQUUsV0FBVyxNQUFNO0FBQUMsR0FBRyxVQUFVLE1BQU07QUFBQyxHQUFHLFVBQVUsTUFBTTtBQUFDLEdBQUcsV0FBVyxRQUFRLFVBQVUsT0FBTyxRQUFRLE1BQU0sU0FBUyxNQUFNLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsUUFBUSxNQUFNLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixLQUFRLGlCQUFpQixLQUFNLElBQUksQ0FBQyxHQUFHO0FBQzdSLE1BQUksUUFBUTtBQUNaLE1BQUksU0FBUztBQUNiLE1BQUksV0FBVztBQUNmLE1BQUksYUFBYTtBQUNqQixNQUFJLFFBQVE7QUFDWixNQUFJLFdBQVc7QUFDZixRQUFNQyxXQUFVLG9CQUFJLElBQUk7QUFFeEIsV0FBUyxVQUFVLE9BQU87QUFDeEIsYUFBUztBQUNULGFBQVMsS0FBSztBQUFBLEVBQ2hCO0FBRUEsV0FBUyxNQUFNLFFBQVEsSUFBSSxNQUFNLHFCQUFxQixHQUFHO0FBQ3ZELFVBQU0sV0FBVztBQUNqQixZQUFRO0FBQ1IsWUFBUTtBQUNSLGVBQVcsU0FBU0EsU0FBUSxPQUFPLEdBQUc7QUFDcEMsbUJBQWEsTUFBTSxLQUFLO0FBQ3hCLFlBQU0sT0FBTyxLQUFLO0FBQUEsSUFDcEI7QUFDQSxJQUFBQSxTQUFRLE1BQU07QUFDZCxjQUFVLE1BQU0sSUFBSTtBQUNwQixjQUFVLEtBQUs7QUFDZixjQUFVLE1BQU07QUFBQSxFQUNsQjtBQUVBLFdBQVMsUUFBUSxJQUFJLFNBQVM7QUFDNUIsV0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsWUFBTSxRQUFRLFdBQVcsTUFBTSxNQUFNLElBQUksTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLE9BQU87QUFDL0UsTUFBQUEsU0FBUSxJQUFJLElBQUksRUFBRSxTQUFTLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDNUMsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLE9BQU8sSUFBSSxTQUFTO0FBQzNCLFVBQU0sUUFBUUEsU0FBUSxJQUFJLEVBQUU7QUFDNUIsUUFBSSxDQUFDLE1BQU87QUFDWixJQUFBQSxTQUFRLE9BQU8sRUFBRTtBQUNqQixpQkFBYSxNQUFNLEtBQUs7QUFDeEIsUUFBSSxRQUFRLE1BQU8sT0FBTSxPQUFPLElBQUksTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLFFBQ25ELE9BQU0sUUFBUSxPQUFPO0FBQUEsRUFDNUI7QUFFQSxXQUFTLE9BQU87QUFDZCxRQUFJLE1BQU8sUUFBTztBQUNsQixRQUFJLGFBQWEsWUFBWSxTQUFTLFFBQVMsT0FBTSxJQUFJLE1BQU0seUNBQXlDO0FBQ3hHLFVBQU0sV0FBVyxPQUFPO0FBQ3hCLFlBQVE7QUFDUixZQUFRLFFBQVEsU0FBUyxjQUFjO0FBQ3ZDLFFBQUksU0FBUztBQUNiLGFBQVMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVO0FBQ3BDLFVBQUksVUFBVSxTQUFVO0FBQ3hCLGdCQUFVLE1BQU0sU0FBUztBQUN6QixVQUFJLE9BQU8sU0FBUyxPQUFPLEtBQU0sUUFBTyxNQUFNLElBQUksTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRixVQUFJO0FBQ0osY0FBUSxLQUFLLE9BQU8sUUFBUSxJQUFJLE1BQU0sR0FBRztBQUN2QyxjQUFNLE9BQU8sT0FBTyxNQUFNLEdBQUcsRUFBRTtBQUMvQixpQkFBUyxPQUFPLE1BQU0sS0FBSyxDQUFDO0FBQzVCLFlBQUk7QUFDSixZQUFJO0FBQUUsb0JBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxRQUFFLFFBQVE7QUFBRTtBQUFBLFFBQVM7QUFDcEQsWUFBSSxRQUFRLFdBQVcsU0FBUztBQUM5QixjQUFJLFdBQVcsZUFBZSxPQUFPLFNBQVMsUUFBUSxLQUFLLEVBQUcsU0FBUSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDL0csV0FBVyxRQUFRLFdBQVcsUUFBUyxRQUFPLFNBQVMsT0FBTztBQUFBLGlCQUNyRCxRQUFRLFdBQVcsU0FBUztBQUNuQyxnQkFBTSxRQUFRLElBQUksTUFBTSxRQUFRLFdBQVcsa0JBQWtCO0FBQzdELGdCQUFNLFNBQVNBLFNBQVEsT0FBTztBQUM5QixnQkFBTSxLQUFLO0FBQ1gsY0FBSSxDQUFDLE9BQVEsU0FBUSxNQUFNLE9BQU87QUFBQSxRQUNwQyxXQUFXLFFBQVEsTUFBTSxLQUFNLFFBQU8sUUFBUSxJQUFJLE9BQU87QUFBQSxNQUMzRDtBQUFBLElBQ0YsQ0FBQztBQUNELGFBQVMsT0FBTyxHQUFHLFFBQVEsTUFBTTtBQUFBLElBQUMsQ0FBQztBQUNuQyxVQUFNQyxVQUFTLENBQUMsVUFBVTtBQUN4QixVQUFJLFVBQVUsU0FBVTtBQUN4QixZQUFNLFNBQVNELFNBQVEsT0FBTztBQUM5QixZQUFNLFlBQVksV0FBVztBQUM3QixZQUFNLEtBQUs7QUFDWCxVQUFJLENBQUMsVUFBVSxVQUFXLFNBQVEsTUFBTSxPQUFPO0FBQUEsSUFDakQ7QUFDQSxhQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVVDLFFBQU8sSUFBSSxNQUFNLGlDQUFpQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbkcsYUFBUyxNQUFNLEdBQUcsU0FBU0EsT0FBTTtBQUNqQyxhQUFTLEdBQUcsUUFBUSxNQUFNQSxRQUFPLElBQUksTUFBTSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3RFLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxRQUFRLElBQUk7QUFDbkIsVUFBTSxLQUFLLEVBQUU7QUFDYixVQUFNLFNBQVMsUUFBUSxJQUFJLGNBQWM7QUFDekMsUUFBSTtBQUFFLFlBQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUFBLENBQUk7QUFBQSxJQUFFLFNBQVMsT0FBTztBQUFFLFlBQU0sS0FBSztBQUFBLElBQUU7QUFDMUYsV0FBTztBQUFBLEVBQ1Q7QUFFQSxpQkFBZSxVQUFVO0FBQ3ZCLFFBQUksU0FBVTtBQUNkLFFBQUk7QUFBRSxZQUFNLEtBQUs7QUFBQSxJQUFFLFFBQVE7QUFBQSxJQUFDO0FBQUEsRUFDOUI7QUFFQSxpQkFBZSxRQUFRO0FBQ3JCLFFBQUksWUFBWSxXQUFXLE9BQVE7QUFDbkMsVUFBTSxRQUFRLEVBQUU7QUFDaEIsY0FBVSxTQUFTO0FBQ25CLFFBQUk7QUFDRixZQUFNLEtBQUs7QUFDWCxVQUFJLFVBQVUsV0FBWTtBQUMxQixnQkFBVSxVQUFVO0FBQ3BCLFlBQU0sUUFBUSxPQUFPO0FBQ3JCLFVBQUksVUFBVSxXQUFZLFdBQVUsV0FBVztBQUFBLElBQ2pELFNBQVMsT0FBTztBQUNkLFVBQUksVUFBVSxXQUFZO0FBQzFCLFlBQU0sS0FBSztBQUNYLGNBQVEsTUFBTSxPQUFPO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsaUJBQWUsT0FBTztBQUNwQixRQUFJLFdBQVcsWUFBYSxRQUFPO0FBQ25DLFVBQU0sUUFBUTtBQUNkLGNBQVUsY0FBYztBQUN4QixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFVBQUksVUFBVSxXQUFZLFFBQU87QUFDakMsZ0JBQVUsTUFBTTtBQUNoQixhQUFPLGVBQWUsT0FBTyxRQUFRLEVBQUU7QUFBQSxJQUN6QyxTQUFTLE9BQU87QUFDZCxVQUFJLFVBQVUsWUFBWTtBQUN4QixjQUFNLEtBQUs7QUFDWCxnQkFBUSxNQUFNLE9BQU87QUFBQSxNQUN2QjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLGlCQUFlLFNBQVM7QUFDdEIsVUFBTSxRQUFRLEVBQUU7QUFDaEIsUUFBSSxXQUFXLE9BQVE7QUFDdkIsUUFBSSxXQUFXLFlBQWEsUUFBTyxNQUFNO0FBQ3pDLGNBQVUsWUFBWTtBQUN0QixRQUFJO0FBQ0YsWUFBTSxRQUFRLFFBQVE7QUFDdEIsVUFBSSxVQUFVLFdBQVksV0FBVSxNQUFNO0FBQUEsSUFDNUMsU0FBUyxPQUFPO0FBQ2QsVUFBSSxVQUFVLFdBQVksT0FBTSxLQUFLO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBRUEsV0FBUyxVQUFVO0FBQ2pCLGVBQVc7QUFDWCxNQUFFO0FBQ0YsVUFBTTtBQUFBLEVBQ1I7QUFFQSxTQUFPLEVBQUUsU0FBUyxPQUFPLE1BQU0sUUFBUSxTQUFTLElBQUksU0FBUztBQUFFLFdBQU87QUFBQSxFQUFPLEVBQUU7QUFDakY7OztBQ25LQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUMxQixTQUFTLFNBQVMsV0FBVyxVQUFVO0FBQ3ZDLFNBQVMsY0FBYztBQUN2QixTQUFTLGNBQWM7QUFDdkIsU0FBUyxZQUFZO0FBRXJCLElBQU0sVUFBVSxVQUFVLFFBQVE7QUFDbEMsSUFBTSxjQUFjLG9CQUFJLElBQUk7QUFDNUIsUUFBUSxLQUFLLFFBQVEsTUFBTTtBQUN6QixhQUFXLE9BQU8sWUFBYSxRQUFPLEtBQUssRUFBRSxXQUFXLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDN0UsQ0FBQztBQUVELElBQU0sWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQmxCLElBQU0sZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUXRCLGVBQXNCLG1CQUFtQixFQUFFLFdBQVcsUUFBUSxVQUFVLE1BQU0sUUFBUSxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsR0FBRztBQUMvRyxNQUFJLElBQUksa0JBQWtCLElBQUksUUFBUyxPQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFDbEcsUUFBTSxVQUFVLEVBQUUsVUFBVSxVQUFVLFNBQVMsS0FBTyxXQUFXLEtBQUssT0FBTyxLQUFLO0FBQ2xGLE1BQUk7QUFDSixNQUFJO0FBQ0YsUUFBSSxhQUFhLFVBQVU7QUFDekIsWUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sY0FBYyxNQUFNLFNBQVMsR0FBRyxPQUFPO0FBQ3hGLGFBQU8sT0FBTyxLQUFLLE9BQU8sU0FBUyxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQUEsSUFDdkQsV0FBVyxhQUFhLFNBQVM7QUFDL0IsWUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLElBQUksa0JBQWtCLENBQUMsY0FBYyxtQkFBbUIsUUFBUSxZQUFZLGFBQWEsR0FBRyxPQUFPO0FBQzVILGFBQU8sT0FBTyxLQUFLLE9BQU8sU0FBUyxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQUEsSUFDdkQsV0FBVyxhQUFhLFNBQVM7QUFDL0IsWUFBTSxVQUFVLFFBQVEsSUFBSSxlQUFlO0FBQzNDLFlBQU0sVUFBVSxVQUFVLGFBQWE7QUFDdkMsWUFBTSxFQUFFLFFBQVEsTUFBTSxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLGFBQWEsTUFBTSxXQUFXLElBQUksR0FBRyxPQUFPO0FBQ3JJLFVBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRSxNQUFNLEtBQUssRUFBRSxTQUFTLFdBQVcsRUFBRyxRQUFPO0FBQ2pFLFlBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxJQUFJLFNBQVMsVUFBVSxDQUFDLFVBQVUsYUFBYSxjQUFjLElBQUksQ0FBQyxjQUFjLGFBQWEsTUFBTSxhQUFhLElBQUksR0FBRyxPQUFPO0FBQ3ZKLGFBQU8sT0FBTyxLQUFLLE1BQU07QUFBQSxJQUMzQixPQUFPO0FBQ0wsWUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBQUEsSUFDckU7QUFBQSxFQUNGLFNBQVMsT0FBTztBQUNkLFFBQUksTUFBTSxTQUFTLFNBQVUsT0FBTSxJQUFJLE1BQU0sNENBQTRDLElBQUksa0JBQWtCLGlCQUFpQixhQUFhLFVBQVUsVUFBVSw2QkFBNkI7QUFDOUwsVUFBTTtBQUFBLEVBQ1I7QUFDQSxNQUFJLENBQUMsS0FBSyxPQUFRLFFBQU87QUFDekIsTUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsRUFBRSxPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRyxPQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFDdkksUUFBTSxNQUFNLE1BQU0sUUFBUSxLQUFLLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztBQUMzRCxjQUFZLElBQUksR0FBRztBQUNuQixRQUFNLFVBQVUsWUFBWTtBQUMxQixVQUFNLEdBQUcsS0FBSyxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUM5QyxnQkFBWSxPQUFPLEdBQUc7QUFBQSxFQUN4QjtBQUNBLFFBQU0sT0FBTyxLQUFLLEtBQUssZUFBZTtBQUN0QyxNQUFJO0FBQ0YsVUFBTSxVQUFVLE1BQU0sTUFBTSxFQUFFLE1BQU0sSUFBTSxDQUFDO0FBQzNDLFdBQU8sRUFBRSxNQUFNLFFBQVE7QUFBQSxFQUN6QixTQUFTLE9BQU87QUFDZCxVQUFNLFFBQVE7QUFDZCxVQUFNO0FBQUEsRUFDUjtBQUNGOzs7QUM5RU8sU0FBUyxxQkFBcUIsRUFBRSxXQUFXLFVBQVUsYUFBYSxVQUFVLFFBQVEsR0FBRztBQUM1RixNQUFJQyxXQUFVO0FBQ2QsU0FBTyxlQUFlLGFBQWE7QUFDakMsUUFBSUEsU0FBUztBQUNiLElBQUFBLFdBQVU7QUFDVixVQUFNLFNBQVMsU0FBUztBQUN4QixRQUFJO0FBQ0YsWUFBTSxRQUFRLE1BQU0sVUFBVTtBQUM5QixVQUFJLENBQUMsT0FBTztBQUNWLGdCQUFRLDJCQUEyQjtBQUNuQztBQUFBLE1BQ0Y7QUFDQSxZQUFNLFVBQVUsU0FBUztBQUN6QixVQUFJLFFBQVEsYUFBYSxPQUFPLFlBQVksUUFBUSxZQUFZLE9BQU8sV0FBVyxRQUFRLFVBQVUsT0FBTyxTQUFTLFFBQVEsV0FBVyxPQUFPLFFBQVE7QUFDcEosY0FBTSxNQUFNLFFBQVE7QUFDcEIsZ0JBQVEsaURBQWlEO0FBQ3pEO0FBQUEsTUFDRjtBQUNBLFlBQU0sUUFBUSxZQUFZLE1BQU0sSUFBSTtBQUNwQyxVQUFJLENBQUMsT0FBTztBQUNWLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGNBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzNDO0FBQ0EsWUFBTSxTQUFTLE9BQU8sTUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNO0FBQ2xELFlBQU0sUUFBUSxPQUFPLE1BQU0sTUFBTSxPQUFPLE1BQU07QUFDOUMsZUFBUyxTQUFTLFFBQVEsT0FBTyxPQUFPLFNBQVMsTUFBTSxNQUFNO0FBQUEsSUFDL0QsU0FBUyxPQUFPO0FBQ2QsY0FBUSwyQkFBMkIsTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUNwRCxVQUFFO0FBQ0EsTUFBQUEsV0FBVTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0Y7OztBQ2hDTyxTQUFTLHFCQUFxQixFQUFFLFdBQVcsVUFBVSxTQUFTLEdBQUc7QUFDdEUsTUFBSSxRQUFRO0FBQ1osTUFBSSxhQUFhO0FBRWpCLFdBQVMsTUFBTSxFQUFFLE9BQU8sT0FBTyxHQUFHO0FBQ2hDLFFBQUksVUFBVSxXQUFXLE9BQVE7QUFDakMsWUFBUSxFQUFFLE9BQU8sT0FBTztBQUN4QixNQUFFO0FBQ0YsU0FBSyxVQUFVLE1BQU07QUFBQSxFQUN2QjtBQUVBLGlCQUFlLE9BQU87QUFDcEIsVUFBTSxRQUFRO0FBQ2QsVUFBTSxTQUFTO0FBQ2YsVUFBTSxPQUFPLE1BQU0sVUFBVSxLQUFLO0FBQ2xDLFFBQUksVUFBVSxjQUFjLENBQUMsVUFBVSxRQUFRLFFBQVEsU0FBUyxNQUFNLE9BQU8sTUFBTztBQUNwRixVQUFNLFNBQVMsT0FBTyxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU07QUFDbEQsVUFBTSxPQUFPLFFBQVEsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU07QUFDaEYsVUFBTSxRQUFRLE9BQU8sTUFBTSxNQUFNLE9BQU8sTUFBTTtBQUM5QyxVQUFNLFFBQVEsUUFBUSxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxLQUFLLElBQUksTUFBTTtBQUN2RixhQUFTLFNBQVMsT0FBTyxPQUFPLFFBQVEsS0FBSztBQUM3QyxZQUFRO0FBQUEsRUFDVjtBQUVBLFdBQVMsU0FBUztBQUNoQixNQUFFO0FBQ0YsWUFBUTtBQUNSLFNBQUssVUFBVSxPQUFPO0FBQUEsRUFDeEI7QUFFQSxXQUFTLE9BQU8sT0FBTztBQUNyQixRQUFJLFVBQVUsV0FBVyxPQUFRLFFBQU87QUFDeEMsUUFBSSxNQUFNLFFBQVEsWUFBYSxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQU0sUUFBTztBQUFBLGFBQy9ELE1BQU0sUUFBUSxZQUFZLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxRQUFRLFVBQVUsV0FBVyxZQUFhLE1BQUssS0FBSztBQUM5RyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sRUFBRSxPQUFPLE1BQU0sUUFBUSxPQUFPO0FBQ3ZDOzs7QUN0Q08sU0FBUyx5QkFBeUIsRUFBRSxlQUFBQyxnQkFBZSxVQUFVLGFBQWEsVUFBVSxTQUFTLFdBQVcsTUFBTTtBQUFDLEVBQUUsR0FBRztBQUN6SCxNQUFJQyxXQUFVO0FBQ2QsU0FBTyxlQUFlLGVBQWU7QUFDbkMsUUFBSUEsU0FBUztBQUNiLElBQUFBLFdBQVU7QUFDVixhQUFTLFdBQVc7QUFDcEIsVUFBTSxTQUFTLFNBQVM7QUFDeEIsUUFBSTtBQUNGLFlBQU0sUUFBUSxNQUFNRCxlQUFjO0FBQ2xDLFVBQUksQ0FBQyxNQUFPO0FBQ1osWUFBTSxVQUFVLFNBQVM7QUFDekIsVUFBSSxRQUFRLGFBQWEsT0FBTyxZQUFZLFFBQVEsWUFBWSxPQUFPLFdBQVcsUUFBUSxVQUFVLE9BQU8sU0FBUyxRQUFRLFdBQVcsT0FBTyxRQUFRO0FBQ3BKLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGdCQUFRLGdEQUFnRDtBQUN4RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFFBQVEsWUFBWSxNQUFNLElBQUk7QUFDcEMsVUFBSSxDQUFDLE9BQU87QUFDVixjQUFNLE1BQU0sUUFBUTtBQUNwQixjQUFNLElBQUksTUFBTSx5QkFBeUI7QUFBQSxNQUMzQztBQUNBLFlBQU0sU0FBUyxPQUFPLE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTTtBQUNsRCxZQUFNLFFBQVEsT0FBTyxNQUFNLE1BQU0sT0FBTyxNQUFNO0FBQzlDLGVBQVMsU0FBUyxRQUFRLE9BQU8sT0FBTyxTQUFTLE1BQU0sTUFBTTtBQUFBLElBQy9ELFNBQVMsT0FBTztBQUNkLGNBQVEsMEJBQTBCLE1BQU0sT0FBTyxFQUFFO0FBQUEsSUFDbkQsVUFBRTtBQUNBLE1BQUFDLFdBQVU7QUFDVixlQUFTLE1BQU07QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFDRjs7O0FDL0JBLFNBQVMsWUFBQUMsaUJBQWdCO0FBQ3pCLFNBQVMsV0FBQUMsVUFBUyxjQUFjO0FBQ2hDLFNBQVMsY0FBQUMsbUJBQWtCO0FBQzNCLFNBQVMsVUFBQUMsZUFBYztBQUN2QixTQUFTLFFBQUFDLGFBQVk7QUFFckIsSUFBSSxhQUFhO0FBRWpCLGVBQWUsbUJBQW1CO0FBQ2hDLGlCQUFlLE1BQU1ILFNBQVFHLE1BQUtELFFBQU8sR0FBRyxlQUFlLENBQUM7QUFDNUQsU0FBTztBQUNUO0FBRUEsZUFBc0IsZ0JBQWdCO0FBQ3BDLE1BQUksUUFBUSxhQUFhLFNBQVUsT0FBTSxJQUFJLE1BQU0sMkNBQTJDO0FBQzlGLFFBQU0sT0FBT0MsTUFBSyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsS0FBSyxJQUFJLENBQUMsTUFBTTtBQUN2RSxRQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNyQyxJQUFBSixVQUFTLGlCQUFpQixDQUFDLE1BQU0sTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVO0FBQ3ZELFVBQUksQ0FBQyxTQUFTLENBQUNFLFlBQVcsSUFBSSxFQUFHLFNBQVE7QUFBQSxVQUNwQyxRQUFPLEtBQUs7QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0QsTUFBSSxDQUFDQSxZQUFXLElBQUksRUFBRyxRQUFPO0FBQzlCLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLFNBQVMsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLE1BQU07QUFBQSxJQUFDLENBQUM7QUFBQSxFQUM1QztBQUNGOzs7QUMzQk8sU0FBUyxzQkFBc0I7QUFDcEMsTUFBSSxPQUFPO0FBQ1gsTUFBSSxhQUFhLENBQUM7QUFFbEIsV0FBUyxPQUFPLE9BQU8sYUFBYTtBQUNsQyxRQUFJLFFBQVE7QUFDWixXQUFPLFFBQVEsS0FBSyxVQUFVLFFBQVEsTUFBTSxVQUFVLEtBQUssS0FBSyxNQUFNLE1BQU0sS0FBSyxFQUFHO0FBQ3BGLFFBQUksTUFBTSxLQUFLO0FBQ2YsUUFBSSxVQUFVLE1BQU07QUFDcEIsV0FBTyxNQUFNLFNBQVMsVUFBVSxTQUFTLEtBQUssTUFBTSxDQUFDLE1BQU0sTUFBTSxVQUFVLENBQUMsR0FBRztBQUM3RTtBQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sUUFBUSxVQUFVO0FBQ3hCLGlCQUFhLFdBQVcsUUFBUSxDQUFDLGNBQWM7QUFDN0MsVUFBSSxVQUFVLE9BQU8sTUFBTyxRQUFPLENBQUMsU0FBUztBQUM3QyxVQUFJLFVBQVUsU0FBUyxJQUFLLFFBQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPLFVBQVUsUUFBUSxPQUFPLEtBQUssVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUNoSCxhQUFPLENBQUM7QUFBQSxJQUNWLENBQUM7QUFDRCxXQUFPO0FBQ1AsVUFBTSxVQUFVLENBQUMsR0FBRyxLQUFLLFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRO0FBQzdELGVBQVcsU0FBUyxTQUFTO0FBQzNCLFlBQU0sYUFBYSxZQUFZLElBQUksTUFBTSxDQUFDLENBQUM7QUFDM0MsVUFBSSxZQUFZLFNBQVMsT0FBUTtBQUNqQyxZQUFNLE9BQU8sV0FBVztBQUN4QixZQUFNLFNBQVMsS0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFO0FBQ3RDLG1CQUFhLFdBQVcsSUFBSSxDQUFDLGNBQWMsVUFBVSxTQUFTLE1BQU0sUUFBUSxNQUFNLENBQUMsRUFBRSxTQUNqRixFQUFFLEdBQUcsV0FBVyxPQUFPLFVBQVUsUUFBUSxRQUFRLEtBQUssVUFBVSxNQUFNLE9BQU8sSUFDN0UsU0FBUztBQUNiLGFBQU8sS0FBSyxNQUFNLEdBQUcsTUFBTSxLQUFLLElBQUksT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLE1BQU0sQ0FBQyxFQUFFLE1BQU07QUFDbkYsaUJBQVcsS0FBSyxFQUFFLE9BQU8sTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLEtBQUssUUFBUSxhQUFhLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFBQSxJQUMvRjtBQUNBLGVBQVcsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQzNDLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxVQUFVO0FBQ2pCLFFBQUksUUFBUTtBQUNaLGVBQVcsYUFBYSxDQUFDLEdBQUcsVUFBVSxFQUFFLFFBQVEsR0FBRztBQUNqRCxjQUFRLE1BQU0sTUFBTSxHQUFHLFVBQVUsS0FBSyxJQUFJLFVBQVUsY0FBYyxNQUFNLE1BQU0sVUFBVSxHQUFHO0FBQUEsSUFDN0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sRUFBRSxRQUFRLFFBQVE7QUFDM0I7OztBQzdDQSxJQUFNLE9BQU87QUFDYixJQUFNLFFBQVE7QUFFUCxTQUFTLFlBQVksUUFBUSxPQUFPO0FBQ3pDLFNBQU8sQ0FBQyxHQUFHLE9BQU8sTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyRTtBQUVPLFNBQVMsbUJBQW1CLFFBQVEsUUFBUTtBQUNqRCxNQUFJLFdBQVcsT0FBUSxRQUFPO0FBQzlCLE1BQUksV0FBVyxZQUFhLFFBQU8sSUFBSSxNQUFNO0FBQzdDLFFBQU0sVUFBVSxDQUFDLEdBQUcsTUFBTSxLQUFLLElBQUksR0FBRyxRQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUYsU0FBTyxJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6Rjs7O0FaRUEsU0FBUyxnQkFBQUcsZUFBYyxRQUFBQyxPQUFNLGFBQWEsYUFBQUMsWUFBVyxTQUFTLFdBQUFDLFVBQVMsWUFBQUMsV0FBVSxZQUFBQyxXQUFVLGNBQWMsZUFBZSxjQUFBQyxhQUFZLFlBQUFDLFdBQVUsYUFBQUMsWUFBVyxZQUFBQyxXQUFVLGFBQUFDLFlBQVcsY0FBYyxnQkFBZ0I7QUFDNU0sU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxjQUFjLGVBQWUseUJBQXlCO0FBQy9ELFNBQVMsYUFBYSxtQkFBbUI7QUFDekMsU0FBUyxvQkFBb0IseUJBQXlCO0FBQ3RELFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsZ0JBQWdCLG9CQUFvQixjQUFjLGNBQWMsaUJBQWlCO0FBQzFGLFNBQVMsYUFBYSwyQkFBMkI7QUFDakQsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxlQUFlLHNCQUFzQjtBQUM5QyxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGNBQUFDLG1CQUFrQjtBQUMzQixTQUFTLG1CQUFtQix1QkFBdUI7QUFDbkQsU0FBUyxtQkFBbUIsZ0NBQWdDO0FBQzVELFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsaUJBQWlCOzs7QWFoQzFCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsZ0JBQUFDLHFCQUFvQjtBQUc3QixJQUFNLFFBQVE7QUFBQSxFQUNaLElBQUk7QUFBQSxFQUFNLEtBQUs7QUFBQSxFQUFNLEtBQUs7QUFBQSxFQUFNLEtBQUs7QUFBQSxFQUFPLElBQUk7QUFBQSxFQUFNLEtBQUs7QUFBQSxFQUMzRCxNQUFNO0FBQUEsRUFBUSxPQUFPO0FBQUEsRUFBUSxJQUFJO0FBQUEsRUFBTSxJQUFJO0FBQUEsRUFBVSxJQUFJO0FBQUEsRUFBUSxJQUFJO0FBQUEsRUFDckUsSUFBSTtBQUFBLEVBQVEsR0FBRztBQUFBLEVBQUssR0FBRztBQUFBLEVBQUssS0FBSztBQUFBLEVBQU8sTUFBTTtBQUFBLEVBQVEsS0FBSztBQUFBLEVBQzNELE1BQU07QUFBQSxFQUFRLEtBQUs7QUFBQSxFQUFPLElBQUk7QUFBQSxFQUFRLE1BQU07QUFBQSxFQUFRLEtBQUs7QUFBQSxFQUN6RCxLQUFLO0FBQUEsRUFBUSxNQUFNO0FBQUEsRUFBUSxNQUFNO0FBQUEsRUFBUSxLQUFLO0FBQUEsRUFBTyxRQUFRO0FBQy9EO0FBRU8sU0FBUyxZQUFZLE1BQU07QUFDaEMsUUFBTSxNQUFNLE9BQU8sSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZO0FBQ3RELFNBQU8sTUFBTSxHQUFHLEtBQUs7QUFDdkI7QUFFQSxJQUFNLFFBQVEsb0JBQUksSUFBSTtBQUN0QixJQUFNLFVBQVUsb0JBQUksSUFBSTtBQUN4QixJQUFNLFNBQVMsb0JBQUksSUFBSTtBQUN2QixJQUFNLENBQUMsU0FBUyxVQUFVLElBQUlDLGNBQWEsQ0FBQztBQUVyQyxJQUFNLG1CQUFtQjtBQUV6QixTQUFTLFVBQVUsTUFBTSxNQUFNO0FBQ3BDLFFBQU0sV0FBVyxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPO0FBQ3BELFFBQU1DLFNBQVEsV0FBVztBQUN6QixTQUFPLEtBQ0osTUFBTSxJQUFJLEVBQ1YsSUFBSSxDQUFDLFNBQVM7QUFDYixVQUFNLE1BQU0sR0FBR0EsTUFBSztBQUFBLEVBQUssUUFBUTtBQUFBLEVBQUssSUFBSTtBQUMxQyxRQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUcsUUFBTyxNQUFNLElBQUksR0FBRztBQUN4QyxTQUFLLE1BQU0sVUFBVUEsUUFBTyxHQUFHO0FBQy9CLFdBQU87QUFBQSxFQUNULENBQUMsRUFDQSxLQUFLLElBQUk7QUFDZDtBQUVBLFNBQVMsS0FBSyxNQUFNLE1BQU1BLFFBQU8sS0FBSztBQUNwQyxNQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUc7QUFDdEIsVUFBUSxJQUFJLEdBQUc7QUFDZixhQUFXLE1BQU0sTUFBTUEsTUFBSyxFQUN6QixLQUFLLENBQUMsU0FBUyxNQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUN0RCxNQUFNLE1BQU07QUFDWCxXQUFPLElBQUksSUFBSTtBQUNmLFVBQU0sSUFBSSxLQUFLLElBQUk7QUFBQSxFQUNyQixDQUFDLEVBQ0EsUUFBUSxNQUFNO0FBQ2IsWUFBUSxPQUFPLEdBQUc7QUFDbEIsZUFBVyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQUEsRUFDekIsQ0FBQztBQUNMOzs7QWJqQkEsU0FBUyxpQkFBQUMsc0JBQXFCOzs7QWNsQzlCLElBQU0sU0FBUyxDQUFDLEtBQUssVUFBSyxVQUFLLFVBQUssVUFBSyxVQUFLLFVBQUssVUFBSyxRQUFHO0FBRXBELFNBQVMsV0FBVyxTQUFTQyxTQUFRLEdBQUc7QUFDN0MsUUFBTSxVQUFVLEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSUEsU0FBUSxJQUFJLEdBQUc7QUFDaEYsUUFBTSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUM7QUFDbkMsUUFBTSxVQUFVLFVBQVU7QUFDMUIsU0FBTyxTQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsT0FBTyxPQUFPLElBQUksTUFBTSxJQUFJLE9BQU9BLFNBQVEsUUFBUSxVQUFVLElBQUksRUFBRTtBQUMxRzs7O0FDUEEsU0FBUyxNQUFNLFFBQVEsbUJBQW1CO0FBZ0N0QyxnQkFBQUMsWUFBQTtBQTlCSixTQUFTLE1BQU0sT0FBTztBQUNwQixNQUFJLE9BQU8sV0FBVyxHQUFHLEtBQUssTUFBTSxXQUFXLEdBQUc7QUFDaEQsV0FBTztBQUFBLE1BQ0wsU0FBUyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQzlCLFNBQVMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxNQUM5QixTQUFTLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBQ0EsU0FBTyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQ3ZCO0FBRUEsU0FBUyxTQUFTLE1BQU0sSUFBSSxRQUFRO0FBQ2xDLE1BQUksU0FBUyxHQUFJLFFBQU87QUFDeEIsUUFBTSxJQUFJLE1BQU0sSUFBSTtBQUNwQixRQUFNLElBQUksTUFBTSxFQUFFO0FBQ2xCLFFBQU0sV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxNQUFNLFNBQVMsRUFBRSxDQUFDLElBQUksU0FBUyxNQUFNLENBQUM7QUFDaEYsU0FBTyxJQUFJLFNBQVMsSUFBSSxDQUFDLFVBQVUsTUFBTSxTQUFTLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEY7QUFFTyxTQUFTLGNBQWMsRUFBRSxPQUFPLFVBQVUsT0FBTyxXQUFXLEtBQU0sT0FBTyxXQUFBQyxZQUFXLFlBQVksU0FBUyxPQUFPLEdBQUc7QUFDeEgsUUFBTSxZQUFZLFlBQVksU0FBUyxLQUFLLFFBQVEsQ0FBQztBQUNyRCxRQUFNLE9BQU8sWUFBWSxHQUFHLEtBQUssVUFBVSxNQUFNLENBQUM7QUFFbEQsTUFBSSxVQUFVLFVBQVUsTUFBTSxRQUFRO0FBQ3BDLGNBQVUsSUFBSSxLQUFLO0FBQ25CLFNBQUssS0FBSyxDQUFDO0FBQ1gsU0FBSyxJQUFJLENBQUM7QUFBQSxFQUNaO0FBRUEsU0FDRSxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBT0MsWUFBVyxLQUFLLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FDdEUsaUJBQU8sVUFBVSxDQUFDLEdBQ3JCO0FBRUo7OztBQ3BDQSxTQUFTLGdCQUFBQyxlQUFjLE1BQU0sUUFBQUMsT0FBTSxxQkFBcUIsVUFBQUMsU0FBUSxVQUFVLFdBQVcsU0FBUyxlQUFBQyxjQUFhLFlBQVksWUFBQUMsV0FBVSxnQkFBZ0I7OztBQ0ExSSxTQUFTLHNCQUFzQixPQUFPLFNBQVMsT0FBTztBQUMzRCxRQUFNLFNBQVMsQ0FBQztBQUNoQixXQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sVUFBUztBQUNqQyxRQUFJLE1BQU0sQ0FBQyxFQUFFLFNBQVMsVUFBVSxNQUFNLENBQUMsRUFBRSxTQUFTLFlBQVk7QUFDNUQsVUFBSSxNQUFNLElBQUk7QUFDZCxhQUFPLE1BQU0sTUFBTSxXQUFXLE1BQU0sR0FBRyxFQUFFLFNBQVMsVUFBVSxNQUFNLEdBQUcsRUFBRSxTQUFTLFlBQWE7QUFDN0YsWUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUc7QUFDOUIsWUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLE1BQU07QUFDdkQsYUFBTyxLQUFLLEVBQUUsTUFBTSxjQUFjLFFBQVEsTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRLE9BQU8sS0FBSyxPQUFPLFFBQVEsVUFBVSxRQUFRLE1BQU0sT0FBTyxDQUFDO0FBQzNILFVBQUk7QUFDSjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sQ0FBQyxFQUFFLFNBQVMsWUFBWSxNQUFNLENBQUMsRUFBRSxpQkFBaUI7QUFDMUQsVUFBSSxNQUFNLElBQUk7QUFDZCxhQUFPLE1BQU0sTUFBTSxVQUFVLE1BQU0sR0FBRyxFQUFFLFNBQVMsWUFBWSxNQUFNLEdBQUcsRUFBRSxnQkFBaUI7QUFDekYsWUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUc7QUFDOUIsYUFBTyxLQUFLLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsU0FBUyxJQUFJLENBQUM7QUFDcEYsVUFBSTtBQUNKO0FBQUEsSUFDRjtBQUNBLFdBQU8sS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUFBLEVBQ3hCO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxpQkFBaUIsT0FBTyxNQUFNO0FBQzVDLFFBQU0sUUFBUSxLQUFLLElBQUksR0FBRyxNQUFNLFNBQVMsSUFBSTtBQUM3QyxRQUFNLFNBQVMsTUFBTSxNQUFNLEdBQUcsS0FBSztBQUNuQyxTQUFPO0FBQUEsSUFDTCxPQUFPLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDeEIsYUFBYSxPQUFPO0FBQUEsSUFDcEIsYUFBYSxPQUFPLE9BQU8sQ0FBQyxPQUFPLFNBQVMsUUFBUSxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7QUFBQSxFQUM5RTtBQUNGO0FBRUEsU0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixNQUFJLEtBQUssU0FBUyxhQUFjLFFBQU8sS0FBSyxNQUFNO0FBQ2xELE1BQUksS0FBSyxTQUFTLHFCQUFzQixRQUFPLEtBQUssUUFBUTtBQUM1RCxNQUFJLEtBQUssU0FBUyxjQUFlLFFBQU8sS0FBSztBQUM3QyxTQUFPO0FBQ1Q7OztBRG5DQSxTQUF5QixvQkFBZTtBQU1sQyxnQkFBQUMsTUFzR0UsUUFBQUMsYUF0R0Y7QUFKTixTQUFTLGFBQWEsRUFBRSxPQUFPLFVBQVUsV0FBVyxlQUFlLE9BQU8sR0FBRztBQUMzRSxRQUFNLFFBQVEsZ0JBQWdCLGNBQWMsT0FBTyxRQUFRLElBQUk7QUFDL0QsU0FDRSxnQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxJQUFJLFFBQVEsVUFBVSxFQUFFLEdBQ3BDLDBCQUFBQSxLQUFDLFVBQU0saUJBQU0sR0FDZjtBQUVKO0FBRUEsU0FBUyxZQUFZLEVBQUUsT0FBTyxVQUFVLFdBQVcsZUFBZSxPQUFPLEdBQUc7QUFDMUUsUUFBTSxRQUFRLGdCQUFnQixjQUFjLE9BQU8sUUFBUSxJQUFJO0FBQy9ELFFBQU0sZUFBZSxLQUFLLElBQUksR0FBRyxHQUFHLE1BQU0sTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUN6RixTQUNFLGdCQUFBQSxLQUFDLHVCQUFvQixjQUE0QixPQUFPLEVBQUUsSUFBSSxRQUFRLFVBQVUsRUFBRSxHQUNoRiwwQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDbkMsZ0JBQU0sTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sUUFDNUIsZ0JBQUFBLEtBQUMsVUFBZSxPQUFPLEVBQUUsVUFBVSxTQUFTLEdBQUksa0JBQVEsT0FBN0MsR0FBaUQsQ0FDN0QsR0FDSCxHQUNGO0FBRUo7QUFFQSxTQUFTLG9CQUFvQixPQUFPO0FBQ2xDLFFBQU0sV0FBVyxNQUFNLFVBQVUsWUFBWTtBQUM3QyxRQUFNLFlBQVksQ0FBQyxNQUFNLFlBQVksUUFBUSxPQUFPLFdBQVcsRUFBRSxTQUFTLFFBQVEsSUFBSSxlQUFlO0FBQ3JHLFNBQU8sZ0JBQUFBLEtBQUMsYUFBVyxHQUFHLE9BQU87QUFDL0I7QUFFQSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ2pDLE1BQUksQ0FBQyxNQUFNLE9BQU8sT0FBUSxRQUFPLEVBQUUsUUFBUSxPQUFPLFFBQVEsVUFBVSxFQUFFLEdBQUcsT0FBTyxPQUFPLFFBQVEsU0FBUyxFQUFFLEVBQUU7QUFDNUcsUUFBTSxTQUFTLENBQUM7QUFDaEIsUUFBTSxRQUFRLENBQUM7QUFDZixPQUFLLE1BQU0sUUFBUSxDQUFDLE1BQU0sVUFBVTtBQUNsQyxRQUFJLE9BQU87QUFDVCxhQUFPLEtBQUssUUFBRztBQUNmLFlBQU0sS0FBSyxRQUFHO0FBQUEsSUFDaEI7QUFDQSxlQUFXLFFBQVEsS0FBSyxPQUFPO0FBQzdCLFVBQUksS0FBSyxTQUFTLE1BQU8sUUFBTyxLQUFLLEtBQUssSUFBSTtBQUM5QyxVQUFJLEtBQUssU0FBUyxTQUFVLE9BQU0sS0FBSyxLQUFLLElBQUk7QUFBQSxJQUNsRDtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQU8sRUFBRSxRQUFRLE9BQU8sS0FBSyxJQUFJLEdBQUcsT0FBTyxNQUFNLEtBQUssSUFBSSxFQUFFO0FBQzlEO0FBRUEsU0FBUyxpQkFBaUIsTUFBTSxRQUFRO0FBQ3RDLE1BQUksTUFBTSxPQUFPLE9BQVEsUUFBTyxLQUFLLE1BQU0sT0FBTyxDQUFDLEtBQUssTUFBTSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckYsUUFBTSxVQUFVLFlBQVksTUFBTSxNQUFNO0FBQ3hDLFNBQU8sS0FBSyxJQUFJLFFBQVEsTUFBTSxNQUFNLElBQUksRUFBRSxRQUFRLFFBQVEsT0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLENBQUM7QUFDeEY7QUFFQSxTQUFTLFlBQVksSUFBSTtBQUN2QixNQUFJLEtBQUssSUFBTyxRQUFPLElBQUksS0FBSyxLQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELFFBQU0sT0FBTyxLQUFLLE1BQU0sS0FBSyxHQUFJO0FBQ2pDLFNBQU8sR0FBRyxLQUFLLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxPQUFPLEVBQUU7QUFDL0M7QUFFQSxTQUFTLFdBQVcsSUFBSTtBQUN0QixRQUFNLE9BQU8sS0FBSyxNQUFNLEtBQUssR0FBSTtBQUNqQyxTQUFPLE9BQU8sS0FBSyxHQUFHLElBQUksTUFBTSxHQUFHLEtBQUssTUFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUN4RTtBQUVBLFNBQVNFLFVBQVMsTUFBTSxJQUFJLFFBQVE7QUFDbEMsUUFBTSxNQUFNLENBQUMsVUFBVSxPQUFPLFdBQVcsR0FBRyxLQUFLLE1BQU0sV0FBVyxJQUM5RCxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sU0FBUyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFDeEQsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUNsQixRQUFNLElBQUksSUFBSSxJQUFJO0FBQ2xCLFFBQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsU0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLE1BQU0sU0FBUyxFQUFFLENBQUMsSUFBSSxTQUFTLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDcEg7QUFFQSxJQUFNLHlCQUF5QjtBQUMvQixJQUFNLG9CQUFvQjtBQUMxQixJQUFNLHFCQUFxQjtBQUMzQixJQUFNLDhCQUE4QjtBQUNwQyxJQUFNLHdCQUF3QjtBQUU5QixTQUFTLGNBQWMsR0FBRztBQUN4QixRQUFNLFFBQVEsK0JBQStCLDhCQUE4QjtBQUMzRSxTQUFPLEtBQUssUUFBUSxLQUFLLElBQUksVUFBVSxJQUFJO0FBQzdDO0FBRUEsU0FBUyxrQkFBa0IsRUFBRSxVQUFVLFFBQVEsR0FBRztBQUNoRCxRQUFNLFNBQVNDLGFBQVksVUFBVSxJQUFJLEdBQUdDLE1BQUssOEJBQThCLHVCQUF1QixhQUFhLENBQUM7QUFDcEgsTUFBSSxDQUFDLFFBQVMsUUFBTyxJQUFJLENBQUM7QUFDMUIsU0FBTyxnQkFBQUosS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPRSxVQUFTLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsWUFBWSxVQUFVLEdBQUcsVUFBVSxFQUFFLEdBQUksVUFBUztBQUM3SDtBQUVBLFNBQVMsWUFBWSxPQUFPO0FBQzFCLE1BQUksQ0FBQyxNQUFPLFFBQU8sQ0FBQztBQUNwQixRQUFNLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDOUIsTUFBSSxNQUFNLEdBQUcsRUFBRSxNQUFNLEdBQUksT0FBTSxJQUFJO0FBQ25DLFNBQU87QUFDVDtBQUVBLFNBQVMsV0FBVyxFQUFFLE9BQU8sV0FBVyxVQUFVLEdBQUc7QUFDbkQsUUFBTSxRQUFRLFlBQVksS0FBSztBQUMvQixNQUFJLENBQUMsTUFBTSxPQUFRLFFBQU87QUFDMUIsUUFBTSxRQUFRLE1BQU0sTUFBTSxDQUFDLGlCQUFpQjtBQUM1QyxRQUFNLFFBQVEsY0FBYyxZQUFZLFlBQVksTUFBTSxTQUFTLElBQUksTUFBTSxTQUFTLE1BQU0sU0FBUztBQUNyRyxRQUFNLE9BQU8sYUFBYSxRQUFRLE1BQU0sU0FBUztBQUNqRCxRQUFNLGNBQWMsT0FBTyxJQUFJLEVBQUU7QUFDakMsU0FDRSxnQkFBQUYsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDNUUsZ0JBQU0sSUFBSSxDQUFDLE1BQU0sTUFDaEIsZ0JBQUFDLE1BQUMsU0FBb0IsT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqRDtBQUFBLG9CQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUcsT0FBTyxRQUFRLENBQUMsRUFBRSxTQUFTLFdBQVcsQ0FBQyxLQUFJO0FBQUEsSUFDOUUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLFVBQVUsV0FBVyxHQUFJLGtCQUFRLEtBQUk7QUFBQSxPQUY1RCxRQUFRLENBR2xCLENBQ0QsR0FDSDtBQUVKO0FBRUEsU0FBUyxnQkFBZ0IsRUFBRSxLQUFLLEdBQUc7QUFDakMsTUFBSSxLQUFLLFNBQVMsT0FBUSxRQUFPLGdCQUFBQSxLQUFDLFVBQU0sZ0JBQUs7QUFDN0MsTUFBSSxLQUFLLFdBQVksUUFBTyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLHFCQUFLO0FBQ3BFLE1BQUksS0FBSyxXQUFXLFVBQVcsUUFBTyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRywwQkFBQUEsS0FBQyxXQUFRLE9BQU8sT0FBTyxHQUFHLEdBQUU7QUFDNUYsTUFBSSxLQUFLLGFBQWEsRUFBRyxRQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHFCQUFLO0FBQ3JFLE1BQUksS0FBSyxZQUFZLEtBQU0sUUFBTyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksR0FBSSxtQkFBSztBQUNyRSxTQUFPLGdCQUFBQSxLQUFDLFVBQU0sZ0JBQUs7QUFDckI7QUFFQSxTQUFTLFVBQVUsRUFBRSxNQUFNLFFBQVEsR0FBRztBQUNwQyxRQUFNLGVBQWUsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHO0FBQ3hDLFFBQU0sT0FBT0csYUFBWSxHQUFHQyxNQUFLLG9CQUFvQkMsT0FBTSxDQUFDO0FBQzVELE1BQUksaUJBQWlCLEtBQUssU0FBUztBQUNqQyxTQUFLLFVBQVU7QUFDZixRQUFJLEtBQUssUUFBUTtBQUNmLFdBQUssS0FBSyxDQUFDO0FBQ1gsV0FBSyxJQUFJLENBQUM7QUFBQSxJQUNaO0FBQUEsRUFDRjtBQUVBLE1BQUksU0FBUztBQUNYLFdBQ0UsZ0JBQUFMLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ2xDLGdCQUFLLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLE1BQU0sTUFBTSxTQUFTLGFBQ3pELGdCQUFBQSxLQUFDLFdBQWdCLE1BQU0sT0FBTyxTQUFPLFFBQXZCLENBQXdCLElBQ3RDLGdCQUFBQSxLQUFDLFlBQWtCLEdBQUcsT0FBTyxTQUFPLFFBQXJCLENBQXNCLENBQUUsR0FDN0M7QUFBQSxFQUVKO0FBRUEsUUFBTSxTQUFTLG9CQUFJLElBQUk7QUFDdkIsYUFBVyxRQUFRLEtBQUssTUFBTyxRQUFPLElBQUksS0FBSyxPQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLENBQUM7QUFDckYsUUFBTSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzFCLFFBQU0sVUFBVSxLQUFLLE1BQU0sT0FBTyxDQUFDLEtBQUssU0FBUyxPQUFPLEtBQUssY0FBYyxJQUFJLENBQUM7QUFDaEYsUUFBTSxhQUFhLEtBQUssTUFBTSxHQUFHLEVBQUUsR0FBRztBQUN0QyxRQUFNLFlBQVksS0FBSyxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxNQUFNLFNBQVMsYUFDdEUsRUFBRSxHQUFHLE9BQU8sTUFBTSxZQUFZLGFBQWEsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHLEVBQUUsS0FBSyxHQUFHLFNBQVMsS0FBSyxJQUNqRyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsTUFBTSxXQUFXO0FBQzlDLFFBQU0sZUFBZSxTQUFTLE1BQU0sQ0FBQyxzQkFBc0I7QUFDM0QsUUFBTSxxQkFBcUIsU0FBUyxTQUFTLGFBQWE7QUFDMUQsUUFBTSxnQkFBZ0IsS0FBSyxJQUFJLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQyxVQUFVLE1BQU0sS0FBSyxNQUFNLENBQUM7QUFDbkYsUUFBTSxjQUFjLEtBQUssVUFBVSxLQUFLLE1BQU0sR0FBRyxFQUFFLEdBQUcsU0FBUyxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUM1RixTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxvQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxJQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxZQUFZLGFBQWEsR0FDMUQ7QUFBQSxXQUFLLFNBQVMsZ0JBQUFELEtBQUMsV0FBUSxPQUFPLE9BQU8sR0FBRyxJQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLG9CQUFDO0FBQUEsTUFDOUUsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFVBQVUsUUFBUSxVQUFVLEdBQUcsYUFBYSxFQUFFLEdBQ2hGO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxLQUFLLFNBQVMsS0FBSyxNQUFNLEdBQUcsc0JBQVE7QUFBQSxRQUN6RCxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLE1BQzNCLGdCQUFBQSxLQUFDLFVBQWdCLE9BQU8sRUFBRSxPQUFPLEtBQUssVUFBVSxTQUFTLGFBQWFFLFVBQVMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEtBQUssTUFBTSxHQUM3SCxhQUFHLElBQUksT0FBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLFVBQVUsSUFBSSxLQUFLLElBQUksS0FBSyxRQUFRLE1BRHRELElBRVgsQ0FDRDtBQUFBLFNBQ0g7QUFBQSxNQUNDLFVBQVUsS0FBSyxnQkFBQUYsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sWUFBWSxFQUFFLEdBQUksc0JBQVksT0FBTyxHQUFFO0FBQUEsT0FDdEY7QUFBQSxJQUNBLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxhQUFhLEVBQUUsR0FDbkQ7QUFBQSwyQkFBcUIsS0FDcEIsZ0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBTSxjQUFJLE9BQU8sZ0JBQWdCLENBQUMsR0FBRTtBQUFBLFFBQ3JDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFNLGtCQUFrQixTQUFRO0FBQUEsU0FDbEU7QUFBQSxNQUVELGFBQWEsSUFBSSxDQUFDLE1BQU0sTUFDdkIsZ0JBQUFDLE1BQUMsU0FBd0MsT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNwRTtBQUFBLGFBQUssVUFBVSxnQkFBQUQsS0FBQyxVQUFNLGdCQUFLLElBQVUsZ0JBQUFBLEtBQUMsbUJBQWdCLE1BQVk7QUFBQSxRQUNuRSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLFFBQVEsR0FBSSxhQUFHLEtBQUssS0FBSyxTQUFTLGFBQWEsQ0FBQyxNQUFLO0FBQUEsUUFDOUYsS0FBSyxVQUNGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FBRywwQkFBQUEsS0FBQyxZQUFTLE1BQU0sS0FBSyxhQUFhLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxNQUFNLFVBQVUsV0FBVyxHQUFHLEdBQUUsSUFDekksZ0JBQUFBLEtBQUMscUJBQWtCLFNBQVMsS0FBSyxXQUFXLFdBQVksZUFBSyxhQUFZO0FBQUEsV0FMckUsS0FBSyxVQUFVLFdBQVcsQ0FBQyxFQU1yQyxDQUNEO0FBQUEsTUFDQSxhQUFhLFNBQVMsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsV0FBVyxHQUFJLG9CQUFVLFlBQVksT0FBTyxNQUFNLEdBQUU7QUFBQSxNQUM5RyxhQUFhLGNBQWMsZ0JBQUFBLEtBQUMsY0FBVyxPQUFPLFlBQVksWUFBWSxXQUFXLFlBQVksaUJBQWlCLFdBQVcsWUFBWSxpQkFBaUI7QUFBQSxPQUN6SjtBQUFBLEtBQ0Y7QUFFSjtBQUVBLFNBQVMsU0FBUyxFQUFFLE1BQU0sT0FBTyxXQUFXLGFBQWEsUUFBUSxNQUFNLFFBQVEsWUFBWSxpQkFBaUIsaUJBQWlCLE9BQU8sWUFBWSxTQUFTLFdBQVcsV0FBVyxHQUFHO0FBQ2hMLFFBQU0sYUFBYSxTQUFTLFNBQVMsT0FBTyxhQUFhLFFBQVEsVUFBVSxPQUFPLFNBQVMsSUFBSTtBQUMvRixRQUFNLG9CQUFvQixDQUFDO0FBQzNCLFFBQU0sVUFBVSxZQUFZLE1BQU0sTUFBTTtBQUN4QyxRQUFNLFVBQVUsV0FBVztBQUMzQixRQUFNLGNBQWMsV0FBVztBQUMvQixRQUFNLFdBQVcsV0FBVztBQUM1QixRQUFNTSxVQUFTLFdBQVc7QUFDMUIsUUFBTSxXQUFXLGFBQWEsV0FBVyxNQUFNLElBQUksSUFBSTtBQUV2RCxRQUFNLFVBQVUsV0FBVyxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVk7QUFDaEUsUUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsY0FBYyxPQUFPLFlBQVksVUFBVSxJQUFJO0FBRXZGLFFBQU0sT0FBTyxVQUFXLFdBQVcsTUFBTyxZQUFZLFdBQVcsT0FBTyxDQUFDLE1BQU0sWUFDM0UsY0FBYyxnQkFDZCxXQUFXLGFBQ1hBLFVBQVMsU0FBUyxPQUFPLEtBQUssSUFBSSxLQUFLLEVBQUUsS0FDekMsYUFBYSxtQ0FDYixPQUFPLElBQUksS0FBSyxTQUFTLEtBQUssS0FBSyxTQUFTLEdBQUcsT0FBTyxLQUFLLElBQUksS0FBSyxFQUFFLEtBQ3RFLFdBQVcsR0FBRyxtQkFBbUIsU0FBUyxNQUFNLEtBQUssbUJBQW1CLFNBQVMsWUFBWSxJQUFJLFNBQVMsT0FBTyxHQUFHLE9BQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxLQUMzSSxPQUFPLE9BQU8sS0FBSyxJQUFJLEtBQUssRUFBRTtBQUVsQyxTQUNFLGdCQUFBTCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxvQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxJQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxRQUFRLEdBQUcsVUFBVSxPQUFPLEdBQzdEO0FBQUEsZ0JBQ0csZ0JBQUFELEtBQUMsV0FBUSxPQUFPLE9BQU8sR0FBRyxJQUMxQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLGVBQWVNLFVBQVMsTUFBTSxXQUFXLFFBQVEsT0FBTyxFQUFFLEdBQUksd0JBQWMsV0FBTUEsVUFBUyxXQUFNLFdBQVcsV0FBTSxVQUFJO0FBQUEsTUFDaEosZ0JBQUFOLEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sWUFBWSxFQUFFLEdBQUksYUFBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUk7QUFBQSxNQUNwRSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNoRCwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxHQUFHLEdBQUksd0JBQWMsZUFBZSxNQUFLLEdBQ3ZGO0FBQUEsTUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sWUFBWSxHQUFHLFVBQVUsV0FBVyxHQUFJLGVBQUssSUFBSSxJQUFHO0FBQUEsT0FDbkY7QUFBQSxJQUNDLGVBQWUsQ0FBQyxxQkFDZixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FDM0IsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFVBQVUsV0FBVyxHQUFJLHVCQUFZLEdBQ3BFO0FBQUEsSUFFRCxTQUFTLFVBQVUsU0FDbEIsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQzNCLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxVQUFVLFdBQVcsR0FBSSxvQkFBVSxPQUFPLGFBQWEsTUFBTSxHQUFFLEdBQzNGO0FBQUEsSUFFRE0sV0FBVSxTQUNULGdCQUFBTixLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLFdBQVcsR0FBSSxlQUFLLEtBQUssSUFBRztBQUFBLElBRXBFLFVBQVUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFFBQVEsS0FBSyxjQUFjLEtBQUssS0FBSyxjQUFjLE1BQ3ZGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxRQUFRLGlCQUFpQixNQUFNLE1BQU0sR0FBRyxXQUFXLEdBQUcsYUFBYSxFQUFFLEdBQzFHLDBCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsUUFBUSxRQUFRO0FBQUEsUUFDaEIsT0FBTyxRQUFRO0FBQUEsUUFDZixVQUFVLFlBQVksT0FBTyxJQUFJO0FBQUEsUUFDakM7QUFBQSxRQUNBLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxRQUNULFdBQVc7QUFBQTtBQUFBLElBQ2IsR0FDRjtBQUFBLElBRUQsU0FBUyxVQUFVLGNBQWMsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsMEJBQUFBLEtBQUMsY0FBVyxPQUFPLFlBQVksV0FBVyxpQkFBaUIsV0FBVyxpQkFBaUIsR0FBRTtBQUFBLElBQzFKLFlBQVksV0FBVyxTQUFTLFVBQVUsQ0FBQyxXQUMxQyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDNUU7QUFBQSxlQUFTLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFDakMsZ0JBQUFELEtBQUMsVUFBYSxPQUFPLEVBQUUsT0FBTyxTQUFTLFVBQVUsV0FBVyxHQUFJLGtCQUFRLE9BQTdELENBQWlFLENBQzdFO0FBQUEsTUFDQSxTQUFTLFNBQVMsT0FBTyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxvQkFBSyxTQUFTLFNBQVMsR0FBRyxlQUFjO0FBQUEsT0FDcEc7QUFBQSxLQUVKO0FBRUo7QUFFQSxTQUFTLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxxQkFBcUIsT0FBTyxTQUFTLE9BQU8sU0FBUyxNQUFNLFlBQVksVUFBVSxPQUFPLFFBQVEsR0FBRztBQUM1SSxRQUFNLGVBQWUsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFNBQVM7QUFDcEUsUUFBTSxZQUFZLEtBQUssU0FBUztBQUNoQyxRQUFNLFFBQVEsWUFBWSxjQUFjLEdBQUcsZUFBZSxrQkFBa0IsZUFBZSxXQUFXLEtBQUssS0FBSztBQUNoSCxRQUFNLE9BQU8sS0FBSyxjQUFjLEdBQUcsS0FBSyxJQUFJLHFCQUFxQixLQUFLO0FBQ3RFLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSU8sY0FBYSxDQUFDO0FBQzFDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsY0FBYSxJQUFJO0FBQzdDLFFBQU0sVUFBVSxXQUFXO0FBQzNCLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksY0FBYyxRQUFRLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxNQUFNLFdBQVcsWUFBWSxNQUFNLFdBQVcsU0FBVSxXQUFVO0FBQUEsRUFDcEgsQ0FBQztBQUNELFFBQU0sUUFBUSxxQkFBcUIsc0JBQXNCLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ3pILFNBQ0UsZ0JBQUFQLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxTQUFTLElBQUksR0FBRyxRQUFRLFlBQVksSUFBSSxTQUFTLFdBQVcsT0FBVSxHQUMvSSwwQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sVUFBVSxhQUFhLElBQUksT0FBVSxHQUN0RTtBQUFBLGNBQVUsZ0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxHQUFHLFlBQVksR0FBRyxJQUFJLGFBQWEsZUFBZSxPQUFPLElBQUksTUFBTSxHQUFHO0FBQUEsSUFDdEcsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsU0FBUyxXQUFXLE9BQVUsR0FDbks7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsYUFBYSxlQUFlLE9BQU8sSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFJLGlCQUFNO0FBQUEsTUFDbkcsYUFDQyxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLE9BQU8sRUFBRSxVQUFVLEVBQUU7QUFBQSxVQUNyQjtBQUFBLFVBQ0EsY0FBYyxPQUFPLElBQUksTUFBTSxPQUFPO0FBQUEsVUFDdEMsVUFBVSxDQUFDLE1BQU0sU0FBUztBQUFFLHNCQUFVLElBQUk7QUFBRyxzQkFBVSxDQUFDLENBQUMsTUFBTSxRQUFRO0FBQUEsVUFBRTtBQUFBLFVBQ3pFLFdBQVM7QUFBQSxVQUVULDBCQUFBQSxLQUFDLHVCQUFvQixPQUFjLE1BQVksU0FBa0I7QUFBQTtBQUFBLE1BQ25FLElBQ0UsZ0JBQUFBLEtBQUMsdUJBQW9CLE9BQWMsTUFBWSxTQUFrQjtBQUFBLE9BQ3ZFO0FBQUEsS0FDRixHQUNGO0FBRUo7QUFFQSxTQUFTLG9CQUFvQixFQUFFLE9BQU8sTUFBTSxRQUFRLEdBQUc7QUFDckQsU0FBTyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSxVQUFNLElBQUksQ0FBQyxTQUFTLGdCQUFBRCxLQUFDLFdBQTBCLE1BQU0sTUFBTSxXQUF6QixLQUFLLE1BQXNDLENBQUU7QUFBQSxJQUMvRSxRQUFRLE1BQU0sU0FBUyxLQUFLLGdCQUFBQSxLQUFDLFVBQUssZUFBQztBQUFBLElBQ25DLFFBQ0MsZ0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQztBQUFBLFFBQ0E7QUFBQSxRQUNBLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLGtCQUFrQjtBQUFBLFFBQ2xCLGlCQUFpQjtBQUFBO0FBQUEsSUFDbkI7QUFBQSxLQUVWO0FBQ0Y7QUFFQSxTQUFTLGlCQUFpQixPQUFPO0FBQy9CLFFBQU0sT0FBTyxDQUFDO0FBQ2QsYUFBVyxRQUFRLE9BQU87QUFDeEIsUUFBSSxLQUFLLFNBQVMsZUFBZSxDQUFDLEtBQUssZUFBZTtBQUNwRCxXQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDaEI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLEtBQUssYUFBYTtBQUNoRixRQUFJLFNBQVUsVUFBUyxLQUFLLElBQUk7QUFBQSxRQUMzQixNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUN2QjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLEVBQUUsT0FBTyxTQUFTLE1BQU0scUJBQXFCLE9BQU8sZ0JBQWdCLFVBQVUsT0FBTyxRQUFRLEdBQUc7QUFDbkksUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJTyxjQUFhLElBQUk7QUFDakQsUUFBTSxLQUFLLFVBQVEsR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLFNBQVMsV0FBVztBQUM1RCxRQUFNLGFBQWEsU0FBUyxLQUFNLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDekQsUUFBTSxZQUFZLFVBQVE7QUFBRSxnQkFBWSxHQUFHLElBQUksQ0FBQztBQUFHLGNBQVU7QUFBQSxFQUFFO0FBQy9ELEVBQUFDLFVBQVMsV0FBUztBQUNoQixRQUFJLENBQUMsV0FBWSxNQUFNLFFBQVEsVUFBVSxNQUFNLFFBQVEsUUFBVTtBQUNqRSxVQUFNLFFBQVEsTUFBTSxVQUFVLFVBQVEsR0FBRyxJQUFJLE1BQU0sVUFBVTtBQUM3RCxVQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLE1BQU0sU0FBUyxHQUFHLFNBQVMsTUFBTSxRQUFRLFNBQVMsS0FBSyxFQUFFLENBQUM7QUFDNUYsUUFBSSxNQUFNLElBQUksRUFBRyxXQUFVLE1BQU0sSUFBSSxDQUFDO0FBQ3RDLFVBQU0sZ0JBQWdCO0FBQUEsRUFDeEIsQ0FBQztBQUNELFFBQU0sYUFBYSxpQkFBaUIsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLGtCQUFrQixNQUFNLEtBQUssVUFBUSxLQUFLLFNBQVMsV0FBVyxJQUFJLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSTtBQUM5SSxRQUFNLFlBQVksV0FBUyxFQUFFLFlBQVksS0FBSyxTQUFTLGVBQWUsaUJBQWlCLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxDQUFDLElBQUksWUFBWSxTQUFTLFdBQVcsZUFBZSxHQUFHLElBQUksR0FBRyxTQUFTLE1BQU0sVUFBVSxJQUFJLEVBQUU7QUFDaE8sU0FDRSxnQkFBQVIsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsS0FBSyxHQUFHLFdBQVcsRUFBRSxHQUN6RCwyQkFBaUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLFVBQVU7QUFDM0MsVUFBTSxZQUFZLElBQUksQ0FBQyxHQUFHLFNBQVM7QUFDbkMsUUFBSSxDQUFDLFFBQVEsVUFBVyxRQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsZ0JBQUFBLEtBQUMsb0JBQW1FLE1BQU0sTUFBTSxTQUFrQixvQkFBeUMsR0FBRyxVQUFVLElBQUksS0FBckksR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLFNBQVMsV0FBVyxFQUErRixDQUFFO0FBQ2xOLFVBQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxtQkFBbUIsS0FBSyxTQUFTLFVBQVU7QUFDekYsVUFBTSxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFNBQVMsVUFBVTtBQUMxRixXQUNFLGdCQUFBQyxNQUFDLFNBQStFLE9BQU8sRUFBRSxlQUFlLE9BQU8sT0FBTyxRQUFRLFVBQVUsUUFBUSxVQUFVLEVBQUUsR0FDMUo7QUFBQSxzQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxPQUFPLE9BQU8sVUFBVSxHQUFHLFVBQVUsT0FBTyxHQUFJLGtCQUFRLGdCQUFBQSxLQUFDLG9CQUFpQixNQUFNLE1BQU0sU0FBa0Isb0JBQXdDLFFBQU0sTUFBQyxRQUFRLE9BQVEsR0FBRyxVQUFVLElBQUksR0FBRyxHQUFHO0FBQUEsTUFDNU0sZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxHQUFHLFlBQVksRUFBRSxHQUFHO0FBQUEsTUFDekMsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLE9BQU8sR0FBSSxtQkFBUyxnQkFBQUEsS0FBQyxvQkFBaUIsTUFBTSxPQUFPLFNBQWtCLG9CQUF3QyxRQUFNLE1BQUMsUUFBUSxPQUFRLEdBQUcsVUFBVSxLQUFLLEdBQUcsR0FBRztBQUFBLFNBSHRNLElBQUksQ0FBQyxHQUFHLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxFQUk1RTtBQUFBLEVBRUosQ0FBQyxHQUNIO0FBRUo7QUFFTyxTQUFTLFFBQVEsRUFBRSxNQUFNLFNBQVMsYUFBYSxNQUFNLEdBQUc7QUFDN0QsTUFBSSxLQUFLLFNBQVMsYUFBYyxRQUFPLGdCQUFBQSxLQUFDLGFBQVUsTUFBWSxTQUFrQjtBQUVoRixNQUFJLEtBQUssU0FBUyxVQUFVLEtBQUssV0FBVyxRQUFRO0FBQ2xELFVBQU1TLFNBQVEsc0JBQXNCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLO0FBQzVELFdBQ0UsZ0JBQUFSLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksMkJBQVlTLE1BQUssSUFBRztBQUFBLE9BQ3REO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLHNCQUFzQjtBQUN0QyxXQUNFLGdCQUFBUixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLEtBQUssR0FBSSxvQkFBSyxLQUFLLFFBQVEsTUFBTSxvQkFBbUI7QUFBQSxRQUN6RixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFNBQy9CO0FBQUEsTUFDQyxXQUNDLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUM1RSxlQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsTUFDekIsZ0JBQUFBLEtBQUMsVUFBYSxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksaUJBQU8sS0FBSyxRQUFRLCtCQUErQixFQUFFLEtBQXBGLENBQXNGLENBQ2xHLEdBQ0g7QUFBQSxPQUVKO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLFFBQVE7QUFDeEIsV0FBTyxnQkFBQUEsS0FBQyxZQUFVLEdBQUcsTUFBTSxTQUFrQjtBQUFBLEVBQy9DO0FBRUEsTUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixVQUFNLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUNsQyxXQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLEtBQUssR0FBSSxlQUFLLFdBQVcsWUFBWSw0REFBdUQsd0NBQWtDO0FBQUEsUUFDbkssZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxRQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHLE1BQU0sTUFBTSxJQUFJLE1BQU0sV0FBVyxJQUFJLFNBQVMsT0FBTyxJQUFHO0FBQUEsU0FDN0Y7QUFBQSxNQUNDLFdBQ0MsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksVUFBVSxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQzVFO0FBQUEsY0FBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLE1BQzlCLGdCQUFBRCxLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sUUFBUSxHQUFJLGtCQUFRLE9BQXZDLENBQTJDLENBQ3ZEO0FBQUEsUUFDQSxNQUFNLFNBQVMsT0FBTyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxvQkFBSyxNQUFNLFNBQVMsR0FBRyxlQUFjO0FBQUEsU0FDOUY7QUFBQSxPQUVKO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLFlBQVk7QUFDNUIsV0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2pEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FDeEIsMEJBQUFBLEtBQUMsWUFBUyxNQUFNLEtBQUssTUFBTSxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFHLEdBQ3BFO0FBQUEsT0FDRjtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxxQkFBcUI7QUFDckMsV0FBTyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRywwQkFBQUEsS0FBQyxvQkFBaUIsTUFBWSxTQUFrQixHQUFFO0FBQUEsRUFDekY7QUFFQSxNQUFJLEtBQUssU0FBUyxVQUFVO0FBQzFCLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFJLG9CQUFLLEtBQUssS0FBSyxRQUFRLCtCQUErQixFQUFFLENBQUMsSUFBRztBQUFBLE9BQzVHO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLFNBQVM7QUFDekIsV0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2pEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUksMkJBQVksS0FBSyxJQUFJLElBQUc7QUFBQSxPQUN4RTtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxlQUFlO0FBQy9CLFdBQ0UsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFVBQVUsRUFBRSxHQUNyQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUksMEJBQU0sS0FBSyxLQUFLLFNBQVMsS0FBSyxVQUFVLElBQUksZ0JBQWdCLGNBQWMsd0JBQWEsR0FDdkk7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsaUJBQWlCO0FBQ2pDLFVBQU0sUUFBUSxVQUFVLEtBQUssTUFBTSxNQUFNO0FBQ3pDLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFJLHFCQUFVO0FBQUEsTUFDdEQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGFBQWEsRUFBRSxHQUNuRCxnQkFBTSxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxNQUFNLGdCQUFBQSxLQUFDLFVBQWMsYUFBRyxNQUFNLElBQUksT0FBTyxJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQTFDLENBQTZDLENBQU8sR0FDckc7QUFBQSxPQUNGO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLGdCQUFnQjtBQUNoQyxXQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLEtBQUssR0FBSSxvQkFBUztBQUFBLE1BQ3JELGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxhQUFhLEVBQUUsR0FDbkQsZUFBSyxLQUFLLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLE1BQU0sZ0JBQUFBLEtBQUMsVUFBYSxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksa0JBQVEsT0FBdkMsQ0FBMkMsQ0FBTyxHQUN2RztBQUFBLE9BQ0Y7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsUUFBUTtBQUN4QixVQUFNLFdBQVcsS0FBSyxjQUFjO0FBQ3BDLFVBQU0sU0FBUyxZQUFZLENBQUMsS0FBSztBQUNqQyxVQUFNLFNBQVMsWUFBWSxLQUFLLE9BQU8sUUFBUTtBQUMvQyxVQUFNLFNBQVMsV0FBVyxLQUFLLFNBQVMsV0FBVyxNQUFNLEtBQUssS0FBSyxLQUFLLFVBQVUsU0FBUztBQUMzRixXQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxHQUFHLFlBQVksR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFFBQ3JELGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsSUFBSSxTQUFTLEdBQ3RHO0FBQUEsMEJBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsNEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLE1BQU0sS0FBSyxHQUFJLGNBQUksS0FBSyxLQUFLLElBQUksWUFBTyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssU0FBUyxhQUFhLEVBQUUsSUFBRztBQUFBLFlBQ25ILGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxNQUFNLE9BQU8sR0FBSSxrQkFBTztBQUFBLGFBQ3hEO0FBQUEsVUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssR0FBSSxlQUFLLE1BQUs7QUFBQSxVQUN4QyxLQUFLLFNBQVMsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLEdBQUksZUFBSyxPQUFNO0FBQUEsV0FDMUQ7QUFBQSxTQUNGO0FBQUEsT0FDRjtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxRQUFRO0FBQ3hCLFVBQU1TLFNBQVEsY0FBYyxLQUFLLFNBQVMsc0JBQXNCLGFBQWEsU0FBUztBQUN0RixXQUNFLGdCQUFBUixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxHQUFHLFlBQVksR0FBRyxJQUFJLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxTQUFTLEdBQUc7QUFBQSxRQUN2RixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssZ0JBQWdCLFlBQVksVUFBVSxlQUFlLFVBQVUsVUFBVSxHQUFHLGFBQWEsR0FBRyxjQUFjLEdBQUcsVUFBVSxFQUFFLEdBQzdJO0FBQUEsVUFBQVEsVUFBUyxnQkFBQVQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFJLFVBQUFTLFFBQU07QUFBQSxVQUM1RixnQkFBQVQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBSSxlQUFLLE1BQUs7QUFBQSxXQUN6QztBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBQUEsRUFFSjtBQUVBLFFBQU0sT0FBTyxLQUFLLGNBQWMsR0FBRyxLQUFLLElBQUkscUJBQXFCLEtBQUs7QUFDdEUsUUFBTSxRQUFRLGNBQWMsS0FBSyxTQUFTLHNCQUFzQixhQUFhLGNBQWM7QUFDM0YsU0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSxvQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxJQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLE9BQU8sR0FBRyxZQUFZLEdBQUcsSUFBSSxLQUFLLGdCQUFnQixPQUFPLElBQUksT0FBVSxHQUFHO0FBQUEsTUFDeEYsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxhQUFhLEdBQUcsY0FBYyxHQUFHLFVBQVUsYUFBYSxJQUFJLEdBQUcsSUFBSSxLQUFLLGdCQUFnQixZQUFZLE9BQVUsR0FDL0o7QUFBQSxpQkFBUyxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFJLGlCQUFNO0FBQUEsUUFDNUYsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQztBQUFBLFlBQ0E7QUFBQSxZQUNBLFFBQVE7QUFBQSxZQUNSLFdBQVc7QUFBQSxZQUNYLGtCQUFrQjtBQUFBLFlBQ2xCLGlCQUFpQjtBQUFBO0FBQUEsUUFDbkI7QUFBQSxTQUNGO0FBQUEsT0FDRjtBQUFBLEtBQ0Y7QUFFSjs7O0FFampCQSxTQUFTLGdCQUFBVSxlQUFjLFdBQVcsaUJBQWlCO0FBR25ELFNBQVMscUJBQXFCLDZCQUE2QjtBQVdsRCxnQkFBQUMsTUEwR0wsUUFBQUMsYUExR0s7QUFUVCxTQUFTLGFBQWEsRUFBRSxPQUFPLEdBQUc7QUFDaEMsUUFBTSxTQUFTLFVBQVU7QUFDekIsU0FBTyxVQUFVLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBRUEsU0FBUyxjQUFjLEVBQUUsTUFBTSxTQUFTLGNBQWMsT0FBTyxHQUFHO0FBQzlELFFBQU0sU0FBUyxVQUFVO0FBQ3pCLE1BQUksYUFBYyxRQUFPLGNBQWMsUUFBUSxZQUFZO0FBQzNELFNBQU8sZ0JBQUFELEtBQUMsV0FBUSxNQUFZLFNBQWtCO0FBQ2hEO0FBRU8sU0FBUyx5QkFBeUIsRUFBRSxJQUFJLFNBQVMsV0FBVyxVQUFVLEdBQUc7QUFDOUUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJRSxjQUFhLEtBQUs7QUFDOUMsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLEVBQUU7QUFDekMsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxjQUFhLEtBQUs7QUFDcEQsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLENBQUM7QUFDeEMsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxjQUFhLEtBQUs7QUFDdEQsUUFBTSxDQUFDLGVBQWUsZ0JBQWdCLElBQUlBLGNBQWEsQ0FBQztBQUN4RCxRQUFNLENBQUMsTUFBTSxJQUFJQSxjQUFhLEVBQUUsU0FBUyxHQUFHLEtBQUssS0FBSyxDQUFDO0FBRXZELFdBQVMsZ0JBQWdCO0FBQ3ZCLFFBQUksQ0FBQyxPQUFPLEVBQUc7QUFDZixPQUFHLEtBQUsscUJBQXFCO0FBQzdCLFFBQUksV0FBVyxHQUFHO0FBQ2hCLG9CQUFjLEtBQUs7QUFDbkIsU0FBRyxNQUFNLHFCQUFxQjtBQUFBLElBQ2hDO0FBQUEsRUFDRjtBQUVBLFdBQVMsT0FBTztBQUNkLGNBQVUsSUFBSTtBQUNkLGFBQVMsRUFBRTtBQUNYLGlCQUFhLEtBQUs7QUFDbEIsYUFBUyxDQUFDO0FBQ1Ysa0JBQWMsSUFBSTtBQUFBLEVBQ3BCO0FBRUEsV0FBUyxNQUFNLEVBQUUsZUFBZSxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQzNDLGNBQVUsS0FBSztBQUNmLGFBQVMsRUFBRTtBQUNYLGlCQUFhLEtBQUs7QUFDbEIsYUFBUyxDQUFDO0FBQ1YsUUFBSSxnQkFBZ0IsR0FBRyxHQUFHLHFCQUFxQixFQUFHLElBQUcsTUFBTSxNQUFNO0FBQUEsRUFDbkU7QUFFQSxXQUFTLFlBQVksT0FBTyxTQUFTO0FBQ25DLFFBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHLHFCQUFxQixHQUFHO0FBQzdDLFlBQU0sRUFBRSxjQUFjLE1BQU0sQ0FBQztBQUM3QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUcsUUFBTztBQUN0QyxVQUFNLFFBQVEsUUFBUTtBQUN0QixRQUFJLE1BQU0sUUFBUSxTQUFVLE9BQU07QUFBQSxhQUN6QixNQUFNLFFBQVEsT0FBTyxDQUFDLE1BQU0sT0FBTztBQUMxQyxVQUFJLE9BQU87QUFDVCxrQkFBVSxNQUFNLElBQUksS0FBSyxLQUFLO0FBQzlCLHlCQUFpQixDQUFDLFlBQVksVUFBVSxDQUFDO0FBQUEsTUFDM0M7QUFBQSxJQUNGLFdBQVcsTUFBTSxRQUFRLE9BQVEsTUFBTSxTQUFTLE1BQU0sUUFBUSxLQUFNO0FBQ2xFLFVBQUksT0FBTztBQUNULGtCQUFVLE1BQU0sSUFBSSxJQUFJLFNBQVMsS0FBSztBQUN0Qyx5QkFBaUIsQ0FBQyxZQUFZLFVBQVUsQ0FBQztBQUFBLE1BQzNDO0FBQUEsSUFDRixXQUFXLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPO0FBQUEsUUFDOUMsUUFBTztBQUNaLFVBQU0sZ0JBQWdCO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxRQUFRLE9BQU87QUFDdEIsVUFBTSxVQUFVLG9CQUFvQixPQUFPLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDN0QsVUFBTSxZQUFZLEtBQUssSUFBSSxHQUFHLFFBQVEsU0FBUyxDQUFDO0FBQ2hELFFBQUksTUFBTSxJQUFJLFVBQVcsVUFBUyxTQUFTO0FBQzNDLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUFPLE9BQU8sSUFBSSxzQkFBc0IsT0FBTyxNQUFNLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJO0FBQUEsSUFDaEY7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLFFBQVEsT0FBTztBQUNwQyxVQUFNLFNBQVMsT0FBTztBQUN0QixVQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxRQUFRLENBQUMsS0FBSyxjQUFjLENBQUM7QUFDcEUsUUFBSSxPQUFPLFFBQVEsSUFBSztBQUN4QixXQUFPLE1BQU07QUFDYixjQUFVLEtBQUs7QUFDZixjQUFVLEtBQUssSUFBSSxHQUFHLE9BQU8sSUFBSSxPQUFPLFVBQVUsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUFBLEVBQ25FO0FBRUEsV0FBUyxZQUFZLE9BQU87QUFDMUIsYUFBUyxLQUFLO0FBQ2QsYUFBUyxDQUFDO0FBQ1YscUJBQWlCLENBQUMsWUFBWSxVQUFVLENBQUM7QUFBQSxFQUMzQztBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFTLE1BQU0sR0FBRyxHQUFHLHFCQUFxQjtBQUFBLElBQzFDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUSxPQUFPO0FBQUEsSUFDZjtBQUFBLElBQ0EsUUFBUSxNQUFNLGFBQWEsSUFBSTtBQUFBLElBQy9CO0FBQUEsRUFDRjtBQUNGO0FBRU8sU0FBUyxzQkFBc0IsRUFBRSxRQUFRLFFBQVEsR0FBRztBQUN6RCxTQUNFLGdCQUFBRCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDdEY7QUFBQSxvQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLGdCQUFLO0FBQUEsSUFDdkMsT0FBTyxVQUFVLElBQ2QsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsRUFBRSxHQUFJLGlCQUFPLE1BQU0sR0FBRSxJQUN6RCxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQVMsT0FBTyxRQUFRO0FBQUEsUUFDeEIsT0FBTyxPQUFPLE1BQU07QUFBQSxRQUNwQixVQUFVLE9BQU87QUFBQSxRQUNqQixVQUFVLE9BQU87QUFBQSxRQUNqQixVQUFVLE9BQU87QUFBQTtBQUFBLElBQ25CO0FBQUEsSUFDSixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxrQkFBUSxTQUFTLEdBQUcsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsTUFBTSxLQUFLLE9BQU07QUFBQSxLQUNyRztBQUVKOzs7QUN0SUEsU0FBUyxnQkFBQUcsZUFBYyxVQUFBQyxTQUFRLGFBQUFDLFlBQVcsWUFBQUMsaUJBQWdCO0FBbUlsRCxTQUNFLE9BQUFDLE1BREYsUUFBQUMsYUFBQTtBQWhJUixTQUFTLFdBQVcsVUFBVSxRQUFRO0FBQ3BDLE1BQUksTUFBTSxRQUFRLE1BQU0sRUFBRyxRQUFPLE9BQU8sS0FBSyxJQUFJO0FBQ2xELFNBQU8sVUFBVTtBQUNuQjtBQUVPLFNBQVMsYUFBYSxFQUFFLFNBQVMsU0FBUyxVQUFVLFNBQVMsR0FBRztBQUNyRSxRQUFNLFlBQVksUUFBUTtBQUMxQixRQUFNLFlBQVksVUFBVSxTQUFTO0FBQ3JDLFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUMsY0FBYSxDQUFDO0FBQ3RDLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUEsY0FBYSxDQUFDLENBQUM7QUFDN0MsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxjQUFhLENBQUM7QUFDMUMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxjQUFhLEtBQUs7QUFDOUMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxjQUFhLEtBQUs7QUFDOUMsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQSxjQUFhLFFBQVE7QUFFbkQsUUFBTSxXQUFXLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFDdkMsUUFBTSxVQUFVLE1BQU0sU0FBUyxFQUFFLFdBQVcsQ0FBQztBQUM3QyxRQUFNLE9BQU8sTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLEdBQUksU0FBUyxFQUFFLGVBQWUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sU0FBUyxPQUFPLEtBQUssQ0FBQyxDQUFFO0FBQy9HLFFBQU0sV0FBVyxDQUFDLFdBQVcsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsS0FBSztBQUMzRSxRQUFNLGNBQWMsTUFBTTtBQUN4QixVQUFNLFNBQVMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ3RDLFVBQU0sU0FBUyxJQUFJLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLE9BQU8sS0FBSyxDQUFDO0FBQzlELFFBQUksTUFBTSxRQUFRLE1BQU0sRUFBRyxRQUFPLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUs7QUFDaEYsV0FBTyxVQUFVLENBQUMsT0FBTyxJQUFJLE1BQU0sSUFBSSxTQUFTO0FBQUEsRUFDbEQ7QUFFQSxXQUFTLFVBQVUsT0FBTztBQUN4QixlQUFXLENBQUMsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQUEsRUFDbEU7QUFFQSxXQUFTLFVBQVU7QUFDakIsY0FBVSxLQUFLO0FBQ2YsY0FBVSxDQUFDO0FBQ1gsZUFBVyxRQUFRO0FBQ25CLFFBQUksS0FBSyxJQUFJLFVBQVUsU0FBUyxFQUFHLFNBQVEsS0FBSyxJQUFJLENBQUM7QUFBQSxhQUM1QyxXQUFXO0FBQUUsZ0JBQVUsVUFBVSxNQUFNO0FBQUcsZ0JBQVUsSUFBSTtBQUFBLElBQUUsTUFDOUQsUUFBTztBQUFBLEVBQ2Q7QUFFQSxXQUFTLFNBQVM7QUFDaEIsYUFBUyxVQUFVLElBQUksQ0FBQ0MsV0FBVSxFQUFFLElBQUlBLE1BQUssSUFBSSxVQUFVQSxNQUFLLFVBQVUsUUFBUSxRQUFRLEVBQUVBLE1BQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQUEsRUFDaEg7QUFFQSxXQUFTLFdBQVcsT0FBTztBQUN6QixVQUFNLFNBQVMsTUFBTSxLQUFLO0FBQzFCLFFBQUksQ0FBQyxPQUFRO0FBQ2IsY0FBVSxNQUFNO0FBQ2hCLFFBQUksVUFBVSxXQUFXLEVBQUcsVUFBUyxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksVUFBVSxLQUFLLFVBQVUsT0FBTyxDQUFDLENBQUM7QUFBQSxRQUNsRixTQUFRO0FBQUEsRUFDZjtBQUVBLFdBQVMsWUFBWSxPQUFPO0FBQzFCLFVBQU0sU0FBUyxNQUFNLEtBQUs7QUFDMUIsVUFBTSxRQUFRLElBQUksS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLE9BQU8sS0FBSyxDQUFDO0FBQ3hFLFVBQU0sVUFBVSxLQUFLLFNBQVMsV0FBVyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFHLFVBQU0sYUFBYSxLQUFLLFNBQVMsVUFBVSxDQUFDLEdBQUcsU0FBUyxHQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFFLElBQUk7QUFDdkYsY0FBVSxVQUFVO0FBQ3BCLGNBQVUsS0FBSztBQUNmLFFBQUksS0FBSyxTQUFTLFlBQVksUUFBUTtBQUNwQyxVQUFJLFVBQVUsV0FBVyxFQUFHLFVBQVMsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVUsS0FBSyxVQUFVLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDbEYsU0FBUTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBRUEsRUFBQUMsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxVQUFVO0FBQzFCLFVBQUksT0FBTyxHQUFHO0FBQUUsa0JBQVUsS0FBSztBQUFHLG1CQUFXLFFBQVE7QUFBQSxNQUFFLFdBQzlDLE9BQU8sRUFBRyxXQUFVLEtBQUs7QUFBQSxVQUM3QixVQUFTO0FBQ2QsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxPQUFPLEdBQUc7QUFDWixVQUFJLE1BQU0sUUFBUSxRQUFRLE1BQU0sUUFBUSxJQUFLLFdBQVUsS0FBSyxJQUFJLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLGVBQ3ZFLE1BQU0sUUFBUSxVQUFVLE1BQU0sUUFBUSxJQUFLLFdBQVUsS0FBSyxJQUFJLFVBQVUsUUFBUSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQUEsZUFDN0YsTUFBTSxRQUFRLFVBQVU7QUFDL0IsWUFBSSxPQUFPLE1BQU0sVUFBVSxPQUFRLFFBQU87QUFBQSxhQUNyQztBQUFFLGtCQUFRLE9BQU8sQ0FBQztBQUFHLG9CQUFVLENBQUM7QUFBRyxxQkFBVyxRQUFRO0FBQUcsb0JBQVUsS0FBSztBQUFBLFFBQUU7QUFBQSxNQUNqRixNQUFPO0FBQ1AsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxLQUFLLElBQUksTUFBTSxNQUFNLFFBQVEsU0FBUyxNQUFNLFFBQVEsY0FBYztBQUNwRSxpQkFBVyxRQUFRLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFDbkQsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxRQUFRLE1BQU0sT0FBUTtBQUMxQixRQUFJLE9BQU8sR0FBRztBQUNaLFVBQUksTUFBTSxRQUFRLFNBQVMsTUFBTSxRQUFRLGFBQWE7QUFDcEQsa0JBQVUsS0FBSztBQUNmLG1CQUFXLFFBQVE7QUFDbkIsY0FBTSxnQkFBZ0I7QUFBQSxNQUN4QjtBQUNBO0FBQUEsSUFDRjtBQUNBLFFBQUksU0FBUyxHQUFHLFNBQVMsT0FBUTtBQUNqQyxRQUFJLE1BQU0sUUFBUSxRQUFRLE1BQU0sUUFBUSxJQUFLLFdBQVUsS0FBSyxJQUFJLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLGFBQ3ZFLE1BQU0sUUFBUSxVQUFVLE1BQU0sUUFBUSxJQUFLLFdBQVUsS0FBSyxJQUFJLEtBQUssRUFBRSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLGFBQzlGLE1BQU0sUUFBUSxXQUFXLFNBQVMsRUFBRSxTQUFTLFNBQVM7QUFDN0QsWUFBTSxNQUFNLEtBQUssRUFBRSxPQUFPLENBQUM7QUFDM0IsVUFBSSxJQUFJLE9BQU87QUFDYixZQUFJLFlBQVksR0FBRztBQUNqQixnQkFBTSxRQUFRLElBQUksSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUM7QUFDN0QscUJBQVcsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUM5RSxvQkFBVSxLQUFLO0FBQUEsUUFDakIsTUFBTyxXQUFVLElBQUk7QUFBQSxNQUN2QixPQUFPO0FBQ0wsY0FBTSxVQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFDN0Msa0JBQVUsUUFBUSxTQUFTLElBQUksS0FBSyxJQUFJLFFBQVEsT0FBTyxDQUFDLFVBQVUsVUFBVSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQztBQUFBLE1BQ2xIO0FBQUEsSUFDRixXQUFXLE1BQU0sUUFBUSxVQUFVO0FBQ2pDLFlBQU0sTUFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQzNCLFVBQUksU0FBUyxFQUFFLFNBQVMsUUFBUyxTQUFRO0FBQUEsZUFDaEMsSUFBSSxNQUFPLFdBQVUsSUFBSTtBQUFBLFdBQzdCO0FBQ0gsa0JBQVUsSUFBSSxLQUFLO0FBQ25CLFlBQUksVUFBVSxXQUFXLEVBQUcsVUFBUyxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsSUFBSSxVQUFVLFNBQVMsRUFBRSxVQUFVLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLFlBQ3pHLFNBQVE7QUFBQSxNQUNmO0FBQUEsSUFDRixNQUFPO0FBQ1AsVUFBTSxnQkFBZ0I7QUFBQSxFQUN4QixDQUFDO0FBRUQsTUFBSSxPQUFPLEdBQUc7QUFDWixXQUNFLGdCQUFBSCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDMUY7QUFBQSxzQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssR0FBRyw0QkFBYztBQUFBLFFBQzVELGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsUUFDN0IsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsOENBQWdDO0FBQUEsU0FDakU7QUFBQSxNQUNDLFVBQVUsSUFBSSxDQUFDRyxPQUFNLFVBQ3BCLGdCQUFBRixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVksUUFBVyxVQUFVLEVBQUUsR0FDakc7QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxRQUFRLE9BQU8sSUFBSSxHQUFHLEdBQUksVUFBQUcsTUFBSyxVQUFTO0FBQUEsUUFDM0UsZ0JBQUFILEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUkscUJBQVdHLE9BQU0sUUFBUSxFQUFFQSxNQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQUEsU0FDdkUsQ0FDRDtBQUFBLE1BQ0QsZ0JBQUFILEtBQUMsVUFBSyxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sVUFBVSxTQUFTLE9BQU8sSUFBSSxRQUFXLE9BQU8sT0FBTyxNQUFNLFVBQVUsU0FBUyxVQUFVLElBQUksTUFBTSxLQUFLLEdBQUcsOEJBQWdCO0FBQUEsT0FDOUo7QUFBQSxFQUVKO0FBRUEsUUFBTSxPQUFPLFNBQVM7QUFDdEIsUUFBTSxXQUFXLFVBQVUsU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsT0FBTyxVQUFVLE1BQU0sS0FBSztBQUNqRixTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDMUY7QUFBQSxvQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDaEM7QUFBQSxXQUFLLElBQUksS0FDUixnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUQ7QUFBQSxVQUFDSztBQUFBLFVBQUE7QUFBQSxZQUNDLE9BQU07QUFBQSxZQUNOLFNBQVMsV0FBVyxRQUFRLE1BQU07QUFBQSxZQUNsQyxTQUFTLE1BQU07QUFDYixzQkFBUSxLQUFLLElBQUksQ0FBQztBQUNsQix3QkFBVSxDQUFDO0FBQ1gsd0JBQVUsS0FBSztBQUNmLHlCQUFXLFFBQVE7QUFBQSxZQUNyQjtBQUFBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsZ0JBQUFMLEtBQUMsVUFBSyxnQkFBRTtBQUFBLFNBQ1Y7QUFBQSxNQUVGLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxHQUFHLE1BQU0sS0FBSyxHQUFJLG9CQUFTO0FBQUEsTUFDeEQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxNQUM3QixnQkFBQUMsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSTtBQUFBLGFBQUssU0FBUyxVQUFVLG1DQUFtQztBQUFBLFFBQWdCO0FBQUEsU0FBYTtBQUFBLE9BQzFIO0FBQUEsSUFDQSxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxLQUFLLEdBQUksZUFBSyxVQUFTO0FBQUEsSUFDdEQsS0FBSyxlQUFlLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxHQUFJLGVBQUssYUFBWTtBQUFBLElBQ3ZFLEtBQUssU0FBUyxTQUNiLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksV0FBVyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQ3JELDBCQUFBQTtBQUFBLE1BQUNNO0FBQUEsTUFBQTtBQUFBLFFBRUMsU0FBUyxXQUFXLFFBQVEsTUFBTTtBQUFBLFFBQ2xDLGFBQVk7QUFBQSxRQUNaLGNBQWMsT0FBTyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFBQSxRQUM1RSxVQUFVO0FBQUE7QUFBQSxNQUpMLEdBQUcsS0FBSyxFQUFFO0FBQUEsSUFLakIsR0FDRixJQUVBLGdCQUFBTixLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDakQsZUFBSyxFQUFFLElBQUksQ0FBQyxRQUFRLFVBQ25CLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLE9BQU8sTUFBTSxRQUFRLFlBQVksUUFBVyxVQUFVLEVBQUUsR0FDakc7QUFBQSxzQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxRQUFRLE9BQU8sSUFBSSxHQUFHLEdBQ3REO0FBQUEsYUFBSyxTQUFTLFVBQ1gsR0FBRyxPQUFPLFFBQVMsWUFBWSxJQUFJLFFBQVEsUUFBVSxTQUFTLE9BQU8sS0FBSyxJQUFJLFFBQVEsS0FBTSxNQUM1RixHQUFHLE9BQU8sTUFBTSxRQUFRLFdBQU0sR0FBRztBQUFBLFFBQUssT0FBTztBQUFBLFNBQ25EO0FBQUEsTUFDQyxPQUFPLGVBQWUsZ0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksZUFBSyxPQUFPLFdBQVcsSUFBRztBQUFBLE1BQ2xGLE9BQU8sVUFBVSxPQUFPLEtBQUssWUFBWSxNQUN4QyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxJQUFJLE9BQU8sSUFBSSxXQUFXLFFBQVcsYUFBYSxFQUFFLEdBQ2hFLDBCQUFBQTtBQUFBLFFBQUNNO0FBQUEsUUFBQTtBQUFBLFVBRUMsU0FBUyxXQUFXLE9BQU87QUFBQSxVQUMzQixhQUFZO0FBQUEsVUFDWixjQUFjLFlBQVk7QUFBQSxVQUMxQixVQUFVO0FBQUE7QUFBQSxRQUpMLEdBQUcsS0FBSyxFQUFFO0FBQUEsTUFLakIsR0FDRjtBQUFBLE9BRUosQ0FDRCxHQUNIO0FBQUEsS0FFSjtBQUVKOzs7QUNsTkEsU0FBUyxnQkFBQUMsZUFBYyxhQUFhLFlBQUFDLFdBQVUsaUJBQWlCO0FBdUZyRCxnQkFBQUMsTUFHQSxRQUFBQyxhQUhBO0FBcEZWLFNBQVMsV0FBVyxFQUFFLE9BQUFDLFFBQU8sUUFBUSxTQUFBQyxTQUFRLEdBQUc7QUFDOUMsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQyxjQUFhLENBQUM7QUFDeEMsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxjQUFhLENBQUMsQ0FBQztBQUN2QyxNQUFJLFdBQVc7QUFFZixFQUFBQyxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLE1BQU0sV0FBVyxVQUFVLE1BQU0sV0FBVyxPQUFRO0FBQ3hELFVBQU0sSUFBSSxNQUFNO0FBQ2hCLFVBQU0sSUFBSSxNQUFNO0FBQ2hCLFFBQUksSUFBSSxLQUFLLEtBQUtILFVBQVMsSUFBSSxLQUFLLEtBQUssT0FBUTtBQUNqRCxVQUFNLEtBQUssV0FBVyxJQUFJLFNBQVMsSUFBSTtBQUN2QyxVQUFNLEtBQUssV0FBVyxJQUFJLFNBQVMsSUFBSTtBQUN2QyxlQUFXLEVBQUUsR0FBRyxFQUFFO0FBQ2xCLFVBQU0sUUFBUSxLQUFLLE1BQU0sS0FBSyxLQUFLLEVBQUU7QUFDckMsUUFBSSxVQUFVLEVBQUc7QUFDakIsWUFBUSxZQUFVLENBQUMsR0FBRyxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDL0YsQ0FBQztBQUVELGNBQVksTUFBTTtBQUNoQixhQUFTLFdBQVMsUUFBUSxJQUFJO0FBQzlCLFlBQVEsWUFBVSxPQUFPLElBQUksWUFBVSxFQUFFLEdBQUcsT0FBTyxLQUFLLE1BQU0sTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLFdBQVMsTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUFBLEVBQzNHLEdBQUcsRUFBRTtBQUVMLFFBQU0sU0FBUztBQUNmLFFBQU0sT0FBTyxDQUFDO0FBQ2QsUUFBTSxPQUFPLE9BQU87QUFDcEIsUUFBTSxNQUFNLG9CQUFvQixLQUFLLElBQUk7QUFDekMsUUFBTSxjQUFjLE1BQ2hCLElBQUk7QUFBQSxJQUNKLEtBQUssSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUFBLElBQ2pELEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUFBLElBQ2xELEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUFBLEVBQ3JELEVBQUUsSUFBSSxXQUFTLE1BQU0sU0FBUyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQzFEO0FBRUosV0FBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFDL0IsVUFBTSxNQUFNLENBQUM7QUFDYixhQUFTLElBQUksR0FBRyxJQUFJQSxRQUFPLEtBQUs7QUFDOUIsWUFBTSxJQUFJLE1BQU07QUFDaEIsWUFBTSxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxPQUFPLElBQUksSUFBSTtBQUN4RyxZQUFNLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxHQUFHO0FBQy9GLFlBQU0sVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxHQUFHO0FBQzFFLFVBQUksb0JBQW9CO0FBQ3hCLFVBQUksbUJBQW1CO0FBQ3ZCLFVBQUksY0FBYztBQUNsQixpQkFBVyxTQUFTLEtBQUssR0FBRztBQUMxQixjQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQ3ZELGNBQU0sS0FBSyxNQUFNLEtBQUssTUFBTTtBQUM1QixjQUFNLEtBQUssTUFBTSxLQUFLO0FBQ3RCLGNBQU0sTUFBTSxJQUFJLE1BQU0sS0FBSztBQUMzQixjQUFNLEtBQUssSUFBSSxNQUFNO0FBQ3JCLGNBQU0sUUFBUSxLQUFLLEtBQUssS0FBSztBQUM3QixjQUFNLFNBQVMsQ0FBQyxLQUFLLEtBQUssS0FBSztBQUMvQixjQUFNLFdBQVcsU0FBUyxLQUFLLFNBQVMsTUFBTSxNQUFNLFFBQVE7QUFDNUQsWUFBSSxDQUFDLFNBQVU7QUFDZixjQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU07QUFDNUIsY0FBTSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxNQUFNLFNBQVMsSUFBSSxNQUFNLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDM0YsY0FBTSxTQUFTLEtBQUssSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDO0FBQzlDLGNBQU0sUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQy9ELGNBQU0sUUFBUSxNQUFNLFNBQVMsTUFBTSxNQUFNLFFBQVE7QUFDakQsY0FBTSxpQkFBaUIsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUU7QUFDbEQsY0FBTSxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsaUJBQWlCLG1CQUFtQixLQUFLLE1BQU0sUUFBUSxHQUFHO0FBQzVGLGNBQU0sU0FBUyxLQUFLLElBQUksaUJBQWlCLE9BQU8sTUFBTSxNQUFNLElBQUksSUFBSSxpQkFBaUI7QUFDckYsNkJBQXFCLFFBQVEsTUFBTSxVQUFVLFFBQVEsTUFBTSxVQUFVLE1BQU0sTUFBTSxRQUFRO0FBQ3pGLDhCQUFzQixRQUFRLE9BQU8sU0FBUyxRQUFRLFFBQVEsT0FBTyxTQUFTO0FBQzlFLHNCQUFjLEtBQUssSUFBSSxhQUFhLEtBQUssSUFBSSxNQUFNLEtBQUssTUFBTSxNQUFNLFFBQVEsS0FBSztBQUFBLE1BQ25GO0FBQ0EsWUFBTSxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxJQUNqQyxRQUFRLHFCQUFxQixRQUFRLG9CQUFvQixPQUFPLFVBQVUsTUFBTSxPQUM5RSxHQUFHLENBQUM7QUFDUixZQUFNLFFBQVEsS0FBSyxJQUFJLE9BQU8sU0FBUyxHQUFHLEtBQUssTUFBTSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQzNFLFVBQUksS0FBSyxFQUFFLE9BQU8sT0FBTyxLQUFLLEdBQUcsT0FBTyxjQUFjLE9BQU8sY0FBYyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7QUFBQSxJQUNuRztBQUNBLFNBQUssS0FBSyxHQUFHO0FBQUEsRUFDZjtBQUVBLFNBQ0UsZ0JBQUFGLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNoRCxlQUFLLElBQUksQ0FBQyxLQUFLLE1BQU07QUFDcEIsVUFBTSxRQUFRLE1BQU0sSUFBSSxTQUFTLE1BQU0sSUFBSSxJQUFJRyxRQUFPLEtBQUs7QUFDM0QsVUFBTSxhQUFhLEtBQUssS0FBSyxLQUFLO0FBQ2xDLFVBQU0sV0FBVztBQUNqQixVQUFNLFdBQVcsSUFBSUEsUUFBTyxHQUFHLFNBQVM7QUFDeEMsVUFBTSxRQUFRLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxNQUFNLE1BQ3hDLGdCQUFBSCxLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sS0FBSyxPQUFPLEtBQUssS0FBSyxJQUFJLEdBQUksZUFBSyxTQUF0RCxDQUE0RCxDQUN4RTtBQUNELFdBQ0UsZ0JBQUFDLE1BQUMsU0FBWSxPQUFPLEVBQUUsZUFBZSxPQUFPLFFBQVEsR0FBRyxVQUFVLE9BQU8sR0FDckU7QUFBQSxvQkFBYyxNQUFNLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUFBLE1BQzFDLGNBQ0MsZ0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsRUFBRSxHQUN4QyxtQkFBUyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU0sSUFBSSxPQUFPLElBQUksTUFBTSxHQUFJLGlCQUFNLEdBQ3RGO0FBQUEsTUFFRCxNQUFNLElBQUksTUFBTSxhQUFhLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFBQSxTQVA5QyxDQVFWO0FBQUEsRUFFSixDQUFDLEdBQ0g7QUFFSjtBQUVPLFNBQVMsV0FBVyxFQUFFLFNBQUFHLFVBQVMsU0FBUyxNQUFNLEdBQUc7QUFDdEQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQyxjQUFhLEVBQUUsT0FBTyxRQUFRLE9BQU8sV0FBVyxJQUFJLFFBQVEsUUFBUSxPQUFPLFFBQVEsR0FBRyxDQUFDO0FBQy9HLFlBQVUsT0FBTztBQUNqQixRQUFNRixTQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxLQUFLO0FBQ3RDLFFBQU0sU0FBUyxLQUFLLElBQUksR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDO0FBQzVDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsV0FDRSxnQkFBQUQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxFQUFFLEdBQ2xEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsTUFBTSxNQUFNLE9BQU8sT0FBTyxFQUFFLEdBQUksb0JBQVM7QUFBQSxNQUN4RCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBTUcsUUFBTyxJQUFHO0FBQUEsT0FDbEQ7QUFBQSxFQUVKO0FBRUEsU0FDRSxnQkFBQUgsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsT0FBQUUsUUFBTyxPQUFPLEdBQ25ELDBCQUFBRixLQUFDLGNBQVcsT0FBT0UsUUFBTyxRQUFnQixTQUFTQyxVQUFTLEdBQzlEO0FBRUo7OztBQzVIQSxTQUFTLFlBQUFHLFdBQVUsYUFBQUMsWUFBVyxZQUFBQyxpQkFBZ0I7QUE2RnhDLFNBQ0UsT0FBQUMsTUFERixRQUFBQyxhQUFBO0FBMUZOLElBQU0sWUFBWSxDQUFDLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNOUIsU0FBUyxJQUFJLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwRXpELFNBQVMsS0FBSyxFQUFFLFVBQVUsUUFBUSxHQUFHO0FBQzFDLEVBQUFDLFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsY0FBUTtBQUNSLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUNFLGdCQUFBRCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxRQUFRLFFBQVEsVUFBVSxHQUFHLFVBQVUsRUFBRSxHQUM5RTtBQUFBLG9CQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxHQUFHLE1BQU0sS0FBSyxHQUFHLHdCQUFVO0FBQUEsTUFDeEQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxNQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRywyQ0FBbUI7QUFBQSxPQUNwRDtBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxlQUFDO0FBQUEsSUFDUCxnQkFBQUEsS0FBQ0csWUFBQSxFQUFVLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFPLE1BQUMsV0FBUyxNQUNsRCwwQkFBQUgsS0FBQ0ksV0FBQSxFQUFTLE1BQU0sVUFBVSxRQUFRLEdBQUcsUUFBUSxNQUFNLEdBQ3JEO0FBQUEsS0FDRjtBQUVKOzs7QUN4R0EsU0FBUyxnQkFBQUMsZUFBYyxVQUFBQyxTQUFRLFVBQVUsUUFBQUMsT0FBTSxPQUFPLFdBQVcsUUFBQUMsT0FBTSxhQUFhLFVBQVUsT0FBTyxhQUFBQyxZQUFXLGFBQUFDLFlBQVcsZUFBQUMsY0FBYSxVQUFVLFlBQUFDLFdBQVUsZUFBQUMsY0FBYSxhQUFBQyxrQkFBaUI7QUFJMUwsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsY0FBQUMsYUFBWSxhQUFBQyxrQkFBaUI7QUFDdEMsU0FBUyxzQkFBc0IsaUJBQWlCLGtCQUFrQix1QkFBdUI7QUFtQmhGLGdCQUFBQyxNQU9ELFFBQUFDLGFBUEM7QUFqQlQsU0FBUyxZQUFZLE1BQU07QUFDekIsUUFBTSxRQUFRLE9BQU8sSUFBSTtBQUN6QixRQUFNLE9BQU8sUUFBUTtBQUNyQixTQUFPLFVBQVUsUUFBUSxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxLQUFLLE1BQU0sQ0FBQyxLQUFLO0FBQzNGO0FBRU8sU0FBUyxRQUFRLElBQUk7QUFDMUIsUUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxNQUFNLEdBQUksQ0FBQztBQUMxRCxNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixRQUFNLElBQUksS0FBSyxNQUFNLElBQUksRUFBRTtBQUMzQixNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixRQUFNLElBQUksS0FBSyxNQUFNLElBQUksRUFBRTtBQUMzQixNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixTQUFPLEdBQUcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQzlCO0FBRUEsU0FBUyxlQUFlO0FBQ3RCLFNBQU8sZ0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsT0FBTyxHQUFJLG1CQUFJLE9BQU8sUUFBUSxPQUFPLFdBQVcsRUFBRSxHQUFFO0FBQ3hHO0FBRUEsU0FBUyxXQUFXLEVBQUUsT0FBTyxNQUFNLE9BQU8sYUFBYSxPQUFPLFNBQVMsR0FBRztBQUN4RSxTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsUUFBUSxhQUFhLFNBQVMsT0FBVSxHQUMzRjtBQUFBLG9CQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsWUFBWSxFQUFFLEdBQ2hFO0FBQUEsc0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUksaUJBQU07QUFBQSxRQUNyRCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFFBQzVCO0FBQUEsU0FDSDtBQUFBLE1BQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZ0JBQUs7QUFBQSxPQUN2QztBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsZ0JBQWE7QUFBQSxJQUNkLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLGFBQWEsSUFBSSxHQUFHLGVBQWUsR0FBRyxVQUFVLGFBQWEsSUFBSSxPQUFVLEdBQ3pILFVBQ0g7QUFBQSxLQUNGO0FBRUo7QUFFTyxTQUFTLGFBQWEsRUFBRSxPQUFPLFNBQVMsZUFBZSxXQUFXLFNBQVMsV0FBVyxRQUFRLEdBQUc7QUFDdEcsRUFBQUUsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxVQUFVO0FBQzFCLGNBQVE7QUFDUixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCLFdBQVcsTUFBTSxRQUFRLFVBQVU7QUFDakMsZ0JBQVU7QUFDVixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxnQkFBQUYsS0FBQyxjQUFXLE9BQWMsTUFBTSxVQUFVLGFBQWEsWUFBWSxDQUFDLGlCQUNsRSwwQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxFQUFFLEdBQ2xEO0FBQUEsb0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUksbUJBQVE7QUFBQSxJQUNyQyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssTUFBTSxLQUFLLEdBQUcsb0NBQXNCO0FBQUEsS0FDakUsR0FDRjtBQUVKO0FBRUEsU0FBUyxZQUFZLEVBQUUsT0FBTyxPQUFPLFNBQVMsU0FBUyxHQUFHO0FBQ3hELFNBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGNBQWMsRUFBRSxHQUNyRDtBQUFBLG9CQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBRCxLQUFDLFlBQVMsU0FBUyxPQUFPLE9BQU8sTUFBTSxPQUFPLFNBQWtCLFVBQW9CO0FBQUEsTUFDcEYsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxNQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBTSxNQUFLO0FBQUEsT0FDN0M7QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGlCQUFPLE1BQU0sSUFBSSxJQUFHO0FBQUEsS0FDdEQ7QUFFSjtBQUVBLFNBQVMsa0JBQWtCLEVBQUUsT0FBTyxTQUFTLFNBQVMsR0FBRztBQUN2RCxTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxjQUFjLEVBQUUsR0FDckQ7QUFBQSxvQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSxzQkFBQUQsS0FBQyxlQUFZLFNBQWtCLE9BQWMsVUFBb0IsS0FBSyxHQUFHLEtBQUssS0FBSyxPQUFPLEdBQUc7QUFBQSxNQUM3RixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBRyxtQ0FBcUI7QUFBQSxNQUNqRCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLGlDQUFtQjtBQUFBLE9BQ3BEO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyx5REFBMkM7QUFBQSxLQUM1RTtBQUVKO0FBRUEsU0FBUyxpQkFBaUIsRUFBRSxPQUFPLE9BQU8sTUFBTSxTQUFTLE9BQU8sR0FBRztBQUNqRSxTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxjQUFjLEVBQUUsR0FDckQ7QUFBQSxvQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSxzQkFBQUQsS0FBQ0csU0FBQSxFQUFPLE9BQWMsU0FBa0IsU0FBUyxRQUFRO0FBQUEsTUFDekQsZ0JBQUFILEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxNQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBSztBQUFBLE9BQ3ZDO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxpQkFBTyxTQUFTLGdCQUFnQixJQUFHO0FBQUEsS0FDckU7QUFFSjtBQUVPLFNBQVMsWUFBWSxFQUFFLFFBQVEsU0FBUyxVQUFVLHFCQUFxQixrQkFBa0IseUJBQXlCLHdCQUF3QixRQUFRLEdBQUc7QUFDMUosUUFBTSxTQUFTO0FBQUEsSUFDYixFQUFFLE1BQU0sVUFBVSxPQUFPLG1CQUFtQixNQUFNLDRDQUE0QyxNQUFNLG1CQUFtQjtBQUFBLElBQ3ZILEVBQUUsTUFBTSxnQkFBZ0IsT0FBTyx3QkFBd0IsTUFBTSwrQ0FBK0MsTUFBTSw2QkFBNkI7QUFBQSxJQUMvSSxFQUFFLE1BQU0sYUFBYSxPQUFPLG1CQUFtQixNQUFNLHVDQUF1QyxNQUFNLG9CQUFvQjtBQUFBLElBQ3RILEVBQUUsTUFBTSxlQUFlLE9BQU8sZ0JBQWdCLE1BQU0saUdBQWlHLE1BQU0sc0JBQXNCO0FBQUEsRUFDbkw7QUFFQSxFQUFBRSxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsY0FBUTtBQUNSLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUNFLGdCQUFBRixLQUFDLGNBQVcsT0FBTSxpQkFBZ0IsTUFBSyxzREFBcUQsWUFBVSxNQUNwRywwQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsRUFBRSxHQUNuRCwwQkFBQUMsTUFBQyxhQUFVLFNBQWtCLGNBQWEsVUFBUyxXQUFTLE1BQUMsY0FBYyxHQUN4RTtBQUFBLFdBQU8sSUFBSSxDQUFDLFVBQ1gsZ0JBQUFELEtBQUMsU0FBdUIsTUFBTSxNQUFNLE1BQ2pDLFdBQUMsRUFBRSxTQUFTLGFBQWEsTUFDeEIsZ0JBQUFBLEtBQUMsZUFBWSxPQUFjLE9BQU8sT0FBTyxNQUFNLElBQUksR0FBRyxTQUFTLGNBQWMsVUFBVSxDQUFDLFVBQVUsU0FBUyxNQUFNLE1BQU0sS0FBSyxHQUFHLEtBRnZILE1BQU0sSUFJbEIsQ0FDRDtBQUFBLElBQ0QsZ0JBQUFBLEtBQUMsU0FBTSxNQUFLLGlCQUNULFdBQUMsRUFBRSxTQUFTLGFBQWEsTUFBTSxnQkFBQUEsS0FBQyxvQkFBaUIsT0FBTyxPQUFPLGVBQWUsT0FBTSx5QkFBd0IsTUFBSyx5QkFBd0IsU0FBUyxjQUFjLFFBQVEscUJBQXFCLEdBQ2hNO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxTQUFNLE1BQUssY0FDVCxXQUFDLEVBQUUsU0FBUyxhQUFhLE1BQU0sZ0JBQUFBLEtBQUMsb0JBQWlCLE9BQU8sT0FBTyxZQUFZLE9BQU0sZUFBYyxNQUFLLGdCQUFlLFNBQVMsY0FBYyxRQUFRLGtCQUFrQixHQUN2SztBQUFBLElBQ0MsQ0FBQyxnQkFBZ0IsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUNyQyxnQkFBQUEsS0FBQyxTQUFNLE1BQU0sR0FBRyxJQUFJLFNBQ2pCLFdBQUMsRUFBRSxTQUFTLGFBQWEsTUFBTSxnQkFBQUEsS0FBQyxvQkFBaUIsT0FBTyxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsT0FBTyxlQUFlLFNBQVMsaUJBQWlCLE1BQU0sR0FBRyxVQUFVLE1BQU0sVUFBVSxJQUFJLElBQUksU0FBUyxjQUFjLFFBQVEsTUFBTSx1QkFBdUIsSUFBSSxHQUFHLEdBQ2pQLENBQ0Q7QUFBQSxJQUNELGdCQUFBQSxLQUFDLFNBQU0sTUFBSyxxQkFDVCxXQUFDLEVBQUUsU0FBUyxhQUFhLE1BQU0sZ0JBQUFBLEtBQUMsb0JBQWlCLE9BQU8sT0FBTyxtQkFBbUIsT0FBTSxtQkFBa0IsTUFBSyx1QkFBc0IsU0FBUyxjQUFjLFFBQVEseUJBQXlCLEdBQ2hNO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxTQUFNLE1BQUssc0JBQ1QsV0FBQyxFQUFFLFNBQVMsYUFBYSxNQUFNLGdCQUFBQSxLQUFDLHFCQUFrQixPQUFPLE9BQU8sb0JBQW9CLFNBQVMsY0FBYyxVQUFVLENBQUMsVUFBVSxTQUFTLHNCQUFzQixLQUFLLEdBQUcsR0FDMUs7QUFBQSxLQUNGLEdBQ0YsR0FDRjtBQUVKO0FBRU8sU0FBUyxVQUFVLEVBQUUsUUFBUSxPQUFPLEdBQUc7QUFDNUMsU0FDRSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDaEMsaUJBQU8sSUFBSSxDQUFDLEdBQUcsTUFDZCxnQkFBQUEsS0FBQyxVQUFhLE9BQU8sRUFBRSxPQUFPLE1BQU0sU0FBUyxPQUFPLElBQUksT0FBTyxNQUFNLE1BQU0sT0FBTyxHQUFJLGFBQUcsSUFBSSxJQUFJLE9BQU8sRUFBRSxHQUFHLE1BQU0sYUFBYSxrQkFBa0IsQ0FBQyxNQUF4SSxDQUEySSxDQUN2SixHQUNIO0FBRUo7QUFFTyxTQUFTLFdBQVcsRUFBRSxRQUFBSSxTQUFRLFNBQVMsYUFBYSxTQUFTLFFBQVEsZUFBZSxTQUFTLFFBQVEsZ0JBQWdCLE9BQU8sMERBQTBELEdBQUc7QUFDOUwsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxjQUFhRCxRQUFPLENBQUMsS0FBSyxJQUFJO0FBQzFELFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUMsY0FBYSxFQUFFO0FBQ3pDLFFBQU0sZUFBZU4sV0FBVUssU0FBUSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFVBQVVOLFlBQVcsR0FBRyxNQUFNLElBQUksQ0FBQztBQUV2RixFQUFBSSxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLE9BQU8sR0FBRztBQUMvQyxvQkFBYyxPQUFPLENBQUM7QUFDdEIsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQ0UsZ0JBQUFGLEtBQUMsY0FBVyxPQUFjLE1BQ3hCLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxRQUFRLElBQUksV0FBVyxFQUFFLEdBQzlELDBCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsU0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1A7QUFBQSxNQUNBLGFBQVk7QUFBQSxNQUNaLFFBQVEsTUFBTTtBQUFBLE1BQ2QsVUFBVTtBQUFBLE1BQ1YsZ0JBQWdCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsV0FBUztBQUFBLE1BQ1QsS0FBSztBQUFBLE1BQ0wsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLFNBQVMsRUFBRSxNQUFNO0FBQzNDLGNBQU0sTUFBTSxFQUFFLGNBQWM7QUFDNUIsZUFDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxXQUFZLElBQUksT0FBTyxJQUFJLFlBQWEsTUFBTSxVQUFVLEVBQUUsR0FDbkc7QUFBQSwwQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw0QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxPQUFPLFdBQVcsVUFBVSxNQUFNLFFBQVEsR0FBRyxHQUFJLFlBQUUsTUFBSztBQUFBLFlBQ2xGLEVBQUUsU0FBUyxXQUFXLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE9BQU8sRUFBRSxHQUFJLHFCQUFLO0FBQUEsWUFDbkYsRUFBRSxTQUFTLGVBQWUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLHVCQUFZO0FBQUEsWUFDNUYsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxZQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxNQUFNLEdBQzlDLGdCQUFNLFNBQVMsRUFBRSxPQUFPLEtBQUssRUFBRSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsYUFBYSxVQUFVLGlCQUFpQixpQkFDL0g7QUFBQSxhQUNGO0FBQUEsVUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxNQUFNLEdBQUksWUFBRSxNQUFLO0FBQUEsV0FDOUQ7QUFBQSxNQUVKO0FBQUE7QUFBQSxFQUNGLEdBQ0YsR0FDRjtBQUVKO0FBRU8sU0FBUyxhQUFhLEVBQUUsU0FBUyxRQUFRLFlBQVksU0FBUyxRQUFRLFFBQVEsR0FBRztBQUN0RixRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlLLGNBQWEsUUFBUSxDQUFDLEtBQUssSUFBSTtBQUM3RCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsRUFBRTtBQUN6QyxRQUFNLFdBQVcsUUFBUSxLQUFLLENBQUMsTUFBTVAsWUFBVyxNQUFNLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQztBQUVyRSxTQUNFLGdCQUFBRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsT0FBTTtBQUFBLE1BQ04sTUFBSztBQUFBLE1BQ0wsT0FBTyxnQkFBQUEsS0FBQyxhQUFVLFFBQWdCLFFBQVEsWUFBWTtBQUFBLE1BRXRELDBCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssRUFBRSxHQUNuRTtBQUFBLHdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxPQUFPLE1BQU0sR0FDbEQsMEJBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUDtBQUFBLFlBQ0EsYUFBWTtBQUFBLFlBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTUYsWUFBVyxHQUFHLEVBQUUsSUFBSSxLQUFLO0FBQUEsWUFDM0MsVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUM7QUFBQSxZQUNuQyxVQUFVLENBQUMsTUFBTSxPQUFPLEVBQUUsSUFBSTtBQUFBLFlBQzlCLFVBQVU7QUFBQSxZQUNWLFdBQVM7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxTQUFTLEVBQUUsTUFDckMsZ0JBQUFHLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksV0FBWSxJQUFJLE9BQU8sSUFBSSxZQUFhLE1BQU0sVUFBVSxFQUFFLEdBQ2hHO0FBQUEsOEJBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxXQUFXLFVBQVUsR0FBRyxHQUFJLFlBQUUsS0FBSyxRQUFRLE9BQU8sR0FBRyxHQUFFLEdBQ3JHO0FBQUEsY0FDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxNQUFNLEdBQUksZUFBSyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUc7QUFBQSxlQUM1RTtBQUFBO0FBQUEsUUFFSixHQUNGO0FBQUEsUUFDQSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDM0Usc0JBQVksUUFBUSxJQUNuQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBSSxrQkFBUSxFQUFFLEtBQUssTUFBTSxHQUFHLEdBQUksR0FBRSxJQUUzRCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxpQ0FBbUIsR0FFdEQ7QUFBQSxTQUNGO0FBQUE7QUFBQSxFQUNGO0FBRUo7QUFFTyxTQUFTLGdCQUFnQixFQUFFLFNBQVMsT0FBTyxTQUFTLFFBQVEsUUFBUSxHQUFHO0FBQzVFLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUssY0FBYSxRQUFRLENBQUMsS0FBSyxJQUFJO0FBRTdELFNBQ0UsZ0JBQUFMLEtBQUMsY0FBVyxPQUFNLHVCQUFzQixNQUFLLHVEQUMzQywwQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sUUFBUSxJQUFJLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FDbkU7QUFBQSxvQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsT0FBTyxNQUFNLEdBQ2xELDBCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsU0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1A7QUFBQSxRQUNBLGFBQVk7QUFBQSxRQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU1GLFlBQVcsR0FBRyxFQUFFLElBQUksS0FBSztBQUFBLFFBQzNDLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDO0FBQUEsUUFDbkMsVUFBVTtBQUFBLFFBQ1YsVUFBVTtBQUFBLFFBQ1YsV0FBUztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLFNBQVMsRUFBRSxNQUNyQyxnQkFBQUcsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sSUFBSSxXQUFZLElBQUksT0FBTyxJQUFJLFlBQWEsTUFBTSxVQUFVLEVBQUUsR0FDaEc7QUFBQSwwQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLFdBQVcsVUFBVSxHQUFHLEdBQUksWUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDckc7QUFBQSxVQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxlQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFTO0FBQUEsV0FDeEY7QUFBQTtBQUFBLElBRUosR0FDRjtBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQzNFLGtCQUFRLElBQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ3BDO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksa0NBQXdCLE1BQU0sUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLFlBQVc7QUFBQSxNQUM3RixNQUFNLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUNwQyxnQkFBQUEsS0FBQyxVQUFhLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxzQkFBTyxFQUFFLEtBQUssTUFBM0MsQ0FBOEMsQ0FDMUQ7QUFBQSxNQUNELGdCQUFBQSxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUksa0JBQVEsRUFBRSxLQUFLLE1BQU0sR0FBRyxHQUFJLEdBQUU7QUFBQSxPQUM3RCxJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLGtDQUFvQixHQUV2RDtBQUFBLEtBQ0YsR0FDRjtBQUVKO0FBRU8sU0FBUyxrQkFBa0IsRUFBRSxRQUFRLFNBQVMsU0FBUyxVQUFVLE9BQU8sR0FBRztBQUNoRixTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQy9EO0FBQUEsb0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUcsNEJBQWM7QUFBQSxJQUM1RCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxrQkFBTztBQUFBLE1BQ3ZDLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sUUFBUSxHQUFJLGlCQUFPLEtBQUssUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUMxRjtBQUFBLE9BQ0Y7QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQsMEJBQUFBO0FBQUEsTUFBQ007QUFBQSxNQUFBO0FBQUEsUUFDQyxTQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osWUFBWTtBQUFBLFFBQ1osS0FBSztBQUFBLFFBQ0wsU0FBTztBQUFBLFFBQ1A7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixnQkFBQUwsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSwwQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw0QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLG1CQUFTLFlBQU8sTUFBSztBQUFBLFlBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLFlBQUUsT0FBTTtBQUFBLGFBQzNEO0FBQUEsVUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLEVBQUUsSUFBSSxJQUFHO0FBQUEsV0FDaEQ7QUFBQTtBQUFBLElBRUosR0FDRjtBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsK0RBQWlEO0FBQUEsS0FDbEY7QUFFSjtBQUVBLFNBQVMsVUFBVSxTQUFTLFNBQVM7QUFDbkMsRUFBQUUsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVEsRUFBRztBQUNoQixRQUFJLE1BQU0sUUFBUSxVQUFVO0FBQzFCLGNBQVE7QUFDUixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFTyxTQUFTLFlBQVksRUFBRSxVQUFVLFFBQVEsWUFBWSxTQUFTLFNBQVMsV0FBVyxRQUFRLFVBQVUsUUFBUSxHQUFHO0FBQ3BILFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUcsY0FBYSxTQUFTLENBQUMsS0FBSyxJQUFJO0FBQzlELFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUEsY0FBYSxNQUFNO0FBQzNDLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsY0FBYSxFQUFFO0FBQ3pDLFFBQU0saUJBQWlCTixXQUFVLFVBQVUsTUFBTSxHQUFHLENBQUMsR0FBRyxZQUFZO0FBQ2xFLFVBQU0sY0FBYyxRQUFRLGNBQWNELFlBQVcsR0FBRyxRQUFRLFdBQVcsSUFBSTtBQUMvRSxRQUFJLGVBQWUsRUFBRyxRQUFPLE1BQVM7QUFDdEMsV0FBTyxLQUFLLElBQUlBLFlBQVcsR0FBRyxRQUFRLGtCQUFrQixRQUFRLEtBQUssR0FBR0EsWUFBVyxHQUFHLFFBQVEsWUFBWSxFQUFFLENBQUM7QUFBQSxFQUMvRyxDQUFDO0FBQ0QsUUFBTSxnQkFBZ0IsSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLFlBQVksUUFBUSxRQUFRLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxPQUFPO0FBQ2xHLFFBQU0sa0JBQWtCLE1BQU07QUFDNUIsUUFBSSxRQUFTLFFBQU87QUFDcEIsVUFBTSxXQUFXLFFBQVE7QUFDekIsV0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLFdBQVc7QUFBQSxFQUNsRDtBQUNBLFlBQVUsTUFBTSxTQUFTLE9BQU87QUFDaEMsRUFBQUksVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxTQUFTLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxNQUFNO0FBQ3JELGNBQVEsQ0FBQyxZQUFZLFlBQVksU0FBUyxZQUFZLE1BQU07QUFDNUQsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLGdCQUFnQjtBQUNqQyxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxVQUFVO0FBQy9DLGVBQVMsUUFBUTtBQUNqQixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxnQkFBQUY7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNDLE9BQU07QUFBQSxNQUNOLE1BQUs7QUFBQSxNQUNMLE9BQU8sZ0JBQUFBLEtBQUMsYUFBVSxRQUFnQixRQUFRLFlBQVk7QUFBQSxNQUN0RCxZQUFVO0FBQUEsTUFFViwwQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FDdkU7QUFBQSx3QkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxPQUFPLFVBQVUsRUFBRSxHQUMvRCxvQkFDQyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxpQ0FBbUIsSUFDaEQsU0FBUyxXQUFXLElBQ3RCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLGtDQUFvQixJQUVuRCxnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFNBQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQLFNBQVMsV0FBVyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQUEsWUFDMUMsYUFBWTtBQUFBLFlBQ1osUUFBUSxNQUFNO0FBQUEsWUFDZCxVQUFVO0FBQUEsWUFDVixnQkFBZ0IsQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUFBLFlBQ25DLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLFdBQVM7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxTQUFTLEVBQUUsTUFDckMsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksV0FBWSxJQUFJLE9BQU8sSUFBSSxZQUFjLGdCQUFnQixFQUFFLFFBQVEsTUFBTyxVQUFVLEVBQUUsR0FDM0g7QUFBQSwrQkFBaUIsZ0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsT0FBTyxJQUFJLFdBQVcsT0FBTyxFQUFFLE1BQU0sR0FBSSxhQUFHLEVBQUUsUUFBUSxNQUFLO0FBQUEsY0FDeEgsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxXQUFXLFVBQVUsSUFBSSxJQUFJLFlBQVksZ0JBQWdCLE9BQU8sRUFBRSxNQUFNLEdBQUksWUFBRSxNQUFNLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDdEo7QUFBQSxjQUNDLEVBQUUsT0FBTyxPQUFPLGFBQWEsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsT0FBTyxFQUFFLEdBQUcsc0JBQVE7QUFBQSxjQUM3RixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxNQUFNLEdBQUksZUFBSyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUc7QUFBQSxlQUM1RTtBQUFBO0FBQUEsUUFFSixHQUVKO0FBQUEsUUFDQSxnQkFBQUEsS0FBQyxnQkFBYTtBQUFBLFFBQ2QsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQzNFLDBCQUFnQixJQUNmLGdCQUFBQSxLQUFDTyxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsV0FBVyxLQUFLLE1BQU0sV0FBVyxXQUFTLE1BQ3BGLDBCQUFBTixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLDBCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUcsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLGdCQUFnQixFQUFFLFVBQVUsSUFBSSxTQUFTLE9BQU8sS0FBSyxRQUFRLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksZ0JBQWdCLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBRztBQUFBLFVBQ2xNLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQUEsV0FDekIsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLEdBQUcsU0FBUyxJQUMxQyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDbkM7QUFBQSw0QkFBZ0IsRUFBRSxzQkFBc0IsZ0JBQWdCLEVBQUUsUUFBUSxVQUNqRSxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHLGdCQUFnQixFQUFFLHNCQUFzQixnQkFBZ0IsRUFBRSxRQUFRLE1BQU0sNkJBQTRCO0FBQUEsYUFFdkksZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsTUFDL0MsZ0JBQUFBLEtBQUMsU0FBaUMsT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsR0FDN0YsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLFNBQVMsU0FBUyxLQUFLLE1BQU0sR0FBSSxrQkFBUSxNQUFLLEtBRHBFLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUU5QixDQUNEO0FBQUEsYUFDSCxJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLG1DQUFxQjtBQUFBLFdBRXhELEdBQ0YsSUFFQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyx5QkFBVyxHQUU5QztBQUFBLFNBQ0Y7QUFBQTtBQUFBLEVBQ0Y7QUFFSjtBQUVPLFNBQVMsWUFBWSxFQUFFLFVBQVUsUUFBUSxZQUFZLFNBQVMsa0JBQWtCLFVBQVUsUUFBUSxHQUFHO0FBQzFHLFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUssY0FBYSxJQUFJO0FBQ3JELFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUEsY0FBYSxNQUFNO0FBQzNDLFFBQU0sVUFBVSxTQUFTLFNBQVMsV0FBVyxDQUFDLElBQUksV0FBVyxJQUFJLFNBQVMsQ0FBQyxLQUFLO0FBQ2hGLFlBQVUsTUFBTSxTQUFTLE9BQU87QUFDaEMsRUFBQUgsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxTQUFTLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxNQUFNO0FBQ3JELGNBQVEsQ0FBQyxNQUFPLE1BQU0sU0FBUyxZQUFZLE1BQU87QUFDbEQsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sU0FBUztBQUM5QyxlQUFTLE9BQU87QUFDaEIsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQ0UsZ0JBQUFGO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFNO0FBQUEsTUFDTixNQUFLO0FBQUEsTUFDTCxPQUFPLGdCQUFBQSxLQUFDLGFBQVUsUUFBZ0IsUUFBUSxZQUFZO0FBQUEsTUFDdEQsWUFBVTtBQUFBLE1BRVYsMEJBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxXQUFXLEdBQUcsS0FBSyxFQUFFLEdBQ3ZFO0FBQUEsd0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsT0FBTyxVQUFVLEVBQUUsR0FDL0QsbUJBQVMsV0FBVyxJQUNuQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxrQ0FBb0IsSUFFbkQsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxTQUFTLFdBQVcsS0FBSyxNQUFNO0FBQUEsWUFDL0IsYUFBWTtBQUFBLFlBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTUYsWUFBVyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSztBQUFBLFlBQ2pFLGdCQUFnQjtBQUFBLFlBQ2hCLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLFdBQVM7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxTQUFTLEVBQUUsTUFDckMsZ0JBQUFHLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksV0FBWSxJQUFJLE9BQU8sSUFBSSxZQUFhLE1BQU0sVUFBVSxFQUFFLEdBQ2hHO0FBQUEsOEJBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksUUFBUSxFQUFFLFVBQVUsT0FBTyxXQUFXLFVBQVcsRUFBRSxXQUFXLFFBQVEsR0FBSSxHQUFJLGFBQUcsRUFBRSxXQUFXLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFHLEdBQzNKO0FBQUEsY0FDQyxFQUFFLFlBQVksZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFHLDBCQUFZO0FBQUEsY0FDL0UsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLGVBQUssRUFBRSxLQUFLLElBQUc7QUFBQSxlQUN0RTtBQUFBO0FBQUEsUUFFSixHQUVKO0FBQUEsUUFDQSxnQkFBQUEsS0FBQyxnQkFBYTtBQUFBLFFBQ2QsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQzNFLG9CQUNDLGdCQUFBQyxNQUFDTSxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsV0FBVyxLQUFLLE1BQU0sV0FBVyxXQUFTLE1BQ25GO0FBQUEsa0JBQVEsWUFBWSxnQkFBQVAsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxLQUFLLEdBQUcsd0JBQVU7QUFBQSxVQUMxRSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUksa0JBQVEsZUFBZSxrQkFBaUI7QUFBQSxVQUN0RixnQkFBQUEsS0FBQyxVQUFLLGVBQUM7QUFBQSxVQUNQLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxHQUFJLGtCQUFRLE1BQUs7QUFBQSxXQUNqRCxJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLHlCQUFXLEdBRTlDO0FBQUEsU0FDRjtBQUFBO0FBQUEsRUFDRjtBQUVKO0FBRU8sU0FBUyxZQUFZLEVBQUUsUUFBUSxTQUFTLGNBQWMsU0FBUyxRQUFRLGVBQWUsUUFBUSxHQUFHO0FBQ3RHLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUssY0FBYSxDQUFDO0FBQzFDLFFBQU0sUUFBUTtBQUVkLEVBQUFILFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDbkMsb0JBQWMsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUM3QixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxRQUFRLENBQUMsTUFBTyxFQUFFLFFBQVEsT0FBTyxZQUFZLEVBQUU7QUFFckQsU0FDRSxnQkFBQUYsS0FBQyxjQUFXLE9BQU0sbUJBQWtCLE1BQUssd0VBQ3ZDLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQsMEJBQUFBO0FBQUEsSUFBQ007QUFBQSxJQUFBO0FBQUEsTUFDQyxTQUFPO0FBQUEsTUFDUDtBQUFBLE1BQ0EsVUFBVSxPQUFPO0FBQUEsTUFDakIsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLFNBQU87QUFBQSxNQUNQLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixnQkFBQUwsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLG1CQUFTLFlBQU8sTUFBSztBQUFBLFFBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLGdCQUFNLENBQUMsRUFBRSxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxRQUNwRyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxZQUFFLE1BQUs7QUFBQSxRQUN0QyxFQUFFLFFBQVEsV0FBVyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLE1BQU0sR0FBSSxzQkFBTTtBQUFBLFFBQy9FLEVBQUUsUUFBUSxnQkFBZ0IsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksd0JBQWE7QUFBQSxTQUMxRTtBQUFBO0FBQUEsRUFFSixHQUNGLEdBQ0Y7QUFFSjtBQUVPLFNBQVMsV0FBVyxFQUFFLFFBQVEsTUFBTSxTQUFTLFFBQVEsV0FBVyxRQUFRLEdBQUc7QUFDaEYsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJSyxjQUFhLEtBQUssSUFBSSxHQUFHLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO0FBRTdGLFNBQ0UsZ0JBQUFMLEtBQUMsY0FBVyxPQUFNLFNBQVEsTUFBSyx1REFDN0IsMEJBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNsRCwwQkFBQUE7QUFBQSxJQUFDTTtBQUFBLElBQUE7QUFBQSxNQUNDLE9BQU87QUFBQSxNQUNQLFVBQVUsT0FBTztBQUFBLE1BQ2pCLFVBQVUsQ0FBQyxNQUFNO0FBQ2Ysa0JBQVUsQ0FBQztBQUNYLGtCQUFVLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDckI7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZO0FBQUEsTUFDWixTQUFPO0FBQUEsTUFDUCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFDdkIsZ0JBQUFMLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxRQUN4RCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLEdBQUcsR0FBSSxZQUFFLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLFFBQzlGLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLFlBQUUsTUFBSztBQUFBLFFBQ3RDLEVBQUUsUUFBUSxRQUFRLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksTUFBTSxHQUFJLHNCQUFNO0FBQUEsU0FDL0U7QUFBQTtBQUFBLEVBRUosR0FDRixHQUNGO0FBRUo7QUFFQSxTQUFTLGdCQUFnQixFQUFFLFNBQVMsR0FBRztBQUNyQyxRQUFNLFNBQVNRLGFBQVksR0FBR0MsTUFBSyxHQUFHLENBQUM7QUFDdkMsUUFBTSxTQUFTQyxXQUFVO0FBQ3pCLFNBQU8sSUFBSSxDQUFDO0FBQ1osUUFBTUMsU0FBUSxLQUFLLElBQUksR0FBRyxPQUFPLFNBQVMsQ0FBQztBQUMzQyxRQUFNLFVBQVUsS0FBSyxNQUFNQSxTQUFRLE9BQU8sQ0FBQztBQUMzQyxRQUFNLGFBQWEsS0FBSyxJQUFJLEdBQUdBLFNBQVEsQ0FBQztBQUN4QyxRQUFNLFFBQVEsU0FBUyxTQUFTLE9BQU8sQ0FBQyxLQUFLLFlBQVksTUFBTSxRQUFRLFFBQVEsQ0FBQztBQUNoRixRQUFNLE9BQU8sU0FBUyxZQUFZO0FBQ2xDLFFBQU0sVUFBVSxRQUFRLFNBQVMsUUFBUSxLQUFLLElBQUksS0FBSyxPQUFPLFNBQVMsUUFBUSxHQUFHLElBQUk7QUFDdEYsTUFBSSxXQUFXO0FBQ2YsUUFBTSxRQUFRLENBQUM7QUFFZixXQUFTLElBQUksR0FBRyxJQUFJQSxRQUFPLEtBQUs7QUFDOUIsVUFBTSxVQUFVLFNBQVMsU0FBUyxLQUFLLENBQUMsU0FBUztBQUMvQyxrQkFBWSxLQUFLLFNBQVMsUUFBUUE7QUFDbEMsYUFBTyxJQUFJO0FBQUEsSUFDYixDQUFDO0FBQ0QsZUFBVztBQUNYLFVBQU07QUFBQSxNQUNKLGdCQUFBWCxLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sS0FBSyxVQUFVLFdBQVcsU0FBUyxTQUFTLE1BQU0sR0FDN0UsZUFBSyxVQUFVLE1BQU0sVUFBVSxXQUFNLFlBRDdCLENBRVg7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sZUFBZSxDQUFDLFdBQVcsU0FBUyxNQUFPLEdBQUcsS0FBSyxNQUFNLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQzVHLFFBQU0sYUFBYSxNQUFNO0FBQ3ZCLFVBQU0sT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFJWSxRQUFPO0FBQ1gsZUFBVyxXQUFXLFNBQVMsVUFBVTtBQUN2QyxZQUFNLFlBQVksUUFBUSxNQUFNLFNBQVMsYUFBYSxRQUFRLE1BQU0sRUFBRSxTQUFTO0FBQy9FLFVBQUlBLFFBQU8sS0FBS0EsUUFBTyxZQUFZLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBUyxDQUFDLEdBQUc7QUFDakUsYUFBSyxLQUFLLENBQUMsQ0FBQztBQUNaLFFBQUFBLFFBQU87QUFBQSxNQUNUO0FBQ0EsV0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLE9BQU87QUFDeEIsTUFBQUEsU0FBUTtBQUFBLElBQ1Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQ0UsZ0JBQUFYLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNqRDtBQUFBLGNBQVUsS0FDVCxnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sY0FBYyxFQUFFLEdBQ2xEO0FBQUEsc0JBQUFELEtBQUMsaUJBQWMsT0FBTyxTQUFTLFNBQVMsR0FBRyxVQUFVLEtBQU0sT0FBTyxXQUFXLEtBQUssTUFBTSxTQUFTLFdBQVcsT0FBTyxHQUFHLFlBQVksV0FBVyxRQUFRLENBQUMsVUFBVSxXQUFXLE9BQU8sVUFBVSxHQUFHO0FBQUEsTUFDL0wsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLEtBQUssTUFBTSxNQUFNLEdBQUksYUFBRyxTQUFTLFdBQVcsS0FBSyxHQUFHLEdBQUcsS0FBSyxNQUFNLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFFO0FBQUEsT0FDN0g7QUFBQSxJQUVGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFJLGlCQUFNO0FBQUEsSUFDN0MsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ25DLHFCQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssYUFDdEIsZ0JBQUFBLEtBQUMsU0FBbUIsT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUMvQyxjQUFJLElBQUksQ0FBQyxZQUNSLGdCQUFBQyxNQUFDLFNBQXdCLE9BQU8sRUFBRSxlQUFlLE9BQU8sYUFBYSxFQUFFLEdBQ3JFO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLE1BQU0sR0FBRyxvQkFBQztBQUFBLE1BQ3hDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGNBQUksUUFBUSxLQUFLLEtBQUk7QUFBQSxNQUNyRCxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLE9BQU8sUUFBUTtBQUFBLFVBQ2YsU0FBUztBQUFBLFVBQ1QsVUFBVTtBQUFBLFVBQ1YsT0FBTztBQUFBLFVBQ1AsV0FBVyxPQUFPO0FBQUEsVUFDbEIsUUFBUTtBQUFBO0FBQUEsTUFDVjtBQUFBLFNBVlEsUUFBUSxLQVdsQixDQUNELEtBZE8sUUFlVixDQUNELEdBQ0g7QUFBQSxLQUNGO0FBRUo7QUFFTyxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sVUFBVSxTQUFTLFFBQVEsR0FBRztBQUN6RSxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBRWhDLFNBQ0UsZ0JBQUFDLE1BQUMsY0FBVyxPQUFjLE1BQUssNENBQzVCO0FBQUEsZ0JBQVksZ0JBQUFELEtBQUMsbUJBQWdCLFVBQW9CO0FBQUEsSUFDbEQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsSUFBSSxXQUFXLEVBQUUsR0FDN0QsZUFBSyxXQUFXLElBQ2YsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsOEJBQWdCLElBRS9DLGdCQUFBQSxLQUFDTyxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQWtCLFdBQVMsTUFDM0QsZUFBSyxJQUFJLENBQUMsS0FBSyxNQUNkLGdCQUFBTixNQUFDLFNBQTZCLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEdBQ3pGO0FBQUEsc0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxjQUFJLE1BQUs7QUFBQSxRQUM1QyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFFBQzVCLElBQUksUUFBUSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxjQUFJLE1BQUs7QUFBQSxTQUN4RDtBQUFBLE1BQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksY0FBSSxRQUFRLGtCQUFpQjtBQUFBLFNBTnJELEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxFQU8xQixDQUNELEdBQ0gsR0FFSjtBQUFBLEtBQ0Y7QUFFSjtBQUVPLFNBQVMsYUFBYSxFQUFFLFVBQVUsU0FBUyxTQUFTLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxRQUFRLEdBQUc7QUFDNUgsUUFBTSxPQUFPLFNBQVMsUUFBUSxDQUFDLFlBQVksUUFBUSxVQUFVLElBQUksQ0FBQyxVQUFVLFdBQVc7QUFBQSxJQUNyRixHQUFHO0FBQUEsSUFDSCxhQUFhLFFBQVE7QUFBQSxJQUNyQixTQUFTLFFBQVEsVUFBVSxTQUFTO0FBQUEsSUFDcEMsT0FBTyxVQUFVO0FBQUEsSUFDakIsTUFBTSxVQUFVLFFBQVEsVUFBVSxTQUFTO0FBQUEsRUFDN0MsRUFBRSxDQUFDO0FBQ0gsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJSyxjQUFhLEtBQUssQ0FBQyxLQUFLLElBQUk7QUFDMUQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxjQUFhLFVBQVU7QUFDL0MsWUFBVSxNQUFNLFNBQVMsT0FBTztBQUNoQyxFQUFBSCxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFNBQVMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLE1BQU07QUFDckQsVUFBSSxRQUFRLEdBQUcsU0FBUyxPQUFRLFNBQVEsQ0FBQyxZQUFZLFlBQVksYUFBYSxhQUFhLFVBQVU7QUFDckcsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxLQUFLLE1BQU0sY0FBYyxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQ3pFLG9CQUFjLFFBQVEsQ0FBQztBQUN2QixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEtBQUssTUFBTSxjQUFjLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDekUsZUFBUyxRQUFRLENBQUM7QUFDbEIsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxpQkFBTyxjQUFJLElBQUksSUFBSSxXQUFXLElBQUksV0FBVyxJQUFJLE9BQU8sT0FBTztBQUU1RyxTQUNFLGdCQUFBRixLQUFDLGNBQVcsT0FBTSxrQkFBaUIsTUFBSyxpR0FBc0YsWUFBVSxNQUN0SSwwQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FDdkU7QUFBQSxvQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxPQUFPLFVBQVUsRUFBRSxHQUMvRCxvQkFDQyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxpQ0FBbUIsSUFDaEQsS0FBSyxXQUFXLElBQ2xCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLG1DQUFxQixJQUVwRCxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLFNBQVMsV0FBVyxLQUFLLE1BQU07QUFBQSxRQUMvQixhQUFZO0FBQUEsUUFDWixRQUFRLENBQUMsT0FBTyxRQUFRRixZQUFXLE9BQU8sR0FBRyxJQUFJLFdBQVcsSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLEtBQUs7QUFBQSxRQUN2RixnQkFBZ0I7QUFBQSxRQUNoQixVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsUUFDVixXQUFTO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxZQUFZLENBQUMsS0FBSyxFQUFFLFVBQVUsU0FBUyxPQUFPLE1BQzVDLGdCQUFBRyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNuQztBQUFBLGNBQUksV0FBVyxJQUFJLFNBQVMsZ0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUksb0JBQUssSUFBSSxXQUFXLElBQUc7QUFBQSxVQUNqRixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sSUFBSSxXQUFZLFNBQVMsT0FBTyxJQUFJLFlBQWEsTUFBTSxVQUFVLEVBQUUsR0FDckc7QUFBQSw0QkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLFdBQVcsVUFBVSxHQUFHLEdBQUksY0FBSSxVQUFVLEtBQUssY0FBYyxHQUFHLENBQUMsS0FBSyxJQUFJLGFBQVksR0FDcEk7QUFBQSxZQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxlQUFLLElBQUksVUFBVSxjQUFjLEVBQUUsR0FBRyxJQUFJLFNBQVMsUUFBUSxJQUFJLE9BQU8sRUFBRSxJQUFJLGFBQWEsSUFBRztBQUFBLGFBQ25KO0FBQUEsV0FDRjtBQUFBO0FBQUEsSUFFSixHQUVKO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxnQkFBYTtBQUFBLElBQ2QsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQzNFLGtCQUFRLEdBQUcsU0FBUyxTQUNuQixnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUVDLFNBQU87QUFBQSxRQUNQLE9BQU8sUUFBUSxFQUFFO0FBQUEsUUFDakIsU0FBUyxXQUFXLEtBQUssTUFBTTtBQUFBLFFBQy9CLGFBQVk7QUFBQSxRQUNaLFFBQVEsQ0FBQyxPQUFPLFlBQVlGLFlBQVcsT0FBTyxRQUFRLEtBQUssS0FBSztBQUFBLFFBQ2hFLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUNWLFdBQVM7QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxTQUFTLE9BQU8sTUFDaEQsZ0JBQUFHLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksV0FBWSxTQUFTLE9BQU8sSUFBSSxZQUFhLE1BQU0sVUFBVSxFQUFFLEdBQ3JHO0FBQUEsMEJBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxTQUFTLFVBQVUsV0FBVyxHQUFJLGtCQUFRLE1BQU0sUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUNqSDtBQUFBLFVBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLGVBQUssUUFBUSxLQUFLLElBQUksUUFBUSxVQUFVLElBQUksU0FBUyxPQUFPLEtBQUssUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFHO0FBQUEsV0FDOUk7QUFBQTtBQUFBLE1BaEJHLFFBQVEsRUFBRTtBQUFBLElBa0JqQixJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLHlCQUFXLEdBRTlDO0FBQUEsS0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLGFBQWEsRUFBRSxXQUFBYSxZQUFXLFNBQVMsV0FBVyxjQUFjLFFBQVEsR0FBRztBQUNyRixRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlSLGNBQWEsQ0FBQztBQUN4QyxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBRWhDLFFBQU0sV0FBVyxNQUFNUSxXQUFVLEtBQUssSUFBSSxNQUFNLEdBQUdBLFdBQVUsU0FBUyxDQUFDLENBQUMsS0FBSztBQUU3RSxFQUFBWCxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFVBQU0sSUFBSSxTQUFTO0FBQ25CLFFBQUksS0FBSyxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sRUFBRSxXQUFXO0FBQ3ZELG1CQUFhLENBQUM7QUFDZCxZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxnQkFBQUYsS0FBQyxjQUFXLE9BQU0sMEJBQXlCLE1BQUssdURBQzlDLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQsMEJBQUFBO0FBQUEsSUFBQ007QUFBQSxJQUFBO0FBQUEsTUFDQyxTQUFPO0FBQUEsTUFDUCxPQUFPTztBQUFBLE1BQ1AsVUFBVSxNQUFNO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLFNBQU87QUFBQSxNQUNQLFVBQVUsQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUFBLE1BQzVCLFVBQVU7QUFBQSxNQUNWLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixnQkFBQVosTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLG1CQUFTLFlBQU8sTUFBSztBQUFBLFFBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLE9BQU8sSUFBSSxNQUFNLEdBQUksWUFBRSxZQUFZLFdBQU0sVUFBSTtBQUFBLFFBQ2pGLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLGNBQUksRUFBRSxLQUFLLE1BQUs7QUFBQSxRQUNqRSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLE1BQU0sR0FDL0MsWUFBRSxZQUFZLFlBQVksRUFBRSxRQUFRLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLGlCQUNqRSxHQUNGO0FBQUEsU0FDRjtBQUFBO0FBQUEsRUFFSixHQUNGLEdBQ0Y7QUFFSjtBQUVPLFNBQVMsYUFBYSxFQUFFLFNBQUFjLFVBQVMsU0FBUyxVQUFVLFFBQVEsR0FBRztBQUNwRSxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlULGNBQWEsQ0FBQztBQUN4QyxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLGNBQWEsQ0FBQztBQUN0QyxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBQ2hDLEVBQUFVLGFBQVksTUFBTSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFJO0FBQzdDLE9BQUssS0FBSztBQUVWLFFBQU0sV0FBVyxNQUFNRCxTQUFRLEtBQUssSUFBSSxNQUFNLEdBQUdBLFNBQVEsU0FBUyxDQUFDLENBQUMsS0FBSztBQUV6RSxFQUFBWixVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFVBQU0sSUFBSSxTQUFTO0FBQ25CLFFBQUksS0FBSyxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDeEMsZUFBUyxDQUFDO0FBQ1YsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sWUFBWSxDQUFDLE9BQU87QUFDeEIsVUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxLQUFLLEtBQUssSUFBSSxLQUFLLEdBQUksQ0FBQztBQUM3RCxRQUFJLE9BQU8sR0FBSSxRQUFPLE1BQU0sSUFBSTtBQUNoQyxVQUFNLE9BQU8sS0FBSyxNQUFNLE9BQU8sRUFBRTtBQUNqQyxRQUFJLE9BQU8sR0FBSSxRQUFPLE1BQU0sSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUM5QyxXQUFPLE1BQU0sS0FBSyxNQUFNLE9BQU8sRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFO0FBQUEsRUFDbEQ7QUFFQSxTQUNFLGdCQUFBRixLQUFDLGNBQVcsT0FBTSxzQkFBcUIsTUFBSywwREFDMUMsMEJBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNqRCxVQUFBYyxTQUFRLFdBQVcsSUFDbEIsZ0JBQUFkLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsZ0ZBQWtFLElBRWpHLGdCQUFBQTtBQUFBLElBQUNNO0FBQUEsSUFBQTtBQUFBLE1BQ0MsU0FBTztBQUFBLE1BQ1AsT0FBT1E7QUFBQSxNQUNQLFVBQVUsTUFBTTtBQUFBLE1BQ2hCLFVBQVU7QUFBQSxNQUNWO0FBQUEsTUFDQSxZQUFZO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixLQUFLO0FBQUEsTUFDTCxTQUFPO0FBQUEsTUFDUCxVQUFVLENBQUMsTUFBTSxTQUFTLENBQUM7QUFBQSxNQUMzQixVQUFVO0FBQUEsTUFDVixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFDdkIsZ0JBQUFiLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ3BDO0FBQUEsd0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsMEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxVQUN4RCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLEdBQUcsR0FBSSxvQkFBSyxFQUFFLEVBQUUsSUFBRztBQUFBLFVBQzdELGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsVUFDN0IsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksb0JBQVUsRUFBRSxFQUFFLEdBQUU7QUFBQSxVQUNoRCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxJQUFHO0FBQUEsV0FDN0U7QUFBQSxRQUNBLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEdBQUcsZUFBZSxNQUFNLEdBQ3pEO0FBQUEsMEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksa0JBQU87QUFBQSxVQUN2QyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxRQUFRLEdBQUksWUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUU7QUFBQSxXQUNyRjtBQUFBLFNBQ0Y7QUFBQTtBQUFBLEVBRUosR0FFSixHQUNGO0FBRUo7QUFFQSxTQUFTLFVBQVUsUUFBUTtBQUN6QixRQUFNLFVBQVU7QUFBQSxJQUNkLFdBQVcsRUFBRSxNQUFNLFVBQUssT0FBTyxPQUFPLEVBQUU7QUFBQSxJQUN4QyxZQUFZLEVBQUUsTUFBTSxVQUFLLE9BQU8sVUFBVTtBQUFBLElBQzFDLE9BQU8sRUFBRSxNQUFNLFVBQUssT0FBTyxJQUFJO0FBQUEsSUFDL0IsVUFBVSxFQUFFLE1BQU0sVUFBSyxPQUFPLE1BQU07QUFBQSxJQUNwQyxNQUFNLEVBQUUsTUFBTSxVQUFLLE9BQU8sTUFBTTtBQUFBLEVBQ2xDO0FBQ0EsU0FBTyxRQUFRLE1BQU0sS0FBSyxRQUFRO0FBQ3BDO0FBRUEsU0FBUyxVQUFVLEVBQUUsT0FBTyxRQUFRLFNBQVMsR0FBRztBQUM5QyxTQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLG9CQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksTUFBTSxHQUFJLGlCQUFNO0FBQUEsSUFDekQ7QUFBQSxJQUNELGdCQUFBQSxLQUFDLFVBQUssZUFBQztBQUFBLEtBQ1Q7QUFFSjtBQUVBLFNBQVMsY0FBYyxFQUFFLFNBQVMsUUFBUSxRQUFRLFdBQVcsU0FBUyxHQUFHO0FBQ3ZFLFFBQU0sVUFBVSxTQUFTLGdCQUFnQixPQUFPLE9BQU8sSUFBSTtBQUMzRCxRQUFNLFVBQVUsQ0FBQyxDQUFDO0FBQ2xCLFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUssY0FBYSxRQUFRLFFBQVEsRUFBRTtBQUN2RCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsUUFBUSxTQUFTLFFBQVE7QUFDaEUsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxjQUFhLFNBQVMsUUFBUSxPQUFPO0FBQ3ZFLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsY0FBYSxTQUFTLFNBQVMsU0FBUyxRQUFRLE1BQU0sUUFBUSxXQUFXLEVBQUU7QUFDdkcsUUFBTSxpQkFBaUIsU0FBUyxTQUFTLFNBQ3JDLE9BQU8sWUFBWSxPQUFPLEtBQUssUUFBUSxPQUFPLEVBQUUsSUFBSSxDQUFDVyxVQUFTLENBQUNBLE9BQU0sZUFBZSxDQUFDLENBQUMsSUFDdEYsQ0FBQztBQUNMLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSVgsY0FBYSxxQkFBcUIsSUFBSSxjQUFjLEVBQUUsS0FBSyxDQUFDO0FBRTFGLFFBQU0sS0FBSyxTQUFTLEVBQUUsU0FBUyxVQUFVLGNBQWMsT0FBTyxDQUFDO0FBQy9ELE1BQUksQ0FBQyxTQUFTO0FBQ1osT0FBRyxLQUFLLE1BQU07QUFDZCxPQUFHLEtBQUssT0FBTztBQUFBLEVBQ2pCO0FBQ0EsS0FBRyxLQUFLLFdBQVc7QUFDbkIsS0FBRyxLQUFLLFFBQVE7QUFDaEIsTUFBSSxVQUFVLE1BQU0sT0FBUSxJQUFHLEtBQUssU0FBUztBQUM3QyxLQUFHLEtBQUssTUFBTTtBQUNkLEtBQUcsS0FBSyxRQUFRO0FBRWhCLEVBQUFILFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsVUFBVTtBQUMxQixlQUFTO0FBQ1QsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sT0FBTyxVQUFVLE1BQU07QUFFN0IsUUFBTSxTQUFTLE1BQU07QUFDbkIsVUFBTSxhQUFhLEtBQUssRUFBRSxLQUFLO0FBQy9CLFVBQU0sUUFBUSxPQUFPLEVBQUUsS0FBSztBQUM1QixRQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssVUFBVSxFQUFHLFFBQU8sVUFBVSw0Q0FBNEM7QUFDdkcsUUFBSSxDQUFDLE1BQU8sUUFBTyxVQUFVLE9BQU8sb0JBQW9CLHFCQUFxQjtBQUM3RSxRQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssS0FBSyxFQUFHLFFBQU8sVUFBVSx5Q0FBeUM7QUFDbkcsUUFBSSxDQUFDLFFBQVEsZUFBZSxLQUFLLEtBQUssRUFBRyxRQUFPLFVBQVUsa0VBQWtFO0FBQzVILFVBQU0sUUFBUSxRQUFRLEVBQUUsS0FBSztBQUM3QixRQUFJLE9BQU8sUUFBUSxRQUFRLEdBQUcsS0FBSyxJQUFJLEtBQUssS0FBSztBQUNqRCxRQUFJO0FBQ0YsWUFBTSxTQUFTLGdCQUFnQixJQUFJO0FBQ25DLFVBQUksT0FBTyxTQUFTLFVBQVUsU0FBUyxTQUFTLFFBQVE7QUFDdEQsbUJBQVcsQ0FBQyxRQUFRLFdBQVcsS0FBSyxPQUFPLFFBQVEsT0FBTyxPQUFPLEdBQUc7QUFDbEUsY0FBSSxnQkFBZ0IsbUJBQW1CLFFBQVEsUUFBUSxNQUFNLE1BQU0sT0FBVyxRQUFPLFFBQVEsTUFBTSxJQUFJLFFBQVEsUUFBUSxNQUFNO0FBQUEsUUFDL0g7QUFDQSxlQUFPLHFCQUFxQixPQUFPLEtBQUssT0FBTyxPQUFPO0FBQUEsTUFDeEQ7QUFBQSxJQUNGLFNBQVMsS0FBSztBQUNaLGFBQU8sVUFBVSxJQUFJLE9BQU87QUFBQSxJQUM5QjtBQUNBLFdBQU8sWUFBWSxNQUFNLE1BQU0sQ0FBQztBQUFBLEVBQ2xDO0FBRUEsU0FDRSxnQkFBQUQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxFQUFFLEdBQ2pEO0FBQUEsS0FBQyxXQUNBLGdCQUFBRCxLQUFDLGFBQVUsT0FBTSxRQUFPLFFBQVEsR0FBRyxHQUFHLE1BQU0sR0FDMUMsMEJBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsSUFBSSxVQUFVLFVBQVUsRUFBRSxHQUN0QywwQkFBQUEsS0FBQ2lCLFlBQUEsRUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHLE1BQU0sR0FBRyxhQUFZLFVBQVMsVUFBVSxTQUFTLEdBQ3hGLEdBQ0Y7QUFBQSxJQUVELENBQUMsV0FDQSxnQkFBQWpCLEtBQUMsYUFBVSxPQUFNLFNBQVEsUUFBUSxHQUFHLEdBQUcsT0FBTyxHQUM1QywwQkFBQUEsS0FBQyxTQUFNLFNBQVMsQ0FBQyxVQUFVLFNBQVMsR0FBRyxVQUFVLE1BQU0sR0FBRyxVQUFVLFVBQVUsU0FBUyxXQUFXLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FDcEg7QUFBQSxJQUVGLGdCQUFBQSxLQUFDLGFBQVUsT0FBTSxhQUFZLFFBQVEsR0FBRyxHQUFHLFdBQVcsR0FDcEQsMEJBQUFBLEtBQUMsU0FBTSxTQUFTLENBQUMsU0FBUyxNQUFNLEdBQUcsVUFBVSxVQUFVLEdBQUcsVUFBVSxjQUFjLFNBQVMsV0FBVyxHQUFHLEdBQUcsV0FBVyxHQUFHLEdBQzVIO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxhQUFVLE9BQU8sT0FBTyxRQUFRLFdBQVcsUUFBUSxHQUFHLEdBQUcsUUFBUSxHQUNoRSwwQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQ3RDLDBCQUFBQTtBQUFBLE1BQUNpQjtBQUFBLE1BQUE7QUFBQSxRQUNDLFNBQVMsV0FBVyxHQUFHLEdBQUcsUUFBUTtBQUFBLFFBQ2xDLGFBQWEsT0FBTywrQkFBK0I7QUFBQSxRQUNuRCxjQUFjLE9BQU87QUFBQSxRQUNyQixVQUFVO0FBQUE7QUFBQSxJQUNaLEdBQ0YsR0FDRjtBQUFBLElBQ0MsUUFDQyxnQkFBQWpCLEtBQUMsYUFBVSxPQUFNLHFCQUFvQixRQUFRLEdBQUcsR0FBRyxTQUFTLEdBQzFELDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDdEMsMEJBQUFBLEtBQUNpQixZQUFBLEVBQVUsU0FBUyxXQUFXLEdBQUcsR0FBRyxTQUFTLEdBQUcsYUFBWSw0Q0FBMkMsY0FBYyxRQUFRLEdBQUcsVUFBVSxZQUFZLEdBQ3pKLEdBQ0Y7QUFBQSxJQUVGLGdCQUFBaEIsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSxzQkFBQUQsS0FBQ0csU0FBQSxFQUFPLE9BQU8sVUFBVSxTQUFTLE9BQU8sU0FBUyxRQUFRLFNBQVMsV0FBVyxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQUEsTUFDN0YsZ0JBQUFILEtBQUMsVUFBSyxnQkFBRTtBQUFBLE1BQ1IsZ0JBQUFBLEtBQUNHLFNBQUEsRUFBTyxPQUFNLFVBQVMsU0FBUyxVQUFVLFNBQVMsV0FBVyxHQUFHLEdBQUcsUUFBUSxHQUFHLFNBQVEsT0FBTTtBQUFBLE9BQy9GO0FBQUEsS0FDRjtBQUVKO0FBRU8sU0FBUyxTQUFTLEVBQUUsU0FBUyxTQUFTLFVBQVUsYUFBYSxVQUFVLE9BQU8sUUFBUSxXQUFXLFFBQVEsR0FBRztBQUNqSCxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlFLGNBQWEsSUFBSTtBQUN6QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsQ0FBQztBQUN4QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLGNBQWEsSUFBSTtBQUMvQyxZQUFVLE1BQU0sV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFPLFFBQVEsSUFBSSxXQUFXLElBQUksSUFBSSxRQUFRLENBQUU7QUFFcEYsUUFBTSxXQUFXLE1BQU0sUUFBUSxLQUFLLElBQUksTUFBTSxHQUFHLFFBQVEsU0FBUyxDQUFDLENBQUMsS0FBSztBQUN6RSxRQUFNLFNBQVMsTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxRQUFRLENBQUMsS0FBSztBQUVsRSxNQUFJLFFBQVEsS0FBSyxPQUFPLEdBQUc7QUFDekIsVUFBTSxTQUFTLE9BQU87QUFDdEIsVUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksUUFBUSxrQkFBa0IsRUFBRSxFQUFFLEtBQUssS0FBSztBQUM5RSxXQUNFLGdCQUFBTDtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsT0FBTyxnQkFBZ0IsT0FBTyxJQUFJLEtBQUssT0FBTyxNQUFNLE1BQU0sSUFBSSxPQUFPLE1BQU0sV0FBVyxJQUFJLFNBQVMsT0FBTztBQUFBLFFBQzFHLE1BQUs7QUFBQSxRQUNMLFlBQVU7QUFBQSxRQUVWLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsRUFBRSxHQUMzRSxpQkFBTyxNQUFNLFdBQVcsSUFDdkIsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcseURBQTJDLElBRTFFLGdCQUFBQSxLQUFDTyxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQWtCLFdBQVMsTUFDM0QsaUJBQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxNQUNwQixnQkFBQU4sTUFBQyxTQUFpQixPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxHQUM3RTtBQUFBLDBCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksWUFBRSxNQUFLO0FBQUEsVUFDMUMsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksbUJBQVMsQ0FBQyxHQUFFO0FBQUEsYUFGcEMsRUFBRSxJQUdaLENBQ0QsR0FDSCxHQUVKO0FBQUE7QUFBQSxJQUNGO0FBQUEsRUFFSjtBQUVBLFNBQ0UsZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFNO0FBQUEsTUFDTixNQUFNLEtBQUssSUFDUCw0RUFDQTtBQUFBLE1BQ0osWUFBVTtBQUFBLE1BRVY7QUFBQSx3QkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsR0FDM0UsZUFBSyxJQUNKLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0M7QUFBQSxZQUNBLFFBQVEsS0FBSyxNQUFNLFFBQVEsT0FBTyxLQUFLO0FBQUEsWUFDdkMsUUFBUSxDQUFDLE1BQU0sTUFBTSxVQUFVO0FBQzdCLGtCQUFJLEtBQUssTUFBTSxNQUFPLE9BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxrQkFDeEMsUUFBTyxNQUFNLElBQUk7QUFDdEIsc0JBQVEsSUFBSTtBQUFBLFlBQ2Q7QUFBQSxZQUNBO0FBQUEsWUFDQSxVQUFVLE1BQU0sUUFBUSxJQUFJO0FBQUE7QUFBQSxRQUM5QixJQUNFLFFBQVEsV0FBVyxJQUNyQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRywyREFBNkMsSUFFNUUsZ0JBQUFBO0FBQUEsVUFBQ007QUFBQSxVQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxVQUFVLE1BQU07QUFBQSxZQUNoQixVQUFVO0FBQUEsWUFDVjtBQUFBLFlBQ0EsWUFBWTtBQUFBLFlBQ1osU0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osVUFBVSxDQUFDLE1BQU0sU0FBUyxFQUFFLElBQUk7QUFBQSxZQUNoQyxVQUFVO0FBQUEsWUFDVixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTTtBQUM3QixvQkFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNO0FBQzdCLHFCQUNFLGdCQUFBTCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLGdDQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLGtDQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsa0JBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxNQUFNLEdBQUksYUFBRyxNQUFLO0FBQUEsa0JBQzNDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLGNBQUksRUFBRSxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBRztBQUFBLGtCQUN0RyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLEVBQUUsV0FBVyxVQUFVLE1BQU0sTUFBTSxHQUM1RSxZQUFFLFdBQVcsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLGNBQWMsR0FBRyxFQUFFLFNBQVMsV0FBVyxFQUFFLFFBQzFGLEdBQ0Y7QUFBQSxtQkFDRjtBQUFBLGdCQUNBLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxRQUFRLEVBQUUsR0FDNUM7QUFBQSxrQ0FBQUQsS0FBQyxVQUFNLG1CQUFRO0FBQUEsa0JBQ2YsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxNQUFNLEdBQUksc0JBQVksaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUUsR0FDakc7QUFBQSxrQkFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLEVBQUUsVUFBVSxZQUFZLFlBQVksUUFBUSxJQUFHO0FBQUEsbUJBQ3RGO0FBQUEsaUJBQ0Y7QUFBQSxZQUVKO0FBQUE7QUFBQSxRQUNGLEdBRUo7QUFBQSxRQUNDLENBQUMsS0FBSyxLQUNMLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0M7QUFBQSxZQUNBLE9BQU8sQ0FBQyxRQUFRO0FBQ2Qsb0JBQU0sSUFBSSxTQUFTO0FBQ25CLGtCQUFJLFFBQVEsSUFBSyxTQUFRLEtBQUs7QUFBQSx1QkFDckIsS0FBSyxRQUFRLElBQUssU0FBUSxDQUFDO0FBQUEsdUJBQzNCLEtBQUssUUFBUSxJQUFLLGFBQVksRUFBRSxJQUFJO0FBQUEsdUJBQ3BDLEtBQUssUUFBUSxTQUFVLFVBQVMsRUFBRSxJQUFJO0FBQUEsdUJBQ3RDLEtBQUssUUFBUSxJQUFLLFlBQVcsRUFBRSxJQUFJO0FBQUEsWUFDOUM7QUFBQTtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUEsRUFFSjtBQUVKO0FBRUEsU0FBUyxRQUFRLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDbkMsRUFBQUUsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUNuQyxZQUFNLFFBQVE7QUFDZCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLFNBQVMsTUFBTSxHQUFHLEdBQUc7QUFDM0QsWUFBTSxNQUFNLEdBQUc7QUFDZixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTztBQUNUOzs7QXRCNWhDUyxTQThpREMsVUE5aURELE9BQUFnQixNQWdETCxRQUFBQyxhQWhESztBQXpFVCxJQUFNLFdBQVc7QUFBQSxFQUNmLEVBQUUsTUFBTSxTQUFTLE1BQU0sMkNBQTJDO0FBQUEsRUFDbEUsRUFBRSxNQUFNLGtCQUFrQixNQUFNLDBDQUEwQztBQUFBLEVBQzFFLEVBQUUsTUFBTSxXQUFXLE1BQU0sbURBQW1EO0FBQUEsRUFDNUUsRUFBRSxNQUFNLFVBQVUsTUFBTSwyQ0FBMkM7QUFBQSxFQUNuRSxFQUFFLE1BQU0sVUFBVSxNQUFNLGdEQUFnRDtBQUFBLEVBQ3hFLEVBQUUsTUFBTSxPQUFPLE1BQU0sc0NBQXNDO0FBQUEsRUFDM0QsRUFBRSxNQUFNLFFBQVEsTUFBTSxvQkFBb0I7QUFBQSxFQUMxQyxFQUFFLE1BQU0sVUFBVSxNQUFNLHlEQUF5RDtBQUFBLEVBQ2pGLEVBQUUsTUFBTSxXQUFXLE1BQU0sMkRBQTJEO0FBQUEsRUFDcEYsRUFBRSxNQUFNLE9BQU8sTUFBTSxzREFBc0Q7QUFBQSxFQUMzRSxFQUFFLE1BQU0sVUFBVSxNQUFNLGlEQUFpRDtBQUFBLEVBQ3pFLEVBQUUsTUFBTSxZQUFZLE1BQU0sbURBQW1EO0FBQUEsRUFDN0UsRUFBRSxNQUFNLFFBQVEsTUFBTSxrREFBa0Q7QUFBQSxFQUN4RSxFQUFFLE1BQU0sU0FBUyxNQUFNLDhEQUE4RDtBQUFBLEVBQ3JGLEVBQUUsTUFBTSxVQUFVLE1BQU0saURBQWlEO0FBQUEsRUFDekUsRUFBRSxNQUFNLFNBQVMsTUFBTSxvREFBb0Q7QUFBQSxFQUMzRSxFQUFFLE1BQU0sV0FBVyxNQUFNLHFDQUFxQztBQUFBLEVBQzlELEVBQUUsTUFBTSxVQUFVLE1BQU0sa0VBQWtFO0FBQUEsRUFDMUYsRUFBRSxNQUFNLFNBQVMsTUFBTSxrRUFBa0U7QUFBQSxFQUN6RixFQUFFLE1BQU0sU0FBUyxNQUFNLHlEQUF5RDtBQUFBLEVBQ2hGLEVBQUUsTUFBTSxVQUFVLE1BQU0sc0NBQXNDO0FBQUEsRUFDOUQsRUFBRSxNQUFNLE9BQU8sTUFBTSw2Q0FBNkM7QUFBQSxFQUNsRSxFQUFFLE1BQU0sWUFBWSxNQUFNLG9EQUFvRDtBQUFBLEVBQzlFLEVBQUUsTUFBTSxjQUFjLE1BQU0sbURBQW1EO0FBQUEsRUFDL0UsRUFBRSxNQUFNLFdBQVcsTUFBTSxxQ0FBcUM7QUFBQSxFQUM5RCxFQUFFLE1BQU0sVUFBVSxNQUFNLHVEQUF1RDtBQUFBLEVBQy9FLEVBQUUsTUFBTSxXQUFXLE1BQU0sd0RBQXdEO0FBQUEsRUFDakYsRUFBRSxNQUFNLFNBQVMsTUFBTSxxREFBcUQ7QUFBQSxFQUM1RSxFQUFFLE1BQU0sUUFBUSxNQUFNLDZDQUE2QztBQUFBLEVBQ25FLEVBQUUsTUFBTSxXQUFXLE1BQU0sK0RBQStEO0FBQUEsRUFDeEYsRUFBRSxNQUFNLFVBQVUsTUFBTSxtREFBbUQ7QUFBQSxFQUMzRSxFQUFFLE1BQU0sVUFBVSxNQUFNLDZDQUE2QztBQUFBLEVBQ3JFLEVBQUUsTUFBTSxRQUFRLE1BQU0sc0NBQXNDO0FBQzlEO0FBRUEsSUFBTSxpQkFBaUIsQ0FBQyxXQUFXLFdBQVcsWUFBWTtBQUMxRCxJQUFNLGdCQUFnQixDQUFDLE9BQU8sV0FBVyxRQUFRO0FBQ2pELElBQU0sa0JBQWtCO0FBQ3hCLElBQU0sa0JBQWtCO0FBQ3hCLElBQU0sa0JBQWtCO0FBRXhCLFNBQVMsaUJBQWlCLFNBQVMsUUFBUSxRQUFRLE1BQU07QUFDdkQsUUFBTSxNQUFNLEtBQUssSUFBSSxHQUFHLFNBQVMsSUFBSTtBQUNyQyxRQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQ2hELE1BQUksU0FBUyxFQUFHLFFBQU87QUFDdkIsTUFBSSxTQUFTLFFBQVEsZ0JBQWlCLFFBQU8sS0FBSyxJQUFJLEdBQUcsU0FBUyxlQUFlO0FBQ2pGLE1BQUksVUFBVSxRQUFRLE9BQU8sZ0JBQWlCLFFBQU8sS0FBSyxJQUFJLEtBQUssU0FBUyxPQUFPLGtCQUFrQixDQUFDO0FBQ3RHLFNBQU87QUFDVDtBQUdBLFNBQVMsYUFBYSxPQUFPLE1BQU0sS0FBSyxJQUFJLEdBQUc7QUFDN0MsTUFBSSxDQUFDLE1BQU0sVUFBVyxRQUFPO0FBQzdCLFFBQU0sVUFBVSxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVEsTUFBTSxXQUFXLE9BQU8sTUFBTSxhQUFhLEdBQUksQ0FBQztBQUN6RixRQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVUsRUFBRTtBQUN2QyxRQUFNLFFBQVEsS0FBSyxNQUFNLFVBQVUsRUFBRTtBQUNyQyxNQUFJLE1BQU8sUUFBTyxHQUFHLEtBQUssS0FBSyxVQUFVLEVBQUU7QUFDM0MsTUFBSSxRQUFTLFFBQU8sR0FBRyxPQUFPLEtBQUssVUFBVSxFQUFFO0FBQy9DLFNBQU8sR0FBRyxPQUFPO0FBQ25CO0FBRUEsU0FBUyxZQUFZLE9BQU87QUFDMUIsTUFBSSxNQUFNLFdBQVcsVUFBVyxRQUFPLEVBQUUsTUFBTSxJQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sRUFBRTtBQUM5RSxNQUFJLE1BQU0sV0FBVyxTQUFVLFFBQU8sRUFBRSxNQUFNLFVBQUssT0FBTyxVQUFVLE9BQU8sTUFBTTtBQUNqRixNQUFJLE1BQU0sV0FBVyxZQUFhLFFBQU8sRUFBRSxNQUFNLFVBQUssT0FBTyxJQUFJLE9BQU8sTUFBTTtBQUM5RSxNQUFJLE1BQU0sV0FBVyxTQUFVLFFBQU8sRUFBRSxNQUFNLFFBQUssT0FBTyxVQUFVLE9BQU8sSUFBSTtBQUMvRSxTQUFPLEVBQUUsTUFBTSxVQUFLLE9BQU8sYUFBYSxPQUFPLE1BQU07QUFDdkQ7QUFFQSxTQUFTLGFBQWEsRUFBRSxNQUFNLFNBQVMsVUFBVSxNQUFNLEdBQUc7QUFDeEQsUUFBTSxTQUFTQyxXQUFVO0FBQ3pCLFFBQU0sS0FBSyxLQUFLLFdBQVcsTUFBTTtBQUNqQyxTQUFPLGdCQUFBRixLQUFDLFdBQVEsTUFBWSxTQUFrQixZQUFVLE1BQUM7QUFDM0Q7QUFFQSxTQUFTLGNBQWMsRUFBRSxNQUFNLEdBQUc7QUFDaEMsRUFBQUcsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxNQUFNLE9BQU8sS0FBSyxFQUFHLE9BQU0sZ0JBQWdCO0FBQUEsRUFDakQsQ0FBQztBQUNELFNBQU87QUFDVDtBQUVBLFNBQVMsaUJBQWlCLEVBQUUsVUFBVSxTQUFTLEdBQUcsTUFBTSxHQUFHO0FBQ3pELFFBQU0sVUFBVUMsWUFBVztBQUMzQixFQUFBQyxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLE1BQU0sV0FBVyxXQUFXLE1BQU0sV0FBVyxVQUFVLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFHLFNBQVE7QUFBQSxFQUNoRyxDQUFDO0FBQ0QsU0FBTyxnQkFBQUwsS0FBQyxTQUFLLEdBQUcsT0FBUSxVQUFTO0FBQ25DO0FBRUEsU0FBUyxlQUFlLEVBQUUsTUFBTSxZQUFZLFNBQVMsT0FBTyxTQUFTLFFBQVEsR0FBRztBQUM5RSxRQUFNLFVBQVVJLFlBQVc7QUFDM0IsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJRSxjQUFhLEtBQUs7QUFDaEQsRUFBQUQsVUFBUyxDQUFDLFVBQVU7QUFDbEIsVUFBTSxTQUFTLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2QyxRQUFJLE1BQU0sV0FBVyxVQUFVLFdBQVcsUUFBUSxHQUFHO0FBQ25ELGlCQUFXLE1BQU07QUFDakIsZ0JBQVUsTUFBTTtBQUFBLElBQ2xCO0FBQ0EsUUFBSSxVQUFVLE1BQU0sV0FBVyxXQUFXLE1BQU0sV0FBVyxRQUFRO0FBQ2pFLGNBQVE7QUFDUixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxjQUFjLFFBQVEsS0FBSztBQUNqQyxTQUFPLGdCQUFBTCxLQUFDLFVBQUssT0FBTyxFQUFFLElBQUksY0FBYyxPQUFPLElBQUksUUFBVyxPQUFPLGNBQWMsVUFBVSxNQUFNLEdBQUksY0FBSSxjQUFjLGFBQWEsSUFBSSxLQUFJO0FBQ2hKO0FBRUEsU0FBUyxjQUFjLEVBQUUsVUFBVSxTQUFTLFVBQVUsUUFBUSxHQUFHO0FBQy9ELFFBQU0sVUFBVUksWUFBVztBQUMzQixRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlFLGNBQWEsS0FBSztBQUNoRCxFQUFBRCxVQUFTLENBQUMsVUFBVTtBQUNsQixVQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLFFBQUksTUFBTSxXQUFXLE9BQVEsWUFBVyxNQUFNO0FBQzlDLFFBQUksVUFBVSxNQUFNLFdBQVcsV0FBVyxNQUFNLFdBQVcsUUFBUTtBQUNqRSxjQUFRO0FBQ1IsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQ0UsZ0JBQUFKLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksVUFBVSxPQUFPLElBQUksTUFBTSxPQUFPLFVBQVUsVUFBVSxRQUFRLElBQUksVUFBVSxNQUFNLEdBQ3hIO0FBQUEsb0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsV0FBVyxPQUFPLElBQUksT0FBTyxNQUFNLFNBQVMsR0FBSSxxQkFBVyxZQUFPLE1BQUs7QUFBQSxJQUNoSDtBQUFBLEtBQ0g7QUFFSjtBQUtBLElBQU0saUJBQWlCO0FBRXZCLFNBQVMsbUJBQW1CLE9BQU87QUFDakMsUUFBTSxZQUFZLENBQUM7QUFDbkIsTUFBSSxTQUFTO0FBQ2IsUUFBTSxRQUFRLE1BQU07QUFDbEIsUUFBSSxDQUFDLE9BQVE7QUFDYixjQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsT0FBTyxPQUFPLENBQUM7QUFDckQsYUFBUztBQUFBLEVBQ1g7QUFDQSxhQUFXLFFBQVEsT0FBTztBQUN4QixRQUFJLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxnQkFBZ0IsS0FBSyxTQUFTLFlBQVk7QUFDbEYsZ0JBQVUsS0FBSyxTQUFTLGVBQWUsS0FBSyxNQUFNLFNBQVM7QUFBQSxJQUM3RCxPQUFPO0FBQ0wsWUFBTTtBQUNOLGdCQUFVLEtBQUssSUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU07QUFDTixTQUFPO0FBQ1Q7QUFFTyxTQUFTLElBQUksRUFBRSxNQUFBTyxPQUFNLFlBQVksSUFBSSxHQUFHO0FBQzdDLFFBQU0sRUFBRSxLQUFLLE1BQU0sU0FBQUMsVUFBUyxRQUFRLElBQUksSUFBSUQ7QUFDNUMsUUFBTSxRQUFRLElBQUk7QUFDbEIsUUFBTSxDQUFDRSxTQUFRLFNBQVMsSUFBSUgsY0FBYUMsTUFBSyxNQUFNO0FBQ3BELFFBQU0sQ0FBQyxrQkFBa0IsbUJBQW1CLElBQUlELGNBQWEsS0FBSztBQUVsRSxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLGNBQWEsTUFBTSxPQUFPO0FBQ3hELFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxjQUFhLFFBQVEsT0FBTyxXQUFXLEVBQUU7QUFDbkYsRUFBQUksV0FBVSxDQUFDLEVBQUUsT0FBQUMsT0FBTSxNQUFNLGlCQUFpQkEsTUFBSyxDQUFDO0FBQ2hELFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUwsY0FBYSxNQUFNLE9BQU87QUFDeEQsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxjQUFhLE1BQU0sU0FBUztBQUM5RCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsTUFBTSxTQUFTO0FBQzlELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsY0FBYSxNQUFNLFNBQVM7QUFDOUQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxjQUFhLE1BQU0sSUFBSTtBQUMvQyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsTUFBTSxVQUFVO0FBQ2pFLFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxjQUFhLE1BQU0sYUFBYTtBQUMxRSxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsTUFBTSxTQUFTO0FBQzlELFFBQU0sQ0FBQyxPQUFPLGFBQWEsSUFBSUEsY0FBYSxFQUFFO0FBQzlDLFFBQU0sZ0JBQWdCQyxNQUFLLEtBQUssa0JBQWtCLG9CQUFvQjtBQUN0RSxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlELGNBQWEsQ0FBQztBQUNwRCxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlBLGNBQWEsSUFBSTtBQUN2RCxRQUFNLFdBQVcsQ0FBQyxNQUFNLFdBQVc7QUFDakMsSUFBQUMsTUFBSyxLQUFLLGlCQUFpQkEsTUFBSyxLQUFLLGlCQUFpQixLQUFLO0FBQzNELFVBQU0sUUFBUSxjQUFjLE9BQU8sTUFBTSxNQUFNLFdBQVc7QUFDMUQsa0JBQWMsS0FBSztBQUNuQixtQkFBZSxVQUFVLE1BQU0sTUFBTTtBQUFBLEVBQ3ZDO0FBQ0EsUUFBTSxDQUFDLGlCQUFpQixrQkFBa0IsSUFBSUQsY0FBYSxNQUFNO0FBQ2pFLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGNBQWEsQ0FBQyxDQUFDO0FBQzdELFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxjQUFhLE1BQU07QUFDN0QsUUFBTSxDQUFDLHFCQUFxQixzQkFBc0IsSUFBSUEsY0FBYSxFQUFFO0FBQ3JFLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsY0FBYSxNQUFNLEtBQUs7QUFDbEQsUUFBTSxDQUFDTSxlQUFjLGVBQWUsSUFBSU4sY0FBYSxNQUFNLFlBQVk7QUFDdkUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxjQUFhLE1BQU0sTUFBTTtBQUNyRCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsY0FBYSxNQUFNLGFBQWE7QUFDMUUsUUFBTSxDQUFDLGlCQUFpQixrQkFBa0IsSUFBSUEsY0FBYSxLQUFLO0FBQ2hFLFFBQU0sQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUlBLGNBQWEsS0FBSztBQUM5RCxRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJQSxjQUFhLEtBQUs7QUFDaEUsUUFBTSxDQUFDLG1CQUFtQixvQkFBb0IsSUFBSUEsY0FBYSxLQUFLO0FBQ3BFLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsY0FBYUMsTUFBSyxNQUFNO0FBQ3BELFFBQU0sQ0FBQyxvQkFBb0IscUJBQXFCLElBQUlELGNBQWFDLE1BQUssa0JBQWtCO0FBQ3hGLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUQsY0FBYUMsTUFBSyxTQUFTO0FBQzdELFFBQU0sQ0FBQyxhQUFhLGNBQWMsSUFBSUQsY0FBYUMsTUFBSyxXQUFXO0FBQ25FLFFBQU0sQ0FBQyxvQkFBb0IscUJBQXFCLElBQUlELGNBQWFDLE1BQUssa0JBQWtCO0FBQ3hGLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlELGNBQWEsTUFBTSxRQUFRO0FBQ3pFLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGNBQWEsS0FBSztBQUNoRSxRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlBLGNBQWEsQ0FBQztBQUM5QyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsQ0FBQyxDQUFDO0FBQ25ELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsY0FBYUMsTUFBSyxhQUFhLE1BQU07QUFDdkUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJRCxjQUFhLE1BQU0sTUFBTTtBQUNyRCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsTUFBTSxTQUFTO0FBQzlELFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUEsY0FBYSxNQUFNLElBQUk7QUFDL0MsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQSxjQUFhLEVBQUU7QUFDN0MsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQSxjQUFhLENBQUM7QUFDOUMsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQSxjQUFhLElBQUk7QUFDakQsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxjQUFhLENBQUM7QUFDaEQsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQSxjQUFhLENBQUMsQ0FBQztBQUMvQyxRQUFNLENBQUMsZ0JBQWdCLGlCQUFpQixJQUFJQSxjQUFhLEtBQUs7QUFDOUQsUUFBTSxDQUFDLE1BQU0sYUFBYSxJQUFJQSxjQUFhLE1BQU07QUFDakQsUUFBTSxDQUFDLE9BQU8sSUFBSUEsY0FBYSxLQUFLO0FBQ3BDLFFBQU0sQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUlBLGNBQWEsS0FBSztBQUM5RCxRQUFNLENBQUMsd0JBQXdCLHlCQUF5QixJQUFJQSxjQUFhLEtBQUs7QUFDOUUsUUFBTSxDQUFDLHFCQUFxQixzQkFBc0IsSUFBSUEsY0FBYSxJQUFJO0FBQ3ZFLFFBQU0sQ0FBQyw0QkFBNEIsNkJBQTZCLElBQUlBLGNBQWEsS0FBSztBQUN0RixRQUFNLENBQUMscUJBQXFCLHNCQUFzQixJQUFJQSxjQUFhLEtBQUs7QUFDeEUsUUFBTSxDQUFDLHdCQUF3Qix5QkFBeUIsSUFBSUEsY0FBYSxJQUFJO0FBQzdFLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGNBQWEsSUFBSTtBQUMvRCxRQUFNLENBQUMscUJBQXFCLHNCQUFzQixJQUFJQSxjQUFhLElBQUk7QUFDdkUsUUFBTSxDQUFDLGVBQWUsZ0JBQWdCLElBQUlBLGNBQWEsTUFBTSxlQUFlO0FBQzVFLFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxjQUFhLElBQUk7QUFDM0QsUUFBTSxDQUFDLG1CQUFtQixvQkFBb0IsSUFBSUEsY0FBYSxDQUFDO0FBQ2hFLFFBQU0sQ0FBQyxrQkFBa0IsbUJBQW1CLElBQUlBLGNBQWEsS0FBSztBQUNsRSxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsQ0FBQztBQUNoRCxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlBLGNBQWEsQ0FBQyxDQUFDO0FBQ3JELFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGNBQWEsS0FBSztBQUNoRSxRQUFNLENBQUMsY0FBYyxlQUFlLElBQUlBLGNBQWEsQ0FBQyxjQUFjLFlBQVksQ0FBQztBQUNqRixRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlBLGNBQWEsQ0FBQztBQUNwRCxRQUFNLENBQUMsZ0JBQWdCLGlCQUFpQixJQUFJQSxjQUFhLENBQUMsQ0FBQztBQUMzRCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsY0FBYSxLQUFLO0FBQzVELFFBQU0sQ0FBQyxjQUFjLGVBQWUsSUFBSUEsY0FBYSxLQUFLO0FBQzFELFFBQU0sQ0FBQyxrQkFBa0IsbUJBQW1CLElBQUlBLGNBQWEsS0FBSztBQUNsRSxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsSUFBSTtBQUNuRCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsY0FBYSxJQUFJO0FBQzNELFFBQU0sQ0FBQyxtQkFBbUIsb0JBQW9CLElBQUlBLGNBQWEsQ0FBQztBQUNoRSxRQUFNLENBQUMsa0JBQWtCLG1CQUFtQixJQUFJQSxjQUFhLEtBQUs7QUFDbEUsUUFBTSxDQUFDLGtCQUFrQixtQkFBbUIsSUFBSUEsY0FBYSxLQUFLO0FBQ2xFLFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxjQUFhLENBQUMsQ0FBQztBQUN6RCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsY0FBYSxDQUFDO0FBQ3hELFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUEsY0FBYSxDQUFDO0FBQ2xELFFBQU0sQ0FBQyxVQUFVLFdBQVcsSUFBSUEsY0FBYSxDQUFDLENBQUM7QUFDL0MsUUFBTSxDQUFDLGlCQUFpQixrQkFBa0IsSUFBSUEsY0FBYSxLQUFLO0FBQ2hFLFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUEsY0FBYSxJQUFJLEtBQUssQ0FBQztBQUMzRCxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsS0FBSztBQUN0RCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsQ0FBQztBQUNoRCxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsSUFBSTtBQUNyRCxRQUFNLENBQUMsY0FBYyxlQUFlLElBQUlBLGNBQWEsSUFBSTtBQUN6RCxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsQ0FBQztBQUMxQyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsSUFBSTtBQUM3QyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsY0FBYztBQUMvRCxRQUFNLENBQUMsbUJBQW1CLG9CQUFvQixJQUFJQSxjQUFhLElBQUk7QUFDbkUsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLElBQUk7QUFDM0MsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxjQUFhLEVBQUU7QUFFakQsUUFBTSxPQUFPQyxNQUFLO0FBQ2xCLE9BQUssV0FBVztBQUNoQixPQUFLLGVBQWU7QUFFcEIsV0FBUyxRQUFRLE1BQU07QUFDckIsa0JBQWMsSUFBSTtBQUNsQixRQUFJLEtBQUssU0FBUyxNQUFNO0FBQUEsRUFDMUI7QUFJQSxRQUFNLFNBQVMsQ0FBQyxLQUFLLEtBQUssVUFBVTtBQUNsQyxRQUFJLElBQUksTUFBTSxNQUFPLEtBQUksS0FBSztBQUFBLEVBQ2hDO0FBQ0EsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJRCxjQUFhLEVBQUU7QUFFbkQsV0FBUyxxQkFBcUI7QUFDNUIsa0JBQWMsTUFBTSxZQUFZLHNCQUFzQixNQUFNLFNBQVMsS0FBSyxNQUFNLGNBQWMsTUFBTSxpQkFBaUIsMEJBQTBCLEVBQUU7QUFDakosV0FBTyxTQUFTLFlBQVksTUFBTSxPQUFPO0FBQ3pDLFdBQU8sU0FBUyxZQUFZLE1BQU0sT0FBTztBQUN6QyxXQUFPLFdBQVcsY0FBYyxNQUFNLFNBQVM7QUFDL0MsV0FBTyxXQUFXLGNBQWMsTUFBTSxTQUFTO0FBQy9DLFdBQU8sV0FBVyxjQUFjLE1BQU0sU0FBUztBQUMvQyxXQUFPLE1BQU0sU0FBUyxNQUFNLElBQUk7QUFDaEMsV0FBTyxZQUFZLGVBQWUsTUFBTSxVQUFVO0FBQ2xELFdBQU8sZUFBZSxrQkFBa0IsTUFBTSxhQUFhO0FBQzNELFdBQU8sV0FBVyxjQUFjLE1BQU0sU0FBUztBQUMvQyxXQUFPLE9BQU8sVUFBVSxNQUFNLEtBQUs7QUFDbkMsV0FBT00sZUFBYyxpQkFBaUIsTUFBTSxZQUFZO0FBQ3hELFdBQU8sUUFBUSxXQUFXLE1BQU0sTUFBTTtBQUN0QyxXQUFPLGVBQWUsa0JBQWtCLE1BQU0sYUFBYTtBQUMzRCxXQUFPLGlCQUFpQixvQkFBb0IsTUFBTSxRQUFRO0FBQzFELFdBQU8sUUFBUSxXQUFXLE1BQU0sTUFBTTtBQUN0QyxXQUFPLFdBQVcsY0FBYyxNQUFNLFNBQVM7QUFDL0MsV0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJO0FBQ2hDLFdBQU8sZUFBZSxrQkFBa0IsTUFBTSxlQUFlO0FBQUEsRUFDL0Q7QUFLQSxPQUFLLEtBQUs7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLE9BQU8sQ0FBQyxZQUFZLE1BQU0sT0FBTztBQUFBLElBQ2pDLFNBQVMsQ0FBQyxTQUFTO0FBQ2pCLGdCQUFVLEtBQUssS0FBSztBQUNwQixNQUFBTCxNQUFLLFdBQVcsRUFBRSxRQUFRLEtBQUssU0FBUyxnQkFBZ0IsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUN4RTtBQUFBLElBQ0EsVUFBVSxNQUFNO0FBQ2QsV0FBSyxnQkFBZ0IsT0FBTztBQUM1QixTQUFHLE1BQU0sVUFBVTtBQUFBLElBQ3JCO0FBQUEsSUFDQSxNQUFNLE1BQU07QUFDVixnQkFBVSxJQUFJO0FBQ2Qsb0JBQWMsY0FBYztBQUFBLElBQzlCO0FBQUEsSUFDQSxPQUFPLENBQUMsU0FBUztBQUNmLFdBQUssZ0JBQWdCLE9BQU87QUFDNUIsZUFBUyxJQUFJO0FBQUEsSUFDZjtBQUFBLElBQ0EsU0FBUyxNQUFNO0FBQ2IscUJBQWUsSUFBSTtBQUNuQixXQUFLLG1CQUFtQjtBQUN4QixXQUFLLGdCQUFnQixPQUFPO0FBQzVCLHVCQUFpQixJQUFJO0FBQ3JCLHVCQUFpQixJQUFJO0FBQ3JCLG9CQUFjLGNBQWM7QUFDNUIsZ0JBQVUsSUFBSTtBQUNkLFNBQUcsTUFBTSxPQUFPO0FBQUEsSUFDbEI7QUFBQSxJQUNBLFNBQVMsQ0FBQyxTQUFTLE1BQU0sWUFBWSxLQUFLLEtBQUssSUFBSSxLQUFLLFVBQVUsSUFBSSxTQUFTLE9BQU8sS0FBSyxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFBQSxJQUM3RyxTQUFTLENBQUMsU0FBUztBQUNqQixXQUFLLGdCQUFnQixPQUFPO0FBQzVCLGNBQVEsT0FBTyxNQUFNLGdCQUFnQixLQUFLLEtBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDckUsb0JBQWMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUM3QixrQkFBWSxDQUFDLENBQUM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsS0FBSyxDQUFDLFlBQVksY0FBYyxPQUFPO0FBQUEsSUFDdkMsUUFBUSxNQUFNLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDM0MsS0FBSyxNQUFNLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQ3ZDO0FBQ0EsTUFBSSxDQUFDLEtBQUssWUFBWTtBQUNwQixTQUFLLGFBQWE7QUFDbEIsUUFBSSxHQUFHLFVBQVUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLGVBQVcsUUFBUSxDQUFDLFNBQVMsV0FBVyxZQUFZLFFBQVEsU0FBUyxXQUFXLFdBQVcsV0FBVyxPQUFPLFVBQVUsS0FBSyxHQUFHO0FBQzdILFVBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUNBLHFCQUFtQjtBQUVuQixRQUFNLGdCQUFnQixPQUFPLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLElBQUksT0FBTyxLQUFLLEVBQUU7QUFDM0gsUUFBTSxlQUFlQSxNQUFLLFNBQVMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sSUFBSSxTQUFTLEtBQUssRUFBRTtBQUNySSxRQUFNLFNBQVMsb0JBQUksSUFBSTtBQUN2QixRQUFNLFdBQVcsQ0FBQztBQUNsQixhQUFXLEtBQUssQ0FBQyxHQUFHLFVBQVUsR0FBRyxlQUFlLEdBQUcsWUFBWSxHQUFHO0FBQ2hFLFFBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFHLFVBQVMsS0FBSyxHQUFHLEVBQUUsUUFBUSxVQUFVLFNBQVMsS0FBSyxFQUFFLElBQUksR0FBRztBQUFBLFFBQy9FLFFBQU8sSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUFBLEVBQzNCO0FBQ0EsUUFBTSxjQUFjLENBQUMsR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUN2QyxNQUFJLFNBQVMsVUFBVSxDQUFDLEtBQUssZ0JBQWdCO0FBQzNDLFNBQUssaUJBQWlCO0FBQ3RCLGVBQVcsTUFBTSxNQUFNLCtDQUErQyxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQUEsRUFDakc7QUFFQSxRQUFNLFFBQVEsU0FBUztBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFFBQVEsQ0FBQyxZQUFZLGdCQUFBUCxLQUFDLFVBQUssT0FBTyxFQUFFLElBQUksT0FBTyxHQUFHLE9BQU8sU0FBUyxNQUFNLEtBQUssR0FBSSxjQUFJLE9BQU8sS0FBSTtBQUFBLEVBQ2xHLENBQUM7QUFFRCxRQUFNLGNBQWMsU0FBUztBQUFBLElBQzNCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFFBQVEsQ0FBQyxZQUNQLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLEdBQ3pCLDBCQUFBQSxLQUFDLFdBQVEsT0FBTSxTQUFRLFdBQVcsV0FBVyxVQUFVLE1BQU8sY0FBSSxPQUFPLEtBQUksR0FDL0U7QUFBQSxFQUVKLENBQUM7QUFFRCxXQUFTLE1BQU0sS0FBSztBQUNsQixVQUFNLEdBQUc7QUFBQSxFQUNYO0FBRUEsaUJBQWUsZ0JBQWdCO0FBQzdCLFFBQUksaUJBQWlCLEVBQUc7QUFDeEIsd0JBQW9CLElBQUk7QUFDeEIsVUFBTSxtQkFBbUI7QUFDekIsVUFBTSxVQUFVLFlBQVksSUFBSTtBQUNoQyxRQUFJO0FBQ0YsWUFBTSxZQUFZLE1BQU1PLE1BQUssY0FBYztBQUMzQyxNQUFBQSxNQUFLLFNBQVM7QUFDZCxnQkFBVSxTQUFTO0FBQ25CLFlBQU1NLFdBQVUsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLE9BQU87QUFDdEQsWUFBTSxxQkFBcUIsVUFBVSxNQUFNLFlBQVlBLFFBQU8sSUFBSTtBQUFBLElBQ3BFLFNBQVMsS0FBSztBQUNaLFlBQU0seUJBQXlCLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUMzRSxVQUFFO0FBQ0EsMEJBQW9CLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFFQSxPQUFLLGVBQWUscUJBQXFCO0FBQUEsSUFDdkMsV0FBVztBQUFBLElBQ1gsVUFBVSxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsUUFBUSxZQUFZLEdBQUcsU0FBUyxNQUFNLFNBQVMsVUFBVSxLQUFLLGNBQWM7QUFBQSxJQUMvRyxhQUFhLElBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0EsU0FBUyxDQUFDLFlBQVksS0FBSyxHQUFHLE1BQU0sT0FBTztBQUFBLEVBQzdDLENBQUM7QUFDRCxPQUFLLGlCQUFpQix5QkFBeUI7QUFBQSxJQUM3QztBQUFBLElBQ0EsVUFBVSxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsUUFBUSxZQUFZLEdBQUcsU0FBUyxNQUFNLFNBQVMsVUFBVSxLQUFLLGNBQWM7QUFBQSxJQUMvRyxhQUFhLElBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0EsU0FBUyxDQUFDLFlBQVksS0FBSyxHQUFHLE1BQU0sT0FBTztBQUFBLElBQzNDLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFFRCxNQUFJLENBQUMsS0FBSyxXQUFXO0FBQ25CLFNBQUssWUFBWSxnQkFBZ0I7QUFBQSxNQUMvQixVQUFVLENBQUMsV0FBVztBQUNwQiwyQkFBbUIsTUFBTTtBQUN6QixZQUFJLFdBQVcsWUFBYSxvQkFBbUIsQ0FBQyxDQUFDO0FBQUEsTUFDbkQ7QUFBQSxNQUNBLFNBQVMsQ0FBQyxVQUFVLG1CQUFtQixZQUFZLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUFBLE1BQzVFLFNBQVMsQ0FBQyxZQUFZLEtBQUssR0FBRyxNQUFNLHFCQUFxQixPQUFPLEVBQUU7QUFBQSxJQUNwRSxDQUFDO0FBQ0QsU0FBSyxpQkFBaUIscUJBQXFCLEVBQUUsV0FBVyxLQUFLLFdBQVcsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUNuRyxVQUFNLFVBQVUsYUFBYSxNQUFNLEtBQUssVUFBVSxRQUFRLENBQUM7QUFDM0QsWUFBUSxNQUFNO0FBQ2QsWUFBUSxLQUFLLFFBQVEsTUFBTTtBQUN6QixxQkFBZSxPQUFPO0FBQ3RCLFdBQUssVUFBVSxRQUFRO0FBQUEsSUFDekIsQ0FBQztBQUNELGVBQVcsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHO0FBQ2hFLGNBQVEsS0FBSyxRQUFRLE1BQU07QUFDekIsYUFBSyxVQUFVLFFBQVE7QUFDdkIsZ0JBQVEsS0FBSyxJQUFJO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLEtBQUssZUFBZTtBQUN2QixTQUFLLGdCQUFnQjtBQUNyQixtQkFBZUwsUUFBTyxFQUFFLEtBQUssQ0FBQyxVQUFVO0FBQ3RDLFVBQUksQ0FBQyxNQUFPO0FBQ1osa0JBQVksU0FBUyxNQUFNLE9BQU8scUJBQXFCO0FBQ3ZELFlBQU0sYUFBYTtBQUFBLElBQ3JCLENBQUMsRUFBRSxNQUFNLE1BQU07QUFBQSxJQUFDLENBQUM7QUFBQSxFQUNuQjtBQUVBLFFBQU0sb0JBQW9CLElBQUk7QUFFOUIsV0FBUyxpQkFBaUIsTUFBTTtBQUM5QixRQUFJLFNBQVMsUUFBUyxRQUFPLE9BQU8sS0FBSyxjQUFjO0FBQ3ZELFFBQUksU0FBUyxRQUFTLFFBQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNO0FBQ3hFLFFBQUksU0FBUyxTQUFVLFFBQU8sQ0FBQyxXQUFXLE9BQU8sVUFBVSxRQUFRLEtBQUs7QUFDeEUsUUFBSSxTQUFTLFFBQVMsUUFBT0MsUUFBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJO0FBQzVGLFVBQU0sTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJO0FBQ25ELFFBQUksS0FBSyxTQUFTLEtBQUssUUFBUyxRQUFPLFNBQVM7QUFDaEQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLG9CQUFvQjtBQUMzQixrQkFBYyxLQUFLO0FBQ25CLGlCQUFhLENBQUM7QUFBQSxFQUNoQjtBQUVBLFdBQVMsaUJBQWlCLE9BQU8sS0FBSyxXQUFXO0FBQy9DLGFBQVMsZ0JBQWdCLE9BQU8sS0FBSyxTQUFTLENBQUM7QUFDL0Msc0JBQWtCO0FBQUEsRUFDcEI7QUFFQSxXQUFTLEtBQUssTUFBTTtBQUNsQixRQUFJLGNBQWMsS0FBSyxjQUFjLEVBQUc7QUFDeEMsVUFBTSxRQUFRLEtBQUssS0FBSztBQUN4QixRQUFJLENBQUMsTUFBTztBQUNaLHNCQUFrQjtBQUNsQixRQUFJLE1BQU0sV0FBVyxHQUFHLEdBQUc7QUFDekIsWUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLENBQUMsRUFBRSxNQUFNLEtBQUs7QUFDbEQsWUFBTSxRQUFRLFlBQVksS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEtBQUssWUFBWSxDQUFDO0FBQ25FLFVBQUksT0FBTztBQUNULFlBQUksTUFBTSxRQUFTLFFBQU8sY0FBYyxPQUFPLEVBQUUsT0FBTyxLQUFLLFFBQVEsR0FBRyxHQUFHLEtBQUssS0FBSyxPQUFPLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUM3RyxpQkFBUyxFQUFFO0FBQ1gsbUJBQVcsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxlQUFXLEVBQUU7QUFDYixrQkFBYyxPQUFPLE1BQU0sTUFBTSxXQUFXO0FBQzVDLFFBQUksS0FBSyxjQUFjLFFBQVEsRUFBRSxLQUFLLENBQUM7QUFDdkMsYUFBUyxFQUFFO0FBQUEsRUFDYjtBQUVBLFdBQVMsWUFBWTtBQUNuQixRQUFJLENBQUMsS0FBSyxFQUFHO0FBQ2IsUUFBSSxNQUFNLFNBQVUsTUFBSyw2QkFBNkI7QUFDdEQsUUFBSSxVQUFVO0FBQUEsRUFDaEI7QUFFQSxRQUFNLFlBQVksQ0FBQyxNQUFPLEtBQUssTUFBTyxJQUFJLElBQUksS0FBTSxRQUFRLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUU1RSxpQkFBZSxrQkFBa0I7QUFDL0Isa0JBQWMsTUFBTUYsTUFBSyxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUN4RDtBQUVBLGlCQUFlLHFCQUFxQixHQUFHO0FBQ3JDLFFBQUk7QUFDRixZQUFNQSxNQUFLLE9BQU8sWUFBWSxHQUFHLENBQUMsRUFBRSxRQUFRO0FBQzVDLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sR0FBRyxFQUFFLFdBQVcsWUFBWSxZQUFZLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUN6RSxTQUFTLEtBQUs7QUFDWixZQUFNLHlCQUF5QixPQUFPLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQUEsSUFDM0U7QUFBQSxFQUNGO0FBRUEsaUJBQWUsYUFBYSxHQUFHO0FBQzdCLFVBQU0sUUFBUSxLQUFLO0FBQ25CLFFBQUksQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLFFBQVEsS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQU07QUFDbkUsV0FBSyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoRCxhQUFPLE1BQU0sMkJBQTJCLEVBQUUsSUFBSSxHQUFHO0FBQUEsSUFDbkQ7QUFDQSxTQUFLLFlBQVk7QUFDakIsUUFBSTtBQUNGLFlBQU1BLE1BQUssT0FBTyxPQUFPLENBQUM7QUFDMUIsWUFBTSxnQkFBZ0I7QUFDdEIsWUFBTSxVQUFVLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDdkMsU0FBUyxLQUFLO0FBQ1osWUFBTSxrQkFBa0IsT0FBTyxJQUFJLFdBQVcsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRTtBQUFBLElBQ25FO0FBQUEsRUFDRjtBQUVBLGlCQUFlLG1CQUFtQjtBQUNoQyxVQUFNLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLENBQUM7QUFDbkMsVUFBTSxZQUFZLE1BQU0sSUFBSSxpQkFBaUI7QUFDN0MsVUFBTSxPQUFPLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ3BHLFFBQUksVUFBVSxVQUFVO0FBQ3RCLFdBQUssS0FBSztBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sTUFBTSxHQUFHLFVBQVUsU0FBUyxlQUFlLENBQUM7QUFBQSxNQUM5QyxDQUFDO0FBQUEsSUFDSDtBQUNBLGlCQUFhO0FBQUEsTUFDWCxPQUFPLFlBQVksVUFBVSxLQUFLO0FBQUEsTUFDbEM7QUFBQSxNQUNBLFVBQVUsVUFBVSxTQUFTLFNBQVMsRUFBRSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxPQUFPLFVBQVUsU0FBUyxNQUFNLEVBQUUsUUFBUSxJQUFJO0FBQUEsSUFDcEosQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLGFBQWEsTUFBTTtBQUFBLElBQ3ZCLEdBQUcsWUFBWTtBQUFBLElBQ2YsRUFBRSxLQUFLLFFBQVEsTUFBTSxrQ0FBa0NBLE1BQUssaUJBQWlCLE1BQU0sSUFBSTtBQUFBLEVBQ3pGO0FBRUEsV0FBUyxXQUFXLE1BQU07QUFDeEIsV0FBTyxTQUFTLFNBQVNBLE1BQUssaUJBQWlCLFNBQVM7QUFBQSxFQUMxRDtBQUVBLFdBQVMsZUFBZSxNQUFNO0FBQzVCLGVBQVcsV0FBVyxJQUFJLENBQUM7QUFDM0IsSUFBQUEsTUFBSyxXQUFXLEVBQUUsUUFBUSxPQUFPLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFBQSxFQUNwRDtBQUVBLFdBQVMsZUFBZSxNQUFNO0FBQzVCLGlCQUFhLElBQUk7QUFDakIsbUJBQWUsSUFBSTtBQUNuQixnQkFBWSxFQUFFLE9BQU8sU0FBUyxTQUFTLFNBQVksS0FBSyxDQUFDLEVBQUUsTUFBTSxNQUFNO0FBQUEsSUFBQyxDQUFDO0FBQ3pFLFVBQU0sU0FBUyxTQUFTLHdDQUF3QyxXQUFXLE1BQU0sQ0FBQyxNQUFNLFVBQVUsSUFBSSxFQUFFO0FBQUEsRUFDMUc7QUFFQSxXQUFTLGVBQWU7QUFDdEIsV0FBTyxJQUFJLGFBQWEsTUFBTSxHQUFHLE9BQU87QUFBQSxFQUMxQztBQUVBLFdBQVMsWUFBWTtBQUNuQixXQUFPLG9CQUFvQixhQUFhLEVBQUUsVUFBVTtBQUFBLEVBQ3REO0FBRUEsV0FBUyxhQUFhO0FBQ3BCLFFBQUksS0FBSyxLQUFLLFdBQVcsRUFBRyxRQUFPLE1BQU0sNENBQTRDO0FBQ3JGLFVBQU0sT0FBTyxVQUFVO0FBQ3ZCLFVBQU0sV0FBVyxLQUFLLElBQUksR0FBRyxLQUFLLFNBQVMsQ0FBQztBQUM1QyxhQUFTLEVBQUUsVUFBVSxTQUFTLE9BQU8sUUFBUSxPQUFPLE1BQU0sUUFBUSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQy9FLFFBQUksS0FBSyxRQUFRLEVBQUcsZ0JBQWUsTUFBTSxLQUFLLFFBQVEsRUFBRSxTQUFTO0FBQ2pFLGtCQUFjLFFBQVE7QUFDdEIsY0FBVSxJQUFJO0FBQ2QsT0FBRyxNQUFNLE9BQU87QUFBQSxFQUNsQjtBQUVBLFdBQVMsV0FBVyxVQUFVLE9BQU87QUFDbkMsYUFBUyxJQUFJO0FBQ2IsaUJBQWEsRUFBRTtBQUNmLGtCQUFjLGNBQWM7QUFDNUIsT0FBRyxNQUFNLE9BQU87QUFDaEIsUUFBSSxRQUFTLE9BQU0sNkNBQTZDO0FBQUEsRUFDbEU7QUFFQSxXQUFTLGFBQWE7QUFDcEIsVUFBTSxRQUFRLE1BQU07QUFDcEIsUUFBSSxDQUFDLE9BQU8sUUFBUSxPQUFRLFFBQU8sV0FBVztBQUM5QyxRQUFJLFdBQVcsTUFBTSxPQUFPO0FBQzVCLGVBQVcsSUFBSTtBQUFBLEVBQ2pCO0FBRUEsV0FBUyxpQkFBaUI7QUFDeEIsVUFBTSxRQUFRLE1BQU07QUFDcEIsVUFBTSxNQUFNLFVBQVUsRUFBRSxNQUFNLFFBQVE7QUFDdEMsUUFBSSxDQUFDLElBQUssUUFBTyxjQUFjO0FBQy9CLFFBQUksSUFBSSxPQUFRLFFBQU8sTUFBTSxzREFBc0Q7QUFDbkYsaUJBQWEsSUFBSSxJQUFJO0FBQ3JCLGFBQVMsRUFBRSxHQUFHLE9BQU8sU0FBUyxNQUFNLFFBQVEsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQUEsRUFDckU7QUFFQSxXQUFTLGdCQUFnQjtBQUN2QixVQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFNLE9BQU8sVUFBVTtBQUN2QixVQUFNLFdBQVcsS0FBSyxNQUFNLFFBQVE7QUFDcEMsVUFBTSxlQUFlLFVBQVU7QUFDL0IsVUFBTSxPQUFPLGlCQUFpQixTQUFTLGNBQWMsWUFBWSxDQUFDO0FBQ2xFLGlCQUFhLEVBQUU7QUFDZixhQUFTLEVBQUUsR0FBRyxPQUFPLFNBQVMsTUFBTSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFDMUQ7QUFFQSxXQUFTLGVBQWUsTUFBTTtBQUM1QixVQUFNLFFBQVEsS0FBSyxLQUFLO0FBQ3hCLFVBQU0sUUFBUSxNQUFNO0FBQ3BCLFFBQUksQ0FBQyxNQUFPLFFBQU8sTUFBTSx5QkFBeUI7QUFDbEQsVUFBTSxPQUFPLFVBQVU7QUFDdkIsVUFBTSxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQ2xDLFVBQU0sU0FBUyxNQUFNLFNBQ2pCLEVBQUUsSUFBSSxVQUFVLElBQUksVUFBVSxTQUFTLEVBQUUsSUFBSSxPQUFPLFFBQVEsYUFBYSxNQUFNLFNBQVMsRUFBRSxNQUFNLE1BQU0sTUFBTSxTQUFTLE1BQU0sRUFBRSxJQUM3SCxFQUFFLElBQUksV0FBVyxRQUFRLE9BQU8sV0FBVyxTQUFTLEVBQUUsTUFBTSxNQUFNLE1BQU0sU0FBUyxNQUFNLEVBQUU7QUFDN0YsYUFBUyxFQUFFLEdBQUcsT0FBTyxTQUFTLE9BQU8sUUFBUSxPQUFPLFNBQVMsQ0FBQyxHQUFHLE1BQU0sU0FBUyxNQUFNLEVBQUUsQ0FBQztBQUN6RixpQkFBYSxFQUFFO0FBQUEsRUFDakI7QUFFQSxXQUFTLG1CQUFtQjtBQUMxQixVQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFNLE9BQU8sVUFBVTtBQUN2QixVQUFNLFNBQVMsS0FBSyxNQUFNLFFBQVE7QUFDbEMsUUFBSSxDQUFDLE9BQVE7QUFDYixRQUFJLE9BQU8sT0FBUSxRQUFPLE1BQU0sc0RBQXNEO0FBQ3RGLFVBQU0sVUFBVSxDQUFDLEdBQUcsTUFBTSxTQUFTLEVBQUUsSUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDN0UsVUFBTSxZQUFZLEtBQUssT0FBTyxDQUFDLFFBQVEsSUFBSSxjQUFjLE9BQU8sU0FBUztBQUN6RSxVQUFNLFdBQVcsS0FBSyxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksR0FBRyxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQzNFLGFBQVMsRUFBRSxHQUFHLE9BQU8sVUFBVSxRQUFRLENBQUM7QUFDeEMsUUFBSSxVQUFVLFFBQVEsRUFBRyxnQkFBZSxNQUFNLFVBQVUsUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUM3RTtBQUVBLGlCQUFlLGNBQWMsU0FBUyxRQUFRLFVBQVUsTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLE9BQU8sSUFBSTtBQUMxRixRQUFJLENBQUMsTUFBTztBQUNaLFVBQU0sUUFBUSxNQUFNO0FBQ3BCLFVBQU0sUUFBUSxDQUFDO0FBQ2YsU0FBSyxtQkFBbUI7QUFDeEIsZ0JBQVksSUFBSTtBQUNoQixRQUFJO0FBQ0YsWUFBTSxXQUFXQSxNQUFLLFNBQVMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxRQUFRLElBQUk7QUFDL0UsWUFBTSxFQUFFLEtBQUssSUFBSSxpQkFBaUIsTUFBTSxTQUFTLFNBQVMsTUFBTSxPQUFPLENBQUM7QUFDeEUsVUFBSSxLQUFLLHFCQUFxQixTQUFTLE1BQU0sTUFBTSxNQUFPO0FBQzFELFlBQU0sT0FBTyxFQUFFLE1BQU0sUUFBUSxNQUFNLE1BQU0sS0FBSyxLQUFLLEdBQUcsT0FBTyxPQUFPLE1BQU0sTUFBTTtBQUNoRixZQUFNLFNBQVMsY0FBYyxFQUFFLFdBQVcsc0JBQXNCLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSTtBQUNuRixVQUFJLE9BQU8sUUFBUTtBQUNqQix1QkFBZSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUM7QUFDbEMsWUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sU0FBUyxNQUFNLEdBQUc7QUFDakQsb0JBQVUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sQ0FBQyxVQUFVLE1BQU0sTUFBTSxPQUFPLENBQUM7QUFBQSxRQUN4RTtBQUFBLE1BQ0YsTUFBTyxlQUFjLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDL0IsU0FBUyxPQUFPO0FBQ2QsWUFBTSxtQkFBbUIsUUFBUSxJQUFJLEtBQUssTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUMzRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGNBQWMsTUFBTSxRQUFRO0FBQ25DLFFBQUksS0FBSyxxQkFBcUIsS0FBSyxTQUFTLE1BQU0sTUFBTSxLQUFLLE1BQU87QUFDcEUsUUFBSTtBQUNGLFlBQU0sT0FBTyxjQUFjLEtBQUssTUFBTSxPQUFPLE9BQU8sS0FBSyxLQUFLLE1BQU0sTUFBTTtBQUMxRSxZQUFNLE9BQU8sZUFBZSxLQUFLLE9BQU8sS0FBSyxPQUFPLElBQUk7QUFDeEQsZUFBUyxLQUFLLE1BQU0sS0FBSyxNQUFNO0FBQy9CLHFCQUFlLElBQUk7QUFDbkIsV0FBSyxtQkFBbUI7QUFDeEIsU0FBRyxNQUFNLE9BQU87QUFBQSxJQUNsQixTQUFTLE9BQU87QUFDZCxZQUFNLE1BQU0sT0FBTztBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLFdBQVcsR0FBRyxPQUFPLElBQUk7QUFDdEMsUUFBSSxPQUFPLFNBQVMsU0FBVSxRQUFPO0FBQ3JDLFFBQUksRUFBRSxRQUFTLFFBQU8sY0FBYyxDQUFDO0FBQ3JDLGFBQVMsRUFBRTtBQUNYLGdCQUFZLElBQUk7QUFDaEIsUUFBSSxFQUFFLFNBQVMsT0FBUSxRQUFPLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQztBQUNsRCxRQUFJLEVBQUUsU0FBUyxTQUFVLFFBQU8sSUFBSSxPQUFPLElBQUk7QUFDL0MsUUFBSSxFQUFFLFNBQVMsUUFBUyxRQUFPLElBQUksU0FBUyxJQUFJO0FBQ2hELFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIseUJBQW1CLElBQUk7QUFDdkI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsU0FBUztBQUN0QixVQUFJLENBQUMsS0FBTSxRQUFPLGtCQUFrQixJQUFJO0FBQ3hDLFlBQU0sU0FBUyxLQUFLLFlBQVk7QUFDaEMsWUFBTSxRQUFRLENBQUMsR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTTtBQUN6RCxVQUFJLENBQUMsTUFBTSxTQUFTLE1BQU0sRUFBRyxRQUFPLE1BQU0sVUFBVSxZQUFZLENBQUMsYUFBYSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDaEcscUJBQWUsTUFBTTtBQUNyQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEVBQUUsTUFBTyxRQUFPLElBQUksVUFBVSxFQUFFLElBQUk7QUFDeEMsUUFBSSxFQUFFLFNBQVMsVUFBVyxRQUFPLGlCQUFpQjtBQUNsRCxRQUFJLEVBQUUsU0FBUyxPQUFRLFFBQU8sSUFBSSxTQUFTLElBQUk7QUFDL0MsUUFBSSxFQUFFLFNBQVMsWUFBWTtBQUN6QixZQUFNLE9BQU8sS0FBSyxLQUFLO0FBQ3ZCLFVBQUksSUFBSSxhQUFhLElBQUksRUFBRztBQUM1Qix5QkFBbUIsRUFBRSxLQUFLLENBQUM7QUFDM0IsZ0NBQTBCLElBQUk7QUFDOUI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsY0FBYztBQUMzQixZQUFNLFdBQVcsS0FBSyxLQUFLO0FBQzNCLFVBQUksSUFBSSxlQUFlLFFBQVEsRUFBRztBQUNsQyw2QkFBdUIsRUFBRSxTQUFTLENBQUM7QUFDbkMsb0NBQThCLElBQUk7QUFDbEMsZ0NBQTBCLElBQUk7QUFDOUI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsU0FBUztBQUN0QixVQUFJLENBQUMsS0FBTSxRQUFPLGtCQUFrQixJQUFJO0FBQ3hDLGFBQU8sSUFBSSxrQkFBa0IsSUFBSTtBQUFBLElBQ25DO0FBQ0EsUUFBSSxFQUFFLFNBQVMsaUJBQWtCLFFBQU8sY0FBYztBQUN0RCxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLFVBQUksQ0FBQyxjQUFjLEVBQUcsUUFBTyxNQUFNLEdBQUcsTUFBTSxFQUFFLElBQUksa0NBQWtDO0FBQ3BGLFVBQUksQ0FBQyxLQUFNLFFBQU8sbUJBQW1CLElBQUk7QUFDekMsYUFBTyxJQUFJLGdCQUFnQixLQUFLLFlBQVksQ0FBQztBQUFBLElBQy9DO0FBQ0EsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixVQUFJLGFBQWEsWUFBWSxHQUFHLEVBQUcsUUFBTyxNQUFNLDJEQUEyRDtBQUMzRyxZQUFNLFNBQVMsTUFBTSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sSUFBSTtBQUMxRCxVQUFJLFVBQVUsQ0FBQyxhQUFhQyxVQUFTLE1BQU0sRUFBRyxRQUFPLE1BQU0sU0FBU0EsUUFBTyx3QkFBd0I7QUFDbkcsWUFBTSxXQUFXLFNBQVMsUUFBUSxNQUFNLEtBQUssRUFBRSxLQUFLO0FBQ3BELFlBQU0sU0FBUyxNQUFNLFVBQVU7QUFDL0IsVUFBSSxPQUFPLEdBQUksUUFBTyxNQUFNLFVBQVUsU0FBUyxRQUFRLE1BQU0sS0FBSyxFQUFFLDBCQUEwQjtBQUM5RixhQUFPLE1BQU0sa0JBQWtCLE9BQU8sT0FBTyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUM5RDtBQUNBLFFBQUksRUFBRSxTQUFTLFFBQVMsUUFBTyxXQUFXO0FBQzFDLFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxpQkFBaUI7QUFDbEQsUUFBSSxFQUFFLFNBQVMsVUFBVyxRQUFPLGtCQUFrQjtBQUNuRCxRQUFJLEVBQUUsU0FBUyxPQUFRLFFBQU8sUUFBUSxNQUFNO0FBQzVDLFFBQUksRUFBRSxTQUFTLE1BQU8sUUFBTyxnQkFBZ0IsSUFBSTtBQUNqRCxRQUFJLEVBQUUsU0FBUyxVQUFXLFFBQU8sb0JBQW9CLElBQUk7QUFDekQsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixZQUFNLGdCQUFnQjtBQUN0QixhQUFPLG1CQUFtQixJQUFJO0FBQUEsSUFDaEM7QUFDQSxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLFVBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSxnRUFBZ0U7QUFDekYsc0JBQWdCO0FBQ2hCO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxpQkFBaUI7QUFDbEQsUUFBSSxFQUFFLFNBQVMsT0FBTztBQUNwQixZQUFNLFdBQVdELE1BQUssU0FBU0EsTUFBSyxNQUFNLGtCQUFrQixZQUFZQSxNQUFLLElBQUksQ0FBQyxLQUFLO0FBQ3ZGLGFBQU8sTUFBTSxHQUFHQSxNQUFLLFVBQVUsR0FBRyxRQUFRLEVBQUU7QUFBQSxJQUM5QztBQUNBLFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIsYUFBTyxhQUFhO0FBQUEsUUFDbEIsT0FBTztBQUFBLFFBQ1AsTUFBTSxPQUFPLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRSxhQUFhLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFBQSxNQUN4RixDQUFDO0FBQUEsSUFDSDtBQUNBLFFBQUksRUFBRSxTQUFTLFlBQVk7QUFDekIsYUFBTyxhQUFhO0FBQUEsUUFDbEIsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFVBQ0osR0FBRyxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNLE1BQU0sVUFBVSxFQUFFO0FBQUEsVUFDcEYsR0FBR0EsTUFBSyxTQUFTLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksYUFBYSxNQUFNLElBQUksT0FBTyxFQUFFO0FBQUEsUUFDMUc7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQ0EsUUFBSSxFQUFFLFNBQVMsU0FBUztBQUN0QixZQUFNLEVBQUUsTUFBTSxTQUFTLElBQUksTUFBTSxJQUFJLGNBQWM7QUFDbkQsbUJBQWEsRUFBRSxPQUFPLFFBQVEsV0FBVyxVQUFVLFFBQVEsb0JBQW9CLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDM0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsTUFBTyxRQUFPLElBQUksV0FBVztBQUM1QyxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLFVBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSw0Q0FBNEM7QUFDckUsVUFBSSxDQUFDLE1BQU0sUUFBUyxRQUFPLE1BQU0sOEJBQThCO0FBQy9ELDJCQUFxQixJQUFJO0FBQ3pCO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIsVUFBSSxLQUFLLEVBQUcsUUFBTyxNQUFNLDRDQUE0QztBQUNyRSxVQUFJLFlBQVksUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFHLFFBQU8sTUFBTSx1QkFBdUI7QUFDN0Usb0JBQWMsTUFBTTtBQUNwQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEVBQUUsU0FBUyxRQUFTLFFBQU8sSUFBSSxNQUFNO0FBQ3pDLFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxrQkFBa0IsSUFBSTtBQUN2RCxRQUFJLEVBQUUsU0FBUyxRQUFRO0FBQ3JCLFlBQU0sT0FBTyxJQUFJLFlBQVk7QUFDN0IsVUFBSSxDQUFDLEtBQU0sUUFBTyxNQUFNLGNBQWM7QUFDdEMsWUFBTSxPQUFPLElBQUksS0FBSyxNQUFNLFFBQVEsQ0FBQyxDQUFDLFdBQVcsS0FBSyxhQUFhLGVBQWUsQ0FBQyxRQUFRLEtBQUssaUJBQWlCLGVBQWUsQ0FBQztBQUNqSSxZQUFNLEtBQUssUUFBUSxLQUFLLFNBQVMsT0FBVSxHQUFHLElBQUksMkJBQTJCLEtBQUssT0FBTyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUk7QUFDNUc7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixZQUFNLE9BQU8sTUFBTSxJQUFJLGVBQWU7QUFDdEMsWUFBTSxlQUFlLElBQUksRUFBRTtBQUMzQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsaUJBQWUsdUJBQXVCO0FBQ3BDLFVBQU0sU0FBUyxNQUFNLGFBQWEsRUFBRSxNQUFNLE9BQU8sRUFBRSxXQUFXLE9BQU8sT0FBTyxLQUFLLEVBQUU7QUFDbkYscUJBQWlCO0FBQUEsTUFDZixFQUFFLElBQUksVUFBVSxPQUFPLGdDQUFnQyxXQUFXLE9BQU8sV0FBVyxPQUFPLE9BQU8sTUFBTTtBQUFBLElBQzFHLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxtQkFBbUI7QUFDMUIsd0JBQW9CLElBQUk7QUFDeEIseUJBQXFCO0FBQUEsRUFDdkI7QUFFQSxXQUFTLGdCQUFnQixVQUFVO0FBQ2pDLFFBQUksU0FBUyxPQUFPLFNBQVU7QUFDOUIsd0JBQW9CLEtBQUs7QUFDekIsVUFBTSw2Q0FBNkM7QUFDbkQsUUFBSSxnQkFBZ0IsRUFDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxNQUFNLE1BQU0sTUFBTSxnQkFBZ0IsU0FBUyxzQkFBc0IsS0FBSyxLQUFLLGtDQUFrQyxDQUFDLEVBQzdILE1BQU0sQ0FBQyxRQUFRLE1BQU0sbUJBQW1CLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFBLEVBQ3hGO0FBRUEsaUJBQWUsbUJBQW1CLFVBQVU7QUFDMUMsUUFBSSxTQUFTLE9BQU8sU0FBVTtBQUM5QixVQUFNLFFBQVEsS0FBSztBQUNuQixRQUFJLENBQUMsU0FBUyxNQUFNLE9BQU8sU0FBUyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFNO0FBQ3RFLFdBQUssZ0JBQWdCLEVBQUUsSUFBSSxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN2RCxhQUFPLE1BQU0sOEJBQThCLFNBQVMsS0FBSyxtQ0FBbUM7QUFBQSxJQUM5RjtBQUNBLFNBQUssZ0JBQWdCO0FBQ3JCLFVBQU0sSUFBSSxtQkFBbUI7QUFDN0IseUJBQXFCO0FBQ3JCLFVBQU0sMkJBQTJCO0FBQUEsRUFDbkM7QUFFQSxXQUFTLGtCQUFrQjtBQUN6QixVQUFNLFVBQVUsRUFBRSxLQUFLO0FBQ3ZCLFVBQU0sU0FBUyxDQUFDLGNBQWMsWUFBWTtBQUMxQyxvQkFBZ0IsTUFBTTtBQUN0QixtQkFBZSxDQUFDO0FBQ2hCLHVCQUFtQixJQUFJO0FBQ3ZCLG9CQUFnQixHQUFHLE1BQU07QUFDekIsa0JBQWMsVUFBVUEsTUFBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUNsRCxVQUFJLE1BQU0sU0FBUyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssWUFBWSxLQUFLLFdBQVk7QUFDM0Usc0JBQWdCLENBQUMsY0FBYyxZQUFZLFlBQVksQ0FBQztBQUFBLElBQzFELENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxnQkFBZ0IsWUFBWSxTQUFTLGFBQWEsR0FBRztBQUM1RCxxQkFBaUIsSUFBSTtBQUNyQixRQUFJLG1CQUFtQixPQUFPLFVBQVUsQ0FBQyxFQUN0QyxLQUFLLGlCQUFpQixFQUN0QixRQUFRLE1BQU0saUJBQWlCLEtBQUssQ0FBQztBQUFBLEVBQzFDO0FBRUEsV0FBUyxZQUFZLE1BQU07QUFDekIsVUFBTSxPQUFPTyxTQUFRO0FBQ3JCLFdBQU8sS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLFFBQVEsTUFBTSxHQUFHLElBQUk7QUFBQSxFQUMzRDtBQUVBLFdBQVMsbUJBQW1CO0FBQzFCLFFBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSxnRUFBZ0U7QUFDekYsd0JBQW9CLElBQUk7QUFDeEIsb0JBQWdCO0FBQUEsRUFDbEI7QUFFQSxpQkFBZSxrQkFBa0I7QUFDL0IsdUJBQW1CLElBQUk7QUFDdkIsUUFBSTtBQUNGLFlBQU0sT0FBTyxNQUFNLElBQUksYUFBYTtBQUNwQyxrQkFBWSxLQUFLLElBQUksQ0FBQyxhQUFhO0FBQUEsUUFDakMsR0FBRztBQUFBLFFBQ0gsTUFBTSxZQUFZLFFBQVEsSUFBSTtBQUFBLFFBQzlCLFdBQVcsUUFBUSxVQUFVLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxVQUFVLE1BQU0sWUFBWSxTQUFTLElBQUksRUFBRSxFQUFFO0FBQUEsTUFDcEcsRUFBRSxDQUFDO0FBQUEsSUFDTCxVQUFFO0FBQ0EseUJBQW1CLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxtQkFBbUIsVUFBVTtBQUMxQyxRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU0sSUFBSSxZQUFZLFNBQVMsS0FBSztBQUNqRCxZQUFNLElBQUksaUJBQWlCLEVBQUUsTUFBTSxLQUFLLEtBQUssQ0FBQztBQUM5QywwQkFBb0IsS0FBSztBQUFBLElBQzNCLFNBQVMsS0FBSztBQUNaLFlBQU0sb0JBQW9CLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxzQkFBc0IsVUFBVTtBQUM3QyxRQUFJLFNBQVMsVUFBVTtBQUNyQixVQUFJLFNBQVMsUUFBUyxRQUFPLE1BQU0sdURBQXVEO0FBQzFGLFlBQU1DLFNBQVEsS0FBSztBQUNuQixVQUFJLENBQUNBLFVBQVNBLE9BQU0sU0FBUyxTQUFTLFFBQVEsS0FBSyxJQUFJLElBQUlBLE9BQU0sS0FBSyxLQUFNO0FBQzFFLGFBQUssbUJBQW1CLEVBQUUsTUFBTSxTQUFTLE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRTtBQUM5RCxlQUFPLE1BQU0sMkJBQTJCLFNBQVMsVUFBVSxTQUFTLElBQUksYUFBYSxTQUFTLEtBQUssSUFBSSxTQUFTLFVBQVUsSUFBSSxZQUFZLFVBQVUsRUFBRTtBQUFBLE1BQ3hKO0FBQ0EsV0FBSyxtQkFBbUI7QUFDeEIsVUFBSTtBQUNGLGNBQU0sSUFBSSxlQUFlLFFBQVE7QUFDakMsY0FBTSxnQkFBZ0I7QUFDdEIsY0FBTSxXQUFXLFNBQVMsVUFBVSxTQUFTLElBQUksRUFBRTtBQUFBLE1BQ3JELFNBQVMsS0FBSztBQUNaLGNBQU0sa0JBQWtCLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxNQUNuRTtBQUNBO0FBQUEsSUFDRjtBQUNBLFFBQUksU0FBUyxRQUFTLFFBQU8sTUFBTSxzREFBc0Q7QUFDekYsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFNBQVMsUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUMxRSxXQUFLLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxNQUFNLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDOUQsYUFBTyxNQUFNLDJCQUEyQixTQUFTLElBQUksYUFBYSxTQUFTLEtBQUssSUFBSSxTQUFTLFVBQVUsSUFBSSxZQUFZLFVBQVUsRUFBRTtBQUFBLElBQ3JJO0FBQ0EsU0FBSyxtQkFBbUI7QUFDeEIsUUFBSTtBQUNGLFlBQU0sa0JBQWtCLFNBQVMsSUFBSTtBQUNyQyxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLFdBQVcsU0FBUyxJQUFJLEtBQUssU0FBUyxLQUFLLElBQUksU0FBUyxVQUFVLElBQUksWUFBWSxVQUFVLFVBQVU7QUFBQSxJQUM5RyxTQUFTLEtBQUs7QUFDWixZQUFNLGtCQUFrQixPQUFPLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQUEsSUFDbkU7QUFBQSxFQUNGO0FBRUEsaUJBQWUsa0JBQWtCLE1BQU07QUFDckMsVUFBTSxVQUFVLE1BQU0sU0FBUyxPQUFPLEtBQUssT0FBTztBQUNsRCxRQUFJLFdBQVcsS0FBSyxFQUFHLFFBQU8sTUFBTSw0Q0FBNEM7QUFDaEYsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLEtBQUssUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUN0RSxXQUFLLFlBQVksRUFBRSxNQUFNLEtBQUssTUFBTSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ25ELGFBQU8sTUFBTSwyQkFBMkIsS0FBSyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRztBQUFBLElBQ3BFO0FBQ0EsU0FBSyxZQUFZO0FBQ2pCLFFBQUksU0FBUztBQUNYLFVBQUksTUFBTSw0QkFBNEIsRUFBRyxpQkFBZ0IsWUFBWSxDQUFDO0FBQ3RFO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixZQUFNLGNBQWMsS0FBSyxJQUFJO0FBQzdCLHNCQUFnQixZQUFZLENBQUM7QUFDN0IsWUFBTSxpQkFBaUI7QUFBQSxJQUN6QixTQUFTLEtBQUs7QUFDWixZQUFNLGtCQUFrQixPQUFPLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQUEsSUFDbkU7QUFBQSxFQUNGO0FBRUEsaUJBQWUsY0FBYyxNQUFNO0FBQ2pDLFFBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSxnRUFBZ0U7QUFDekYsdUJBQW1CLEtBQUs7QUFDeEIsd0JBQW9CLEtBQUs7QUFDekIsVUFBTSxJQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ3ZCO0FBRUEsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxVQUFVLEtBQUs7QUFDckIsbUJBQWUsY0FBYyxPQUFPLENBQUM7QUFDckMsd0JBQW9CLElBQUk7QUFDeEIsaUJBQWEsQ0FBQztBQUFBLEVBQ2hCO0FBRUEsV0FBUyxjQUFjLE1BQU07QUFDM0IsVUFBTSxPQUFPLG9CQUFJLElBQUk7QUFDckIsVUFBTSxNQUFNLENBQUM7QUFDYixlQUFXLFNBQVMsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRztBQUN6RCxVQUFJLEtBQUssSUFBSSxNQUFNLElBQUksRUFBRztBQUMxQixXQUFLLElBQUksTUFBTSxJQUFJO0FBQ25CLFVBQUksS0FBSyxLQUFLO0FBQUEsSUFDaEI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLGdCQUFnQixNQUFNO0FBQ25DLGlCQUFhLElBQUk7QUFDakIsUUFBSSxTQUFTLEVBQUcsUUFBTyxlQUFlLGNBQWMsS0FBSyxDQUFDLENBQUM7QUFDM0QsVUFBTSxVQUFVLE1BQU0sbUJBQW1CLElBQUk7QUFDN0MsUUFBSSxTQUFTLEVBQUcsUUFBTyxlQUFlLGNBQWMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLFVBQU0sU0FBUyxNQUFNLGtCQUFrQjtBQUN2QyxtQkFBZSxjQUFjLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUNsRTtBQUVBLGlCQUFlLGdCQUFnQixRQUFRLEtBQUs7QUFDMUMsVUFBTSxJQUFJLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDaEMsa0JBQWMsSUFBSTtBQUNsQixvQkFBZ0IsSUFBSTtBQUFBLEVBQ3RCO0FBRUEsV0FBUyxjQUFjLEtBQUs7QUFDMUIsV0FBTyxnQkFBZ0IsYUFBYSxHQUFHLEdBQUc7QUFBQSxFQUM1QztBQUVBLFFBQU0sYUFBYSxJQUFJO0FBRXZCLGlCQUFlLDhCQUE4QjtBQUMzQyxVQUFNLFVBQVUsTUFBTSxJQUFJLHFCQUFxQjtBQUMvQyx5QkFBcUIsS0FBSztBQUMxQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxNQUNmLGVBQWUsS0FBSyx1QkFBdUIsS0FBSyxnQkFBZ0IsS0FBSyxlQUFlLEtBQUssZ0JBQWdCLEtBQUssa0JBQWtCLEtBQUssZ0JBQWdCLEtBQUssaUJBQWlCLEtBQUssZ0JBQWdCLEtBQUssYUFBYSxLQUNsTixpQkFBaUIsS0FBSyxpQkFBaUIsS0FBSyxpQkFBaUIsS0FDN0QsWUFBWSxNQUFNLFFBQVEsVUFBVSxNQUFNLFFBQVEsV0FBVyxNQUFNO0FBS3JFLFFBQU0sZUFBZSxNQUFNLFNBQVMsS0FBSyxDQUFDLGVBQWU7QUFFekQsV0FBUyxZQUFZLE9BQU87QUFDMUIsUUFBSSxZQUFZLE1BQU0sRUFBRTtBQUFBLEVBQzFCO0FBRUEsV0FBUyxhQUFhLE9BQU87QUFDM0IsUUFBSSxDQUFDLElBQUksYUFBYSxNQUFNLEVBQUUsRUFBRztBQUNqQyxRQUFJLGNBQWMsTUFBTSxNQUFNLEdBQUksa0JBQWlCLElBQUk7QUFBQSxFQUN6RDtBQUVBLFdBQVMsMEJBQTBCLE1BQU07QUFDdkMsUUFBSSxLQUFLLFdBQVcsV0FBVztBQUM3QixnQkFBVTtBQUNWO0FBQUEsSUFDRjtBQUNBLFFBQUksb0JBQW9CLEtBQUssY0FBYztBQUMzQyxRQUFJLGNBQWMsTUFBTSxLQUFLLEdBQUksa0JBQWlCLElBQUk7QUFBQSxFQUN4RDtBQUVBLFdBQVMsYUFBYSxPQUFPO0FBQzNCLElBQUFSLE1BQUssT0FBTyxRQUFRLE1BQU0sRUFBRTtBQUM1QixRQUFJLGNBQWMsTUFBTSxNQUFNLEdBQUksa0JBQWlCLElBQUk7QUFBQSxFQUN6RDtBQUVBLFdBQVMsVUFBVSxPQUFPO0FBQ3hCLFFBQUksTUFBTSxXQUFXLFVBQVcsUUFBTyxNQUFNLFNBQVMsTUFBTSxFQUFFLGlCQUFpQjtBQUMvRSxVQUFNLFFBQVEsS0FBSztBQUNuQixRQUFJLENBQUMsU0FBUyxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFNO0FBQ25FLFdBQUssZUFBZSxFQUFFLElBQUksTUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDbkQsYUFBTyxNQUFNLHlCQUF5QixNQUFNLGVBQWUsU0FBUyxNQUFNLEVBQUUsRUFBRSxHQUFHO0FBQUEsSUFDbkY7QUFDQSxTQUFLLGVBQWU7QUFDcEIsSUFBQUEsTUFBSyxPQUFPLEtBQUssTUFBTSxJQUFJLE1BQU07QUFBQSxFQUNuQztBQUVBLFFBQU0sZ0JBQWdCLElBQUk7QUFDMUIsUUFBTSxtQkFBbUIsSUFBSTtBQUU3QixRQUFNLEtBQUtTLFVBQVMsRUFBRSxTQUFTLFFBQVEsQ0FBQztBQUN4QyxRQUFNLGlCQUFpQkEsVUFBUyxFQUFFLFNBQVMsTUFBTSxPQUFPLFFBQVEsUUFBUSxNQUFNLENBQUM7QUFDL0UsS0FBRyxLQUFLLE1BQU07QUFDZCxNQUFJLE1BQU0sR0FBRztBQUNYLE9BQUcsS0FBSyxPQUFPO0FBQ2YsUUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUcsSUFBRyxNQUFNLE9BQU87QUFBQSxFQUN2QztBQUNBLFFBQU0scUJBQXFCLHlCQUF5QixFQUFFLElBQUksU0FBUyxXQUFXLFVBQVUsQ0FBQztBQUN6RixxQkFBbUIsY0FBYztBQUNqQyxNQUFJLDRCQUE0QixDQUFDO0FBQ2pDLGdCQUFjO0FBQ2QsUUFBTSxZQUFZLElBQUksU0FBUztBQUMvQixnQkFBYztBQUNkLFFBQU0sWUFBWSxJQUFJLFVBQVU7QUFDaEMsTUFBSSxnQkFBZ0IsR0FBRztBQUNyQixPQUFHLEtBQUssVUFBVTtBQUNsQixRQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsRUFBRyxJQUFHLE1BQU0sVUFBVTtBQUFBLEVBQzdDLE9BQU87QUFDTCxRQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsY0FBYyxFQUFHLElBQUcsS0FBSyxPQUFPO0FBQ3pELFFBQUksVUFBVSxTQUFTLEtBQUssVUFBVSxTQUFTLEdBQUc7QUFDaEQsU0FBRyxNQUFNLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDM0ssT0FBTztBQUNMLFVBQUksVUFBVSxTQUFTLEVBQUcsSUFBRyxNQUFNLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQ25KLFVBQUksVUFBVSxTQUFTLEVBQUcsSUFBRyxNQUFNLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDcko7QUFDQSxRQUFJLEtBQUssOEJBQThCLENBQUMsY0FBYyxLQUFLLENBQUMsY0FBYyxHQUFHO0FBQzNFLFdBQUssNkJBQTZCO0FBQ2xDLFNBQUcsTUFBTSxPQUFPO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBQ0EsZUFBYSxTQUFTLEtBQUssS0FBSyxNQUFNLE1BQU07QUFDNUMsZUFBYTtBQUFBLElBQ1gsUUFBUSxDQUFDLFNBQVMsTUFBTSxVQUFVLEtBQUssTUFBTSxJQUFJLEtBQUssV0FBVyxJQUFJLGNBQWMsWUFBWSxFQUFFO0FBQUEsRUFDbkcsQ0FBQztBQUVELFdBQVMsc0JBQXNCLE9BQU87QUFDcEMsVUFBTUMsU0FBUSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsSUFBSSxDQUFDLFVBQVUsU0FBUyxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsVUFBVSxJQUFJLENBQUMsVUFBVSxTQUFTLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDbEksVUFBTSxVQUFVQSxPQUFNLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDMUMsUUFBSSxPQUFPO0FBQ1gsUUFBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPO0FBQUEsYUFDcEMsQ0FBQyxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBT0EsT0FBTSxTQUFTO0FBQUEsYUFDeEQsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU8sS0FBSyxJQUFJQSxPQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFBQSxhQUN6SCxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBTyxLQUFLLElBQUksR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFBQSxhQUMxRyxNQUFNLFFBQVEsT0FBTyxNQUFNLFFBQVEsT0FBUSxTQUFRLFVBQVUsSUFBSUEsT0FBTSxVQUFVQSxPQUFNO0FBQUEsYUFDdkYsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRLEtBQU0sU0FBUSxVQUFVLElBQUlBLE9BQU0sVUFBVUEsT0FBTTtBQUFBLFFBQ3pGLFFBQU87QUFDWixVQUFNLFNBQVNBLE9BQU0sSUFBSTtBQUN6QixPQUFHLE1BQU0sTUFBTTtBQUNmLHFCQUFpQixPQUFPLFdBQVcsUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLE1BQU0sSUFBSSxJQUFJO0FBQ25GLHFCQUFpQixPQUFPLFdBQVcsUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLE1BQU0sSUFBSSxJQUFJO0FBQ25GLGNBQVUsSUFBSTtBQUNkLGtCQUFjLGNBQWM7QUFDNUIsVUFBTSxnQkFBZ0I7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGNBQWMsT0FBTyxRQUFRLE1BQU0sRUFBRSxPQUFPLE9BQU8sZUFBZSxPQUFPLGVBQWUsTUFBTSxJQUFJLENBQUMsR0FBRztBQUM3RyxVQUFNQSxTQUFRLENBQUMsR0FBSSxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7QUFDL0YsVUFBTSxVQUFVQSxPQUFNLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDMUMsUUFBSSxPQUFPO0FBQ1gsUUFBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPO0FBQUEsYUFDcEMsQ0FBQyxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBT0EsT0FBTSxTQUFTO0FBQUEsYUFDeEQsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU8sS0FBSyxJQUFJQSxPQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFBQSxhQUN6SCxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBTyxLQUFLLElBQUksR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFBQSxhQUMxRyxNQUFNLFFBQVEsT0FBTyxNQUFNLFFBQVEsT0FBUSxTQUFRLFVBQVUsSUFBSUEsT0FBTSxVQUFVQSxPQUFNO0FBQUEsYUFDdkYsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRLEtBQU0sU0FBUSxVQUFVLElBQUlBLE9BQU0sVUFBVUEsT0FBTTtBQUFBLFFBQ3pGLFFBQU87QUFDWixVQUFNLFNBQVNBLE9BQU0sSUFBSTtBQUN6QixPQUFHLE1BQU0sTUFBTTtBQUNmLFFBQUksY0FBYztBQUNoQix1QkFBaUIsV0FBVyxlQUFlLE9BQU8sT0FBTyxNQUFNLFNBQVMsTUFBTSxDQUFDO0FBQy9FLGdCQUFVLElBQUk7QUFDZCxvQkFBYyxjQUFjO0FBQUEsSUFDOUI7QUFDQSxRQUFJLGNBQWM7QUFDaEIsdUJBQWlCLFdBQVcsZUFBZSxPQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUMvRSxnQkFBVSxJQUFJO0FBQUEsSUFDaEI7QUFDQSxVQUFNLGdCQUFnQjtBQUN0QixXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFkLFVBQVMsT0FBTyxVQUFVO0FBQ3hCLFFBQUksS0FBSyxlQUFlLE9BQU8sS0FBSyxHQUFHO0FBQ3JDLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUztBQUNqRCxZQUFNLFFBQVEsTUFBTTtBQUNwQixZQUFNLE9BQU8sVUFBVTtBQUN2QixVQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxZQUFXO0FBQUEsZUFDdkMsTUFBTSxRQUFRLFNBQVUsWUFBVztBQUFBLGVBQ25DLE1BQU0sUUFBUSxTQUFVLGdCQUFlO0FBQUEsZUFDdkMsTUFBTSxRQUFRLElBQUssZUFBYztBQUFBLGVBQ2pDLE1BQU0sUUFBUSxPQUFPLE1BQU0sUUFBUSxJQUFLLGtCQUFpQjtBQUFBLGVBQ3pELE1BQU0sUUFBUSxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQ2hELGNBQU0sV0FBVyxLQUFLLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUMvQyx1QkFBZSxNQUFNLEtBQUssUUFBUSxHQUFHLFNBQVM7QUFDOUMsaUJBQVMsRUFBRSxHQUFHLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFDakMsV0FBVyxNQUFNLFFBQVEsVUFBVSxNQUFNLFFBQVEsS0FBSztBQUNwRCxjQUFNLFdBQVcsS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssU0FBUyxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUM7QUFDMUUsdUJBQWUsTUFBTSxLQUFLLFFBQVEsR0FBRyxTQUFTO0FBQzlDLGlCQUFTLEVBQUUsR0FBRyxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ2pDLFdBQVcsTUFBTSxRQUFRLFVBQVUsTUFBTSxRQUFRLEtBQUs7QUFDcEQsdUJBQWUsTUFBTSxLQUFLLENBQUMsR0FBRyxTQUFTO0FBQ3ZDLGlCQUFTLEVBQUUsR0FBRyxPQUFPLFVBQVUsRUFBRSxDQUFDO0FBQUEsTUFDcEMsV0FBVyxNQUFNLFFBQVEsU0FBUyxNQUFNLFFBQVEsS0FBSztBQUNuRCxjQUFNLFdBQVcsS0FBSyxJQUFJLEdBQUcsS0FBSyxTQUFTLENBQUM7QUFDNUMsdUJBQWUsTUFBTSxLQUFLLFFBQVEsR0FBRyxTQUFTO0FBQzlDLGlCQUFTLEVBQUUsR0FBRyxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ2pDLE1BQ0s7QUFDTCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLG1CQUFtQixZQUFZLE9BQU8seUJBQXlCLEVBQUc7QUFDdEUsUUFBSSxHQUFHLEdBQUcsZ0JBQWdCLEtBQUssc0JBQXNCLEtBQUssRUFBRztBQUM3RCxRQUFJLEdBQUcsR0FBRyxnQkFBZ0IsS0FBSyxNQUFNLFFBQVEsVUFBVTtBQUNyRCxZQUFNLFNBQVMsR0FBRyxRQUFRO0FBQzFCLHVCQUFpQixPQUFPLFdBQVcsUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLE1BQU0sSUFBSSxJQUFJO0FBQ25GLHVCQUFpQixPQUFPLFdBQVcsUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLE1BQU0sSUFBSSxJQUFJO0FBQ25GLGdCQUFVLElBQUk7QUFDZCxvQkFBYyxjQUFjO0FBQzVCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksR0FBRyxHQUFHLGdCQUFnQixLQUFLLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUM5RCxZQUFNLFNBQVMsR0FBRyxRQUFRO0FBQzFCLFlBQU0sUUFBUSxPQUFPLFdBQVcsUUFBUSxJQUFJLFVBQVUsS0FBSyxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsT0FBTyxNQUFNLElBQUk7QUFDaEcsWUFBTSxPQUFPLE9BQU8sV0FBVyxRQUFRLElBQUksVUFBVSxLQUFLLENBQUMsUUFBUSxTQUFTLElBQUksRUFBRSxPQUFPLE1BQU0sSUFBSTtBQUNuRyxZQUFNLFFBQVEsTUFBTSxTQUFTLGlCQUFpQixPQUFPO0FBQ3JELFVBQUksTUFBTyxPQUFNLFdBQVcsWUFBWSxVQUFVLEtBQUssSUFBSSxhQUFhLEtBQUs7QUFDN0UsVUFBSSxNQUFNLFNBQVMsZUFBZ0IsMkJBQTBCLElBQUk7QUFBQSxlQUN4RCxNQUFPLEVBQUMsVUFBVSxTQUFTLEVBQUUsU0FBUyxNQUFNLE1BQU0sSUFBSSxZQUFZLEtBQUssSUFBSSxhQUFhLEtBQUs7QUFDdEcsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsYUFBYSxLQUFLLGNBQWMsT0FBTyxTQUFTLFdBQVcsRUFBRSxNQUFNLE1BQU0sY0FBYyxLQUFLLENBQUMsRUFBRztBQUMxRyxRQUFJLEdBQUcsR0FBRyxhQUFhLEtBQUssY0FBYyxPQUFPLFNBQVMsV0FBVyxFQUFFLE1BQU0sTUFBTSxjQUFjLEtBQUssQ0FBQyxFQUFHO0FBQzFHLFFBQUksR0FBRyxHQUFHLGFBQWEsS0FBSyxNQUFNLFFBQVEsVUFBVTtBQUNsRCxZQUFNLFNBQVMsR0FBRyxRQUFRO0FBQzFCLHVCQUFpQixXQUFXLGVBQWUsT0FBTyxPQUFPLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDL0UsZ0JBQVUsSUFBSTtBQUNkLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksR0FBRyxHQUFHLGFBQWEsS0FBSyxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDM0QsWUFBTSxRQUFRLEdBQUcsUUFBUSxNQUFNLGVBQWUsT0FBTyxVQUFVLEtBQUssQ0FBQyxNQUFNLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFDM0csVUFBSSxPQUFPO0FBQ1QsWUFBSSxNQUFNLFdBQVcsVUFBVyxXQUFVLEtBQUs7QUFBQSxZQUMxQyxjQUFhLEtBQUs7QUFBQSxNQUN6QjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksR0FBRyxHQUFHLGFBQWEsS0FBSyxNQUFNLFFBQVEsVUFBVTtBQUNsRCxZQUFNLFNBQVMsR0FBRyxRQUFRO0FBQzFCLHVCQUFpQixXQUFXLGVBQWUsT0FBTyxPQUFPLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDL0UsZ0JBQVUsSUFBSTtBQUNkLG9CQUFjLGNBQWM7QUFDNUIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsYUFBYSxLQUFLLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUMzRCxZQUFNLFNBQVMsR0FBRyxRQUFRO0FBQzFCLFlBQU0sT0FBTyxXQUFXLGVBQWUsT0FBTyxVQUFVLEtBQUssQ0FBQyxRQUFRLFNBQVMsSUFBSSxFQUFFLE9BQU8sTUFBTTtBQUNsRyxVQUFJLE1BQU0sU0FBUyxlQUFnQiwyQkFBMEIsSUFBSTtBQUFBLGVBQ3hELE1BQU07QUFDYixZQUFJLENBQUMsVUFBVSxTQUFTLEVBQUUsU0FBUyxLQUFLLE1BQU0sRUFBRyxhQUFZLElBQUk7QUFBQSxZQUM1RCxjQUFhLElBQUk7QUFBQSxNQUN4QjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLFlBQVksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQ25ELGdCQUFVO0FBQ1YsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDbkMsWUFBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixVQUFJLE1BQU0sS0FBSyxTQUFTLE1BQU07QUFDNUIsY0FBTSxJQUFJLFNBQVM7QUFDbkIsZ0JBQVEsS0FBSyxDQUFDO0FBQUEsTUFDaEIsT0FBTztBQUNMLGFBQUssU0FBUztBQUNkLGNBQU0sVUFBVUksTUFBSyxPQUFPLFFBQVE7QUFDcEMsY0FBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLFlBQVksSUFBSSxVQUFVLFFBQVEsMkNBQTJDLFlBQVksSUFBSSxPQUFPLE1BQU0sS0FBSyxzQkFBc0I7QUFBQSxNQUNySztBQUNBLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxNQUFNLFFBQVEsS0FBSztBQUN0Qyx5QkFBbUIsS0FBSztBQUN4QixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsR0FBRztBQUN2RSxVQUFJLEtBQUssRUFBRyxPQUFNLDRDQUE0QztBQUFBLGVBQ3JELFlBQVksUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFHLE9BQU0sdUJBQXVCO0FBQUEsVUFDdEUsZUFBYyxNQUFNO0FBQ3pCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3ZFLFVBQUksS0FBSyxFQUFHLE9BQU0sZ0VBQWdFO0FBQUEsVUFDN0UsaUJBQWdCO0FBQ3JCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3ZFLHdCQUFrQixJQUFJO0FBQ3RCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3ZFLHVCQUFpQjtBQUNqQixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsR0FBRztBQUN2RSxVQUFJLENBQUMsY0FBYyxFQUFHLE9BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxrQ0FBa0M7QUFBQSxXQUN4RTtBQUNILGNBQU0sUUFBUSxDQUFDLE1BQU0sT0FBTyxVQUFVLFFBQVEsS0FBSztBQUNuRCxjQUFNLE9BQU8sT0FBTyxNQUFNLFFBQVEsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLE1BQU0sTUFBTTtBQUN2RSx5QkFBaUIsSUFBSTtBQUFBLE1BQ3ZCO0FBQ0EsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8saUJBQWlCLEdBQUc7QUFDekQsdUJBQWlCLFVBQVUsSUFBSSxLQUFLLGVBQWUsTUFBTTtBQUN6RCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxnQkFBZ0IsR0FBRztBQUN4RCxrQkFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLGNBQWMsTUFBTTtBQUNqRCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxnQkFBZ0IsR0FBRztBQUN4RCxZQUFNLFFBQVEsWUFBWSxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQ2xELHFCQUFlLElBQUk7QUFDbkIsc0JBQWdCLElBQUk7QUFDcEIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sTUFBTSxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQ3ZGLGlCQUFXO0FBQ1gsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sYUFBYSxDQUFDLE1BQU8sSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzlFLFFBQU0sVUFBVSxXQUFXLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLEdBQUksQ0FBQyxJQUFJLENBQUM7QUFFbEcsUUFBTSxhQUFhLFVBQVUsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUNuRCxRQUFNLGFBQWEsWUFBWSxTQUFTO0FBQ3hDLFFBQU0sZUFBZSxlQUFlLFFBQVEsQ0FBQyxTQUFTO0FBQ3RELFFBQU0sa0JBQWtCLENBQUMsZUFDckIsQ0FBQyxJQUNELFNBQVMsSUFDUCxTQUFTLEVBQUUsVUFDWCxZQUFZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBWSxXQUFXLFVBQVUsS0FBSyxXQUFXLFFBQVEsTUFBTSxFQUFFLFdBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxXQUFXLFdBQVcsWUFBWSxDQUFDLENBQUM7QUFFekssUUFBTSxVQUFVLE1BQU0sRUFBRSxNQUFNLHNCQUFzQjtBQUNwRCxRQUFNLFlBQVksWUFBWSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxLQUFLLENBQUMsU0FBUztBQUN0RixNQUFJLFdBQVc7QUFDYixjQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM3QixVQUFJLFVBQVUsU0FBUyxFQUFHLGFBQVksS0FBSztBQUFBLElBQzdDLENBQUM7QUFBQSxFQUNIO0FBQ0EsUUFBTSxlQUFlLFlBQ2pCLFNBQVMsRUFDTixJQUFJLENBQUMsTUFBTSxDQUFDVyxZQUFXLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDekMsT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLFNBQVMsQ0FBQyxFQUM5QixLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQzFCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFDbkIsQ0FBQztBQUVMLFdBQVMsU0FBUyxHQUFHO0FBQ25CLFVBQU0sSUFBSSxNQUFNO0FBQ2hCLFVBQU0sS0FBSyxFQUFFLFlBQVksR0FBRztBQUM1QixVQUFNLGNBQWMsSUFBSSxrQkFBa0IsQ0FBQztBQUMzQyxRQUFJLGFBQWE7QUFDZixlQUFTLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxjQUFjLEdBQUc7QUFBQSxJQUM3QyxPQUFPO0FBQ0wsZUFBUyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUN2QztBQUNBLGlCQUFhLENBQUM7QUFBQSxFQUNoQjtBQUVBLFFBQU0sVUFBVSxXQUFXLElBQUksa0JBQWtCLEVBQUUsT0FBTyxNQUFNLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJO0FBQ2xHLFFBQU0saUJBQWlCLENBQUMsQ0FBQyxXQUFXLFFBQVEsUUFBUSxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsU0FBUztBQUUzRyxRQUFNLGdCQUFnQixNQUFNLFlBQVksUUFBUSxDQUFDO0FBQ2pELFFBQU0saUJBQWlCLE1BQU07QUFDM0IsVUFBTSxTQUFTLGFBQWE7QUFDNUIsUUFBSSxDQUFDLE9BQVEsUUFBTyxDQUFDO0FBQ3JCLFVBQU0sRUFBRSxNQUFNLE1BQU0sSUFBSSxZQUFZLFFBQVEsR0FBRyxPQUFPLEtBQUs7QUFDM0QsVUFBTSxJQUFJLE1BQU07QUFDaEIsVUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxTQUFTLE9BQU87QUFDckQsVUFBTSxPQUFPLENBQUM7QUFDZCxRQUFJLElBQUksRUFBRyxNQUFLLEtBQUssRUFBRSxLQUFLLFFBQVEsT0FBTyxpQ0FBaUMsTUFBTSxpQ0FBaUMsVUFBVSxZQUFZLENBQUM7QUFDMUksU0FBSyxLQUFLO0FBQUEsTUFDUixLQUFLO0FBQUEsTUFDTCxPQUFPLElBQUksSUFBSSw4QkFBOEI7QUFBQSxNQUM3QyxNQUFNLElBQUksSUFBSSxvREFBb0QsdUNBQXVDLElBQUk7QUFBQSxJQUMvRyxDQUFDO0FBQ0QsUUFBSSxJQUFJLEVBQUcsTUFBSyxLQUFLLEVBQUUsS0FBSyxRQUFRLE9BQU8scUJBQXFCLE1BQU0sc0JBQXNCLFVBQVUsWUFBWSxDQUFDO0FBQ25ILFNBQUssS0FBSyxFQUFFLEtBQUssV0FBVyxPQUFPLDZCQUE2QixNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZILFdBQU87QUFBQSxFQUNULEdBQUc7QUFFSCxRQUFNLFFBQVEsVUFBVSxLQUFLLFFBQVEsRUFBRTtBQUN2QyxRQUFNLGlCQUFpQixNQUFNLEVBQUUsVUFBVSxLQUFLLFFBQVEsRUFBRSxtQkFBbUIsS0FBSyxRQUFRLEVBQUUsb0JBQW9CLE1BQU0sRUFBRSxPQUNsSCxLQUFLLElBQUksS0FBSyxLQUFLLE1BQU8sUUFBUSxFQUFFLG1CQUFtQixNQUFNLEVBQUUsVUFBVyxHQUFHLENBQUMsSUFDOUU7QUFDSixRQUFNLGdCQUFnQjtBQUN0QixRQUFNLGNBQWMsY0FBYyxJQUFJLGNBQWMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLGNBQWMsQ0FBQyxJQUFJO0FBQzVGLFFBQU0sbUJBQW1CLGNBQWMsU0FBUyxLQUFLLFVBQVUsU0FBUztBQUN4RSxRQUFNLGtCQUFrQixHQUFHLEdBQUcsYUFBYSxLQUFNLEdBQUcsR0FBRyxnQkFBZ0IsS0FBSyxHQUFHLFFBQVEsRUFBRSxXQUFXLFFBQVEsSUFBSyxHQUFHLFFBQVEsSUFBSTtBQUNoSSxRQUFNLGlCQUFpQixtQkFBbUIsb0JBQW9CLGVBQWUsZ0JBQWdCLE1BQU0sU0FBUyxNQUFNLElBQUk7QUFDdEgsUUFBTSxlQUFlLGlCQUFpQixjQUFjLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxjQUFjLElBQUk7QUFDM0YsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLGtCQUFrQixjQUFjLFVBQVUsWUFBWSxXQUFXLFlBQVksU0FBUyxTQUFTLEtBQUs7QUFDMUcsUUFBTSxvQkFBb0Isb0JBQW9CLGVBQWUsSUFBSSxjQUFjLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxrQkFBa0IsY0FBYyxFQUFFO0FBQzVJLFFBQU0sbUJBQW1CLGlCQUFpQixrQkFBa0IsR0FBRyxtQkFBbUIsY0FBYyxRQUFRLGVBQWU7QUFDdkgsTUFBSSxxQkFBcUIsa0JBQWtCLEVBQUcsc0JBQXFCLGdCQUFnQjtBQUNuRixRQUFNLGNBQWMsY0FBYyxNQUFNLGtCQUFrQixtQkFBbUIsZUFBZTtBQUM1RixnQkFBYztBQUNkLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0sY0FBYyxjQUFjLElBQUksVUFBVSxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sY0FBYyxDQUFDLElBQUk7QUFDNUYsUUFBTSxrQkFBa0IsR0FBRyxHQUFHLGFBQWEsS0FBTSxHQUFHLEdBQUcsZ0JBQWdCLEtBQUssR0FBRyxRQUFRLEVBQUUsV0FBVyxRQUFRLElBQUssR0FBRyxRQUFRLElBQUk7QUFDaEksUUFBTSxpQkFBaUIsbUJBQW1CLG9CQUFvQixlQUFlLGdCQUFnQixNQUFNLFNBQVMsTUFBTSxJQUFJO0FBQ3RILFFBQU0sZUFBZSxpQkFBaUIsVUFBVSxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sY0FBYyxJQUFJO0FBQzNGLFFBQU0sY0FBYyxnQkFBZ0I7QUFDcEMsUUFBTSxrQkFBa0IsY0FDcEIsVUFBVSxDQUFDLFVBQVUsU0FBUyxFQUFFLFNBQVMsWUFBWSxNQUFNLElBQUksV0FBVyxTQUFTLEtBQ25GO0FBQ0osUUFBTSxvQkFBb0Isb0JBQW9CLGVBQzFDLElBQ0EsY0FBYyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsa0JBQWtCLGNBQWMsRUFBRTtBQUMvRSxRQUFNLG1CQUFtQixpQkFBaUIsa0JBQWtCLEdBQUcsbUJBQW1CLGNBQWMsUUFBUSxlQUFlO0FBQ3ZILE1BQUkscUJBQXFCLGtCQUFrQixFQUFHLHNCQUFxQixnQkFBZ0I7QUFDbkYsUUFBTSxjQUFjLGNBQWMsTUFBTSxrQkFBa0IsbUJBQW1CLGVBQWU7QUFDNUYsUUFBTSxpQkFBaUJYLE1BQUssUUFBUSxRQUFRO0FBQzVDLGFBQVc7QUFDWCxRQUFNLFVBQVUsVUFBVSxJQUFJQSxNQUFLLElBQUksT0FBTyxJQUFJO0FBRWxELE1BQUksS0FBSyxNQUFNLFFBQVE7QUFDckIsV0FBTyxnQkFBQVAsS0FBQyxRQUFLLFVBQVUsVUFBVSxTQUFTLE1BQU0sUUFBUSxNQUFNLEdBQUc7QUFBQSxFQUNuRTtBQUVBLG1CQUFpQjtBQUVqQixRQUFNLGlCQUFpQixNQUFNLElBQUksYUFBYSxFQUFFLGFBQWEsUUFBUSxFQUFFO0FBQ3ZFLFFBQU0seUJBQXlCLFVBQVUsRUFBRSxNQUFNLEdBQUcsUUFBUSxHQUFHO0FBQy9ELFFBQU0sc0JBQXNCLE1BQU0sSUFBSSxlQUFlLElBQUksQ0FBQyxVQUFVO0FBQUEsSUFDbEUsR0FBRztBQUFBLElBQ0gsZUFBZSxLQUFLLGNBQWM7QUFBQSxFQUNwQyxFQUFFLElBQUk7QUFDTixRQUFNLGNBQWMsa0JBQWtCLGVBQWUsa0JBQWtCLE9BQU87QUFDOUUsUUFBTSxjQUFjLGtCQUFrQixlQUFlLGtCQUFrQixPQUFPO0FBQzlFLE1BQUksY0FBYztBQUNsQixNQUFJLGFBQWE7QUFDZixRQUFJO0FBQUUsb0JBQWNPLE1BQUssT0FBTyxPQUFPLFlBQVksSUFBSSxFQUFFLE1BQU0sSUFBSyxDQUFDO0FBQUEsSUFBRSxRQUFRO0FBQUEsSUFBQztBQUFBLEVBQ2xGO0FBQ0EsUUFBTSxrQkFBa0IsY0FBYztBQUFBLElBQ3BDLEVBQUUsTUFBTSxpQkFBaUIsTUFBTSxZQUFZLFFBQVE7QUFBQSxJQUNuRCxFQUFFLE1BQU0sZ0JBQWdCLE1BQU0sYUFBYSxVQUFVLGdCQUFnQjtBQUFBLEVBQ3ZFLElBQUk7QUFDSixRQUFNLG1CQUFtQixjQUFjLFNBQVMsWUFBWSxFQUFFLEtBQUssY0FBYyxTQUFTLFlBQVksRUFBRSxLQUFLO0FBQzdHLFFBQU0sY0FBYyxJQUFJLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7QUFDMUcsUUFBTSxhQUFhLG9CQUFvQixjQUFjLGdCQUFnQixXQUFXLElBQUksb0JBQW9CLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxVQUFVLENBQUMsWUFBWSxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2pMLFFBQU0sbUJBQW1CLGFBQWEsU0FBUztBQUMvQyxRQUFNLHFCQUFxQixlQUFlO0FBQzFDLFFBQU0sYUFBYSxDQUFDLFFBQVEsU0FBUyxVQUFVLE1BQU0sSUFDakQsbUJBQW1CLE1BQU0sSUFDekIsbUJBQW1CLElBQ2pCLHNCQUFzQixRQUFRLE1BQU0sSUFDcEM7QUFDTixRQUFNLGtCQUFrQixXQUFXLFlBQVksYUFBYSxXQUFXLFNBQVM7QUFDaEYsUUFBTSxXQUFXLG1CQUFtQixFQUFFLE9BQU8saUJBQWlCLGFBQWEsR0FBRyxhQUFhLEVBQUUsSUFBSSxpQkFBaUIsaUJBQWlCLFdBQVcsQ0FBQztBQUMvSSxRQUFNLGNBQWMsU0FBUztBQUM3QixRQUFNLGVBQWUscUJBQXFCLFNBQVMsUUFBUSxDQUFDLEdBQUcsU0FBUyxPQUFPLEdBQUcsV0FBVyxpQkFBaUIsUUFBUSxHQUFHLFVBQVUsSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFNLElBQUksR0FBRyxVQUFVLE1BQU0sT0FBTyxDQUFDO0FBQzFMLFFBQU0sdUJBQXVCLG1CQUFtQixRQUFRLFlBQVk7QUFDcEUsOEJBQTRCLHFCQUFxQjtBQUNqRCxRQUFNLFFBQVEscUJBQXFCO0FBRW5DLFFBQU0sYUFBYSxZQUFZLEtBQUssY0FBYyxJQUFJO0FBQ3RELFFBQU0sc0JBQXNCLENBQUMsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEtBQUssUUFBUSxhQUFhO0FBRTVHLE1BQUksZ0JBQWdCLEdBQUc7QUFDckIsV0FDRSxnQkFBQVA7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFVBQVUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLGNBQWMsU0FBUyxDQUFDLE1BQU0sU0FBUyxFQUFFLFVBQVUsY0FBYyxTQUFTLENBQUMsQ0FBQztBQUFBLFFBQ2pILFFBQVE7QUFBQSxRQUNSLFlBQVksU0FBUztBQUFBLFFBQ3JCLFNBQU87QUFBQSxRQUNQLGtCQUFrQjtBQUFBLFFBQ2xCLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxtQkFBbUIsS0FBSztBQUFBO0FBQUEsSUFDekM7QUFBQSxFQUVKO0FBRUEsTUFBSSxhQUFhLEdBQUc7QUFDbEIsV0FDRSxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQVMsV0FBVztBQUFBLFFBQ3BCLFNBQU87QUFBQSxRQUNQLFVBQVUsQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJO0FBQUEsUUFDbkMsYUFBYSxDQUFDLFNBQVMsSUFBSSxVQUFVLElBQUk7QUFBQSxRQUN6QyxVQUFVLENBQUMsU0FBUztBQUNsQixnQkFBTSxRQUFRLEtBQUs7QUFDbkIsY0FBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFFBQVEsS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQU07QUFDakUsaUJBQUssZUFBZSxFQUFFLE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRTtBQUMzQyxtQkFBTyxNQUFNLDJCQUEyQixJQUFJLGtCQUFrQjtBQUFBLFVBQ2hFO0FBQ0EsZUFBSyxlQUFlO0FBQ3BCLGNBQUksT0FBTyxJQUFJO0FBQ2YsZ0JBQU0sc0JBQXNCLElBQUksRUFBRTtBQUFBLFFBQ3BDO0FBQUEsUUFDQSxPQUFPLENBQUMsTUFBTSxTQUFTLFVBQVU7QUFDL0IsY0FBSSxJQUFJLE1BQU0sU0FBUyxLQUFLO0FBQzVCLGdCQUFNLFNBQVMsSUFBSSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ2xDO0FBQUEsUUFDQSxRQUFRLENBQUMsTUFBTSxZQUFZO0FBQ3pCLGNBQUksT0FBTyxNQUFNLE9BQU87QUFDeEIsZ0JBQU0sV0FBVyxJQUFJLEVBQUU7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsU0FBUyxNQUFNLGdCQUFnQixLQUFLO0FBQUE7QUFBQSxJQUN0QztBQUFBLEVBRUo7QUFFQSxNQUFJLGdCQUFnQixHQUFHO0FBQ3JCLFdBQ0UsZ0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxVQUFVLGVBQWU7QUFBQSxRQUN6QixRQUFRLGFBQWE7QUFBQSxRQUNyQixZQUFZLFlBQVk7QUFBQSxRQUN4QixTQUFTLGNBQWM7QUFBQSxRQUN2QixTQUFPO0FBQUEsUUFDUCxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQzFCLFFBQVEsQ0FBQyxTQUFTO0FBQ2hCLGNBQUksS0FBSyxPQUFPLE9BQU8sTUFBTSxTQUFTLEdBQUksUUFBTyxtQkFBbUIsS0FBSztBQUN6RSx3QkFBYyxJQUFJO0FBQUEsUUFDcEI7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxtQkFBbUIsS0FBSztBQUFBO0FBQUEsSUFDekM7QUFBQSxFQUVKO0FBRUEsTUFBSSxpQkFBaUIsR0FBRztBQUN0QixXQUNFLGdCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsVUFBVSxTQUFTO0FBQUEsUUFDbkIsU0FBUyxnQkFBZ0I7QUFBQSxRQUN6QixTQUFPO0FBQUEsUUFDUCxnQkFBZ0IsQ0FBQyxhQUFhLFNBQVMsU0FBUyxjQUFjLFNBQVMsTUFBTSxJQUFJLElBQUksaUJBQWlCLFFBQVEsRUFBRSxLQUFLLE1BQU0sb0JBQW9CLEtBQUssQ0FBQztBQUFBLFFBQ3JKLGVBQWU7QUFBQSxRQUNmLGVBQWU7QUFBQSxRQUNmLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxvQkFBb0IsS0FBSztBQUFBO0FBQUEsSUFDMUM7QUFBQSxFQUVKO0FBRUEsTUFBSSxnQkFBZ0IsR0FBRztBQUNyQixXQUNFLGdCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsUUFBUSxFQUFFLFFBQVEsT0FBTyxHQUFHLGNBQWMsbUJBQW1CLEdBQUcsV0FBVyxVQUFVLEdBQUcsYUFBYSxZQUFZLEdBQUcsZUFBZU8sTUFBSyxlQUFlLFlBQVlBLE1BQUssWUFBWSxtQkFBbUJBLE1BQUssbUJBQW1CLG1CQUFtQkEsTUFBSyxtQkFBbUIsbUJBQW1CQSxNQUFLLG1CQUFtQixvQkFBb0IsbUJBQW1CLEVBQUU7QUFBQSxRQUM5VixTQUFPO0FBQUEsUUFDUCxrQkFBa0IsTUFBTTtBQUN0QixpQ0FBdUIsSUFBSTtBQUMzQixpQ0FBdUIsUUFBUTtBQUMvQiw2QkFBbUIsS0FBSztBQUN4QixvQ0FBMEIsSUFBSTtBQUFBLFFBQ2hDO0FBQUEsUUFDQSxxQkFBcUIsTUFBTTtBQUN6QixpQ0FBdUIsS0FBSztBQUM1Qix3Q0FBOEIsS0FBSztBQUNuQyxpQ0FBdUIsUUFBUTtBQUMvQiw2QkFBbUIsS0FBSztBQUN4QixvQ0FBMEIsSUFBSTtBQUFBLFFBQ2hDO0FBQUEsUUFDQSx3QkFBd0IsQ0FBQyxXQUFXO0FBQ2xDLG9DQUEwQixNQUFNO0FBQ2hDLGlDQUF1QixRQUFRO0FBQy9CLDZCQUFtQixLQUFLO0FBQ3hCLG9DQUEwQixJQUFJO0FBQUEsUUFDaEM7QUFBQSxRQUNBLHlCQUF5QixNQUFNO0FBQzdCLHdDQUE4QixJQUFJO0FBQ2xDLGlDQUF1QixRQUFRO0FBQy9CLDZCQUFtQixLQUFLO0FBQ3hCLG9DQUEwQixJQUFJO0FBQUEsUUFDaEM7QUFBQSxRQUNBLFVBQVUsQ0FBQyxNQUFNLFVBQVU7QUFDekIsY0FBSSxTQUFTLFVBQVU7QUFDckIsc0JBQVUsS0FBSztBQUNmLHdCQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsTUFBTSxFQUFFLENBQUM7QUFBQSxVQUM5QyxXQUFXLFNBQVMsYUFBYTtBQUMvQix5QkFBYSxLQUFLO0FBQ2xCLFlBQUFBLE1BQUssWUFBWTtBQUNqQixZQUFBQSxNQUFLLElBQUksV0FBVyxLQUFLO0FBQ3pCLHdCQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsTUFBTSxFQUFFLENBQUM7QUFBQSxVQUMvQyxXQUFXLFNBQVMsZUFBZTtBQUNqQywyQkFBZSxLQUFLO0FBQ3BCLFlBQUFBLE1BQUssY0FBYztBQUNuQix3QkFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLE1BQU0sRUFBRSxDQUFDO0FBQUEsVUFDakQsV0FBVyxTQUFTLHNCQUFzQjtBQUN4QyxrQ0FBc0IsS0FBSztBQUMzQixZQUFBQSxNQUFLLHFCQUFxQjtBQUMxQix3QkFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLE1BQU0sRUFBRSxDQUFDO0FBQUEsVUFDakQsT0FBTztBQUNMLGtDQUFzQixLQUFLO0FBQzNCLHdCQUFZLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixNQUFNLEVBQUUsQ0FBQztBQUFBLFVBQ3hEO0FBQUEsUUFDRjtBQUFBLFFBQ0EsU0FBUyxNQUFNLG1CQUFtQixLQUFLO0FBQUE7QUFBQSxJQUN6QztBQUFBLEVBRUo7QUFFQSxTQUNFLGdCQUFBTixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsYUFBYSxRQUFRLFVBQVUsUUFBUSxPQUFPLEdBQ3pFO0FBQUEsb0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNuRDtBQUFBLHNCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxVQUFVLEdBQUcsS0FBSyxHQUFHLElBQUksU0FBUyxHQUNwRTtBQUFBLHdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbEMsZUFBSyxJQUVGLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDBCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksT0FBTyxHQUFHLFVBQVUsRUFBRSxHQUN0QywwQkFBQUEsS0FBQyxXQUFRLE9BQU0sU0FBUSxXQUFXLFVBQVUsVUFBVSxNQUFNLFNBQU8sTUFDaEUscUJBQVcsSUFDUixjQUFjLEdBQUcsVUFBVSxZQUFZLHVCQUF1QixjQUFjLEVBQUUsT0FBTyxPQUFPLDBCQUM1RixVQUFVLE1BQU0sYUFBYSxhQUFhLFVBQVUsTUFBTSxVQUFVLFlBQVksY0FDdEYsR0FDRjtBQUFBLFVBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFVBQVUsV0FBVyxHQUFJLGVBQUssT0FBTyxzQkFBcUI7QUFBQSxXQUN6RixJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLFdBQVcsR0FBSSxVQUFBTyxNQUFLLFlBQVcsR0FDNUU7QUFBQSxRQUNDLFNBQVMsVUFBVSxnQkFBQVAsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sVUFBVSxXQUFXLEdBQUksa0JBQVEsUUFBTztBQUFBLFFBQ3hGLFNBQVMsUUFBUSxLQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGNBQUksUUFBUSxLQUFLLElBQUc7QUFBQSxRQUMxRSxTQUFTLFVBQVUsS0FBSyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksR0FBSSxjQUFJLFFBQVEsT0FBTyxJQUFHO0FBQUEsU0FDL0U7QUFBQSxNQUNDLFdBQVcsV0FBVyxJQUNyQixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsS0FBSyxhQUFhLEVBQUUsR0FDN0MsMEJBQUFBLEtBQUMsY0FBVyxTQUFTUSxVQUFTLFFBQVEsT0FBTyxHQUFHLEdBQ2xELElBQ0UsZ0JBQUFQLE1BQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLGVBQWUsU0FBUyxHQUNwRDtBQUFBLDRCQUFvQixNQUFNLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFDM0UsZ0JBQUFELEtBQUMsU0FBOEQsT0FBTyxFQUFFLGVBQWUsVUFBVSxhQUFhLEdBQUcsY0FBYyxHQUFHLGVBQWUsR0FBRyxZQUFZLEVBQUUsR0FDaEssMEJBQUFBLEtBQUMsV0FBUSxNQUFZLFNBQVMsUUFBUSxHQUFHLEtBRGpDLEdBQUcsZ0JBQWdCLFdBQVcsS0FBSyxhQUFhLENBQUMsRUFFM0QsQ0FDRDtBQUFBLFFBQ0QsZ0JBQUFDO0FBQUEsVUFBQ2tCO0FBQUEsVUFBQTtBQUFBLFlBQ0MsT0FBTyxFQUFFLFVBQVUsR0FBRyxLQUFLLGFBQWEsRUFBRTtBQUFBLFlBQzFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLE1BQU0sS0FBSyxHQUFHLEdBQUcscUJBQXFCO0FBQUEsWUFDM0UsYUFBYSxNQUFNLElBQUksaUJBQWlCO0FBQUEsWUFDeEMsY0FBYztBQUFBLFlBQ2QsY0FBYyxPQUFPLElBQUksTUFBTSxPQUFPO0FBQUEsWUFDdEMsV0FBVyxDQUFDLFlBQVk7QUFDdEIsb0JBQU0sV0FBVyxrQkFBa0I7QUFDbkMsa0JBQUksVUFBVSxrQkFBa0IsUUFBUSxpQkFBaUIsVUFBVSxrQkFBa0IsUUFBUSxjQUFlO0FBQzVHLG1DQUFxQixPQUFPO0FBQzVCLGtCQUFJLGNBQWMsS0FBSyxRQUFRLGdCQUFnQixLQUFLLFFBQVEsaUJBQWlCLFFBQVEsZUFBZTtBQUNsRyw4QkFBYyxDQUFDLFNBQVMsT0FBTyxjQUFjO0FBQUEsY0FDL0M7QUFBQSxZQUNGO0FBQUEsWUFDQSxVQUFVLENBQUMsTUFBTSxTQUFTO0FBQzFCLHdCQUFVLENBQUMsQ0FBQyxNQUFNLFFBQVE7QUFHMUIsa0JBQUksTUFBTSxZQUFZLFdBQVcsSUFBSSxlQUFnQixlQUFjLGNBQWM7QUFDakYsa0JBQUksU0FBUyxLQUFLLGNBQWMsR0FBRztBQUdqQyxzQkFBTSxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsU0FBUyxXQUFXO0FBQzNELHNCQUFNLFVBQVUsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLE1BQU0sYUFBYSxLQUFLLEtBQUssSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUYsOEJBQWMsQ0FBQyxNQUFNLElBQUksY0FBYztBQUN2QywwQkFBVSxRQUFRLE9BQU87QUFDekI7QUFBQSxjQUNGO0FBQ0Esd0JBQVUsSUFBSTtBQUFBLFlBQ2hCO0FBQUEsWUFDQSxXQUFTO0FBQUEsWUFFVDtBQUFBLDhCQUFBbkIsS0FBQyxnQkFBeUIsUUFBUSxtQkFBbUIsUUFBUTtBQUFBLGNBQzVELGNBQWMsS0FDYixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FDeEIsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFJLG9CQUFLLFlBQVksZUFBZSxDQUFDLFVBQVUsZ0JBQWdCLElBQUksWUFBWSxVQUFVLDJCQUEwQixHQUMvSjtBQUFBLGNBRUQsbUJBQ0MsZ0JBQUFDLE1BQUEsWUFDRTtBQUFBLGdDQUFBRCxLQUFDLHdCQUFxQixPQUFPLE1BQU0sT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLG1CQUFtQixHQUFHLFNBQVMsUUFBUSxHQUFHLE1BQU0sY0FBYyxLQUFLLEtBQUssb0JBQW9CLG1CQUFtQixHQUFHLGdCQUFnQixrQkFBa0IsR0FBRyxlQUFlLFNBQVMsR0FBRyxHQUFHLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRyxNQUFNLE1BQU0sR0FBRztBQUFBLGdCQUNoUyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxNQUM1RixnQkFBQUEsS0FBQyxXQUErRSxNQUFZLFNBQVMsUUFBUSxLQUEvRixHQUFHLGdCQUFnQixTQUFTLEtBQUssYUFBYSxLQUFLLFVBQVUsQ0FBQyxFQUFvQyxDQUNqSDtBQUFBLGlCQUNILElBQ0UsTUFBTSxJQUFJLENBQUMsTUFBTSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQ3pDLGdCQUFBQTtBQUFBLGdCQUFDO0FBQUE7QUFBQSxrQkFFQztBQUFBLGtCQUNBLFNBQVMsUUFBUTtBQUFBLGtCQUNqQixVQUFVLEtBQUssY0FBYztBQUFBLGtCQUM3QixPQUFPO0FBQUE7QUFBQSxnQkFKRixHQUFHLGdCQUFnQixJQUFJLEtBQUssYUFBYSxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsY0FLOUUsSUFFQSxnQkFBQUE7QUFBQSxnQkFBQztBQUFBO0FBQUEsa0JBRUM7QUFBQSxrQkFDQSxTQUFTLFFBQVE7QUFBQSxrQkFDakIsY0FBYywwQkFBMEIsbUJBQW1CLE1BQU0sQ0FBQyxHQUFHLGNBQWMsSUFBSSwwQkFBMEIsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJO0FBQUEsa0JBQy9JLFFBQVE7QUFBQTtBQUFBLGdCQUpILEdBQUcsZ0JBQWdCLElBQUksS0FBSyxhQUFhLEtBQUssVUFBVSxjQUFjLENBQUM7QUFBQSxjQUs5RSxDQUNEO0FBQUE7QUFBQTtBQUFBLFFBQ0Q7QUFBQSxRQUNDLG1CQUFtQixPQUFPLElBQ3pCLGdCQUFBQSxLQUFDLHlCQUFzQixRQUFRLG9CQUFvQixTQUFTLDJCQUEyQixJQUNyRixHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxLQUM3QixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLFlBQVksS0FBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsZUFBZSxPQUFPLElBQUksT0FBTyxHQUFHLFVBQVUsRUFBRSxHQUM3RztBQUFBLDBCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsVUFDN0IsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksNkVBQXdEO0FBQUEsV0FDNUY7QUFBQSxTQUVKO0FBQUEsT0FFRSxVQUFVLEVBQUUsU0FBUyxLQUFLLE9BQU8sRUFBRSxTQUFTLE1BQzVDLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQzlEO0FBQUEsa0JBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxNQUN6QixnQkFBQUEsTUFBQyxTQUEyQixPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ3hEO0FBQUEsMEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUkscUJBQUs7QUFBQSxVQUNwRCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLE9BQU8sRUFBRSxHQUFJLGtCQUFRLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDdkY7QUFBQSxVQUNDLE1BQU0sS0FBSyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLCtDQUErQjtBQUFBLGFBTHRFLGFBQWEsQ0FBQyxFQU14QixDQUNEO0FBQUEsUUFDQSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsTUFDdEIsZ0JBQUFDLE1BQUMsU0FBeUIsT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUN0RDtBQUFBLDBCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHFCQUFLO0FBQUEsVUFDckMsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxNQUFNLEdBQUksa0JBQVEsUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUNwRjtBQUFBLFVBQ0MsTUFBTSxLQUFLLFVBQVUsRUFBRSxXQUFXLEtBQUssZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksaUVBQTRDO0FBQUEsYUFMNUcsV0FBVyxDQUFDLEVBTXRCLENBQ0Q7QUFBQSxTQUNIO0FBQUEsTUFHRCxZQUFZLEtBQUssZ0JBQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDakIsTUFBTSxZQUFZLEVBQUU7QUFBQSxVQUNwQixRQUFRLFlBQVksRUFBRTtBQUFBLFVBQ3RCLE9BQU8sU0FBUztBQUFBLFVBQ2hCLFNBQU87QUFBQSxVQUNQLFVBQVUsQ0FBQyxXQUFXLGNBQWMsWUFBWSxHQUFHLE1BQU07QUFBQSxVQUN6RCxVQUFVLE1BQU07QUFBRSwyQkFBZSxJQUFJO0FBQUcsaUJBQUssbUJBQW1CO0FBQU0sZUFBRyxNQUFNLE9BQU87QUFBQSxVQUFFO0FBQUE7QUFBQSxNQUMxRjtBQUFBLE1BRUMsZ0JBQWdCLEtBQ2YsZ0JBQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxTQUFTLGdCQUFnQjtBQUFBLFVBQ3pCLFNBQVMsR0FBRyxHQUFHLFVBQVUsS0FBSyxDQUFDLFNBQVM7QUFBQSxVQUN4QyxVQUFVLENBQUMsWUFBWTtBQUNyQixpQkFBSyw2QkFBNkI7QUFDbEMsZ0JBQUksZUFBZSxPQUFPO0FBQUEsVUFDNUI7QUFBQSxVQUNBLFVBQVUsTUFBTTtBQUNkLGlCQUFLLDZCQUE2QjtBQUNsQyxnQkFBSSxlQUFlO0FBQUEsVUFDckI7QUFBQTtBQUFBLE1BQ0Y7QUFBQSxNQUdELE1BQU0sS0FDTCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQzFGO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUksZ0JBQU0sRUFBRSxVQUFVLEdBQUcsTUFBTSxFQUFFLFNBQVMsUUFBUSxNQUFNLElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxVQUFVLE1BQU0sRUFBRSxRQUFRLE1BQU0sV0FBVTtBQUFBLFFBQ2pLLE1BQU0sRUFBRSxVQUNQLGdCQUFBQTtBQUFBLFVBQUNvQjtBQUFBLFVBQUE7QUFBQSxZQUNDLFNBQVMsR0FBRyxHQUFHLE9BQU87QUFBQSxZQUN0QixPQUFPLFVBQVU7QUFBQSxZQUNqQixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVLE1BQU07QUFDZCwyQkFBYSxFQUFFO0FBQ2YsdUJBQVMsRUFBRSxHQUFHLE1BQU0sR0FBRyxTQUFTLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxZQUN4RDtBQUFBLFlBQ0EsV0FBVyxDQUFDLFVBQVU7QUFDcEIsa0JBQUksTUFBTSxRQUFRLE9BQU87QUFDdkIsc0JBQU0sS0FBSyxZQUFZLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDM0MseUJBQVMsRUFBRSxHQUFHLE1BQU0sR0FBRyxNQUFNLGFBQWEsS0FBSyxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7QUFDekUsdUJBQU87QUFBQSxjQUNUO0FBQ0EscUJBQU87QUFBQSxZQUNUO0FBQUEsWUFDQSxlQUFhO0FBQUEsWUFDYix5QkFBdUI7QUFBQSxZQUN2QixlQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxRQUFRLEVBQUUsT0FBTyxNQUFNLElBQUksT0FBTyxHQUFHLE9BQU8sUUFBUTtBQUFBO0FBQUEsUUFDdEQsSUFFQSxnQkFBQXBCLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksaUdBQTRFO0FBQUEsU0FFaEg7QUFBQSxNQUdELFdBQVcsS0FBSyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxxQkFBVyxHQUFFO0FBQUEsTUFDN0QsQ0FBQyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUMsZUFBZSxnQkFBQUMsTUFBQyxvQkFBaUIsU0FBUyxNQUFNLEdBQUcsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLElBQUksVUFBVSxlQUFlLE9BQU8sVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLFdBQVcsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLEdBQUcsS0FBSyxhQUFhLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEdBQ3pRO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUcsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZ0JBQWdCLElBQUksT0FBTyxJQUFJLE9BQU8sTUFBTSxLQUFLLEdBQUksb0JBQUk7QUFBQSxRQUNqSCxnQkFBQUEsS0FBQyxVQUFLLGVBQUM7QUFBQSxTQUNMLE1BQU0sU0FBUyxPQUFPLGNBQWMsUUFBUSxFQUFFLFVBQzlDLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsWUFBWSxLQUFLLEdBQUcsT0FBTyxHQUFHLGVBQWUsTUFBTSxHQUN4RTtBQUFBLGdCQUFNLFNBQVMsT0FBTyxjQUFjLGdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGtCQUFRLEVBQUUsUUFBUSxZQUFPLFVBQUk7QUFBQSxVQUNqRyxRQUFRLEVBQUUsU0FBUyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLFNBQVMsTUFBTSxLQUFLLEdBQUksY0FBSSxRQUFRLEVBQUUsS0FBSyxLQUFJO0FBQUEsV0FDdks7QUFBQSxRQUVGLGdCQUFBQTtBQUFBLFVBQUNvQjtBQUFBLFVBQUE7QUFBQSxZQUNDLE9BQU87QUFBQSxZQUNQLGFBQVc7QUFBQSxZQUNYLFdBQVM7QUFBQSxZQUNULFNBQVMsR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGdCQUFnQjtBQUFBLFlBQzNELE9BQU8sTUFBTTtBQUFBLFlBQ2IsY0FBYyxZQUFZO0FBQUEsWUFDMUIsZ0JBQWdCLENBQUMsV0FBVztBQUMxQiw2QkFBZSxNQUFNO0FBQ3JCLDBCQUFZLElBQUk7QUFDaEIsMEJBQVksQ0FBQztBQUFBLFlBQ2Y7QUFBQSxZQUNBLFVBQVUsQ0FBQyxNQUFNO0FBQ2Ysb0JBQU0sWUFBWSx5QkFBeUIsR0FBRztBQUFBLGdCQUM1QyxhQUFhLE1BQU07QUFBQSxnQkFDbkIsUUFBUSxNQUFNLEVBQUUsTUFBTTtBQUFBLGNBQ3hCLENBQUM7QUFDRCx1QkFBUyxVQUFVLE1BQU0sVUFBVSxTQUFTLElBQUksWUFBWSxJQUFJLE1BQVM7QUFDekUsMEJBQVksQ0FBQztBQUNiLDBCQUFZLElBQUk7QUFDaEIsMkJBQWEsQ0FBQztBQUNkLHlCQUFXLEVBQUU7QUFDYixnQ0FBa0IsS0FBSztBQUFBLFlBQ3pCO0FBQUEsWUFDQSxVQUFVLE1BQU07QUFDZCxrQkFBSSxLQUFLLEVBQUcsV0FBVTtBQUFBLG1CQUNqQjtBQUNILHNCQUFNLFNBQVMscUJBQXFCLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQUksT0FBUSxpQkFBZ0IsUUFBUSxFQUFFLEtBQUssT0FBTyxDQUFDO0FBQUEscUJBQzlDO0FBQ0gsOEJBQVksSUFBSTtBQUNoQixnQ0FBYyxLQUFLO0FBQ25CLG9DQUFrQixJQUFJO0FBQUEsZ0JBQ3hCO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLFVBQVU7QUFBQSxZQUNWLFdBQVcsQ0FBQyxNQUFNO0FBQ2hCLGtCQUFJLEtBQUssZUFBZSxPQUFPLENBQUMsRUFBRyxRQUFPO0FBQzFDLGtCQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSztBQUMzQixxQkFBSyxLQUFLLFdBQVc7QUFDckIsdUJBQU87QUFBQSxjQUNUO0FBQ0Esa0JBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxLQUFLO0FBQzNCLHFCQUFLLGVBQWUsTUFBTSxDQUFDO0FBQzNCLHVCQUFPO0FBQUEsY0FDVDtBQUNBLGtCQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSztBQUMzQixxQkFBSyxLQUFLLGFBQWE7QUFDdkIsdUJBQU87QUFBQSxjQUNUO0FBQ0Esa0JBQUksRUFBRSxRQUFRLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFFBQVEsYUFBYSxhQUFhLFNBQVMsR0FBRztBQUNqRix5QkFBUyxhQUFhLEtBQUssSUFBSSxVQUFVLEdBQUcsYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLHVCQUFPO0FBQUEsY0FDVDtBQUNBLGtCQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLGdCQUFnQixnQkFBZ0IsU0FBUyxHQUFHO0FBQ3ZGLHNCQUFNLFFBQVEsU0FBUztBQUN2QixvQkFBSSxDQUFDLE9BQU87QUFDVix3QkFBTSxRQUFRLEtBQUssSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLFNBQVMsQ0FBQztBQUM3RCw4QkFBWSxFQUFFLFNBQVMsZ0JBQWdCLENBQUM7QUFDeEMsOEJBQVksS0FBSztBQUNqQix3QkFBTSxPQUFPLGVBQWUsTUFBTSxHQUFHLFlBQVksTUFBTSxnQkFBZ0IsS0FBSyxFQUFFLElBQUk7QUFDbEYsMkJBQVMsS0FBSyxNQUFNLEtBQUssTUFBTTtBQUFBLGdCQUNqQyxPQUFPO0FBQ0wsd0JBQU0sUUFBUSxTQUFTLElBQUksS0FBSyxNQUFNLFFBQVE7QUFDOUMsOEJBQVksSUFBSTtBQUNoQix3QkFBTSxjQUFjLGVBQWUsTUFBTSxHQUFHLFlBQVksTUFBTSxNQUFNLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDdEYsMkJBQVMsWUFBWSxNQUFNLFlBQVksTUFBTTtBQUFBLGdCQUMvQztBQUNBLHVCQUFPO0FBQUEsY0FDVDtBQUNBLGtCQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsTUFBTTtBQUMvQixzQkFBTSxRQUFRLGtCQUFrQixFQUFFLElBQUk7QUFDdEMsb0JBQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsd0JBQU0sZUFBZSxNQUFNLElBQUksQ0FBQyxTQUFTLElBQUksWUFBWSxJQUFJLENBQUM7QUFDOUQsd0JBQU0sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQy9CLDJCQUFTLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLGFBQWEsS0FBSyxHQUFHLElBQUksRUFBRSxNQUFNLE1BQU0sRUFBRSxDQUFDO0FBQzFFLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFDQSx1QkFBTztBQUFBLGNBQ1Q7QUFDQSxrQkFBSSxFQUFFLFFBQVEsZUFBZSxFQUFFLFNBQVMsR0FBRztBQUN6QyxzQkFBTSxRQUFRLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUI7QUFDaEUsb0JBQUksT0FBTztBQUNULHNCQUFJLFlBQVksTUFBTSxDQUFDLENBQUM7QUFDeEIsMkJBQVMsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLFNBQVMsTUFBTSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQy9FLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNGO0FBQ0Esa0JBQUksRUFBRSxRQUFRLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU07QUFDekMsc0JBQU0sTUFBTSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxTQUFTLGlCQUFpQixDQUFDO0FBQzNFLG9CQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLG9CQUFJLENBQUMsV0FBVyxHQUFHO0FBQ2pCLGdDQUFjLElBQUk7QUFDbEIsK0JBQWEsQ0FBQztBQUNkLDRCQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM3Qix3QkFBSSxVQUFVLFNBQVMsRUFBRyxhQUFZLEtBQUs7QUFBQSxrQkFDN0MsQ0FBQztBQUFBLGdCQUNILFdBQVcsSUFBSSxRQUFRLFNBQVMsR0FBRztBQUNqQyxtQ0FBaUIsRUFBRSxPQUFPLEtBQUssSUFBSSxRQUFRLEtBQUssSUFBSSxVQUFVLEdBQUcsSUFBSSxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFBQSxnQkFDM0Y7QUFDQSx1QkFBTztBQUFBLGNBQ1Q7QUFDQSxrQkFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLGdCQUFnQixVQUFXLFFBQU87QUFDMUQsa0JBQUksRUFBRSxRQUFRLFFBQVEsRUFBRSxVQUFVLE9BQU8sVUFBVSxFQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUUsU0FBUyxJQUFJO0FBQ3ZGLHlCQUFTLElBQUksY0FBYyxDQUFDO0FBQzVCLHVCQUFPO0FBQUEsY0FDVDtBQUNBLGtCQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsVUFBVSxNQUFNLE9BQU8sRUFBRSxTQUFTLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVyxHQUFHO0FBQ3pGLG9CQUFJLGVBQWU7QUFDbkIsdUJBQU87QUFBQSxjQUNUO0FBQ0Esb0JBQU0sV0FBVyxRQUFRLEtBQUs7QUFDOUIsa0JBQUksRUFBRSxRQUFRLFNBQVMsWUFBWSxFQUFFLFVBQVUsT0FBTyxRQUFRLElBQUksS0FBSyxFQUFFLFNBQVMsR0FBRztBQUNuRixzQkFBTSxJQUFJLFFBQVEsSUFBSTtBQUN0QiwyQkFBVyxDQUFDO0FBQ1oseUJBQVMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxFQUFFLElBQUk7QUFDM0MsdUJBQU87QUFBQSxjQUNUO0FBQ0Esa0JBQUksRUFBRSxRQUFRLFVBQVUsVUFBVTtBQUNoQyxzQkFBTSxJQUFJLFFBQVEsSUFBSTtBQUN0QiwyQkFBVyxDQUFDO0FBQ1oseUJBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxFQUFFLElBQUk7QUFDeEQsdUJBQU87QUFBQSxjQUNUO0FBQ0EscUJBQU87QUFBQSxZQUNUO0FBQUEsWUFDQSxlQUFhO0FBQUEsWUFDYix5QkFBdUI7QUFBQSxZQUN2QixlQUFlO0FBQUEsWUFDZixXQUFXO0FBQUEsWUFDWCxRQUFRLEVBQUUsT0FBTyxNQUFNLElBQUksT0FBTyxHQUFHLE9BQU8sUUFBUTtBQUFBO0FBQUEsUUFDdEQ7QUFBQSxTQUNGO0FBQUEsTUFFQyx1QkFDQyxnQkFBQW5CLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFFBQVEsR0FBRyxZQUFZLEVBQUUsR0FDM0Q7QUFBQSx3QkFBQUQ7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLE1BQUs7QUFBQSxZQUNMLFlBQVc7QUFBQSxZQUNYLFFBQVEsZ0JBQWdCLE1BQU07QUFBQSxZQUM5QixTQUFTLENBQUMsWUFBWTtBQUNwQixrQkFBSSxRQUFTLHdCQUF1Qix3QkFBd0I7QUFBQSx1QkFDbkQsb0JBQW9CLE1BQU0seUJBQTBCLHdCQUF1QixFQUFFO0FBQUEsWUFDeEY7QUFBQSxZQUNBLFNBQVMsTUFBTSxnQkFBZ0IsTUFBTSxjQUNqQyxLQUFLLEtBQUssZUFBZSxLQUFLLElBQzlCLEtBQUssZUFBZSxNQUFNLEVBQUUsT0FBTyxNQUFNLEdBQUcsUUFBUSxZQUFZLEVBQUUsQ0FBQztBQUFBO0FBQUEsUUFDekU7QUFBQSxRQUNBLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0MsTUFBSztBQUFBLFlBQ0wsWUFBVztBQUFBLFlBQ1gsUUFBUSxjQUFjLE1BQU07QUFBQSxZQUM1QixTQUFTLENBQUMsWUFBWTtBQUNwQixrQkFBSSxRQUFTLHdCQUF1Qix3QkFBd0I7QUFBQSx1QkFDbkQsb0JBQW9CLE1BQU0seUJBQTBCLHdCQUF1QixFQUFFO0FBQUEsWUFDeEY7QUFBQSxZQUNBLFNBQVMsTUFBTSxLQUFLLEtBQUssYUFBYTtBQUFBO0FBQUEsUUFDeEM7QUFBQSxRQUNDLGdCQUFnQixNQUFNLFVBQVUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsVUFBVSxXQUFXLEdBQUksNkJBQW1CLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEdBQUU7QUFBQSxRQUNuSixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSwwQkFBZ0IsTUFBTSxjQUFjLDhCQUE4QixjQUFjLE1BQU0sY0FBYyxnQkFBZ0Isb0JBQW9CLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLElBQUc7QUFBQSxTQUMvTTtBQUFBLE1BR0QsZ0JBQ0MsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUN2RiwwQkFBZ0IsV0FBVyxJQUMxQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxrQ0FBb0IsSUFFbkQsZ0JBQUFBO0FBQUEsUUFBQ3FCO0FBQUEsUUFBQTtBQUFBLFVBQ0MsU0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsVUFBVSxTQUFTO0FBQUEsVUFDbkIsVUFBVTtBQUFBLFVBQ1YsVUFBVSxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBQUEsVUFDN0IsU0FBUyxnQkFBZ0IsZ0JBQWdCLE1BQU07QUFBQSxVQUMvQyxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFDdkIsZ0JBQUFwQixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsWUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxNQUFNLEdBQUksY0FBSSxFQUFFLElBQUksR0FBRyxPQUFPLGdCQUFnQixPQUFPLENBQUMsR0FBRyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRTtBQUFBLFlBQzlJLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBSSxZQUFFLE1BQUs7QUFBQSxhQUN2RDtBQUFBO0FBQUEsTUFFSixHQUVKO0FBQUEsTUFHRCxhQUFhLGFBQWEsU0FBUyxLQUNsQyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxHQUFHLFdBQVcsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQ3hGLDBCQUFBQTtBQUFBLFFBQUNxQjtBQUFBLFFBQUE7QUFBQSxVQUNDLFNBQU87QUFBQSxVQUNQLE9BQU87QUFBQSxVQUNQLFVBQVUsVUFBVTtBQUFBLFVBQ3BCLFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxVQUNWLFVBQVUsTUFBTSxrQkFBa0IsSUFBSTtBQUFBLFVBQ3RDLFNBQVMsYUFBYSxnQkFBZ0IsTUFBTTtBQUFBLFVBQzVDLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixnQkFBQXBCLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsNEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxZQUN4RCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLFFBQVEsR0FBSSxhQUFFO0FBQUEsYUFDMUQ7QUFBQTtBQUFBLE1BRUosR0FDRjtBQUFBLE1BR0Qsa0JBQ0MsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUN4RiwwQkFBQUE7QUFBQSxRQUFDcUI7QUFBQSxRQUFBO0FBQUEsVUFDQyxTQUFPO0FBQUEsVUFDUCxPQUFPLFFBQVE7QUFBQSxVQUNmLFVBQVUsVUFBVTtBQUFBLFVBQ3BCLFVBQVU7QUFBQSxVQUNWLFVBQVUsQ0FBQyxjQUFjLGlCQUFpQixNQUFNLEdBQUcsU0FBUyxTQUFTO0FBQUEsVUFDckUsVUFBVTtBQUFBLFVBQ1YsU0FBUyxrQkFBa0IsZ0JBQWdCLE1BQU07QUFBQSxVQUNqRCxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sTUFDL0IsZ0JBQUFwQixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsWUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxRQUFRLEdBQUkscUJBQVU7QUFBQSxhQUNsRTtBQUFBO0FBQUEsTUFFSixHQUNGO0FBQUEsT0FFRjtBQUFBLElBRUEsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLE9BQU8sYUFBYSxLQUFLLFFBQVcsUUFBUSxhQUFhLFNBQVMsT0FBVSxHQUNsSDtBQUFBLHFCQUFlLEtBQ2QsZ0JBQUFEO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxRQUFRUyxRQUFPO0FBQUEsVUFDZixTQUFTLE1BQU0sRUFBRTtBQUFBLFVBQ2pCLGFBQWFHLGNBQWEsRUFBRTtBQUFBLFVBQzVCLFNBQVMsZUFBZTtBQUFBLFVBQ3hCLFFBQVEsQ0FBQyxNQUFNO0FBQ2IsZ0JBQUksSUFBSSxZQUFZLENBQUMsRUFBRyxtQkFBa0IsS0FBSztBQUFBLFVBQ2pEO0FBQUEsVUFDQSxlQUFlLENBQUMsTUFBTTtBQUNwQixnQkFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLEVBQUcsbUJBQWtCLEtBQUs7QUFBQSxVQUN0RTtBQUFBLFVBQ0EsU0FBUyxNQUFNLGtCQUFrQixLQUFLO0FBQUE7QUFBQSxNQUN4QztBQUFBLE1BR0QsdUJBQXVCLEtBQ3RCLGdCQUFBWjtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsUUFBUVMsUUFBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxLQUFLO0FBQUEsVUFDcEQsU0FBUyx1QkFBdUIsSUFBSUYsTUFBSyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sSUFBSSxvQkFBb0IsSUFBSUEsTUFBSyxhQUFhLDJCQUEyQixJQUFJQSxNQUFLLG9CQUFvQkEsTUFBSztBQUFBLFVBQ3RMLGFBQWE7QUFBQSxVQUNiLE9BQU8sdUJBQXVCLElBQUksc0JBQXNCLHVCQUF1QixNQUFNLGlCQUFpQixNQUFNLEdBQUcsV0FBVyxvQkFBb0IsSUFBSSx1QkFBdUIsMkJBQTJCLElBQUksMkJBQTJCO0FBQUEsVUFDbk8sTUFBSztBQUFBLFVBQ0wsU0FBUyx1QkFBdUI7QUFBQSxVQUNoQyxRQUFRLENBQUMsTUFBTTtBQUNiLGdCQUFJLHVCQUF1QixHQUFHO0FBQzVCLG9CQUFNLFNBQVMsdUJBQXVCLE1BQU0saUJBQWlCLHlCQUF5QjtBQUN0RixrQkFBSSxNQUFNLEVBQUUsRUFBRSxJQUFJO0FBQUEsWUFDcEIsV0FBVyxvQkFBb0IsR0FBRztBQUNoQyxrQkFBSSxjQUFjLEVBQUUsSUFBSTtBQUN4QixvQkFBTSxVQUFVLEVBQUUsSUFBSSxFQUFFO0FBQUEsWUFDMUIsV0FBVywyQkFBMkIsR0FBRztBQUN2QyxjQUFBQSxNQUFLLG9CQUFvQixFQUFFO0FBQzNCLDBCQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLGNBQUMsQ0FBQztBQUNoRSxvQkFBTSxpQkFBaUIsRUFBRSxJQUFJLEVBQUU7QUFBQSxZQUNqQyxPQUFPO0FBQ0wsY0FBQUEsTUFBSyxnQkFBZ0IsRUFBRTtBQUN2QiwwQkFBWSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLGNBQUMsQ0FBQztBQUNsRSxvQkFBTSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7QUFBQSxZQUNyQztBQUNBLHNDQUEwQixJQUFJO0FBQzlCLG1DQUF1QixLQUFLO0FBQzVCLDBDQUE4QixLQUFLO0FBQ25DLHNDQUEwQixLQUFLO0FBQy9CLGtCQUFNZSxXQUFVLGdCQUFnQjtBQUNoQyxrQkFBTSxrQkFBa0Isb0JBQW9CO0FBQzVDLGtCQUFNLFdBQVcsb0JBQW9CO0FBQ3JDLCtCQUFtQixJQUFJO0FBQ3ZCLG1DQUF1QixJQUFJO0FBQzNCLG1DQUF1QixJQUFJO0FBQzNCLGdCQUFJQSxTQUFTLFlBQVcsRUFBRSxNQUFNLFdBQVcsR0FBR0EsU0FBUSxJQUFJO0FBQUEscUJBQ2pELGdCQUFpQixZQUFXLEVBQUUsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLFFBQVE7QUFBQSxxQkFDNUUsYUFBYSxTQUFVLG9CQUFtQixJQUFJO0FBQUEsVUFDekQ7QUFBQSxVQUNBLGVBQWUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUN0QixTQUFTLE1BQU07QUFDYixzQ0FBMEIsS0FBSztBQUMvQixzQ0FBMEIsSUFBSTtBQUM5QixtQ0FBdUIsS0FBSztBQUM1QiwwQ0FBOEIsS0FBSztBQUNuQywrQkFBbUIsSUFBSTtBQUN2QixtQ0FBdUIsSUFBSTtBQUMzQixnQkFBSSxvQkFBb0IsTUFBTSxTQUFVLG9CQUFtQixJQUFJO0FBQy9ELG1DQUF1QixJQUFJO0FBQUEsVUFDN0I7QUFBQTtBQUFBLE1BQ0Y7QUFBQSxNQUdELGdCQUFnQixLQUNmLGdCQUFBdEI7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLFFBQVE7QUFBQSxVQUNSLFNBQVMsT0FBTyxLQUFLO0FBQUEsVUFDckIsY0FBYyxjQUFjLEtBQUs7QUFBQSxVQUNqQyxTQUFTLGdCQUFnQjtBQUFBLFVBQ3pCLFFBQVEsQ0FBQyxNQUFNO0FBQ2IsNkJBQWlCLEVBQUUsR0FBRztBQUN0QiwrQkFBbUIsS0FBSztBQUFBLFVBQzFCO0FBQUEsVUFDQSxlQUFlLENBQUMsTUFBTTtBQUNwQiw2QkFBaUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDM0MsK0JBQW1CLEtBQUs7QUFBQSxVQUMxQjtBQUFBLFVBQ0EsU0FBUyxNQUFNLG1CQUFtQixLQUFLO0FBQUE7QUFBQSxNQUN6QztBQUFBLE1BR0QsZUFBZSxLQUNkLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsUUFBUSxXQUFXO0FBQUEsVUFDbkIsTUFBTSxVQUFVO0FBQUEsVUFDaEIsU0FBUyxlQUFlO0FBQUEsVUFDeEIsUUFBUSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsS0FBSztBQUN2QiwyQkFBZSxFQUFFLEdBQUc7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsV0FBVyxDQUFDLE1BQU0sZUFBZSxFQUFFLEdBQUc7QUFBQSxVQUN0QyxTQUFTLE1BQU07QUFDYiw4QkFBa0IsS0FBSztBQUN2QiwyQkFBZSxVQUFVLENBQUM7QUFBQSxVQUM1QjtBQUFBO0FBQUEsTUFDRjtBQUFBLE1BR0Qsa0JBQWtCLEtBQ2pCLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsT0FBTTtBQUFBLFVBQ04sU0FBUTtBQUFBLFVBQ1IsY0FBYTtBQUFBLFVBQ2IsU0FBUyxrQkFBa0I7QUFBQSxVQUMzQixXQUFXO0FBQUEsVUFDWCxTQUFTLE1BQU0scUJBQXFCLEtBQUs7QUFBQTtBQUFBLE1BQzNDO0FBQUEsTUFHRCxpQkFBaUIsS0FDaEIsZ0JBQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxTQUFTLFlBQVk7QUFBQSxVQUNyQixRQUFRO0FBQUEsVUFDUixZQUFZLFVBQVU7QUFBQSxVQUN0QixTQUFTLGlCQUFpQjtBQUFBLFVBQzFCLFFBQVEsQ0FBQyxTQUFTO0FBQUUscUJBQVMsSUFBSTtBQUFHLGdDQUFvQixLQUFLO0FBQUEsVUFBRTtBQUFBLFVBQy9ELFNBQVMsTUFBTSxvQkFBb0IsS0FBSztBQUFBO0FBQUEsTUFDMUM7QUFBQSxNQUdELFVBQVUsS0FDVCxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLE9BQU8sVUFBVSxFQUFFO0FBQUEsVUFDbkIsTUFBTSxVQUFVLEVBQUU7QUFBQSxVQUNsQixVQUFVLFVBQVUsRUFBRTtBQUFBLFVBQ3RCLFNBQVMsVUFBVSxNQUFNO0FBQUEsVUFDekIsU0FBUyxNQUFNLGFBQWEsSUFBSTtBQUFBO0FBQUEsTUFDbEM7QUFBQSxNQUdELGlCQUFpQixLQUNoQixnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLFdBQVcsY0FBYztBQUFBLFVBQ3pCLFNBQVMsaUJBQWlCO0FBQUEsVUFDMUIsV0FBVztBQUFBLFVBQ1gsY0FBYztBQUFBLFVBQ2QsU0FBUyxNQUFNLG9CQUFvQixLQUFLO0FBQUE7QUFBQSxNQUMxQztBQUFBLE1BR0QsaUJBQWlCLEtBQ2hCLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsVUFBVSxjQUFjLEdBQUdPLE1BQUssUUFBUSxLQUFLO0FBQUEsVUFDN0MsU0FBUyxpQkFBaUI7QUFBQSxVQUMxQixVQUFVLENBQUMsTUFBTTtBQUNmLGtCQUFNLFFBQVEsS0FBSztBQUNuQixnQkFBSSxDQUFDLFNBQVMsTUFBTSxPQUFPLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUMvRCxtQkFBSyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2xELHFCQUFPLE1BQU0sMkJBQTJCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQUEsWUFDeEY7QUFDQSxpQkFBSyxrQkFBa0I7QUFDdkIsZ0JBQUksYUFBYSxDQUFDO0FBQUEsVUFDcEI7QUFBQSxVQUNBLFNBQVMsTUFBTSxvQkFBb0IsS0FBSztBQUFBO0FBQUEsTUFDMUM7QUFBQSxNQUdELFdBQVcsTUFBTSxVQUNoQixnQkFBQVA7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLFFBQVE7QUFBQSxVQUN0QyxPQUFPLENBQUMsVUFBVSxZQUFZLFFBQVEsR0FBRyxLQUFLO0FBQUEsVUFDOUMsU0FBUyxXQUFXLE1BQU07QUFBQSxVQUMxQixRQUFRLENBQUMsVUFBVTtBQUFFLDRCQUFnQixLQUFLO0FBQUcsMEJBQWMsUUFBUTtBQUFBLFVBQUU7QUFBQSxVQUNyRSxTQUFTLE1BQU0sY0FBYyxJQUFJO0FBQUE7QUFBQSxNQUNuQztBQUFBLE1BR0QsV0FBVyxNQUFNLFlBQVksYUFBYSxLQUN6QyxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLFFBQVEsYUFBYTtBQUFBLFVBQ3JCLFNBQVM7QUFBQSxVQUNULFNBQVMsV0FBVyxNQUFNO0FBQUEsVUFDMUIsVUFBVTtBQUFBLFVBQ1YsUUFBUSxNQUFNLGNBQWMsTUFBTTtBQUFBO0FBQUEsTUFDcEM7QUFBQSxNQUdELG9CQUNDLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQy9ELDBCQUFBQyxNQUFDLGlCQUFjLFVBQVUsQ0FBQyxlQUFlLENBQUMsYUFBYSxTQUFTLEdBQUcsUUFBUSxNQUFNLGlCQUFpQixTQUFTLE1BQU07QUFBRSxXQUFHLE1BQU0sZUFBZTtBQUFHLHlCQUFpQixJQUFJO0FBQUcseUJBQWlCLElBQUk7QUFBRyxrQkFBVSxJQUFJO0FBQUcsc0JBQWMsY0FBYztBQUFBLE1BQUUsR0FDM087QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsUUFBUSxNQUFNLGtCQUFrQixVQUFVLE9BQU8sRUFBRSxHQUFJLHFCQUFLO0FBQUEsUUFDckYsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLFFBQVEsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEtBQUssTUFBTSxHQUFJLGtCQUFPO0FBQUEsU0FDMUgsR0FDRjtBQUFBLE1BR0QsY0FBYyxTQUFTLEtBQ3RCLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxvQkFBb0Isc0JBQXNCLElBQUksRUFBRSxHQUM3RztBQUFBLHdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxnQkFBZ0IsV0FBVyxHQUM3RCwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHLGtCQUFrQixHQUFHLGVBQWUsT0FBTyxFQUFFLFlBQVcsR0FDN0Y7QUFBQSxRQUNDLENBQUMsb0JBQ0EsZ0JBQUFDLE1BQUMsaUJBQWMsVUFBVSxDQUFDLGFBQWEsU0FBUyxHQUFHLFFBQVEsTUFBTSxjQUFjLFNBQVMsTUFBTTtBQUFFLGFBQUcsTUFBTSxZQUFZO0FBQUcsMkJBQWlCLElBQUk7QUFBRywyQkFBaUIsSUFBSTtBQUFHLG9CQUFVLElBQUk7QUFBQSxRQUFFLEdBQ3RMO0FBQUEsMEJBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLFFBQVEsTUFBTSxlQUFlLFVBQVUsT0FBTyxFQUFFLEdBQUkscUJBQUs7QUFBQSxVQUNsRixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsUUFBUSxNQUFNLGVBQWUsVUFBVSxDQUFDLGNBQWMsS0FBSyxNQUFNLEdBQUksa0JBQU87QUFBQSxXQUN2RztBQUFBLFFBRUQsWUFBWSxJQUFJLENBQUMsTUFBTTtBQUN0QixnQkFBTSxVQUFVLEdBQUcsUUFBUSxNQUFNLFNBQVMsRUFBRSxFQUFFO0FBQzlDLGdCQUFNLFdBQVcsY0FBYyxNQUFNLEVBQUU7QUFDdkMsZ0JBQU1hLFdBQVUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLFNBQVMsRUFBRSxRQUFRLENBQUM7QUFDM0UsaUJBQ0UsZ0JBQUFaLE1BQUMsaUJBQW9DLFVBQW9CLFNBQWtCLFNBQVMsTUFBTTtBQUFFLGVBQUcsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFO0FBQUcsNkJBQWlCLEVBQUUsRUFBRTtBQUFHLDZCQUFpQixJQUFJO0FBQUcsc0JBQVUsSUFBSTtBQUFBLFVBQUUsR0FDcEw7QUFBQSxjQUFFLFdBQVcsWUFBWSxnQkFBQUQsS0FBQ3VCLFVBQUEsRUFBUSxPQUFPLFVBQVUsVUFBVSxPQUFPLEdBQUcsU0FBUSxRQUFPLElBQUssZ0JBQUF2QixLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sVUFBVSxVQUFVLEVBQUUsYUFBYSxJQUFJLFFBQVEsSUFBSSxHQUFJLFlBQUUsYUFBYSxJQUFJLFdBQU0sUUFBSTtBQUFBLFlBQ3RNLGdCQUFBQSxLQUFDLFVBQU0sZUFBSTtBQUFBLFlBQ1gsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsV0FBVyxLQUFLLE1BQU0sR0FBSSxvQkFBVSxFQUFFLEVBQUUsT0FBTTtBQUFBLFlBQ3hGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxZQUFFLGVBQWUsRUFBRSxRQUFRLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDM0g7QUFBQSxZQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxlQUFLLEVBQUUsV0FBVyxZQUFZLEtBQUssUUFBUSxFQUFFLFFBQVEsSUFBSSxHQUFHYSxRQUFPLElBQUc7QUFBQSxlQVB4RyxTQUFTLEVBQUUsRUFBRSxFQVFqQztBQUFBLFFBRUosQ0FBQztBQUFBLFFBQ0EsY0FBYyxTQUFTLG1CQUN0QixnQkFBQWIsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLG1CQUFtQixJQUFJLFVBQUssZ0JBQWdCLEtBQUssRUFBRSxHQUFHLG1CQUFtQixLQUFLLG1CQUFtQixZQUFZLFNBQVMsY0FBYyxTQUFTLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixZQUFZLFNBQVMsY0FBYyxTQUFTLFVBQUssY0FBYyxTQUFTLG1CQUFtQixZQUFZLE1BQU0sS0FBSyxFQUFFLFNBQVE7QUFBQSxTQUVqVjtBQUFBLE1BR0QsY0FBYyxTQUFTLEtBQ3RCLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxvQkFBb0Isc0JBQXNCLElBQUksRUFBRSxHQUM3RztBQUFBLHdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxnQkFBZ0IsV0FBVyxHQUM3RCwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHLGtCQUFrQixHQUFHLGVBQWUsT0FBTyxFQUFFLFlBQVcsR0FDN0Y7QUFBQSxRQUNDLENBQUMsb0JBQ0EsZ0JBQUFDLE1BQUMsaUJBQWMsVUFBVSxDQUFDLGFBQWEsU0FBUyxHQUFHLFFBQVEsTUFBTSxjQUFjLFNBQVMsTUFBTTtBQUFFLGFBQUcsTUFBTSxZQUFZO0FBQUcsMkJBQWlCLElBQUk7QUFBRywyQkFBaUIsSUFBSTtBQUFHLG9CQUFVLElBQUk7QUFBRyx3QkFBYyxjQUFjO0FBQUEsUUFBRSxHQUNyTjtBQUFBLDBCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxRQUFRLE1BQU0sZUFBZSxVQUFVLE9BQU8sRUFBRSxHQUFJLHFCQUFLO0FBQUEsVUFDbEYsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLFFBQVEsTUFBTSxlQUFlLFVBQVUsQ0FBQyxjQUFjLEtBQUssTUFBTSxHQUFJLGtCQUFPO0FBQUEsV0FDdkc7QUFBQSxRQUVELFlBQVksSUFBSSxDQUFDLE1BQU07QUFDdEIsZ0JBQU0sU0FBUyxZQUFZLENBQUM7QUFDNUIsZ0JBQU0sVUFBVSxHQUFHLFFBQVEsTUFBTSxTQUFTLEVBQUUsRUFBRTtBQUM5QyxpQkFDRSxnQkFBQUMsTUFBQyxpQkFBb0MsVUFBVSxjQUFjLE1BQU0sRUFBRSxJQUFJLFNBQWtCLFNBQVMsTUFBTTtBQUFFLGVBQUcsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFO0FBQUcsNkJBQWlCLElBQUk7QUFBRyw2QkFBaUIsRUFBRSxFQUFFO0FBQUcsc0JBQVUsSUFBSTtBQUFHLDBCQUFjLGNBQWM7QUFBQSxVQUFFLEdBQ25PO0FBQUEsY0FBRSxXQUFXLFlBQVksZ0JBQUFELEtBQUN1QixVQUFBLEVBQVEsT0FBTyxVQUFVLFVBQVUsT0FBTyxHQUFHLFNBQVEsUUFBTyxJQUFLLGdCQUFBdkIsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxPQUFPLE1BQU0sR0FBSSxpQkFBTyxNQUFLO0FBQUEsWUFDbkssZ0JBQUFBLEtBQUMsVUFBTSxlQUFJO0FBQUEsWUFDWCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxjQUFjLE1BQU0sRUFBRSxLQUFLLEtBQUssTUFBTSxHQUFJLGFBQUcsRUFBRSxRQUFRLE9BQU8sS0FBSyxFQUFFLEVBQUUsT0FBTTtBQUFBLFlBQ3ZILGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxZQUFFLGFBQVksR0FDMUY7QUFBQSxZQUNDLE9BQU8sU0FBUyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxPQUFPLE1BQU0sR0FBSSxlQUFLLE9BQU8sS0FBSyxJQUFHO0FBQUEsWUFDaEcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxHQUFJLGFBQUcsT0FBTyxRQUFRLE9BQU8sSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLGFBQU87QUFBQSxZQUMzRyxnQkFBQUEsS0FBQyxpQkFBYyxPQUFPLEVBQUUsT0FBTyxlQUFlLEVBQUUsT0FBTyxnQkFBZ0IsR0FBRyxPQUFPLFVBQVUsVUFBVSxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHd0IsZUFBYyxDQUFDLENBQUMsV0FBVztBQUFBLGVBVGhMLFNBQVMsRUFBRSxFQUFFLEVBVWpDO0FBQUEsUUFFSixDQUFDO0FBQUEsUUFDQSxjQUFjLFNBQVMsbUJBQ3RCLGdCQUFBeEIsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLG1CQUFtQixJQUFJLFVBQUssZ0JBQWdCLEtBQUssRUFBRSxHQUFHLG1CQUFtQixLQUFLLG1CQUFtQixZQUFZLFNBQVMsY0FBYyxTQUFTLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixZQUFZLFNBQVMsY0FBYyxTQUFTLFVBQUssY0FBYyxTQUFTLG1CQUFtQixZQUFZLE1BQU0sS0FBSyxFQUFFLFNBQVE7QUFBQSxTQUVqVjtBQUFBLE1BR0QsY0FBYyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BRTNDLGFBQ0MsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxZQUFZLEVBQUUsR0FDL0Q7QUFBQSxhQUFLLEtBQ0osZ0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGNBQWMsRUFBRSxHQUNyRDtBQUFBLDBCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBRCxLQUFDLFdBQVEsT0FBTyxPQUFPLEdBQUcsV0FBVyxXQUFXLFVBQVUsTUFBTSxTQUFPLE1BQ3BFLHFCQUFXLElBQ1IsY0FBYyxHQUFHLFVBQVUsWUFBWSx1QkFBdUIsY0FBYyxFQUFFLE9BQU8sT0FBTywwQkFDNUYsVUFBVSxNQUFNLGFBQWEsYUFBYSxVQUFVLE1BQU0sVUFBVSxZQUFZLGNBQ3RGO0FBQUEsWUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLE9BQU8sc0JBQXFCO0FBQUEsYUFDbkU7QUFBQSxVQUNDLGNBQWMsR0FBRyxVQUFVLGFBQWEsZ0JBQUFBLEtBQUMsZUFBWSxTQUFRLFFBQU8sT0FBTyxjQUFjLEVBQUUsVUFBVSxHQUFHLE9BQU8sSUFBSSxZQUFZLE9BQU8sT0FBTyxPQUFPLEdBQUc7QUFBQSxXQUMxSjtBQUFBLFFBRUQsU0FBUyxVQUNSLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxjQUFjLEVBQUUsR0FDckQ7QUFBQSwwQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsTUFBTSxLQUFLLEdBQUksd0JBQWE7QUFBQSxVQUMzRCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw0QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxzQkFBVztBQUFBLFlBQzNDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxVQUFVLFdBQVcsR0FBSSxrQkFBUSxRQUFPO0FBQUEsYUFDekU7QUFBQSxVQUNBLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHNCQUFXO0FBQUEsWUFDMUMsUUFBUSxRQUFRLEtBQUssZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRyxRQUFRLEtBQUssVUFBUztBQUFBLFlBQzlFLFFBQVEsUUFBUSxLQUFLLFFBQVEsVUFBVSxLQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFLO0FBQUEsWUFDakYsUUFBUSxVQUFVLEtBQUssZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLEdBQUksYUFBRyxRQUFRLE9BQU8sWUFBVztBQUFBLFlBQ2xGLFFBQVEsVUFBVSxLQUFLLFFBQVEsWUFBWSxLQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG1CQUFRO0FBQUEsYUFDM0Y7QUFBQSxXQUNGO0FBQUEsUUFFRixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSwwQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsTUFBTSxLQUFLLEdBQUkscUJBQVU7QUFBQSxVQUN4RCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLFVBQVUsV0FBVyxHQUFJLFVBQUFPLE1BQUssWUFBVztBQUFBLGFBQU87QUFBQSxVQUM5SyxnQkFBQU4sTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxnQkFBTSxFQUFFLE1BQUs7QUFBQSxhQUFPO0FBQUEsVUFDckosY0FBYyxLQUFLLE9BQU8sS0FBSyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksaUJBQU8sR0FBRTtBQUFBLGFBQU87QUFBQSxVQUNqTCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksZUFBSyxNQUFNLE1BQU0sWUFBWSxFQUFFLGVBQWUsR0FBRTtBQUFBLGFBQU87QUFBQSxVQUN4TCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksZUFBSyxNQUFNLE1BQU0sZ0JBQWdCLEVBQUUsZUFBZSxHQUFFO0FBQUEsYUFBTztBQUFBLFVBQzNMLE1BQU0sZ0JBQWdCLEtBQUssZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQUc7QUFBQSw0QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSw2QkFBa0I7QUFBQSxZQUFPLGdCQUFBQSxLQUFDLGlCQUFjLE9BQU8sTUFBTSxlQUFlLE9BQU8sU0FBUyxXQUFXLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxFQUFFLGVBQWUsR0FBRztBQUFBLGFBQUU7QUFBQSxVQUMzUCxpQkFBaUIsS0FBSyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDRCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLFlBQU8sZ0JBQUFBLEtBQUMsaUJBQWMsT0FBTyxnQkFBZ0IsT0FBTyxrQkFBa0IsS0FBSyxNQUFNLFNBQVMsV0FBVyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUs7QUFBQSxhQUFFO0FBQUEsVUFDblEsaUJBQWlCLEtBQUssZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQUc7QUFBQSw0QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSw2QkFBa0I7QUFBQSxZQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxHQUFJLDBCQUFlO0FBQUEsYUFBTztBQUFBLFdBQ2hMO0FBQUEsU0FDRixJQUVBLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLHdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQUEsUUFDM0IsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFVBQVUsR0FBRyxLQUFLLEVBQUUsR0FDdEQ7QUFBQSwwQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBTSxFQUFFLE1BQUs7QUFBQSxVQUM1QyxjQUFjLEtBQUssT0FBTyxLQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGlCQUFPLEdBQUU7QUFBQSxVQUN6RSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFVBQzVCLGlCQUFpQixLQUFLLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG9CQUFLLGNBQWMsSUFBRztBQUFBLFVBQzdFLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUd3QixlQUFjLE1BQU0sWUFBWSxDQUFDLFdBQUs7QUFBQSxVQUN6RSxnQkFBQXhCLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBR3dCLGVBQWMsTUFBTSxnQkFBZ0IsQ0FBQyxXQUFLO0FBQUEsVUFDNUUsTUFBTSxnQkFBZ0IsS0FBSyxnQkFBQXhCLEtBQUMsaUJBQWMsT0FBTyxNQUFNLGVBQWUsT0FBTyxPQUFPLFdBQVcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUd3QixlQUFjLENBQUMsQ0FBQyxXQUFNO0FBQUEsVUFDakosaUJBQWlCLEtBQUssZ0JBQUF4QixLQUFDLGlCQUFjLE9BQU8sZ0JBQWdCLE9BQU8sa0JBQWtCLEtBQUssTUFBTSxPQUFPLFdBQVcsT0FBTyxHQUFHLFlBQVksVUFBVSxRQUFRLFlBQVk7QUFBQSxXQUN6SztBQUFBLFNBQ0Y7QUFBQSxPQUVGO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxpQkFBYyxPQUFPLEtBQUssZ0JBQWdCO0FBQUEsS0FDN0M7QUFFSjs7O0FGcnJFd0IsZ0JBQUF5QixhQUFBO0FBM0l4QixJQUFNLE1BQU0sS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLG1CQUFtQixZQUFZLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFFekYsSUFBSTtBQUNKLElBQUk7QUFDRixRQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVMsS0FBSztBQUNaLFVBQVEsTUFBTSxTQUFTLElBQUksT0FBTyxFQUFFO0FBQ3BDLFVBQVEsTUFBTSxLQUFLO0FBQ25CLFVBQVEsS0FBSyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLFNBQVMsUUFBUTtBQUN2QixVQUFRLElBQUksS0FBSztBQUNqQixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFdBQVc7QUFDMUIsVUFBUSxJQUFJLElBQUksT0FBTztBQUN2QixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFVBQVU7QUFDekIsUUFBTSxFQUFFLGNBQUFDLGVBQWMsV0FBQUMsWUFBVyxvQkFBQUMscUJBQW9CLGNBQUFDLGNBQWEsSUFBSSxNQUFNLE9BQU8seUJBQXlCO0FBQzVHLE1BQUlILGNBQWEsWUFBWSxHQUFHLEdBQUc7QUFDakMsWUFBUSxNQUFNLG9FQUFvRTtBQUNsRixZQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBQ0EsUUFBTSxTQUFTLE1BQU1FLG9CQUFtQixFQUFFLE1BQU0sTUFBTSxJQUFJO0FBQzFELE1BQUksVUFBVSxDQUFDQyxjQUFhLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDaEQsWUFBUSxJQUFJLFNBQVMsSUFBSSxPQUFPLHdCQUF3QjtBQUN4RCxZQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBQ0EsVUFBUSxNQUFNLHFCQUFxQixTQUFTLE9BQU8sTUFBTSxNQUFNLEVBQUUsWUFBWTtBQUM3RSxRQUFNLFNBQVMsTUFBTUYsV0FBVTtBQUMvQixNQUFJLE9BQU8sSUFBSTtBQUNiLFlBQVEsSUFBSSxVQUFVLFNBQVMsUUFBUSxNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ3RELFlBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFDQSxVQUFRLE1BQU07QUFBQSxFQUFtQixPQUFPLE1BQU0sRUFBRTtBQUNoRCxVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFdBQVc7QUFDMUIsUUFBTSxFQUFFLGNBQWMsSUFBSSxNQUFNLE9BQU8sOEJBQThCO0FBQ3JFLE1BQUk7QUFDRixZQUFRLE1BQU0sNkNBQTZDO0FBQzNELFVBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVEsUUFBUSxNQUFNO0FBQUEsRUFBd0MsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN0SCxZQUFRLElBQUksZ0JBQWdCLFNBQVMsc0JBQXNCLEVBQUU7QUFDN0QsWUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQixTQUFTLEtBQUs7QUFDWixZQUFRLE1BQU0sbUJBQW1CLElBQUksT0FBTyxFQUFFO0FBQzlDLFlBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFDRjtBQUNBLElBQUksSUFBSSxTQUFTLFlBQVk7QUFDM0IsUUFBTSxFQUFFLGFBQUFHLGFBQVksSUFBSSxNQUFNO0FBQzlCLFVBQVEsS0FBSyxNQUFNQSxhQUFZLEdBQUcsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxTQUFTLFNBQVM7QUFDeEIsUUFBTSxFQUFFLFVBQUFDLFVBQVMsSUFBSSxNQUFNO0FBQzNCLFVBQVEsS0FBSyxNQUFNQSxVQUFTLEdBQUcsQ0FBQztBQUNsQztBQUVBLElBQU0sRUFBRSxXQUFXLFFBQVEsV0FBVyxJQUFJLE1BQU0saUJBQWlCO0FBRWpFLElBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsVUFBUSxNQUFNLDZCQUE2QjtBQUMzQyxVQUFRLE1BQU0sZ0dBQWdHO0FBQzlHLFVBQVEsTUFBTSxnREFBZ0Q7QUFDOUQsVUFBUSxLQUFLLENBQUM7QUFDaEI7QUFFQSxJQUFJLFlBQVksTUFBTTtBQUFDO0FBQ3ZCLElBQUksZUFBZSxNQUFNO0FBQUM7QUFDMUIsSUFBSSxhQUFhLE1BQU07QUFBQztBQUN4QixJQUFNLFNBQVNDLG9CQUFtQjtBQUFBLEVBQ2hDLFVBQVUsTUFBTSxhQUFhO0FBQUEsRUFDN0IsUUFBUSxDQUFDLFVBQVUsV0FBVyxLQUFLO0FBQ3JDLENBQUM7QUFDRCxRQUFRLEdBQUcsUUFBUSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBRXpDLElBQUksZ0JBQWdCLE1BQU07QUFBQztBQUMzQixJQUFJLGNBQWMsTUFBTTtBQUFDO0FBQ3pCLElBQU0sVUFBVSxvQkFBb0I7QUFBQSxFQUNsQyxVQUFVLE1BQU0sY0FBYztBQUFBLEVBQzlCLFFBQVEsQ0FBQyxXQUFXLFlBQVksTUFBTTtBQUN4QyxDQUFDO0FBRUQsSUFBSSxZQUFZLE1BQU07QUFBQztBQUN2QixJQUFNLE1BQU0saUJBQWlCLEVBQUUsVUFBVSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzVELFFBQVEsR0FBRyxRQUFRLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFFdEMsSUFBTSxjQUFjLENBQUMsUUFBUUMsa0JBQWlCLEtBQUssRUFBRSxhQUFhLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFFckYsSUFBTSxTQUFTLE1BQU1DLFlBQVc7QUFDaEMsSUFBTSxvQkFBb0IsT0FBTyxnQkFBZ0IsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsT0FBTyxZQUFZO0FBRWxHLElBQU0sZ0JBQWdCLE1BQU0sb0JBQW9CO0FBQ2hELElBQU0sZ0JBQWdCLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsT0FBTyxLQUFLLElBQUksT0FBTyxRQUFRO0FBQ3pGLFdBQVcsaUJBQWlCLGFBQWE7QUFDekMsSUFBTSxRQUFRLEVBQUUsUUFBUSxnQkFBZ0IsT0FBTyxNQUFNO0FBRXJELElBQU0sT0FBTztBQUFBLEVBQ1gsR0FBSSxNQUFNLFlBQVksUUFBUSxJQUFJLENBQUM7QUFBQSxFQUNuQztBQUFBLEVBQ0EsU0FBUyxJQUFJO0FBQUEsRUFDYjtBQUFBLEVBQ0E7QUFBQSxFQUNBLGNBQWMscUJBQXFCQyxjQUFhLE1BQU07QUFBQSxFQUN0RCxlQUFlLE9BQU8sUUFBUSxrQkFBa0I7QUFBQSxFQUNoRCxZQUFZLE9BQU8sUUFBUSxTQUFTO0FBQUEsRUFDcEMsbUJBQW1CLE9BQU8sUUFBUSxnQkFBZ0I7QUFBQSxFQUNsRCxtQkFBbUIsT0FBTyxRQUFRLGdCQUFnQjtBQUFBLEVBQ2xELG1CQUFtQixPQUFPLFFBQVEsZ0JBQWdCLE9BQU8sUUFBUSxrQkFBa0I7QUFBQSxFQUNuRixvQkFBb0IsT0FBTyxVQUFVLE9BQU8sVUFBVSxVQUFVLEtBQUssT0FBTyxTQUFTLGNBQWMsS0FBSyxPQUFPLFNBQVMsY0FBYyxNQUNsSSxPQUFPLFNBQVMsYUFDaEI7QUFBQSxFQUNKO0FBQUEsRUFDQSxXQUFXLGlCQUFpQjtBQUFBLEVBQzVCLGVBQWUsQ0FBQyxPQUFPLFVBQVUsUUFBUSxLQUFLLEVBQUUsU0FBUyxPQUFPLGFBQWEsSUFBSSxPQUFPLGdCQUFnQjtBQUFBLEVBQ3hHLGFBQWEsT0FBTyxnQkFBZ0I7QUFBQSxFQUNwQyxRQUFRLE9BQU8sV0FBVyxXQUFXO0FBQUEsRUFDckMsb0JBQW9CLE9BQU8sU0FBUyx1QkFBdUI7QUFBQSxFQUMzRCxXQUFXLE9BQU8sU0FBUyxjQUFjO0FBQUEsRUFDekMsYUFBYSxPQUFPLFNBQVMsZ0JBQWdCO0FBQUEsRUFDN0MsTUFBTSxDQUFDO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxjQUFjLENBQUMsT0FBTztBQUFFLGdCQUFZO0FBQUEsRUFBRztBQUFBLEVBQ3ZDLGNBQWMsQ0FBQyxPQUFPO0FBQUUsZ0JBQVk7QUFBQSxFQUFHO0FBQUEsRUFDdkMsaUJBQWlCLENBQUMsT0FBTztBQUFFLG1CQUFlO0FBQUEsRUFBRztBQUFBLEVBQzdDLGVBQWUsQ0FBQyxPQUFPO0FBQUUsaUJBQWE7QUFBQSxFQUFHO0FBQUEsRUFDekMsa0JBQWtCLENBQUMsT0FBTztBQUFFLG9CQUFnQjtBQUFBLEVBQUc7QUFBQSxFQUMvQyxnQkFBZ0IsQ0FBQyxPQUFPO0FBQUUsa0JBQWM7QUFBQSxFQUFHO0FBQUEsRUFDM0MsU0FBUztBQUFBLEVBQ1QsZUFBZSxNQUFNLFdBQVcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNqRDtBQUVBLElBQUksU0FBUyxLQUFLLElBQUk7QUFDdEIsSUFBSSxXQUFXLEtBQUssU0FBUztBQUU3QixJQUFNLGFBQWEsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0FBQzVDLElBQU0sTUFBTSxNQUFNLE1BQU0sZ0JBQUFWLE1BQUMsT0FBSSxNQUFZLFlBQXdCLEdBQUksRUFBRSxPQUFPLFNBQVMsS0FBSyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUM1SCxLQUFLLFdBQVcsSUFBSTtBQUNwQixLQUFLLElBQUksV0FBVzsiLAogICJuYW1lcyI6IFsib3BlbmFpQ3JlZGVudGlhbHMiLCAicHJvdmlkZXJzIiwgImxvYWRNb2RlbHMiLCAibW9kZWxzIiwgImpvaW4iLCAibWFrZUV2ZW50IiwgInByb3ZpZGVycyIsICJtb2RlbHMiLCAiY29uZmlnIiwgImJvb3QiLCAic2hlbGxzIiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZGVmYXVsdE1vZGVsIiwgInJlYWRDb25maWciLCAiYnVpbGRQcm9qZWN0Qm9vdCIsICJjcmVhdGVTaGVsbE1hbmFnZXIiLCAiY3JlYXRlU2lnbmFsIiwgImZ1enp5U2NvcmUiLCAiY3JlYXRlU2lnbmFsIiwgImZ1enp5U2NvcmUiLCAiaG9tZWRpciIsICJwZW5kaW5nIiwgImZhaWxlZCIsICJwZW5kaW5nIiwgImNhcHR1cmVSZWdpb24iLCAicGVuZGluZyIsICJleGVjRmlsZSIsICJta2R0ZW1wIiwgImV4aXN0c1N5bmMiLCAidG1wZGlyIiwgImpvaW4iLCAiY3JlYXRlU2lnbmFsIiwgIk1lbnUiLCAiU2Nyb2xsQm94IiwgIlNwaW5uZXIiLCAiVGV4dEFyZWEiLCAidXNlRm9jdXMiLCAidXNlSGl0VGVzdCIsICJ1c2VJbnB1dCIsICJ1c2VMYXlvdXQiLCAidXNlTW91c2UiLCAidXNlUmVzaXplIiwgImZ1enp5U2NvcmUiLCAiY3JlYXRlU2lnbmFsIiwgImNyZWF0ZVNpZ25hbCIsICJ0aGVtZSIsICJjb21wYWN0TnVtYmVyIiwgIndpZHRoIiwgImpzeCIsICJoaWdobGlnaHQiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgInVzZUFuaW1hdGVkIiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgIm1peENvbG9yIiwgInVzZUFuaW1hdGVkIiwgImVhc2UiLCAibGluZWFyIiwgImZhaWxlZCIsICJjcmVhdGVTaWduYWwiLCAidXNlSW5wdXQiLCAibGFiZWwiLCAiY3JlYXRlU2lnbmFsIiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImNyZWF0ZVNpZ25hbCIsICJCdXR0b24iLCAiZWFzZSIsICJNZW51IiwgIlNjcm9sbEJveCIsICJUZXh0SW5wdXQiLCAidXNlQW5pbWF0ZWQiLCAidXNlSW5wdXQiLCAidXNlSW50ZXJ2YWwiLCAidXNlTGF5b3V0IiwgImZ1enp5U2NvcmUiLCAicmFua0Z1enp5IiwgImpzeCIsICJqc3hzIiwgInVzZUlucHV0IiwgIkJ1dHRvbiIsICJtb2RlbHMiLCAiY3JlYXRlU2lnbmFsIiwgIk1lbnUiLCAiU2Nyb2xsQm94IiwgInVzZUFuaW1hdGVkIiwgImVhc2UiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIndha2V1cHMiLCAidXNlSW50ZXJ2YWwiLCAibmFtZSIsICJUZXh0SW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgInVzZUlucHV0IiwgInVzZUhpdFRlc3QiLCAidXNlTW91c2UiLCAiY3JlYXRlU2lnbmFsIiwgImJvb3QiLCAidmVyc2lvbiIsICJtb2RlbHMiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJlbGFwc2VkIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAiZnV6enlTY29yZSIsICJTY3JvbGxCb3giLCAiVGV4dEFyZWEiLCAiTWVudSIsICJwZW5kaW5nIiwgIlNwaW5uZXIiLCAiY29tcGFjdE51bWJlciIsICJqc3giLCAiaXNEZXZJbnN0YWxsIiwgInJ1blVwZGF0ZSIsICJmZXRjaExhdGVzdFZlcnNpb24iLCAibmV3ZXJWZXJzaW9uIiwgInJ1bkhlYWRsZXNzIiwgInJ1blNoZWxsIiwgImNyZWF0ZVNoZWxsTWFuYWdlciIsICJidWlsZFByb2plY3RCb290IiwgInJlYWRDb25maWciLCAiZGVmYXVsdE1vZGVsIl0KfQo=
|