@hanzo/browser-extension 1.9.31 → 1.9.34
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/browser-extension/background-firefox.js +1427 -0
- package/dist/browser-extension/background.js +1443 -18
- package/dist/browser-extension/chrome/background.js +1443 -18
- package/dist/browser-extension/chrome/manifest.json +17 -2
- package/dist/browser-extension/chrome/newtab.css +277 -0
- package/dist/browser-extension/chrome/newtab.html +13 -0
- package/dist/browser-extension/chrome/newtab.js +64 -0
- package/dist/browser-extension/chrome/popup.html +28 -0
- package/dist/browser-extension/chrome/popup.js +67 -1
- package/dist/browser-extension/firefox/background.js +1427 -0
- package/dist/browser-extension/firefox/manifest.json +10 -2
- package/dist/browser-extension/firefox/newtab.css +277 -0
- package/dist/browser-extension/firefox/newtab.html +13 -0
- package/dist/browser-extension/firefox/newtab.js +64 -0
- package/dist/browser-extension/firefox/popup.html +28 -0
- package/dist/browser-extension/firefox/popup.js +67 -1
- package/dist/browser-extension/manifest.json +17 -2
- package/dist/browser-extension/newtab.js +64 -0
- package/dist/browser-extension/popup.js +67 -1
- package/dist/browser-extension/safari/Info.plist +2 -2
- package/dist/browser-extension/safari/background.js +1443 -18
- package/dist/browser-extension/safari/newtab.css +277 -0
- package/dist/browser-extension/safari/newtab.html +13 -0
- package/dist/browser-extension/safari/newtab.js +64 -0
- package/dist/browser-extension/safari/popup.html +28 -0
- package/dist/browser-extension/safari/popup.js +67 -1
- package/package.json +3 -1
- package/src/answer/AnswerEngine.tsx +553 -0
- package/src/manifest-firefox.json +10 -2
- package/src/manifest.json +17 -2
- package/src/newtab.css +277 -0
- package/src/newtab.html +13 -0
- package/src/popup.html +28 -0
|
@@ -1164,6 +1164,15 @@
|
|
|
1164
1164
|
userInfoSection == null ? void 0 : userInfoSection.classList.add("hidden");
|
|
1165
1165
|
});
|
|
1166
1166
|
});
|
|
1167
|
+
const searchForm = document.getElementById("search-form");
|
|
1168
|
+
const searchInput = document.getElementById("search-input");
|
|
1169
|
+
searchForm == null ? void 0 : searchForm.addEventListener("submit", (e) => {
|
|
1170
|
+
e.preventDefault();
|
|
1171
|
+
const q = searchInput == null ? void 0 : searchInput.value.trim();
|
|
1172
|
+
const target = q ? chrome.runtime.getURL("newtab.html") + "?q=" + encodeURIComponent(q) : chrome.runtime.getURL("newtab.html");
|
|
1173
|
+
chrome.tabs.create({ url: target });
|
|
1174
|
+
window.close();
|
|
1175
|
+
});
|
|
1167
1176
|
function openSidebarTab() {
|
|
1168
1177
|
chrome.tabs.create({ url: chrome.runtime.getURL("sidebar.html") });
|
|
1169
1178
|
window.close();
|
|
@@ -1644,7 +1653,64 @@ URL: ${tab.url}`;
|
|
|
1644
1653
|
setTimeout(() => window.close(), 400);
|
|
1645
1654
|
});
|
|
1646
1655
|
});
|
|
1656
|
+
const usageList = document.getElementById("usage-list");
|
|
1657
|
+
const usageRefresh = document.getElementById("usage-refresh");
|
|
1658
|
+
const esc = (s) => s.replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]);
|
|
1659
|
+
function resetLabel(iso) {
|
|
1660
|
+
if (!iso) return "";
|
|
1661
|
+
const ms = new Date(iso).getTime() - Date.now();
|
|
1662
|
+
if (!Number.isFinite(ms)) return "";
|
|
1663
|
+
if (ms <= 0) return "resets now";
|
|
1664
|
+
const m = Math.round(ms / 6e4);
|
|
1665
|
+
if (m < 60) return `resets in ${m}m`;
|
|
1666
|
+
const h = Math.round(m / 60);
|
|
1667
|
+
if (h < 24) return `resets in ${h}h`;
|
|
1668
|
+
return `resets in ${Math.round(h / 24)}d`;
|
|
1669
|
+
}
|
|
1670
|
+
function lane(label, w, color) {
|
|
1671
|
+
if (!w || typeof w.usedPercent !== "number") return "";
|
|
1672
|
+
const pct = Math.max(0, Math.min(100, Math.round(w.usedPercent)));
|
|
1673
|
+
return `
|
|
1674
|
+
<div class="usage-lane" style="display:flex;align-items:center;gap:8px;font-size:11px;margin-top:4px;">
|
|
1675
|
+
<span style="width:52px;color:var(--text-muted,#888);">${label}</span>
|
|
1676
|
+
<span style="flex:1;height:6px;border-radius:3px;background:var(--surface-2,#222);overflow:hidden;">
|
|
1677
|
+
<span style="display:block;height:100%;width:${pct}%;background:${color || "var(--accent,#d97757)"};"></span>
|
|
1678
|
+
</span>
|
|
1679
|
+
<span style="width:34px;text-align:right;">${pct}%</span>
|
|
1680
|
+
</div>`;
|
|
1681
|
+
}
|
|
1682
|
+
function renderUsage(providers) {
|
|
1683
|
+
if (!usageList) return;
|
|
1684
|
+
usageList.innerHTML = providers.map((p) => {
|
|
1685
|
+
var _a2, _b2, _c2, _d2, _e2, _f2;
|
|
1686
|
+
const body = p.error ? `<div style="font-size:11px;color:var(--text-muted,#888);margin-top:4px;">${esc(p.error)}</div>` : `${lane("Session", (_a2 = p.snapshot) == null ? void 0 : _a2.primary, p.color)}${lane("Weekly", (_b2 = p.snapshot) == null ? void 0 : _b2.secondary, p.color)}
|
|
1687
|
+
<div style="font-size:10px;color:var(--text-muted,#888);margin-top:3px;">${esc(resetLabel((_d2 = (_c2 = p.snapshot) == null ? void 0 : _c2.primary) == null ? void 0 : _d2.resetsAt))}</div>`;
|
|
1688
|
+
const plan = (_f2 = (_e2 = p.snapshot) == null ? void 0 : _e2.identity) == null ? void 0 : _f2.plan;
|
|
1689
|
+
return `
|
|
1690
|
+
<div class="usage-row" style="padding:8px;border:1px solid var(--border,#2a2a2a);border-radius:8px;">
|
|
1691
|
+
<div style="display:flex;align-items:center;gap:6px;">
|
|
1692
|
+
<span style="width:8px;height:8px;border-radius:50%;background:${p.color || "#888"};"></span>
|
|
1693
|
+
<strong style="font-size:12px;">${esc(p.displayName)}</strong>
|
|
1694
|
+
${plan ? `<span style="font-size:10px;color:var(--text-muted,#888);">${esc(plan)}</span>` : ""}
|
|
1695
|
+
</div>
|
|
1696
|
+
${body}
|
|
1697
|
+
</div>`;
|
|
1698
|
+
}).join("");
|
|
1699
|
+
}
|
|
1700
|
+
function loadUsage() {
|
|
1701
|
+
if (!usageList) return;
|
|
1702
|
+
usageList.innerHTML = '<div style="font-size:11px;color:var(--text-muted,#888);">Loading\u2026</div>';
|
|
1703
|
+
chrome.runtime.sendMessage({ action: "usage.fetch" }, (resp) => {
|
|
1704
|
+
if (chrome.runtime.lastError || !(resp == null ? void 0 : resp.success)) {
|
|
1705
|
+
usageList.innerHTML = '<div style="font-size:11px;color:var(--text-muted,#888);">Usage unavailable</div>';
|
|
1706
|
+
return;
|
|
1707
|
+
}
|
|
1708
|
+
renderUsage(resp.providers);
|
|
1709
|
+
});
|
|
1710
|
+
}
|
|
1711
|
+
usageRefresh == null ? void 0 : usageRefresh.addEventListener("click", loadUsage);
|
|
1712
|
+
loadUsage();
|
|
1647
1713
|
checkAuth();
|
|
1648
1714
|
});
|
|
1649
1715
|
})();
|
|
1650
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbEAwLjEyLjAvbm9kZV9tb2R1bGVzL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9kaXN0L2Jyb3dzZXItcG9seWZpbGwuanMiLCAiLi4vLi4vc3JjL3BvcHVwLnRzIiwgIi4uLy4uL3NyYy9zaGFyZWQvc2hvcnRjdXQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCAtIHYwLjEyLjAgLSBUdWUgTWF5IDE0IDIwMjQgMTg6MDE6MjkgKi9cbi8qIC0qLSBNb2RlOiBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGpzLWluZGVudC1sZXZlbDogMiAtKi0gKi9cbi8qIHZpbTogc2V0IHN0cz0yIHN3PTIgZXQgdHc9ODA6ICovXG4vKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmlmICghKGdsb2JhbFRoaXMuY2hyb21lICYmIGdsb2JhbFRoaXMuY2hyb21lLnJ1bnRpbWUgJiYgZ2xvYmFsVGhpcy5jaHJvbWUucnVudGltZS5pZCkpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzY3JpcHQgc2hvdWxkIG9ubHkgYmUgbG9hZGVkIGluIGEgYnJvd3NlciBleHRlbnNpb24uXCIpO1xufVxuXG5pZiAoIShnbG9iYWxUaGlzLmJyb3dzZXIgJiYgZ2xvYmFsVGhpcy5icm93c2VyLnJ1bnRpbWUgJiYgZ2xvYmFsVGhpcy5icm93c2VyLnJ1bnRpbWUuaWQpKSB7XG4gIGNvbnN0IENIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSA9IFwiVGhlIG1lc3NhZ2UgcG9ydCBjbG9zZWQgYmVmb3JlIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlwiO1xuXG4gIC8vIFdyYXBwaW5nIHRoZSBidWxrIG9mIHRoaXMgcG9seWZpbGwgaW4gYSBvbmUtdGltZS11c2UgZnVuY3Rpb24gaXMgYSBtaW5vclxuICAvLyBvcHRpbWl6YXRpb24gZm9yIEZpcmVmb3guIFNpbmNlIFNwaWRlcm1vbmtleSBkb2VzIG5vdCBmdWxseSBwYXJzZSB0aGVcbiAgLy8gY29udGVudHMgb2YgYSBmdW5jdGlvbiB1bnRpbCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHNpbmNlIGl0IHdpbGxcbiAgLy8gbmV2ZXIgYWN0dWFsbHkgbmVlZCB0byBiZSBjYWxsZWQsIHRoaXMgYWxsb3dzIHRoZSBwb2x5ZmlsbCB0byBiZSBpbmNsdWRlZFxuICAvLyBpbiBGaXJlZm94IG5lYXJseSBmb3IgZnJlZS5cbiAgY29uc3Qgd3JhcEFQSXMgPSBleHRlbnNpb25BUElzID0+IHtcbiAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgLy8gYXQgYnVpbGQgdGltZSBieSByZXBsYWNpbmcgdGhlIGZvbGxvd2luZyBcImluY2x1ZGVcIiB3aXRoIHRoZSBjb250ZW50IG9mIHRoZVxuICAgIC8vIEpTT04gZmlsZS5cbiAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgIFwiYWxhcm1zXCI6IHtcbiAgICAgICAgXCJjbGVhclwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJib29rbWFya3NcIjoge1xuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0Q2hpbGRyZW5cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0UmVjZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VHJlZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVUcmVlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImJyb3dzZXJBY3Rpb25cIjoge1xuICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcImVuYWJsZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QmFkZ2VCYWNrZ3JvdW5kQ29sb3JcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFRpdGxlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcIm9wZW5Qb3B1cFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRJY29uXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRUaXRsZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImJyb3dzaW5nRGF0YVwiOiB7XG4gICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUNvb2tpZXNcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlRG93bmxvYWRzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUhpc3RvcnlcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlTG9jYWxTdG9yYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVQbHVnaW5EYXRhXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb21tYW5kc1wiOiB7XG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb250ZXh0TWVudXNcIjoge1xuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwidXBkYXRlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJkZXZ0b29sc1wiOiB7XG4gICAgICAgIFwiaW5zcGVjdGVkV2luZG93XCI6IHtcbiAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMixcbiAgICAgICAgICAgIFwic2luZ2xlQ2FsbGJhY2tBcmdcIjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMyxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgXCJzaW5nbGVDYWxsYmFja0FyZ1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVsZW1lbnRzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlU2lkZWJhclBhbmVcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImRvd25sb2Fkc1wiOiB7XG4gICAgICAgIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImRvd25sb2FkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImVyYXNlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEZpbGVJY29uXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcIm9wZW5cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInBhdXNlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUZpbGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVzdW1lXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgXCJpc0FsbG93ZWRGaWxlU2NoZW1lQWNjZXNzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcImlzQWxsb3dlZEluY29nbml0b0FjY2Vzc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiaGlzdG9yeVwiOiB7XG4gICAgICAgIFwiYWRkVXJsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImRlbGV0ZUFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWxldGVSYW5nZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWxldGVVcmxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VmlzaXRzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiaTE4blwiOiB7XG4gICAgICAgIFwiZGV0ZWN0TGFuZ3VhZ2VcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWNjZXB0TGFuZ3VhZ2VzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJpZGVudGl0eVwiOiB7XG4gICAgICAgIFwibGF1bmNoV2ViQXV0aEZsb3dcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImlkbGVcIjoge1xuICAgICAgICBcInF1ZXJ5U3RhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIm1hbmFnZW1lbnRcIjoge1xuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0U2VsZlwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRFbmFibGVkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInVuaW5zdGFsbFNlbGZcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIm5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0UGVybWlzc2lvbkxldmVsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGFnZUFjdGlvblwiOiB7XG4gICAgICAgIFwiZ2V0UG9wdXBcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGlkZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInNob3dcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwZXJtaXNzaW9uc1wiOiB7XG4gICAgICAgIFwiY29udGFpbnNcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJydW50aW1lXCI6IHtcbiAgICAgICAgXCJnZXRCYWNrZ3JvdW5kUGFnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRQbGF0Zm9ybUluZm9cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwib3Blbk9wdGlvbnNQYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZW5kTmF0aXZlTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInNlc3Npb25zXCI6IHtcbiAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFJlY2VudGx5Q2xvc2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlc3RvcmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInN0b3JhZ2VcIjoge1xuICAgICAgICBcImxvY2FsXCI6IHtcbiAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInN5bmNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCeXRlc0luVXNlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInRhYnNcIjoge1xuICAgICAgICBcImNhcHR1cmVWaXNpYmxlVGFiXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXNjYXJkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImR1cGxpY2F0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0Wm9vbVNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdvQmFja1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnb0ZvcndhcmRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGlnaGxpZ2h0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImluc2VydENTU1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInF1ZXJ5XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbG9hZFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlQ1NTXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogM1xuICAgICAgICB9LFxuICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0Wm9vbVNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidG9wU2l0ZXNcIjoge1xuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwid2ViTmF2aWdhdGlvblwiOiB7XG4gICAgICAgIFwiZ2V0QWxsRnJhbWVzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ3ZWJSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ3aW5kb3dzXCI6IHtcbiAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldExhc3RGb2N1c2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwaS1tZXRhZGF0YS5qc29uIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiBicm93c2VyLXBvbHlmaWxsXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgV2Vha01hcCBzdWJjbGFzcyB3aGljaCBjcmVhdGVzIGFuZCBzdG9yZXMgYSB2YWx1ZSBmb3IgYW55IGtleSB3aGljaCBkb2VzXG4gICAgICogbm90IGV4aXN0IHdoZW4gYWNjZXNzZWQsIGJ1dCBiZWhhdmVzIGV4YWN0bHkgYXMgYW4gb3JkaW5hcnkgV2Vha01hcFxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZUl0ZW1cbiAgICAgKiAgICAgICAgQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHZhbHVlIGZvciBhbnlcbiAgICAgKiAgICAgICAga2V5IHdoaWNoIGRvZXMgbm90IGV4aXN0LCB0aGUgZmlyc3QgdGltZSBpdCBpcyBhY2Nlc3NlZC4gVGhlXG4gICAgICogICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVzLCBhcyBpdHMgb25seSBhcmd1bWVudCwgdGhlIGtleSBiZWluZyBjcmVhdGVkLlxuICAgICAqL1xuICAgIGNsYXNzIERlZmF1bHRXZWFrTWFwIGV4dGVuZHMgV2Vha01hcCB7XG4gICAgICBjb25zdHJ1Y3RvcihjcmVhdGVJdGVtLCBpdGVtcyA9IHVuZGVmaW5lZCkge1xuICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIHRoaXMuY3JlYXRlSXRlbSA9IGNyZWF0ZUl0ZW07XG4gICAgICB9XG5cbiAgICAgIGdldChrZXkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNyZWF0ZUl0ZW0oa2V5KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggYSBgdGhlbmAgbWV0aG9kLCBhbmQgY2FuXG4gICAgICogdGhlcmVmb3JlIGJlIGFzc3VtZWQgdG8gYmVoYXZlIGFzIGEgUHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZW5hYmxlLlxuICAgICAqL1xuICAgIGNvbnN0IGlzVGhlbmFibGUgPSB2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgcmVzb2x2ZSBvciByZWplY3RcbiAgICAgKiB0aGUgZ2l2ZW4gcHJvbWlzZSBiYXNlZCBvbiBob3cgaXQgaXMgY2FsbGVkOlxuICAgICAqXG4gICAgICogLSBJZiwgd2hlbiBjYWxsZWQsIGBjaHJvbWUucnVudGltZS5sYXN0RXJyb3JgIGNvbnRhaW5zIGEgbm9uLW51bGwgb2JqZWN0LFxuICAgICAqICAgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuICAgICAqIC0gSWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGV4YWN0bHkgb25lIGFyZ3VtZW50LCB0aGUgcHJvbWlzZSBpc1xuICAgICAqICAgcmVzb2x2ZWQgdG8gdGhhdCB2YWx1ZS5cbiAgICAgKiAtIE90aGVyd2lzZSwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlXG4gICAgICogICBmdW5jdGlvbidzIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9taXNlXG4gICAgICogICAgICAgIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNvbHV0aW9uIGFuZCByZWplY3Rpb24gZnVuY3Rpb25zIG9mIGFcbiAgICAgKiAgICAgICAgcHJvbWlzZS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlc29sdmVcbiAgICAgKiAgICAgICAgVGhlIHByb21pc2UncyByZXNvbHV0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVqZWN0XG4gICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVqZWN0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgd3JhcHBlZCBtZXRob2Qgd2hpY2ggaGFzIGNyZWF0ZWQgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmdcbiAgICAgKiAgICAgICAgV2hldGhlciBvciBub3QgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBvbmx5IHRoZSBmaXJzdFxuICAgICAqICAgICAgICBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2ssIGFsdGVybmF0aXZlbHkgYW4gYXJyYXkgb2YgYWxsIHRoZVxuICAgICAqICAgICAgICBjYWxsYmFjayBhcmd1bWVudHMgaXMgcmVzb2x2ZWQuIEJ5IGRlZmF1bHQsIGlmIHRoZSBjYWxsYmFja1xuICAgICAqICAgICAgICBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggb25seSBhIHNpbmdsZSBhcmd1bWVudCwgdGhhdCB3aWxsIGJlXG4gICAgICogICAgICAgIHJlc29sdmVkIHRvIHRoZSBwcm9taXNlLCB3aGlsZSBhbGwgYXJndW1lbnRzIHdpbGwgYmUgcmVzb2x2ZWQgYXNcbiAgICAgKiAgICAgICAgYW4gYXJyYXkgaWYgbXVsdGlwbGUgYXJlIGdpdmVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9ufVxuICAgICAqICAgICAgICBUaGUgZ2VuZXJhdGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0IG1ha2VDYWxsYmFjayA9IChwcm9taXNlLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgcmV0dXJuICguLi5jYWxsYmFja0FyZ3MpID0+IHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICBwcm9taXNlLnJlamVjdChuZXcgRXJyb3IoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmcgfHxcbiAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tBcmdzLmxlbmd0aCA8PSAxICYmIG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGx1cmFsaXplQXJndW1lbnRzID0gKG51bUFyZ3MpID0+IG51bUFyZ3MgPT0gMSA/IFwiYXJndW1lbnRcIiA6IFwiYXJndW1lbnRzXCI7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgbWV0YWRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdoaWNoIGlzIGJlaW5nIHdyYXBwZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhXG4gICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC5cbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1pbkFyZ3NcbiAgICAgKiAgICAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtdXN0IGJlIHBhc3NlZCB0byB0aGVcbiAgICAgKiAgICAgICAgZnVuY3Rpb24uIElmIGNhbGxlZCB3aXRoIGZld2VyIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1heEFyZ3NcbiAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAqICAgICAgICBmdW5jdGlvbi4gSWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICogICAgICAgIHdyYXBwZXIgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZ1xuICAgICAqICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIG9ubHkgdGhlIGZpcnN0XG4gICAgICogICAgICAgIGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjaywgYWx0ZXJuYXRpdmVseSBhbiBhcnJheSBvZiBhbGwgdGhlXG4gICAgICogICAgICAgIGNhbGxiYWNrIGFyZ3VtZW50cyBpcyByZXNvbHZlZC4gQnkgZGVmYXVsdCwgaWYgdGhlIGNhbGxiYWNrXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LCB0aGF0IHdpbGwgYmVcbiAgICAgKiAgICAgICAgcmVzb2x2ZWQgdG8gdGhlIHByb21pc2UsIHdoaWxlIGFsbCBhcmd1bWVudHMgd2lsbCBiZSByZXNvbHZlZCBhc1xuICAgICAqICAgICAgICBhbiBhcnJheSBpZiBtdWx0aXBsZSBhcmUgZ2l2ZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24ob2JqZWN0LCAuLi4qKX1cbiAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgY29uc3Qgd3JhcEFzeW5jRnVuY3Rpb24gPSAobmFtZSwgbWV0YWRhdGEpID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBhc3luY0Z1bmN0aW9uV3JhcHBlcih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgbWV0YWRhdGEubWluQXJncykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHttZXRhZGF0YS5taW5BcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5taW5BcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiBtZXRhZGF0YS5tYXhBcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBtb3N0ICR7bWV0YWRhdGEubWF4QXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWF4QXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFRoaXMgQVBJIG1ldGhvZCBoYXMgY3VycmVudGx5IG5vIGNhbGxiYWNrIG9uIENocm9tZSwgYnV0IGl0IHJldHVybiBhIHByb21pc2Ugb24gRmlyZWZveCxcbiAgICAgICAgICAgIC8vIGFuZCBzbyB0aGUgcG9seWZpbGwgd2lsbCB0cnkgdG8gY2FsbCBpdCB3aXRoIGEgY2FsbGJhY2sgZmlyc3QsIGFuZCBpdCB3aWxsIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyB0byBub3QgcGFzc2luZyB0aGUgY2FsbGJhY2sgaWYgdGhlIGZpcnN0IGNhbGwgZmFpbHMuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtyZXNvbHZlLCByZWplY3R9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoY2JFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7bmFtZX0gQVBJIG1ldGhvZCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyLCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmFsbGluZyBiYWNrIHRvIGNhbGwgaXQgd2l0aG91dCBhIGNhbGxiYWNrOiBcIiwgY2JFcnJvcik7XG5cbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgQVBJIG1ldGhvZCBtZXRhZGF0YSwgc28gdGhhdCB0aGUgbmV4dCBBUEkgY2FsbHMgd2lsbCBub3QgdHJ5IHRvXG4gICAgICAgICAgICAgIC8vIHVzZSB0aGUgdW5zdXBwb3J0ZWQgY2FsbGJhY2sgYW55bW9yZS5cbiAgICAgICAgICAgICAgbWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgbWV0YWRhdGEubm9DYWxsYmFjayA9IHRydWU7XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEubm9DYWxsYmFjaykge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtyZXNvbHZlLCByZWplY3R9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBhbiBleGlzdGluZyBtZXRob2Qgb2YgdGhlIHRhcmdldCBvYmplY3QsIHNvIHRoYXQgY2FsbHMgdG8gaXQgYXJlXG4gICAgICogaW50ZXJjZXB0ZWQgYnkgdGhlIGdpdmVuIHdyYXBwZXIgZnVuY3Rpb24uIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHJlY2VpdmVzLFxuICAgICAqIGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgdGhlIG9yaWdpbmFsIGB0YXJnZXRgIG9iamVjdCwgZm9sbG93ZWQgYnkgZWFjaCBvZlxuICAgICAqIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0XG4gICAgICogICAgICAgIFRoZSBvcmlnaW5hbCB0YXJnZXQgb2JqZWN0IHRoYXQgdGhlIHdyYXBwZWQgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gICAgICogICAgICAgIFRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC4gVGhpcyBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgdGhlIFByb3h5XG4gICAgICogICAgICAgIG9iamVjdCB3aGljaCBpcyBjcmVhdGVkIHRvIHdyYXAgdGhlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB3cmFwcGVyXG4gICAgICogICAgICAgIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBpbiBwbGFjZSBvZiBhIGRpcmVjdCBpbnZvY2F0aW9uXG4gICAgICogICAgICAgIG9mIHRoZSB3cmFwcGVkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm94eTxmdW5jdGlvbj59XG4gICAgICogICAgICAgIEEgUHJveHkgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbWV0aG9kLCB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiB3cmFwcGVyXG4gICAgICogICAgICAgIG1ldGhvZCBpbiBpdHMgcGxhY2UuXG4gICAgICovXG4gICAgY29uc3Qgd3JhcE1ldGhvZCA9ICh0YXJnZXQsIG1ldGhvZCwgd3JhcHBlcikgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm94eShtZXRob2QsIHtcbiAgICAgICAgYXBwbHkodGFyZ2V0TWV0aG9kLCB0aGlzT2JqLCBhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2FsbCh0aGlzT2JqLCB0YXJnZXQsIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBoYXNPd25Qcm9wZXJ0eSA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIC8qKlxuICAgICAqIFdyYXBzIGFuIG9iamVjdCBpbiBhIFByb3h5IHdoaWNoIGludGVyY2VwdHMgYW5kIHdyYXBzIGNlcnRhaW4gbWV0aG9kc1xuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBgd3JhcHBlcnNgIGFuZCBgbWV0YWRhdGFgIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0XG4gICAgICogICAgICAgIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHdyYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3dyYXBwZXJzID0ge31dXG4gICAgICogICAgICAgIEFuIG9iamVjdCB0cmVlIGNvbnRhaW5pbmcgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHNwZWNpYWwgY2FzZXMuIEFueVxuICAgICAqICAgICAgICBmdW5jdGlvbiBwcmVzZW50IGluIHRoaXMgb2JqZWN0IHRyZWUgaXMgY2FsbGVkIGluIHBsYWNlIG9mIHRoZVxuICAgICAqICAgICAgICBtZXRob2QgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGB0YXJnZXRgIG9iamVjdCB0cmVlLiBUaGVzZVxuICAgICAqICAgICAgICB3cmFwcGVyIG1ldGhvZHMgYXJlIGludm9rZWQgYXMgZGVzY3JpYmVkIGluIHtAc2VlIHdyYXBNZXRob2R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFttZXRhZGF0YSA9IHt9XVxuICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIG1ldGFkYXRhIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICAgICAqICAgICAgICBQcm9taXNlLWJhc2VkIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMuIEFueSBmdW5jdGlvbiBpblxuICAgICAqICAgICAgICB0aGUgYHRhcmdldGAgb2JqZWN0IHRyZWUgd2hpY2ggaGFzIGEgY29ycmVzcG9uZGluZyBtZXRhZGF0YSBvYmplY3RcbiAgICAgKiAgICAgICAgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGBtZXRhZGF0YWAgdHJlZSBpcyByZXBsYWNlZCB3aXRoIGFuXG4gICAgICogICAgICAgIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24sIGFzIGRlc2NyaWJlZCBpblxuICAgICAqICAgICAgICB7QHNlZSB3cmFwQXN5bmNGdW5jdGlvbn1cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm94eTxvYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IHdyYXBPYmplY3QgPSAodGFyZ2V0LCB3cmFwcGVycyA9IHt9LCBtZXRhZGF0YSA9IHt9KSA9PiB7XG4gICAgICBsZXQgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbGV0IGhhbmRsZXJzID0ge1xuICAgICAgICBoYXMocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgfHwgcHJvcCBpbiBjYWNoZTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQocHJveHlUYXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgaWYgKHByb3AgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZVtwcm9wXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIShwcm9wIGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIG9uIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4gQ2hlY2sgaWYgd2UgbmVlZCB0byBkb1xuICAgICAgICAgICAgLy8gYW55IHdyYXBwaW5nLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdyYXBwZXJzW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSB3cmFwcGVyIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyc1twcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBwcm9wKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHdlIGhhdmUgbWV0YWRhdGEgZm9yLiBDcmVhdGUgYVxuICAgICAgICAgICAgICAvLyBQcm9taXNlIHdyYXBwZXIgZm9yIGl0LlxuICAgICAgICAgICAgICBsZXQgd3JhcHBlciA9IHdyYXBBc3luY0Z1bmN0aW9uKHByb3AsIG1ldGFkYXRhW3Byb3BdKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtZXRob2QgdGhhdCB3ZSBkb24ndCBrbm93IG9yIGNhcmUgYWJvdXQuIFJldHVybiB0aGVcbiAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kLCBib3VuZCB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAoaGFzT3duUHJvcGVydHkod3JhcHBlcnMsIHByb3ApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgdGhhdCB3ZSBuZWVkIHRvIGRvIHNvbWUgd3JhcHBpbmcgZm9yIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgLy8gb2YuIENyZWF0ZSBhIHN1Yi1vYmplY3Qgd3JhcHBlciBmb3IgaXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2hpbGRcbiAgICAgICAgICAgIC8vIG1ldGFkYXRhLlxuICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIFwiKlwiKSkge1xuICAgICAgICAgICAgLy8gV3JhcCBhbGwgcHJvcGVydGllcyBpbiAqIG5hbWVzcGFjZS5cbiAgICAgICAgICAgIHZhbHVlID0gd3JhcE9iamVjdCh2YWx1ZSwgd3JhcHBlcnNbcHJvcF0sIG1ldGFkYXRhW1wiKlwiXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55IHdyYXBwaW5nIGZvciB0aGlzIHByb3BlcnR5LFxuICAgICAgICAgICAgLy8gc28ganVzdCBmb3J3YXJkIGFsbCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQocHJveHlUYXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3AsIGRlc2MpIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwgZGVzYyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVsZXRlUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShjYWNoZSwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXIgY29udHJhY3Qgb2YgdGhlIFByb3h5IEFQSSwgdGhlIFwiZ2V0XCIgcHJveHkgaGFuZGxlciBtdXN0IHJldHVybiB0aGVcbiAgICAgIC8vIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSB0YXJnZXQgaWYgdGhhdCB2YWx1ZSBpcyBkZWNsYXJlZCByZWFkLW9ubHkgYW5kXG4gICAgICAvLyBub24tY29uZmlndXJhYmxlLiBGb3IgdGhpcyByZWFzb24sIHdlIGNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgIC8vIHByb3RvdHlwZSBzZXQgdG8gYHRhcmdldGAgaW5zdGVhZCBvZiB1c2luZyBgdGFyZ2V0YCBkaXJlY3RseS5cbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBjYW5ub3QgcmV0dXJuIGEgY3VzdG9tIG9iamVjdCBmb3IgQVBJcyB0aGF0XG4gICAgICAvLyBhcmUgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZCBub24tY29uZmlndXJhYmxlLCBzdWNoIGFzIGBjaHJvbWUuZGV2dG9vbHNgLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBwcm94eSBoYW5kbGVycyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YFxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgYHByb3h5VGFyZ2V0YCwgc28gdGhhdCB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBhcmVcbiAgICAgIC8vIGRlcmVmZXJlbmNlZCB2aWEgdGhlIG9yaWdpbmFsIHRhcmdldHMuXG4gICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICByZXR1cm4gbmV3IFByb3h5KHByb3h5VGFyZ2V0LCBoYW5kbGVycyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFuIGV2ZW50IG9iamVjdCwgd2hpY2ggaGFuZGxlc1xuICAgICAqIHdyYXBwaW5nIG9mIGxpc3RlbmVyIGZ1bmN0aW9ucyB0aGF0IHRob3NlIG1lc3NhZ2VzIGFyZSBwYXNzZWQuXG4gICAgICpcbiAgICAgKiBBIHNpbmdsZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGVhY2ggbGlzdGVuZXIgZnVuY3Rpb24sIGFuZCBzdG9yZWQgaW4gYVxuICAgICAqIG1hcC4gU3Vic2VxdWVudCBjYWxscyB0byBgYWRkTGlzdGVuZXJgLCBgaGFzTGlzdGVuZXJgLCBvciBgcmVtb3ZlTGlzdGVuZXJgXG4gICAgICogcmV0cmlldmUgdGhlIG9yaWdpbmFsIHdyYXBwZXIsIHNvIHRoYXQgIGF0dGVtcHRzIHRvIHJlbW92ZSBhXG4gICAgICogcHJldmlvdXNseS1hZGRlZCBsaXN0ZW5lciB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEZWZhdWx0V2Vha01hcDxmdW5jdGlvbiwgZnVuY3Rpb24+fSB3cmFwcGVyTWFwXG4gICAgICogICAgICAgIEEgRGVmYXVsdFdlYWtNYXAgb2JqZWN0IHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB3cmFwcGVyXG4gICAgICogICAgICAgIGZvciBhIGdpdmVuIGxpc3RlbmVyIGZ1bmN0aW9uIHdoZW4gb25lIGRvZXMgbm90IGV4aXN0LCBhbmQgcmV0cmlldmVcbiAgICAgKiAgICAgICAgYW4gZXhpc3Rpbmcgb25lIHdoZW4gaXQgZG9lcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICovXG4gICAgY29uc3Qgd3JhcEV2ZW50ID0gd3JhcHBlck1hcCA9PiAoe1xuICAgICAgYWRkTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lciwgLi4uYXJncykge1xuICAgICAgICB0YXJnZXQuYWRkTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpLCAuLi5hcmdzKTtcbiAgICAgIH0sXG5cbiAgICAgIGhhc0xpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5oYXNMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lcikge1xuICAgICAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvblJlcXVlc3RGaW5pc2hlZFdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gb25SZXF1ZXN0RmluaXNoZWQgbGlzdGVuZXIgZnVuY3Rpb24gc28gdGhhdCBpdCB3aWxsIHJldHVybiBhXG4gICAgICAgKiBgZ2V0Q29udGVudCgpYCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgYFByb21pc2VgIHJhdGhlciB0aGFuIHVzaW5nIGFcbiAgICAgICAqIGNhbGxiYWNrIEFQSS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gICAgICAgKiAgICAgICAgVGhlIEhBUiBlbnRyeSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBvblJlcXVlc3RGaW5pc2hlZChyZXEpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZFJlcSA9IHdyYXBPYmplY3QocmVxLCB7fSAvKiB3cmFwcGVycyAqLywge1xuICAgICAgICAgIGdldENvbnRlbnQ6IHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDAsXG4gICAgICAgICAgICBtYXhBcmdzOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBsaXN0ZW5lcih3cmFwcGVkUmVxKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbk1lc3NhZ2VXcmFwcGVycyA9IG5ldyBEZWZhdWx0V2Vha01hcChsaXN0ZW5lciA9PiB7XG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICogaXRzIHJldHVybiB2YWx1ZSwgcmF0aGVyIHRoYW4gYnkgcmV0dXJuaW5nIGEgc2VudGluZWwgdmFsdWUgYW5kIGNhbGxpbmcgYVxuICAgICAgICogY2FsbGJhY2suIElmIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiByZXR1cm5zIGEgUHJvbWlzZSwgdGhlIHJlc3BvbnNlIGlzXG4gICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHNlbmRlclxuICAgICAgICogICAgICAgIERldGFpbHMgYWJvdXQgdGhlIHNlbmRlciBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICogICAgICAgIEEgY2FsbGJhY2sgd2hpY2gsIHdoZW4gY2FsbGVkIHdpdGggYW4gYXJiaXRyYXJ5IGFyZ3VtZW50LCBzZW5kc1xuICAgICAgICogICAgICAgIHRoYXQgdmFsdWUgYXMgYSByZXNwb25zZS5cbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICogICAgICAgIFRydWUgaWYgdGhlIHdyYXBwZWQgbGlzdGVuZXIgcmV0dXJuZWQgYSBQcm9taXNlLCB3aGljaCB3aWxsIGxhdGVyXG4gICAgICAgKiAgICAgICAgeWllbGQgYSByZXNwb25zZS4gRmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gb25NZXNzYWdlKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBkaWRDYWxsU2VuZFJlc3BvbnNlID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IHdyYXBwZWRTZW5kUmVzcG9uc2U7XG4gICAgICAgIGxldCBzZW5kUmVzcG9uc2VQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgd3JhcHBlZFNlbmRSZXNwb25zZSA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBkaWRDYWxsU2VuZFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gbGlzdGVuZXIobWVzc2FnZSwgc2VuZGVyLCB3cmFwcGVkU2VuZFJlc3BvbnNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVzdWx0VGhlbmFibGUgPSByZXN1bHQgIT09IHRydWUgJiYgaXNUaGVuYWJsZShyZXN1bHQpO1xuXG4gICAgICAgIC8vIElmIHRoZSBsaXN0ZW5lciBkaWRuJ3QgcmV0dXJuZWQgdHJ1ZSBvciBhIFByb21pc2UsIG9yIGNhbGxlZFxuICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSB3aWxsIGJlIG5vIHJlc3BvbnNlIHNlbnQgZnJvbSB0aGlzIGxpc3RlbmVyLlxuICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmICFpc1Jlc3VsdFRoZW5hYmxlICYmICFkaWRDYWxsU2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBzbWFsbCBoZWxwZXIgdG8gc2VuZCB0aGUgbWVzc2FnZSBpZiB0aGUgcHJvbWlzZSByZXNvbHZlc1xuICAgICAgICAvLyBhbmQgYW4gZXJyb3IgaWYgdGhlIHByb21pc2UgcmVqZWN0cyAoYSB3cmFwcGVkIHNlbmRNZXNzYWdlIGhhc1xuICAgICAgICAvLyB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2UgaW50byBhIHJlc29sdmVkIHByb21pc2Ugb3IgYSByZWplY3RlZFxuICAgICAgICAvLyBwcm9taXNlKS5cbiAgICAgICAgY29uc3Qgc2VuZFByb21pc2VkUmVzdWx0ID0gKHByb21pc2UpID0+IHtcbiAgICAgICAgICBwcm9taXNlLnRoZW4obXNnID0+IHtcbiAgICAgICAgICAgIC8vIHNlbmQgdGhlIG1lc3NhZ2UgdmFsdWUuXG4gICAgICAgICAgICBzZW5kUmVzcG9uc2UobXNnKTtcbiAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBTZW5kIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaWYgdGhlIHJlamVjdGVkIHZhbHVlXG4gICAgICAgICAgICAvLyBpcyBhbiBpbnN0YW5jZSBvZiBlcnJvciwgb3IgdGhlIG9iamVjdCBpdHNlbGYgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gXCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgIF9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXzogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBhbiBlcnJvciBvbiB0aGUgY29uc29sZSBpZiB1bmFibGUgdG8gc2VuZCB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHNlbmQgb25NZXNzYWdlIHJlamVjdGVkIHJlcGx5XCIsIGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAvLyByZXN1bHQsIG90aGVyd2lzZSB3YWl0IHRoZSBwcm9taXNlIHJlbGF0ZWQgdG8gdGhlIHdyYXBwZWRTZW5kUmVzcG9uc2VcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gcmVzb2x2ZSBhbmQgc2VuZCBpdCBhcyBhIHJlc3BvbnNlLlxuICAgICAgICBpZiAoaXNSZXN1bHRUaGVuYWJsZSkge1xuICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChzZW5kUmVzcG9uc2VQcm9taXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExldCBDaHJvbWUga25vdyB0aGF0IHRoZSBsaXN0ZW5lciBpcyByZXBseWluZy5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2sgPSAoe3JlamVjdCwgcmVzb2x2ZX0sIHJlcGx5KSA9PiB7XG4gICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAvLyBEZXRlY3Qgd2hlbiBub25lIG9mIHRoZSBsaXN0ZW5lcnMgcmVwbGllZCB0byB0aGUgc2VuZE1lc3NhZ2UgY2FsbCBhbmQgcmVzb2x2ZVxuICAgICAgICAvLyB0aGUgcHJvbWlzZSB0byB1bmRlZmluZWQgYXMgaW4gRmlyZWZveC5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgIGlmIChleHRlbnNpb25BUElzLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UgPT09IENIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSkge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAvLyBDb252ZXJ0IGJhY2sgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGludG9cbiAgICAgICAgLy8gYW4gRXJyb3IgaW5zdGFuY2UuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXBseSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdyYXBwZWRTZW5kTWVzc2FnZSA9IChuYW1lLCBtZXRhZGF0YSwgYXBpTmFtZXNwYWNlT2JqLCAuLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHttZXRhZGF0YS5taW5BcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5taW5BcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBtb3N0ICR7bWV0YWRhdGEubWF4QXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWF4QXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVkQ2IgPSB3cmFwcGVkU2VuZE1lc3NhZ2VDYWxsYmFjay5iaW5kKG51bGwsIHtyZXNvbHZlLCByZWplY3R9KTtcbiAgICAgICAgYXJncy5wdXNoKHdyYXBwZWRDYik7XG4gICAgICAgIGFwaU5hbWVzcGFjZU9iai5zZW5kTWVzc2FnZSguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzdGF0aWNXcmFwcGVycyA9IHtcbiAgICAgIGRldnRvb2xzOiB7XG4gICAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgICBvblJlcXVlc3RGaW5pc2hlZDogd3JhcEV2ZW50KG9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICBvbk1lc3NhZ2VFeHRlcm5hbDogd3JhcEV2ZW50KG9uTWVzc2FnZVdyYXBwZXJzKSxcbiAgICAgICAgc2VuZE1lc3NhZ2U6IHdyYXBwZWRTZW5kTWVzc2FnZS5iaW5kKG51bGwsIFwic2VuZE1lc3NhZ2VcIiwge21pbkFyZ3M6IDEsIG1heEFyZ3M6IDN9KSxcbiAgICAgIH0sXG4gICAgICB0YWJzOiB7XG4gICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHttaW5BcmdzOiAyLCBtYXhBcmdzOiAzfSksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3Qgc2V0dGluZ01ldGFkYXRhID0ge1xuICAgICAgY2xlYXI6IHttaW5BcmdzOiAxLCBtYXhBcmdzOiAxfSxcbiAgICAgIGdldDoge21pbkFyZ3M6IDEsIG1heEFyZ3M6IDF9LFxuICAgICAgc2V0OiB7bWluQXJnczogMSwgbWF4QXJnczogMX0sXG4gICAgfTtcbiAgICBhcGlNZXRhZGF0YS5wcml2YWN5ID0ge1xuICAgICAgbmV0d29yazoge1wiKlwiOiBzZXR0aW5nTWV0YWRhdGF9LFxuICAgICAgc2VydmljZXM6IHtcIipcIjogc2V0dGluZ01ldGFkYXRhfSxcbiAgICAgIHdlYnNpdGVzOiB7XCIqXCI6IHNldHRpbmdNZXRhZGF0YX0sXG4gICAgfTtcblxuICAgIHJldHVybiB3cmFwT2JqZWN0KGV4dGVuc2lvbkFQSXMsIHN0YXRpY1dyYXBwZXJzLCBhcGlNZXRhZGF0YSk7XG4gIH07XG5cbiAgLy8gVGhlIGJ1aWxkIHByb2Nlc3MgYWRkcyBhIFVNRCB3cmFwcGVyIGFyb3VuZCB0aGlzIGZpbGUsIHdoaWNoIG1ha2VzIHRoZVxuICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG4gIG1vZHVsZS5leHBvcnRzID0gd3JhcEFQSXMoY2hyb21lKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcy5icm93c2VyO1xufVxuIiwgIi8vIEhhbnpvIEFJIFx1MjAxNCBQb3B1cCBTY3JpcHRcbi8vIFVzZXMgYmFja2dyb3VuZCBtZXNzYWdlIHBhc3NpbmcgZm9yIGF1dGggKG5vdCBkaXJlY3Qgc3RvcmFnZSBhY2Nlc3MpLlxuLy9cbi8vIFBvbHlmaWxsIHRoZSBXZWJFeHRlbnNpb24gQVBJIHN1cmZhY2Ugc28gdGhpcyBzY3JpcHQgY2FuIHJlYWQvd3JpdGVcbi8vIGNocm9tZS5zdG9yYWdlIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgY2FsbHMgb24gZXZlcnkgYnJvd3Nlci4gQ2hyb21lXG4vLyBnZXRzIHRoZSBwb2x5ZmlsbCB3cmFwcGVyLCBGaXJlZm94L1NhZmFyaSBnZXQgYSBuby1vcC5cbmltcG9ydCAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9JTlNQRUNUX1NIT1JUQ1VULFxuICBmb3JtYXRTaG9ydGN1dCxcbiAgbG9hZEluc3BlY3RTaG9ydGN1dCxcbiAgc2F2ZUluc3BlY3RTaG9ydGN1dCxcbiAgc2hvcnRjdXRGcm9tRXZlbnQsXG4gIHR5cGUgU2hvcnRjdXQsXG59IGZyb20gJy4vc2hhcmVkL3Nob3J0Y3V0LmpzJztcblxuZGVjbGFyZSBjb25zdCBicm93c2VyOiB0eXBlb2YgY2hyb21lICYge1xuICBzaWRlYmFyQWN0aW9uPzoge1xuICAgIG9wZW4oKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHRvZ2dsZSgpOiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gRm9vdGVyIHZlcnNpb24gXHUyMDE0IHB1bGxlZCBmcm9tIG1hbmlmZXN0IGF0IHJ1bnRpbWUgc28gaXQgYWx3YXlzIHRyYWNrcyBidWlsZC5cbiAgY29uc3QgdmVyc2lvbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvb3Rlci12ZXJzaW9uJyk7XG4gIGlmICh2ZXJzaW9uRWwpIHtcbiAgICB0cnkge1xuICAgICAgdmVyc2lvbkVsLnRleHRDb250ZW50ID0gYHYke2Nocm9tZS5ydW50aW1lLmdldE1hbmlmZXN0KCkudmVyc2lvbn1gO1xuICAgIH0gY2F0Y2ggeyAvKiBtYW5pZmVzdCB1bmF2YWlsYWJsZSBpbiBzb21lIGNvbnRleHRzICovIH1cbiAgfVxuXG4gIC8vIEF1dGhcbiAgY29uc3QgbG9naW5CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW4tYnRuJyk7XG4gIGNvbnN0IGxvZ291dEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dvdXQtYnRuJyk7XG5cbiAgLy8gT3BlbiBwYW5lbFxuICBjb25zdCBvcGVuUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1wYW5lbCcpO1xuICBjb25zdCBvcGVuUGFnZU92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1wYWdlLW92ZXJsYXknKTsgLy8gbGVnYWN5IGlkLCBtYXkgbm90IGV4aXN0XG4gIGNvbnN0IHBpbkxlZnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluLWxlZnQnKTtcbiAgY29uc3QgcGluUmlnaHRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluLXJpZ2h0Jyk7XG4gIGNvbnN0IG92ZXJsYXlFbmFibGVkQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmxheS1lbmFibGVkJykgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IHdpZHRoQnRucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndpZHRoLWJ0bicpKSBhcyBIVE1MQnV0dG9uRWxlbWVudFtdO1xuICBjb25zdCBvdmVybGF5U2lkZVJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdmVybGF5LXNpZGUtcm93Jyk7XG4gIGNvbnN0IG92ZXJsYXlXaWR0aFJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdmVybGF5LXdpZHRoLXJvdycpO1xuXG4gIHR5cGUgT3ZlcmxheVdpZHRoID0gJ2NvbXBhY3QnIHwgJ2RlZmF1bHQnIHwgJ3dpZGUnO1xuXG4gIGZ1bmN0aW9uIHN5bmNTZXR0aW5nc1VpKGVuYWJsZWQ6IGJvb2xlYW4sIHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsIHdpZHRoOiBPdmVybGF5V2lkdGgpIHtcbiAgICBpZiAob3ZlcmxheUVuYWJsZWRDaGVja2JveCkgb3ZlcmxheUVuYWJsZWRDaGVja2JveC5jaGVja2VkID0gZW5hYmxlZDtcbiAgICBwaW5MZWZ0QnRuPy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgc2lkZSA9PT0gJ2xlZnQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgcGluUmlnaHRCdG4/LnNldEF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUnLCBzaWRlID09PSAncmlnaHQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgd2lkdGhCdG5zLmZvckVhY2goKGIpID0+IGIuc2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIGIuZ2V0QXR0cmlidXRlKCdkYXRhLXdpZHRoJykgPT09IHdpZHRoID8gJ3RydWUnIDogJ2ZhbHNlJykpO1xuICAgIC8vIEdyZXkgb3V0IHNpZGUvd2lkdGggd2hlbiBvbi1wYWdlIG92ZXJsYXkgaXMgZGlzYWJsZWQuXG4gICAgW292ZXJsYXlTaWRlUm93LCBvdmVybGF5V2lkdGhSb3ddLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICAgIChyb3cgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm9wYWNpdHkgPSBlbmFibGVkID8gJzEnIDogJzAuNSc7XG4gICAgICAocm93IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5wb2ludGVyRXZlbnRzID0gZW5hYmxlZCA/ICcnIDogJ25vbmUnO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3RhdHVzIGRvdHNcbiAgY29uc3QgemFwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1zdGF0dXMnKTtcbiAgY29uc3QgemFwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1kZXRhaWwnKTtcbiAgY29uc3QgbWNwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1zdGF0dXMnKTtcbiAgY29uc3QgbWNwUG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydCcpO1xuICBjb25zdCBjZHBTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXN0YXR1cycpO1xuICBjb25zdCBjZHBEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLWRldGFpbCcpO1xuICBjb25zdCBncHVTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3B1LXN0YXR1cycpO1xuICBjb25zdCBncHVEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3B1LWRldGFpbCcpO1xuXG4gIC8vIFNldHRpbmdzXG4gIGNvbnN0IG9wZW5TZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXNldHRpbmdzJyk7XG4gIGNvbnN0IGJhY2tCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFjay1idG4nKTtcbiAgY29uc3Qgc2F2ZVNldHRpbmdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmUtc2V0dGluZ3MnKTtcbiAgY29uc3QgdGVzdENvbm5lY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb25uZWN0aW9uJyk7XG5cbiAgY29uc3QgdXNlckluZm9TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItaW5mby1zZWN0aW9uJyk7XG5cbiAgLy8gLS0tIEF1dGggdmlhIGJhY2tncm91bmQgLS0tXG4gIGZ1bmN0aW9uIGNoZWNrQXV0aCgpIHtcbiAgICAvLyBBbHdheXMgc2hvdyBtYWluIHNlY3Rpb24gYW5kIHN0YXR1cyAodG9vbHMgd29yayB3aXRob3V0IGxvZ2luKVxuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIHJlZnJlc2hTdGF0dXMoKTtcblxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXV0aC5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICB1c2VySW5mb1NlY3Rpb24/LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICBpZiAocmVzcG9uc2UudXNlcikge1xuICAgICAgICAgIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWF2YXRhcicpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLW5hbWUnKTtcbiAgICAgICAgICBjb25zdCBlbWFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWVtYWlsJyk7XG4gICAgICAgICAgYXZhdGFyLnNyYyA9IHJlc3BvbnNlLnVzZXIucGljdHVyZSB8fCByZXNwb25zZS51c2VyLmF2YXRhciB8fCAnaWNvbjQ4LnBuZyc7XG4gICAgICAgICAgbmFtZS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLnVzZXIubmFtZSB8fCByZXNwb25zZS51c2VyLmRpc3BsYXlOYW1lIHx8ICdIYW56byBVc2VyJztcbiAgICAgICAgICBlbWFpbC50ZXh0Q29udGVudCA9IHJlc3BvbnNlLnVzZXIuZW1haWwgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgdXNlckluZm9TZWN0aW9uPy5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAobG9naW5CdG4gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgKGxvZ2luQnRuIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgbG9naW5CdG4udGV4dENvbnRlbnQgPSAnU2lnbiBJbic7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFNpZ251cCBidXR0b24gaW4gbG9naW4gY2FyZFxuICBjb25zdCBzaWdudXBCdG5Qb3B1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaWdudXAtYnRuLXBvcHVwJyk7XG4gIHNpZ251cEJ0blBvcHVwPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc2lnbnVwJyB9KTtcbiAgfSk7XG5cbiAgbG9nb3V0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9nb3V0JyB9LCAoKSA9PiB7XG4gICAgICBsb2dpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICB1c2VySW5mb1NlY3Rpb24/LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gT3BlbiBjaGF0IC0tLVxuICAvLyBEZWZhdWx0IHN1cmZhY2U6IGluLXBhZ2UgZWRnZS1waW5uZWQgb3ZlcmxheSAoY29udGVudC1zY3JpcHQpLiBIb25vdXJzXG4gIC8vIHRoZSB1c2VyJ3MgYG92ZXJsYXlFbmFibGVkYCwgYG92ZXJsYXlTaWRlYCwgYW5kIGBvdmVybGF5V2lkdGhgIHByZWZzLlxuICAvLyBXaGVuIGBvdmVybGF5RW5hYmxlZGAgaXMgZmFsc2UgKG9yIHRoZSBhY3RpdmUgdGFiIGlzIHByaXZpbGVnZWQpLCBvcGVuc1xuICAvLyB0aGUgY2hhdCBzdXJmYWNlIGluIGEgc3RhbmRhbG9uZSB0YWIuIEZpcmVmb3ggdXNlcnMgY2FuIGFsc28gcmVhY2ggaXRcbiAgLy8gdmlhIFZpZXcgXHUyMTkyIFNpZGViYXIgXHUyMTkyIEhhbnpvIEFJIChyZWdpc3RlcmVkIHZpYSBzaWRlYmFyX2FjdGlvbikuXG4gIGZ1bmN0aW9uIG9wZW5TaWRlYmFyVGFiKCkge1xuICAgIGNocm9tZS50YWJzLmNyZWF0ZSh7IHVybDogY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKCdzaWRlYmFyLmh0bWwnKSB9KTtcbiAgICB3aW5kb3cuY2xvc2UoKTtcbiAgfVxuXG4gIG9wZW5QYW5lbD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2hyb21lLnN0b3JhZ2U/LnN5bmM/LmdldD8uKFsnb3ZlcmxheUVuYWJsZWQnLCAnb3ZlcmxheVNpZGUnLCAnb3ZlcmxheVdpZHRoJ10sICh2YWxzKSA9PiB7XG4gICAgICBjb25zdCBlbmFibGVkID0gdmFscz8ub3ZlcmxheUVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgY29uc3Qgc2lkZSA9IHZhbHM/Lm92ZXJsYXlTaWRlID09PSAnbGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgY29uc3Qgd2lkdGg6IE92ZXJsYXlXaWR0aCA9IHZhbHM/Lm92ZXJsYXlXaWR0aCA9PT0gJ2NvbXBhY3QnXG4gICAgICAgID8gJ2NvbXBhY3QnIDogdmFscz8ub3ZlcmxheVdpZHRoID09PSAnd2lkZScgPyAnd2lkZScgOiAnZGVmYXVsdCc7XG4gICAgICBpZiAoIWVuYWJsZWQpIHsgb3BlblNpZGViYXJUYWIoKTsgcmV0dXJuOyB9XG4gICAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVUYWIgPSB0YWJzWzBdO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0luamVjdGFibGVUYWIoYWN0aXZlVGFiKSA/IGFjdGl2ZVRhYiA6IG51bGw7XG4gICAgICAgIGlmICghdGFyZ2V0Py5pZCkgeyBvcGVuU2lkZWJhclRhYigpOyByZXR1cm47IH1cbiAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe1xuICAgICAgICAgIGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS5zaG93JyxcbiAgICAgICAgICB0YWJJZDogdGFyZ2V0LmlkLFxuICAgICAgICAgIHNpZGUsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgIH0sICgpID0+IHdpbmRvdy5jbG9zZSgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBzZXRBY3RpdmVTaWRlKHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcpIHtcbiAgICBjaHJvbWUuc3RvcmFnZT8uc3luYz8uc2V0Py4oeyBvdmVybGF5U2lkZTogc2lkZSB9KTtcbiAgICBwaW5MZWZ0QnRuPy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgc2lkZSA9PT0gJ2xlZnQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgcGluUmlnaHRCdG4/LnNldEF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUnLCBzaWRlID09PSAncmlnaHQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGFic1swXT8uaWQ7XG4gICAgICBpZiAoaWQpIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnNldFNpZGUnLCB0YWJJZDogaWQsIHNpZGUgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0QWN0aXZlV2lkdGgod2lkdGg6IE92ZXJsYXlXaWR0aCkge1xuICAgIGNocm9tZS5zdG9yYWdlPy5zeW5jPy5zZXQ/Lih7IG92ZXJsYXlXaWR0aDogd2lkdGggfSk7XG4gICAgd2lkdGhCdG5zLmZvckVhY2goKGIpID0+IGIuc2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIGIuZ2V0QXR0cmlidXRlKCdkYXRhLXdpZHRoJykgPT09IHdpZHRoID8gJ3RydWUnIDogJ2ZhbHNlJykpO1xuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRhYnNbMF0/LmlkO1xuICAgICAgaWYgKGlkKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS5zZXRXaWR0aCcsIHRhYklkOiBpZCwgd2lkdGggfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0T3ZlcmxheUVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGNocm9tZS5zdG9yYWdlPy5zeW5jPy5zZXQ/Lih7IG92ZXJsYXlFbmFibGVkOiBlbmFibGVkIH0pO1xuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRhYnNbMF0/LmlkO1xuICAgICAgaWYgKGlkKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS5zZXRFbmFibGVkJywgdGFiSWQ6IGlkLCBlbmFibGVkIH0pO1xuICAgIH0pO1xuICAgIGNocm9tZS5zdG9yYWdlPy5zeW5jPy5nZXQ/LihbJ292ZXJsYXlTaWRlJywgJ292ZXJsYXlXaWR0aCddLCAodmFscykgPT4ge1xuICAgICAgY29uc3Qgc2lkZSA9IHZhbHM/Lm92ZXJsYXlTaWRlID09PSAnbGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgY29uc3Qgd2lkdGg6IE92ZXJsYXlXaWR0aCA9IHZhbHM/Lm92ZXJsYXlXaWR0aCA9PT0gJ2NvbXBhY3QnXG4gICAgICAgID8gJ2NvbXBhY3QnIDogdmFscz8ub3ZlcmxheVdpZHRoID09PSAnd2lkZScgPyAnd2lkZScgOiAnZGVmYXVsdCc7XG4gICAgICBzeW5jU2V0dGluZ3NVaShlbmFibGVkLCBzaWRlLCB3aWR0aCk7XG4gICAgfSk7XG4gIH1cblxuICBwaW5MZWZ0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHNldEFjdGl2ZVNpZGUoJ2xlZnQnKSk7XG4gIHBpblJpZ2h0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHNldEFjdGl2ZVNpZGUoJ3JpZ2h0JykpO1xuICB3aWR0aEJ0bnMuZm9yRWFjaCgoYikgPT4gYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCB3ID0gYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2lkdGgnKSBhcyBPdmVybGF5V2lkdGggfCBudWxsO1xuICAgIGlmICh3ID09PSAnY29tcGFjdCcgfHwgdyA9PT0gJ2RlZmF1bHQnIHx8IHcgPT09ICd3aWRlJykgc2V0QWN0aXZlV2lkdGgodyk7XG4gIH0pKTtcbiAgb3ZlcmxheUVuYWJsZWRDaGVja2JveD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICBzZXRPdmVybGF5RW5hYmxlZCgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCk7XG4gIH0pO1xuXG4gIC8vIEluaXRpYWwgVUkgc3luYyBmcm9tIHN0b3JhZ2UuXG4gIGNocm9tZS5zdG9yYWdlPy5zeW5jPy5nZXQ/LihbJ292ZXJsYXlFbmFibGVkJywgJ292ZXJsYXlTaWRlJywgJ292ZXJsYXlXaWR0aCddLCAodmFscykgPT4ge1xuICAgIGNvbnN0IGVuYWJsZWQgPSB2YWxzPy5vdmVybGF5RW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgY29uc3Qgc2lkZSA9IHZhbHM/Lm92ZXJsYXlTaWRlID09PSAnbGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIGNvbnN0IHdpZHRoOiBPdmVybGF5V2lkdGggPSB2YWxzPy5vdmVybGF5V2lkdGggPT09ICdjb21wYWN0J1xuICAgICAgPyAnY29tcGFjdCcgOiB2YWxzPy5vdmVybGF5V2lkdGggPT09ICd3aWRlJyA/ICd3aWRlJyA6ICdkZWZhdWx0JztcbiAgICBzeW5jU2V0dGluZ3NVaShlbmFibGVkLCBzaWRlLCB3aWR0aCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGlzSW5qZWN0YWJsZVRhYih0YWI6IGNocm9tZS50YWJzLlRhYiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGFiIHx8ICF0YWIuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB1cmwgPSB0YWIudXJsIHx8ICcnO1xuICAgIGlmICghdXJsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWU6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnY2hyb21lLWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdkZXZ0b29sczovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdlZGdlOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Fib3V0OicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCd2aWV3LXNvdXJjZTonKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnbW96LWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvcGVuUGFnZU92ZXJsYXk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdPcGVuaW5nLi4uJztcbiAgICBvcGVuUGFnZU92ZXJsYXkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG5cbiAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGFic1swXTtcbiAgICAgIGxldCB0YXJnZXRUYWIgPSBpc0luamVjdGFibGVUYWIoYWN0aXZlVGFiKSA/IGFjdGl2ZVRhYiA6IG51bGw7XG5cbiAgICAgIGlmICghdGFyZ2V0VGFiKSB7XG4gICAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAoYWxsVGFicykgPT4ge1xuICAgICAgICAgIHRhcmdldFRhYiA9IGFsbFRhYnMuZmluZCgodGFiKSA9PiBpc0luamVjdGFibGVUYWIodGFiKSkgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyB2YWxpZCBwYWdlIHRhYic7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdVbmF2YWlsYWJsZSBvbiB0aGlzIHBhZ2UnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gb3BlbmVkID8gJ092ZXJsYXkgT3BlbmVkJyA6ICdPdmVybGF5IEhpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgOTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXRUYWI/LmlkKSB7XG4gICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyBBY3RpdmUgVGFiJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH0sIDEyMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnRvZ2dsZScsIHRhYklkOiB0YXJnZXRUYWIuaWQgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgOTAwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gU3RhdHVzIC0tLVxuICBmdW5jdGlvbiBzZXRTdGF0dXMoZG90OiBIVE1MRWxlbWVudCwgZGV0YWlsOiBIVE1MRWxlbWVudCwgY29ubmVjdGVkOiBib29sZWFuLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnY29ubmVjdGVkJywgY29ubmVjdGVkKTtcbiAgICBkb3QuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzY29ubmVjdGVkJywgIWNvbm5lY3RlZCk7XG4gICAgZGV0YWlsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTdGF0dXMoKSB7XG4gICAgLy8gWkFQIEJyaWRnZVxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgemFwID0gcmVzcG9uc2UuemFwO1xuICAgICAgICBpZiAoemFwLmNvbm5lY3RlZCkge1xuICAgICAgICAgIGNvbnN0IG1jcENvdW50ID0gemFwLm1jcHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRvb2xDb3VudCA9IHphcC5tY3BzPy5yZWR1Y2UoKHN1bTogbnVtYmVyLCBtOiBhbnkpID0+IHN1bSArIChtLnRvb2xzPy5sZW5ndGggfHwgMCksIDApIHx8IDA7XG4gICAgICAgICAgc2V0U3RhdHVzKHphcFN0YXR1cywgemFwRGV0YWlsLCB0cnVlLCBgJHttY3BDb3VudH0gTUNQLCAke3Rvb2xDb3VudH0gdG9vbHNgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTdGF0dXMoemFwU3RhdHVzLCB6YXBEZXRhaWwsIGZhbHNlLCAnTm90IGNvbm5lY3RlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDRFAgQnJpZGdlXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdicmlkZ2Uuc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgYnJvd3NlcnMgPSByZXNwb25zZS5icm93c2VycyB8fCBbXTtcbiAgICAgICAgc2V0U3RhdHVzKGNkcFN0YXR1cywgY2RwRGV0YWlsLCB0cnVlLCBicm93c2Vycy5sZW5ndGggPyBgQ29ubmVjdGVkYCA6ICdDb25uZWN0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFN0YXR1cyhjZHBTdGF0dXMsIGNkcERldGFpbCwgZmFsc2UsICdOb3QgY29ubmVjdGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBNQ1AgQnJpZGdlIFx1MjAxNCBwcm9iZSB0aGUgY29uZmlndXJlZCBwb3J0IChkZWZhdWx0IDkyMjQgZm9yIGhhbnpvLW1jcCBIVFRQKS5cbiAgICAvLyBGYWxscyBiYWNrIHRvIDkyMjQgb25seSBpZiBzdG9yYWdlIGhhc24ndCBiZWVuIHdyaXR0ZW4geWV0LCBidXQgYWx3YXlzXG4gICAgLy8gU0hPV1MgdGhlIGFjdHVhbCBwb3J0IHRoYXQgd2FzIHByb2JlZCBzbyB0aGUgdXNlciBpc24ndCBsaWVkIHRvLlxuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLmdldChbJ21jcEJyaWRnZVBvcnQnXSwgKHMpID0+IHtcbiAgICAgIGNvbnN0IHByb2JlUG9ydCA9IE51bWJlcihzLm1jcEJyaWRnZVBvcnQpIHx8IDkyMjQ7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovL2xvY2FsaG9zdDoke3Byb2JlUG9ydH1gO1xuICAgICAgY29uc3Qgb2ZmbGluZSA9ICgpID0+IHNldFN0YXR1cyhtY3BTdGF0dXMsIG1jcFBvcnQsIGZhbHNlLCBgOiR7cHJvYmVQb3J0fSBvZmZsaW5lYCk7XG4gICAgICB0cnkge1xuICAgICAgICBmZXRjaCh1cmwsIHsgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDIwMDApIH0pXG4gICAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSlcbiAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhPy5zZXJ2aWNlID09PSAnaGFuem8uYnJvd3NlcicpIHtcbiAgICAgICAgICAgICAgc2V0U3RhdHVzKG1jcFN0YXR1cywgbWNwUG9ydCwgdHJ1ZSwgYDoke3Byb2JlUG9ydH0gT0tgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFN0YXR1cyhtY3BTdGF0dXMsIG1jcFBvcnQsIGZhbHNlLCBgOiR7cHJvYmVQb3J0fSBOL0FgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChvZmZsaW5lKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBvZmZsaW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBXZWJHUFVcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3J1bkxvY2FsQUknLCBwcm9tcHQ6ICcnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgc2V0U3RhdHVzKGdwdVN0YXR1cywgZ3B1RGV0YWlsLCAhIXJlc3BvbnNlPy5zdWNjZXNzLCByZXNwb25zZT8uc3VjY2VzcyA/ICdBdmFpbGFibGUnIDogJ05vdCBhdmFpbGFibGUnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBTZXR0aW5ncyAtLS1cbiAgb3BlblNldHRpbmdzPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICBzZXR0aW5nc1NlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgbG9hZFNldHRpbmdzKCk7XG4gIH0pO1xuXG4gIGJhY2tCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIHNldHRpbmdzU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCkge1xuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLmdldChbJ21jcFBvcnQnLCAnY2RwUG9ydCcsICd6YXBQb3J0cyddLCAocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBtY3BQb3J0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQtc2V0dGluZycpIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgICAgY29uc3QgY2RwUG9ydElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1wb3J0LXNldHRpbmcnKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICAgIGNvbnN0IHphcFBvcnRzSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICAgICAgaWYgKG1jcFBvcnRJbnB1dCkgbWNwUG9ydElucHV0LnZhbHVlID0gU3RyaW5nKHJlc3VsdC5tY3BQb3J0IHx8IDMwMDEpO1xuICAgICAgaWYgKGNkcFBvcnRJbnB1dCkgY2RwUG9ydElucHV0LnZhbHVlID0gU3RyaW5nKHJlc3VsdC5jZHBQb3J0IHx8IDkyMjMpO1xuICAgICAgaWYgKHphcFBvcnRzSW5wdXQpIHphcFBvcnRzSW5wdXQudmFsdWUgPSAocmVzdWx0LnphcFBvcnRzIHx8IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSkuam9pbignLCcpO1xuICAgIH0pO1xuXG4gICAgLy8gSW5zcGVjdC1tb2RpZmllciBkaXNwbGF5ICsgcmVjb3JkZXIuXG4gICAgcmVmcmVzaFNob3J0Y3V0RGlzcGxheSgpO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIEluc3BlY3QgU2hvcnRjdXQgUmVjb3JkZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIC8vIFNob3dzIHRoZSBjdXJyZW50IGNob3JkOyBjbGlja2luZyBcIlJlY29yZFwiIGNhcHR1cmVzIGEgc2luZ2xlIGtleWRvd25cbiAgLy8gYW5kIHNhdmVzIHRoZSByZXN1bHRpbmcgU2hvcnRjdXQgdG8gY2hyb21lLnN0b3JhZ2UubG9jYWwuIENvbnRlbnRcbiAgLy8gc2NyaXB0cyB3YXRjaCBzdG9yYWdlIGZvciBjaGFuZ2VzIGFuZCB1cGRhdGUgd2l0aG91dCBwYWdlIHJlbG9hZC5cbiAgbGV0IHJlY29yZGluZ1Nob3J0Y3V0ID0gZmFsc2U7XG4gIGxldCByZWNvcmRpbmdIYW5kbGVyOiAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFNob3J0Y3V0RGlzcGxheSgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3BlY3Qtc2hvcnRjdXQtZGlzcGxheScpO1xuICAgIGNvbnN0IHNldHRpbmdzRGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnNwZWN0LXNob3J0Y3V0LWN1cnJlbnQnKTtcbiAgICBjb25zdCBzID0gYXdhaXQgbG9hZEluc3BlY3RTaG9ydGN1dChjaHJvbWUuc3RvcmFnZS5sb2NhbCBhcyBhbnkpO1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTaG9ydGN1dChzKTtcbiAgICBpZiAoZGlzcGxheSkgZGlzcGxheS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgaWYgKHNldHRpbmdzRGlzcGxheSkgc2V0dGluZ3NEaXNwbGF5LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvLyBJbml0aWFsIHJlbmRlciBiZWZvcmUgc2V0dGluZ3MgcGFuZWwgaXMgb3BlbmVkIChoZWFkZXIgY2hpcCkuXG4gIHJlZnJlc2hTaG9ydGN1dERpc3BsYXkoKTtcblxuICBmdW5jdGlvbiBzdGFydFJlY29yZGluZyhsYWJlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAocmVjb3JkaW5nU2hvcnRjdXQpIHJldHVybjtcbiAgICByZWNvcmRpbmdTaG9ydGN1dCA9IHRydWU7XG4gICAgbGFiZWwudGV4dENvbnRlbnQgPSAnUHJlc3MgYSBrZXlcdTIwMjYnO1xuICAgIHJlY29yZGluZ0hhbmRsZXIgPSBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IG5leHQgPSBzaG9ydGN1dEZyb21FdmVudChlKTtcbiAgICAgIGlmICghbmV4dCkge1xuICAgICAgICAvLyBUYWIvRXNjIHByZXNzZWQgXHUyMDE0IGJhaWwgb3V0IHdpdGhvdXQgc2F2aW5nLlxuICAgICAgICBzdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNhdmVJbnNwZWN0U2hvcnRjdXQoY2hyb21lLnN0b3JhZ2UubG9jYWwgYXMgYW55LCBuZXh0KTtcbiAgICAgIHN0b3BSZWNvcmRpbmcoKTtcbiAgICAgIHJlZnJlc2hTaG9ydGN1dERpc3BsYXkoKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCByZWNvcmRpbmdIYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgLy8gU2FmZXR5OiBjYW5jZWwgcmVjb3JkaW5nIGFmdGVyIDEwcyBpbiBjYXNlIHRoZSB1c2VyIHdhbmRlcnMgb2ZmLlxuICAgIHNldFRpbWVvdXQoKCkgPT4geyBpZiAocmVjb3JkaW5nU2hvcnRjdXQpIHN0b3BSZWNvcmRpbmcoKTsgfSwgMTAwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RvcFJlY29yZGluZygpIHtcbiAgICBpZiAocmVjb3JkaW5nSGFuZGxlcikgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHJlY29yZGluZ0hhbmRsZXIsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICByZWNvcmRpbmdIYW5kbGVyID0gbnVsbDtcbiAgICByZWNvcmRpbmdTaG9ydGN1dCA9IGZhbHNlO1xuICAgIHJlZnJlc2hTaG9ydGN1dERpc3BsYXkoKTtcbiAgfVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmQtaW5zcGVjdC1zaG9ydGN1dCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zcGVjdC1zaG9ydGN1dC1kaXNwbGF5Jyk7XG4gICAgaWYgKGRpc3BsYXkpIHN0YXJ0UmVjb3JkaW5nKGRpc3BsYXkpO1xuICB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3BlY3Qtc2hvcnRjdXQtcmVjb3JkJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnNwZWN0LXNob3J0Y3V0LWN1cnJlbnQnKTtcbiAgICBpZiAoZGlzcGxheSkgc3RhcnRSZWNvcmRpbmcoZGlzcGxheSk7XG4gIH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zcGVjdC1zaG9ydGN1dC1yZXNldCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHNhdmVJbnNwZWN0U2hvcnRjdXQoY2hyb21lLnN0b3JhZ2UubG9jYWwgYXMgYW55LCB7IC4uLkRFRkFVTFRfSU5TUEVDVF9TSE9SVENVVCB9KTtcbiAgICByZWZyZXNoU2hvcnRjdXREaXNwbGF5KCk7XG4gIH0pO1xuXG4gIHNhdmVTZXR0aW5ncz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3QgbWNwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCAzMDAxO1xuICAgIGNvbnN0IGNkcFBvcnRWYWwgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpPy52YWx1ZSkgfHwgOTIyMztcbiAgICBjb25zdCB6YXBQb3J0c1ZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKT8udmFsdWUgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKS5tYXAocCA9PiBwYXJzZUludChwLnRyaW0oKSkpLmZpbHRlcihwID0+IHAgPiAwICYmIHAgPCA2NTUzNik7XG5cbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoe1xuICAgICAgbWNwUG9ydDogbWNwUG9ydFZhbCxcbiAgICAgIGNkcFBvcnQ6IGNkcFBvcnRWYWwsXG4gICAgICB6YXBQb3J0czogemFwUG9ydHNWYWwubGVuZ3RoID8gemFwUG9ydHNWYWwgOiBbOTk5OSwgOTk5OCwgOTk5NywgOTk5NiwgOTk5NV0sXG4gICAgfSwgKCkgPT4ge1xuICAgICAgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmVkISc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmUgU2V0dGluZ3MnOyB9LCAxNTAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIFRlc3QgQ29ubmVjdGlvbiAtLS1cbiAgdGVzdENvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3RpbmcuLi4nO1xuICAgIHRlc3RDb25uZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLmRpc2NvdmVyJyB9LCAoKSA9PiB7XG4gICAgICByZWZyZXNoU3RhdHVzKCk7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi50ZXh0Q29udGVudCA9ICdUZXN0IENvbm5lY3Rpb24nO1xuICAgICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gRmVhdHVyZSB0b2dnbGVzXG4gIFsnc291cmNlLW1hcHMnLCAnd2ViZ3B1LWFpJywgJ2Jyb3dzZXItY29udHJvbCcsICd0YWItZmlsZXN5c3RlbSddLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChjaGVja2JveCkge1xuICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFtpZF0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHJlc3VsdFtpZF0gIT09IGZhbHNlOyAvLyBkZWZhdWx0IG9uXG4gICAgICB9KTtcbiAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuc2V0KHsgW2lkXTogY2hlY2tib3guY2hlY2tlZCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gLS0tIEJyb3dzZXIgQmFja2VuZCBQaWNrZXIgLS0tXG4gIGNvbnN0IGJhY2tlbmRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJvd3Nlci1iYWNrZW5kJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBicmlkZ2VTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLXN0YXR1cycpO1xuICBjb25zdCBicmlkZ2VEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLWRldGFpbCcpO1xuXG4gIGZ1bmN0aW9uIGxvYWRCYWNrZW5kUHJlZmVyZW5jZSgpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbJ2Jyb3dzZXJCYWNrZW5kJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChiYWNrZW5kU2VsZWN0ICYmIHJlc3VsdC5icm93c2VyQmFja2VuZCkge1xuICAgICAgICBiYWNrZW5kU2VsZWN0LnZhbHVlID0gcmVzdWx0LmJyb3dzZXJCYWNrZW5kO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaEJyaWRnZVN0YXR1cygpIHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2JyaWRnZS5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5hZGQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgICBjb25zdCBicm93c2VycyA9IHJlc3BvbnNlLmJyb3dzZXJzIHx8IFtdO1xuICAgICAgICBicmlkZ2VEZXRhaWwudGV4dENvbnRlbnQgPSBicm93c2Vycy5sZW5ndGhcbiAgICAgICAgICA/IGBDb25uZWN0ZWQ6ICR7YnJvd3NlcnMuam9pbignLCAnKX1gXG4gICAgICAgICAgOiAnQ29ubmVjdGVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9ICdOb3QgY29ubmVjdGVkJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGJhY2tlbmRTZWxlY3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhY2tlbmRTZWxlY3QudmFsdWU7XG5cbiAgICAvLyBTYXZlIHRvIGNocm9tZS5zdG9yYWdlLnN5bmMgKGNyb3NzLWRldmljZSlcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldCh7IGJyb3dzZXJCYWNrZW5kOiB2YWx1ZSB9KTtcblxuICAgIC8vIEZvcndhcmQgdG8gYmFja2dyb3VuZCB0byBwZXJzaXN0IHZpYSBDRFAgYnJpZGdlICsgc3luYyB0byBJQU1cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG4gICAgICBhY3Rpb246ICdjb25maWcuc2F2ZScsXG4gICAgICBrZXk6ICdicm93c2VyQmFja2VuZCcsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCk7XG4gIHJlZnJlc2hCcmlkZ2VTdGF0dXMoKTtcblxuICAvLyAtLS0gVG9vbHMgLS0tXG5cbiAgZnVuY3Rpb24gc2hvd1Rvb2xGZWVkYmFjayhidG46IEhUTUxFbGVtZW50LCB0ZXh0OiBzdHJpbmcsIGR1cmF0aW9uID0gMTIwMCkge1xuICAgIGNvbnN0IGZiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZmIuY2xhc3NOYW1lID0gJ3Rvb2wtZmVlZGJhY2snO1xuICAgIGZiLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICBidG4uc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIGJ0bi5hcHBlbmRDaGlsZChmYik7XG4gICAgc2V0VGltZW91dCgoKSA9PiBmYi5yZW1vdmUoKSwgZHVyYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWN0aXZlVGFiKCk6IFByb21pc2U8Y2hyb21lLnRhYnMuVGFiIHwgbnVsbD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0YWJzWzBdICYmIGlzSW5qZWN0YWJsZVRhYih0YWJzWzBdKSA/IHRhYnNbMF0gOiBudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRWxlbWVudCBQaWNrZXIgLyBTZWxlY3RvciB0b29sXG4gIGNvbnN0IHRvb2xQaWNrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbC1waWNrZXInKTtcbiAgdG9vbFBpY2tlcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0QWN0aXZlVGFiKCk7XG4gICAgaWYgKCF0YWI/LmlkKSB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQaWNrZXIsICdObyBwYWdlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNlbmQgbWVzc2FnZSB0byBjb250ZW50IHNjcmlwdCB0byBzdGFydCBwaWNrZXIgbW9kZVxuICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYi5pZCwgeyBhY3Rpb246ICd0b29sLnBpY2tlci5zdGFydCcgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yIHx8ICFyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQaWNrZXIsICdOL0EnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGlja2VyLCAnUGljay4uLicpO1xuICAgICAgLy8gQ2xvc2UgcG9wdXAgc28gdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cuY2xvc2UoKSwgNDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gU2NyZWVuc2hvdCB0b29sXG4gIGNvbnN0IHRvb2xTY3JlZW5zaG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2wtc2NyZWVuc2hvdCcpO1xuICB0b29sU2NyZWVuc2hvdD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgdG9vbFNjcmVlbnNob3Quc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNocm9tZS50YWJzLmNhcHR1cmVWaXNpYmxlVGFiKG51bGwgYXMgYW55LCB7IGZvcm1hdDogJ3BuZycgfSwgKGRhdGFVcmwpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhZGF0YVVybCkge1xuICAgICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFNjcmVlbnNob3QsICdGYWlsZWQnKTtcbiAgICAgICAgICB0b29sU2NyZWVuc2hvdC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvcHkgdG8gY2xpcGJvYXJkIGFzIGltYWdlXG4gICAgICAgIGZldGNoKGRhdGFVcmwpXG4gICAgICAgICAgLnRoZW4ociA9PiByLmJsb2IoKSlcbiAgICAgICAgICAudGhlbihibG9iID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgQ2xpcGJvYXJkSXRlbSh7ICdpbWFnZS9wbmcnOiBibG9iIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW2l0ZW1dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFNjcmVlbnNob3QsICdDb3BpZWQhJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2s6IG9wZW4gaW4gbmV3IHRhYlxuICAgICAgICAgICAgY2hyb21lLnRhYnMuY3JlYXRlKHsgdXJsOiBkYXRhVXJsIH0pO1xuICAgICAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sU2NyZWVuc2hvdCwgJ09wZW5lZCcpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdG9vbFNjcmVlbnNob3QucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xTY3JlZW5zaG90LCAnRXJyb3InKTtcbiAgICAgIHRvb2xTY3JlZW5zaG90LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhZ2UgSW5mbyB0b29sXG4gIGNvbnN0IHRvb2xQYWdlSW5mbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sLXBhZ2VpbmZvJyk7XG4gIHRvb2xQYWdlSW5mbz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0QWN0aXZlVGFiKCk7XG4gICAgaWYgKCF0YWI/LmlkKSB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQYWdlSW5mbywgJ05vIHBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiLmlkLCB7IGFjdGlvbjogJ3Rvb2wucGFnZWluZm8nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IGJhc2ljIGluZm8gZnJvbSB0YWIgb2JqZWN0XG4gICAgICAgIGNvbnN0IGluZm8gPSBgVGl0bGU6ICR7dGFiLnRpdGxlfVxcblVSTDogJHt0YWIudXJsfWA7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGluZm8pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBhZ2VJbmZvLCAnQ29waWVkIScpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocmVzcG9uc2UuaW5mbykudGhlbigoKSA9PiB7XG4gICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBhZ2VJbmZvLCAnQ29waWVkIScpO1xuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQYWdlSW5mbywgJ0ZhaWxlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEFjY2Vzc2liaWxpdHkgQXVkaXQgdG9vbFxuICBjb25zdCB0b29sQTExeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sLWFjY2Vzc2liaWxpdHknKTtcbiAgdG9vbEExMXk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldEFjdGl2ZVRhYigpO1xuICAgIGlmICghdGFiPy5pZCkge1xuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQTExeSwgJ05vIHBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9vbEExMXkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQTExeSwgJ1J1bm5pbmcuLi4nKTtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1ZGl0LmFjY2Vzc2liaWxpdHknLCB0YWJJZDogdGFiLmlkIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgdG9vbEExMXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQTExeSwgJ0ZhaWxlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb3VudCA9IHJlc3BvbnNlLmlzc3Vlcz8ubGVuZ3RoIHx8IDA7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xBMTF5LCBjb3VudCA/IGAke2NvdW50fSBpc3N1ZXNgIDogJ0NsZWFuIScpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBQZXJmb3JtYW5jZSBBdWRpdCB0b29sXG4gIGNvbnN0IHRvb2xQZXJmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2wtcGVyZm9ybWFuY2UnKTtcbiAgdG9vbFBlcmY/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldEFjdGl2ZVRhYigpO1xuICAgIGlmICghdGFiPy5pZCkge1xuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGVyZiwgJ05vIHBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9vbFBlcmYuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGVyZiwgJ1J1bm5pbmcuLi4nKTtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1ZGl0LnBlcmZvcm1hbmNlJywgdGFiSWQ6IHRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIHRvb2xQZXJmLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBlcmYsICdGYWlsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGVyZiwgJ0RvbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29uc29sZSB0b29sIFx1MjAxNCBldmFsdWF0ZSBKU1xuICBjb25zdCB0b29sQ29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sLWNvbnNvbGUnKTtcbiAgdG9vbENvbnNvbGU/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldEFjdGl2ZVRhYigpO1xuICAgIGlmICghdGFiPy5pZCkge1xuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQ29uc29sZSwgJ05vIHBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2VuZCB0byBjb250ZW50IHNjcmlwdCB0byBzdGFydCBhbiBpbmxpbmUgZXZhbCBwcm9tcHRcbiAgICBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWIuaWQsIHsgYWN0aW9uOiAndG9vbC5jb25zb2xlLnN0YXJ0JyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbENvbnNvbGUsICdOL0EnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQ29uc29sZSwgJ09wZW4nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LmNsb3NlKCksIDQwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEluaXRcbiAgY2hlY2tBdXRoKCk7XG59KTtcbiIsICIvKipcbiAqIEtleWJvYXJkLXNob3J0Y3V0IGNvbmZpZ3VyYXRpb24gc2hhcmVkIGJldHdlZW4gY29udGVudCBzY3JpcHRzLCB0aGVcbiAqIHBvcHVwIHJlY29yZGVyLCBhbmQgdGhlIGJhY2tncm91bmQuIEEgXCJzaG9ydGN1dFwiIGlzIGEgbm9ybWFsaXNlZFxuICogZGVzY3JpcHRpb24gb2YgYSBrZXlib2FyZCBjaG9yZCAobW9kaWZpZXJzICsga2V5KSB0aGF0IHRlbGxzIHRoZVxuICogY29udGVudCBzY3JpcHQgd2hpY2ggY29tYmluYXRpb24gdG9nZ2xlcyBpbnNwZWN0IC8gY2xpY2stdG8tc291cmNlXG4gKiBuYXZpZ2F0aW9uLiBUaGUgZGVmYXVsdCBpcyAqKkN0cmwqKiBhbG9uZSAoTWFjIHVzZXJzIHdvdWxkIG90aGVyd2lzZVxuICogbmVlZCB0byBob2xkIE9wdGlvbiwgd2hpY2ggaW50ZXJmZXJlcyB3aXRoIG5hdGl2ZSBtYWNPUyBjaGFyYWN0ZXJcbiAqIGlucHV0KS4gQW55IGNvbWJpbmF0aW9uIGlzIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHRoZSBwb3B1cC5cbiAqXG4gKiBTdG9yYWdlIHNoYXBlOiBgY2hyb21lLnN0b3JhZ2UubG9jYWxbXCJoYW56b19zaG9ydGN1dF9pbnNwZWN0XCJdID0gU2hvcnRjdXRgLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvcnRjdXQge1xuICAvKiogV2hldGhlciBDdHJsIChvciBDbWQgb24gbWFjT1MpIGlzIHBhcnQgb2YgdGhlIGNob3JkLiAqL1xuICBjdHJsOiBib29sZWFuO1xuICAvKiogQ21kL01ldGEga2V5IChtYWNPUykgXHUyMDE0IGJvdW5kIHNlcGFyYXRlbHkgZnJvbSBDdHJsLiAqL1xuICBtZXRhOiBib29sZWFuO1xuICBhbHQ6IGJvb2xlYW47XG4gIHNoaWZ0OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgbGV0dGVyIG9yIGBLZXkqYCB2YWx1ZS4gRW1wdHkgc3RyaW5nIG1lYW5zIG1vZGlmaWVyLW9ubHkuICovXG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgU1RPUkFHRV9LRVlfSU5TUEVDVCA9ICdoYW56b19zaG9ydGN1dF9pbnNwZWN0JztcblxuLyoqXG4gKiBEZWZhdWx0IGluc3BlY3QtbW9kaWZpZXI6ICoqQ3RybCoqIChvciBDbWQgb24gbWFjT1MpIGFsb25lLlxuICpcbiAqIFdoeSBub3QgQWx0L09wdGlvbj8gT24gbWFjT1MsIE9wdGlvbiBpcyB0aGUgc3lzdGVtLWxldmVsIGNoYXJhY3Rlci1cbiAqIGNvbXBvc2UgbW9kaWZpZXIgKE9wdGlvbi1jIFx1MjE5MiBcdTAwRTcsIE9wdGlvbi0zIFx1MjE5MiBcdTAwQTMpLiBVc2luZyBPcHRpb24gZm9yIG91clxuICogaW5zcGVjdG9yIHNpbGVudGx5IHN3YWxsb3dzIHJlYWwgdXNlciBrZXlzdHJva2VzIGFuZCBjb3JydXB0cyB0ZXh0XG4gKiBpbnB1dCBvbiBldmVyeSBwYWdlIHRoYXQgaGFzIHVzIGluamVjdGVkLiBDdHJsIGlzIHRoZSBuYXR1cmFsIGNob2ljZVxuICogZm9yIGEgZGV2ZWxvcGVyLXRvb2xzIG1vZGlmaWVyIChhbmQgbWF0Y2hlcyBEZXZUb29scycgSW5zcGVjdCBFbGVtZW50XG4gKiBiZWhhdmlvdXIgb24gZXZlcnkgYnJvd3NlcikuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOU1BFQ1RfU0hPUlRDVVQ6IFNob3J0Y3V0ID0ge1xuICBjdHJsOiB0cnVlLFxuICBtZXRhOiBmYWxzZSxcbiAgYWx0OiBmYWxzZSxcbiAgc2hpZnQ6IGZhbHNlLFxuICBrZXk6ICcnLFxufTtcblxuLyoqXG4gKiBNYXRjaCBhIGtleWJvYXJkIC8gbW91c2UgZXZlbnQgYWdhaW5zdCBhIFNob3J0Y3V0LiBSZXR1cm5zIHRydWUgaWZmXG4gKiBldmVyeSByZXF1aXJlZCBtb2RpZmllciBpcyBoZWxkIEFORCBldmVyeSBub24tcmVxdWlyZWQgbW9kaWZpZXIgaXNcbiAqIE5PVCBoZWxkIEFORCB0aGUga2V5IG1hdGNoZXMgKG9yIGBrZXkgPT09ICcnYCBmb3IgbW9kaWZpZXItb25seSkuXG4gKlxuICogT24gbWFjT1MsIGN0cmwgbWF0Y2hlcyBgZXZlbnQubWV0YUtleWAgaWYgdGhlIHNhdmVkIHNob3J0Y3V0IGhhc1xuICogbWV0YT10cnVlIE9SIGN0cmw9dHJ1ZSAod2UgdHJlYXQgQ3RybC1vbi1NYWMgYW5kIENtZCBhcyBlcXVpdmFsZW50XG4gKiBmb3IgdGhlIGRlZmF1bHQgXHUyMDE0IG1hbnkgZGV2cyBhc3N1bWUgXCJDdHJsXCIgcmVhbGx5IG1lYW5zIFwidGhlIHBsYXRmb3JtXG4gKiBwcmltYXJ5IG1vZGlmaWVyXCIpLiBUbyBhZGRyZXNzIGV4cGxpY2l0bHksIHNldCBjdHJsPWZhbHNlIG1ldGE9dHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNTaG9ydGN1dChcbiAgZTogeyBjdHJsS2V5PzogYm9vbGVhbjsgbWV0YUtleT86IGJvb2xlYW47IGFsdEtleT86IGJvb2xlYW47IHNoaWZ0S2V5PzogYm9vbGVhbjsga2V5Pzogc3RyaW5nIH0sXG4gIHM6IFNob3J0Y3V0LFxuKTogYm9vbGVhbiB7XG4gIC8vIFJlcXVpcmVkIG1vZGlmaWVycyBcdTIwMTQgZXZlcnkgdHJ1dGh5IGZpZWxkIG9mIGBzYCBtdXN0IGJlIHNldCBvbiB0aGUgZXZlbnQuXG4gIGlmIChzLmN0cmwgJiYgIWUuY3RybEtleSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5tZXRhICYmICFlLm1ldGFLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHMuYWx0ICYmICFlLmFsdEtleSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5zaGlmdCAmJiAhZS5zaGlmdEtleSkgcmV0dXJuIGZhbHNlO1xuICAvLyBGb3JiaWRkZW4gbW9kaWZpZXJzIFx1MjAxNCBldmVyeSBmYWxzZSBmaWVsZCBvZiBgc2AgbXVzdCBOT1QgYmUgc2V0IG9uXG4gIC8vIHRoZSBldmVudC4gT3RoZXJ3aXNlIEN0cmwtb25seSB3b3VsZCBtYXRjaCBDdHJsLVNoaWZ0LVggdG9vLCB3aGljaFxuICAvLyB3b3VsZCBzdXJwcmlzZSB1c2VycyB3aG8gY29uZmlndXJlZCBDdHJsIGFsb25lLlxuICBpZiAoIXMuY3RybCAmJiBlLmN0cmxLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFzLm1ldGEgJiYgZS5tZXRhS2V5KSByZXR1cm4gZmFsc2U7XG4gIGlmICghcy5hbHQgJiYgZS5hbHRLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFzLnNoaWZ0ICYmIGUuc2hpZnRLZXkpIHJldHVybiBmYWxzZTtcbiAgLy8gS2V5IG1hdGNoIChjYXNlLWluc2Vuc2l0aXZlKS4gRW1wdHkga2V5IG1lYW5zIHRoZSBjaG9yZCBpc1xuICAvLyBtb2RpZmllci1vbmx5IFx1MjAxNCBhbnkgc3Vic2VxdWVudCBrZXkgc3RpbGwgc2F0aXNmaWVzIGl0LlxuICBpZiAocy5rZXkgJiYgKGUua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpICE9PSBzLmtleS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlbmRlciBhIFNob3J0Y3V0IGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGxpa2UgXCJDdHJsK1NoaWZ0K0tcIiBvclxuICogXCJcdTIzMTgrQ2xpY2tcIi4gVXNlZCBieSB0aGUgcG9wdXAgVUkgYW5kIGFueSBwbGFjZSB3ZSBzdXJmYWNlIHRoZSBjaG9yZFxuICogdG8gdGhlIHVzZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTaG9ydGN1dChzOiBTaG9ydGN1dCwgb3B0cz86IHsgbWFjPzogYm9vbGVhbjsgY2xpY2s/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuICBjb25zdCBtYWMgPSBvcHRzPy5tYWMgPz8gKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9NYWMvaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSB8fCAnJykpO1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHMuY3RybCkgcGFydHMucHVzaChtYWMgPyAnXHUyMzAzJyA6ICdDdHJsJyk7XG4gIGlmIChzLm1ldGEpIHBhcnRzLnB1c2gobWFjID8gJ1x1MjMxOCcgOiAnTWV0YScpO1xuICBpZiAocy5hbHQpIHBhcnRzLnB1c2gobWFjID8gJ1x1MjMyNScgOiAnQWx0Jyk7XG4gIGlmIChzLnNoaWZ0KSBwYXJ0cy5wdXNoKG1hYyA/ICdcdTIxRTcnIDogJ1NoaWZ0Jyk7XG4gIGlmIChzLmtleSkgcGFydHMucHVzaChzLmtleS5sZW5ndGggPT09IDEgPyBzLmtleS50b1VwcGVyQ2FzZSgpIDogcy5rZXkpO1xuICBpZiAob3B0cz8uY2xpY2spIHBhcnRzLnB1c2goJ0NsaWNrJyk7XG4gIHJldHVybiBwYXJ0cy5qb2luKCcrJykgfHwgJyh1bnNldCknO1xufVxuXG4vKipcbiAqIE5vcm1hbGlzZSBhIGZyZXNoIGtleWRvd24gaW50byBhIFNob3J0Y3V0IHBheWxvYWQuIERyb3BzIFRhYi9Fc2MvZXRjLlxuICogKHRoZSByZWNvcmRlciBVSSBpbnZpdGVzIHRoZSB1c2VyIHRvIHByZXNzIGEgY2hvcmQsIG5vdCB0byBuYXZpZ2F0ZVxuICogdGhlIHBhZ2UpIGFuZCByZWplY3RzIHB1cmUgbW9kaWZpZXIga2V5ZG93bnMgc28gdGhlIHJlY29yZGVyIGRvZXNuJ3RcbiAqIGZpcmUgb24gZXZlcnkgU2hpZnQgcHJlc3Mgd2hpbGUgdGhlIHVzZXIgaXMgcmVhY2hpbmcgZm9yIGEgbGV0dGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvcnRjdXRGcm9tRXZlbnQoXG4gIGU6IHsgY3RybEtleT86IGJvb2xlYW47IG1ldGFLZXk/OiBib29sZWFuOyBhbHRLZXk/OiBib29sZWFuOyBzaGlmdEtleT86IGJvb2xlYW47IGtleT86IHN0cmluZyB9LFxuKTogU2hvcnRjdXQgfCBudWxsIHtcbiAgY29uc3QgayA9IGUua2V5IHx8ICcnO1xuICAvLyBNb2RpZmllci1vbmx5IGlzIGEgdmFsaWQgc2hvcnRjdXQsIGJ1dCB0aGUga2V5ZG93biBldmVudCBmb3IgYSBwdXJlXG4gIC8vIG1vZGlmaWVyIChDb250cm9sIC8gU2hpZnQgLyBBbHQgLyBNZXRhKSByZXBvcnRzIGBrZXlgIGFzIHRoZVxuICAvLyBtb2RpZmllciBuYW1lIFx1MjAxNCByZWNvcmQgdGhvc2UgYXMgbW9kaWZpZXItb25seS5cbiAgaWYgKFsnQ29udHJvbCcsICdNZXRhJywgJ0FsdCcsICdTaGlmdCddLmluY2x1ZGVzKGspKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN0cmw6ICEhZS5jdHJsS2V5LFxuICAgICAgbWV0YTogISFlLm1ldGFLZXksXG4gICAgICBhbHQ6ICEhZS5hbHRLZXksXG4gICAgICBzaGlmdDogISFlLnNoaWZ0S2V5LFxuICAgICAga2V5OiAnJyxcbiAgICB9O1xuICB9XG4gIC8vIFN5c3RlbSBrZXlzIHdlIG5ldmVyIHdhbnQgdG8gYmluZC5cbiAgaWYgKFsnVGFiJywgJ0VzY2FwZScsICdFbnRlcicsICcnXS5pbmNsdWRlcyhrKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgY3RybDogISFlLmN0cmxLZXksXG4gICAgbWV0YTogISFlLm1ldGFLZXksXG4gICAgYWx0OiAhIWUuYWx0S2V5LFxuICAgIHNoaWZ0OiAhIWUuc2hpZnRLZXksXG4gICAga2V5OiBrLFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIGluc3BlY3Qgc2hvcnRjdXQgZnJvbSBleHRlbnNpb24gc3RvcmFnZTsgZmFsbCBiYWNrIHRvIHRoZVxuICogZGVmYXVsdCBpZiBhYnNlbnQgb3IgbWFsZm9ybWVkLiBBbHdheXMgcmV0dXJucyBhIHZhbGlkIFNob3J0Y3V0IHNvXG4gKiBjYWxsZXJzIGRvbid0IGhhdmUgdG8gZGVmZW5zaXZlbHkgcmUtZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRJbnNwZWN0U2hvcnRjdXQoXG4gIHN0b3JhZ2U6IHsgZ2V0KGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB9LFxuKTogUHJvbWlzZTxTaG9ydGN1dD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtTVE9SQUdFX0tFWV9JTlNQRUNUXSk7XG4gICAgY29uc3QgdiA9IHJhd1tTVE9SQUdFX0tFWV9JTlNQRUNUXTtcbiAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgJiYgdHlwZW9mIHYuY3RybCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LmFsdCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LnNoaWZ0ID09PSAnYm9vbGVhbidcbiAgICAgICAgJiYgdHlwZW9mIHYubWV0YSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LmtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2IGFzIFNob3J0Y3V0O1xuICAgIH1cbiAgfSBjYXRjaCB7IC8qIGZhbGwgdGhyb3VnaCAqLyB9XG4gIHJldHVybiB7IC4uLkRFRkFVTFRfSU5TUEVDVF9TSE9SVENVVCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUluc3BlY3RTaG9ydGN1dChcbiAgc3RvcmFnZTogeyBzZXQoaXRlbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB9LFxuICBzOiBTaG9ydGN1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzdG9yYWdlLnNldCh7IFtTVE9SQUdFX0tFWV9JTlNQRUNUXTogcyB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFFQSxZQUFJLEVBQUVBLFdBQVdDLFVBQVVELFdBQVdDLE9BQU9DLFdBQVdGLFdBQVdDLE9BQU9DLFFBQVFDLEtBQUs7QUFDckYsZ0JBQU0sSUFBSUMsTUFBTSwyREFBMkQ7UUFDN0U7QUFFQSxZQUFJLEVBQUVKLFdBQVdLLFdBQVdMLFdBQVdLLFFBQVFILFdBQVdGLFdBQVdLLFFBQVFILFFBQVFDLEtBQUs7QUFDeEYsZ0JBQU1HLG1EQUFtRDtBQU96RCxnQkFBTUMsV0FBV0MsbUJBQWlCO0FBSWhDLGtCQUFNQyxjQUFjO2NBQ2xCLFVBQVU7Z0JBQ1IsU0FBUztrQkFDUCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsWUFBWTtrQkFDVixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztrQkFDTCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsVUFBVTtrQkFDUixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Y0FDRjtjQUNBLGFBQWE7Z0JBQ1gsVUFBVTtrQkFDUixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztrQkFDTCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsZUFBZTtrQkFDYixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsYUFBYTtrQkFDWCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsY0FBYztrQkFDWixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsV0FBVztrQkFDVCxXQUFXO2tCQUNYLFdBQVc7Z0JB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YztBQUMxRCwrQ0FBYSxpQkFBaUIsU0FBUyxZQUFZO0FBQ2pELFlBQU0sTUFBTSxNQUFNLGFBQWE7QUFDL0IsVUFBSSxFQUFDLDJCQUFLLEtBQUk7QUFDWix5QkFBaUIsYUFBYSxTQUFTO0FBQ3ZDO0FBQUEsTUFDRjtBQUVBLGFBQU8sS0FBSyxZQUFZLElBQUksSUFBSSxFQUFFLFFBQVEscUJBQXFCLEdBQUcsQ0FBQyxhQUFhO0FBQzlFLFlBQUksT0FBTyxRQUFRLGFBQWEsRUFBQyxxQ0FBVSxVQUFTO0FBQ2xELDJCQUFpQixhQUFhLEtBQUs7QUFDbkM7QUFBQSxRQUNGO0FBQ0EseUJBQWlCLGFBQWEsTUFBTTtBQUNwQyxtQkFBVyxNQUFNLE9BQU8sTUFBTSxHQUFHLEdBQUc7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDSDtBQUdBLGNBQVU7QUFBQSxFQUNaLENBQUM7IiwKICAibmFtZXMiOiBbImdsb2JhbFRoaXMiLCAiY2hyb21lIiwgInJ1bnRpbWUiLCAiaWQiLCAiRXJyb3IiLCAiYnJvd3NlciIsICJDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UiLCAid3JhcEFQSXMiLCAiZXh0ZW5zaW9uQVBJcyIsICJhcGlNZXRhZGF0YSIsICJPYmplY3QiLCAia2V5cyIsICJsZW5ndGgiLCAiRGVmYXVsdFdlYWtNYXAiLCAiV2Vha01hcCIsICJjb25zdHJ1Y3RvciIsICJjcmVhdGVJdGVtIiwgIml0ZW1zIiwgInVuZGVmaW5lZCIsICJnZXQiLCAia2V5IiwgImhhcyIsICJzZXQiLCAiaXNUaGVuYWJsZSIsICJ2YWx1ZSIsICJ0aGVuIiwgIm1ha2VDYWxsYmFjayIsICJwcm9taXNlIiwgIm1ldGFkYXRhIiwgImNhbGxiYWNrQXJncyIsICJsYXN0RXJyb3IiLCAicmVqZWN0IiwgIm1lc3NhZ2UiLCAic2luZ2xlQ2FsbGJhY2tBcmciLCAicmVzb2x2ZSIsICJwbHVyYWxpemVBcmd1bWVudHMiLCAibnVtQXJncyIsICJ3cmFwQXN5bmNGdW5jdGlvbiIsICJuYW1lIiwgImFzeW5jRnVuY3Rpb25XcmFwcGVyIiwgInRhcmdldCIsICJhcmdzIiwgIm1pbkFyZ3MiLCAibWF4QXJncyIsICJQcm9taXNlIiwgImZhbGxiYWNrVG9Ob0NhbGxiYWNrIiwgImNiRXJyb3IiLCAiY29uc29sZSIsICJ3YXJuIiwgIm5vQ2FsbGJhY2siLCAid3JhcE1ldGhvZCIsICJtZXRob2QiLCAid3JhcHBlciIsICJQcm94eSIsICJhcHBseSIsICJ0YXJnZXRNZXRob2QiLCAidGhpc09iaiIsICJjYWxsIiwgImhhc093blByb3BlcnR5IiwgIkZ1bmN0aW9uIiwgImJpbmQiLCAicHJvdG90eXBlIiwgIndyYXBPYmplY3QiLCAid3JhcHBlcnMiLCAiY2FjaGUiLCAiY3JlYXRlIiwgImhhbmRsZXJzIiwgInByb3h5VGFyZ2V0IiwgInByb3AiLCAicmVjZWl2ZXIiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZGVzYyIsICJSZWZsZWN0IiwgImRlbGV0ZVByb3BlcnR5IiwgIndyYXBFdmVudCIsICJ3cmFwcGVyTWFwIiwgImFkZExpc3RlbmVyIiwgImxpc3RlbmVyIiwgImhhc0xpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIiwgIm9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMiLCAib25SZXF1ZXN0RmluaXNoZWQiLCAicmVxIiwgIndyYXBwZWRSZXEiLCAiZ2V0Q29udGVudCIsICJvbk1lc3NhZ2VXcmFwcGVycyIsICJvbk1lc3NhZ2UiLCAic2VuZGVyIiwgInNlbmRSZXNwb25zZSIsICJkaWRDYWxsU2VuZFJlc3BvbnNlIiwgIndyYXBwZWRTZW5kUmVzcG9uc2UiLCAic2VuZFJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJyZXN1bHQiLCAiZXJyIiwgImlzUmVzdWx0VGhlbmFibGUiLCAic2VuZFByb21pc2VkUmVzdWx0IiwgIm1zZyIsICJlcnJvciIsICJfX21veldlYkV4dGVuc2lvblBvbHlmaWxsUmVqZWN0X18iLCAiY2F0Y2giLCAid3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2siLCAicmVwbHkiLCAid3JhcHBlZFNlbmRNZXNzYWdlIiwgImFwaU5hbWVzcGFjZU9iaiIsICJ3cmFwcGVkQ2IiLCAicHVzaCIsICJzZW5kTWVzc2FnZSIsICJzdGF0aWNXcmFwcGVycyIsICJkZXZ0b29scyIsICJuZXR3b3JrIiwgIm9uTWVzc2FnZUV4dGVybmFsIiwgInRhYnMiLCAic2V0dGluZ01ldGFkYXRhIiwgImNsZWFyIiwgInByaXZhY3kiLCAic2VydmljZXMiLCAid2Vic2l0ZXMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiX2UiLCAiX2YiXQp9Cg==
|
|
1716
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbEAwLjEyLjAvbm9kZV9tb2R1bGVzL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9kaXN0L2Jyb3dzZXItcG9seWZpbGwuanMiLCAiLi4vLi4vc3JjL3BvcHVwLnRzIiwgIi4uLy4uL3NyYy9zaGFyZWQvc2hvcnRjdXQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCAtIHYwLjEyLjAgLSBUdWUgTWF5IDE0IDIwMjQgMTg6MDE6MjkgKi9cbi8qIC0qLSBNb2RlOiBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGpzLWluZGVudC1sZXZlbDogMiAtKi0gKi9cbi8qIHZpbTogc2V0IHN0cz0yIHN3PTIgZXQgdHc9ODA6ICovXG4vKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmlmICghKGdsb2JhbFRoaXMuY2hyb21lICYmIGdsb2JhbFRoaXMuY2hyb21lLnJ1bnRpbWUgJiYgZ2xvYmFsVGhpcy5jaHJvbWUucnVudGltZS5pZCkpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzY3JpcHQgc2hvdWxkIG9ubHkgYmUgbG9hZGVkIGluIGEgYnJvd3NlciBleHRlbnNpb24uXCIpO1xufVxuXG5pZiAoIShnbG9iYWxUaGlzLmJyb3dzZXIgJiYgZ2xvYmFsVGhpcy5icm93c2VyLnJ1bnRpbWUgJiYgZ2xvYmFsVGhpcy5icm93c2VyLnJ1bnRpbWUuaWQpKSB7XG4gIGNvbnN0IENIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSA9IFwiVGhlIG1lc3NhZ2UgcG9ydCBjbG9zZWQgYmVmb3JlIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlwiO1xuXG4gIC8vIFdyYXBwaW5nIHRoZSBidWxrIG9mIHRoaXMgcG9seWZpbGwgaW4gYSBvbmUtdGltZS11c2UgZnVuY3Rpb24gaXMgYSBtaW5vclxuICAvLyBvcHRpbWl6YXRpb24gZm9yIEZpcmVmb3guIFNpbmNlIFNwaWRlcm1vbmtleSBkb2VzIG5vdCBmdWxseSBwYXJzZSB0aGVcbiAgLy8gY29udGVudHMgb2YgYSBmdW5jdGlvbiB1bnRpbCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHNpbmNlIGl0IHdpbGxcbiAgLy8gbmV2ZXIgYWN0dWFsbHkgbmVlZCB0byBiZSBjYWxsZWQsIHRoaXMgYWxsb3dzIHRoZSBwb2x5ZmlsbCB0byBiZSBpbmNsdWRlZFxuICAvLyBpbiBGaXJlZm94IG5lYXJseSBmb3IgZnJlZS5cbiAgY29uc3Qgd3JhcEFQSXMgPSBleHRlbnNpb25BUElzID0+IHtcbiAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgLy8gYXQgYnVpbGQgdGltZSBieSByZXBsYWNpbmcgdGhlIGZvbGxvd2luZyBcImluY2x1ZGVcIiB3aXRoIHRoZSBjb250ZW50IG9mIHRoZVxuICAgIC8vIEpTT04gZmlsZS5cbiAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgIFwiYWxhcm1zXCI6IHtcbiAgICAgICAgXCJjbGVhclwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJib29rbWFya3NcIjoge1xuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0Q2hpbGRyZW5cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0UmVjZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VHJlZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVUcmVlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImJyb3dzZXJBY3Rpb25cIjoge1xuICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcImVuYWJsZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QmFkZ2VCYWNrZ3JvdW5kQ29sb3JcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFRpdGxlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcIm9wZW5Qb3B1cFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRJY29uXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRUaXRsZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImJyb3dzaW5nRGF0YVwiOiB7XG4gICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUNvb2tpZXNcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlRG93bmxvYWRzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUhpc3RvcnlcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlTG9jYWxTdG9yYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVQbHVnaW5EYXRhXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb21tYW5kc1wiOiB7XG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb250ZXh0TWVudXNcIjoge1xuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwidXBkYXRlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJkZXZ0b29sc1wiOiB7XG4gICAgICAgIFwiaW5zcGVjdGVkV2luZG93XCI6IHtcbiAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMixcbiAgICAgICAgICAgIFwic2luZ2xlQ2FsbGJhY2tBcmdcIjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMyxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgXCJzaW5nbGVDYWxsYmFja0FyZ1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVsZW1lbnRzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlU2lkZWJhclBhbmVcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImRvd25sb2Fkc1wiOiB7XG4gICAgICAgIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImRvd25sb2FkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImVyYXNlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEZpbGVJY29uXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcIm9wZW5cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInBhdXNlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZUZpbGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVzdW1lXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgXCJpc0FsbG93ZWRGaWxlU2NoZW1lQWNjZXNzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcImlzQWxsb3dlZEluY29nbml0b0FjY2Vzc1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiaGlzdG9yeVwiOiB7XG4gICAgICAgIFwiYWRkVXJsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImRlbGV0ZUFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWxldGVSYW5nZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWxldGVVcmxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VmlzaXRzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiaTE4blwiOiB7XG4gICAgICAgIFwiZGV0ZWN0TGFuZ3VhZ2VcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWNjZXB0TGFuZ3VhZ2VzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJpZGVudGl0eVwiOiB7XG4gICAgICAgIFwibGF1bmNoV2ViQXV0aEZsb3dcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImlkbGVcIjoge1xuICAgICAgICBcInF1ZXJ5U3RhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIm1hbmFnZW1lbnRcIjoge1xuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0U2VsZlwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRFbmFibGVkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInVuaW5zdGFsbFNlbGZcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIm5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0UGVybWlzc2lvbkxldmVsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGFnZUFjdGlvblwiOiB7XG4gICAgICAgIFwiZ2V0UG9wdXBcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGlkZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInNob3dcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwZXJtaXNzaW9uc1wiOiB7XG4gICAgICAgIFwiY29udGFpbnNcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJydW50aW1lXCI6IHtcbiAgICAgICAgXCJnZXRCYWNrZ3JvdW5kUGFnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRQbGF0Zm9ybUluZm9cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwib3Blbk9wdGlvbnNQYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZW5kTmF0aXZlTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInNlc3Npb25zXCI6IHtcbiAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldFJlY2VudGx5Q2xvc2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlc3RvcmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInN0b3JhZ2VcIjoge1xuICAgICAgICBcImxvY2FsXCI6IHtcbiAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInN5bmNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCeXRlc0luVXNlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInRhYnNcIjoge1xuICAgICAgICBcImNhcHR1cmVWaXNpYmxlVGFiXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXNjYXJkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImR1cGxpY2F0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0Wm9vbVNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdvQmFja1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnb0ZvcndhcmRcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGlnaGxpZ2h0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImluc2VydENTU1wiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInF1ZXJ5XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbG9hZFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVtb3ZlQ1NTXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICBcIm1heEFyZ3NcIjogM1xuICAgICAgICB9LFxuICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0Wm9vbVNldHRpbmdzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidG9wU2l0ZXNcIjoge1xuICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwid2ViTmF2aWdhdGlvblwiOiB7XG4gICAgICAgIFwiZ2V0QWxsRnJhbWVzXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ3ZWJSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ3aW5kb3dzXCI6IHtcbiAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICB9LFxuICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcImdldExhc3RGb2N1c2VkXCI6IHtcbiAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICB9LFxuICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwaS1tZXRhZGF0YS5qc29uIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiBicm93c2VyLXBvbHlmaWxsXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgV2Vha01hcCBzdWJjbGFzcyB3aGljaCBjcmVhdGVzIGFuZCBzdG9yZXMgYSB2YWx1ZSBmb3IgYW55IGtleSB3aGljaCBkb2VzXG4gICAgICogbm90IGV4aXN0IHdoZW4gYWNjZXNzZWQsIGJ1dCBiZWhhdmVzIGV4YWN0bHkgYXMgYW4gb3JkaW5hcnkgV2Vha01hcFxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZUl0ZW1cbiAgICAgKiAgICAgICAgQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHZhbHVlIGZvciBhbnlcbiAgICAgKiAgICAgICAga2V5IHdoaWNoIGRvZXMgbm90IGV4aXN0LCB0aGUgZmlyc3QgdGltZSBpdCBpcyBhY2Nlc3NlZC4gVGhlXG4gICAgICogICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVzLCBhcyBpdHMgb25seSBhcmd1bWVudCwgdGhlIGtleSBiZWluZyBjcmVhdGVkLlxuICAgICAqL1xuICAgIGNsYXNzIERlZmF1bHRXZWFrTWFwIGV4dGVuZHMgV2Vha01hcCB7XG4gICAgICBjb25zdHJ1Y3RvcihjcmVhdGVJdGVtLCBpdGVtcyA9IHVuZGVmaW5lZCkge1xuICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIHRoaXMuY3JlYXRlSXRlbSA9IGNyZWF0ZUl0ZW07XG4gICAgICB9XG5cbiAgICAgIGdldChrZXkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNyZWF0ZUl0ZW0oa2V5KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggYSBgdGhlbmAgbWV0aG9kLCBhbmQgY2FuXG4gICAgICogdGhlcmVmb3JlIGJlIGFzc3VtZWQgdG8gYmVoYXZlIGFzIGEgUHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZW5hYmxlLlxuICAgICAqL1xuICAgIGNvbnN0IGlzVGhlbmFibGUgPSB2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgcmVzb2x2ZSBvciByZWplY3RcbiAgICAgKiB0aGUgZ2l2ZW4gcHJvbWlzZSBiYXNlZCBvbiBob3cgaXQgaXMgY2FsbGVkOlxuICAgICAqXG4gICAgICogLSBJZiwgd2hlbiBjYWxsZWQsIGBjaHJvbWUucnVudGltZS5sYXN0RXJyb3JgIGNvbnRhaW5zIGEgbm9uLW51bGwgb2JqZWN0LFxuICAgICAqICAgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuICAgICAqIC0gSWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGV4YWN0bHkgb25lIGFyZ3VtZW50LCB0aGUgcHJvbWlzZSBpc1xuICAgICAqICAgcmVzb2x2ZWQgdG8gdGhhdCB2YWx1ZS5cbiAgICAgKiAtIE90aGVyd2lzZSwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlXG4gICAgICogICBmdW5jdGlvbidzIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9taXNlXG4gICAgICogICAgICAgIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNvbHV0aW9uIGFuZCByZWplY3Rpb24gZnVuY3Rpb25zIG9mIGFcbiAgICAgKiAgICAgICAgcHJvbWlzZS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlc29sdmVcbiAgICAgKiAgICAgICAgVGhlIHByb21pc2UncyByZXNvbHV0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVqZWN0XG4gICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVqZWN0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgd3JhcHBlZCBtZXRob2Qgd2hpY2ggaGFzIGNyZWF0ZWQgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmdcbiAgICAgKiAgICAgICAgV2hldGhlciBvciBub3QgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBvbmx5IHRoZSBmaXJzdFxuICAgICAqICAgICAgICBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2ssIGFsdGVybmF0aXZlbHkgYW4gYXJyYXkgb2YgYWxsIHRoZVxuICAgICAqICAgICAgICBjYWxsYmFjayBhcmd1bWVudHMgaXMgcmVzb2x2ZWQuIEJ5IGRlZmF1bHQsIGlmIHRoZSBjYWxsYmFja1xuICAgICAqICAgICAgICBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggb25seSBhIHNpbmdsZSBhcmd1bWVudCwgdGhhdCB3aWxsIGJlXG4gICAgICogICAgICAgIHJlc29sdmVkIHRvIHRoZSBwcm9taXNlLCB3aGlsZSBhbGwgYXJndW1lbnRzIHdpbGwgYmUgcmVzb2x2ZWQgYXNcbiAgICAgKiAgICAgICAgYW4gYXJyYXkgaWYgbXVsdGlwbGUgYXJlIGdpdmVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9ufVxuICAgICAqICAgICAgICBUaGUgZ2VuZXJhdGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0IG1ha2VDYWxsYmFjayA9IChwcm9taXNlLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgcmV0dXJuICguLi5jYWxsYmFja0FyZ3MpID0+IHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICBwcm9taXNlLnJlamVjdChuZXcgRXJyb3IoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmcgfHxcbiAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tBcmdzLmxlbmd0aCA8PSAxICYmIG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGx1cmFsaXplQXJndW1lbnRzID0gKG51bUFyZ3MpID0+IG51bUFyZ3MgPT0gMSA/IFwiYXJndW1lbnRcIiA6IFwiYXJndW1lbnRzXCI7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgbWV0YWRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdoaWNoIGlzIGJlaW5nIHdyYXBwZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhXG4gICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC5cbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1pbkFyZ3NcbiAgICAgKiAgICAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtdXN0IGJlIHBhc3NlZCB0byB0aGVcbiAgICAgKiAgICAgICAgZnVuY3Rpb24uIElmIGNhbGxlZCB3aXRoIGZld2VyIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1heEFyZ3NcbiAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAqICAgICAgICBmdW5jdGlvbi4gSWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICogICAgICAgIHdyYXBwZXIgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZ1xuICAgICAqICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIG9ubHkgdGhlIGZpcnN0XG4gICAgICogICAgICAgIGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjaywgYWx0ZXJuYXRpdmVseSBhbiBhcnJheSBvZiBhbGwgdGhlXG4gICAgICogICAgICAgIGNhbGxiYWNrIGFyZ3VtZW50cyBpcyByZXNvbHZlZC4gQnkgZGVmYXVsdCwgaWYgdGhlIGNhbGxiYWNrXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LCB0aGF0IHdpbGwgYmVcbiAgICAgKiAgICAgICAgcmVzb2x2ZWQgdG8gdGhlIHByb21pc2UsIHdoaWxlIGFsbCBhcmd1bWVudHMgd2lsbCBiZSByZXNvbHZlZCBhc1xuICAgICAqICAgICAgICBhbiBhcnJheSBpZiBtdWx0aXBsZSBhcmUgZ2l2ZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24ob2JqZWN0LCAuLi4qKX1cbiAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgY29uc3Qgd3JhcEFzeW5jRnVuY3Rpb24gPSAobmFtZSwgbWV0YWRhdGEpID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBhc3luY0Z1bmN0aW9uV3JhcHBlcih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgbWV0YWRhdGEubWluQXJncykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHttZXRhZGF0YS5taW5BcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5taW5BcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiBtZXRhZGF0YS5tYXhBcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBtb3N0ICR7bWV0YWRhdGEubWF4QXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWF4QXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFRoaXMgQVBJIG1ldGhvZCBoYXMgY3VycmVudGx5IG5vIGNhbGxiYWNrIG9uIENocm9tZSwgYnV0IGl0IHJldHVybiBhIHByb21pc2Ugb24gRmlyZWZveCxcbiAgICAgICAgICAgIC8vIGFuZCBzbyB0aGUgcG9seWZpbGwgd2lsbCB0cnkgdG8gY2FsbCBpdCB3aXRoIGEgY2FsbGJhY2sgZmlyc3QsIGFuZCBpdCB3aWxsIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyB0byBub3QgcGFzc2luZyB0aGUgY2FsbGJhY2sgaWYgdGhlIGZpcnN0IGNhbGwgZmFpbHMuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtyZXNvbHZlLCByZWplY3R9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoY2JFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7bmFtZX0gQVBJIG1ldGhvZCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyLCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmFsbGluZyBiYWNrIHRvIGNhbGwgaXQgd2l0aG91dCBhIGNhbGxiYWNrOiBcIiwgY2JFcnJvcik7XG5cbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgQVBJIG1ldGhvZCBtZXRhZGF0YSwgc28gdGhhdCB0aGUgbmV4dCBBUEkgY2FsbHMgd2lsbCBub3QgdHJ5IHRvXG4gICAgICAgICAgICAgIC8vIHVzZSB0aGUgdW5zdXBwb3J0ZWQgY2FsbGJhY2sgYW55bW9yZS5cbiAgICAgICAgICAgICAgbWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgbWV0YWRhdGEubm9DYWxsYmFjayA9IHRydWU7XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEubm9DYWxsYmFjaykge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtyZXNvbHZlLCByZWplY3R9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBhbiBleGlzdGluZyBtZXRob2Qgb2YgdGhlIHRhcmdldCBvYmplY3QsIHNvIHRoYXQgY2FsbHMgdG8gaXQgYXJlXG4gICAgICogaW50ZXJjZXB0ZWQgYnkgdGhlIGdpdmVuIHdyYXBwZXIgZnVuY3Rpb24uIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHJlY2VpdmVzLFxuICAgICAqIGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgdGhlIG9yaWdpbmFsIGB0YXJnZXRgIG9iamVjdCwgZm9sbG93ZWQgYnkgZWFjaCBvZlxuICAgICAqIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0XG4gICAgICogICAgICAgIFRoZSBvcmlnaW5hbCB0YXJnZXQgb2JqZWN0IHRoYXQgdGhlIHdyYXBwZWQgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gICAgICogICAgICAgIFRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC4gVGhpcyBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgdGhlIFByb3h5XG4gICAgICogICAgICAgIG9iamVjdCB3aGljaCBpcyBjcmVhdGVkIHRvIHdyYXAgdGhlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB3cmFwcGVyXG4gICAgICogICAgICAgIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBpbiBwbGFjZSBvZiBhIGRpcmVjdCBpbnZvY2F0aW9uXG4gICAgICogICAgICAgIG9mIHRoZSB3cmFwcGVkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm94eTxmdW5jdGlvbj59XG4gICAgICogICAgICAgIEEgUHJveHkgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbWV0aG9kLCB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiB3cmFwcGVyXG4gICAgICogICAgICAgIG1ldGhvZCBpbiBpdHMgcGxhY2UuXG4gICAgICovXG4gICAgY29uc3Qgd3JhcE1ldGhvZCA9ICh0YXJnZXQsIG1ldGhvZCwgd3JhcHBlcikgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm94eShtZXRob2QsIHtcbiAgICAgICAgYXBwbHkodGFyZ2V0TWV0aG9kLCB0aGlzT2JqLCBhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2FsbCh0aGlzT2JqLCB0YXJnZXQsIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBoYXNPd25Qcm9wZXJ0eSA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIC8qKlxuICAgICAqIFdyYXBzIGFuIG9iamVjdCBpbiBhIFByb3h5IHdoaWNoIGludGVyY2VwdHMgYW5kIHdyYXBzIGNlcnRhaW4gbWV0aG9kc1xuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBgd3JhcHBlcnNgIGFuZCBgbWV0YWRhdGFgIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0XG4gICAgICogICAgICAgIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHdyYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3dyYXBwZXJzID0ge31dXG4gICAgICogICAgICAgIEFuIG9iamVjdCB0cmVlIGNvbnRhaW5pbmcgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHNwZWNpYWwgY2FzZXMuIEFueVxuICAgICAqICAgICAgICBmdW5jdGlvbiBwcmVzZW50IGluIHRoaXMgb2JqZWN0IHRyZWUgaXMgY2FsbGVkIGluIHBsYWNlIG9mIHRoZVxuICAgICAqICAgICAgICBtZXRob2QgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGB0YXJnZXRgIG9iamVjdCB0cmVlLiBUaGVzZVxuICAgICAqICAgICAgICB3cmFwcGVyIG1ldGhvZHMgYXJlIGludm9rZWQgYXMgZGVzY3JpYmVkIGluIHtAc2VlIHdyYXBNZXRob2R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFttZXRhZGF0YSA9IHt9XVxuICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIG1ldGFkYXRhIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICAgICAqICAgICAgICBQcm9taXNlLWJhc2VkIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMuIEFueSBmdW5jdGlvbiBpblxuICAgICAqICAgICAgICB0aGUgYHRhcmdldGAgb2JqZWN0IHRyZWUgd2hpY2ggaGFzIGEgY29ycmVzcG9uZGluZyBtZXRhZGF0YSBvYmplY3RcbiAgICAgKiAgICAgICAgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGBtZXRhZGF0YWAgdHJlZSBpcyByZXBsYWNlZCB3aXRoIGFuXG4gICAgICogICAgICAgIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24sIGFzIGRlc2NyaWJlZCBpblxuICAgICAqICAgICAgICB7QHNlZSB3cmFwQXN5bmNGdW5jdGlvbn1cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm94eTxvYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IHdyYXBPYmplY3QgPSAodGFyZ2V0LCB3cmFwcGVycyA9IHt9LCBtZXRhZGF0YSA9IHt9KSA9PiB7XG4gICAgICBsZXQgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbGV0IGhhbmRsZXJzID0ge1xuICAgICAgICBoYXMocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgfHwgcHJvcCBpbiBjYWNoZTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQocHJveHlUYXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgaWYgKHByb3AgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZVtwcm9wXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIShwcm9wIGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIG9uIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4gQ2hlY2sgaWYgd2UgbmVlZCB0byBkb1xuICAgICAgICAgICAgLy8gYW55IHdyYXBwaW5nLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdyYXBwZXJzW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSB3cmFwcGVyIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyc1twcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBwcm9wKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHdlIGhhdmUgbWV0YWRhdGEgZm9yLiBDcmVhdGUgYVxuICAgICAgICAgICAgICAvLyBQcm9taXNlIHdyYXBwZXIgZm9yIGl0LlxuICAgICAgICAgICAgICBsZXQgd3JhcHBlciA9IHdyYXBBc3luY0Z1bmN0aW9uKHByb3AsIG1ldGFkYXRhW3Byb3BdKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtZXRob2QgdGhhdCB3ZSBkb24ndCBrbm93IG9yIGNhcmUgYWJvdXQuIFJldHVybiB0aGVcbiAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kLCBib3VuZCB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAoaGFzT3duUHJvcGVydHkod3JhcHBlcnMsIHByb3ApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgdGhhdCB3ZSBuZWVkIHRvIGRvIHNvbWUgd3JhcHBpbmcgZm9yIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgLy8gb2YuIENyZWF0ZSBhIHN1Yi1vYmplY3Qgd3JhcHBlciBmb3IgaXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2hpbGRcbiAgICAgICAgICAgIC8vIG1ldGFkYXRhLlxuICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIFwiKlwiKSkge1xuICAgICAgICAgICAgLy8gV3JhcCBhbGwgcHJvcGVydGllcyBpbiAqIG5hbWVzcGFjZS5cbiAgICAgICAgICAgIHZhbHVlID0gd3JhcE9iamVjdCh2YWx1ZSwgd3JhcHBlcnNbcHJvcF0sIG1ldGFkYXRhW1wiKlwiXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55IHdyYXBwaW5nIGZvciB0aGlzIHByb3BlcnR5LFxuICAgICAgICAgICAgLy8gc28ganVzdCBmb3J3YXJkIGFsbCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQocHJveHlUYXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3AsIGRlc2MpIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwgZGVzYyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVsZXRlUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShjYWNoZSwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXIgY29udHJhY3Qgb2YgdGhlIFByb3h5IEFQSSwgdGhlIFwiZ2V0XCIgcHJveHkgaGFuZGxlciBtdXN0IHJldHVybiB0aGVcbiAgICAgIC8vIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSB0YXJnZXQgaWYgdGhhdCB2YWx1ZSBpcyBkZWNsYXJlZCByZWFkLW9ubHkgYW5kXG4gICAgICAvLyBub24tY29uZmlndXJhYmxlLiBGb3IgdGhpcyByZWFzb24sIHdlIGNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgIC8vIHByb3RvdHlwZSBzZXQgdG8gYHRhcmdldGAgaW5zdGVhZCBvZiB1c2luZyBgdGFyZ2V0YCBkaXJlY3RseS5cbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBjYW5ub3QgcmV0dXJuIGEgY3VzdG9tIG9iamVjdCBmb3IgQVBJcyB0aGF0XG4gICAgICAvLyBhcmUgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZCBub24tY29uZmlndXJhYmxlLCBzdWNoIGFzIGBjaHJvbWUuZGV2dG9vbHNgLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBwcm94eSBoYW5kbGVycyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YFxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgYHByb3h5VGFyZ2V0YCwgc28gdGhhdCB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBhcmVcbiAgICAgIC8vIGRlcmVmZXJlbmNlZCB2aWEgdGhlIG9yaWdpbmFsIHRhcmdldHMuXG4gICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICByZXR1cm4gbmV3IFByb3h5KHByb3h5VGFyZ2V0LCBoYW5kbGVycyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFuIGV2ZW50IG9iamVjdCwgd2hpY2ggaGFuZGxlc1xuICAgICAqIHdyYXBwaW5nIG9mIGxpc3RlbmVyIGZ1bmN0aW9ucyB0aGF0IHRob3NlIG1lc3NhZ2VzIGFyZSBwYXNzZWQuXG4gICAgICpcbiAgICAgKiBBIHNpbmdsZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGVhY2ggbGlzdGVuZXIgZnVuY3Rpb24sIGFuZCBzdG9yZWQgaW4gYVxuICAgICAqIG1hcC4gU3Vic2VxdWVudCBjYWxscyB0byBgYWRkTGlzdGVuZXJgLCBgaGFzTGlzdGVuZXJgLCBvciBgcmVtb3ZlTGlzdGVuZXJgXG4gICAgICogcmV0cmlldmUgdGhlIG9yaWdpbmFsIHdyYXBwZXIsIHNvIHRoYXQgIGF0dGVtcHRzIHRvIHJlbW92ZSBhXG4gICAgICogcHJldmlvdXNseS1hZGRlZCBsaXN0ZW5lciB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEZWZhdWx0V2Vha01hcDxmdW5jdGlvbiwgZnVuY3Rpb24+fSB3cmFwcGVyTWFwXG4gICAgICogICAgICAgIEEgRGVmYXVsdFdlYWtNYXAgb2JqZWN0IHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB3cmFwcGVyXG4gICAgICogICAgICAgIGZvciBhIGdpdmVuIGxpc3RlbmVyIGZ1bmN0aW9uIHdoZW4gb25lIGRvZXMgbm90IGV4aXN0LCBhbmQgcmV0cmlldmVcbiAgICAgKiAgICAgICAgYW4gZXhpc3Rpbmcgb25lIHdoZW4gaXQgZG9lcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICovXG4gICAgY29uc3Qgd3JhcEV2ZW50ID0gd3JhcHBlck1hcCA9PiAoe1xuICAgICAgYWRkTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lciwgLi4uYXJncykge1xuICAgICAgICB0YXJnZXQuYWRkTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpLCAuLi5hcmdzKTtcbiAgICAgIH0sXG5cbiAgICAgIGhhc0xpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5oYXNMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lcikge1xuICAgICAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvblJlcXVlc3RGaW5pc2hlZFdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gb25SZXF1ZXN0RmluaXNoZWQgbGlzdGVuZXIgZnVuY3Rpb24gc28gdGhhdCBpdCB3aWxsIHJldHVybiBhXG4gICAgICAgKiBgZ2V0Q29udGVudCgpYCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgYFByb21pc2VgIHJhdGhlciB0aGFuIHVzaW5nIGFcbiAgICAgICAqIGNhbGxiYWNrIEFQSS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gICAgICAgKiAgICAgICAgVGhlIEhBUiBlbnRyeSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBvblJlcXVlc3RGaW5pc2hlZChyZXEpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZFJlcSA9IHdyYXBPYmplY3QocmVxLCB7fSAvKiB3cmFwcGVycyAqLywge1xuICAgICAgICAgIGdldENvbnRlbnQ6IHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDAsXG4gICAgICAgICAgICBtYXhBcmdzOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBsaXN0ZW5lcih3cmFwcGVkUmVxKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbk1lc3NhZ2VXcmFwcGVycyA9IG5ldyBEZWZhdWx0V2Vha01hcChsaXN0ZW5lciA9PiB7XG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICogaXRzIHJldHVybiB2YWx1ZSwgcmF0aGVyIHRoYW4gYnkgcmV0dXJuaW5nIGEgc2VudGluZWwgdmFsdWUgYW5kIGNhbGxpbmcgYVxuICAgICAgICogY2FsbGJhY2suIElmIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiByZXR1cm5zIGEgUHJvbWlzZSwgdGhlIHJlc3BvbnNlIGlzXG4gICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHNlbmRlclxuICAgICAgICogICAgICAgIERldGFpbHMgYWJvdXQgdGhlIHNlbmRlciBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICogICAgICAgIEEgY2FsbGJhY2sgd2hpY2gsIHdoZW4gY2FsbGVkIHdpdGggYW4gYXJiaXRyYXJ5IGFyZ3VtZW50LCBzZW5kc1xuICAgICAgICogICAgICAgIHRoYXQgdmFsdWUgYXMgYSByZXNwb25zZS5cbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICogICAgICAgIFRydWUgaWYgdGhlIHdyYXBwZWQgbGlzdGVuZXIgcmV0dXJuZWQgYSBQcm9taXNlLCB3aGljaCB3aWxsIGxhdGVyXG4gICAgICAgKiAgICAgICAgeWllbGQgYSByZXNwb25zZS4gRmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gb25NZXNzYWdlKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBkaWRDYWxsU2VuZFJlc3BvbnNlID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IHdyYXBwZWRTZW5kUmVzcG9uc2U7XG4gICAgICAgIGxldCBzZW5kUmVzcG9uc2VQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgd3JhcHBlZFNlbmRSZXNwb25zZSA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBkaWRDYWxsU2VuZFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gbGlzdGVuZXIobWVzc2FnZSwgc2VuZGVyLCB3cmFwcGVkU2VuZFJlc3BvbnNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVzdWx0VGhlbmFibGUgPSByZXN1bHQgIT09IHRydWUgJiYgaXNUaGVuYWJsZShyZXN1bHQpO1xuXG4gICAgICAgIC8vIElmIHRoZSBsaXN0ZW5lciBkaWRuJ3QgcmV0dXJuZWQgdHJ1ZSBvciBhIFByb21pc2UsIG9yIGNhbGxlZFxuICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSB3aWxsIGJlIG5vIHJlc3BvbnNlIHNlbnQgZnJvbSB0aGlzIGxpc3RlbmVyLlxuICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmICFpc1Jlc3VsdFRoZW5hYmxlICYmICFkaWRDYWxsU2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBzbWFsbCBoZWxwZXIgdG8gc2VuZCB0aGUgbWVzc2FnZSBpZiB0aGUgcHJvbWlzZSByZXNvbHZlc1xuICAgICAgICAvLyBhbmQgYW4gZXJyb3IgaWYgdGhlIHByb21pc2UgcmVqZWN0cyAoYSB3cmFwcGVkIHNlbmRNZXNzYWdlIGhhc1xuICAgICAgICAvLyB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2UgaW50byBhIHJlc29sdmVkIHByb21pc2Ugb3IgYSByZWplY3RlZFxuICAgICAgICAvLyBwcm9taXNlKS5cbiAgICAgICAgY29uc3Qgc2VuZFByb21pc2VkUmVzdWx0ID0gKHByb21pc2UpID0+IHtcbiAgICAgICAgICBwcm9taXNlLnRoZW4obXNnID0+IHtcbiAgICAgICAgICAgIC8vIHNlbmQgdGhlIG1lc3NhZ2UgdmFsdWUuXG4gICAgICAgICAgICBzZW5kUmVzcG9uc2UobXNnKTtcbiAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBTZW5kIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaWYgdGhlIHJlamVjdGVkIHZhbHVlXG4gICAgICAgICAgICAvLyBpcyBhbiBpbnN0YW5jZSBvZiBlcnJvciwgb3IgdGhlIG9iamVjdCBpdHNlbGYgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gXCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgIF9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXzogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBhbiBlcnJvciBvbiB0aGUgY29uc29sZSBpZiB1bmFibGUgdG8gc2VuZCB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHNlbmQgb25NZXNzYWdlIHJlamVjdGVkIHJlcGx5XCIsIGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAvLyByZXN1bHQsIG90aGVyd2lzZSB3YWl0IHRoZSBwcm9taXNlIHJlbGF0ZWQgdG8gdGhlIHdyYXBwZWRTZW5kUmVzcG9uc2VcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gcmVzb2x2ZSBhbmQgc2VuZCBpdCBhcyBhIHJlc3BvbnNlLlxuICAgICAgICBpZiAoaXNSZXN1bHRUaGVuYWJsZSkge1xuICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChzZW5kUmVzcG9uc2VQcm9taXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExldCBDaHJvbWUga25vdyB0aGF0IHRoZSBsaXN0ZW5lciBpcyByZXBseWluZy5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2sgPSAoe3JlamVjdCwgcmVzb2x2ZX0sIHJlcGx5KSA9PiB7XG4gICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAvLyBEZXRlY3Qgd2hlbiBub25lIG9mIHRoZSBsaXN0ZW5lcnMgcmVwbGllZCB0byB0aGUgc2VuZE1lc3NhZ2UgY2FsbCBhbmQgcmVzb2x2ZVxuICAgICAgICAvLyB0aGUgcHJvbWlzZSB0byB1bmRlZmluZWQgYXMgaW4gRmlyZWZveC5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgIGlmIChleHRlbnNpb25BUElzLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UgPT09IENIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSkge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAvLyBDb252ZXJ0IGJhY2sgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGludG9cbiAgICAgICAgLy8gYW4gRXJyb3IgaW5zdGFuY2UuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXBseSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdyYXBwZWRTZW5kTWVzc2FnZSA9IChuYW1lLCBtZXRhZGF0YSwgYXBpTmFtZXNwYWNlT2JqLCAuLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHttZXRhZGF0YS5taW5BcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5taW5BcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBtb3N0ICR7bWV0YWRhdGEubWF4QXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWF4QXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVkQ2IgPSB3cmFwcGVkU2VuZE1lc3NhZ2VDYWxsYmFjay5iaW5kKG51bGwsIHtyZXNvbHZlLCByZWplY3R9KTtcbiAgICAgICAgYXJncy5wdXNoKHdyYXBwZWRDYik7XG4gICAgICAgIGFwaU5hbWVzcGFjZU9iai5zZW5kTWVzc2FnZSguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzdGF0aWNXcmFwcGVycyA9IHtcbiAgICAgIGRldnRvb2xzOiB7XG4gICAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgICBvblJlcXVlc3RGaW5pc2hlZDogd3JhcEV2ZW50KG9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICBvbk1lc3NhZ2VFeHRlcm5hbDogd3JhcEV2ZW50KG9uTWVzc2FnZVdyYXBwZXJzKSxcbiAgICAgICAgc2VuZE1lc3NhZ2U6IHdyYXBwZWRTZW5kTWVzc2FnZS5iaW5kKG51bGwsIFwic2VuZE1lc3NhZ2VcIiwge21pbkFyZ3M6IDEsIG1heEFyZ3M6IDN9KSxcbiAgICAgIH0sXG4gICAgICB0YWJzOiB7XG4gICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHttaW5BcmdzOiAyLCBtYXhBcmdzOiAzfSksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3Qgc2V0dGluZ01ldGFkYXRhID0ge1xuICAgICAgY2xlYXI6IHttaW5BcmdzOiAxLCBtYXhBcmdzOiAxfSxcbiAgICAgIGdldDoge21pbkFyZ3M6IDEsIG1heEFyZ3M6IDF9LFxuICAgICAgc2V0OiB7bWluQXJnczogMSwgbWF4QXJnczogMX0sXG4gICAgfTtcbiAgICBhcGlNZXRhZGF0YS5wcml2YWN5ID0ge1xuICAgICAgbmV0d29yazoge1wiKlwiOiBzZXR0aW5nTWV0YWRhdGF9LFxuICAgICAgc2VydmljZXM6IHtcIipcIjogc2V0dGluZ01ldGFkYXRhfSxcbiAgICAgIHdlYnNpdGVzOiB7XCIqXCI6IHNldHRpbmdNZXRhZGF0YX0sXG4gICAgfTtcblxuICAgIHJldHVybiB3cmFwT2JqZWN0KGV4dGVuc2lvbkFQSXMsIHN0YXRpY1dyYXBwZXJzLCBhcGlNZXRhZGF0YSk7XG4gIH07XG5cbiAgLy8gVGhlIGJ1aWxkIHByb2Nlc3MgYWRkcyBhIFVNRCB3cmFwcGVyIGFyb3VuZCB0aGlzIGZpbGUsIHdoaWNoIG1ha2VzIHRoZVxuICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG4gIG1vZHVsZS5leHBvcnRzID0gd3JhcEFQSXMoY2hyb21lKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcy5icm93c2VyO1xufVxuIiwgIi8vIEhhbnpvIEFJIFx1MjAxNCBQb3B1cCBTY3JpcHRcbi8vIFVzZXMgYmFja2dyb3VuZCBtZXNzYWdlIHBhc3NpbmcgZm9yIGF1dGggKG5vdCBkaXJlY3Qgc3RvcmFnZSBhY2Nlc3MpLlxuLy9cbi8vIFBvbHlmaWxsIHRoZSBXZWJFeHRlbnNpb24gQVBJIHN1cmZhY2Ugc28gdGhpcyBzY3JpcHQgY2FuIHJlYWQvd3JpdGVcbi8vIGNocm9tZS5zdG9yYWdlIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgY2FsbHMgb24gZXZlcnkgYnJvd3Nlci4gQ2hyb21lXG4vLyBnZXRzIHRoZSBwb2x5ZmlsbCB3cmFwcGVyLCBGaXJlZm94L1NhZmFyaSBnZXQgYSBuby1vcC5cbmltcG9ydCAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9JTlNQRUNUX1NIT1JUQ1VULFxuICBmb3JtYXRTaG9ydGN1dCxcbiAgbG9hZEluc3BlY3RTaG9ydGN1dCxcbiAgc2F2ZUluc3BlY3RTaG9ydGN1dCxcbiAgc2hvcnRjdXRGcm9tRXZlbnQsXG4gIHR5cGUgU2hvcnRjdXQsXG59IGZyb20gJy4vc2hhcmVkL3Nob3J0Y3V0LmpzJztcblxuZGVjbGFyZSBjb25zdCBicm93c2VyOiB0eXBlb2YgY2hyb21lICYge1xuICBzaWRlYmFyQWN0aW9uPzoge1xuICAgIG9wZW4oKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHRvZ2dsZSgpOiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gRm9vdGVyIHZlcnNpb24gXHUyMDE0IHB1bGxlZCBmcm9tIG1hbmlmZXN0IGF0IHJ1bnRpbWUgc28gaXQgYWx3YXlzIHRyYWNrcyBidWlsZC5cbiAgY29uc3QgdmVyc2lvbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvb3Rlci12ZXJzaW9uJyk7XG4gIGlmICh2ZXJzaW9uRWwpIHtcbiAgICB0cnkge1xuICAgICAgdmVyc2lvbkVsLnRleHRDb250ZW50ID0gYHYke2Nocm9tZS5ydW50aW1lLmdldE1hbmlmZXN0KCkudmVyc2lvbn1gO1xuICAgIH0gY2F0Y2ggeyAvKiBtYW5pZmVzdCB1bmF2YWlsYWJsZSBpbiBzb21lIGNvbnRleHRzICovIH1cbiAgfVxuXG4gIC8vIEF1dGhcbiAgY29uc3QgbG9naW5CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW4tYnRuJyk7XG4gIGNvbnN0IGxvZ291dEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dvdXQtYnRuJyk7XG5cbiAgLy8gT3BlbiBwYW5lbFxuICBjb25zdCBvcGVuUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1wYW5lbCcpO1xuICBjb25zdCBvcGVuUGFnZU92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1wYWdlLW92ZXJsYXknKTsgLy8gbGVnYWN5IGlkLCBtYXkgbm90IGV4aXN0XG4gIGNvbnN0IHBpbkxlZnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluLWxlZnQnKTtcbiAgY29uc3QgcGluUmlnaHRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluLXJpZ2h0Jyk7XG4gIGNvbnN0IG92ZXJsYXlFbmFibGVkQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmxheS1lbmFibGVkJykgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IHdpZHRoQnRucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndpZHRoLWJ0bicpKSBhcyBIVE1MQnV0dG9uRWxlbWVudFtdO1xuICBjb25zdCBvdmVybGF5U2lkZVJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdmVybGF5LXNpZGUtcm93Jyk7XG4gIGNvbnN0IG92ZXJsYXlXaWR0aFJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdmVybGF5LXdpZHRoLXJvdycpO1xuXG4gIHR5cGUgT3ZlcmxheVdpZHRoID0gJ2NvbXBhY3QnIHwgJ2RlZmF1bHQnIHwgJ3dpZGUnO1xuXG4gIGZ1bmN0aW9uIHN5bmNTZXR0aW5nc1VpKGVuYWJsZWQ6IGJvb2xlYW4sIHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsIHdpZHRoOiBPdmVybGF5V2lkdGgpIHtcbiAgICBpZiAob3ZlcmxheUVuYWJsZWRDaGVja2JveCkgb3ZlcmxheUVuYWJsZWRDaGVja2JveC5jaGVja2VkID0gZW5hYmxlZDtcbiAgICBwaW5MZWZ0QnRuPy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgc2lkZSA9PT0gJ2xlZnQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgcGluUmlnaHRCdG4/LnNldEF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUnLCBzaWRlID09PSAncmlnaHQnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgd2lkdGhCdG5zLmZvckVhY2goKGIpID0+IGIuc2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIGIuZ2V0QXR0cmlidXRlKCdkYXRhLXdpZHRoJykgPT09IHdpZHRoID8gJ3RydWUnIDogJ2ZhbHNlJykpO1xuICAgIC8vIEdyZXkgb3V0IHNpZGUvd2lkdGggd2hlbiBvbi1wYWdlIG92ZXJsYXkgaXMgZGlzYWJsZWQuXG4gICAgW292ZXJsYXlTaWRlUm93LCBvdmVybGF5V2lkdGhSb3ddLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICAgIChyb3cgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm9wYWNpdHkgPSBlbmFibGVkID8gJzEnIDogJzAuNSc7XG4gICAgICAocm93IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5wb2ludGVyRXZlbnRzID0gZW5hYmxlZCA/ICcnIDogJ25vbmUnO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3RhdHVzIGRvdHNcbiAgY29uc3QgemFwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1zdGF0dXMnKTtcbiAgY29uc3QgemFwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1kZXRhaWwnKTtcbiAgY29uc3QgbWNwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1zdGF0dXMnKTtcbiAgY29uc3QgbWNwUG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydCcpO1xuICBjb25zdCBjZHBTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXN0YXR1cycpO1xuICBjb25zdCBjZHBEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLWRldGFpbCcpO1xuICBjb25zdCBncHVTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3B1LXN0YXR1cycpO1xuICBjb25zdCBncHVEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3B1LWRldGFpbCcpO1xuXG4gIC8vIFNldHRpbmdzXG4gIGNvbnN0IG9wZW5TZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXNldHRpbmdzJyk7XG4gIGNvbnN0IGJhY2tCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFjay1idG4nKTtcbiAgY29uc3Qgc2F2ZVNldHRpbmdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmUtc2V0dGluZ3MnKTtcbiAgY29uc3QgdGVzdENvbm5lY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb25uZWN0aW9uJyk7XG5cbiAgY29uc3QgdXNlckluZm9TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItaW5mby1zZWN0aW9uJyk7XG5cbiAgLy8gLS0tIEF1dGggdmlhIGJhY2tncm91bmQgLS0tXG4gIGZ1bmN0aW9uIGNoZWNrQXV0aCgpIHtcbiAgICAvLyBBbHdheXMgc2hvdyBtYWluIHNlY3Rpb24gYW5kIHN0YXR1cyAodG9vbHMgd29yayB3aXRob3V0IGxvZ2luKVxuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIHJlZnJlc2hTdGF0dXMoKTtcblxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXV0aC5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICB1c2VySW5mb1NlY3Rpb24/LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICBpZiAocmVzcG9uc2UudXNlcikge1xuICAgICAgICAgIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWF2YXRhcicpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLW5hbWUnKTtcbiAgICAgICAgICBjb25zdCBlbWFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWVtYWlsJyk7XG4gICAgICAgICAgYXZhdGFyLnNyYyA9IHJlc3BvbnNlLnVzZXIucGljdHVyZSB8fCByZXNwb25zZS51c2VyLmF2YXRhciB8fCAnaWNvbjQ4LnBuZyc7XG4gICAgICAgICAgbmFtZS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLnVzZXIubmFtZSB8fCByZXNwb25zZS51c2VyLmRpc3BsYXlOYW1lIHx8ICdIYW56byBVc2VyJztcbiAgICAgICAgICBlbWFpbC50ZXh0Q29udGVudCA9IHJlc3BvbnNlLnVzZXIuZW1haWwgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgdXNlckluZm9TZWN0aW9uPy5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAobG9naW5CdG4gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgKGxvZ2luQnRuIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgbG9naW5CdG4udGV4dENvbnRlbnQgPSAnU2lnbiBJbic7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFNpZ251cCBidXR0b24gaW4gbG9naW4gY2FyZFxuICBjb25zdCBzaWdudXBCdG5Qb3B1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaWdudXAtYnRuLXBvcHVwJyk7XG4gIHNpZ251cEJ0blBvcHVwPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc2lnbnVwJyB9KTtcbiAgfSk7XG5cbiAgbG9nb3V0QnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9nb3V0JyB9LCAoKSA9PiB7XG4gICAgICBsb2dpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICB1c2VySW5mb1NlY3Rpb24/LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gRW1iZWRkZWQgc2VhcmNoIChmZWF0dXJlOiBxdWVyeSBcdTIxOTIgSGFuem8gYW5zd2VyIGVuZ2luZSkgLS0tXG4gIGNvbnN0IHNlYXJjaEZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLWZvcm0nKSBhcyBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgc2VhcmNoRm9ybT8uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcSA9IHNlYXJjaElucHV0Py52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcVxuICAgICAgPyBjaHJvbWUucnVudGltZS5nZXRVUkwoJ25ld3RhYi5odG1sJykgKyAnP3E9JyArIGVuY29kZVVSSUNvbXBvbmVudChxKVxuICAgICAgOiBjaHJvbWUucnVudGltZS5nZXRVUkwoJ25ld3RhYi5odG1sJyk7XG4gICAgY2hyb21lLnRhYnMuY3JlYXRlKHsgdXJsOiB0YXJnZXQgfSk7XG4gICAgd2luZG93LmNsb3NlKCk7XG4gIH0pO1xuXG4gIC8vIC0tLSBPcGVuIGNoYXQgLS0tXG4gIC8vIERlZmF1bHQgc3VyZmFjZTogaW4tcGFnZSBlZGdlLXBpbm5lZCBvdmVybGF5IChjb250ZW50LXNjcmlwdCkuIEhvbm91cnNcbiAgLy8gdGhlIHVzZXIncyBgb3ZlcmxheUVuYWJsZWRgLCBgb3ZlcmxheVNpZGVgLCBhbmQgYG92ZXJsYXlXaWR0aGAgcHJlZnMuXG4gIC8vIFdoZW4gYG92ZXJsYXlFbmFibGVkYCBpcyBmYWxzZSAob3IgdGhlIGFjdGl2ZSB0YWIgaXMgcHJpdmlsZWdlZCksIG9wZW5zXG4gIC8vIHRoZSBjaGF0IHN1cmZhY2UgaW4gYSBzdGFuZGFsb25lIHRhYi4gRmlyZWZveCB1c2VycyBjYW4gYWxzbyByZWFjaCBpdFxuICAvLyB2aWEgVmlldyBcdTIxOTIgU2lkZWJhciBcdTIxOTIgSGFuem8gQUkgKHJlZ2lzdGVyZWQgdmlhIHNpZGViYXJfYWN0aW9uKS5cbiAgZnVuY3Rpb24gb3BlblNpZGViYXJUYWIoKSB7XG4gICAgY2hyb21lLnRhYnMuY3JlYXRlKHsgdXJsOiBjaHJvbWUucnVudGltZS5nZXRVUkwoJ3NpZGViYXIuaHRtbCcpIH0pO1xuICAgIHdpbmRvdy5jbG9zZSgpO1xuICB9XG5cbiAgb3BlblBhbmVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjaHJvbWUuc3RvcmFnZT8uc3luYz8uZ2V0Py4oWydvdmVybGF5RW5hYmxlZCcsICdvdmVybGF5U2lkZScsICdvdmVybGF5V2lkdGgnXSwgKHZhbHMpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZWQgPSB2YWxzPy5vdmVybGF5RW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICBjb25zdCBzaWRlID0gdmFscz8ub3ZlcmxheVNpZGUgPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICBjb25zdCB3aWR0aDogT3ZlcmxheVdpZHRoID0gdmFscz8ub3ZlcmxheVdpZHRoID09PSAnY29tcGFjdCdcbiAgICAgICAgPyAnY29tcGFjdCcgOiB2YWxzPy5vdmVybGF5V2lkdGggPT09ICd3aWRlJyA/ICd3aWRlJyA6ICdkZWZhdWx0JztcbiAgICAgIGlmICghZW5hYmxlZCkgeyBvcGVuU2lkZWJhclRhYigpOyByZXR1cm47IH1cbiAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRhYnNbMF07XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzSW5qZWN0YWJsZVRhYihhY3RpdmVUYWIpID8gYWN0aXZlVGFiIDogbnVsbDtcbiAgICAgICAgaWYgKCF0YXJnZXQ/LmlkKSB7IG9wZW5TaWRlYmFyVGFiKCk7IHJldHVybjsgfVxuICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG4gICAgICAgICAgYWN0aW9uOiAncGFnZS5vdmVybGF5LnNob3cnLFxuICAgICAgICAgIHRhYklkOiB0YXJnZXQuaWQsXG4gICAgICAgICAgc2lkZSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfSwgKCkgPT4gd2luZG93LmNsb3NlKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNldEFjdGl2ZVNpZGUoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgIGNocm9tZS5zdG9yYWdlPy5zeW5jPy5zZXQ/Lih7IG92ZXJsYXlTaWRlOiBzaWRlIH0pO1xuICAgIHBpbkxlZnRCdG4/LnNldEF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUnLCBzaWRlID09PSAnbGVmdCcgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICBwaW5SaWdodEJ0bj8uc2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIHNpZGUgPT09ICdyaWdodCcgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0YWJzWzBdPy5pZDtcbiAgICAgIGlmIChpZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkuc2V0U2lkZScsIHRhYklkOiBpZCwgc2lkZSB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBzZXRBY3RpdmVXaWR0aCh3aWR0aDogT3ZlcmxheVdpZHRoKSB7XG4gICAgY2hyb21lLnN0b3JhZ2U/LnN5bmM/LnNldD8uKHsgb3ZlcmxheVdpZHRoOiB3aWR0aCB9KTtcbiAgICB3aWR0aEJ0bnMuZm9yRWFjaCgoYikgPT4gYi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2lkdGgnKSA9PT0gd2lkdGggPyAndHJ1ZScgOiAnZmFsc2UnKSk7XG4gICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGFic1swXT8uaWQ7XG4gICAgICBpZiAoaWQpIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnNldFdpZHRoJywgdGFiSWQ6IGlkLCB3aWR0aCB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBzZXRPdmVybGF5RW5hYmxlZChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgY2hyb21lLnN0b3JhZ2U/LnN5bmM/LnNldD8uKHsgb3ZlcmxheUVuYWJsZWQ6IGVuYWJsZWQgfSk7XG4gICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGFic1swXT8uaWQ7XG4gICAgICBpZiAoaWQpIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnNldEVuYWJsZWQnLCB0YWJJZDogaWQsIGVuYWJsZWQgfSk7XG4gICAgfSk7XG4gICAgY2hyb21lLnN0b3JhZ2U/LnN5bmM/LmdldD8uKFsnb3ZlcmxheVNpZGUnLCAnb3ZlcmxheVdpZHRoJ10sICh2YWxzKSA9PiB7XG4gICAgICBjb25zdCBzaWRlID0gdmFscz8ub3ZlcmxheVNpZGUgPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICBjb25zdCB3aWR0aDogT3ZlcmxheVdpZHRoID0gdmFscz8ub3ZlcmxheVdpZHRoID09PSAnY29tcGFjdCdcbiAgICAgICAgPyAnY29tcGFjdCcgOiB2YWxzPy5vdmVybGF5V2lkdGggPT09ICd3aWRlJyA/ICd3aWRlJyA6ICdkZWZhdWx0JztcbiAgICAgIHN5bmNTZXR0aW5nc1VpKGVuYWJsZWQsIHNpZGUsIHdpZHRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBpbkxlZnRCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc2V0QWN0aXZlU2lkZSgnbGVmdCcpKTtcbiAgcGluUmlnaHRCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc2V0QWN0aXZlU2lkZSgncmlnaHQnKSk7XG4gIHdpZHRoQnRucy5mb3JFYWNoKChiKSA9PiBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNvbnN0IHcgPSBiLmdldEF0dHJpYnV0ZSgnZGF0YS13aWR0aCcpIGFzIE92ZXJsYXlXaWR0aCB8IG51bGw7XG4gICAgaWYgKHcgPT09ICdjb21wYWN0JyB8fCB3ID09PSAnZGVmYXVsdCcgfHwgdyA9PT0gJ3dpZGUnKSBzZXRBY3RpdmVXaWR0aCh3KTtcbiAgfSkpO1xuICBvdmVybGF5RW5hYmxlZENoZWNrYm94Py5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgIHNldE92ZXJsYXlFbmFibGVkKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgfSk7XG5cbiAgLy8gSW5pdGlhbCBVSSBzeW5jIGZyb20gc3RvcmFnZS5cbiAgY2hyb21lLnN0b3JhZ2U/LnN5bmM/LmdldD8uKFsnb3ZlcmxheUVuYWJsZWQnLCAnb3ZlcmxheVNpZGUnLCAnb3ZlcmxheVdpZHRoJ10sICh2YWxzKSA9PiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IHZhbHM/Lm92ZXJsYXlFbmFibGVkICE9PSBmYWxzZTtcbiAgICBjb25zdCBzaWRlID0gdmFscz8ub3ZlcmxheVNpZGUgPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgY29uc3Qgd2lkdGg6IE92ZXJsYXlXaWR0aCA9IHZhbHM/Lm92ZXJsYXlXaWR0aCA9PT0gJ2NvbXBhY3QnXG4gICAgICA/ICdjb21wYWN0JyA6IHZhbHM/Lm92ZXJsYXlXaWR0aCA9PT0gJ3dpZGUnID8gJ3dpZGUnIDogJ2RlZmF1bHQnO1xuICAgIHN5bmNTZXR0aW5nc1VpKGVuYWJsZWQsIHNpZGUsIHdpZHRoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gaXNJbmplY3RhYmxlVGFiKHRhYjogY2hyb21lLnRhYnMuVGFiIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0YWIgfHwgIXRhYi5pZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHVybCA9IHRhYi51cmwgfHwgJyc7XG4gICAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Nocm9tZTovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWUtZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2RldnRvb2xzOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2VkZ2U6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnYWJvdXQ6JykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ3ZpZXctc291cmNlOicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdtb3otZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9wZW5QYWdlT3ZlcmxheT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ09wZW5pbmcuLi4nO1xuICAgIG9wZW5QYWdlT3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcblxuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVUYWIgPSB0YWJzWzBdO1xuICAgICAgbGV0IHRhcmdldFRhYiA9IGlzSW5qZWN0YWJsZVRhYihhY3RpdmVUYWIpID8gYWN0aXZlVGFiIDogbnVsbDtcblxuICAgICAgaWYgKCF0YXJnZXRUYWIpIHtcbiAgICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0sIChhbGxUYWJzKSA9PiB7XG4gICAgICAgICAgdGFyZ2V0VGFiID0gYWxsVGFicy5maW5kKCh0YWIpID0+IGlzSW5qZWN0YWJsZVRhYih0YWIpKSB8fCBudWxsO1xuICAgICAgICAgIGlmICghdGFyZ2V0VGFiPy5pZCkge1xuICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIHZhbGlkIHBhZ2UgdGFiJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCAxMjAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS50b2dnbGUnLCB0YWJJZDogdGFyZ2V0VGFiLmlkIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCA5MDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIEFjdGl2ZSBUYWInO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVW5hdmFpbGFibGUgb24gdGhpcyBwYWdlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9IG9wZW5lZCA/ICdPdmVybGF5IE9wZW5lZCcgOiAnT3ZlcmxheSBIaWRkZW4nO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdUb2dnbGUgT24tUGFnZSBPdmVybGF5JztcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9LCA5MDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBTdGF0dXMgLS0tXG4gIGZ1bmN0aW9uIHNldFN0YXR1cyhkb3Q6IEhUTUxFbGVtZW50LCBkZXRhaWw6IEhUTUxFbGVtZW50LCBjb25uZWN0ZWQ6IGJvb2xlYW4sIHRleHQ6IHN0cmluZykge1xuICAgIGRvdC5jbGFzc0xpc3QudG9nZ2xlKCdjb25uZWN0ZWQnLCBjb25uZWN0ZWQpO1xuICAgIGRvdC5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb25uZWN0ZWQnLCAhY29ubmVjdGVkKTtcbiAgICBkZXRhaWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaFN0YXR1cygpIHtcbiAgICAvLyBaQVAgQnJpZGdlXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAuc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICBjb25zdCB6YXAgPSByZXNwb25zZS56YXA7XG4gICAgICAgIGlmICh6YXAuY29ubmVjdGVkKSB7XG4gICAgICAgICAgY29uc3QgbWNwQ291bnQgPSB6YXAubWNwcz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgY29uc3QgdG9vbENvdW50ID0gemFwLm1jcHM/LnJlZHVjZSgoc3VtOiBudW1iZXIsIG06IGFueSkgPT4gc3VtICsgKG0udG9vbHM/Lmxlbmd0aCB8fCAwKSwgMCkgfHwgMDtcbiAgICAgICAgICBzZXRTdGF0dXMoemFwU3RhdHVzLCB6YXBEZXRhaWwsIHRydWUsIGAke21jcENvdW50fSBNQ1AsICR7dG9vbENvdW50fSB0b29sc2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFN0YXR1cyh6YXBTdGF0dXMsIHphcERldGFpbCwgZmFsc2UsICdOb3QgY29ubmVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENEUCBCcmlkZ2VcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2JyaWRnZS5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCBicm93c2VycyA9IHJlc3BvbnNlLmJyb3dzZXJzIHx8IFtdO1xuICAgICAgICBzZXRTdGF0dXMoY2RwU3RhdHVzLCBjZHBEZXRhaWwsIHRydWUsIGJyb3dzZXJzLmxlbmd0aCA/IGBDb25uZWN0ZWRgIDogJ0Nvbm5lY3RlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U3RhdHVzKGNkcFN0YXR1cywgY2RwRGV0YWlsLCBmYWxzZSwgJ05vdCBjb25uZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE1DUCBCcmlkZ2UgXHUyMDE0IHByb2JlIHRoZSBjb25maWd1cmVkIHBvcnQgKGRlZmF1bHQgOTIyNCBmb3IgaGFuem8tbWNwIEhUVFApLlxuICAgIC8vIEZhbGxzIGJhY2sgdG8gOTIyNCBvbmx5IGlmIHN0b3JhZ2UgaGFzbid0IGJlZW4gd3JpdHRlbiB5ZXQsIGJ1dCBhbHdheXNcbiAgICAvLyBTSE9XUyB0aGUgYWN0dWFsIHBvcnQgdGhhdCB3YXMgcHJvYmVkIHNvIHRoZSB1c2VyIGlzbid0IGxpZWQgdG8uXG4gICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFsnbWNwQnJpZGdlUG9ydCddLCAocykgPT4ge1xuICAgICAgY29uc3QgcHJvYmVQb3J0ID0gTnVtYmVyKHMubWNwQnJpZGdlUG9ydCkgfHwgOTIyNDtcbiAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vbG9jYWxob3N0OiR7cHJvYmVQb3J0fWA7XG4gICAgICBjb25zdCBvZmZsaW5lID0gKCkgPT4gc2V0U3RhdHVzKG1jcFN0YXR1cywgbWNwUG9ydCwgZmFsc2UsIGA6JHtwcm9iZVBvcnR9IG9mZmxpbmVgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZldGNoKHVybCwgeyBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMjAwMCkgfSlcbiAgICAgICAgICAudGhlbihyID0+IHIuanNvbigpKVxuICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGE/LnNlcnZpY2UgPT09ICdoYW56by5icm93c2VyJykge1xuICAgICAgICAgICAgICBzZXRTdGF0dXMobWNwU3RhdHVzLCBtY3BQb3J0LCB0cnVlLCBgOiR7cHJvYmVQb3J0fSBPS2ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0U3RhdHVzKG1jcFN0YXR1cywgbWNwUG9ydCwgZmFsc2UsIGA6JHtwcm9iZVBvcnR9IE4vQWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKG9mZmxpbmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIG9mZmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFdlYkdQVVxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncnVuTG9jYWxBSScsIHByb21wdDogJycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBzZXRTdGF0dXMoZ3B1U3RhdHVzLCBncHVEZXRhaWwsICEhcmVzcG9uc2U/LnN1Y2Nlc3MsIHJlc3BvbnNlPy5zdWNjZXNzID8gJ0F2YWlsYWJsZScgOiAnTm90IGF2YWlsYWJsZScpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIFNldHRpbmdzIC0tLVxuICBvcGVuU2V0dGluZ3M/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIHNldHRpbmdzU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICBsb2FkU2V0dGluZ3MoKTtcbiAgfSk7XG5cbiAgYmFja0J0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgc2V0dGluZ3NTZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICB9KTtcblxuICBmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFsnbWNwUG9ydCcsICdjZHBQb3J0JywgJ3phcFBvcnRzJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG1jcFBvcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJykgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgICBjb25zdCBjZHBQb3J0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgICAgY29uc3QgemFwUG9ydHNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAobWNwUG9ydElucHV0KSBtY3BQb3J0SW5wdXQudmFsdWUgPSBTdHJpbmcocmVzdWx0Lm1jcFBvcnQgfHwgMzAwMSk7XG4gICAgICBpZiAoY2RwUG9ydElucHV0KSBjZHBQb3J0SW5wdXQudmFsdWUgPSBTdHJpbmcocmVzdWx0LmNkcFBvcnQgfHwgOTIyMyk7XG4gICAgICBpZiAoemFwUG9ydHNJbnB1dCkgemFwUG9ydHNJbnB1dC52YWx1ZSA9IChyZXN1bHQuemFwUG9ydHMgfHwgWzk5OTksIDk5OTgsIDk5OTcsIDk5OTYsIDk5OTVdKS5qb2luKCcsJyk7XG4gICAgfSk7XG5cbiAgICAvLyBJbnNwZWN0LW1vZGlmaWVyIGRpc3BsYXkgKyByZWNvcmRlci5cbiAgICByZWZyZXNoU2hvcnRjdXREaXNwbGF5KCk7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgSW5zcGVjdCBTaG9ydGN1dCBSZWNvcmRlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgLy8gU2hvd3MgdGhlIGN1cnJlbnQgY2hvcmQ7IGNsaWNraW5nIFwiUmVjb3JkXCIgY2FwdHVyZXMgYSBzaW5nbGUga2V5ZG93blxuICAvLyBhbmQgc2F2ZXMgdGhlIHJlc3VsdGluZyBTaG9ydGN1dCB0byBjaHJvbWUuc3RvcmFnZS5sb2NhbC4gQ29udGVudFxuICAvLyBzY3JpcHRzIHdhdGNoIHN0b3JhZ2UgZm9yIGNoYW5nZXMgYW5kIHVwZGF0ZSB3aXRob3V0IHBhZ2UgcmVsb2FkLlxuICBsZXQgcmVjb3JkaW5nU2hvcnRjdXQgPSBmYWxzZTtcbiAgbGV0IHJlY29yZGluZ0hhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoU2hvcnRjdXREaXNwbGF5KCkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zcGVjdC1zaG9ydGN1dC1kaXNwbGF5Jyk7XG4gICAgY29uc3Qgc2V0dGluZ3NEaXNwbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3BlY3Qtc2hvcnRjdXQtY3VycmVudCcpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBsb2FkSW5zcGVjdFNob3J0Y3V0KGNocm9tZS5zdG9yYWdlLmxvY2FsIGFzIGFueSk7XG4gICAgY29uc3QgdGV4dCA9IGZvcm1hdFNob3J0Y3V0KHMpO1xuICAgIGlmIChkaXNwbGF5KSBkaXNwbGF5LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICBpZiAoc2V0dGluZ3NEaXNwbGF5KSBzZXR0aW5nc0Rpc3BsYXkudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8vIEluaXRpYWwgcmVuZGVyIGJlZm9yZSBzZXR0aW5ncyBwYW5lbCBpcyBvcGVuZWQgKGhlYWRlciBjaGlwKS5cbiAgcmVmcmVzaFNob3J0Y3V0RGlzcGxheSgpO1xuXG4gIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nKGxhYmVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmIChyZWNvcmRpbmdTaG9ydGN1dCkgcmV0dXJuO1xuICAgIHJlY29yZGluZ1Nob3J0Y3V0ID0gdHJ1ZTtcbiAgICBsYWJlbC50ZXh0Q29udGVudCA9ICdQcmVzcyBhIGtleVx1MjAyNic7XG4gICAgcmVjb3JkaW5nSGFuZGxlciA9IGFzeW5jIChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgbmV4dCA9IHNob3J0Y3V0RnJvbUV2ZW50KGUpO1xuICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgIC8vIFRhYi9Fc2MgcHJlc3NlZCBcdTIwMTQgYmFpbCBvdXQgd2l0aG91dCBzYXZpbmcuXG4gICAgICAgIHN0b3BSZWNvcmRpbmcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2F2ZUluc3BlY3RTaG9ydGN1dChjaHJvbWUuc3RvcmFnZS5sb2NhbCBhcyBhbnksIG5leHQpO1xuICAgICAgc3RvcFJlY29yZGluZygpO1xuICAgICAgcmVmcmVzaFNob3J0Y3V0RGlzcGxheSgpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHJlY29yZGluZ0hhbmRsZXIsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAvLyBTYWZldHk6IGNhbmNlbCByZWNvcmRpbmcgYWZ0ZXIgMTBzIGluIGNhc2UgdGhlIHVzZXIgd2FuZGVycyBvZmYuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChyZWNvcmRpbmdTaG9ydGN1dCkgc3RvcFJlY29yZGluZygpOyB9LCAxMDAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wUmVjb3JkaW5nKCkge1xuICAgIGlmIChyZWNvcmRpbmdIYW5kbGVyKSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcmVjb3JkaW5nSGFuZGxlciwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJlY29yZGluZ0hhbmRsZXIgPSBudWxsO1xuICAgIHJlY29yZGluZ1Nob3J0Y3V0ID0gZmFsc2U7XG4gICAgcmVmcmVzaFNob3J0Y3V0RGlzcGxheSgpO1xuICB9XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZC1pbnNwZWN0LXNob3J0Y3V0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnNwZWN0LXNob3J0Y3V0LWRpc3BsYXknKTtcbiAgICBpZiAoZGlzcGxheSkgc3RhcnRSZWNvcmRpbmcoZGlzcGxheSk7XG4gIH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zcGVjdC1zaG9ydGN1dC1yZWNvcmQnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3BlY3Qtc2hvcnRjdXQtY3VycmVudCcpO1xuICAgIGlmIChkaXNwbGF5KSBzdGFydFJlY29yZGluZyhkaXNwbGF5KTtcbiAgfSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnNwZWN0LXNob3J0Y3V0LXJlc2V0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgYXdhaXQgc2F2ZUluc3BlY3RTaG9ydGN1dChjaHJvbWUuc3RvcmFnZS5sb2NhbCBhcyBhbnksIHsgLi4uREVGQVVMVF9JTlNQRUNUX1NIT1JUQ1VUIH0pO1xuICAgIHJlZnJlc2hTaG9ydGN1dERpc3BsYXkoKTtcbiAgfSk7XG5cbiAgc2F2ZVNldHRpbmdzPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCBtY3BQb3J0VmFsID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKT8udmFsdWUpIHx8IDMwMDE7XG4gICAgY29uc3QgY2RwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCA5MjIzO1xuICAgIGNvbnN0IHphcFBvcnRzVmFsID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpPy52YWx1ZSB8fCAnJylcbiAgICAgIC5zcGxpdCgnLCcpLm1hcChwID0+IHBhcnNlSW50KHAudHJpbSgpKSkuZmlsdGVyKHAgPT4gcCA+IDAgJiYgcCA8IDY1NTM2KTtcblxuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLnNldCh7XG4gICAgICBtY3BQb3J0OiBtY3BQb3J0VmFsLFxuICAgICAgY2RwUG9ydDogY2RwUG9ydFZhbCxcbiAgICAgIHphcFBvcnRzOiB6YXBQb3J0c1ZhbC5sZW5ndGggPyB6YXBQb3J0c1ZhbCA6IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSxcbiAgICB9LCAoKSA9PiB7XG4gICAgICBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZWQhJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZSBTZXR0aW5ncyc7IH0sIDE1MDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gVGVzdCBDb25uZWN0aW9uIC0tLVxuICB0ZXN0Q29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgdGVzdENvbm5lY3Rpb24udGV4dENvbnRlbnQgPSAnVGVzdGluZy4uLic7XG4gICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAuZGlzY292ZXInIH0sICgpID0+IHtcbiAgICAgIHJlZnJlc2hTdGF0dXMoKTtcbiAgICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3QgQ29ubmVjdGlvbic7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgWydzb3VyY2UtbWFwcycsICd3ZWJncHUtYWknLCAnYnJvd3Nlci1jb250cm9sJywgJ3RhYi1maWxlc3lzdGVtJ10uZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGNoZWNrYm94KSB7XG4gICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoW2lkXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjaGVja2JveC5jaGVja2VkID0gcmVzdWx0W2lkXSAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgb25cbiAgICAgIH0pO1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBbaWRdOiBjaGVja2JveC5jaGVja2VkIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyAtLS0gQnJvd3NlciBCYWNrZW5kIFBpY2tlciAtLS1cbiAgY29uc3QgYmFja2VuZFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicm93c2VyLWJhY2tlbmQnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IGJyaWRnZVN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2Utc3RhdHVzJyk7XG4gIGNvbnN0IGJyaWRnZURldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2UtZGV0YWlsJyk7XG5cbiAgZnVuY3Rpb24gbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCkge1xuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuZ2V0KFsnYnJvd3NlckJhY2tlbmQnXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGJhY2tlbmRTZWxlY3QgJiYgcmVzdWx0LmJyb3dzZXJCYWNrZW5kKSB7XG4gICAgICAgIGJhY2tlbmRTZWxlY3QudmFsdWUgPSByZXN1bHQuYnJvd3NlckJhY2tlbmQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoQnJpZGdlU3RhdHVzKCkge1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYnJpZGdlLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgJiYgcmVzcG9uc2UuY29ubmVjdGVkKSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJzID0gcmVzcG9uc2UuYnJvd3NlcnMgfHwgW107XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9IGJyb3dzZXJzLmxlbmd0aFxuICAgICAgICAgID8gYENvbm5lY3RlZDogJHticm93c2Vycy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICdDb25uZWN0ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QuYWRkKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlRGV0YWlsLnRleHRDb250ZW50ID0gJ05vdCBjb25uZWN0ZWQnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYmFja2VuZFNlbGVjdD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmFja2VuZFNlbGVjdC52YWx1ZTtcblxuICAgIC8vIFNhdmUgdG8gY2hyb21lLnN0b3JhZ2Uuc3luYyAoY3Jvc3MtZGV2aWNlKVxuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuc2V0KHsgYnJvd3NlckJhY2tlbmQ6IHZhbHVlIH0pO1xuXG4gICAgLy8gRm9yd2FyZCB0byBiYWNrZ3JvdW5kIHRvIHBlcnNpc3QgdmlhIENEUCBicmlkZ2UgKyBzeW5jIHRvIElBTVxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2NvbmZpZy5zYXZlJyxcbiAgICAgIGtleTogJ2Jyb3dzZXJCYWNrZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9KTtcblxuICBsb2FkQmFja2VuZFByZWZlcmVuY2UoKTtcbiAgcmVmcmVzaEJyaWRnZVN0YXR1cygpO1xuXG4gIC8vIC0tLSBUb29scyAtLS1cblxuICBmdW5jdGlvbiBzaG93VG9vbEZlZWRiYWNrKGJ0bjogSFRNTEVsZW1lbnQsIHRleHQ6IHN0cmluZywgZHVyYXRpb24gPSAxMjAwKSB7XG4gICAgY29uc3QgZmIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBmYi5jbGFzc05hbWUgPSAndG9vbC1mZWVkYmFjayc7XG4gICAgZmIudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIGJ0bi5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgYnRuLmFwcGVuZENoaWxkKGZiKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZiLnJlbW92ZSgpLCBkdXJhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBY3RpdmVUYWIoKTogUHJvbWlzZTxjaHJvbWUudGFicy5UYWIgfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgICByZXNvbHZlKHRhYnNbMF0gJiYgaXNJbmplY3RhYmxlVGFiKHRhYnNbMF0pID8gdGFic1swXSA6IG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBFbGVtZW50IFBpY2tlciAvIFNlbGVjdG9yIHRvb2xcbiAgY29uc3QgdG9vbFBpY2tlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sLXBpY2tlcicpO1xuICB0b29sUGlja2VyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRBY3RpdmVUYWIoKTtcbiAgICBpZiAoIXRhYj8uaWQpIHtcbiAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBpY2tlciwgJ05vIHBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2VuZCBtZXNzYWdlIHRvIGNvbnRlbnQgc2NyaXB0IHRvIHN0YXJ0IHBpY2tlciBtb2RlXG4gICAgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiLmlkLCB7IGFjdGlvbjogJ3Rvb2wucGlja2VyLnN0YXJ0JyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBpY2tlciwgJ04vQScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQaWNrZXIsICdQaWNrLi4uJyk7XG4gICAgICAvLyBDbG9zZSBwb3B1cCBzbyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5jbG9zZSgpLCA0MDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBTY3JlZW5zaG90IHRvb2xcbiAgY29uc3QgdG9vbFNjcmVlbnNob3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbC1zY3JlZW5zaG90Jyk7XG4gIHRvb2xTY3JlZW5zaG90Py5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICB0b29sU2NyZWVuc2hvdC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICB0cnkge1xuICAgICAgY2hyb21lLnRhYnMuY2FwdHVyZVZpc2libGVUYWIobnVsbCBhcyBhbnksIHsgZm9ybWF0OiAncG5nJyB9LCAoZGF0YVVybCkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yIHx8ICFkYXRhVXJsKSB7XG4gICAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sU2NyZWVuc2hvdCwgJ0ZhaWxlZCcpO1xuICAgICAgICAgIHRvb2xTY3JlZW5zaG90LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29weSB0byBjbGlwYm9hcmQgYXMgaW1hZ2VcbiAgICAgICAgZmV0Y2goZGF0YVVybClcbiAgICAgICAgICAudGhlbihyID0+IHIuYmxvYigpKVxuICAgICAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBDbGlwYm9hcmRJdGVtKHsgJ2ltYWdlL3BuZyc6IGJsb2IgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZShbaXRlbV0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sU2NyZWVuc2hvdCwgJ0NvcGllZCEnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjazogb3BlbiBpbiBuZXcgdGFiXG4gICAgICAgICAgICBjaHJvbWUudGFicy5jcmVhdGUoeyB1cmw6IGRhdGFVcmwgfSk7XG4gICAgICAgICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xTY3JlZW5zaG90LCAnT3BlbmVkJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0b29sU2NyZWVuc2hvdC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFNjcmVlbnNob3QsICdFcnJvcicpO1xuICAgICAgdG9vbFNjcmVlbnNob3QucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFnZSBJbmZvIHRvb2xcbiAgY29uc3QgdG9vbFBhZ2VJbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2wtcGFnZWluZm8nKTtcbiAgdG9vbFBhZ2VJbmZvPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRBY3RpdmVUYWIoKTtcbiAgICBpZiAoIXRhYj8uaWQpIHtcbiAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBhZ2VJbmZvLCAnTm8gcGFnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWIuaWQsIHsgYWN0aW9uOiAndG9vbC5wYWdlaW5mbycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yIHx8ICFyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICAvLyBGYWxsYmFjazogYmFzaWMgaW5mbyBmcm9tIHRhYiBvYmplY3RcbiAgICAgICAgY29uc3QgaW5mbyA9IGBUaXRsZTogJHt0YWIudGl0bGV9XFxuVVJMOiAke3RhYi51cmx9YDtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaW5mbykudGhlbigoKSA9PiB7XG4gICAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGFnZUluZm8sICdDb3BpZWQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChyZXNwb25zZS5pbmZvKS50aGVuKCgpID0+IHtcbiAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGFnZUluZm8sICdDb3BpZWQhJyk7XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbFBhZ2VJbmZvLCAnRmFpbGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQWNjZXNzaWJpbGl0eSBBdWRpdCB0b29sXG4gIGNvbnN0IHRvb2xBMTF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2wtYWNjZXNzaWJpbGl0eScpO1xuICB0b29sQTExeT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0QWN0aXZlVGFiKCk7XG4gICAgaWYgKCF0YWI/LmlkKSB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xBMTF5LCAnTm8gcGFnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b29sQTExeS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xBMTF5LCAnUnVubmluZy4uLicpO1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXVkaXQuYWNjZXNzaWJpbGl0eScsIHRhYklkOiB0YWIuaWQgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0b29sQTExeS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yIHx8ICFyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xBMTF5LCAnRmFpbGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvdW50ID0gcmVzcG9uc2UuaXNzdWVzPy5sZW5ndGggfHwgMDtcbiAgICAgIHNob3dUb29sRmVlZGJhY2sodG9vbEExMXksIGNvdW50ID8gYCR7Y291bnR9IGlzc3Vlc2AgOiAnQ2xlYW4hJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFBlcmZvcm1hbmNlIEF1ZGl0IHRvb2xcbiAgY29uc3QgdG9vbFBlcmYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbC1wZXJmb3JtYW5jZScpO1xuICB0b29sUGVyZj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0QWN0aXZlVGFiKCk7XG4gICAgaWYgKCF0YWI/LmlkKSB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQZXJmLCAnTm8gcGFnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b29sUGVyZi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQZXJmLCAnUnVubmluZy4uLicpO1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXVkaXQucGVyZm9ybWFuY2UnLCB0YWJJZDogdGFiLmlkIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgdG9vbFBlcmYucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sUGVyZiwgJ0ZhaWxlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xQZXJmLCAnRG9uZScpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBDb25zb2xlIHRvb2wgXHUyMDE0IGV2YWx1YXRlIEpTXG4gIGNvbnN0IHRvb2xDb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2wtY29uc29sZScpO1xuICB0b29sQ29uc29sZT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0QWN0aXZlVGFiKCk7XG4gICAgaWYgKCF0YWI/LmlkKSB7XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xDb25zb2xlLCAnTm8gcGFnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTZW5kIHRvIGNvbnRlbnQgc2NyaXB0IHRvIHN0YXJ0IGFuIGlubGluZSBldmFsIHByb21wdFxuICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYi5pZCwgeyBhY3Rpb246ICd0b29sLmNvbnNvbGUuc3RhcnQnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgc2hvd1Rvb2xGZWVkYmFjayh0b29sQ29uc29sZSwgJ04vQScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaG93VG9vbEZlZWRiYWNrKHRvb2xDb25zb2xlLCAnT3BlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cuY2xvc2UoKSwgNDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIEFJIFVzYWdlIChDbGF1ZGUgKyBDb2RleCkgXHUyMDE0IGRhdGEgZmV0Y2hlZCBieSB0aGUgYmFja2dyb3VuZCBjb250ZXh0XG4gIC8vIHdoZXJlIGhvc3QgcGVybWlzc2lvbnMgYXR0YWNoIHRoZSBsaXZlIGNsYXVkZS5haSAvIGNoYXRncHQuY29tIGNvb2tpZXMuIC0tLVxuICBjb25zdCB1c2FnZUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNhZ2UtbGlzdCcpO1xuICBjb25zdCB1c2FnZVJlZnJlc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNhZ2UtcmVmcmVzaCcpO1xuXG4gIGludGVyZmFjZSBVc2FnZVdpbmRvdyB7IHVzZWRQZXJjZW50OiBudW1iZXI7IHJlc2V0c0F0Pzogc3RyaW5nIH1cbiAgaW50ZXJmYWNlIFVzYWdlU25hcHNob3RMaXRlIHtcbiAgICBwcmltYXJ5PzogVXNhZ2VXaW5kb3c7XG4gICAgc2Vjb25kYXJ5PzogVXNhZ2VXaW5kb3c7XG4gICAgaWRlbnRpdHk/OiB7IHBsYW4/OiBzdHJpbmcgfTtcbiAgfVxuICBpbnRlcmZhY2UgUHJvdmlkZXJVc2FnZUxpdGUge1xuICAgIHByb3ZpZGVySWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHNuYXBzaG90PzogVXNhZ2VTbmFwc2hvdExpdGU7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH1cblxuICBjb25zdCBlc2MgPSAoczogc3RyaW5nKSA9PlxuICAgIHMucmVwbGFjZSgvWyY8PlwiXS9nLCAoYykgPT4gKCh7ICcmJzogJyZhbXA7JywgJzwnOiAnJmx0OycsICc+JzogJyZndDsnLCAnXCInOiAnJnF1b3Q7JyB9KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KVtjXSk7XG5cbiAgZnVuY3Rpb24gcmVzZXRMYWJlbChpc28/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaXNvKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbXMgPSBuZXcgRGF0ZShpc28pLmdldFRpbWUoKSAtIERhdGUubm93KCk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobXMpKSByZXR1cm4gJyc7XG4gICAgaWYgKG1zIDw9IDApIHJldHVybiAncmVzZXRzIG5vdyc7XG4gICAgY29uc3QgbSA9IE1hdGgucm91bmQobXMgLyA2MDAwMCk7XG4gICAgaWYgKG0gPCA2MCkgcmV0dXJuIGByZXNldHMgaW4gJHttfW1gO1xuICAgIGNvbnN0IGggPSBNYXRoLnJvdW5kKG0gLyA2MCk7XG4gICAgaWYgKGggPCAyNCkgcmV0dXJuIGByZXNldHMgaW4gJHtofWhgO1xuICAgIHJldHVybiBgcmVzZXRzIGluICR7TWF0aC5yb3VuZChoIC8gMjQpfWRgO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFuZShsYWJlbDogc3RyaW5nLCB3OiBVc2FnZVdpbmRvdyB8IHVuZGVmaW5lZCwgY29sb3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdyB8fCB0eXBlb2Ygdy51c2VkUGVyY2VudCAhPT0gJ251bWJlcicpIHJldHVybiAnJztcbiAgICBjb25zdCBwY3QgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQody51c2VkUGVyY2VudCkpKTtcbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBjbGFzcz1cInVzYWdlLWxhbmVcIiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTFweDttYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDo1MnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQsIzg4OCk7XCI+JHtsYWJlbH08L3NwYW4+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxO2hlaWdodDo2cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlLTIsIzIyMik7b3ZlcmZsb3c6aGlkZGVuO1wiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoke3BjdH0lO2JhY2tncm91bmQ6JHtjb2xvciB8fCAndmFyKC0tYWNjZW50LCNkOTc3NTcpJ307XCI+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6MzRweDt0ZXh0LWFsaWduOnJpZ2h0O1wiPiR7cGN0fSU8L3NwYW4+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyVXNhZ2UocHJvdmlkZXJzOiBQcm92aWRlclVzYWdlTGl0ZVtdKSB7XG4gICAgaWYgKCF1c2FnZUxpc3QpIHJldHVybjtcbiAgICB1c2FnZUxpc3QuaW5uZXJIVE1MID0gcHJvdmlkZXJzXG4gICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwLmVycm9yXG4gICAgICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQsIzg4OCk7bWFyZ2luLXRvcDo0cHg7XCI+JHtlc2MocC5lcnJvcil9PC9kaXY+YFxuICAgICAgICAgIDogYCR7bGFuZSgnU2Vzc2lvbicsIHAuc25hcHNob3Q/LnByaW1hcnksIHAuY29sb3IpfSR7bGFuZSgnV2Vla2x5JywgcC5zbmFwc2hvdD8uc2Vjb25kYXJ5LCBwLmNvbG9yKX1cbiAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCwjODg4KTttYXJnaW4tdG9wOjNweDtcIj4ke2VzYyhyZXNldExhYmVsKHAuc25hcHNob3Q/LnByaW1hcnk/LnJlc2V0c0F0KSl9PC9kaXY+YDtcbiAgICAgICAgY29uc3QgcGxhbiA9IHAuc25hcHNob3Q/LmlkZW50aXR5Py5wbGFuO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2FnZS1yb3dcIiBzdHlsZT1cInBhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLCMyYTJhMmEpO2JvcmRlci1yYWRpdXM6OHB4O1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtcIj5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiR7cC5jb2xvciB8fCAnIzg4OCd9O1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O1wiPiR7ZXNjKHAuZGlzcGxheU5hbWUpfTwvc3Ryb25nPlxuICAgICAgICAgICAgICAke3BsYW4gPyBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkLCM4ODgpO1wiPiR7ZXNjKHBsYW4pfTwvc3Bhbj5gIDogJyd9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICR7Ym9keX1cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWRVc2FnZSgpIHtcbiAgICBpZiAoIXVzYWdlTGlzdCkgcmV0dXJuO1xuICAgIHVzYWdlTGlzdC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQsIzg4OCk7XCI+TG9hZGluZ1x1MjAyNjwvZGl2Pic7XG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd1c2FnZS5mZXRjaCcgfSwgKHJlc3ApID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3A/LnN1Y2Nlc3MpIHtcbiAgICAgICAgdXNhZ2VMaXN0LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCwjODg4KTtcIj5Vc2FnZSB1bmF2YWlsYWJsZTwvZGl2Pic7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbmRlclVzYWdlKHJlc3AucHJvdmlkZXJzIGFzIFByb3ZpZGVyVXNhZ2VMaXRlW10pO1xuICAgIH0pO1xuICB9XG5cbiAgdXNhZ2VSZWZyZXNoPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxvYWRVc2FnZSk7XG4gIGxvYWRVc2FnZSgpO1xuXG4gIC8vIEluaXRcbiAgY2hlY2tBdXRoKCk7XG59KTtcbiIsICIvKipcbiAqIEtleWJvYXJkLXNob3J0Y3V0IGNvbmZpZ3VyYXRpb24gc2hhcmVkIGJldHdlZW4gY29udGVudCBzY3JpcHRzLCB0aGVcbiAqIHBvcHVwIHJlY29yZGVyLCBhbmQgdGhlIGJhY2tncm91bmQuIEEgXCJzaG9ydGN1dFwiIGlzIGEgbm9ybWFsaXNlZFxuICogZGVzY3JpcHRpb24gb2YgYSBrZXlib2FyZCBjaG9yZCAobW9kaWZpZXJzICsga2V5KSB0aGF0IHRlbGxzIHRoZVxuICogY29udGVudCBzY3JpcHQgd2hpY2ggY29tYmluYXRpb24gdG9nZ2xlcyBpbnNwZWN0IC8gY2xpY2stdG8tc291cmNlXG4gKiBuYXZpZ2F0aW9uLiBUaGUgZGVmYXVsdCBpcyAqKkN0cmwqKiBhbG9uZSAoTWFjIHVzZXJzIHdvdWxkIG90aGVyd2lzZVxuICogbmVlZCB0byBob2xkIE9wdGlvbiwgd2hpY2ggaW50ZXJmZXJlcyB3aXRoIG5hdGl2ZSBtYWNPUyBjaGFyYWN0ZXJcbiAqIGlucHV0KS4gQW55IGNvbWJpbmF0aW9uIGlzIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHRoZSBwb3B1cC5cbiAqXG4gKiBTdG9yYWdlIHNoYXBlOiBgY2hyb21lLnN0b3JhZ2UubG9jYWxbXCJoYW56b19zaG9ydGN1dF9pbnNwZWN0XCJdID0gU2hvcnRjdXRgLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvcnRjdXQge1xuICAvKiogV2hldGhlciBDdHJsIChvciBDbWQgb24gbWFjT1MpIGlzIHBhcnQgb2YgdGhlIGNob3JkLiAqL1xuICBjdHJsOiBib29sZWFuO1xuICAvKiogQ21kL01ldGEga2V5IChtYWNPUykgXHUyMDE0IGJvdW5kIHNlcGFyYXRlbHkgZnJvbSBDdHJsLiAqL1xuICBtZXRhOiBib29sZWFuO1xuICBhbHQ6IGJvb2xlYW47XG4gIHNoaWZ0OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgbGV0dGVyIG9yIGBLZXkqYCB2YWx1ZS4gRW1wdHkgc3RyaW5nIG1lYW5zIG1vZGlmaWVyLW9ubHkuICovXG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgU1RPUkFHRV9LRVlfSU5TUEVDVCA9ICdoYW56b19zaG9ydGN1dF9pbnNwZWN0JztcblxuLyoqXG4gKiBEZWZhdWx0IGluc3BlY3QtbW9kaWZpZXI6ICoqQ3RybCoqIChvciBDbWQgb24gbWFjT1MpIGFsb25lLlxuICpcbiAqIFdoeSBub3QgQWx0L09wdGlvbj8gT24gbWFjT1MsIE9wdGlvbiBpcyB0aGUgc3lzdGVtLWxldmVsIGNoYXJhY3Rlci1cbiAqIGNvbXBvc2UgbW9kaWZpZXIgKE9wdGlvbi1jIFx1MjE5MiBcdTAwRTcsIE9wdGlvbi0zIFx1MjE5MiBcdTAwQTMpLiBVc2luZyBPcHRpb24gZm9yIG91clxuICogaW5zcGVjdG9yIHNpbGVudGx5IHN3YWxsb3dzIHJlYWwgdXNlciBrZXlzdHJva2VzIGFuZCBjb3JydXB0cyB0ZXh0XG4gKiBpbnB1dCBvbiBldmVyeSBwYWdlIHRoYXQgaGFzIHVzIGluamVjdGVkLiBDdHJsIGlzIHRoZSBuYXR1cmFsIGNob2ljZVxuICogZm9yIGEgZGV2ZWxvcGVyLXRvb2xzIG1vZGlmaWVyIChhbmQgbWF0Y2hlcyBEZXZUb29scycgSW5zcGVjdCBFbGVtZW50XG4gKiBiZWhhdmlvdXIgb24gZXZlcnkgYnJvd3NlcikuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOU1BFQ1RfU0hPUlRDVVQ6IFNob3J0Y3V0ID0ge1xuICBjdHJsOiB0cnVlLFxuICBtZXRhOiBmYWxzZSxcbiAgYWx0OiBmYWxzZSxcbiAgc2hpZnQ6IGZhbHNlLFxuICBrZXk6ICcnLFxufTtcblxuLyoqXG4gKiBNYXRjaCBhIGtleWJvYXJkIC8gbW91c2UgZXZlbnQgYWdhaW5zdCBhIFNob3J0Y3V0LiBSZXR1cm5zIHRydWUgaWZmXG4gKiBldmVyeSByZXF1aXJlZCBtb2RpZmllciBpcyBoZWxkIEFORCBldmVyeSBub24tcmVxdWlyZWQgbW9kaWZpZXIgaXNcbiAqIE5PVCBoZWxkIEFORCB0aGUga2V5IG1hdGNoZXMgKG9yIGBrZXkgPT09ICcnYCBmb3IgbW9kaWZpZXItb25seSkuXG4gKlxuICogT24gbWFjT1MsIGN0cmwgbWF0Y2hlcyBgZXZlbnQubWV0YUtleWAgaWYgdGhlIHNhdmVkIHNob3J0Y3V0IGhhc1xuICogbWV0YT10cnVlIE9SIGN0cmw9dHJ1ZSAod2UgdHJlYXQgQ3RybC1vbi1NYWMgYW5kIENtZCBhcyBlcXVpdmFsZW50XG4gKiBmb3IgdGhlIGRlZmF1bHQgXHUyMDE0IG1hbnkgZGV2cyBhc3N1bWUgXCJDdHJsXCIgcmVhbGx5IG1lYW5zIFwidGhlIHBsYXRmb3JtXG4gKiBwcmltYXJ5IG1vZGlmaWVyXCIpLiBUbyBhZGRyZXNzIGV4cGxpY2l0bHksIHNldCBjdHJsPWZhbHNlIG1ldGE9dHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNTaG9ydGN1dChcbiAgZTogeyBjdHJsS2V5PzogYm9vbGVhbjsgbWV0YUtleT86IGJvb2xlYW47IGFsdEtleT86IGJvb2xlYW47IHNoaWZ0S2V5PzogYm9vbGVhbjsga2V5Pzogc3RyaW5nIH0sXG4gIHM6IFNob3J0Y3V0LFxuKTogYm9vbGVhbiB7XG4gIC8vIFJlcXVpcmVkIG1vZGlmaWVycyBcdTIwMTQgZXZlcnkgdHJ1dGh5IGZpZWxkIG9mIGBzYCBtdXN0IGJlIHNldCBvbiB0aGUgZXZlbnQuXG4gIGlmIChzLmN0cmwgJiYgIWUuY3RybEtleSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5tZXRhICYmICFlLm1ldGFLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHMuYWx0ICYmICFlLmFsdEtleSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5zaGlmdCAmJiAhZS5zaGlmdEtleSkgcmV0dXJuIGZhbHNlO1xuICAvLyBGb3JiaWRkZW4gbW9kaWZpZXJzIFx1MjAxNCBldmVyeSBmYWxzZSBmaWVsZCBvZiBgc2AgbXVzdCBOT1QgYmUgc2V0IG9uXG4gIC8vIHRoZSBldmVudC4gT3RoZXJ3aXNlIEN0cmwtb25seSB3b3VsZCBtYXRjaCBDdHJsLVNoaWZ0LVggdG9vLCB3aGljaFxuICAvLyB3b3VsZCBzdXJwcmlzZSB1c2VycyB3aG8gY29uZmlndXJlZCBDdHJsIGFsb25lLlxuICBpZiAoIXMuY3RybCAmJiBlLmN0cmxLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFzLm1ldGEgJiYgZS5tZXRhS2V5KSByZXR1cm4gZmFsc2U7XG4gIGlmICghcy5hbHQgJiYgZS5hbHRLZXkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFzLnNoaWZ0ICYmIGUuc2hpZnRLZXkpIHJldHVybiBmYWxzZTtcbiAgLy8gS2V5IG1hdGNoIChjYXNlLWluc2Vuc2l0aXZlKS4gRW1wdHkga2V5IG1lYW5zIHRoZSBjaG9yZCBpc1xuICAvLyBtb2RpZmllci1vbmx5IFx1MjAxNCBhbnkgc3Vic2VxdWVudCBrZXkgc3RpbGwgc2F0aXNmaWVzIGl0LlxuICBpZiAocy5rZXkgJiYgKGUua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpICE9PSBzLmtleS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlbmRlciBhIFNob3J0Y3V0IGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGxpa2UgXCJDdHJsK1NoaWZ0K0tcIiBvclxuICogXCJcdTIzMTgrQ2xpY2tcIi4gVXNlZCBieSB0aGUgcG9wdXAgVUkgYW5kIGFueSBwbGFjZSB3ZSBzdXJmYWNlIHRoZSBjaG9yZFxuICogdG8gdGhlIHVzZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTaG9ydGN1dChzOiBTaG9ydGN1dCwgb3B0cz86IHsgbWFjPzogYm9vbGVhbjsgY2xpY2s/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuICBjb25zdCBtYWMgPSBvcHRzPy5tYWMgPz8gKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9NYWMvaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSB8fCAnJykpO1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHMuY3RybCkgcGFydHMucHVzaChtYWMgPyAnXHUyMzAzJyA6ICdDdHJsJyk7XG4gIGlmIChzLm1ldGEpIHBhcnRzLnB1c2gobWFjID8gJ1x1MjMxOCcgOiAnTWV0YScpO1xuICBpZiAocy5hbHQpIHBhcnRzLnB1c2gobWFjID8gJ1x1MjMyNScgOiAnQWx0Jyk7XG4gIGlmIChzLnNoaWZ0KSBwYXJ0cy5wdXNoKG1hYyA/ICdcdTIxRTcnIDogJ1NoaWZ0Jyk7XG4gIGlmIChzLmtleSkgcGFydHMucHVzaChzLmtleS5sZW5ndGggPT09IDEgPyBzLmtleS50b1VwcGVyQ2FzZSgpIDogcy5rZXkpO1xuICBpZiAob3B0cz8uY2xpY2spIHBhcnRzLnB1c2goJ0NsaWNrJyk7XG4gIHJldHVybiBwYXJ0cy5qb2luKCcrJykgfHwgJyh1bnNldCknO1xufVxuXG4vKipcbiAqIE5vcm1hbGlzZSBhIGZyZXNoIGtleWRvd24gaW50byBhIFNob3J0Y3V0IHBheWxvYWQuIERyb3BzIFRhYi9Fc2MvZXRjLlxuICogKHRoZSByZWNvcmRlciBVSSBpbnZpdGVzIHRoZSB1c2VyIHRvIHByZXNzIGEgY2hvcmQsIG5vdCB0byBuYXZpZ2F0ZVxuICogdGhlIHBhZ2UpIGFuZCByZWplY3RzIHB1cmUgbW9kaWZpZXIga2V5ZG93bnMgc28gdGhlIHJlY29yZGVyIGRvZXNuJ3RcbiAqIGZpcmUgb24gZXZlcnkgU2hpZnQgcHJlc3Mgd2hpbGUgdGhlIHVzZXIgaXMgcmVhY2hpbmcgZm9yIGEgbGV0dGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvcnRjdXRGcm9tRXZlbnQoXG4gIGU6IHsgY3RybEtleT86IGJvb2xlYW47IG1ldGFLZXk/OiBib29sZWFuOyBhbHRLZXk/OiBib29sZWFuOyBzaGlmdEtleT86IGJvb2xlYW47IGtleT86IHN0cmluZyB9LFxuKTogU2hvcnRjdXQgfCBudWxsIHtcbiAgY29uc3QgayA9IGUua2V5IHx8ICcnO1xuICAvLyBNb2RpZmllci1vbmx5IGlzIGEgdmFsaWQgc2hvcnRjdXQsIGJ1dCB0aGUga2V5ZG93biBldmVudCBmb3IgYSBwdXJlXG4gIC8vIG1vZGlmaWVyIChDb250cm9sIC8gU2hpZnQgLyBBbHQgLyBNZXRhKSByZXBvcnRzIGBrZXlgIGFzIHRoZVxuICAvLyBtb2RpZmllciBuYW1lIFx1MjAxNCByZWNvcmQgdGhvc2UgYXMgbW9kaWZpZXItb25seS5cbiAgaWYgKFsnQ29udHJvbCcsICdNZXRhJywgJ0FsdCcsICdTaGlmdCddLmluY2x1ZGVzKGspKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN0cmw6ICEhZS5jdHJsS2V5LFxuICAgICAgbWV0YTogISFlLm1ldGFLZXksXG4gICAgICBhbHQ6ICEhZS5hbHRLZXksXG4gICAgICBzaGlmdDogISFlLnNoaWZ0S2V5LFxuICAgICAga2V5OiAnJyxcbiAgICB9O1xuICB9XG4gIC8vIFN5c3RlbSBrZXlzIHdlIG5ldmVyIHdhbnQgdG8gYmluZC5cbiAgaWYgKFsnVGFiJywgJ0VzY2FwZScsICdFbnRlcicsICcnXS5pbmNsdWRlcyhrKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgY3RybDogISFlLmN0cmxLZXksXG4gICAgbWV0YTogISFlLm1ldGFLZXksXG4gICAgYWx0OiAhIWUuYWx0S2V5LFxuICAgIHNoaWZ0OiAhIWUuc2hpZnRLZXksXG4gICAga2V5OiBrLFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIGluc3BlY3Qgc2hvcnRjdXQgZnJvbSBleHRlbnNpb24gc3RvcmFnZTsgZmFsbCBiYWNrIHRvIHRoZVxuICogZGVmYXVsdCBpZiBhYnNlbnQgb3IgbWFsZm9ybWVkLiBBbHdheXMgcmV0dXJucyBhIHZhbGlkIFNob3J0Y3V0IHNvXG4gKiBjYWxsZXJzIGRvbid0IGhhdmUgdG8gZGVmZW5zaXZlbHkgcmUtZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRJbnNwZWN0U2hvcnRjdXQoXG4gIHN0b3JhZ2U6IHsgZ2V0KGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB9LFxuKTogUHJvbWlzZTxTaG9ydGN1dD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtTVE9SQUdFX0tFWV9JTlNQRUNUXSk7XG4gICAgY29uc3QgdiA9IHJhd1tTVE9SQUdFX0tFWV9JTlNQRUNUXTtcbiAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgJiYgdHlwZW9mIHYuY3RybCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LmFsdCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LnNoaWZ0ID09PSAnYm9vbGVhbidcbiAgICAgICAgJiYgdHlwZW9mIHYubWV0YSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICYmIHR5cGVvZiB2LmtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2IGFzIFNob3J0Y3V0O1xuICAgIH1cbiAgfSBjYXRjaCB7IC8qIGZhbGwgdGhyb3VnaCAqLyB9XG4gIHJldHVybiB7IC4uLkRFRkFVTFRfSU5TUEVDVF9TSE9SVENVVCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUluc3BlY3RTaG9ydGN1dChcbiAgc3RvcmFnZTogeyBzZXQoaXRlbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB9LFxuICBzOiBTaG9ydGN1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzdG9yYWdlLnNldCh7IFtTVE9SQUdFX0tFWV9JTlNQRUNUXTogcyB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFFQSxZQUFJLEVBQUVBLFdBQVdDLFVBQVVELFdBQVdDLE9BQU9DLFdBQVdGLFdBQVdDLE9BQU9DLFFBQVFDLEtBQUs7QUFDckYsZ0JBQU0sSUFBSUMsTUFBTSwyREFBMkQ7UUFDN0U7QUFFQSxZQUFJLEVBQUVKLFdBQVdLLFdBQVdMLFdBQVdLLFFBQVFILFdBQVdGLFdBQVdLLFFBQVFILFFBQVFDLEtBQUs7QUFDeEYsZ0JBQU1HLG1EQUFtRDtBQU96RCxnQkFBTUMsV0FBV0MsbUJBQWlCO0FBSWhDLGtCQUFNQyxjQUFjO2NBQ2xCLFVBQVU7Z0JBQ1IsU0FBUztrQkFDUCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsWUFBWTtrQkFDVixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztrQkFDTCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsVUFBVTtrQkFDUixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Y0FDRjtjQUNBLGFBQWE7Z0JBQ1gsVUFBVTtrQkFDUixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztrQkFDTCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsZUFBZTtrQkFDYixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsYUFBYTtrQkFDWCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsY0FBYztrQkFDWixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsV0FBVztrQkFDVCxXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsUUFBUTtrQkFDTixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsVUFBVTtrQkFDUixXQUFXO2tCQUNYLFdBQVc7Z0JBQ2I7Z0JBQ0EsY0FBYztrQkFDWixXQUFXO2tCQUNY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QUFBQyxJQUFzQjtBQUNuQyxlQUFPO0FBQUE7QUFBQTtBQUFBLCtFQUdnRSxFQUFFLFNBQVMsTUFBTTtBQUFBLGdEQUNoRCxJQUFJLEVBQUUsV0FBVyxDQUFDO0FBQUEsZ0JBQ2xELE9BQU8sOERBQThELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUFBO0FBQUEsY0FFOUYsSUFBSTtBQUFBO0FBQUEsTUFFWixDQUFDLEVBQ0EsS0FBSyxFQUFFO0FBQUEsSUFDWjtBQUVBLGFBQVMsWUFBWTtBQUNuQixVQUFJLENBQUMsVUFBVztBQUNoQixnQkFBVSxZQUFZO0FBQ3RCLGFBQU8sUUFBUSxZQUFZLEVBQUUsUUFBUSxjQUFjLEdBQUcsQ0FBQyxTQUFTO0FBQzlELFlBQUksT0FBTyxRQUFRLGFBQWEsRUFBQyw2QkFBTSxVQUFTO0FBQzlDLG9CQUFVLFlBQVk7QUFDdEI7QUFBQSxRQUNGO0FBQ0Esb0JBQVksS0FBSyxTQUFnQztBQUFBLE1BQ25ELENBQUM7QUFBQSxJQUNIO0FBRUEsaURBQWMsaUJBQWlCLFNBQVM7QUFDeEMsY0FBVTtBQUdWLGNBQVU7QUFBQSxFQUNaLENBQUM7IiwKICAibmFtZXMiOiBbImdsb2JhbFRoaXMiLCAiY2hyb21lIiwgInJ1bnRpbWUiLCAiaWQiLCAiRXJyb3IiLCAiYnJvd3NlciIsICJDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UiLCAid3JhcEFQSXMiLCAiZXh0ZW5zaW9uQVBJcyIsICJhcGlNZXRhZGF0YSIsICJPYmplY3QiLCAia2V5cyIsICJsZW5ndGgiLCAiRGVmYXVsdFdlYWtNYXAiLCAiV2Vha01hcCIsICJjb25zdHJ1Y3RvciIsICJjcmVhdGVJdGVtIiwgIml0ZW1zIiwgInVuZGVmaW5lZCIsICJnZXQiLCAia2V5IiwgImhhcyIsICJzZXQiLCAiaXNUaGVuYWJsZSIsICJ2YWx1ZSIsICJ0aGVuIiwgIm1ha2VDYWxsYmFjayIsICJwcm9taXNlIiwgIm1ldGFkYXRhIiwgImNhbGxiYWNrQXJncyIsICJsYXN0RXJyb3IiLCAicmVqZWN0IiwgIm1lc3NhZ2UiLCAic2luZ2xlQ2FsbGJhY2tBcmciLCAicmVzb2x2ZSIsICJwbHVyYWxpemVBcmd1bWVudHMiLCAibnVtQXJncyIsICJ3cmFwQXN5bmNGdW5jdGlvbiIsICJuYW1lIiwgImFzeW5jRnVuY3Rpb25XcmFwcGVyIiwgInRhcmdldCIsICJhcmdzIiwgIm1pbkFyZ3MiLCAibWF4QXJncyIsICJQcm9taXNlIiwgImZhbGxiYWNrVG9Ob0NhbGxiYWNrIiwgImNiRXJyb3IiLCAiY29uc29sZSIsICJ3YXJuIiwgIm5vQ2FsbGJhY2siLCAid3JhcE1ldGhvZCIsICJtZXRob2QiLCAid3JhcHBlciIsICJQcm94eSIsICJhcHBseSIsICJ0YXJnZXRNZXRob2QiLCAidGhpc09iaiIsICJjYWxsIiwgImhhc093blByb3BlcnR5IiwgIkZ1bmN0aW9uIiwgImJpbmQiLCAicHJvdG90eXBlIiwgIndyYXBPYmplY3QiLCAid3JhcHBlcnMiLCAiY2FjaGUiLCAiY3JlYXRlIiwgImhhbmRsZXJzIiwgInByb3h5VGFyZ2V0IiwgInByb3AiLCAicmVjZWl2ZXIiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZGVzYyIsICJSZWZsZWN0IiwgImRlbGV0ZVByb3BlcnR5IiwgIndyYXBFdmVudCIsICJ3cmFwcGVyTWFwIiwgImFkZExpc3RlbmVyIiwgImxpc3RlbmVyIiwgImhhc0xpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIiwgIm9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMiLCAib25SZXF1ZXN0RmluaXNoZWQiLCAicmVxIiwgIndyYXBwZWRSZXEiLCAiZ2V0Q29udGVudCIsICJvbk1lc3NhZ2VXcmFwcGVycyIsICJvbk1lc3NhZ2UiLCAic2VuZGVyIiwgInNlbmRSZXNwb25zZSIsICJkaWRDYWxsU2VuZFJlc3BvbnNlIiwgIndyYXBwZWRTZW5kUmVzcG9uc2UiLCAic2VuZFJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJyZXN1bHQiLCAiZXJyIiwgImlzUmVzdWx0VGhlbmFibGUiLCAic2VuZFByb21pc2VkUmVzdWx0IiwgIm1zZyIsICJlcnJvciIsICJfX21veldlYkV4dGVuc2lvblBvbHlmaWxsUmVqZWN0X18iLCAiY2F0Y2giLCAid3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2siLCAicmVwbHkiLCAid3JhcHBlZFNlbmRNZXNzYWdlIiwgImFwaU5hbWVzcGFjZU9iaiIsICJ3cmFwcGVkQ2IiLCAicHVzaCIsICJzZW5kTWVzc2FnZSIsICJzdGF0aWNXcmFwcGVycyIsICJkZXZ0b29scyIsICJuZXR3b3JrIiwgIm9uTWVzc2FnZUV4dGVybmFsIiwgInRhYnMiLCAic2V0dGluZ01ldGFkYXRhIiwgImNsZWFyIiwgInByaXZhY3kiLCAic2VydmljZXMiLCAid2Vic2l0ZXMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiX2UiLCAiX2YiXQp9Cg==
|