picocode 0.9.204 → 0.9.205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pico-dictate +0 -0
- package/dist/pico.js +3 -3
- package/package.json +2 -2
package/dist/pico.js
CHANGED
|
@@ -419,7 +419,7 @@ import { createSignal } from "@trendr/core";
|
|
|
419
419
|
var PALETTES = {
|
|
420
420
|
dark: {
|
|
421
421
|
desc: "light text for dark terminals",
|
|
422
|
-
accent: "#
|
|
422
|
+
accent: "#a78bfa",
|
|
423
423
|
fg: "#e5e7eb",
|
|
424
424
|
fgSoft: "#9ca3af",
|
|
425
425
|
muted: "#b8c0d0",
|
|
@@ -433,7 +433,7 @@ var PALETTES = {
|
|
|
433
433
|
},
|
|
434
434
|
light: {
|
|
435
435
|
desc: "dark text for light terminals",
|
|
436
|
-
accent: "#
|
|
436
|
+
accent: "#7c3aed",
|
|
437
437
|
fg: "#1f2430",
|
|
438
438
|
fgSoft: "#4b5563",
|
|
439
439
|
muted: "#4b5563",
|
|
@@ -5694,4 +5694,4 @@ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, () => {
|
|
|
5694
5694
|
process.on("exit", () => connection.close());
|
|
5695
5695
|
var app = mount(() => /* @__PURE__ */ jsx11(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
|
|
5696
5696
|
boot.setTheme = app.setTheme;
|
|
5697
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZDogb3B0cy5tb2RlbCwgY29uZmlndXJlZDogY29uZmlnLmRlZmF1bHRNb2RlbCB9KVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xcXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCByZXN0b3JlZFNwZWVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKS5zcGVlZFxuICBjb25zdCBzcGVlZCA9IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gKG9wdHMucmVzdW1lID8gcmVzdG9yZWRTcGVlZCA/PyAnc3RhbmRhcmQnIDogY29uZmlnLnNwZWVkRGVmYXVsdHM/Llttb2RlbC5uYW1lXSkgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdzcGVlZCcsIHsgdG86IHNwZWVkIH0pKVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gY29kZXhDcmVkc1xuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke21vZGVsLnNwZWVkICYmIHNwZWVkID09PSAnZmFzdCcgPyAnICBGYXN0JyA6ICcnfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICAuLi4obW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgeyBzcGVlZCB9KSxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IHVzYWdlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHRocm93IG5ldyBFcnJvcihgJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcblxuaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgY29uc29sZS5lcnJvcigncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQuJylcbiAgY29uc29sZS5lcnJvcignc2V0IG9uZSBvZjogR0VNSU5JX0FQSV9LRVksIEFOVEhST1BJQ19BUElfS0VZLCBPUEVOQUlfQVBJX0tFWSwgWEFJX0FQSV9LRVksIE9QRU5ST1VURVJfQVBJX0tFWScpXG4gIGNvbnNvbGUuZXJyb3IoJ29yIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbjogcGljbyAtLWNvbm5lY3QnKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cblxuY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVuc3VyZURhZW1vbih7IGVudHJ5OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vZGFlbW9uLmpzJywgaW1wb3J0Lm1ldGEudXJsKSkgfSlcbmNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVSZW1vdGVDb250cm9sbGVyKGNvbm5lY3Rpb24sIHtcbiAgb3B0aW9uczogeyBjd2Q6IHByb2Nlc3MuY3dkKCksIHZlcnNpb246IHBrZy52ZXJzaW9uLCB0aGVtZSwgZGV0ZWN0ZWRUaGVtZSwgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyB9LFxuICBsb2NhbEJvb3Q6IHsgcmVmczoge30gfSxcbn0pXG5jb25zdCBib290ID0gY29udHJvbGxlci5ib290XG5pZiAoY2xpLnNwZWVkKSBhd2FpdCBjb250cm9sbGVyLnNwZWVkQ29tbWFuZChjbGkuc3BlZWQpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJywgJ1NJR0hVUCddKSBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICBjb25uZWN0aW9uLmNsb3NlKClcbiAgcHJvY2Vzcy5leGl0KDApXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGNvbm5lY3Rpb24uY2xvc2UoKSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1zcGVlZCA8bGV2ZWw+ICAgICAgICAgICAgc3BlZWQ6IHN0YW5kYXJkfGZhc3RcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgICAgICAgICAgICAgICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIHBsYW4gKE9BdXRoIGluIHlvdXIgYnJvd3NlcilcbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tc3BlZWQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnc3RhbmRhcmQnLCAnZmFzdCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3BlZWQgXCIke2xldmVsfVwiOiB1c2Ugc3RhbmRhcmR8ZmFzdGApXG4gICAgICB9XG4gICAgICBvcHRzLnNwZWVkID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgU2Nyb2xsQm94LCB1c2VGb2N1cywgdXNlTGF5b3V0LCB1c2VJbnRlcnZhbCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IERFRkFVTFRfQUNDRU5ULCBGR19TT0ZULCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuXG5mdW5jdGlvbiBTZXNzaW9uUm93KHsgcm93LCBzZWxlY3RlZCwgZm9jdXMsIG5vdyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0ocm93LmlkLCBsYXlvdXQpXG4gIGNvbnN0IGNvbG9yID0gU0VTU0lPTl9DT0xPUlNbcm93LmNvbG9yXSB8fCByb3cuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlRcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAxLCBoZWlnaHQ6IDIsIGZsZXhTaHJpbms6IDAsIGJnOiBzZWxlY3RlZCA/IGNvbG9yIDogdW5kZWZpbmVkIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBjb2xvciwgYm9sZDogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Ake3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/ICdcdTI1Q0YnIDogJ1x1MjVDQid9ICR7cm93Lm5hbWV9JHtyb3cucnVubmluZ1NoZWxscyA/IGAgICR7cm93LnJ1bm5pbmdTaGVsbHN9ICR7cm93LnJ1bm5pbmdTaGVsbHMgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9YCA6ICcnfWB9PC90ZXh0PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gcm93LmFjdGl2aXR5IHx8ICd3b3JraW5nJyA6IHJvdy5ydW5uaW5nU2hlbGxzID8gcm93LnNoZWxsQWN0aXZpdHkgfHwgJ3NoZWxsIHJ1bm5pbmcnIDogcm93Lmxhc3RNZXNzYWdlQXQgPyBgTGFzdCBtZXNzYWdlICR7dGltZUFnbyhyb3cubGFzdE1lc3NhZ2VBdCl9YCA6ICdpZGxlJ308L3RleHQ+XG4gIDwvYm94PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gV29ya3NwYWNlU2lkZWJhcih7IGdyb3Vwcywgc2VsZWN0ZWQsIHdpZHRoLCBsb2FkaW5nLCBlcnJvciwgb25IZWlnaHQgfSkge1xuICBjb25zdCBmb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgYWN0aXZlOiBmYWxzZSB9KVxuICBjb25zdCBbbm93LCBzZXROb3ddID0gY3JlYXRlU2lnbmFsKERhdGUubm93KCkpXG4gIHVzZUludGVydmFsKCgpID0+IHNldE5vdyhEYXRlLm5vdygpKSwgMTAwMDApXG4gIGlmIChzZWxlY3RlZCkgZm9jdXMuZm9jdXMoc2VsZWN0ZWQpXG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGgsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogJzEwMCUnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYm9yZGVyOiAnc2luZ2xlJywgYm9yZGVyRWRnZXM6IHsgcmlnaHQ6IHRydWUgfSwgYm9yZGVyQ29sb3I6IE1VVEVEIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlLCBwYWRkaW5nWDogMSB9fT5TZXNzaW9uczwvdGV4dD5cbiAgICB7bG9hZGluZyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZzwvdGV4dD59XG4gICAge2Vycm9yICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Vycm9yfTwvdGV4dD59XG4gICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2xsb3dGb2N1cz17Zm9jdXN9IGZvY3VzUGFkZGluZz17MX0gb25NZXRyaWNzPXsobWV0cmljcykgPT4gb25IZWlnaHQobWV0cmljcy52aXNpYmxlSGVpZ2h0KX0+XG4gICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiA8Ym94IGtleT17Z3JvdXAuY3dkfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpbmRleCA+IDAgPyAxIDogMCB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJywgcGFkZGluZ1g6IDEgfX0+e2dyb3VwLmN3ZCA9PT0gaG9tZSA/ICd+JyA6IGdyb3VwLmN3ZC5zdGFydHNXaXRoKGhvbWUgKyAnLycpID8gJ34nICsgZ3JvdXAuY3dkLnNsaWNlKGhvbWUubGVuZ3RoKSA6IGdyb3VwLmN3ZH08L3RleHQ+XG4gICAgICAgIHtncm91cC5zZXNzaW9ucy5tYXAoKHJvdykgPT4gPFNlc3Npb25Sb3cga2V5PXtyb3cuaWR9IHJvdz17cm93fSBzZWxlY3RlZD17cm93LmlkID09PSBzZWxlY3RlZH0gZm9jdXM9e2ZvY3VzfSBub3c9e25vdygpfSAvPil9XG4gICAgICA8L2JveD4pfVxuICAgIDwvU2Nyb2xsQm94PlxuICA8L2JveD5cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZjg3MTcxJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNkYzI2MjYnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuZXhwb3J0IGxldCBERUZBVUxUX0FDQ0VOVCA9IFBBTEVUVEVTLmRhcmsuYWNjZW50XG5leHBvcnQgbGV0IEZHID0gUEFMRVRURVMuZGFyay5mZ1xuZXhwb3J0IGxldCBGR19TT0ZUID0gUEFMRVRURVMuZGFyay5mZ1NvZnRcbmV4cG9ydCBsZXQgTVVURUQgPSBQQUxFVFRFUy5kYXJrLm11dGVkXG5leHBvcnQgbGV0IFBBTkVMX0JHID0gUEFMRVRURVMuZGFyay5wYW5lbEJnXG5leHBvcnQgbGV0IFNFTEVDVF9CRyA9IFBBTEVUVEVTLmRhcmsuc2VsZWN0QmdcbmV4cG9ydCBsZXQgUkVEID0gUEFMRVRURVMuZGFyay5yZWRcbmV4cG9ydCBsZXQgR1JFRU4gPSBQQUxFVFRFUy5kYXJrLmdyZWVuXG5leHBvcnQgbGV0IFBFRVIgPSBQQUxFVFRFUy5kYXJrLnBlZXJcbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluZm9ybWF0aW9uJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7cyA9PT0gJ2NoZWNrb3V0JyA/ICd0aGlzIGNoZWNrb3V0JyA6IHN9YH08L3RleHQ+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxQYW5lbCh7IG1vZGVscywgY3VycmVudCwgZGVmYXVsdE5hbWUsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSwgdGl0bGUgPSAnU2VsZWN0IG1vZGVsJywgaGludCA9ICdlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlJyB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwobW9kZWxzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRNb2RlbHMgPSByYW5rRnV6enkobW9kZWxzLCBxdWVyeSgpLCAocSwgbW9kZWwpID0+IGZ1enp5U2NvcmUocSwgbW9kZWwubmFtZSkpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBjdXJzb3IoKSkge1xuICAgICAgb25QaWNrRGVmYXVsdChjdXJzb3IoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtoaW50fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtyYW5rZWRNb2RlbHN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtb2RlbHMuLi5cIlxuICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvcn1cbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIHNjcm9sbG9mZj17MX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBtLmF2YWlsYWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6ICFvZmYsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBvZmYgPyBNVVRFRCA6IEZHIH19PnttLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eycgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gZGVmYXVsdE5hbWUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnsnICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7b2ZmID8gYG5lZWRzICR7bS5rZXlIaW50fWAgOiBtLnByaWNlID8gYCQke20ucHJpY2UuaW59IGluICAkJHttLnByaWNlLm91dH0gb3V0YCA6IG0ucHJvdmlkZXIgPT09ICdjb2RleCcgPyAnc3Vic2NyaXB0aW9uJyA6ICdwcmljZSB1bmtub3duJ31cbiAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e20uZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhpc3RvcnlQYW5lbCh7IHByb21wdHMsIHNjb3Blcywgc2NvcGVJbmRleCwgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHByb21wdHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGFueU1hdGNoID0gcHJvbXB0cy5zb21lKChwKSA9PiBmdXp6eVNjb3JlKHF1ZXJ5KCksIHAudGV4dCkgPj0gMClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlNlYXJjaCBwcm9tcHRzXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgY3RybCtzIHNjb3BlICBlbnRlciB0byBlZGl0ICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtwcm9tcHRzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHByb21wdHMuLi5cIlxuICAgICAgICAgICAgZmlsdGVyPXsocSwgcCkgPT4gZnV6enlTY29yZShxLCBwLnRleHQpID49IDB9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KHApID0+IHNldFByZXZpZXcocCl9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHApID0+IG9uUGljayhwLnRleHQpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19PntwLnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHt0aW1lQWdvKHAuYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIHthbnlNYXRjaCAmJiBwcmV2aWV3KCkgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIHByb21wdHM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZFBpY2tQYW5lbCh7IGVudHJpZXMsIHN0YXRzLCBmb2N1c2VkLCBvblBpY2ssIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoZW50cmllc1swXSB8fCBudWxsKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJSZXdpbmQgdG8gYSBtZXNzYWdlXCIgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlciB0byBjaG9vc2UgIGVzYyB0byBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtlbnRyaWVzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1lc3NhZ2VzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgbS50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhtKSA9PiBzZXRQcmV2aWV3KG0pfVxuICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57bS50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c3RhdHMobS5pbmRleCkubXNnc30gYWZ0ZXJgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7cHJldmlldygpID8gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgcmV3aW5kaW5nIGhlcmUgZHJvcHMgJHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLm1zZ3N9IGVudHJpZXNgfTwvdGV4dD5cbiAgICAgICAgICAgICAge3N0YXRzKHByZXZpZXcoKS5pbmRleCkuZWRpdHMubWFwKChtLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIFx1MjFBOSAke20udGl0bGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgbWVzc2FnZXM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZEFjdGlvblBhbmVsKHsgdGFyZ2V0LCBvcHRpb25zLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25CYWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJld2luZCBvcHRpb25zPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsndG86ICd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGR19TT0ZUIH19Pnt0YXJnZXQudGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtvcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NH1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG8sIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57by5sYWJlbH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7by5kZXNjfWB9PC90ZXh0PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyIHRvIGNvbmZpcm0gIGVzYyB0byBwaWNrIGEgZGlmZmVyZW50IG1lc3NhZ2U8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gdXNlRXNjYXBlKGZvY3VzZWQsIG9uQ2xvc2UpIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKCkpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzdW1lUGFuZWwoeyBzZXNzaW9ucywgc2NvcGVzLCBzY29wZUluZGV4LCBsb2FkaW5nLCBmb2N1c2VkLCBjdXJyZW50SWQsIG9uUGljaywgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoc2Vzc2lvbnNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdsaXN0JylcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZFNlc3Npb25zID0gcmFua0Z1enp5KHNlc3Npb25zLCBxdWVyeSgpLCAocSwgc2Vzc2lvbikgPT4ge1xuICAgIGNvbnN0IGN1c3RvbVNjb3JlID0gc2Vzc2lvbi5jdXN0b21UaXRsZSA/IGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5jdXN0b21UaXRsZSkgOiAtMVxuICAgIGlmIChjdXN0b21TY29yZSA+PSAwKSByZXR1cm4gMjBfMDAwICsgY3VzdG9tU2NvcmVcbiAgICByZXR1cm4gTWF0aC5tYXgoZnV6enlTY29yZShxLCBzZXNzaW9uLmF1dG9tYXRpY1RpdGxlIHx8IHNlc3Npb24udGl0bGUpLCBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY2hlY2tvdXQgfHwgJycpKVxuICB9KVxuICBjb25zdCBzaG93Q2hlY2tvdXRzID0gbmV3IFNldChzZXNzaW9ucy5tYXAoKHNlc3Npb24pID0+IHNlc3Npb24uY2hlY2tvdXQpLmZpbHRlcihCb29sZWFuKSkuc2l6ZSA+IDFcbiAgY29uc3Qgc2VsZWN0ZWRTZXNzaW9uID0gKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHNlbGVjdGVkID0gcHJldmlldygpXG4gICAgcmV0dXJuIHNlc3Npb25zLmluY2x1ZGVzKHNlbGVjdGVkKSA/IHNlbGVjdGVkIDogbnVsbFxuICB9XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRTZXNzaW9uKClcbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBzZWxlY3RlZCkge1xuICAgICAgb25EZWxldGUoc2VsZWN0ZWQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlJlc3VtZSBhIHNlc3Npb25cIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICB0YWI6IHByZXZpZXcgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gcmVzdW1lICBjdHJsK3ggZGVsZXRlICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0MCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHNlc3Npb25zLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiBzZXNzaW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyYW5rZWRTZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0JyAmJiAhbG9hZGluZ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhzKSA9PiBzZXRQcmV2aWV3KHMpfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogKHNob3dDaGVja291dHMgPyBzLmNvbG9yIDogbnVsbCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAge3Nob3dDaGVja291dHMgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVELCBiZzogc2VsZWN0ZWQgPyBudWxsIDogcy5jb2xvciB9fT57YCR7cy5jaGVja291dH0gIGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRywgYmc6IHNlbGVjdGVkIHx8IHNob3dDaGVja291dHMgPyBudWxsIDogcy5jb2xvciB9fT57cy50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHtzLmhlYWRlci5pZCA9PT0gY3VycmVudElkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT4gY3VycmVudDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhzLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS50dXJuc30gJHtzZWxlY3RlZFNlc3Npb24oKS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28oc2VsZWN0ZWRTZXNzaW9uKCkuYXQpfSAgJHtzaG9ydGVuSG9tZShzZWxlY3RlZFNlc3Npb24oKS5oZWFkZXIucm9vdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRTZXNzaW9uKCkucHJldmlld01lc3NhZ2VDb3VudCA+IHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgLSBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aH0gZWFybGllciBtZXNzYWdlcyBvbWl0dGVkYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHsoc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldyB8fCBbXSkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake21lc3NhZ2Uucm9sZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyA/IEZHIDogTVVURUQgfX0+e21lc3NhZ2UudGV4dH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0cmFuc2NyaXB0IHByZXZpZXc8L3RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZW1vcnlQYW5lbCh7IG1lbW9yaWVzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uVG9nZ2xlRGlzYWJsZWQsIG9uRm9yZ2V0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvckl0ZW0sIHNldEN1cnNvckl0ZW1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IHByZXZpZXcgPSBtZW1vcmllcy5pbmNsdWRlcyhjdXJzb3JJdGVtKCkpID8gY3Vyc29ySXRlbSgpIDogbWVtb3JpZXNbMF0gfHwgbnVsbFxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgocCkgPT4gKHAgPT09ICdsaXN0JyA/ICdwcmV2aWV3JyA6ICdsaXN0JykpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcpIHtcbiAgICAgIG9uRm9yZ2V0KHByZXZpZXcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1lbW9yeVwiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGVudGVyOiBlbmFibGUvZGlzYWJsZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGN0cmwreCBmb3JnZXQgKHR3aWNlKSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge21lbW9yaWVzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllcyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21lbW9yaWVzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZW1vcmllcy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgYCR7bS5uYW1lfSAke20uZGVzY3JpcHRpb259YCkgPj0gMH1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvckl0ZW19XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblRvZ2dsZURpc2FibGVkfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBpdGFsaWM6IG0uZGlzYWJsZWQsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiAobS5kaXNhYmxlZCA/IE1VVEVEIDogRkcpIH19PntgJHttLmRpc2FibGVkID8gJyAgICcgOiAnJ30ke20ubmFtZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAge20uZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PiAgc3VwcHJlc3NlZDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7bS5zY29wZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3ByZXZpZXcgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJldmlldyd9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3ByZXZpZXcuZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PlNVUFBSRVNTRUQ8L3RleHQ+fVxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57cHJldmlldy5kZXNjcmlwdGlvbiB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3ByZXZpZXcuYm9keX08L3RleHQ+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1lbW9yaWVzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFZmZvcnRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiAobC5rZXkgPT09IG51bGwgPyAnZGVmYXVsdCcgOiBsLmtleSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiVGhpbmtpbmcgZWZmb3J0XCIgaGludD1cImovayB0byBtb3ZlICBlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bC5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAge2wua2V5ID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gZGVmYXVsdExldmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGVlZFBhbmVsKHsgbGV2ZWxzLCBjdXJyZW50LCBkZWZhdWx0TGV2ZWwsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoTWF0aC5tYXgoMCwgbGV2ZWxzLmZpbmRJbmRleCgobCkgPT4gbC5rZXkgPT09IGN1cnJlbnQpKSlcbiAgY29uc3QgaXRlbXMgPSBsZXZlbHNcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGl0ZW1zW2N1cnNvcigpXSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhYmVsID0gKGwpID0+IGwua2V5ID09PSAnZmFzdCcgPyAnRmFzdCcgOiAnU3RhbmRhcmQnXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNwZWVkXCIgaGludD1cImVudGVyOiBzZXNzaW9uICBjdHJsK3M6IGRlZmF1bHQgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0Q3Vyc29yfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2xhYmVsKGwpLnBhZEVuZChNYXRoLm1heCgxMCwgbGFiZWwobCkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsLnVzYWdlLnJlcGxhY2UoLyB1c2FnZSQvLCAnJyl9IGluY2x1ZGVkIHVzYWdlYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBlYXNlLCBsaW5lYXIsIHVzZUFuaW1hdGVkIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5mdW5jdGlvbiB0b1JnYihjb2xvcikge1xuICBpZiAoY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDMsIDUpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSg1LCA3KSwgMTYpLFxuICAgIF1cbiAgfVxuICByZXR1cm4gWzEyNywgMTI3LCAxMjddXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gZnJvbVxuICBjb25zdCBhID0gdG9SZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHRvUmdiKHRvKVxuICBjb25zdCBjaGFubmVscyA9IGEubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KSlcbiAgcmV0dXJuIGAjJHtjaGFubmVscy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQW5pbWF0ZWRWYWx1ZSh7IHZhbHVlLCBpbml0aWFsID0gdmFsdWUsIGR1cmF0aW9uID0gMTAwMCwgY29sb3IsIGhpZ2hsaWdodCwgYmFja2dyb3VuZCwgZm9ybWF0ID0gU3RyaW5nIH0pIHtcbiAgY29uc3QgZGlzcGxheWVkID0gdXNlQW5pbWF0ZWQoaW5pdGlhbCwgZWFzZShkdXJhdGlvbikpXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKGR1cmF0aW9uLCBsaW5lYXIpKVxuXG4gIGlmICh2YWx1ZSAhPT0gZGlzcGxheWVkLl9hbmltLnRhcmdldCkge1xuICAgIGRpc3BsYXllZC5zZXQodmFsdWUpXG4gICAgZ2xvdy5zbmFwKDEpXG4gICAgZ2xvdy5zZXQoMClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGNvbG9yLCBoaWdobGlnaHQsIGdsb3coKSksIGJnOiBiYWNrZ3JvdW5kIH19PlxuICAgICAge2Zvcm1hdChkaXNwbGF5ZWQoKSl9XG4gICAgPC90ZXh0PlxuICApXG59XG4iLCAiY29uc3QgTEVWRUxTID0gWycgJywgJ1x1MjU4RicsICdcdTI1OEUnLCAnXHUyNThEJywgJ1x1MjU4QycsICdcdTI1OEInLCAnXHUyNThBJywgJ1x1MjU4OScsICdcdTI1ODgnXVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGV4dEJhcihwZXJjZW50LCB3aWR0aCA9IDQpIHtcbiAgY29uc3QgZWlnaHRocyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBwZXJjZW50KSkgKiB3aWR0aCAqIDggLyAxMDApXG4gIGNvbnN0IGZ1bGwgPSBNYXRoLmZsb29yKGVpZ2h0aHMgLyA4KVxuICBjb25zdCBwYXJ0aWFsID0gZWlnaHRocyAlIDhcbiAgcmV0dXJuICdcdTI1ODgnLnJlcGVhdChmdWxsKSArIChwYXJ0aWFsID8gTEVWRUxTW3BhcnRpYWxdIDogJycpICsgJyAnLnJlcGVhdCh3aWR0aCAtIGZ1bGwgLSAocGFydGlhbCA/IDEgOiAwKSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlR3JvdXBzKHJvd3MpIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBpZiAoIXJvdy5uYW1lPy50cmltKCkpIGNvbnRpbnVlXG4gICAgaWYgKCFncm91cHMuaGFzKHJvdy5jd2QpKSBncm91cHMuc2V0KHJvdy5jd2QsIFtdKVxuICAgIGdyb3Vwcy5nZXQocm93LmN3ZCkucHVzaChyb3cpXG4gIH1cbiAgcmV0dXJuIFsuLi5ncm91cHNdLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLm1hcCgoW2N3ZCwgc2Vzc2lvbnNdKSA9PiAoeyBjd2QsIHNlc3Npb25zIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlU2VsZWN0aW9uKHJvd3MsIHNlbGVjdGVkLCBwcmV2aW91cyA9IFtdKSB7XG4gIGlmIChyb3dzLnNvbWUoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpIHJldHVybiBzZWxlY3RlZFxuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHByZXZpb3VzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgcmV0dXJuIHJvd3NbTWF0aC5taW4oaW5kZXgsIHJvd3MubGVuZ3RoIC0gMSldPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VOYXZpZ2F0ZShyb3dzLCBzZWxlY3RlZCwgZXZlbnQsIGhlaWdodCkge1xuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKVxuICBjb25zdCBoYWxmID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyA2KSlcbiAgbGV0IG5leHRcbiAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBpbmRleCArIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IGluZGV4IC0gaGFsZlxuICBlbHNlIGlmIChldmVudC5jdHJsIHx8IGV2ZW50Lm1ldGEgfHwgZXZlbnQuYWx0KSByZXR1cm4gdW5kZWZpbmVkXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gaW5kZXggKyAxXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IGluZGV4IC0gMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSByb3dzLmxlbmd0aCAtIDFcbiAgZWxzZSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiByb3dzW01hdGgubWF4KDAsIE1hdGgubWluKHJvd3MubGVuZ3RoIC0gMSwgbmV4dCkpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cyh0ZXh0LCBhdHRhY2htZW50cykge1xuICByZXR1cm4gWy4uLnRleHQubWF0Y2hBbGwoL1xcWyg/OkltYWdlfEZpbGUpICNcXGQrXFxdL2cpXS5maWx0ZXIobWF0Y2ggPT4gYXR0YWNobWVudHMuaGFzKG1hdGNoWzBdKSkubGVuZ3RoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyKHsgdGV4dCwgYXR0YWNobWVudHMsIGRpY3RhdGlvbiwgY2FwdHVyZSwgcGVuZGluZywgaGlzdG9yeSwgY29tcGxldGlvbiwgY29tbWFuZCwgcXVlc3Rpb24sIHN0ZWVyIH0pIHtcbiAgcmV0dXJuIHRleHQgPT09ICcnICYmIGF0dGFjaG1lbnRzID09PSAwICYmIGRpY3RhdGlvbiA9PT0gJ2lkbGUnICYmIGNhcHR1cmUgPT09ICdpZGxlJyAmJiAhcGVuZGluZyAmJiBoaXN0b3J5IDwgMCAmJiAhY29tcGxldGlvbiAmJiAhY29tbWFuZCAmJiAhcXVlc3Rpb24gJiYgIXN0ZWVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VBY3Rpb24ocm93KSB7XG4gIHJldHVybiByb3c/LnN0YXR1cyA9PT0gJ2J1c3knID8gJ2ludGVycnVwdCcgOiByb3c/LnN0YXR1cyA9PT0gJ2lkbGUnID8gJ2RlbW90ZScgOiBudWxsXG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlU2lkZWJhciB9IGZyb20gJy4vd29ya3NwYWNlLXNpZGViYXIuanN4J1xuaW1wb3J0IHsgd29ya3NwYWNlR3JvdXBzLCB3b3Jrc3BhY2VTZWxlY3Rpb24sIHdvcmtzcGFjZU5hdmlnYXRlLCB3b3Jrc3BhY2VBY3Rpb24sIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHMsIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzJ1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2tpbGxzLmpzJ1xuaW1wb3J0IHsgZXhwYW5kQ29tbWFuZCwgcGFyc2VDb21tYW5kQXJndW1lbnRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21tYW5kcy5qcydcbmltcG9ydCB7IGNvbW1hbmRBdCwgcmVwbGFjZUNvbW1hbmQsIGNvbW1hbmRGaWVsZHMgfSBmcm9tICcuL2NvbXBvc2VyLWNvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZEZvcm0gfSBmcm9tICcuL2NvbW1hbmQtZm9ybS5qc3gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbiB9IGZyb20gJy4uL2RpY3RhdGlvbi5qcydcbmltcG9ydCB7IHJlYWRDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL2NsaXBib2FyZC5qcydcbmltcG9ydCB7IGNyZWF0ZUNsaXBib2FyZElucHV0IH0gZnJvbSAnLi9jbGlwYm9hcmQtaW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb25JbnB1dCB9IGZyb20gJy4vZGljdGF0aW9uLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0IH0gZnJvbSAnLi9zY3JlZW4tY2FwdHVyZS1pbnB1dC5qcydcbmltcG9ydCB7IGNhcHR1cmVSZWdpb24gfSBmcm9tICcuLi9zY3JlZW4tY2FwdHVyZS5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2VyRmlsZXMgfSBmcm9tICcuL2NvbXBvc2VyLWZpbGVzLmpzJ1xuaW1wb3J0IHsgZGljdGF0aW9uSW5kaWNhdG9yLCBhcHBlbmRMZXZlbCB9IGZyb20gJy4vZGljdGF0aW9uLWluZGljYXRvci5qcydcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIG9uQ2xlYW51cCwgTWVudSwgUHJvZ3Jlc3NCYXIsIFNjcm9sbEJveCwgU2hpbW1lciwgU3Bpbm5lciwgVGV4dEFyZWEsIHVzZUZvY3VzLCB1c2VGb2N1c1RyYXAsIHVzZUZyYW1lU3RhdHMsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VMYXlvdXQsIHVzZU1vdXNlLCB1c2VSZXNpemUsIHVzZVNlbGVjdGlvbiwgdXNlVG9hc3QgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGxpc3RTZXNzaW9ucywgZGVsZXRlU2Vzc2lvbiwgZGVsZXRlUHJvamVjdERhdGEgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyB1c2VyRW50cmllcywgcmV3aW5kU3RhdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGxvYWRQcm9qZWN0UHJvbXB0cywgbG9hZEdsb2JhbFByb21wdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2hpc3RvcnkuanMnXG5pbXBvcnQgeyBpbXBsaWNpdFJld2luZFRhcmdldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmV3aW5kLmpzJ1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uLCBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJ1xuaW1wb3J0IHsgU1RFRVJfUk9MRVMsIHN0ZWVyYWJsZVRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N0ZWVyLmpzJ1xuaW1wb3J0IHsgd3JpdGVDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IG9wZW5haVN0YXR1cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBFRkZPUlRfTEVWRUxTLCBTUEVFRF9MRVZFTFMsIFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgYWdlbnRUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC10cmFuc2NyaXB0LmpzJ1xuaW1wb3J0IHsgZnV6enlTY29yZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBjb21wbGV0aW9uQ29udGV4dCwgYXBwbHlDb21wbGV0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21wbGV0aW9uLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlUGF0aHMsIHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsaXN0RmlsZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2ZpbGVzLmpzJ1xuaW1wb3J0IHsgbGlzdFdvcmt0cmVlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvd29ya3RyZWVzLmpzJ1xuaW1wb3J0IHsgb3duZXJSb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9wYXRocy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgYWN0aXZpdHlSb3dzLCBhY3Rpdml0eVN0cmlwU2l6ZXMsIHN0cmlwV2luZG93U3RhcnQgfSBmcm9tICcuL2FjdGl2aXR5LXN0cmlwLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgU3BlZWRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZWZyZXNoLW1vZGVscycsIGRlc2M6ICdSZWZyZXNoIGF2YWlsYWJsZSBtb2RlbHMgZnJvbSBwcm92aWRlcnMnIH0sXG4gIHsgbmFtZTogJ2Nvbm5lY3QnLCBkZXNjOiAnU2lnbiBpbiB3aXRoIENoYXRHUFQgdG8gdXNlIGEgQ29kZXggc3Vic2NyaXB0aW9uJyB9LFxuICB7IG5hbWU6ICdlZmZvcnQnLCBkZXNjOiAnU2V0IHRoZSB0aGlua2luZyBlZmZvcnQgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAnc3BlZWQnLCBkZXNjOiAnU3BlZWQnIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIGNvbnZlcnNhdGlvbicgfSxcbiAgeyBuYW1lOiAnZGVsZXRlJywgZGVzYzogJ1Blcm1hbmVudGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdGFydCBmcmVzaCcgfSxcbiAgeyBuYW1lOiAncHJvamVjdCcsIGRlc2M6ICdTd2l0Y2ggcHJvamVjdHM6IGp1bXAgdG8gYW5vdGhlciBwcm9qZWN0LCBzYW1lIGFzIGN0cmwrcCcgfSxcbiAgeyBuYW1lOiAnY3dkJywgZGVzYzogJ1Nob3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHByb2plY3Qgcm9vdCcgfSxcbiAgeyBuYW1lOiAnc2tpbGxzJywgZGVzYzogJ0xpc3QgZXZlcnkgc2tpbGw6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2NvbW1hbmRzJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnaW5pdCcsIGRlc2M6ICdDcmVhdGUgb3IgaW1wcm92ZSByZXBvc2l0b3J5IEFHRU5UUy5tZCBndWlkYW5jZScgfSxcbiAgeyBuYW1lOiAndG9vbHMnLCBkZXNjOiAnTGlzdCBidWlsdGluIGFuZCB1c2VyLWRlZmluZWQgdG9vbHM7IE1DUCB0b29scyBsaXZlIGluIC9tY3AnIH0sXG4gIHsgbmFtZTogJ3Jld2luZCcsIGRlc2M6ICdSZXN0b3JlIHRoZSBjb252ZXJzYXRpb24gdG8gYSBwcmV2aW91cyBtZXNzYWdlJyB9LFxuICB7IG5hbWU6ICdzdGVlcicsIGRlc2M6ICdFZGl0IG9yIGFkZCBjb252ZXJzYXRpb24gbWVzc2FnZXMgd2l0aG91dCBzZW5kaW5nJyB9LFxuICB7IG5hbWU6ICdoaXN0b3J5JywgZGVzYzogJ1NlYXJjaCBwcm9tcHRzIHlvdSBwcmV2aW91c2x5IHNlbnQnIH0sXG4gIHsgbmFtZTogJ3JlbmFtZScsIGRlc2M6ICdOYW1lIHRoaXMgc2Vzc2lvbjsgb21pdCB0aGUgbmFtZSB0byByZXN0b3JlIGl0cyBhdXRvbWF0aWMgdGl0bGUnIH0sXG4gIHsgbmFtZTogJ2NvbG9yJywgZGVzYzogJ0NvbG9yIHRoaXMgc2Vzc2lvbjogL2NvbG9yIDxuYW1lIG9yICNoZXg+LCAvY29sb3Igbm9uZSB0byBjbGVhcicgfSxcbiAgeyBuYW1lOiAndGhlbWUnLCBkZXNjOiAnUGljayBhIGNvbG9yIHRoZW1lOyAvdGhlbWUgPG5hbWU+IGFwcGxpZXMgb25lIGRpcmVjdGx5JyB9LFxuICB7IG5hbWU6ICdjb25maWcnLCBkZXNjOiAnQ29uZmlndXJlIHBpY28gZGlzcGxheSBhbmQgYmVoYXZpb3InIH0sXG4gIHsgbmFtZTogJ21jcCcsIGRlc2M6ICdNYW5hZ2UgTUNQIHNlcnZlcnM6IGFkZCwgdG9nZ2xlLCByZWNvbm5lY3QnIH0sXG4gIHsgbmFtZTogJ3BhcmFsbGVsJywgZGVzYzogJ1J1biBhIHRhc2sgd2l0aCBwYXJhbGxlbCBhZ2VudHM6IC9wYXJhbGxlbCA8dGFzaz4nIH0sXG4gIHsgbmFtZTogJ2RlbGliZXJhdGUnLCBkZXNjOiAnRGVsaWJlcmF0ZSBvbiBhIGRlY2lzaW9uOiAvZGVsaWJlcmF0ZSA8ZGVjaXNpb24+JyB9LFxuICB7IG5hbWU6ICd3YWtldXBzJywgZGVzYzogJ1ZpZXcgYW5kIGNhbmNlbCBzY2hlZHVsZWQgd2FrZS11cHMnIH0sXG4gIHsgbmFtZTogJ21lbW9yeScsIGRlc2M6ICdCcm93c2UgYW5kIG1hbmFnZSBzYXZlZCBtZW1vcmllczogcHJvamVjdCBhbmQgZ2xvYmFsJyB9LFxuICB7IG5hbWU6ICdjb21wYWN0JywgZGVzYzogJ1N1bW1hcml6ZSB0aGUgY29udmVyc2F0aW9uIHRvIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjbGVhcicsIGRlc2M6ICdDbGVhciB0aGUgY29udmVyc2F0aW9uIGFuZCBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY29zdCcsIGRlc2M6ICdTaG93IHRva2VuIHVzYWdlIGFuZCBlc3RpbWF0ZWQgY29zdCBzbyBmYXInIH0sXG4gIHsgbmFtZTogJ2NvbnRleHQnLCBkZXNjOiBcIlNob3cgd2hhdCdzIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgYW5kIGhvdyBiaWcgZWFjaCBwaWVjZSBpc1wiIH0sXG4gIHsgbmFtZTogJ2V4cG9ydCcsIGRlc2M6ICdTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiB0byBhIG1hcmtkb3duIGZpbGUnIH0sXG4gIHsgbmFtZTogJ3VwZGF0ZScsIGRlc2M6ICdVcGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG0nIH0sXG4gIHsgbmFtZTogJ2hlbHAnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kIGFuZCB3aGF0IGl0IGRvZXMnIH0sXG5dXG5cbmNvbnN0IEhJU1RPUllfU0NPUEVTID0gWydzZXNzaW9uJywgJ3Byb2plY3QnLCAnZXZlcnl3aGVyZSddXG5jb25zdCBNRU1PUllfU0NPUEVTID0gWydhbGwnLCAncHJvamVjdCcsICdnbG9iYWwnXVxuXG5cbmZ1bmN0aW9uIGFnZW50RWxhcHNlZChhZ2VudCwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBpZiAoIWFnZW50LnN0YXJ0ZWRBdCkgcmV0dXJuICd3YWl0aW5nJ1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoKGFnZW50LmVuZGVkQXQgfHwgbm93KSAtIGFnZW50LnN0YXJ0ZWRBdCkgLyAxMDAwKSlcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKVxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKVxuICBpZiAoaG91cnMpIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlcyAlIDYwfW1gXG4gIGlmIChtaW51dGVzKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgXG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmZ1bmN0aW9uIGFnZW50U3RhdHVzKGFnZW50KSB7XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIHsgaWNvbjogJycsIGxhYmVsOiAnJywgY29sb3I6IGFjY2VudCgpIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0MnLCBsYWJlbDogJ3F1ZXVlZCcsIGNvbG9yOiBNVVRFRCB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNGJywgbGFiZWw6ICcnLCBjb2xvcjogR1JFRU4gfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnZmFpbGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MDBENycsIGxhYmVsOiAnZmFpbGVkJywgY29sb3I6IFJFRCB9XG4gIHJldHVybiB7IGljb246ICdcdTI1QTAnLCBsYWJlbDogJ2NhbmNlbGxlZCcsIGNvbG9yOiBNVVRFRCB9XG59XG5cbmZ1bmN0aW9uIFN0ZWVyTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNlbGVjdGVkLCBmb2N1cyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0oaXRlbS5tZXNzYWdlSWQsIGxheW91dClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IHNob3dMb2NrZWQgLz5cbn1cblxuZnVuY3Rpb24gRGljdGF0aW9uS2V5cyh7IGlucHV0IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGlucHV0LmhhbmRsZShldmVudCkpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE1vdXNlRm9jdXNSZWdpb24oeyBjaGlsZHJlbiwgb25QcmVzcywgLi4ucHJvcHMgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSkgb25QcmVzcygpXG4gIH0pXG4gIHJldHVybiA8Ym94IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvYm94PlxufVxuXG5mdW5jdGlvbiBDb21wb3NlckFjdGlvbih7IGljb24sIGFjdGl2ZUljb24sIGFjdGl2ZSA9IGZhbHNlLCBvblByZXNzLCBvbkhvdmVyIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScgJiYgaW5zaWRlICE9PSBob3ZlcmVkKCkpIHtcbiAgICAgIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgICAgb25Ib3Zlcj8uKGluc2lkZSlcbiAgICB9XG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGhpZ2hsaWdodGVkID0gaG92ZXJlZCgpIHx8IGFjdGl2ZVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgYmc6IGhpZ2hsaWdodGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBoaWdobGlnaHRlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAke2hpZ2hsaWdodGVkID8gYWN0aXZlSWNvbiA6IGljb259IGB9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBBZ2VudFN0cmlwUm93KHsgc2VsZWN0ZWQsIGZvY3VzZWQsIGNoaWxkcmVuLCBvblByZXNzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScpIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBmb2N1c2VkID8gYWNjZW50KCkgOiBudWxsLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBob3ZlcmVkKCkgPyBGR19TT0ZUIDogTVVURUQgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHNlbGVjdGVkIH19PntzZWxlY3RlZCA/ICdcdTI3NkYgJyA6ICcgICd9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYm94PlxuICApXG59XG5cbi8vIG9ubHkgdGhlIG5ld2VzdCBzbGljZSBvZiBhIGxvbmcgdHJhbnNjcmlwdCByZW5kZXJzOyBvbGRlciBpdGVtcyBsb2FkIGluXG4vLyBiYXRjaGVzIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgdG9wLiByZW5kZXIgY29zdCBpcyBwZXItaXRlbSwgc28gdGhpc1xuLy8ga2VlcHMgZGF5LWxvbmcgc2Vzc2lvbnMgYXMgZmFzdCBhcyBmcmVzaCBvbmVzXG5jb25zdCBISVNUT1JZX1dJTkRPVyA9IDUwXG5cbmZ1bmN0aW9uIGNvbGxhcHNlU3RlZXJUb29scyhpdGVtcykge1xuICBjb25zdCBjb2xsYXBzZWQgPSBbXVxuICBsZXQgaGlkZGVuID0gMFxuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWhpZGRlbikgcmV0dXJuXG4gICAgY29sbGFwc2VkLnB1c2goeyBraW5kOiAnc3RlZXItdG9vbHMnLCBjb3VudDogaGlkZGVuIH0pXG4gICAgaGlkZGVuID0gMFxuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyB8fCBpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGhpZGRlbiArPSBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyA/IGl0ZW0uaXRlbXMubGVuZ3RoIDogMVxuICAgIH0gZWxzZSB7XG4gICAgICBmbHVzaCgpXG4gICAgICBjb2xsYXBzZWQucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuICBmbHVzaCgpXG4gIHJldHVybiBjb2xsYXBzZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGJvb3QsIGNvbnRyb2xsZXI6IGN0bCB9KSB7XG4gIGNvbnN0IHsgY3dkLCByb290LCB2ZXJzaW9uLCBza2lsbHMsIG1jcCB9ID0gYm9vdFxuICBjb25zdCBzdGF0ZSA9IGN0bC5zdGF0ZVxuICBjb25zdCBbd29ya3NwYWNlT3Blbiwgc2V0V29ya3NwYWNlT3Blbl0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VSb3dzLCBzZXRXb3Jrc3BhY2VSb3dzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3dvcmtzcGFjZVNlbGVjdGVkLCBzZXRXb3Jrc3BhY2VTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3dvcmtzcGFjZUxvYWRpbmcsIHNldFdvcmtzcGFjZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbd29ya3NwYWNlRXJyb3IsIHNldFdvcmtzcGFjZUVycm9yXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3dvcmtzcGFjZUhlaWdodCwgc2V0V29ya3NwYWNlSGVpZ2h0XSA9IGNyZWF0ZVNpZ25hbCgyMClcbiAgY29uc3QgW3dvcmtzcGFjZVBlbmRpbmcsIHNldFdvcmtzcGFjZVBlbmRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCB3b3Jrc3BhY2VHcm91cHNOb3cgPSB3b3Jrc3BhY2VHcm91cHMod29ya3NwYWNlUm93cygpKVxuICBjb25zdCB3b3Jrc3BhY2VTZXNzaW9ucyA9IHdvcmtzcGFjZUdyb3Vwc05vdy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hXb3Jrc3BhY2UoKSB7XG4gICAgaWYgKCFib290LndvcmtzcGFjZSB8fCBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZykgcmV0dXJuXG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBib290LndvcmtzcGFjZS5saXN0KClcbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VHcm91cHMocm93cykuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnNlc3Npb25zKVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB3b3Jrc3BhY2VTZWxlY3Rpb24obmV4dCwgd29ya3NwYWNlU2VsZWN0ZWQoKSwgd29ya3NwYWNlU2Vzc2lvbnMpXG4gICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChzZWxlY3RlZClcbiAgICAgIHNldFdvcmtzcGFjZVJvd3Mocm93cylcbiAgICAgIHNldFdvcmtzcGFjZUVycm9yKCcnKVxuICAgICAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgYXdhaXQgYm9vdC53b3Jrc3BhY2UucHJldmlldyhzZWxlY3RlZClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHNlc3Npb25zIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nID0gZmFsc2VcbiAgICAgIHNldFdvcmtzcGFjZUxvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG4gIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlID0gcmVmcmVzaFdvcmtzcGFjZVxuICB1c2VJbnRlcnZhbCgoKSA9PiB7IGlmICh3b3Jrc3BhY2VPcGVuKCkpIHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSB9LCAxMDAwKVxuICBpZiAoYm9vdC53b3Jrc3BhY2UgJiYgIWJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkKSB7XG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSB0cnVlXG4gICAgY29uc3QgY2xlYW51cCA9IGJvb3Qud29ya3NwYWNlLnN1YnNjcmliZT8uKCgpID0+IHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSlcbiAgICBvbkNsZWFudXAoKCkgPT4geyBjbGVhbnVwPy4oKTsgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSBmYWxzZSB9KVxuICB9XG4gIGNvbnN0IFttb2RlbHMsIHNldE1vZGVsc10gPSBjcmVhdGVTaWduYWwoYm9vdC5tb2RlbHMpXG4gIGNvbnN0IFtyZWZyZXNoaW5nTW9kZWxzLCBzZXRSZWZyZXNoaW5nTW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIGNvbnN0IFt0ZXJtaW5hbEhlaWdodCwgc2V0VGVybWluYWxIZWlnaHRdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQpXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IHsgc2V0VGVybWluYWxXaWR0aCh3aWR0aCk7IHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgfSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2NhcHR1cmVTdGF0dXMsIHNldENhcHR1cmVTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2NvbXBvc2VyQWN0aW9uTGFiZWwsIHNldENvbXBvc2VyQWN0aW9uTGFiZWxdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5tb2RlbClcbiAgY29uc3QgW2RlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gIGNvbnN0IFtlZmZvcnQsIHNldEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZWZmb3J0KVxuICBjb25zdCBbZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgY29uc3QgW3NwZWVkLCBzZXRTcGVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3BlZWQpXG4gIGNvbnN0IFtzcGVlZERlZmF1bHRzLCBzZXRTcGVlZERlZmF1bHRzXSA9IGNyZWF0ZVNpZ25hbCh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgY29uc3QgW3Nob3dTcGVlZFBhbmVsLCBzZXRTaG93U3BlZWRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZXMsIHNldFJlc3VtZVNjb3Blc10gPSBjcmVhdGVTaWduYWwoWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuICByZWZzLnJlc3VtZU9wZW4gPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGNvbnN0IFtwZWVyU3RhdHVzLCBzZXRQZWVyU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBmdW5jdGlvbiBzeW5jRnJvbUNvbnRyb2xsZXIoKSB7XG4gICAgc2V0UGVlclN0YXR1cyhzdGF0ZS5wZWVyRXJyb3IgPyBgcGVlciBkaXNjb25uZWN0ZWQ6ICR7c3RhdGUucGVlckVycm9yfWAgOiBzdGF0ZS5wZWVyUGF1c2VkICYmIHN0YXRlLnBlZXJDb25uZWN0aW9uID8gJ3BlZXIgcmVzcG9uc2VzIHBhdXNlZCcgOiAnJylcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3Ioc3BlZWQsIHNldFNwZWVkLCBzdGF0ZS5zcGVlZClcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3BlZWREZWZhdWx0cygpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGUuc3BlZWREZWZhdWx0cykpIHNldFNwZWVkRGVmYXVsdHMoeyAuLi5zdGF0ZS5zcGVlZERlZmF1bHRzIH0pXG4gICAgbWlycm9yKGVmZm9ydCwgc2V0RWZmb3J0LCBzdGF0ZS5lZmZvcnQpXG4gICAgbWlycm9yKGRlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnQsIHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gICAgbWlycm9yKHF1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0LCBzdGF0ZS5xdWVzdGlvbilcbiAgICBtaXJyb3IocXVldWVkLCBzZXRRdWV1ZWQsIHN0YXRlLnF1ZXVlZClcbiAgICBtaXJyb3IoZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWQsIHN0YXRlLmV4cGVkaXRlZClcbiAgICBtaXJyb3Ioc2VudCwgc2V0U2VudCwgc3RhdGUuc2VudClcbiAgICBtaXJyb3IoYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbiwgc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICB9XG5cbiAgLy8gdHJlbmQgcmUtcnVucyB0aGlzIGNvbXBvbmVudCBvbiBldmVyeSBzaWduYWwgY2hhbmdlLCBzbyB0aGUgY29udHJvbGxlclxuICAvLyBpcyBzdWJzY3JpYmVkIG9uY2UgYW5kIGVhY2ggaGFuZGxlciByZWFjaGVzIHRoZSBuZXdlc3QgcmVuZGVyIHRocm91Z2hcbiAgLy8gcmVmcy51aSwgd2hpY2ggaXMgcmVwbGFjZWQgYmVsb3cgb24gZXZlcnkgcGFzc1xuICByZWZzLnVpID0ge1xuICAgIHN5bmM6IHN5bmNGcm9tQ29udHJvbGxlcixcbiAgICBmbGFzaDogKG1lc3NhZ2UpID0+IGZsYXNoKG1lc3NhZ2UpLFxuICAgIGRlcml2ZWQ6IChuZXh0KSA9PiB7XG4gICAgICBzZXRBY2NlbnQobmV4dC5jb2xvcilcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogbmV4dC5jb2xvciB8fCBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfSxcbiAgICBxdWVzdGlvbjogKCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gICAgfSxcbiAgICB0dXJuOiAoKSA9PiB7XG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfSxcbiAgICBpbnB1dDogKHRleHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRJbnB1dCh0ZXh0KVxuICAgIH0sXG4gICAgc2Vzc2lvbjogKCkgPT4ge1xuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0sXG4gICAgcmVzdW1lZDogKG1ldGEpID0+IGZsYXNoKGByZXN1bWVkICAke21ldGEudHVybnN9ICR7bWV0YS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28obWV0YS5hdCl9YCksXG4gICAgcHJvamVjdDogKG5leHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDtwaWNvICAke25leHQucm9vdC5zcGxpdCgnLycpLnBvcCgpfVxceDA3YClcbiAgICAgIHNldE1jcFNlcnZlcnMobmV4dC5tY3AubGlzdCgpKVxuICAgICAgc2V0RmlsZUxpc3QoW10pXG4gICAgfSxcbiAgICBtY3A6IChzZXJ2ZXJzKSA9PiBzZXRNY3BTZXJ2ZXJzKHNlcnZlcnMpLFxuICAgIHNoZWxsczogKCkgPT4gc2V0U2hlbGxzVmVyc2lvbigodikgPT4gdiArIDEpLFxuICAgIGdpdDogKCkgPT4gc2V0R2l0VmVyc2lvbigodikgPT4gdiArIDEpLFxuICB9XG4gIGlmICghcmVmcy5zdWJzY3JpYmVkKSB7XG4gICAgcmVmcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGN0bC5vbignY2hhbmdlJywgKCkgPT4gcmVmcy51aS5zeW5jKCkpXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZmxhc2gnLCAnZGVyaXZlZCcsICdxdWVzdGlvbicsICd0dXJuJywgJ2lucHV0JywgJ3Nlc3Npb24nLCAncmVzdW1lZCcsICdwcm9qZWN0JywgJ21jcCcsICdzaGVsbHMnLCAnZ2l0J10pIHtcbiAgICAgIGN0bC5vbih0eXBlLCAocGF5bG9hZCkgPT4gcmVmcy51aVt0eXBlXShwYXlsb2FkKSlcbiAgICB9XG4gIH1cbiAgc3luY0Zyb21Db250cm9sbGVyKClcblxuICBjb25zdCBza2lsbENvbW1hbmRzID0gc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogYHNraWxsICAke3MuZGVzY3JpcHRpb24gfHwgcy5zb3VyY2V9YCwgc2tpbGw6IHRydWUgfSkpXG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IGJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoYykgPT4gKHsgbmFtZTogYy5uYW1lLCBkZXNjOiBgY29tbWFuZCAgJHtjLmRlc2NyaXB0aW9uIHx8IGMuc291cmNlfWAsIGNvbW1hbmQ6IHRydWUgfSkpXG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoKVxuICBjb25zdCBzaGFkb3dlZCA9IFtdXG4gIGZvciAoY29uc3QgYyBvZiBbLi4uQ09NTUFORFMsIC4uLnNraWxsQ29tbWFuZHMsIC4uLnVzZXJDb21tYW5kc10pIHtcbiAgICBpZiAoYnlOYW1lLmhhcyhjLm5hbWUpKSBzaGFkb3dlZC5wdXNoKGAke2Muc2tpbGwgPyAnc2tpbGwnIDogJ2NvbW1hbmQnfSBcIiR7Yy5uYW1lfVwiYClcbiAgICBlbHNlIGJ5TmFtZS5zZXQoYy5uYW1lLCBjKVxuICB9XG4gIGNvbnN0IGFsbENvbW1hbmRzID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV1cbiAgaWYgKHNoYWRvd2VkLmxlbmd0aCAmJiAhcmVmcy53YXJuZWRTaGFkb3dlZCkge1xuICAgIHJlZnMud2FybmVkU2hhZG93ZWQgPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiBmbGFzaChgc2hhZG93ZWQgYnkgYW4gZWFybGllciBuYW1lLCByZW5hbWUgdG8gdXNlOiAke3NoYWRvd2VkLmpvaW4oJywgJyl9YCksIDApXG4gIH1cblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogMzUwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCcsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gPHRleHQgc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke21lc3NhZ2V9IGB9PC90ZXh0PixcbiAgfSlcblxuICBjb25zdCB1cGRhdGVUb2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogODAwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IChcbiAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpIH19PlxuICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfT57YCAke21lc3NhZ2V9IGB9PC9TaGltbWVyPlxuICAgICAgPC9ib3g+XG4gICAgKSxcbiAgfSlcblxuICBmdW5jdGlvbiBmbGFzaChtc2cpIHtcbiAgICB0b2FzdChtc2cpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTW9kZWxzKCkge1xuICAgIGlmIChyZWZyZXNoaW5nTW9kZWxzKCkpIHJldHVyblxuICAgIHNldFJlZnJlc2hpbmdNb2RlbHModHJ1ZSlcbiAgICBmbGFzaCgncmVmcmVzaGluZyBtb2RlbHMnKVxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCBib290LnJlZnJlc2hNb2RlbHMoKVxuICAgICAgYm9vdC5tb2RlbHMgPSByZWZyZXNoZWRcbiAgICAgIHNldE1vZGVscyhyZWZyZXNoZWQpXG4gICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQpXG4gICAgICBmbGFzaChgbW9kZWxzIHJlZnJlc2hlZCAgJHtyZWZyZXNoZWQubGVuZ3RofSBtb2RlbHMgICR7ZWxhcHNlZH1tc2ApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbW9kZWwgcmVmcmVzaCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG4gIHJlZnMuY2FwdHVyZUltYWdlID8/PSBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoe1xuICAgIGNhcHR1cmVSZWdpb24sXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgICBvblN0YXR1czogc2V0Q2FwdHVyZVN0YXR1cyxcbiAgfSlcblxuICBpZiAoIXJlZnMuZGljdGF0aW9uKSB7XG4gICAgcmVmcy5kaWN0YXRpb24gPSBjcmVhdGVEaWN0YXRpb24oe1xuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0RGljdGF0aW9uU3RhdHVzKHN0YXR1cylcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHNldERpY3RhdGlvbkxldmVscyhbXSlcbiAgICAgIH0sXG4gICAgICBvbkxldmVsOiAobGV2ZWwpID0+IHNldERpY3RhdGlvbkxldmVscyhhcHBlbmRMZXZlbChkaWN0YXRpb25MZXZlbHMoKSwgbGV2ZWwpKSxcbiAgICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKGBkaWN0YXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCksXG4gICAgfSlcbiAgICByZWZzLmRpY3RhdGlvbklucHV0ID0gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb246IHJlZnMuZGljdGF0aW9uLCBnZXRJbnB1dDogaW5wdXQsIHNldElucHV0IH0pXG4gICAgY29uc3QgcHJlbG9hZCA9IHNldEltbWVkaWF0ZSgoKSA9PiByZWZzLmRpY3RhdGlvbi5wcmVsb2FkKCkpXG4gICAgcHJlbG9hZC51bnJlZigpXG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xlYXJJbW1lZGlhdGUocHJlbG9hZClcbiAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBbc2lnbmFsLCBjb2RlXSBvZiBbWydTSUdURVJNJywgMTQzXSwgWydTSUdIVVAnLCAxMjldXSkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVmcy51cGRhdGVDaGVja2VkKSB7XG4gICAgcmVmcy51cGRhdGVDaGVja2VkID0gdHJ1ZVxuICAgIGNoZWNrRm9yVXBkYXRlKHZlcnNpb24pLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSByZXR1cm5cbiAgICAgIHVwZGF0ZVRvYXN0KGBwaWNvIHYke2ZvdW5kLnZlcnNpb259IGF2YWlsYWJsZSAgL3VwZGF0ZWApXG4gICAgICBmb3VuZC5tYXJrTm90aWZpZWQoKVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgY29uc3QgcGVyZm9ybUNvbXBhY3Rpb24gPSBjdGwuY29tcGFjdFxuXG4gIGZ1bmN0aW9uIGNvbXBsZXRpb25Tb3VyY2UobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnc3BlZWQnKSByZXR1cm4gU1BFRURfTEVWRUxTLm1hcCgobCkgPT4gbC5rZXkpXG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7Ym9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJ30pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycgOiBwcmVmXG4gIH1cblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGNvbnN0IFtzdGVlckRlcml2ZWQsIHNldFN0ZWVyRGVyaXZlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgbGV0IHN0ZWVyUHJldmlld1JlcXVlc3QgPSAwXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gc3RlZXIoKT8uY2hhbmdlc1xuICAgIGlmICghY2hhbmdlcz8ubGVuZ3RoKSByZXR1cm4gZGVyaXZlZCgpXG4gICAgaWYgKHJlZnMuc3RlZXJQcmV2aWV3Q2hhbmdlcyAhPT0gY2hhbmdlcykge1xuICAgICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gY2hhbmdlc1xuICAgICAgY29uc3QgcmVxdWVzdCA9ICsrc3RlZXJQcmV2aWV3UmVxdWVzdFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGN0bC5wcmV2aWV3U3RlZXIoY2hhbmdlcykpLnRoZW4obmV4dCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0ID09PSBzdGVlclByZXZpZXdSZXF1ZXN0KSBzZXRTdGVlckRlcml2ZWQobmV4dClcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgIH1cbiAgICByZXR1cm4gc3RlZXJEZXJpdmVkKCkgfHwgZGVyaXZlZCgpXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZEZ1bGxIaXN0b3J5KCkge1xuICAgIGlmIChjdGwubG9hZEhpc3RvcnkgJiYgKHN0YXRlLmRlcml2ZWQudHJhbnNjcmlwdE9mZnNldCB8fCAwKSA+IDApIGF3YWl0IGN0bC5sb2FkSGlzdG9yeShJbmZpbml0eSlcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBsb2FkT2xkZXJIaXN0b3J5KCkge1xuICAgIGlmICghY3RsLmxvYWRIaXN0b3J5IHx8IHJlZnMuaGlzdG9yeUxvYWRpbmcgfHwgIShzdGF0ZS5kZXJpdmVkLnRyYW5zY3JpcHRPZmZzZXQgPiAwKSkgcmV0dXJuXG4gICAgcmVmcy5oaXN0b3J5TG9hZGluZyA9IHRydWVcbiAgICB0cnkgeyBhd2FpdCBjdGwubG9hZEhpc3Rvcnkoc3RhdGUuZGVyaXZlZC50cmFuc2NyaXB0Lmxlbmd0aCArIEhJU1RPUllfV0lORE9XKSB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGZsYXNoKGVycm9yLm1lc3NhZ2UpIH1cbiAgICBmaW5hbGx5IHsgcmVmcy5oaXN0b3J5TG9hZGluZyA9IGZhbHNlIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGF3YWl0IGxvYWRGdWxsSGlzdG9yeSgpXG4gICAgc2V0U3RlZXJEZXJpdmVkKG51bGwpXG4gICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gbnVsbFxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoYywgYXJncykuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSB7XG4gICAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgcmV0dXJuIGN0bC5mb3JrKGFyZ3MudHJpbSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnc3BlZWQnKSB7XG4gICAgICBpZiAoIXNwZWVkQXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1NwZWVkUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3BlZWRDb21tYW5kKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93U3BlZWRQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFhd2FpdCBjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IHNwZWVkQXBwbGllcyA9IGN0bC5zcGVlZEFwcGxpZXNcbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5hY3Rpdml0eSgpKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5zaGVsbFJvd3MoKSlcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSAmJiAhYW55UGFuZWwoKSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JylcbiAgY29uc3QgYWN0aXZpdHlNYXJnaW4gPSAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHx8ICFzaG93Q29tcG9zZXJBY3Rpb25zID8gMSA6IDBcbiAgY29uc3QgW3NoZWxsU3RyaXBTaXplLCBhZ2VudFN0cmlwU2l6ZV0gPSBhY3Rpdml0eVN0cmlwU2l6ZXModGVybWluYWxIZWlnaHQoKSwgW3NoZWxsUm93cy5sZW5ndGgsIGFnZW50Um93cy5sZW5ndGhdLCBhY3Rpdml0eU1hcmdpbilcbiAgaWYgKHF1ZXN0aW9uUmVxdWVzdCgpKSB7XG4gICAgZm0uaXRlbSgncXVlc3Rpb24nKVxuICAgIGlmICghZm0uaXMoJ3F1ZXN0aW9uJykpIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkgZm0uaXRlbSgnaW5wdXQnKVxuICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgZm0uZ3JvdXAoJ2FjdGl2aXR5LXN0cmlwJywgeyBpdGVtczogWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnc2hlbGwtc3RyaXAnLCB7IGl0ZW1zOiBbJ3NoZWxsLW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgICAgaWYgKGFnZW50Um93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnYWdlbnQtc3RyaXAnLCB7IGl0ZW1zOiBbJ2FnZW50LW1haW4nLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIHtcbiAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSBmYWxzZVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9XG4gIH1cbiAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgeyBmbS5pdGVtKCd3b3Jrc3BhY2UnKTsgZm0uZm9jdXMoJ3dvcmtzcGFjZScpIH1cbiAgZWxzZSBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UpIHtcbiAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IGZhbHNlXG4gICAgZm0uZm9jdXMocXVlc3Rpb25SZXF1ZXN0KCkgPyAncXVlc3Rpb24nIDogJ2lucHV0JylcbiAgfVxuICB1c2VGb2N1c1RyYXAod29ya3NwYWNlT3BlbigpIHx8IGFueVBhbmVsKCkgfHwgdmlldygpID09PSAnaGVscCcpXG4gIHVzZVNlbGVjdGlvbih7XG4gICAgb25Db3B5OiAodGV4dCkgPT4gZmxhc2goYGNvcGllZCAke3RleHQubGVuZ3RofSAke3RleHQubGVuZ3RoID09PSAxID8gJ2NoYXJhY3RlcicgOiAnY2hhcmFjdGVycyd9YCksXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzaGVsbCkgPT4gYHNoZWxsLSR7c2hlbGwuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGFnZW50KSA9PiBgYWdlbnQtJHthZ2VudC5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgY29uc3QgcGFnZVNpemUgPSBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwYWdlU2l6ZSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFnZVNpemUgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoKHByZWZpeCA9PT0gJ3NoZWxsJyA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemUpIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcigocHJlZml4ID09PSAnc2hlbGwnID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZSkgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAod29ya3NwYWNlT3BlbigpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlUGVuZGluZyh0cnVlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlLmNhbmNlbFByZXZpZXcoKVxuICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gdHJ1ZVxuICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4oZmFsc2UpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHJldHVybiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHdvcmtzcGFjZVBlbmRpbmcoKSkgcmV0dXJuXG4gICAgICBjb25zdCBuZXh0ID0gd29ya3NwYWNlTmF2aWdhdGUod29ya3NwYWNlU2Vzc2lvbnMsIHdvcmtzcGFjZVNlbGVjdGVkKCksIGV2ZW50LCB3b3Jrc3BhY2VIZWlnaHQoKSlcbiAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQobmV4dClcbiAgICAgICAgdm9pZCBib290LndvcmtzcGFjZS5wcmV2aWV3KG5leHQpLmNhdGNoKGVycm9yID0+IHNldFdvcmtzcGFjZUVycm9yKGBwcmV2aWV3IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzcGFjZVNlc3Npb25zLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSB3b3Jrc3BhY2VTZWxlY3RlZCgpKVxuICAgICAgaWYgKCFyb3cpIHJldHVyblxuICAgICAgY29uc3QgYXR0YWNoID0gIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEgJiYgIWV2ZW50LmFsdCAmJiAoZXZlbnQua2V5ID09PSAncmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ2wnIHx8IGV2ZW50LmtleSA9PT0gJ3JldHVybicpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgZWxzZSBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgZWxzZSBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBlbHNlIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3QnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdwJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgb3BlblByb2plY3RQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvcmRlciA9IFtudWxsLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgICAgIGNvbnN0IG5leHQgPSBvcmRlclsob3JkZXIuaW5kZXhPZihlZmZvcnQoKSA/PyBudWxsKSArIDEpICUgb3JkZXIubGVuZ3RoXVxuICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KG5leHQpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dIaXN0b3J5UGFuZWwoKSkge1xuICAgICAgc3dpdGNoSGlzdFNjb3BlKChoaXN0U2NvcGUoKSArIDEpICUgSElTVE9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgICAgc2V0TWVtU2NvcGUoKHMpID0+IChzICsgMSkgJSBNRU1PUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAocmVzdW1lU2NvcGUoKSArIDEpICUgcmVzdW1lU2NvcGVzKCkubGVuZ3RoXG4gICAgICBzZXRSZXN1bWVTY29wZShuZXh0KVxuICAgICAgcmVmcmVzaFNlc3Npb25zKG5leHQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3onICYmIHN0YXRlLnJld2luZFVuZG8gJiYgIWJ1c3koKSAmJiB2aWV3KCkgPT09ICdjaGF0Jykge1xuICAgICAgdW5kb1Jld2luZCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmbXRFbGFwc2VkID0gKHMpID0+IChzIDwgNjAgPyBgJHtzfXNgIDogYCR7TWF0aC5mbG9vcihzIC8gNjApfW0gJHtzICUgNjB9c2ApXG4gIGNvbnN0IGVsYXBzZWQgPSBmbXRFbGFwc2VkKGJ1c3koKSA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydGVkQXQoKSkgLyAxMDAwKSkgOiAwKVxuXG4gIGNvbnN0IHNsYXNoUmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSlcbiAgY29uc3Qgc2xhc2hRdWVyeSA9IHNsYXNoUmFuZ2U/LnF1ZXJ5ID8/IG51bGxcbiAgY29uc3Qgc2hvd0NvbW1hbmRzID0gc2xhc2hSYW5nZSAhPT0gbnVsbCAmJiAhYW55UGFuZWwoKVxuICBjb25zdCBtYXRjaGVkQ29tbWFuZHMgPSAhc2hvd0NvbW1hbmRzXG4gICAgPyBbXVxuICAgIDogY21kQ3ljbGUoKVxuICAgICAgPyBjbWRDeWNsZSgpLm1hdGNoZXNcbiAgICAgIDogYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiAoYy5jb21tYW5kIHx8IChzbGFzaFJhbmdlLnN0YXJ0ID09PSAwICYmIHNsYXNoUmFuZ2UuZW5kID09PSBpbnB1dCgpLmxlbmd0aCkpICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2xhc2hRdWVyeS50b0xvd2VyQ2FzZSgpKSlcblxuICBjb25zdCBhdE1hdGNoID0gaW5wdXQoKS5tYXRjaCgvKF58W1xccyhdKUAoW15cXHNAXSopJC8pXG4gIGNvbnN0IHNob3dGaWxlcyA9IGF0TWF0Y2ggIT09IG51bGwgJiYgIXNob3dDb21tYW5kcyAmJiAhZmlsZXNEaXNtaXNzZWQoKSAmJiAhYW55UGFuZWwoKVxuICBpZiAoc2hvd0ZpbGVzKSB7XG4gICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgfSlcbiAgfVxuICBjb25zdCBtYXRjaGVkRmlsZXMgPSBzaG93RmlsZXNcbiAgICA/IGZpbGVMaXN0KClcbiAgICAgICAgLm1hcCgoZikgPT4gW2Z1enp5U2NvcmUoYXRNYXRjaFsyXSwgZiksIGZdKVxuICAgICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gICAgICAgIC5tYXAoKFssIGZdKSA9PiBmKVxuICAgIDogW11cblxuICBhc3luYyBmdW5jdGlvbiBwaWNrRmlsZShmKSB7XG4gICAgY29uc3QgdiA9IGlucHV0KClcbiAgICBjb25zdCBhdCA9IHYubGFzdEluZGV4T2YoJ0AnKVxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYXdhaXQgY3RsLmF0dGFjaFByb2plY3RGaWxlKGYpXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVyICsgJyAnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0ICsgMSkgKyBmICsgJyAnKVxuICAgIH1cbiAgICBzZXRGaWxlSW5kZXgoMClcbiAgfVxuXG4gIGNvbnN0IGNvbXBDdHggPSBjb21wbGV0aW5nKCkgPyBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBpbnB1dCgpLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pIDogbnVsbFxuICBjb25zdCBzaG93Q29tcGxldGlvbiA9ICEhY29tcEN0eCAmJiBjb21wQ3R4Lm1hdGNoZXMubGVuZ3RoID4gMCAmJiAhc2hvd0NvbW1hbmRzICYmICFzaG93RmlsZXMgJiYgIWFueVBhbmVsKClcblxuICBjb25zdCByZXdpbmRFbnRyaWVzID0gKCkgPT4gdXNlckVudHJpZXMoZGVyaXZlZCgpKVxuICBjb25zdCByZXdpbmRPcHRpb25zID0gKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXdpbmRUYXJnZXQoKVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW11cbiAgICBjb25zdCB7IG1zZ3MsIGVkaXRzIH0gPSByZXdpbmRTdGF0cyhkZXJpdmVkKCksIHRhcmdldC5pbmRleClcbiAgICBjb25zdCBlID0gZWRpdHMubGVuZ3RoXG4gICAgY29uc3QgZWRpdHNMYWJlbCA9IGAke2V9ICR7ZSA9PT0gMSA/ICdlZGl0JyA6ICdlZGl0cyd9YFxuICAgIGNvbnN0IG9wdHMgPSBbXVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnYm90aCcsIGxhYmVsOiAncmVzdG9yZSBjb2RlIGFuZCBjb252ZXJzYXRpb24nLCBkZXNjOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goe1xuICAgICAga2V5OiAnY2hhdCcsXG4gICAgICBsYWJlbDogZSA+IDAgPyAncmVzdG9yZSBjb252ZXJzYXRpb24gb25seScgOiAncmVzdG9yZSBjb252ZXJzYXRpb24nLFxuICAgICAgZGVzYzogZSA+IDAgPyAnY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZmlsZSBjaGFuZ2VzIGtlcHQnIDogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGRyb3BzICR7bXNnc30gZW50cmllc2AsXG4gICAgfSlcbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2NvZGUnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBvbmx5JywgZGVzYzogYGNvbnZlcnNhdGlvbiBrZXB0ICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7IGtleTogJ3N1bW1hcnknLCBsYWJlbDogJ3Jld2luZCBhbmQga2VlcCBhIHN1bW1hcnknLCBkZXNjOiAnZHJvcHBlZCBlbnRyaWVzIGNvbGxhcHNlIGludG8gYSBvbmUtbGluZSBub3RlJyB9KVxuICAgIHJldHVybiBvcHRzXG4gIH0pKClcblxuICBjb25zdCB1c2FnZSA9IGxpdmVVc2FnZSgpIHx8IGRlcml2ZWQoKS51c2FnZUFjdGl2ZVxuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IG1vZGVsKCkuY29udGV4dCA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0TW9kZWwgPT09IG1vZGVsKCkubmFtZVxuICAgID8gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyAvIG1vZGVsKCkuY29udGV4dCkgKiAxMDApKVxuICAgIDogMFxuICBjb25zdCB2aXNpYmxlU2hlbGxzID0gc2hlbGxSb3dzXG4gIGNvbnN0IHZpZXdlZFNoZWxsID0gdmlld2VkU2hlbGxJZCgpID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSB2aWV3ZWRTaGVsbElkKCkpIDogbnVsbFxuICBjb25zdCBjb21iaW5lZEFjdGl2aXR5ID0gdmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwXG4gIGNvbnN0IHNoZWxsU3RyaXBGb2N1cyA9IGZtLmlzKCdzaGVsbC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGxJZCA9IHNoZWxsU3RyaXBGb2N1cyAmJiBzaGVsbFN0cmlwRm9jdXMgIT09ICdzaGVsbC1tYWluJyA/IHNoZWxsU3RyaXBGb2N1cy5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGwgPSBmb2N1c2VkU2hlbGxJZCA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gZm9jdXNlZFNoZWxsSWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRTaGVsbCA9IGZvY3VzZWRTaGVsbCB8fCB2aWV3ZWRTaGVsbFxuICBjb25zdCBzaGVsbEFjdGlvbkhpbnQgPSBoaW50ZWRTaGVsbCA/IGBjdHJsK3ggJHtoaW50ZWRTaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICdraWxsJyA6ICdkaXNtaXNzJ31gIDogJydcbiAgY29uc3Qgc2hlbGxXaW5kb3dUYXJnZXQgPSBzaGVsbFN0cmlwRm9jdXMgPT09ICdzaGVsbC1tYWluJyA/IDAgOiB2aXNpYmxlU2hlbGxzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gKGZvY3VzZWRTaGVsbElkIHx8IHZpZXdlZFNoZWxsSWQoKSkpXG4gIGNvbnN0IHNoZWxsV2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KHNoZWxsV2luZG93T2Zmc2V0KCksIHNoZWxsV2luZG93VGFyZ2V0LCB2aXNpYmxlU2hlbGxzLmxlbmd0aCwgc2hlbGxTdHJpcFNpemUpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsU3RyaXBTaXplKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgYWdlbnRTdHJpcFNpemUpXG4gIGlmIChhZ2VudFdpbmRvd1N0YXJ0ICE9PSBhZ2VudFdpbmRvd09mZnNldCgpKSBzZXRBZ2VudFdpbmRvd09mZnNldChhZ2VudFdpbmRvd1N0YXJ0KVxuICBjb25zdCBhZ2VudFdpbmRvdyA9IHZpc2libGVBZ2VudHMuc2xpY2UoYWdlbnRXaW5kb3dTdGFydCwgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50U3RyaXBTaXplKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdW5yZWFkUGVlcnMgPSBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcihpdGVtID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInICYmIGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnICYmICFpdGVtLnJlYWQpXG4gIGNvbnN0IHVucmVhZFBlZXJJZHMgPSBuZXcgU2V0KHVucmVhZFBlZXJzLm1hcChpdGVtID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICghbGl2ZVBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSAmJiAhdW5yZWFkUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSkpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50ICsgKCFhY3RpdmVBZ2VudCAmJiAhYWN0aXZlU2hlbGwgPyBkZXJpdmVkKCkudHJhbnNjcmlwdE9mZnNldCB8fCAwIDogMClcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyksIC4uLihzdHJlYW1pbmcoKSA/IFt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH1dIDogW10pLCAuLi51bnJlYWRQZWVyc11cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3b3Jrc3BhY2VXaWR0aCA9IE1hdGgubWluKDM4LCBNYXRoLm1heCgxOCwgTWF0aC5mbG9vcih0ZXJtaW5hbFdpZHRoKCkgLyAzKSkpXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSAtICh3b3Jrc3BhY2VPcGVuKCkgPyB3b3Jrc3BhY2VXaWR0aCA6IDApID4gMTYwXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZ2l0Rm9vdGVyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyB3aWRlU2lkZWJhcjogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoQWdlbnRMaW1pdDogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAge3dvcmtzcGFjZU9wZW4oKSAmJiA8V29ya3NwYWNlU2lkZWJhciBncm91cHM9e3dvcmtzcGFjZUdyb3Vwc05vd30gc2VsZWN0ZWQ9e3dvcmtzcGFjZVNlbGVjdGVkKCl9IHdpZHRoPXt3b3Jrc3BhY2VXaWR0aH0gbG9hZGluZz17d29ya3NwYWNlTG9hZGluZygpfSBlcnJvcj17d29ya3NwYWNlRXJyb3IoKX0gb25IZWlnaHQ9eyhoZWlnaHQpID0+IHsgaWYgKHdvcmtzcGFjZUhlaWdodCgpICE9PSBoZWlnaHQpIHNldFdvcmtzcGFjZUhlaWdodChoZWlnaHQpIH19IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGZsZXhCYXNpczogMCwgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyAmJiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3VzZXInKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIsIHBhZGRpbmdSaWdodDogNCwgcGFkZGluZ0JvdHRvbTogMSwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9eyFkZWxpYmVyYXRpb25WaWV3ICYmIChmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpfVxuICAgICAgICAgIGZvbGxvd0ZvY3VzPXtzdGVlcigpID8gc3RlZXJMaXN0Rm9jdXMgOiBudWxsfVxuICAgICAgICAgIGZvY3VzUGFkZGluZz17MX1cbiAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgb25NZXRyaWNzPXsobWV0cmljcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0cmFuc2NyaXB0TWV0cmljcygpXG4gICAgICAgICAgICBpZiAocHJldmlvdXM/LnZpc2libGVIZWlnaHQgPT09IG1ldHJpY3MudmlzaWJsZUhlaWdodCAmJiBwcmV2aW91cz8uY29udGVudEhlaWdodCA9PT0gbWV0cmljcy5jb250ZW50SGVpZ2h0KSByZXR1cm5cbiAgICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG1ldHJpY3MpXG4gICAgICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwICYmIG1ldHJpY3MudmlzaWJsZUhlaWdodCA+IDAgJiYgbWV0cmljcy5jb250ZW50SGVpZ2h0IDw9IG1ldHJpY3MudmlzaWJsZUhlaWdodCkge1xuICAgICAgICAgICAgICBpZiAod2luZG93ZWQuaGlkZGVuQ291bnQgPT09IDApIHZvaWQgbG9hZE9sZGVySGlzdG9yeSgpXG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGlmICh3aW5kb3dlZC5oaWRkZW5Db3VudCA9PT0gMCkgdm9pZCBsb2FkT2xkZXJIaXN0b3J5KClcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zIHx8IEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPERlbGliZXJhdGlvbkV4Y2hhbmdlIHR1cm5zPXtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJyl9IHZlcmJvc2U9e3ZlcmJvc2UoKX0gd2lkZT17dGVybWluYWxXaWR0aCgpID49IDExMH0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3RvcnkoKX0gdmlld3BvcnRIZWlnaHQ9e3RyYW5zY3JpcHRNZXRyaWNzKCk/LnZpc2libGVIZWlnaHR9IGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJyl9IG9uRm9jdXM9eygpID0+IGZtLmZvY3VzKCdmZWVkJyl9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAge2NvbnZlcnNhdGlvblNlYXJjaC5hY3RpdmUoKSA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoQmFyIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofSBtYXRjaGVzPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzfSAvPlxuICAgICAgICApIDogZm0uaXMoJ2ZlZWQnKSAmJiAhYW55UGFuZWwoKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogJ2JsYWNrJyB9fT57J2ovayAgXHUyMTkxL1x1MjE5MyBzY3JvbGwgICBnL0cgZW5kcyAgIC8gc2VhcmNoICAgY3RybC11L2QgcGFnZSd9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+fVxuXG4gICAgICB7KGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtleHBlZGl0ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgZXhwZWRpdGVkLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnsnXHUyMUEwICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBhY2NlbnQoKSB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgIGFmdGVyIG5leHQgdG9vbCAgXHUyMTkxIHRvIGVkaXQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7cXVldWVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YHBlbmRpbmctJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIwM0EgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIGV4cGVkaXRlZCgpLmxlbmd0aCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgIHBlbmRpbmcgIFx1MjE5MSBlZGl0ICBcdTIxOTIgc2VuZCBhZnRlciBuZXh0IHRvb2wnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7Y29tbWFuZEZvcm0oKSAmJiA8Q29tbWFuZEZvcm1cbiAgICAgICAgbmFtZT17Y29tbWFuZEZvcm0oKS5uYW1lfVxuICAgICAgICBmaWVsZHM9e2NvbW1hbmRGb3JtKCkuZmllbGRzfVxuICAgICAgICBmaWxlcz17ZmlsZUxpc3QoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlcykgPT4gZmluaXNoQ29tbWFuZChjb21tYW5kRm9ybSgpLCB2YWx1ZXMpfVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4geyBzZXRDb21tYW5kRm9ybShudWxsKTsgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbDsgZm0uZm9jdXMoJ2lucHV0JykgfX1cbiAgICAgIC8+fVxuXG4gICAgICB7cXVlc3Rpb25SZXF1ZXN0KCkgJiYgKFxuICAgICAgICA8UXVlc3Rpb25Gb3JtXG4gICAgICAgICAgcmVxdWVzdD17cXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiB7IGlmICghd29ya3NwYWNlT3BlbigpKSBmbS5mb2N1cygnaW5wdXQnKSB9fSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IGRlcml2ZWQoKS50aXRsZSkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3N0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVyaXZlZCgpLnRpdGxlID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtkZXJpdmVkKCkudGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7ZGVyaXZlZCgpLnRpdGxlfSBgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgIGNvbG9yPXtGR31cbiAgICAgICAgICBsaW5lQ291bnRlclxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dCgpfVxuICAgICAgICAgIGN1cnNvck9mZnNldD17aW5wdXRDdXJzb3IoKX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyh2LCB7XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBzdGF0ZS5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgbmV4dElkOiAoKSA9PiArK3N0YXRlLmltYWdlQ291bnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SW5wdXQoY29udmVydGVkLnRleHQsIGNvbnZlcnRlZC50ZXh0ID09PSB2ID8gaW5wdXRDdXJzb3IoKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0RmlsZUluZGV4KDApXG4gICAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1c3koKSkgaW50ZXJydXB0KClcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBpbXBsaWNpdFJld2luZFRhcmdldChkZXJpdmVkKCksIGlucHV0KCkpXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQpIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIHsga2V5OiAnY2hhdCcgfSlcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VibWl0PXtzZW5kfVxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGUua2V5ID09PSAnbGVmdCcgJiYgIWUuY3RybCkgfHwgKGUua2V5ID09PSAnaCcgJiYgZS5jdHJsKSkgJiYgIWUubWV0YSAmJiAhZS5hbHQgJiYgYm9vdC53b3Jrc3BhY2UgJiYgZm0uaXMoJ2lucHV0JykgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkgJiYgZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7XG4gICAgICAgICAgICAgIHRleHQ6IGUudmFsdWUsIGF0dGFjaG1lbnRzOiB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzKGUudmFsdWUsIHN0YXRlLmF0dGFjaG1lbnRzKSwgZGljdGF0aW9uOiBkaWN0YXRpb25TdGF0dXMoKSwgY2FwdHVyZTogY2FwdHVyZVN0YXR1cygpLCBwZW5kaW5nOiByZWZzLmNvbW1hbmRFeHBhbnNpb24gfHwgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcsXG4gICAgICAgICAgICAgIGhpc3Rvcnk6IGhpc3RJZHgoKSwgY29tcGxldGlvbjogY29tcGxldGluZygpLCBjb21tYW5kOiBjb21tYW5kRm9ybSgpLCBxdWVzdGlvbjogcXVlc3Rpb25SZXF1ZXN0KCksIHN0ZWVyOiBzdGVlcigpLCBxdWV1ZWQ6IHF1ZXVlZCgpLmxlbmd0aCwgZXhwZWRpdGVkOiBleHBlZGl0ZWQoKS5sZW5ndGgsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChib290LndvcmtzcGFjZS5jdXJyZW50SWQoKSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlT3Blbih0cnVlKVxuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgIGZtLmZvY3VzKCd3b3Jrc3BhY2UnKVxuICAgICAgICAgICAgICB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB2b2lkIHJlZnMucGFzdGVJbWFnZSgpLmZpbmFsbHkoKCkgPT4geyByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydChlKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ28nKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBpY2tGaWxlKG1hdGNoZWRGaWxlc1tNYXRoLm1pbihmaWxlSW5kZXgoKSwgbWF0Y2hlZEZpbGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dDb21tYW5kcyAmJiBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjeWNsZSA9IGNtZEN5Y2xlKClcbiAgICAgICAgICAgICAgaWYgKCFjeWNsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oY21kSW5kZXgoKSwgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUoeyBtYXRjaGVzOiBtYXRjaGVkQ29tbWFuZHMgfSlcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChzdGFydClcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgbWF0Y2hlZENvbW1hbmRzW3N0YXJ0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IChjbWRJbmRleCgpICsgMSkgJSBjeWNsZS5tYXRjaGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KG5leHQpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBjeWNsZS5tYXRjaGVzW25leHRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQocmVwbGFjZW1lbnQudGV4dCwgcmVwbGFjZW1lbnQuY3Vyc29yKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdwYXN0ZScgJiYgZS50ZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZXh0cmFjdEltYWdlUGF0aHMoZS50ZXh0KVxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gZS52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gZS5jdXJzb3IgPz8gZHJhZnQubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3RsLmlkXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocGF0aHMubWFwKHBhdGggPT4gY3RsLmF0dGFjaEltYWdlKHBhdGgpKSkudGhlbihwbGFjZWhvbGRlcnMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGN0bC5pZCAhPT0gc2Vzc2lvbklkIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgICAgICAgICAgICAgIHNldElucHV0KGRyYWZ0LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVycy5qb2luKCcgJykgKyBkcmFmdC5zbGljZShhdCkpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2JhY2tzcGFjZScgJiYgZS5jdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvcikubWF0Y2goL1xcW0ltYWdlICNcXGQrXFxdJC8pXG4gICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGN0bC5kZXRhY2hJbWFnZShtYXRjaFswXSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yIC0gbWF0Y2hbMF0ubGVuZ3RoKSArIGUudmFsdWUuc2xpY2UoZS5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGUudmFsdWUsIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSlcbiAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIWNvbXBsZXRpbmcoKSkge1xuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICBzZXRDb21wSW5kZXgoMClcbiAgICAgICAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5tYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NlcHRDb21wbGV0aW9uKGUudmFsdWUsIGN0eCwgY3R4Lm1hdGNoZXNbTWF0aC5taW4oY29tcEluZGV4KCksIGN0eC5tYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCB8fCBlLm1ldGEgfHwgc2hvd0NvbW1hbmRzIHx8IHNob3dGaWxlcykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgKGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgY3RsLnJlY2FsbFBlbmRpbmcoKS50aGVuKHNldElucHV0KS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3JpZ2h0JyAmJiBlLnZhbHVlID09PSAnJyAmJiBxdWV1ZWQoKS5sZW5ndGggPiAwICYmIGJ1c3koKSAmJiAhY29tcGFjdGluZygpKSB7XG4gICAgICAgICAgICAgIGN0bC5leHBlZGl0ZVF1ZXVlZCgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicm93c2luZyA9IGhpc3RJZHgoKSA+PSAwXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgKGJyb3dzaW5nIHx8IGUudmFsdWUgPT09ICcnKSAmJiBoaXN0SWR4KCkgPCBzZW50KCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpICsgMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdkb3duJyAmJiBicm93c2luZykge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpIC0gMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KG4gPCAwID8gJycgOiBzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgIC8+XG4gICAgICA8L01vdXNlRm9jdXNSZWdpb24+fVxuXG4gICAgICB7c2hvd0NvbXBvc2VyQWN0aW9ucyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgbWFyZ2luTGVmdDogMSB9fT5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1Q0JcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVDRlwiXG4gICAgICAgICAgICBhY3RpdmU9e2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZSd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGRpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJ1xuICAgICAgICAgICAgICA/IHZvaWQgcmVmcy5kaWN0YXRpb25JbnB1dC5zdG9wKClcbiAgICAgICAgICAgICAgOiByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVBMVwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUEwXCJcbiAgICAgICAgICAgIGFjdGl2ZT17Y2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGltYWdlIChjdHJsLW8pJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGljdGF0aW9uSW5kaWNhdG9yKGRpY3RhdGlvblN0YXR1cygpLCBkaWN0YXRpb25MZXZlbHMoKSl9PC90ZXh0Pn1cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2RpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJyA/ICdlc2MgY2FuY2VsICBlbnRlciBjb25maXJtJyA6IGNhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZycgPyAnIGVzYyBjYW5jZWwnIDogY29tcG9zZXJBY3Rpb25MYWJlbCgpID8gYCAke2NvbXBvc2VyQWN0aW9uTGFiZWwoKX1gIDogJyd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKX1cbiAgICAgICAgICBjdXJyZW50PXttb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e2RlZmF1bHRNb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd01vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0sIHsgYXNEZWZhdWx0OiB0cnVlIH0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyBkZWxpYmVyYXRpb25Nb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IGRlbGliZXJhdGlvbjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBkZWxpYmVyYXRpb246ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib290LnJlc2VhcmNoTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgcmVzZWFyY2hNb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTcGVlZFBhbmVsKCkgJiYgKFxuICAgICAgICA8U3BlZWRQYW5lbFxuICAgICAgICAgIGxldmVscz17U1BFRURfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e3NwZWVkKCl9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtzcGVlZERlZmF1bHRzKClbbW9kZWwoKS5uYW1lXSA/PyAnc3RhbmRhcmQnfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dTcGVlZFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBjdGwuYXBwbHlTcGVlZChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJyAmJiAoXG4gICAgICAgIDxSZXdpbmRQaWNrUGFuZWxcbiAgICAgICAgICBlbnRyaWVzPXtbLi4ucmV3aW5kRW50cmllcygpXS5yZXZlcnNlKCl9XG4gICAgICAgICAgc3RhdHM9eyhpbmRleCkgPT4gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCBpbmRleCl9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAncGljayd9XG4gICAgICAgICAgb25QaWNrPXsoZW50cnkpID0+IHsgc2V0UmV3aW5kVGFyZ2V0KGVudHJ5KTsgc2V0UmV3aW5kU3RlcCgnYWN0aW9uJykgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSZXdpbmRTdGVwKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbicgJiYgcmV3aW5kVGFyZ2V0KCkgJiYgKFxuICAgICAgICA8UmV3aW5kQWN0aW9uUGFuZWxcbiAgICAgICAgICB0YXJnZXQ9e3Jld2luZFRhcmdldCgpfVxuICAgICAgICAgIG9wdGlvbnM9e3Jld2luZE9wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJ31cbiAgICAgICAgICBvblN1Ym1pdD17cGVyZm9ybVJld2luZH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+IHNldFJld2luZFN0ZXAoJ3BpY2snKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FjdGl2aXR5LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzaGVsbEFjdGlvbkhpbnQgPyBgJHtzaGVsbEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ3NoZWxsLW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NoZWxsV2luZG93Lm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYHNoZWxsLSR7cy5pZH1gXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHZpZXdlZFNoZWxsSWQoKSA9PT0gcy5pZFxuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGFnZW50RWxhcHNlZCh7IHN0YXJ0ZWRBdDogcy5zdGFydGVkQXQsIGVuZGVkQXQ6IHMuZW5kZWRBdCB9KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgc2hlbGwtJHtzLmlkfWB9IHNlbGVjdGVkPXtzZWxlY3RlZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgc2hlbGwtJHtzLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKHMuaWQpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHMuZXhpdENvZGUgPT09IDAgPyBHUkVFTiA6IFJFRCB9fT57cy5leGl0Q29kZSA9PT0gMCA/ICdcdTI1Q0YnIDogJ1x1MDBENyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IEZHIDogTVVURUQgfX0+e2BzaGVsbCBbJHtzLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57cy5kZXNjcmlwdGlvbiB8fCBzLmNvbW1hbmQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Muc3RhdHVzID09PSAncnVubmluZycgPyAnJyA6IGBleGl0ICR7cy5leGl0Q29kZX0gIGB9JHtlbGFwc2VkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gc2hlbGxTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7YWdlbnRBY3Rpb25IaW50ID8gYCR7YWdlbnRBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhZ2VudC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWdlbnRXaW5kb3cubWFwKChhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudFN0YXR1cyhhKVxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYGFnZW50LSR7YS5pZH1gXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BhZ2VudC0ke2EuaWR9YH0gc2VsZWN0ZWQ9e3ZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgYWdlbnQtJHthLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKGEuaWQpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICAgIHthLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e3N0YXR1cy5pY29ufTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogdmlld2VkQWdlbnRJZCgpID09PSBhLmlkID8gRkcgOiBNVVRFRCB9fT57YCR7YS5yb2xlIHx8ICdhZ2VudCd9IFske2EuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnthLmRlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICB7c3RhdHVzLmxhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57YCAgJHtzdGF0dXMubGFiZWx9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgJHtzdGF0dXMubGFiZWwgPyAnICAnIDogJyAgJ30gJHthZ2VudEVsYXBzZWQoYSl9ICBcdTIxOTMgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2EudXNhZ2U/LnRvdGFsVG9rZW5zIHx8IGEudXNhZ2U/LnByb21wdFRva2VucyB8fCAwfSBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRH0gaGlnaGxpZ2h0PXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSB0b2tlbnNgfSAvPlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gYWdlbnRTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgocGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtKSB7XG4gIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vbGludXgtZGljdGF0ZS5qcycsIGltcG9ydC5tZXRhLnVybCkpXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvbGludXgtZGljdGF0ZS5qcycsIGltcG9ydC5tZXRhLnVybCkpXG4gIH1cbiAgY29uc3QgYnVuZGxlZCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxuICByZXR1cm4gZXhpc3RzU3luYyhidW5kbGVkKSA/IGJ1bmRsZWQgOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL2hlbHBlci8uYnVpbGQvcmVsZWFzZS9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uKHsgb25TdGF0dXMgPSAoKSA9PiB7fSwgb25MZXZlbCA9ICgpID0+IHt9LCBvbkVycm9yID0gKCkgPT4ge30sIHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgYXJjaCA9IHByb2Nlc3MuYXJjaCwgbGF1bmNoID0gKCkgPT4gc3Bhd24ocGxhdGZvcm0gPT09ICdsaW51eCcgPyBwcm9jZXNzLmV4ZWNQYXRoIDogZGljdGF0aW9uSGVscGVyUGF0aChwbGF0Zm9ybSksIHBsYXRmb3JtID09PSAnbGludXgnID8gW2RpY3RhdGlvbkhlbHBlclBhdGgocGxhdGZvcm0pXSA6IFtdLCB7IHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSksIGxvYWRpbmdUaW1lb3V0ID0gNjAwMDAwLCByZXF1ZXN0VGltZW91dCA9IHBsYXRmb3JtID09PSAnbGludXgnID8gMTgwMDAwIDogNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2xpbnV4JyAmJiAocGxhdGZvcm0gIT09ICdkYXJ3aW4nIHx8IGFyY2ggIT09ICdhcm02NCcpKSB0aHJvdyBuZXcgRXJyb3IoJ2RpY3RhdGlvbiByZXF1aXJlcyBMaW51eCBvciBhbiBBcHBsZSBTaWxpY29uIE1hYycpXG4gICAgY29uc3QgaW5zdGFuY2UgPSBsYXVuY2goKVxuICAgIGNoaWxkID0gaW5zdGFuY2VcbiAgICByZWFkeSA9IHdhaXRGb3IoJ3JlYWR5JywgbG9hZGluZ1RpbWVvdXQpXG4gICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgaW5zdGFuY2Uuc3Rkb3V0Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDEwMjQgKiAxMDI0KSByZXR1cm4gcmVzZXQobmV3IEVycm9yKCdpbnZhbGlkIGRpY3RhdGlvbiBoZWxwZXIgb3V0cHV0JykpXG4gICAgICBsZXQgYXRcbiAgICAgIHdoaWxlICgoYXQgPSBidWZmZXIuaW5kZXhPZignXFxuJykpID49IDApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBhdClcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF0ICsgMSlcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgdHJ5IHsgbWVzc2FnZSA9IEpTT04ucGFyc2UobGluZSkgfSBjYXRjaCB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnbGV2ZWwnKSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3JlY29yZGluZycgJiYgTnVtYmVyLmlzRmluaXRlKG1lc3NhZ2UubGV2ZWwpKSBvbkxldmVsKE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG1lc3NhZ2UubGV2ZWwpKSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ3JlYWR5Jykgc2V0dGxlKCdyZWFkeScsIG1lc3NhZ2UpXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5tZXNzYWdlIHx8ICdkaWN0YXRpb24gZmFpbGVkJylcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgICAgaWYgKCFhY3RpdmUpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkICE9IG51bGwpIHNldHRsZShtZXNzYWdlLmlkLCBtZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gICAgaW5zdGFuY2Uuc3RkZXJyLm9uKCdkYXRhJywgKCkgPT4ge30pXG4gICAgY29uc3QgZmFpbGVkID0gKGVycm9yKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgIGNvbnN0IHJlY29yZGluZyA9IHN0YXR1cyA9PT0gJ3JlY29yZGluZydcbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgaWYgKCFhY3RpdmUgJiYgcmVjb3JkaW5nKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICAgIGluc3RhbmNlLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbGVkKG5ldyBFcnJvcihgZGljdGF0aW9uIGhlbHBlciB1bmF2YWlsYWJsZTogJHtlcnJvci5tZXNzYWdlfWApKSlcbiAgICBpbnN0YW5jZS5zdGRpbi5vbignZXJyb3InLCBmYWlsZWQpXG4gICAgaW5zdGFuY2Uub24oJ2V4aXQnLCAoKSA9PiBmYWlsZWQobmV3IEVycm9yKCdkaWN0YXRpb24gaGVscGVyIGV4aXRlZCcpKSlcbiAgICByZXR1cm4gcmVhZHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3Qob3ApIHtcbiAgICBjb25zdCBpZCA9ICsrc2VxdWVuY2VcbiAgICBjb25zdCByZXN1bHQgPSB3YWl0Rm9yKGlkLCByZXF1ZXN0VGltZW91dClcbiAgICB0cnkgeyBjaGlsZC5zdGRpbi53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGlkLCBvcCB9KX1cXG5gKSB9IGNhdGNoIChlcnJvcikgeyByZXNldChlcnJvcikgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZWxvYWQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSByZXR1cm5cbiAgICB0cnkgeyBhd2FpdCBsb2FkKCkgfSBjYXRjaCB7fVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkIHx8IHN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygnbG9hZGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHNldFN0YXR1cygnc3RhcnRpbmcnKVxuICAgICAgYXdhaXQgcmVxdWVzdCgnc3RhcnQnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ3JlY29yZGluZycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygndHJhbnNjcmliaW5nJylcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdCgnc3RvcCcpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVybiBudWxsXG4gICAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgICAgcmV0dXJuIGNsZWFuRGljdGF0aW9uKHJlc3VsdC50ZXh0IHx8ICcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHtcbiAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm5cbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIHJlc2V0KClcbiAgICBzZXRTdGF0dXMoJ2NhbmNlbGxpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZXF1ZXN0KCdjYW5jZWwnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHJlc2V0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gICAgKytnZW5lcmF0aW9uXG4gICAgcmVzZXQoKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJlbG9hZCwgc3RhcnQsIHN0b3AsIGNhbmNlbCwgZGlzcG9zZSwgZ2V0IHN0YXR1cygpIHsgcmV0dXJuIHN0YXR1cyB9IH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB7IG1rZHRlbXAsIHdyaXRlRmlsZSwgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5jb25zdCBleGVjdXRlID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKVxuY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgU2V0KClcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyZWN0b3JpZXMpIHJtU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufSlcblxuY29uc3QgbWFjU2NyaXB0ID0gYE9iakMuaW1wb3J0KCdBcHBLaXQnKTsgT2JqQy5pbXBvcnQoJ0ZvdW5kYXRpb24nKTtcbmNvbnN0IHBhc3RlYm9hcmQgPSAkLk5TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZDtcbmNvbnN0IGZpbGVzID0gcGFzdGVib2FyZC5wcm9wZXJ0eUxpc3RGb3JUeXBlKCdOU0ZpbGVuYW1lc1Bib2FyZFR5cGUnKTtcbmxldCBpbWFnZSA9IG51bGw7XG5pZiAoIWZpbGVzLmlzTmlsKCkgJiYgZmlsZXMuY291bnQgPiAwKSB7XG4gIGNvbnN0IHBhdGggPSBPYmpDLnVud3JhcChmaWxlcy5vYmplY3RBdEluZGV4KDApKTtcbiAgaWYgKC9cXFxcLihwbmd8anBlP2d8Z2lmfHdlYnApJC9pLnRlc3QocGF0aCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoQ29udGVudHNPZkZpbGUocGF0aCk7XG59XG5pZiAoIWltYWdlIHx8IGltYWdlLmlzTmlsKCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTtcbmxldCBkYXRhID0gbnVsbDtcbmlmICghaW1hZ2UuaXNOaWwoKSkge1xuICBjb25zdCBiaXRtYXAgPSAkLk5TQml0bWFwSW1hZ2VSZXAuaW1hZ2VSZXBXaXRoRGF0YShpbWFnZS5USUZGUmVwcmVzZW50YXRpb24pO1xuICBkYXRhID0gYml0bWFwLnJlcHJlc2VudGF0aW9uVXNpbmdUeXBlUHJvcGVydGllcygkLk5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORywgJCh7fSkpO1xufVxuZGF0YSA/IE9iakMudW53cmFwKGRhdGEuYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zKDApKSA6ICcnYFxuXG5jb25zdCB3aW5kb3dzU2NyaXB0ID0gYEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLldpbmRvd3MuRm9ybXM7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLkRyYXdpbmc7XG5pZiAoW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkNvbnRhaW5zSW1hZ2UoKSkge1xuICAkaW1hZ2UgPSBbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6R2V0SW1hZ2UoKTtcbiAgJHN0cmVhbSA9IE5ldy1PYmplY3QgU3lzdGVtLklPLk1lbW9yeVN0cmVhbTtcbiAgdHJ5IHsgJGltYWdlLlNhdmUoJHN0cmVhbSwgW1N5c3RlbS5EcmF3aW5nLkltYWdpbmcuSW1hZ2VGb3JtYXRdOjpQbmcpOyBbQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRzdHJlYW0uVG9BcnJheSgpKSB9XG4gIGZpbmFsbHkgeyAkc3RyZWFtLkRpc3Bvc2UoKTsgJGltYWdlLkRpc3Bvc2UoKSB9XG59YFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENsaXBib2FyZEltYWdlKHsgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBlbnYgPSBwcm9jZXNzLmVudiwgcnVuID0gZXhlY3V0ZSB9ID0ge30pIHtcbiAgaWYgKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX1RUWSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bmF2YWlsYWJsZSBvdmVyIFNTSCcpXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGVuY29kaW5nOiAnYnVmZmVyJywgdGltZW91dDogMTAwMDAsIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCB9XG4gIGxldCBkYXRhXG4gIHRyeSB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bignb3Nhc2NyaXB0JywgWyctbCcsICdKYXZhU2NyaXB0JywgJy1lJywgbWFjU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ3Bvd2Vyc2hlbGwuZXhlJywgWyctTm9Qcm9maWxlJywgJy1Ob25JbnRlcmFjdGl2ZScsICctU1RBJywgJy1Db21tYW5kJywgd2luZG93c1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICBjb25zdCB3YXlsYW5kID0gQm9vbGVhbihlbnYuV0FZTEFORF9ESVNQTEFZKVxuICAgICAgY29uc3QgY29tbWFuZCA9IHdheWxhbmQgPyAnd2wtcGFzdGUnIDogJ3hjbGlwJ1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHR5cGVzIH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS1saXN0LXR5cGVzJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ1RBUkdFVFMnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGlmICghdHlwZXMudG9TdHJpbmcoKS5zcGxpdCgvXFxzKy8pLmluY2x1ZGVzKCdpbWFnZS9wbmcnKSkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS10eXBlJywgJ2ltYWdlL3BuZycsICctLW5vLW5ld2xpbmUnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnaW1hZ2UvcG5nJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0nKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIHJlYWRlciB1bmF2YWlsYWJsZTogaW5zdGFsbCAnICsgKGVudi5XQVlMQU5EX0RJU1BMQVkgPyAnd2wtY2xpcGJvYXJkJyA6IHBsYXRmb3JtID09PSAnbGludXgnID8gJ3hjbGlwJyA6ICd0aGUgc3lzdGVtIGNsaXBib2FyZCB0b29scycpKVxuICAgIHRocm93IGVycm9yXG4gIH1cbiAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgaWYgKCFkYXRhLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgZGlkIG5vdCByZXR1cm4gYSBQTkcgaW1hZ2UnKVxuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNsaXBib2FyZC0nKSlcbiAgZGlyZWN0b3JpZXMuYWRkKGRpcilcbiAgY29uc3QgZGlzcG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIGRpcmVjdG9yaWVzLmRlbGV0ZShkaXIpXG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4oZGlyLCAnY2xpcGJvYXJkLnBuZycpXG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGRhdGEsIHsgbW9kZTogMG82MDAgfSlcbiAgICByZXR1cm4geyBwYXRoLCBkaXNwb3NlIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBkaXNwb3NlKClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsaXBib2FyZElucHV0KHsgcmVhZEltYWdlLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yIH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcGFzdGVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcmVhZEltYWdlKClcbiAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgb25FcnJvcignTm8gaW1hZ2Ugb24gdGhlIGNsaXBib2FyZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ0NsaXBib2FyZCBpbWFnZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF3YWl0IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYENsaXBib2FyZCBwYXN0ZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb24sIGdldElucHV0LCBzZXRJbnB1dCB9KSB7XG4gIGxldCBkcmFmdCA9IG51bGxcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG5cbiAgZnVuY3Rpb24gc3RhcnQoeyB2YWx1ZSwgY3Vyc29yIH0pIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBkcmFmdCA9IHsgdmFsdWUsIGN1cnNvciB9XG4gICAgKytnZW5lcmF0aW9uXG4gICAgdm9pZCBkaWN0YXRpb24uc3RhcnQoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBjb25zdCB0YXJnZXQgPSBkcmFmdFxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkaWN0YXRpb24uc3RvcCgpXG4gICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uIHx8ICF0YXJnZXQgfHwgdGV4dCA9PSBudWxsIHx8IGdldElucHV0KCkgIT09IHRhcmdldC52YWx1ZSkgcmV0dXJuXG4gICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgbGVhZCA9IHRleHQgJiYgYmVmb3JlICYmICEvXFxzJC8udGVzdChiZWZvcmUpICYmICEvXlxccy8udGVzdCh0ZXh0KSA/ICcgJyA6ICcnXG4gICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCB0cmFpbCA9IHRleHQgJiYgYWZ0ZXIgJiYgIS9cXHMkLy50ZXN0KHRleHQpICYmICEvXltcXHMuLDs6IT9dLy50ZXN0KGFmdGVyKSA/ICcgJyA6ICcnXG4gICAgc2V0SW5wdXQoYmVmb3JlICsgbGVhZCArIHRleHQgKyB0cmFpbCArIGFmdGVyKVxuICAgIGRyYWZ0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICsrZ2VuZXJhdGlvblxuICAgIGRyYWZ0ID0gbnVsbFxuICAgIHZvaWQgZGljdGF0aW9uLmNhbmNlbCgpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyB8fCAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdjJykpIGNhbmNlbCgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJyAmJiAhZXZlbnQuc2hpZnQgJiYgIWV2ZW50Lm1ldGEgJiYgZGljdGF0aW9uLnN0YXR1cyA9PT0gJ3JlY29yZGluZycpIHZvaWQgc3RvcCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7IHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGhhbmRsZSB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7IGNhcHR1cmVSZWdpb24sIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IsIG9uU3RhdHVzID0gKCkgPT4ge30gfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBjYXB0dXJlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgb25TdGF0dXMoJ2NhcHR1cmluZycpXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNhcHR1cmVSZWdpb24oKVxuICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignU2NyZWVuIGNhcHR1cmUgbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBTY3JlZW4gY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICAgIG9uU3RhdHVzKCdpZGxlJylcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IG1rZHRlbXAsIHVubGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5sZXQgY2FwdHVyZURpciA9IG51bGxcblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ2FwdHVyZURpcigpIHtcbiAgY2FwdHVyZURpciA/Pz0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jYXB0dXJlLScpKVxuICByZXR1cm4gY2FwdHVyZURpclxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUNvbW1hbmRzKHBsYXRmb3JtLCBmaWxlLCBlbnYgPSBwcm9jZXNzLmVudikge1xuICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSByZXR1cm4gW1snc2NyZWVuY2FwdHVyZScsIFsnLWknLCAnLXgnLCBmaWxlXV1dXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgIGlmIChlbnYuWERHX1NFU1NJT05fVFlQRSA9PT0gJ3dheWxhbmQnKSB7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IFtbJ2dub21lLXNjcmVlbnNob3QnLCBbJy1hJywgJy1mJywgZmlsZV1dLCBbJ3NwZWN0YWNsZScsIFsnLXInLCAnLWInLCAnLW4nLCAnLW8nLCBmaWxlXV1dXG4gICAgICByZXR1cm4gZW52LlNXQVlTT0NLIHx8IGVudi5YREdfQ1VSUkVOVF9ERVNLVE9QPy5zcGxpdCgnOicpLmluY2x1ZGVzKCdzd2F5JylcbiAgICAgICAgPyBbWydzbHVycCcsIFtdXSwgLi4uZmFsbGJhY2tdXG4gICAgICAgIDogZmFsbGJhY2tcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIFsneGZjZTQtc2NyZWVuc2hvb3RlcicsIFsnLS1yZWdpb24nLCAnLS1zYXZlJywgZmlsZV1dLFxuICAgICAgWydnbm9tZS1zY3JlZW5zaG90JywgWyctYScsICctZicsIGZpbGVdXSxcbiAgICAgIFsnc2Nyb3QnLCBbJy0tc2VsZWN0JywgZmlsZV1dLFxuICAgIF1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3NjcmVlbiBjYXB0dXJlIHJlcXVpcmVzIG1hY09TIG9yIExpbnV4Jylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oeyBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGVudiA9IHByb2Nlc3MuZW52LCBydW4gPSBleGVjRmlsZSwgZXhpc3RzID0gZXhpc3RzU3luYyB9ID0ge30pIHtcbiAgY29uc3QgZmlsZSA9IGpvaW4oYXdhaXQgZW5zdXJlQ2FwdHVyZURpcigpLCBgY2FwdHVyZS0ke0RhdGUubm93KCl9LnBuZ2ApXG4gIGNvbnN0IGNvbW1hbmRzID0gY2FwdHVyZUNvbW1hbmRzKHBsYXRmb3JtLCBmaWxlLCBlbnYpXG4gIGZvciAoY29uc3QgW2NvbW1hbmQsIGFyZ3NdIG9mIGNvbW1hbmRzKSB7XG4gICAgbGV0IGVycm9yXG4gICAgaWYgKGNvbW1hbmQgPT09ICdzbHVycCcpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHJ1bihjb21tYW5kLCBhcmdzLCAoZXJyb3IsIHN0ZG91dCkgPT4gcmVzb2x2ZSh7IGVycm9yLCBzdGRvdXQgfSkpXG4gICAgICAgIC8vIHNsdXJwIGNvbnN1bWVzIG9wdGlvbmFsIHJlY3RhbmdsZXMgZnJvbSBzdGRpbiBiZWZvcmUgc2hvd2luZyBpdHMgVUkuXG4gICAgICAgIC8vIGV4ZWNGaWxlIGxlYXZlcyB0aGF0IHBpcGUgb3Blbjsgc2lnbmFsIEVPRiBzbyBzZWxlY3Rpb24gY2FuIHN0YXJ0LlxuICAgICAgICBjaGlsZD8uc3RkaW4/LmVuZCgpXG4gICAgICB9KVxuICAgICAgZXJyb3IgPSBzZWxlY3Rpb24uZXJyb3JcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBzZWxlY3Rpb24uc3Rkb3V0Py50cmltKClcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkgcmV0dXJuIG51bGxcbiAgICAgICAgZXJyb3IgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBydW4oJ2dyaW0nLCBbJy1nJywgZ2VvbWV0cnksIGZpbGVdLCBlcnJvciA9PiByZXNvbHZlKGVycm9yKSlcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGVycm9yPy5jb2RlID09PSAnRU5PRU5UJykgdGhyb3cgbmV3IEVycm9yKCdJbnN0YWxsIGdyaW0gYW5kIHNsdXJwIGZvciBTd2F5IHJlZ2lvbiBjYXB0dXJlOiBzdWRvIGFwdCBpbnN0YWxsIGdyaW0gc2x1cnAuJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgcnVuKGNvbW1hbmQsIGFyZ3MsIGVycm9yID0+IHJlc29sdmUoZXJyb3IpKVxuICAgICAgfSlcbiAgICB9XG4gICAgLy8gVHJ5IGFub3RoZXIgYmFja2VuZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbWlzc2luZywgbm90IG9uIGNhbmNlbC5cbiAgICBpZiAoZXJyb3I/LmNvZGUgPT09ICdFTk9FTlQnKSBjb250aW51ZVxuICAgIGlmICghZXhpc3RzKGZpbGUpKSB7XG4gICAgICBpZiAoZXJyb3IgJiYgcGxhdGZvcm0gIT09ICdkYXJ3aW4nKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbCA9IGVycm9yLnN0ZGVyciB8fCBlcnJvci5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcilcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09IDEpIHRocm93IG5ldyBFcnJvcihgc2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2RldGFpbH1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBhd2FpdCB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZXR1cm4geyBwYXRoOiBmaWxlLCBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoZW52LlhER19TRVNTSU9OX1RZUEUgPT09ICd3YXlsYW5kJ1xuICAgID8gJ0luc3RhbGwgZ25vbWUtc2NyZWVuc2hvdCBvciBzcGVjdGFjbGUgZm9yIExpbnV4IHJlZ2lvbiBjYXB0dXJlLiBTdXBwb3J0IGRlcGVuZHMgb24geW91ciBXYXlsYW5kIGNvbXBvc2l0b3IuJ1xuICAgIDogJ0luc3RhbGwgYSByZWdpb24gY2FwdHVyZSB0b29sOiBzdWRvIGFwdCBpbnN0YWxsIHhmY2U0LXNjcmVlbnNob290ZXIgKG9yIGdub21lLXNjcmVlbnNob3QgLyBzY3JvdCkuJylcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zZXJGaWxlcygpIHtcbiAgbGV0IHRleHQgPSAnJ1xuICBsZXQgcmVmZXJlbmNlcyA9IFtdXG5cbiAgZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBhdHRhY2htZW50cykge1xuICAgIGxldCBzdGFydCA9IDBcbiAgICB3aGlsZSAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCAmJiBzdGFydCA8IHZhbHVlLmxlbmd0aCAmJiB0ZXh0W3N0YXJ0XSA9PT0gdmFsdWVbc3RhcnRdKSBzdGFydCsrXG4gICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoXG4gICAgbGV0IG5leHRFbmQgPSB2YWx1ZS5sZW5ndGhcbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbmV4dEVuZCA+IHN0YXJ0ICYmIHRleHRbZW5kIC0gMV0gPT09IHZhbHVlW25leHRFbmQgLSAxXSkge1xuICAgICAgZW5kLS1cbiAgICAgIG5leHRFbmQtLVxuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IG5leHRFbmQgLSBlbmRcbiAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UuZW5kIDw9IHN0YXJ0KSByZXR1cm4gW3JlZmVyZW5jZV1cbiAgICAgIGlmIChyZWZlcmVuY2Uuc3RhcnQgPj0gZW5kKSByZXR1cm4gW3sgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgZGVsdGEsIGVuZDogcmVmZXJlbmNlLmVuZCArIGRlbHRhIH1dXG4gICAgICByZXR1cm4gW11cbiAgICB9KVxuICAgIHRleHQgPSB2YWx1ZVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4udGV4dC5tYXRjaEFsbCgvXFxbRmlsZSAjXFxkK1xcXS9nKV0ucmV2ZXJzZSgpXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0YWNobWVudHMuZ2V0KG1hdGNoWzBdKVxuICAgICAgaWYgKGF0dGFjaG1lbnQ/LmtpbmQgIT09ICdmaWxlJykgY29udGludWVcbiAgICAgIGNvbnN0IHBhdGggPSBhdHRhY2htZW50LnBhdGhcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBhdGgubGVuZ3RoIC0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnN0YXJ0ID49IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgID8geyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBvZmZzZXQsIGVuZDogcmVmZXJlbmNlLmVuZCArIG9mZnNldCB9XG4gICAgICAgIDogcmVmZXJlbmNlKVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgcGF0aCArIHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBzdGFydDogbWF0Y2guaW5kZXgsIGVuZDogbWF0Y2guaW5kZXggKyBwYXRoLmxlbmd0aCwgcGxhY2Vob2xkZXI6IG1hdGNoWzBdIH0pXG4gICAgfVxuICAgIHJlZmVyZW5jZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgbGV0IHZhbHVlID0gdGV4dFxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIFsuLi5yZWZlcmVuY2VzXS5yZXZlcnNlKCkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcmVmZXJlbmNlLnN0YXJ0KSArIHJlZmVyZW5jZS5wbGFjZWhvbGRlciArIHZhbHVlLnNsaWNlKHJlZmVyZW5jZS5lbmQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHsgdXBkYXRlLCBjb250ZW50IH1cbn1cbiIsICJjb25zdCBiYXJzID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCdcbmNvbnN0IHdpZHRoID0gMTZcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZExldmVsKGxldmVscywgbGV2ZWwpIHtcbiAgcmV0dXJuIFsuLi5sZXZlbHMuc2xpY2UoMSAtIHdpZHRoKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbGV2ZWwpKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkluZGljYXRvcihzdGF0dXMsIGxldmVscykge1xuICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVybiAnJ1xuICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIGAgJHtzdGF0dXN9IGBcbiAgY29uc3Qgc2FtcGxlcyA9IFsuLi5BcnJheShNYXRoLm1heCgwLCB3aWR0aCAtIGxldmVscy5sZW5ndGgpKS5maWxsKDApLCAuLi5sZXZlbHMuc2xpY2UoLXdpZHRoKV1cbiAgcmV0dXJuIGAgJHtzYW1wbGVzLm1hcCgobGV2ZWwpID0+IGJhcnNbTWF0aC5yb3VuZChsZXZlbCAqIChiYXJzLmxlbmd0aCAtIDEpKV0pLmpvaW4oJycpfSByZWNvcmRpbmcgYFxufVxuIiwgImltcG9ydCB7IGNvZGVUb0FOU0kgfSBmcm9tICdAc2hpa2lqcy9jbGknXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBzaGlraVRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgTEFOR1MgPSB7XG4gIGpzOiAnanMnLCBtanM6ICdqcycsIGNqczogJ2pzJywganN4OiAnanN4JywgdHM6ICd0cycsIHRzeDogJ3RzeCcsXG4gIGpzb246ICdqc29uJywganNvbmw6ICdqc29uJywgbWQ6ICdtZCcsIHB5OiAncHl0aG9uJywgcmI6ICdydWJ5JywgZ286ICdnbycsXG4gIHJzOiAncnVzdCcsIGM6ICdjJywgaDogJ2MnLCBjcHA6ICdjcHAnLCBqYXZhOiAnamF2YScsIGNzczogJ2NzcycsXG4gIGh0bWw6ICdodG1sJywgdnVlOiAndnVlJywgc2g6ICdiYXNoJywgYmFzaDogJ2Jhc2gnLCB6c2g6ICdiYXNoJyxcbiAgeW1sOiAneWFtbCcsIHlhbWw6ICd5YW1sJywgdG9tbDogJ3RvbWwnLCBzcWw6ICdzcWwnLCBzdmVsdGU6ICdzdmVsdGUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0ZvclBhdGgocGF0aCkge1xuICBjb25zdCBleHQgPSBTdHJpbmcocGF0aCkuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBMQU5HU1tleHRdIHx8ICd0eHQnXG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBwZW5kaW5nID0gbmV3IFNldCgpXG5jb25zdCBmYWlsZWQgPSBuZXcgU2V0KClcbmNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0VmVyc2lvbiA9IHZlcnNpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlLCBsYW5nKSB7XG4gIGNvbnN0IHNhZmVMYW5nID0gbGFuZyAmJiAhZmFpbGVkLmhhcyhsYW5nKSA/IGxhbmcgOiAndHh0J1xuICBjb25zdCB0aGVtZSA9IHNoaWtpVGhlbWUoKVxuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX1cXG4ke3NhZmVMYW5nfVxcbiR7bGluZX1gXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHJldHVybiBjYWNoZS5nZXQoa2V5KVxuICAgICAgd2FybShsaW5lLCBzYWZlTGFuZywgdGhlbWUsIGtleSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfSlcbiAgICAuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gd2FybShsaW5lLCBsYW5nLCB0aGVtZSwga2V5KSB7XG4gIGlmIChwZW5kaW5nLmhhcyhrZXkpKSByZXR1cm5cbiAgcGVuZGluZy5hZGQoa2V5KVxuICBjb2RlVG9BTlNJKGxpbmUsIGxhbmcsIHRoZW1lKVxuICAgIC50aGVuKChhbnNpKSA9PiBjYWNoZS5zZXQoa2V5LCBhbnNpLnJlcGxhY2UoL1xcbiQvLCAnJykpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBmYWlsZWQuYWRkKGxhbmcpXG4gICAgICBjYWNoZS5zZXQoa2V5LCBsaW5lKVxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcGVuZGluZy5kZWxldGUoa2V5KVxuICAgICAgc2V0VmVyc2lvbigodikgPT4gdiArIDEpXG4gICAgfSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYWN0aXZpdHlSb3dzKHJvd3MpIHtcbiAgY29uc3QgYWN0aXZlID0gKHJvdykgPT4gcm93LnN0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8IHJvdy5zdGF0dXMgPT09ICdxdWV1ZWQnXG4gIHJldHVybiBbLi4ucm93c10uc29ydCgoYSwgYikgPT4gTnVtYmVyKGFjdGl2ZShiKSkgLSBOdW1iZXIoYWN0aXZlKGEpKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5U3RyaXBTaXplcyhoZWlnaHQsIGxlbmd0aHMsIG1hcmdpbiA9IDEpIHtcbiAgY29uc3QgZ3JvdXBzID0gbGVuZ3Rocy5maWx0ZXIoQm9vbGVhbikubGVuZ3RoXG4gIGlmICghZ3JvdXBzKSByZXR1cm4gbGVuZ3Rocy5tYXAoKCkgPT4gMClcbiAgY29uc3QgYnVkZ2V0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiAwLjIpXG4gIGNvbnN0IHNpemVzID0gbGVuZ3Rocy5tYXAoKGxlbmd0aCkgPT4gbGVuZ3RoID8gMSA6IDApXG4gIGNvbnN0IHVzZWQgPSAoKSA9PiBtYXJnaW4gKyAxICsgZ3JvdXBzICsgc2l6ZXMucmVkdWNlKChzdW0sIHNpemUsIGkpID0+IHN1bSArIHNpemUgKyBOdW1iZXIoc2l6ZSA8IGxlbmd0aHNbaV0pLCAwKVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzaXplcy5tYXAoKHNpemUsIGkpID0+IGkpXG4gICAgICAuZmlsdGVyKChpKSA9PiBzaXplc1tpXSA8IGxlbmd0aHNbaV0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gc2l6ZXNbYV0gLSBzaXplc1tiXSB8fCBhIC0gYilcbiAgICBjb25zdCBuZXh0ID0gY2FuZGlkYXRlcy5maW5kKChpKSA9PiB1c2VkKCkgKyBOdW1iZXIoc2l6ZXNbaV0gKyAxIDwgbGVuZ3Roc1tpXSkgPD0gYnVkZ2V0KVxuICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiBzaXplc1xuICAgIHNpemVzW25leHRdKytcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBXaW5kb3dTdGFydChjdXJyZW50LCB0YXJnZXQsIGxlbmd0aCwgc2l6ZSkge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCgwLCBsZW5ndGggLSBzaXplKVxuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnQsIG1heCkpXG4gIGNvbnN0IHNjcm9sbG9mZiA9IHNpemUgPiAyID8gMSA6IDBcbiAgaWYgKHRhcmdldCA8IDApIHJldHVybiBzdGFydFxuICBpZiAodGFyZ2V0IDwgc3RhcnQgKyBzY3JvbGxvZmYpIHJldHVybiBNYXRoLm1heCgwLCB0YXJnZXQgLSBzY3JvbGxvZmYpXG4gIGlmICh0YXJnZXQgPj0gc3RhcnQgKyBzaXplIC0gc2Nyb2xsb2ZmKSByZXR1cm4gTWF0aC5taW4obWF4LCB0YXJnZXQgLSBzaXplICsgc2Nyb2xsb2ZmICsgMSlcbiAgcmV0dXJuIHN0YXJ0XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTY3JvbGxCb3gsIFNwaW5uZXIsIHVzZUFuaW1hdGVkLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTW91c2UgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiwgUEVFUiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBoaWdobGlnaHQsIGxhbmdGb3JQYXRoIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuXG5leHBvcnQgeyBkZWZhdWx0VGl0bGUgYXMgdWlUaXRsZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvcmVjb3JkZXIuanMnXG5cbmZ1bmN0aW9uIFByb3NlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8dGV4dD57c2hvd259PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvZGVTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IFsuLi5saW5lXS5sZW5ndGgpKSArIDJcbiAgcmV0dXJuIChcbiAgICA8SG9yaXpvbnRhbFNjcm9sbEJveCBjb250ZW50V2lkdGg9e2NvbnRlbnRXaWR0aH0gc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwga2V5KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrZXl9IHN0eWxlPXt7IG92ZXJmbG93OiAnbm93cmFwJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvSG9yaXpvbnRhbFNjcm9sbEJveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUcmFuc2NyaXB0Q29kZUJsb2NrKHByb3BzKSB7XG4gIGNvbnN0IGxhbmd1YWdlID0gcHJvcHMubGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgQ29tcG9uZW50ID0gWydtZCcsICdtYXJrZG93bicsICd0ZXh0JywgJ3R4dCcsICdwbGFpbnRleHQnXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBQcm9zZVNuaXBwZXQgOiBDb2RlU25pcHBldFxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydCkge1xuICBpZiAoIWRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiB7IGJlZm9yZTogU3RyaW5nKHJldmVydD8uYmVmb3JlIHx8ICcnKSwgYWZ0ZXI6IFN0cmluZyhyZXZlcnQ/LmFmdGVyIHx8ICcnKSB9XG4gIGNvbnN0IGJlZm9yZSA9IFtdXG4gIGNvbnN0IGFmdGVyID0gW11cbiAgZGlmZi5odW5rcy5mb3JFYWNoKChodW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgYmVmb3JlLnB1c2goJ1x1MjJFRicpXG4gICAgICBhZnRlci5wdXNoKCdcdTIyRUYnKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ2FkZCcpIGJlZm9yZS5wdXNoKGxpbmUudGV4dClcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdyZW1vdmUnKSBhZnRlci5wdXNoKGxpbmUudGV4dClcbiAgICB9XG4gIH0pXG4gIHJldHVybiB7IGJlZm9yZTogYmVmb3JlLmpvaW4oJ1xcbicpLCBhZnRlcjogYWZ0ZXIuam9pbignXFxuJykgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCkge1xuICBpZiAoZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIGRpZmYuaHVua3MucmVkdWNlKChzdW0sIGgpID0+IHN1bSArIGgubGluZXMubGVuZ3RoLCAwKVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICByZXR1cm4gTWF0aC5tYXgocHJldmlldy5hZnRlci5zcGxpdCgnXFxuJykubGVuZ3RoLCBwcmV2aWV3LmJlZm9yZS5zcGxpdCgnXFxuJykubGVuZ3RoLCAyKVxufVxuXG5mdW5jdGlvbiBmbXREdXJhdGlvbihtcykge1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2BcbiAgY29uc3Qgc2VjcyA9IE1hdGgucm91bmQobXMgLyAxMDAwKVxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gZm10UnVubmluZyhtcykge1xuICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gIHJldHVybiBzZWNzIDwgNjAgPyBgJHtzZWNzfXNgIDogYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBjb25zdCByZ2IgPSAoY29sb3IpID0+IGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3XG4gICAgPyBbMSwgMywgNV0ubWFwKChpKSA9PiBwYXJzZUludChjb2xvci5zbGljZShpLCBpICsgMiksIDE2KSlcbiAgICA6IFsxMjcsIDEyNywgMTI3XVxuICBjb25zdCBhID0gcmdiKGZyb20pXG4gIGNvbnN0IGIgPSByZ2IodG8pXG4gIHJldHVybiBgIyR7YS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTElNSVQgPSA1XG5jb25zdCBCQVNIX09VVFBVVF9MSU5FUyA9IDEwXG5jb25zdCBUT09MX05BTUVfRkxBU0hfTVMgPSA5MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyA9IDUwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX01TID0gNzAwXG5cbmZ1bmN0aW9uIGRlbGF5ZWRMaW5lYXIodCkge1xuICBjb25zdCBkZWxheSA9IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyAvIChERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMpXG4gIHJldHVybiB0IDw9IGRlbGF5ID8gMCA6ICh0IC0gZGVsYXkpIC8gKDEgLSBkZWxheSlcbn1cblxuZnVuY3Rpb24gRGVzY3JpcHRpb25SZXZlYWwoeyBjaGlsZHJlbiwgcnVubmluZyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKHJ1bm5pbmcgPyAwIDogMSwgZWFzZShERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMsIGRlbGF5ZWRMaW5lYXIpKVxuICBpZiAoIXJ1bm5pbmcpIHJldmVhbC5zZXQoMSlcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihhY2NlbnQoKSwgRkcsIHJldmVhbCgpKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCB9fT57Y2hpbGRyZW59PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5lcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW11cbiAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJylcbiAgaWYgKGxpbmVzLmF0KC0xKSA9PT0gJycpIGxpbmVzLnBvcCgpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBCYXNoT3V0cHV0KHsgdmFsdWUsIGxpbmVTdGFydCwgbGluZUNvdW50IH0pIHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXRMaW5lcyh2YWx1ZSlcbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3duID0gbGluZXMuc2xpY2UoLUJBU0hfT1VUUFVUX0xJTkVTKVxuICBjb25zdCBmaXJzdCA9IGxpbmVTdGFydCB8fCAobGluZUNvdW50ID8gbGluZUNvdW50IC0gc2hvd24ubGVuZ3RoICsgMSA6IGxpbmVzLmxlbmd0aCAtIHNob3duLmxlbmd0aCArIDEpXG4gIGNvbnN0IGxhc3QgPSBsaW5lQ291bnQgfHwgZmlyc3QgKyBzaG93bi5sZW5ndGggLSAxXG4gIGNvbnN0IGd1dHRlcldpZHRoID0gU3RyaW5nKGxhc3QpLmxlbmd0aFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtzaG93bi5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgPGJveCBrZXk9e2ZpcnN0ICsgaX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtTdHJpbmcoZmlyc3QgKyBpKS5wYWRTdGFydChndXR0ZXJXaWR0aCl9IGB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbXBhY3RUb29sU2lnbih7IHRvb2wgfSkge1xuICBpZiAodG9vbC5uYW1lICE9PSAnYmFzaCcpIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG4gIGlmICh0b29sLmJhY2tncm91bmQpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eydcdTIxQUEgJ308L3RleHQ+XG4gIGlmICh0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aDogMiB9fT48U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+PC9ib3g+XG4gIGlmICh0b29sLmV4aXRDb2RlID09PSAwKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PnsnXHUyNzEzICd9PC90ZXh0PlxuICBpZiAodG9vbC5leGl0Q29kZSAhPSBudWxsKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57J1x1MDBENyAnfTwvdGV4dD5cbiAgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gVG9vbEdyb3VwKHsgaXRlbSwgdmVyYm9zZSB9KSB7XG4gIGNvbnN0IGxhdGVzdENhbGxJZCA9IGl0ZW0udG9vbHMuYXQoLTEpPy5jYWxsSWRcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoVE9PTF9OQU1FX0ZMQVNIX01TLCBsaW5lYXIpKVxuICBpZiAobGF0ZXN0Q2FsbElkICE9PSBnbG93Ll9jYWxsSWQpIHtcbiAgICBnbG93Ll9jYWxsSWQgPSBsYXRlc3RDYWxsSWRcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHtcbiAgICAgIGdsb3cuc25hcCgxKVxuICAgICAgZ2xvdy5zZXQoMClcbiAgICB9XG4gIH1cblxuICBpZiAodmVyYm9zZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7KGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSwgaSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgICAgICAgID8gPE1lc3NhZ2Uga2V5PXtpfSBpdGVtPXtlbnRyeX0gdmVyYm9zZSAvPlxuICAgICAgICAgIDogPFRvb2xDYXJkIGtleT17aX0gey4uLmVudHJ5fSB2ZXJib3NlIC8+KX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHRvb2wgb2YgaXRlbS50b29scykgY291bnRzLnNldCh0b29sLm5hbWUsIChjb3VudHMuZ2V0KHRvb2wubmFtZSkgfHwgMCkgKyAxKVxuICBjb25zdCBlbnRyaWVzID0gWy4uLmNvdW50c11cbiAgY29uc3QgdG90YWxNcyA9IGl0ZW0udG9vbHMucmVkdWNlKChzdW0sIHRvb2wpID0+IHN1bSArICh0b29sLmR1cmF0aW9uTXMgfHwgMCksIDApXG4gIGNvbnN0IGxhdGVzdE5hbWUgPSBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZVxuICBjb25zdCBhY3Rpdml0eSA9IChpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICA/IHsgLi4uZW50cnksIG5hbWU6ICd0aG91Z2h0cycsIGRlc2NyaXB0aW9uOiBlbnRyeS50ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksIHRob3VnaHQ6IHRydWUgfVxuICAgIDogZW50cnkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmRlc2NyaXB0aW9uKVxuICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5zbGljZSgtVE9PTF9ERVNDUklQVElPTl9MSU1JVClcbiAgY29uc3QgaGlkZGVuRGVzY3JpcHRpb25zID0gYWN0aXZpdHkubGVuZ3RoIC0gZGVzY3JpcHRpb25zLmxlbmd0aFxuICBjb25zdCB0b29sTmFtZVdpZHRoID0gTWF0aC5tYXgoMCwgLi4uZGVzY3JpcHRpb25zLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUubGVuZ3RoKSlcbiAgY29uc3QgdmlzaWJsZUJhc2ggPSBpdGVtLmFjdGl2ZSAmJiBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZSA9PT0gJ2Jhc2gnID8gaXRlbS50b29scy5hdCgtMSkgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICB7aXRlbS5hY3RpdmUgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjcxMzwvdGV4dD59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhXcmFwOiAnd3JhcCcsIGZsZXhHcm93OiAxLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PiBDYWxsZWQgPC90ZXh0PlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW25hbWUsIGNvdW50XSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtuYW1lfSBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgJiYgbmFtZSA9PT0gbGF0ZXN0TmFtZSA/IG1peENvbG9yKEZHLCBhY2NlbnQoKSwgZ2xvdygpKSA6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAge2Ake2kgPyAnLCAnIDogJyd9JHtuYW1lfSR7Y291bnQgPT09IDEgPyAnJyA6IGAgJHtjb3VudH0gdGltZXNgfWB9XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dG90YWxNcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntmbXREdXJhdGlvbih0b3RhbE1zKX08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAge2hpZGRlbkRlc2NyaXB0aW9ucyA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8dGV4dD57JyAnLnJlcGVhdCh0b29sTmFtZVdpZHRoICsgNCl9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgLi4uJHtoaWRkZW5EZXNjcmlwdGlvbnN9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rlc2NyaXB0aW9ucy5tYXAoKHRvb2wsIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17dG9vbC5jYWxsSWQgfHwgYHRob3VnaHQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodCA/IDx0ZXh0PnsnICAnfTwvdGV4dD4gOiA8Q29tcGFjdFRvb2xTaWduIHRvb2w9e3Rvb2x9IC8+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRvb2wudGhvdWdodCB9fT57YCR7dG9vbC5uYW1lLnBhZFN0YXJ0KHRvb2xOYW1lV2lkdGgpfSAgYH08L3RleHQ+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0XG4gICAgICAgICAgICAgID8gPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PjxNYXJrZG93biB0ZXh0PXt0b29sLmRlc2NyaXB0aW9ufSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0gLz48L2JveD5cbiAgICAgICAgICAgICAgOiA8RGVzY3JpcHRpb25SZXZlYWwgcnVubmluZz17dG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJ30+e3Rvb2wuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvblJldmVhbD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICB7dmlzaWJsZUJhc2g/LnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh2aXNpYmxlQmFzaC50aXRsZSwgJ2Jhc2gnKX08L3RleHQ+fVxuICAgICAgICB7dmlzaWJsZUJhc2g/LmZ1bGxPdXRwdXQgJiYgPEJhc2hPdXRwdXQgdmFsdWU9e3Zpc2libGVCYXNoLmZ1bGxPdXRwdXR9IGxpbmVTdGFydD17dmlzaWJsZUJhc2gub3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVDb3VudH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sQ2FyZCh7IG5hbWUsIHRpdGxlLCB0aXRsZUxhbmcsIGRlc2NyaXB0aW9uLCBzdGF0dXMsIGRpZmYsIHJldmVydCwgZnVsbE91dHB1dCwgb3V0cHV0TGluZVN0YXJ0LCBvdXRwdXRMaW5lQ291bnQsIGVycm9yLCBiYWNrZ3JvdW5kLCB2ZXJib3NlLCBzdGFydGVkQXQsIGR1cmF0aW9uTXMgfSkge1xuICBjb25zdCBzaG93blRpdGxlID0gbmFtZSA9PT0gJ2Jhc2gnID8gbnVsbCA6IHRpdGxlTGFuZyAmJiB0aXRsZSA/IGhpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nKSA6IHRpdGxlXG4gIGNvbnN0IGlubGluZURlc2NyaXB0aW9uID0gIXNob3duVGl0bGVcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgY29uc3QgcnVubmluZyA9IHN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gIGNvbnN0IGludGVycnVwdGVkID0gc3RhdHVzID09PSAnaW50ZXJydXB0ZWQnXG4gIGNvbnN0IHJldmVydGVkID0gc3RhdHVzID09PSAncmV2ZXJ0ZWQnXG4gIGNvbnN0IGZhaWxlZCA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICBjb25zdCBvdXRMaW5lcyA9IGZ1bGxPdXRwdXQgPyBmdWxsT3V0cHV0LnNwbGl0KCdcXG4nKSA6IG51bGxcblxuICBjb25zdCBlbGFwc2VkID0gcnVubmluZyAmJiBzdGFydGVkQXQgPyBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDogMFxuICBjb25zdCB0b29rID0gIXJ1bm5pbmcgJiYgIWJhY2tncm91bmQgJiYgZHVyYXRpb25NcyAhPSBudWxsID8gZm10RHVyYXRpb24oZHVyYXRpb25NcykgOiBudWxsXG5cbiAgY29uc3QgaW5mbyA9IHJ1bm5pbmcgPyAoZWxhcHNlZCA+PSA1MDAwID8gYHJ1bm5pbmcgKCR7Zm10UnVubmluZyhlbGFwc2VkKX0pYCA6ICdydW5uaW5nJylcbiAgICA6IGludGVycnVwdGVkID8gJ2ludGVycnVwdGVkJ1xuICAgIDogcmV2ZXJ0ZWQgPyAncmV2ZXJ0ZWQnXG4gICAgOiBmYWlsZWQgPyBgZmFpbGVkJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBiYWNrZ3JvdW5kID8gJ2JhY2tncm91bmQgIHNoZWxsIGxpc3RlZCBiZWxvdydcbiAgICA6IGRpZmYgPyBgKyR7ZGlmZi5hZGRpdGlvbnN9IC0ke2RpZmYuZGVsZXRpb25zfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogb3V0TGluZXMgPyBgJHtvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RofSAkeyhvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RoKSA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBgZG9uZSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICB7cnVubmluZ1xuICAgICAgICAgID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPlxuICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGludGVycnVwdGVkIHx8IGZhaWxlZCA/IFJFRCA6IHJldmVydGVkID8gTVVURUQgOiBhY2NlbnQoKSB9fT57aW50ZXJydXB0ZWQgPyAnXHUyNzE3JyA6IGZhaWxlZCA/ICdcdTI3MTcnIDogcmV2ZXJ0ZWQgPyAnXHUyMUE5JyA6ICdcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57YCR7bmFtZS5wYWRFbmQoNSl9IGB9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkcgfX0+e3Nob3duVGl0bGUgfHwgZGVzY3JpcHRpb24gfHwgbmFtZX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2luZm99YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIHtkZXNjcmlwdGlvbiAmJiAhaW5saW5lRGVzY3JpcHRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Rlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiB0aXRsZSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcgfHwgJ2Jhc2gnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtmYWlsZWQgJiYgZXJyb3IgJiYgKFxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2Vycm9yfWB9PC90ZXh0PlxuICAgICAgKX1cbiAgICAgIHtyZXZlcnQgJiYgIXJ1bm5pbmcgJiYgIXJldmVydGVkICYmICEoZGlmZiAmJiBkaWZmLmFkZGl0aW9ucyA9PT0gMCAmJiBkaWZmLmRlbGV0aW9ucyA9PT0gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8RGlmZlxuICAgICAgICAgICAgYmVmb3JlPXtwcmV2aWV3LmJlZm9yZX1cbiAgICAgICAgICAgIGFmdGVyPXtwcmV2aWV3LmFmdGVyfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmdGb3JQYXRoKHJldmVydC5wYXRoKX1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29udGV4dD17M31cbiAgICAgICAgICAgIGZvbGRzPXtmYWxzZX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIGZ1bGxPdXRwdXQgJiYgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT48QmFzaE91dHB1dCB2YWx1ZT17ZnVsbE91dHB1dH0gbGluZVN0YXJ0PXtvdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17b3V0cHV0TGluZUNvdW50fSAvPjwvYm94Pn1cbiAgICAgIHtvdXRMaW5lcyAmJiB2ZXJib3NlICYmIG5hbWUgIT09ICdiYXNoJyAmJiAhcnVubmluZyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7b3V0TGluZXMuc2xpY2UoMCwgMjAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge291dExpbmVzLmxlbmd0aCA+IDIwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtvdXRMaW5lcy5sZW5ndGggLSAyMDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25UdXJuKHsgaXRlbSwgdmVyYm9zZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHBhaXJlZCA9IGZhbHNlLCBib3JkZXIgPSB0cnVlLCBwYW5lSGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBwYXJ0aWNpcGFudEEgPSBpdGVtLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCBpdGVtLnJvbGUgPT09ICdwcm9wb3NlcidcbiAgY29uc3Qgc3ludGhlc2lzID0gaXRlbS5yb2xlID09PSAnc3ludGhlc2lzJ1xuICBjb25zdCBsYWJlbCA9IHN5bnRoZXNpcyA/ICdTeW50aGVzaXMnIDogYCR7cGFydGljaXBhbnRBID8gJ1BhcnRpY2lwYW50IEEnIDogJ1BhcnRpY2lwYW50IEInfSAgcm91bmQgJHtpdGVtLnJvdW5kfWBcbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKHBhbmVIZWlnaHQgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSAmJiAoZXZlbnQuYWN0aW9uID09PSAnc2Nyb2xsJyB8fCBldmVudC5hY3Rpb24gPT09ICdwcmVzcycpKSBvbkZvY3VzPy4oKVxuICB9KVxuICBjb25zdCB0b29scyA9IGNvbXBhY3RUb29sSGlzdG9yeSA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtLnRvb2xzIHx8IFtdLCAhIWl0ZW0uYWN0aXZlICYmICFpdGVtLnRleHQpIDogaXRlbS50b29scyB8fCBbXVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IHBhaXJlZCA/IDAgOiAyLCBoZWlnaHQ6IHBhbmVIZWlnaHQsIGJnOiBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhHcm93OiBwYW5lSGVpZ2h0ID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2JvcmRlciAmJiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQgfX0gLz59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkIHx8IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+XG4gICAgICAgICAge3BhbmVIZWlnaHQgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7IHNldE9mZnNldChuZXh0KTsgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pIH19XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPn1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25Db250ZW50KHsgdG9vbHMsIHRleHQsIHZlcmJvc2UgfSkge1xuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICB7dG9vbHMubWFwKCh0b29sKSA9PiA8TWVzc2FnZSBrZXk9e3Rvb2wuY2FsbElkfSBpdGVtPXt0b29sfSB2ZXJib3NlPXt2ZXJib3NlfSAvPil9XG4gICAgICAgICAge3RleHQgJiYgdG9vbHMubGVuZ3RoID4gMCAmJiA8dGV4dD4gPC90ZXh0Pn1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgPC9ib3g+XG59XG5cbmZ1bmN0aW9uIGRlbGliZXJhdGlvblJvd3ModHVybnMpIHtcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGZvciAoY29uc3QgdHVybiBvZiB0dXJucykge1xuICAgIGlmICh0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnIHx8ICF0dXJuLnBhcmFsbGVsR3JvdXApIHtcbiAgICAgIHJvd3MucHVzaChbdHVybl0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHJvd3MuZmluZCgocm93KSA9PiByb3dbMF0/LnBhcmFsbGVsR3JvdXAgPT09IHR1cm4ucGFyYWxsZWxHcm91cClcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnB1c2godHVybilcbiAgICBlbHNlIHJvd3MucHVzaChbdHVybl0pXG4gIH1cbiAgcmV0dXJuIHJvd3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlbGliZXJhdGlvbkV4Y2hhbmdlKHsgdHVybnMsIHZlcmJvc2UsIHdpZGUsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCB2aWV3cG9ydEhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgaWQgPSB0dXJuID0+IGAke3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWBcbiAgY29uc3Qgc2VsZWN0ZWRJZCA9IHNlbGVjdGVkKCkgfHwgKHR1cm5zWzBdICYmIGlkKHR1cm5zWzBdKSlcbiAgY29uc3QgZm9jdXNUdXJuID0gdHVybiA9PiB7IHNldFNlbGVjdGVkKGlkKHR1cm4pKTsgb25Gb2N1cz8uKCkgfVxuICB1c2VJbnB1dChldmVudCA9PiB7XG4gICAgaWYgKCFmb2N1c2VkIHx8IChldmVudC5rZXkgIT09ICdsZWZ0JyAmJiBldmVudC5rZXkgIT09ICdyaWdodCcpKSByZXR1cm5cbiAgICBjb25zdCBpbmRleCA9IHR1cm5zLmZpbmRJbmRleCh0dXJuID0+IGlkKHR1cm4pID09PSBzZWxlY3RlZElkKVxuICAgIGNvbnN0IG5leHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0dXJucy5sZW5ndGggLSAxLCBpbmRleCArIChldmVudC5rZXkgPT09ICdsZWZ0JyA/IC0xIDogMSkpKVxuICAgIGlmICh0dXJuc1tuZXh0XSkgZm9jdXNUdXJuKHR1cm5zW25leHRdKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIGNvbnN0IHBhbmVIZWlnaHQgPSB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAodHVybnMuc29tZSh0dXJuID0+IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycpID8gMC42IDogMSkpIC0gMSkgOiB1bmRlZmluZWRcbiAgY29uc3QgcGFuZVByb3BzID0gdHVybiA9PiAoeyBwYW5lSGVpZ2h0OiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnICYmIHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqIDAuMzUpKSA6IHBhbmVIZWlnaHQsIGZvY3VzZWQ6IGZvY3VzZWQgJiYgc2VsZWN0ZWRJZCA9PT0gaWQodHVybiksIG9uRm9jdXM6ICgpID0+IGZvY3VzVHVybih0dXJuKSB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge2RlbGliZXJhdGlvblJvd3ModHVybnMpLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzeW50aGVzaXMgPSByb3dbMF0/LnJvbGUgPT09ICdzeW50aGVzaXMnXG4gICAgICAgIGlmICghd2lkZSB8fCBzeW50aGVzaXMpIHJldHVybiByb3cubWFwKCh0dXJuKSA9PiA8RGVsaWJlcmF0aW9uVHVybiBrZXk9e2Ake3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWB9IGl0ZW09e3R1cm59IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSB7Li4ucGFuZVByb3BzKHR1cm4pfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57bGVmdCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtsZWZ0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMobGVmdCl9IC8+fTwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMocmlnaHQpfSAvPn08L2JveD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzaG93TG9ja2VkID0gZmFsc2UgfSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiA8VG9vbEdyb3VwIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInICYmIGl0ZW0ub3JpZ2luID09PSAndmlldycpIHtcbiAgICBjb25zdCBsYWJlbCA9IC9eXFxbdmlldzogKFteXFxdXSspXFxdLy5leGVjKGl0ZW0udGV4dCk/LlsxXSB8fCAnaW1hZ2UnXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTI3MTMgVmlld2VkICR7bGFiZWx9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0ubm90aWNlcy5sZW5ndGh9IGFnZW50cyBmaW5pc2hlZGB9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5ub3RpY2VzLm1hcCgobm90aWNlLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e25vdGljZS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX08L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJykge1xuICAgIHJldHVybiA8VG9vbENhcmQgey4uLml0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3VtbWFyeScpIHtcbiAgICBjb25zdCBsaW5lcyA9IGl0ZW0udGV4dC5zcGxpdCgnXFxuJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2l0ZW0uc291cmNlID09PSAnY29tcGFjdCcgPyAnXHUyNzI2IHN1bW1hcnkgIGNvbnZlcnNhdGlvbiBjb21wYWN0ZWQgYWJvdmUgdGhpcyBwb2ludCcgOiAnXHUyNzI2IHN1bW1hcnkgIHJld291bmQgY29udmVyc2F0aW9uJ308L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bGluZXMubGVuZ3RofSAke2xpbmVzLmxlbmd0aCA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9YH08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2xpbmVzLnNsaWNlKDAsIDUwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2xpbmVzLmxlbmd0aCA+IDUwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtsaW5lcy5sZW5ndGggLSA1MDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxNYXJrZG93biB0ZXh0PXtpdGVtLnRleHR9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJykge1xuICAgIHJldHVybiA8Ym94IHN0eWxlPXt7IG1hcmdpblRvcDogMSB9fT48RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPjwvYm94PlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ25vdGljZScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdza2lsbCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNzI2IHNraWxsOiAke2l0ZW0ubmFtZX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNTAwXHUyNTAwICR7aXRlbS5jb3VudH0gdG9vbCAke2l0ZW0uY291bnQgPT09IDEgPyAnaW50ZXJhY3Rpb24nIDogJ2ludGVyYWN0aW9ucyd9IGhpZGRlbiBcdTI1MDBcdTI1MDBgfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1jb21tYW5kJykge1xuICAgIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0KGl0ZW0udGV4dCwgJ2Jhc2gnKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PnsnY29tbWFuZCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfT57YCR7aSA9PT0gMCA/ICckICcgOiAnICAnfSR7bGluZSB8fCAnICd9YH08L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtb3V0cHV0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19Pnsnb3V0cHV0J308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtpdGVtLnRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3BlZXInKSB7XG4gICAgY29uc3QgaW5jb21pbmcgPSBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJ1xuICAgIGNvbnN0IHVucmVhZCA9IGluY29taW5nICYmICFpdGVtLnJlYWRcbiAgICBjb25zdCBjb2xvciA9IGluY29taW5nICYmIGl0ZW0ucmVhZCA/IE1VVEVEIDogUEVFUlxuICAgIGNvbnN0IGRlbGl2ZXJ5U3RhdHVzID0gaXRlbS5zdGF0dXMgfHwgJ3Vua25vd24nXG4gICAgY29uc3Qgc3RhdHVzID0gaW5jb21pbmcgPyBgICgke3VucmVhZCA/ICd1bnJlYWQnIDogJ3JlYWQnfSk6YCA6IGRlbGl2ZXJ5U3RhdHVzID09PSAnZGVsaXZlcmVkJyA/ICc6JyA6IGAgKCR7ZGVsaXZlcnlTdGF0dXN9KTpgXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBQRUVSLCBib2xkOiB0cnVlIH19PntgJHtpbmNvbWluZyA/ICdmcm9tJyA6ICd0byd9IEAke2luY29taW5nID8gaXRlbS5mcm9tLm5hbWUgOiBpdGVtLnRvLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3IsIGJvbGQ6IHVucmVhZCB9fT57c3RhdHVzfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICB7aXRlbS5lcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntpdGVtLmVycm9yfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW1zLCBhY3RpdmUgPSBmYWxzZSkge1xuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDspIHtcbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2ldLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbZW5kXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbZW5kXS5raW5kID09PSAndGhvdWdodHMnKSkgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIGNvbnN0IHRvb2xzID0gcnVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndG9vbCcpXG4gICAgICByZXN1bHQucHVzaCh7IGtpbmQ6ICd0b29sLWdyb3VwJywgY2FsbElkOiB0b29scy5hdCgtMSk/LmNhbGxJZCwgaXRlbXM6IHJ1biwgdG9vbHMsIGFjdGl2ZTogYWN0aXZlICYmIGVuZCA9PT0gaXRlbXMubGVuZ3RoIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbaV0uYWdlbnRDb21wbGV0aW9uKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbZW5kXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tlbmRdLmFnZW50Q29tcGxldGlvbikgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIHJlc3VsdC5wdXNoKHJ1bi5sZW5ndGggPT09IDEgPyBydW5bMF0gOiB7IGtpbmQ6ICdhZ2VudC1ub3RpY2UtZ3JvdXAnLCBub3RpY2VzOiBydW4gfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2krK10pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFdpbmRvdyhpdGVtcywgc2l6ZSkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGl0ZW1zLmxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IGhpZGRlbiA9IGl0ZW1zLnNsaWNlKDAsIHN0YXJ0KVxuICByZXR1cm4ge1xuICAgIGl0ZW1zOiBpdGVtcy5zbGljZShzdGFydCksXG4gICAgaGlkZGVuSXRlbXM6IGhpZGRlbi5sZW5ndGgsXG4gICAgaGlkZGVuQ291bnQ6IGhpZGRlbi5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIHNvdXJjZUl0ZW1Db3VudChpdGVtKSwgMCksXG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSXRlbUNvdW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gaXRlbS5pdGVtcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHJldHVybiBpdGVtLm5vdGljZXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHJldHVybiBpdGVtLmNvdW50XG4gIHJldHVybiAxXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0SW5wdXQsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGNvbnZlcnNhdGlvbk1hdGNoZXMsIGhpZ2hsaWdodENvbnZlcnNhdGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udmVyc2F0aW9uLXNlYXJjaC5qcydcblxuZnVuY3Rpb24gU2Nyb2xsQW5jaG9yKHsgdGFyZ2V0IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgdGFyZ2V0LmFuY2hvclkgPSBsYXlvdXQueVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBTZWFyY2hNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgY3VycmVudE1hdGNoLCBzZWFyY2ggfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBpZiAoY3VycmVudE1hdGNoKSBzZWFyY2guc2Nyb2xsVG9NYXRjaChsYXlvdXQsIGN1cnJlbnRNYXRjaClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSkge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW2NvbW1pdHRlZCwgc2V0Q29tbWl0dGVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2VudGVyRm9jdXMsIHNldEVudGVyRm9jdXNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2Nyb2xsUmVxdWVzdCwgc2V0U2Nyb2xsUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Njcm9sbF0gPSBjcmVhdGVTaWduYWwoeyBhbmNob3JZOiAwLCBrZXk6IG51bGwgfSlcblxuICBmdW5jdGlvbiByZWdpc3RlckZvY3VzKCkge1xuICAgIGlmICghYWN0aXZlKCkpIHJldHVyblxuICAgIGZtLml0ZW0oJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIGlmIChlbnRlckZvY3VzKCkpIHtcbiAgICAgIHNldEVudGVyRm9jdXMoZmFsc2UpXG4gICAgICBmbS5mb2N1cygnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbigpIHtcbiAgICBzZXRBY3RpdmUodHJ1ZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRFbnRlckZvY3VzKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSh7IHJlc3RvcmVGb2N1cyA9IHRydWUgfSA9IHt9KSB7XG4gICAgc2V0QWN0aXZlKGZhbHNlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIGlmIChyZXN0b3JlRm9jdXMgJiYgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkgZm0uZm9jdXMoJ2ZlZWQnKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQsIG1hdGNoZXMpIHtcbiAgICBpZiAoYWN0aXZlKCkgJiYgIWZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIHtcbiAgICAgIGNsb3NlKHsgcmVzdG9yZUZvY3VzOiBmYWxzZSB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKCFhY3RpdmUoKSB8fCAhY29tbWl0dGVkKCkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGNvdW50ID0gbWF0Y2hlcy5sZW5ndGhcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2UoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ24nICYmICFldmVudC5zaGlmdCkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpICsgMSkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdOJyB8fCAoZXZlbnQuc2hpZnQgJiYgZXZlbnQua2V5ID09PSAnbicpKSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgLSAxICsgY291bnQpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdvJykgcmV0dXJuIGZhbHNlXG4gICAgZWxzZSByZXR1cm4gdHJ1ZVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUoaXRlbXMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udmVyc2F0aW9uTWF0Y2hlcyhpdGVtcywgcXVlcnkoKSwgdmVyYm9zZSgpKVxuICAgIGNvbnN0IGxhc3RJbmRleCA9IE1hdGgubWF4KDAsIG1hdGNoZXMubGVuZ3RoIC0gMSlcbiAgICBpZiAoaW5kZXgoKSA+IGxhc3RJbmRleCkgc2V0SW5kZXgobGFzdEluZGV4KVxuICAgIHJldHVybiB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgaXRlbXM6IGFjdGl2ZSgpID8gaGlnaGxpZ2h0Q29udmVyc2F0aW9uKGl0ZW1zLCBxdWVyeSgpLCBpbmRleCgpLCB2ZXJib3NlKCkpIDogaXRlbXMsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2Nyb2xsVG9NYXRjaChsYXlvdXQsIG1hdGNoKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2Nyb2xsKClcbiAgICBjb25zdCBrZXkgPSBgJHtxdWVyeSgpfVxcMCR7aW5kZXgoKX1cXDAke3ZlcmJvc2UoKX1cXDAke3Njcm9sbFJlcXVlc3QoKX1gXG4gICAgaWYgKHRhcmdldC5rZXkgPT09IGtleSkgcmV0dXJuXG4gICAgdGFyZ2V0LmtleSA9IGtleVxuICAgIHNldEZvbGxvdyhmYWxzZSlcbiAgICBzZXRPZmZzZXQoTWF0aC5tYXgoMCwgbGF5b3V0LnkgLSB0YXJnZXQuYW5jaG9yWSArIG1hdGNoLmxpbmUgLSAzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KHZhbHVlKSB7XG4gICAgc2V0UXVlcnkodmFsdWUpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlLFxuICAgIHF1ZXJ5LFxuICAgIGNvbW1pdHRlZCxcbiAgICBpbmRleCxcbiAgICBmb2N1c2VkOiAoKSA9PiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpLFxuICAgIHJlZ2lzdGVyRm9jdXMsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICBoYW5kbGVJbnB1dCxcbiAgICBwcmVwYXJlLFxuICAgIHNjcm9sbDogc2Nyb2xsKCksXG4gICAgc2Nyb2xsVG9NYXRjaCxcbiAgICBjb21taXQ6ICgpID0+IHNldENvbW1pdHRlZCh0cnVlKSxcbiAgICB1cGRhdGVRdWVyeSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udmVyc2F0aW9uU2VhcmNoQmFyKHsgc2VhcmNoLCBtYXRjaGVzIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycvICd9PC90ZXh0PlxuICAgICAge3NlYXJjaC5jb21taXR0ZWQoKVxuICAgICAgICA/IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgZmxleEdyb3c6IDEgfX0+e3NlYXJjaC5xdWVyeSgpfTwvdGV4dD5cbiAgICAgICAgOiA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtzZWFyY2guZm9jdXNlZCgpfVxuICAgICAgICAgICAgdmFsdWU9e3NlYXJjaC5xdWVyeSgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NlYXJjaC51cGRhdGVRdWVyeX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtzZWFyY2guY29tbWl0fVxuICAgICAgICAgICAgb25DYW5jZWw9e3NlYXJjaC5jbG9zZX1cbiAgICAgICAgICAvPn1cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bWF0Y2hlcy5sZW5ndGggPyBgJHtzZWFyY2guaW5kZXgoKSArIDF9LyR7bWF0Y2hlcy5sZW5ndGh9YCA6ICcwLzAnfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBbmNob3IgYXMgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBTZWFyY2hNZXNzYWdlIGFzIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UgfVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrb1xcYDogQ2FwdHVyZSBzY3JlZW4gcmVnaW9uIChtYWNPUylcbi0gXFxgY3RybCtnXFxgOiBSZWNvcmQgKG1hY09TKVxuLSBcXGBlbnRlclxcYDogVHJhbnNjcmliZSByZWNvcmRpbmdcbi0gXFxgZXNjXFxgOiBDYW5jZWwgZGljdGF0aW9uXG5cbi0gXFxgZW50ZXJcXGAgc2VuZHM7IFxcYHNoaWZ0K2VudGVyXFxgIG9yIFxcYFxcXFw8ZW50ZXI+XFxgIGluc2VydHMgYSBuZXdsaW5lXG4tIFxcYEBcXGAgb3BlbnMgYSBmdXp6eSBmaWxlIHBpY2tlcjsgZW50ZXIgaW5zZXJ0cyB0aGUgc2VsZWN0ZWQgcGF0aFxuLSBkcmFnIGFuIGltYWdlIGZpbGUgaW50byB0aGUgdGVybWluYWwgdG8gYXR0YWNoIGl0OiBpdCBhcHBlYXJzIGlubGluZSBhcyBcXGBbSW1hZ2UgI05dXFxgLCBleGFjdGx5IHdoZXJlIHlvdXIgY3Vyc29yIGlzLCBzbyBpbWFnZXMgY2FuIHNpdCBiZXR3ZWVuIHNlbnRlbmNlczsgYmFja3NwYWNlIGFmdGVyIG9uZSByZW1vdmVzIHRoZSB3aG9sZSBhdHRhY2htZW50XG4tIFxcYHRhYlxcYCBjb21wbGV0ZXM6IFxcYC9zdW1tPHRhYj5cXGAgZmluaXNoZXMgdGhlIGNvbW1hbmQgbmFtZSBhbmQgY3ljbGVzIHRocm91Z2ggbWF0Y2hlcyBvbiByZXBlYXQ7IGFmdGVyIGFuIGFyZ3VtZW50IHNwYWNlIGl0IGNvbXBsZXRlcyB2YWx1ZXMgKFxcYC9tb2RlbCBmbGE8dGFiPlxcYCwgXFxgL2NvbG9yIDx0YWI+XFxgLCBcXGAvZWZmb3J0IDx0YWI+XFxgKSBhbmQgZmlsZSBwYXRocyBmb3Igc2tpbGxzIGFuZCBjb21tYW5kcy4gS2VlcCB0eXBpbmcgdG8gbmFycm93LCB0YWIgb3IgZW50ZXIgaW5zZXJ0c1xuLSBcXGB1cFxcYCBhbmQgXFxgZG93blxcYCBvbiBhbiBlbXB0eSBjb21wb3NlciByZWNhbGwgbWVzc2FnZXMgeW91IGFscmVhZHkgc2VudFxuLSBcXGBjdHJsK3JcXGAgb3BlbnMgcmV3aW5kIChzYW1lIGFzIFxcYC9yZXdpbmRcXGApOyBcXGAvaGlzdG9yeVxcYCBmdXp6eS1zZWFyY2hlcyB5b3VyIG9sZCBwcm9tcHRzIGFuZCBwdXRzIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiB0aGUgY29tcG9zZXJcbi0gXFxgY3RybCtzXFxgIG9wZW5zIHRoZSBzZXNzaW9uIHBpY2tlciAoc2FtZSBhcyBcXGAvcmVzdW1lXFxgKTsgXFxgY3RybCt0XFxgIG9wZW5zIHRoZSBtb2RlbCBwaWNrZXJcbi0gXFxgY3RybCtwXFxgIHN3aXRjaGVzIHByb2plY3RzOiBwaWNrIG9uZSBhbmQgcGljbyBqdW1wcyB0byBpdHMgbW9zdCByZWNlbnQgc2Vzc2lvbiwgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0b29scywgY29udGV4dCwgYW5kIE1DUCBzZXJ2ZXJzIHRvIG1hdGNoOyBcXGBjdHJsK3hcXGAgdHdpY2UgZGVsZXRlcyBhIHByb2plY3QncyBwaWNvIGhpc3RvcnkgKGFsbCBpdHMgc2Vzc2lvbnMgYW5kIG1lbW9yaWVzKTsgXFxgL25ld1xcYCBzdGFydHMgYSBmcmVzaCBzZXNzaW9uIGluIHRoZSBjdXJyZW50IHByb2plY3Rcbi0gXFxgY3RybCtiXFxgIGN5Y2xlcyB0aGlua2luZyBlZmZvcnQgKGRlZmF1bHQsIGxvdywgbWVkaXVtLCBoaWdoLCBtYXgpIG9uIG1vZGVscyB0aGF0IHN1cHBvcnQgaXQ7IFxcYC9lZmZvcnRcXGAgb3BlbnMgdGhlIGZ1bGwgcGlja2VyXG4tIGluc2lkZSBhIHNlYXJjaCBwYW5lbCwgXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgaW5zdGVhZDogdGhpcyBzZXNzaW9uLCB0aGlzIHByb2plY3QsIG9yIGV2ZXJ5d2hlcmVcbi0gXFxgL3Jld2luZFxcYCByZXN0b3JlcyB0aGUgY29udmVyc2F0aW9uIHRvIGFuIGVhcmxpZXIgbWVzc2FnZTsgYSByZXdpbmQgY2FuIGJlIHVuZG9uZSB3aXRoIFxcYGN0cmwrelxcYFxuLSBtZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBhZ2VudCBpcyByZXNwb25kaW5nIHF1ZXVlIHVwIGFib3ZlIHRoZSBjb21wb3NlciBhbmQgYXJlIGRlbGl2ZXJlZCBhcyBvbmUgbWVzc2FnZSB3aGVuIHRoZSB0dXJuIGZpbmlzaGVzOyBcXGB1cFxcYCBwdWxscyB0aGVtIGJhY2sgZm9yIGVkaXRpbmdcbi0gXFxgZXNjXFxgIGludGVycnVwdHMgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIG9yIGNsZWFycyB0aGUgY29tcG9zZXIgd2hlbiBpZGxlXG5cbiMjIE1vdmluZyBhcm91bmRcblxuLSBcXGB0YWJcXGAgc3dpdGNoZXMgZm9jdXMgYmV0d2VlbiB0aGUgdHJhbnNjcmlwdCBhbmQgdGhlIGNvbXBvc2VyXG4tIHdpdGggdGhlIHRyYW5zY3JpcHQgZm9jdXNlZCwgXFxgdXBcXGAvXFxgZG93blxcYC9cXGBqXFxgL1xcYGtcXGAgc2Nyb2xsIGFuZCBcXGBnXFxgL1xcYEdcXGAganVtcCB0byB0aGUgZW5kc1xuLSBsb25nIHNlc3Npb25zIHJlbmRlciBvbmx5IHRoZSBuZXdlc3QgNTAgbWVzc2FnZXM7IHNjcm9sbGluZyB0byB0aGUgdmVyeSB0b3AgbG9hZHMgb2xkZXIgb25lcyBpbiBiYXRjaGVzICh0aGUgdG9wIGxpbmUgc2hvd3MgaG93IG1hbnkgYXJlIGhpZGRlbilcbi0gdGhlIG1vdXNlIHdoZWVsIHNjcm9sbHM7IGNsaWNrLWRyYWcgc2VsZWN0cyB0ZXh0IGFuZCBjb3BpZXMgaXQgb24gcmVsZWFzZVxuLSBcXGBjdHJsK2NcXGAgdHdpY2UgZXhpdHNcblxuIyMgU2hlbGxzXG5cblRoZSBhZ2VudCBjYW4gcnVuIGxvbmctbGl2ZWQgcHJvY2Vzc2VzIChkZXYgc2VydmVycywgd2F0Y2hlcnMpIHdpdGggXFxgYmFzaCBiYWNrZ3JvdW5kOiB0cnVlXFxgLCB0aGVuIHJlYWQgdGhlaXIgb3V0cHV0IGFuZCBzdG9wIHRoZW0gaXRzZWxmLiBTaGVsbHMgYXBwZWFyIGJlbG93IHRoZSBjb21wb3NlciBhbmQgcmVtYWluIHRoZXJlIGFmdGVyIGV4aXQ6IHRhYiBmb2N1c2VzIHRoZSBsaXN0LCBqL2sgbW92ZXMsIGVudGVyIG9wZW5zIHRoZSBjb21tYW5kIGFuZCBsaXZlIG91dHB1dCwgYW5kIFxcYGN0cmwreFxcYCBraWxscyBhIHJ1bm5pbmcgc2hlbGwgb3IgZGlzbWlzc2VzIGEgZmluaXNoZWQgb25lLiBXaGVuIGEgc2hlbGwgZXhpdHMgb24gaXRzIG93biwgdGhlIGFnZW50IGlzIG5vdGlmaWVkIGFuZCByZXNwb25kczsgc2hlbGxzIGRpZSB3aXRoIHBpY28sIGFuZCBxdWl0dGluZyB3YXJucyB5b3UgaWYgYW55IGFyZSBzdGlsbCB1cC5cblxuIyMgU3Vic2NyaXB0aW9uc1xuXG5cXGAvY29ubmVjdFxcYCBsaXN0cyBzdWJzY3JpcHRpb24gcHJvdmlkZXJzIHlvdSBjYW4gc2lnbiBpbiB3aXRoIGluc3RlYWQgb2YgQVBJIGtleXMuIE9wZW5BSSAoQ2hhdEdQVCAvIENvZGV4IHBsYW4pIHNpZ25zIGluIHRocm91Z2ggeW91ciBicm93c2VyIHZpYSBPQXV0aDsgdG9rZW5zIGFyZSBzdG9yZWQgaW4gXFxgfi8ucGljby9hdXRoLmpzb25cXGAgYW5kIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2lnbiBpbiBvbmNlLiBPbmNlIGNvbm5lY3RlZCwgY29kZXggbW9kZWxzIGFwcGVhciBpbiBcXGAvbW9kZWxcXGAsIGJpbGxlZCB0byB5b3VyIHBsYW4uIFxcYGRcXGAgaW4gdGhlIHBhbmVsIGRpc2Nvbm5lY3RzLlxuXG4jIyBNZW1vcnlcblxuVGhlIGFnZW50IHNhdmVzIGR1cmFibGUgZmFjdHMgd2l0aCB0aGUgcmVtZW1iZXIgdG9vbDogb25lIGZpbGUgcGVyIG1lbW9yeSB1bmRlciBcXGB+Ly5waWNvL21lbW9yeVxcYCAoZ2xvYmFsKSBvciB0aGUgcHJvamVjdCdzIGRpcmVjdG9yeSBpbiBcXGB+Ly5waWNvL3Byb2plY3RzXFxgLiBPbmx5IGEgb25lLWxpbmUgaW5kZXggaXMgaW4gaXRzIGNvbnRleHQ7IGl0IGxvYWRzIGEgc3BlY2lmaWMgbWVtb3J5IHdpdGggdGhlIHJlY2FsbCB0b29sIHdoZW4gcmVsZXZhbnQuIFxcYC9tZW1vcnlcXGAgbGlzdHMgZXZlcnl0aGluZyBpdCBrbm93cyB3aXRoIGEgY29udGVudCBwcmV2aWV3OiBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBmaWx0ZXIgKGFsbCwgcHJvamVjdCwgZ2xvYmFsKSBhbmQgXFxgY3RybCt4XFxgIHR3aWNlIGZvcmdldHMgdGhlIHNlbGVjdGVkIG1lbW9yeS4gWW91IGNhbiBhbHNvIGFzayB0aGUgYWdlbnQgdG8gcmVtZW1iZXIsIGZvcmdldCwgb3IgY2xlYW4gdXAgaXRzIG1lbW9yaWVzIGluIHBsYWluIGxhbmd1YWdlLlxuXG4jIyBXYWtlLXVwc1xuXG5UaGUgYWdlbnQgY2FuIHNjaGVkdWxlIG9uZS10aW1lIHdha2UtdXBzIGZvciBpdHNlbGYgd2l0aCB0aGUgc2NoZWR1bGVfd2FrZXVwIHRvb2w6IGFmdGVyIHRoZSBkZWxheSBpdCByZWNlaXZlcyBpdHMgb3duIG5vdGUgYXMgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIGFuZCBhY3RzIG9uIGl0LiBSZWN1cnJpbmcgbG9vcHMgYXJlIGp1c3QgdGhlIGFnZW50IHJlc2NoZWR1bGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggd2FrZS11cC4gXFxgL3dha2V1cHNcXGAgbGlzdHMgcGVuZGluZyBvbmVzIHdpdGggbGl2ZSBjb3VudGRvd25zOyBlbnRlciBvciBcXGBjdHJsK3hcXGAgY2FuY2VscyAocHJlc3MgdHdpY2UpLiBBIFxcYFx1MjNGMCBOXFxgIGluIHRoZSBmb290ZXIgc2hvd3MgaG93IG1hbnkgYXJlIHBlbmRpbmcuIFdha2UtdXBzIGxpdmUgaW4gbWVtb3J5IGFuZCBhcmUgbG9zdCB3aGVuIHBpY28gZXhpdHMuXG5cbiMjIEFwcGVhcmFuY2VcblxucGljbyBwaWNrcyBhIGxpZ2h0IG9yIGRhcmsgcGFsZXR0ZSBhdCBzdGFydHVwIGJ5IGFza2luZyB0aGUgdGVybWluYWwgZm9yIGl0cyBiYWNrZ3JvdW5kIGNvbG9yIChPU0MgMTEpLCBzbyBpdCBtYXRjaGVzIHdoYXRldmVyIHRoZW1lIHlvdXIgdGVybWluYWwgdXNlcy4gXFxgL3RoZW1lXFxgIG9wZW5zIGEgcGlja2VyIHRoYXQgcHJldmlld3MgZWFjaCB0aGVtZSBhcyB5b3UgbW92ZSBhbmQgcGVyc2lzdHMgeW91ciBjaG9pY2UgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYDsgXFxgL3RoZW1lIGxpZ2h0XFxgLCBcXGAvdGhlbWUgZGFya1xcYCwgb3IgXFxgL3RoZW1lIGF1dG9cXGAgYXBwbGllcyBvbmUgZGlyZWN0bHkuIFxcYC9jb2xvclxcYCB0aW50cyBhIHNpbmdsZSBzZXNzaW9uJ3MgYWNjZW50IGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFsZXR0ZS5cblxuIyMgQ29udGV4dFxuXG5waWNvIHJlYWRzIEFHRU5UUy5tZCBmaWxlcyBhdXRvbWF0aWNhbGx5OiBhIGdsb2JhbCBvbmUgZnJvbSB+Ly5waWNvLCB0aGVuIGV2ZXJ5IGFuY2VzdG9yIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdXAgdG8gdGhlIGdpdCByb290LiBEZWVwZXIgZmlsZXMgd2luLiBBR0VOVFMubWQgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgbG9hZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSB0b29sIHRvdWNoZXMgdGhhdCBzdWJ0cmVlLiBJbiBhbnkgcHJvamVjdCBkaXJlY3Rvcnkgd2l0aG91dCBhbiBBR0VOVFMubWQsIGEgQ0xBVURFLm1kIGlzIGhvbm9yZWQgYXMgYSBmYWxsYmFjayBzbyBleGlzdGluZyByZXBvcyB3b3JrIHVuY2hhbmdlZDsgQUdFTlRTLm1kIGFsd2F5cyB3aW5zIHdoZW4gYm90aCBleGlzdCwgYW5kIHRoZSBmYWxsYmFjayBuZXZlciBhcHBsaWVzIHRvIHRoZSBnbG9iYWwgZmlsZS5cblxuU2Vzc2lvbnMgYXJlIHN0b3JlZCB1bmRlciB+Ly5waWNvIGFzIGpzb25sIGV2ZW50IGxvZ3M7IFxcYC9yZXN1bWVcXGAgZm9sZHMgb25lIGJhY2sgaW50byBleGFjdGx5IHRoaXMgdmlldy5cblxuXFxgL2NvbnRleHRcXGAgYnJlYWtzIGRvd24gd2hhdCB0aGUgbmV4dCByZXF1ZXN0IHdpbGwgY29udGFpbiAtIHN5c3RlbSBwcm9tcHQsIHRvb2wgc2NoZW1hcywgcHJvamVjdCBpbnN0cnVjdGlvbnMsIG1lbW9yeSBpbmRleCwgY29tcGFjdGlvbiBzdW1tYXJ5LCBhbmQgY29udmVyc2F0aW9uIC0gd2l0aCBhbiBlc3RpbWF0ZWQgc2l6ZSBmb3IgZWFjaCBwaWVjZSBuZXh0IHRvIHRoZSBwcm92aWRlci1tZWFzdXJlZCB0b3RhbC5cblxuVGhlIGZvb3RlcidzIFxcYGN0eCAlXFxgIHNob3dzIGhvdyBmdWxsIHRoZSBtb2RlbCdzIGNvbnRleHQgaXMuIEF0IDg1JSBwaWNvIGF1dG8tY29tcGFjdHM6IHRoZSBvbGRlciBjb252ZXJzYXRpb24gaXMgc3VtbWFyaXplZCBpbiBhIHN0cnVjdHVyZWQgZm9ybSwgdGhlIG1vc3QgcmVjZW50IHR1cm5zIGFyZSBrZXB0IHZlcmJhdGltLCBhbmQgdGhlIG1vZGVsIGlzIHRvbGQgd2hlcmUgdGhlIGZ1bGwgc2Vzc2lvbiBmaWxlIGxpdmVzIHNvIGl0IGNhbiByZWFkIGV4YWN0IGRldGFpbHMgYmFjayBvbiBkZW1hbmQuIE5vdGhpbmcgdmlzaWJsZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2NyaXB0LCBhbmQgcmV3aW5kIHN0aWxsIHdvcmtzIGFjcm9zcyBpdC4gXFxgL2NvbXBhY3RcXGAgcnVucyBpdCBtYW51YWxseSBhbmQgdGFrZXMgb3B0aW9uYWwgZm9jdXMgaW5zdHJ1Y3Rpb25zIChcXGAvY29tcGFjdCBmb2N1cyBvbiB0aGUgQVBJIGNoYW5nZXNcXGApLiBTZXQgXFxgXCJhdXRvQ29tcGFjdFwiOiBmYWxzZVxcYCBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB0cmlnZ2VyLlxuXG4tLS1cblxuKmVzYyB0YWtlcyB5b3UgYmFjayB0byB0aGUgY29udmVyc2F0aW9uKmBcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoeyBjb21tYW5kcywgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5waWNvICBoZWxwPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTIxOTFcdTIxOTMgc2Nyb2xsICBlc2MgYmFjazwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZCBzY3JvbGxiYXI+XG4gICAgICAgIDxNYXJrZG93biB0ZXh0PXtIRUxQX1RFWFQoY29tbWFuZHMpfSBjb2RlQmc9e251bGx9IC8+XG4gICAgICA8L1Njcm9sbEJveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLGNBQWMsV0FBVyxlQUFlO0FBQ2pELFNBQVMsYUFBYSxlQUFlLGtCQUFrQjtBQUN2RCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGlCQUFpQix5QkFBeUI7QUFDbkQsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxrQkFBa0I7QUFJM0IsU0FBUyxhQUFhLGFBQWEsT0FBTztBQUN4QyxRQUFNLFFBQVEsWUFBWSxRQUFRLFNBQVMsTUFBTSxLQUFLLE1BQU0sR0FBRyxF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cm92aWRlcnMiLCAiam9pbiIsICJtYWtlRXZlbnQiLCAicHJvdmlkZXJzIiwgImNvbmZpZyIsICJib290IiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZmlsZVVSTFRvUGF0aCIsICJyZWFkQ29uZmlnIiwgIlNjcm9sbEJveCIsICJ1c2VGb2N1cyIsICJ1c2VMYXlvdXQiLCAidXNlSW50ZXJ2YWwiLCAiY3JlYXRlU2lnbmFsIiwgImhvbWVkaXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAidXNlQW5pbWF0ZWQiLCAiaGlnaGxpZ2h0IiwgIndpZHRoIiwgImZ1enp5U2NvcmUiLCAianN4IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIm5hbWUiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZUZvY3VzIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJob21lZGlyIiwgIlNjcm9sbEJveCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIkJ1dHRvbiIsICJ1c2VJbnB1dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAicmFua0Z1enp5IiwgImZ1enp5U2NvcmUiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIk1lbnUiLCAiaG9tZWRpciIsICJidW5kbGVkIiwgInBlbmRpbmciLCAiZmFpbGVkIiwgInBlbmRpbmciLCAiY2FwdHVyZVJlZ2lvbiIsICJwZW5kaW5nIiwgImV4ZWNGaWxlIiwgIm1rZHRlbXAiLCAiZXhpc3RzU3luYyIsICJ0bXBkaXIiLCAiam9pbiIsICJlcnJvciIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiU3Bpbm5lciIsICJUZXh0QXJlYSIsICJ1c2VGb2N1cyIsICJ1c2VIaXRUZXN0IiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiU0VTU0lPTl9DT0xPUlMiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAiY3JlYXRlU2lnbmFsIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJsYWJlbCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgInVzZUxheW91dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJ1c2VJbnRlcnZhbCIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VIaXRUZXN0IiwgInVzZU1vdXNlIiwgImNyZWF0ZVNpZ25hbCIsICJib290IiwgInZlcnNpb24iLCAidXNlSW50ZXJ2YWwiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJlbGFwc2VkIiwgIlNFU1NJT05fQ09MT1JTIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAicm93IiwgImZ1enp5U2NvcmUiLCAiU2Nyb2xsQm94IiwgIlRleHRBcmVhIiwgIk1lbnUiLCAicGVuZGluZyIsICJTcGlubmVyIiwgImNvbXBhY3ROdW1iZXIiLCAianN4IiwgImlzRGV2SW5zdGFsbCIsICJydW5VcGRhdGUiLCAiZmV0Y2hMYXRlc3RWZXJzaW9uIiwgIm5ld2VyVmVyc2lvbiIsICJydW5IZWFkbGVzcyIsICJydW5TaGVsbCIsICJyZWFkQ29uZmlnIiwgImZpbGVVUkxUb1BhdGgiXQp9Cg==
|
|
5697
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZDogb3B0cy5tb2RlbCwgY29uZmlndXJlZDogY29uZmlnLmRlZmF1bHRNb2RlbCB9KVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xcXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCByZXN0b3JlZFNwZWVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKS5zcGVlZFxuICBjb25zdCBzcGVlZCA9IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gKG9wdHMucmVzdW1lID8gcmVzdG9yZWRTcGVlZCA/PyAnc3RhbmRhcmQnIDogY29uZmlnLnNwZWVkRGVmYXVsdHM/Llttb2RlbC5uYW1lXSkgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdzcGVlZCcsIHsgdG86IHNwZWVkIH0pKVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gY29kZXhDcmVkc1xuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke21vZGVsLnNwZWVkICYmIHNwZWVkID09PSAnZmFzdCcgPyAnICBGYXN0JyA6ICcnfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICAuLi4obW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgeyBzcGVlZCB9KSxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IHVzYWdlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHRocm93IG5ldyBFcnJvcihgJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcblxuaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgY29uc29sZS5lcnJvcigncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQuJylcbiAgY29uc29sZS5lcnJvcignc2V0IG9uZSBvZjogR0VNSU5JX0FQSV9LRVksIEFOVEhST1BJQ19BUElfS0VZLCBPUEVOQUlfQVBJX0tFWSwgWEFJX0FQSV9LRVksIE9QRU5ST1VURVJfQVBJX0tFWScpXG4gIGNvbnNvbGUuZXJyb3IoJ29yIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbjogcGljbyAtLWNvbm5lY3QnKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cblxuY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVuc3VyZURhZW1vbih7IGVudHJ5OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vZGFlbW9uLmpzJywgaW1wb3J0Lm1ldGEudXJsKSkgfSlcbmNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVSZW1vdGVDb250cm9sbGVyKGNvbm5lY3Rpb24sIHtcbiAgb3B0aW9uczogeyBjd2Q6IHByb2Nlc3MuY3dkKCksIHZlcnNpb246IHBrZy52ZXJzaW9uLCB0aGVtZSwgZGV0ZWN0ZWRUaGVtZSwgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyB9LFxuICBsb2NhbEJvb3Q6IHsgcmVmczoge30gfSxcbn0pXG5jb25zdCBib290ID0gY29udHJvbGxlci5ib290XG5pZiAoY2xpLnNwZWVkKSBhd2FpdCBjb250cm9sbGVyLnNwZWVkQ29tbWFuZChjbGkuc3BlZWQpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJywgJ1NJR0hVUCddKSBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICBjb25uZWN0aW9uLmNsb3NlKClcbiAgcHJvY2Vzcy5leGl0KDApXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGNvbm5lY3Rpb24uY2xvc2UoKSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1zcGVlZCA8bGV2ZWw+ICAgICAgICAgICAgc3BlZWQ6IHN0YW5kYXJkfGZhc3RcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgICAgICAgICAgICAgICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIHBsYW4gKE9BdXRoIGluIHlvdXIgYnJvd3NlcilcbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tc3BlZWQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnc3RhbmRhcmQnLCAnZmFzdCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3BlZWQgXCIke2xldmVsfVwiOiB1c2Ugc3RhbmRhcmR8ZmFzdGApXG4gICAgICB9XG4gICAgICBvcHRzLnNwZWVkID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgU2Nyb2xsQm94LCB1c2VGb2N1cywgdXNlTGF5b3V0LCB1c2VJbnRlcnZhbCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IERFRkFVTFRfQUNDRU5ULCBGR19TT0ZULCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuXG5mdW5jdGlvbiBTZXNzaW9uUm93KHsgcm93LCBzZWxlY3RlZCwgZm9jdXMsIG5vdyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0ocm93LmlkLCBsYXlvdXQpXG4gIGNvbnN0IGNvbG9yID0gU0VTU0lPTl9DT0xPUlNbcm93LmNvbG9yXSB8fCByb3cuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlRcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAxLCBoZWlnaHQ6IDIsIGZsZXhTaHJpbms6IDAsIGJnOiBzZWxlY3RlZCA/IGNvbG9yIDogdW5kZWZpbmVkIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBjb2xvciwgYm9sZDogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Ake3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/ICdcdTI1Q0YnIDogJ1x1MjVDQid9ICR7cm93Lm5hbWV9JHtyb3cucnVubmluZ1NoZWxscyA/IGAgICR7cm93LnJ1bm5pbmdTaGVsbHN9ICR7cm93LnJ1bm5pbmdTaGVsbHMgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9YCA6ICcnfWB9PC90ZXh0PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gcm93LmFjdGl2aXR5IHx8ICd3b3JraW5nJyA6IHJvdy5ydW5uaW5nU2hlbGxzID8gcm93LnNoZWxsQWN0aXZpdHkgfHwgJ3NoZWxsIHJ1bm5pbmcnIDogcm93Lmxhc3RNZXNzYWdlQXQgPyBgTGFzdCBtZXNzYWdlICR7dGltZUFnbyhyb3cubGFzdE1lc3NhZ2VBdCl9YCA6ICdpZGxlJ308L3RleHQ+XG4gIDwvYm94PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gV29ya3NwYWNlU2lkZWJhcih7IGdyb3Vwcywgc2VsZWN0ZWQsIHdpZHRoLCBsb2FkaW5nLCBlcnJvciwgb25IZWlnaHQgfSkge1xuICBjb25zdCBmb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgYWN0aXZlOiBmYWxzZSB9KVxuICBjb25zdCBbbm93LCBzZXROb3ddID0gY3JlYXRlU2lnbmFsKERhdGUubm93KCkpXG4gIHVzZUludGVydmFsKCgpID0+IHNldE5vdyhEYXRlLm5vdygpKSwgMTAwMDApXG4gIGlmIChzZWxlY3RlZCkgZm9jdXMuZm9jdXMoc2VsZWN0ZWQpXG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGgsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogJzEwMCUnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYm9yZGVyOiAnc2luZ2xlJywgYm9yZGVyRWRnZXM6IHsgcmlnaHQ6IHRydWUgfSwgYm9yZGVyQ29sb3I6IE1VVEVEIH19PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlLCBwYWRkaW5nWDogMSB9fT5TZXNzaW9uczwvdGV4dD5cbiAgICB7bG9hZGluZyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZzwvdGV4dD59XG4gICAge2Vycm9yICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Vycm9yfTwvdGV4dD59XG4gICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2xsb3dGb2N1cz17Zm9jdXN9IGZvY3VzUGFkZGluZz17MX0gb25NZXRyaWNzPXsobWV0cmljcykgPT4gb25IZWlnaHQobWV0cmljcy52aXNpYmxlSGVpZ2h0KX0+XG4gICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiA8Ym94IGtleT17Z3JvdXAuY3dkfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpbmRleCA+IDAgPyAxIDogMCB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJywgcGFkZGluZ1g6IDEgfX0+e2dyb3VwLmN3ZCA9PT0gaG9tZSA/ICd+JyA6IGdyb3VwLmN3ZC5zdGFydHNXaXRoKGhvbWUgKyAnLycpID8gJ34nICsgZ3JvdXAuY3dkLnNsaWNlKGhvbWUubGVuZ3RoKSA6IGdyb3VwLmN3ZH08L3RleHQ+XG4gICAgICAgIHtncm91cC5zZXNzaW9ucy5tYXAoKHJvdykgPT4gPFNlc3Npb25Sb3cga2V5PXtyb3cuaWR9IHJvdz17cm93fSBzZWxlY3RlZD17cm93LmlkID09PSBzZWxlY3RlZH0gZm9jdXM9e2ZvY3VzfSBub3c9e25vdygpfSAvPil9XG4gICAgICA8L2JveD4pfVxuICAgIDwvU2Nyb2xsQm94PlxuICA8L2JveD5cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjYTc4YmZhJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyM3YzNhZWQnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuZXhwb3J0IGxldCBERUZBVUxUX0FDQ0VOVCA9IFBBTEVUVEVTLmRhcmsuYWNjZW50XG5leHBvcnQgbGV0IEZHID0gUEFMRVRURVMuZGFyay5mZ1xuZXhwb3J0IGxldCBGR19TT0ZUID0gUEFMRVRURVMuZGFyay5mZ1NvZnRcbmV4cG9ydCBsZXQgTVVURUQgPSBQQUxFVFRFUy5kYXJrLm11dGVkXG5leHBvcnQgbGV0IFBBTkVMX0JHID0gUEFMRVRURVMuZGFyay5wYW5lbEJnXG5leHBvcnQgbGV0IFNFTEVDVF9CRyA9IFBBTEVUVEVTLmRhcmsuc2VsZWN0QmdcbmV4cG9ydCBsZXQgUkVEID0gUEFMRVRURVMuZGFyay5yZWRcbmV4cG9ydCBsZXQgR1JFRU4gPSBQQUxFVFRFUy5kYXJrLmdyZWVuXG5leHBvcnQgbGV0IFBFRVIgPSBQQUxFVFRFUy5kYXJrLnBlZXJcbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluZm9ybWF0aW9uJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7cyA9PT0gJ2NoZWNrb3V0JyA/ICd0aGlzIGNoZWNrb3V0JyA6IHN9YH08L3RleHQ+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxQYW5lbCh7IG1vZGVscywgY3VycmVudCwgZGVmYXVsdE5hbWUsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSwgdGl0bGUgPSAnU2VsZWN0IG1vZGVsJywgaGludCA9ICdlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlJyB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwobW9kZWxzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRNb2RlbHMgPSByYW5rRnV6enkobW9kZWxzLCBxdWVyeSgpLCAocSwgbW9kZWwpID0+IGZ1enp5U2NvcmUocSwgbW9kZWwubmFtZSkpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBjdXJzb3IoKSkge1xuICAgICAgb25QaWNrRGVmYXVsdChjdXJzb3IoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtoaW50fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtyYW5rZWRNb2RlbHN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtb2RlbHMuLi5cIlxuICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvcn1cbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIHNjcm9sbG9mZj17MX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBtLmF2YWlsYWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6ICFvZmYsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBvZmYgPyBNVVRFRCA6IEZHIH19PnttLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eycgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gZGVmYXVsdE5hbWUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnsnICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7b2ZmID8gYG5lZWRzICR7bS5rZXlIaW50fWAgOiBtLnByaWNlID8gYCQke20ucHJpY2UuaW59IGluICAkJHttLnByaWNlLm91dH0gb3V0YCA6IG0ucHJvdmlkZXIgPT09ICdjb2RleCcgPyAnc3Vic2NyaXB0aW9uJyA6ICdwcmljZSB1bmtub3duJ31cbiAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e20uZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhpc3RvcnlQYW5lbCh7IHByb21wdHMsIHNjb3Blcywgc2NvcGVJbmRleCwgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHByb21wdHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGFueU1hdGNoID0gcHJvbXB0cy5zb21lKChwKSA9PiBmdXp6eVNjb3JlKHF1ZXJ5KCksIHAudGV4dCkgPj0gMClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlNlYXJjaCBwcm9tcHRzXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgY3RybCtzIHNjb3BlICBlbnRlciB0byBlZGl0ICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtwcm9tcHRzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHByb21wdHMuLi5cIlxuICAgICAgICAgICAgZmlsdGVyPXsocSwgcCkgPT4gZnV6enlTY29yZShxLCBwLnRleHQpID49IDB9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KHApID0+IHNldFByZXZpZXcocCl9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHApID0+IG9uUGljayhwLnRleHQpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19PntwLnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHt0aW1lQWdvKHAuYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIHthbnlNYXRjaCAmJiBwcmV2aWV3KCkgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIHByb21wdHM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZFBpY2tQYW5lbCh7IGVudHJpZXMsIHN0YXRzLCBmb2N1c2VkLCBvblBpY2ssIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoZW50cmllc1swXSB8fCBudWxsKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJSZXdpbmQgdG8gYSBtZXNzYWdlXCIgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlciB0byBjaG9vc2UgIGVzYyB0byBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtlbnRyaWVzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1lc3NhZ2VzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgbS50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhtKSA9PiBzZXRQcmV2aWV3KG0pfVxuICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57bS50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c3RhdHMobS5pbmRleCkubXNnc30gYWZ0ZXJgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7cHJldmlldygpID8gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgcmV3aW5kaW5nIGhlcmUgZHJvcHMgJHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLm1zZ3N9IGVudHJpZXNgfTwvdGV4dD5cbiAgICAgICAgICAgICAge3N0YXRzKHByZXZpZXcoKS5pbmRleCkuZWRpdHMubWFwKChtLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIFx1MjFBOSAke20udGl0bGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgbWVzc2FnZXM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZEFjdGlvblBhbmVsKHsgdGFyZ2V0LCBvcHRpb25zLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25CYWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJld2luZCBvcHRpb25zPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsndG86ICd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGR19TT0ZUIH19Pnt0YXJnZXQudGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtvcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NH1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG8sIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57by5sYWJlbH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7by5kZXNjfWB9PC90ZXh0PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyIHRvIGNvbmZpcm0gIGVzYyB0byBwaWNrIGEgZGlmZmVyZW50IG1lc3NhZ2U8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gdXNlRXNjYXBlKGZvY3VzZWQsIG9uQ2xvc2UpIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKCkpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzdW1lUGFuZWwoeyBzZXNzaW9ucywgc2NvcGVzLCBzY29wZUluZGV4LCBsb2FkaW5nLCBmb2N1c2VkLCBjdXJyZW50SWQsIG9uUGljaywgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoc2Vzc2lvbnNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdsaXN0JylcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZFNlc3Npb25zID0gcmFua0Z1enp5KHNlc3Npb25zLCBxdWVyeSgpLCAocSwgc2Vzc2lvbikgPT4ge1xuICAgIGNvbnN0IGN1c3RvbVNjb3JlID0gc2Vzc2lvbi5jdXN0b21UaXRsZSA/IGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5jdXN0b21UaXRsZSkgOiAtMVxuICAgIGlmIChjdXN0b21TY29yZSA+PSAwKSByZXR1cm4gMjBfMDAwICsgY3VzdG9tU2NvcmVcbiAgICByZXR1cm4gTWF0aC5tYXgoZnV6enlTY29yZShxLCBzZXNzaW9uLmF1dG9tYXRpY1RpdGxlIHx8IHNlc3Npb24udGl0bGUpLCBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY2hlY2tvdXQgfHwgJycpKVxuICB9KVxuICBjb25zdCBzaG93Q2hlY2tvdXRzID0gbmV3IFNldChzZXNzaW9ucy5tYXAoKHNlc3Npb24pID0+IHNlc3Npb24uY2hlY2tvdXQpLmZpbHRlcihCb29sZWFuKSkuc2l6ZSA+IDFcbiAgY29uc3Qgc2VsZWN0ZWRTZXNzaW9uID0gKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHNlbGVjdGVkID0gcHJldmlldygpXG4gICAgcmV0dXJuIHNlc3Npb25zLmluY2x1ZGVzKHNlbGVjdGVkKSA/IHNlbGVjdGVkIDogbnVsbFxuICB9XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRTZXNzaW9uKClcbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBzZWxlY3RlZCkge1xuICAgICAgb25EZWxldGUoc2VsZWN0ZWQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlJlc3VtZSBhIHNlc3Npb25cIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICB0YWI6IHByZXZpZXcgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gcmVzdW1lICBjdHJsK3ggZGVsZXRlICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0MCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHNlc3Npb25zLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiBzZXNzaW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyYW5rZWRTZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0JyAmJiAhbG9hZGluZ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhzKSA9PiBzZXRQcmV2aWV3KHMpfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogKHNob3dDaGVja291dHMgPyBzLmNvbG9yIDogbnVsbCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAge3Nob3dDaGVja291dHMgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVELCBiZzogc2VsZWN0ZWQgPyBudWxsIDogcy5jb2xvciB9fT57YCR7cy5jaGVja291dH0gIGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRywgYmc6IHNlbGVjdGVkIHx8IHNob3dDaGVja291dHMgPyBudWxsIDogcy5jb2xvciB9fT57cy50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHtzLmhlYWRlci5pZCA9PT0gY3VycmVudElkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT4gY3VycmVudDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhzLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS50dXJuc30gJHtzZWxlY3RlZFNlc3Npb24oKS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28oc2VsZWN0ZWRTZXNzaW9uKCkuYXQpfSAgJHtzaG9ydGVuSG9tZShzZWxlY3RlZFNlc3Npb24oKS5oZWFkZXIucm9vdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRTZXNzaW9uKCkucHJldmlld01lc3NhZ2VDb3VudCA+IHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgLSBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aH0gZWFybGllciBtZXNzYWdlcyBvbWl0dGVkYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHsoc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldyB8fCBbXSkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake21lc3NhZ2Uucm9sZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyA/IEZHIDogTVVURUQgfX0+e21lc3NhZ2UudGV4dH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0cmFuc2NyaXB0IHByZXZpZXc8L3RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZW1vcnlQYW5lbCh7IG1lbW9yaWVzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uVG9nZ2xlRGlzYWJsZWQsIG9uRm9yZ2V0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvckl0ZW0sIHNldEN1cnNvckl0ZW1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IHByZXZpZXcgPSBtZW1vcmllcy5pbmNsdWRlcyhjdXJzb3JJdGVtKCkpID8gY3Vyc29ySXRlbSgpIDogbWVtb3JpZXNbMF0gfHwgbnVsbFxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgocCkgPT4gKHAgPT09ICdsaXN0JyA/ICdwcmV2aWV3JyA6ICdsaXN0JykpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcpIHtcbiAgICAgIG9uRm9yZ2V0KHByZXZpZXcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1lbW9yeVwiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGVudGVyOiBlbmFibGUvZGlzYWJsZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGN0cmwreCBmb3JnZXQgKHR3aWNlKSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge21lbW9yaWVzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllcyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21lbW9yaWVzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZW1vcmllcy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgYCR7bS5uYW1lfSAke20uZGVzY3JpcHRpb259YCkgPj0gMH1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvckl0ZW19XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblRvZ2dsZURpc2FibGVkfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBpdGFsaWM6IG0uZGlzYWJsZWQsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiAobS5kaXNhYmxlZCA/IE1VVEVEIDogRkcpIH19PntgJHttLmRpc2FibGVkID8gJyAgICcgOiAnJ30ke20ubmFtZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAge20uZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PiAgc3VwcHJlc3NlZDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7bS5zY29wZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3ByZXZpZXcgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJldmlldyd9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3ByZXZpZXcuZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PlNVUFBSRVNTRUQ8L3RleHQ+fVxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57cHJldmlldy5kZXNjcmlwdGlvbiB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3ByZXZpZXcuYm9keX08L3RleHQ+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1lbW9yaWVzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFZmZvcnRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiAobC5rZXkgPT09IG51bGwgPyAnZGVmYXVsdCcgOiBsLmtleSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiVGhpbmtpbmcgZWZmb3J0XCIgaGludD1cImovayB0byBtb3ZlICBlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bC5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAge2wua2V5ID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gZGVmYXVsdExldmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGVlZFBhbmVsKHsgbGV2ZWxzLCBjdXJyZW50LCBkZWZhdWx0TGV2ZWwsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoTWF0aC5tYXgoMCwgbGV2ZWxzLmZpbmRJbmRleCgobCkgPT4gbC5rZXkgPT09IGN1cnJlbnQpKSlcbiAgY29uc3QgaXRlbXMgPSBsZXZlbHNcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGl0ZW1zW2N1cnNvcigpXSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhYmVsID0gKGwpID0+IGwua2V5ID09PSAnZmFzdCcgPyAnRmFzdCcgOiAnU3RhbmRhcmQnXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNwZWVkXCIgaGludD1cImVudGVyOiBzZXNzaW9uICBjdHJsK3M6IGRlZmF1bHQgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0Q3Vyc29yfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2xhYmVsKGwpLnBhZEVuZChNYXRoLm1heCgxMCwgbGFiZWwobCkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsLnVzYWdlLnJlcGxhY2UoLyB1c2FnZSQvLCAnJyl9IGluY2x1ZGVkIHVzYWdlYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBlYXNlLCBsaW5lYXIsIHVzZUFuaW1hdGVkIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5mdW5jdGlvbiB0b1JnYihjb2xvcikge1xuICBpZiAoY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDMsIDUpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSg1LCA3KSwgMTYpLFxuICAgIF1cbiAgfVxuICByZXR1cm4gWzEyNywgMTI3LCAxMjddXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gZnJvbVxuICBjb25zdCBhID0gdG9SZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHRvUmdiKHRvKVxuICBjb25zdCBjaGFubmVscyA9IGEubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KSlcbiAgcmV0dXJuIGAjJHtjaGFubmVscy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQW5pbWF0ZWRWYWx1ZSh7IHZhbHVlLCBpbml0aWFsID0gdmFsdWUsIGR1cmF0aW9uID0gMTAwMCwgY29sb3IsIGhpZ2hsaWdodCwgYmFja2dyb3VuZCwgZm9ybWF0ID0gU3RyaW5nIH0pIHtcbiAgY29uc3QgZGlzcGxheWVkID0gdXNlQW5pbWF0ZWQoaW5pdGlhbCwgZWFzZShkdXJhdGlvbikpXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKGR1cmF0aW9uLCBsaW5lYXIpKVxuXG4gIGlmICh2YWx1ZSAhPT0gZGlzcGxheWVkLl9hbmltLnRhcmdldCkge1xuICAgIGRpc3BsYXllZC5zZXQodmFsdWUpXG4gICAgZ2xvdy5zbmFwKDEpXG4gICAgZ2xvdy5zZXQoMClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGNvbG9yLCBoaWdobGlnaHQsIGdsb3coKSksIGJnOiBiYWNrZ3JvdW5kIH19PlxuICAgICAge2Zvcm1hdChkaXNwbGF5ZWQoKSl9XG4gICAgPC90ZXh0PlxuICApXG59XG4iLCAiY29uc3QgTEVWRUxTID0gWycgJywgJ1x1MjU4RicsICdcdTI1OEUnLCAnXHUyNThEJywgJ1x1MjU4QycsICdcdTI1OEInLCAnXHUyNThBJywgJ1x1MjU4OScsICdcdTI1ODgnXVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGV4dEJhcihwZXJjZW50LCB3aWR0aCA9IDQpIHtcbiAgY29uc3QgZWlnaHRocyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBwZXJjZW50KSkgKiB3aWR0aCAqIDggLyAxMDApXG4gIGNvbnN0IGZ1bGwgPSBNYXRoLmZsb29yKGVpZ2h0aHMgLyA4KVxuICBjb25zdCBwYXJ0aWFsID0gZWlnaHRocyAlIDhcbiAgcmV0dXJuICdcdTI1ODgnLnJlcGVhdChmdWxsKSArIChwYXJ0aWFsID8gTEVWRUxTW3BhcnRpYWxdIDogJycpICsgJyAnLnJlcGVhdCh3aWR0aCAtIGZ1bGwgLSAocGFydGlhbCA/IDEgOiAwKSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlR3JvdXBzKHJvd3MpIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBpZiAoIXJvdy5uYW1lPy50cmltKCkpIGNvbnRpbnVlXG4gICAgaWYgKCFncm91cHMuaGFzKHJvdy5jd2QpKSBncm91cHMuc2V0KHJvdy5jd2QsIFtdKVxuICAgIGdyb3Vwcy5nZXQocm93LmN3ZCkucHVzaChyb3cpXG4gIH1cbiAgcmV0dXJuIFsuLi5ncm91cHNdLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLm1hcCgoW2N3ZCwgc2Vzc2lvbnNdKSA9PiAoeyBjd2QsIHNlc3Npb25zIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlU2VsZWN0aW9uKHJvd3MsIHNlbGVjdGVkLCBwcmV2aW91cyA9IFtdKSB7XG4gIGlmIChyb3dzLnNvbWUoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpIHJldHVybiBzZWxlY3RlZFxuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHByZXZpb3VzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgcmV0dXJuIHJvd3NbTWF0aC5taW4oaW5kZXgsIHJvd3MubGVuZ3RoIC0gMSldPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VOYXZpZ2F0ZShyb3dzLCBzZWxlY3RlZCwgZXZlbnQsIGhlaWdodCkge1xuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKVxuICBjb25zdCBoYWxmID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyA2KSlcbiAgbGV0IG5leHRcbiAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBpbmRleCArIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IGluZGV4IC0gaGFsZlxuICBlbHNlIGlmIChldmVudC5jdHJsIHx8IGV2ZW50Lm1ldGEgfHwgZXZlbnQuYWx0KSByZXR1cm4gdW5kZWZpbmVkXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gaW5kZXggKyAxXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IGluZGV4IC0gMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSByb3dzLmxlbmd0aCAtIDFcbiAgZWxzZSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiByb3dzW01hdGgubWF4KDAsIE1hdGgubWluKHJvd3MubGVuZ3RoIC0gMSwgbmV4dCkpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cyh0ZXh0LCBhdHRhY2htZW50cykge1xuICByZXR1cm4gWy4uLnRleHQubWF0Y2hBbGwoL1xcWyg/OkltYWdlfEZpbGUpICNcXGQrXFxdL2cpXS5maWx0ZXIobWF0Y2ggPT4gYXR0YWNobWVudHMuaGFzKG1hdGNoWzBdKSkubGVuZ3RoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyKHsgdGV4dCwgYXR0YWNobWVudHMsIGRpY3RhdGlvbiwgY2FwdHVyZSwgcGVuZGluZywgaGlzdG9yeSwgY29tcGxldGlvbiwgY29tbWFuZCwgcXVlc3Rpb24sIHN0ZWVyIH0pIHtcbiAgcmV0dXJuIHRleHQgPT09ICcnICYmIGF0dGFjaG1lbnRzID09PSAwICYmIGRpY3RhdGlvbiA9PT0gJ2lkbGUnICYmIGNhcHR1cmUgPT09ICdpZGxlJyAmJiAhcGVuZGluZyAmJiBoaXN0b3J5IDwgMCAmJiAhY29tcGxldGlvbiAmJiAhY29tbWFuZCAmJiAhcXVlc3Rpb24gJiYgIXN0ZWVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VBY3Rpb24ocm93KSB7XG4gIHJldHVybiByb3c/LnN0YXR1cyA9PT0gJ2J1c3knID8gJ2ludGVycnVwdCcgOiByb3c/LnN0YXR1cyA9PT0gJ2lkbGUnID8gJ2RlbW90ZScgOiBudWxsXG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlU2lkZWJhciB9IGZyb20gJy4vd29ya3NwYWNlLXNpZGViYXIuanN4J1xuaW1wb3J0IHsgd29ya3NwYWNlR3JvdXBzLCB3b3Jrc3BhY2VTZWxlY3Rpb24sIHdvcmtzcGFjZU5hdmlnYXRlLCB3b3Jrc3BhY2VBY3Rpb24sIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHMsIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzJ1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2tpbGxzLmpzJ1xuaW1wb3J0IHsgZXhwYW5kQ29tbWFuZCwgcGFyc2VDb21tYW5kQXJndW1lbnRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21tYW5kcy5qcydcbmltcG9ydCB7IGNvbW1hbmRBdCwgcmVwbGFjZUNvbW1hbmQsIGNvbW1hbmRGaWVsZHMgfSBmcm9tICcuL2NvbXBvc2VyLWNvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZEZvcm0gfSBmcm9tICcuL2NvbW1hbmQtZm9ybS5qc3gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbiB9IGZyb20gJy4uL2RpY3RhdGlvbi5qcydcbmltcG9ydCB7IHJlYWRDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL2NsaXBib2FyZC5qcydcbmltcG9ydCB7IGNyZWF0ZUNsaXBib2FyZElucHV0IH0gZnJvbSAnLi9jbGlwYm9hcmQtaW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb25JbnB1dCB9IGZyb20gJy4vZGljdGF0aW9uLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0IH0gZnJvbSAnLi9zY3JlZW4tY2FwdHVyZS1pbnB1dC5qcydcbmltcG9ydCB7IGNhcHR1cmVSZWdpb24gfSBmcm9tICcuLi9zY3JlZW4tY2FwdHVyZS5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2VyRmlsZXMgfSBmcm9tICcuL2NvbXBvc2VyLWZpbGVzLmpzJ1xuaW1wb3J0IHsgZGljdGF0aW9uSW5kaWNhdG9yLCBhcHBlbmRMZXZlbCB9IGZyb20gJy4vZGljdGF0aW9uLWluZGljYXRvci5qcydcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIG9uQ2xlYW51cCwgTWVudSwgUHJvZ3Jlc3NCYXIsIFNjcm9sbEJveCwgU2hpbW1lciwgU3Bpbm5lciwgVGV4dEFyZWEsIHVzZUZvY3VzLCB1c2VGb2N1c1RyYXAsIHVzZUZyYW1lU3RhdHMsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VMYXlvdXQsIHVzZU1vdXNlLCB1c2VSZXNpemUsIHVzZVNlbGVjdGlvbiwgdXNlVG9hc3QgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGxpc3RTZXNzaW9ucywgZGVsZXRlU2Vzc2lvbiwgZGVsZXRlUHJvamVjdERhdGEgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyB1c2VyRW50cmllcywgcmV3aW5kU3RhdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGxvYWRQcm9qZWN0UHJvbXB0cywgbG9hZEdsb2JhbFByb21wdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2hpc3RvcnkuanMnXG5pbXBvcnQgeyBpbXBsaWNpdFJld2luZFRhcmdldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmV3aW5kLmpzJ1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uLCBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJ1xuaW1wb3J0IHsgU1RFRVJfUk9MRVMsIHN0ZWVyYWJsZVRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N0ZWVyLmpzJ1xuaW1wb3J0IHsgd3JpdGVDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IG9wZW5haVN0YXR1cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBFRkZPUlRfTEVWRUxTLCBTUEVFRF9MRVZFTFMsIFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgYWdlbnRUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC10cmFuc2NyaXB0LmpzJ1xuaW1wb3J0IHsgZnV6enlTY29yZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBjb21wbGV0aW9uQ29udGV4dCwgYXBwbHlDb21wbGV0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21wbGV0aW9uLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlUGF0aHMsIHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsaXN0RmlsZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2ZpbGVzLmpzJ1xuaW1wb3J0IHsgbGlzdFdvcmt0cmVlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvd29ya3RyZWVzLmpzJ1xuaW1wb3J0IHsgb3duZXJSb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9wYXRocy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgYWN0aXZpdHlSb3dzLCBhY3Rpdml0eVN0cmlwU2l6ZXMsIHN0cmlwV2luZG93U3RhcnQgfSBmcm9tICcuL2FjdGl2aXR5LXN0cmlwLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgU3BlZWRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZWZyZXNoLW1vZGVscycsIGRlc2M6ICdSZWZyZXNoIGF2YWlsYWJsZSBtb2RlbHMgZnJvbSBwcm92aWRlcnMnIH0sXG4gIHsgbmFtZTogJ2Nvbm5lY3QnLCBkZXNjOiAnU2lnbiBpbiB3aXRoIENoYXRHUFQgdG8gdXNlIGEgQ29kZXggc3Vic2NyaXB0aW9uJyB9LFxuICB7IG5hbWU6ICdlZmZvcnQnLCBkZXNjOiAnU2V0IHRoZSB0aGlua2luZyBlZmZvcnQgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAnc3BlZWQnLCBkZXNjOiAnU3BlZWQnIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIGNvbnZlcnNhdGlvbicgfSxcbiAgeyBuYW1lOiAnZGVsZXRlJywgZGVzYzogJ1Blcm1hbmVudGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdGFydCBmcmVzaCcgfSxcbiAgeyBuYW1lOiAncHJvamVjdCcsIGRlc2M6ICdTd2l0Y2ggcHJvamVjdHM6IGp1bXAgdG8gYW5vdGhlciBwcm9qZWN0LCBzYW1lIGFzIGN0cmwrcCcgfSxcbiAgeyBuYW1lOiAnY3dkJywgZGVzYzogJ1Nob3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHByb2plY3Qgcm9vdCcgfSxcbiAgeyBuYW1lOiAnc2tpbGxzJywgZGVzYzogJ0xpc3QgZXZlcnkgc2tpbGw6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2NvbW1hbmRzJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnaW5pdCcsIGRlc2M6ICdDcmVhdGUgb3IgaW1wcm92ZSByZXBvc2l0b3J5IEFHRU5UUy5tZCBndWlkYW5jZScgfSxcbiAgeyBuYW1lOiAndG9vbHMnLCBkZXNjOiAnTGlzdCBidWlsdGluIGFuZCB1c2VyLWRlZmluZWQgdG9vbHM7IE1DUCB0b29scyBsaXZlIGluIC9tY3AnIH0sXG4gIHsgbmFtZTogJ3Jld2luZCcsIGRlc2M6ICdSZXN0b3JlIHRoZSBjb252ZXJzYXRpb24gdG8gYSBwcmV2aW91cyBtZXNzYWdlJyB9LFxuICB7IG5hbWU6ICdzdGVlcicsIGRlc2M6ICdFZGl0IG9yIGFkZCBjb252ZXJzYXRpb24gbWVzc2FnZXMgd2l0aG91dCBzZW5kaW5nJyB9LFxuICB7IG5hbWU6ICdoaXN0b3J5JywgZGVzYzogJ1NlYXJjaCBwcm9tcHRzIHlvdSBwcmV2aW91c2x5IHNlbnQnIH0sXG4gIHsgbmFtZTogJ3JlbmFtZScsIGRlc2M6ICdOYW1lIHRoaXMgc2Vzc2lvbjsgb21pdCB0aGUgbmFtZSB0byByZXN0b3JlIGl0cyBhdXRvbWF0aWMgdGl0bGUnIH0sXG4gIHsgbmFtZTogJ2NvbG9yJywgZGVzYzogJ0NvbG9yIHRoaXMgc2Vzc2lvbjogL2NvbG9yIDxuYW1lIG9yICNoZXg+LCAvY29sb3Igbm9uZSB0byBjbGVhcicgfSxcbiAgeyBuYW1lOiAndGhlbWUnLCBkZXNjOiAnUGljayBhIGNvbG9yIHRoZW1lOyAvdGhlbWUgPG5hbWU+IGFwcGxpZXMgb25lIGRpcmVjdGx5JyB9LFxuICB7IG5hbWU6ICdjb25maWcnLCBkZXNjOiAnQ29uZmlndXJlIHBpY28gZGlzcGxheSBhbmQgYmVoYXZpb3InIH0sXG4gIHsgbmFtZTogJ21jcCcsIGRlc2M6ICdNYW5hZ2UgTUNQIHNlcnZlcnM6IGFkZCwgdG9nZ2xlLCByZWNvbm5lY3QnIH0sXG4gIHsgbmFtZTogJ3BhcmFsbGVsJywgZGVzYzogJ1J1biBhIHRhc2sgd2l0aCBwYXJhbGxlbCBhZ2VudHM6IC9wYXJhbGxlbCA8dGFzaz4nIH0sXG4gIHsgbmFtZTogJ2RlbGliZXJhdGUnLCBkZXNjOiAnRGVsaWJlcmF0ZSBvbiBhIGRlY2lzaW9uOiAvZGVsaWJlcmF0ZSA8ZGVjaXNpb24+JyB9LFxuICB7IG5hbWU6ICd3YWtldXBzJywgZGVzYzogJ1ZpZXcgYW5kIGNhbmNlbCBzY2hlZHVsZWQgd2FrZS11cHMnIH0sXG4gIHsgbmFtZTogJ21lbW9yeScsIGRlc2M6ICdCcm93c2UgYW5kIG1hbmFnZSBzYXZlZCBtZW1vcmllczogcHJvamVjdCBhbmQgZ2xvYmFsJyB9LFxuICB7IG5hbWU6ICdjb21wYWN0JywgZGVzYzogJ1N1bW1hcml6ZSB0aGUgY29udmVyc2F0aW9uIHRvIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjbGVhcicsIGRlc2M6ICdDbGVhciB0aGUgY29udmVyc2F0aW9uIGFuZCBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY29zdCcsIGRlc2M6ICdTaG93IHRva2VuIHVzYWdlIGFuZCBlc3RpbWF0ZWQgY29zdCBzbyBmYXInIH0sXG4gIHsgbmFtZTogJ2NvbnRleHQnLCBkZXNjOiBcIlNob3cgd2hhdCdzIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgYW5kIGhvdyBiaWcgZWFjaCBwaWVjZSBpc1wiIH0sXG4gIHsgbmFtZTogJ2V4cG9ydCcsIGRlc2M6ICdTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiB0byBhIG1hcmtkb3duIGZpbGUnIH0sXG4gIHsgbmFtZTogJ3VwZGF0ZScsIGRlc2M6ICdVcGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG0nIH0sXG4gIHsgbmFtZTogJ2hlbHAnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kIGFuZCB3aGF0IGl0IGRvZXMnIH0sXG5dXG5cbmNvbnN0IEhJU1RPUllfU0NPUEVTID0gWydzZXNzaW9uJywgJ3Byb2plY3QnLCAnZXZlcnl3aGVyZSddXG5jb25zdCBNRU1PUllfU0NPUEVTID0gWydhbGwnLCAncHJvamVjdCcsICdnbG9iYWwnXVxuXG5cbmZ1bmN0aW9uIGFnZW50RWxhcHNlZChhZ2VudCwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBpZiAoIWFnZW50LnN0YXJ0ZWRBdCkgcmV0dXJuICd3YWl0aW5nJ1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoKGFnZW50LmVuZGVkQXQgfHwgbm93KSAtIGFnZW50LnN0YXJ0ZWRBdCkgLyAxMDAwKSlcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKVxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKVxuICBpZiAoaG91cnMpIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlcyAlIDYwfW1gXG4gIGlmIChtaW51dGVzKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgXG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmZ1bmN0aW9uIGFnZW50U3RhdHVzKGFnZW50KSB7XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIHsgaWNvbjogJycsIGxhYmVsOiAnJywgY29sb3I6IGFjY2VudCgpIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0MnLCBsYWJlbDogJ3F1ZXVlZCcsIGNvbG9yOiBNVVRFRCB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNGJywgbGFiZWw6ICcnLCBjb2xvcjogR1JFRU4gfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnZmFpbGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MDBENycsIGxhYmVsOiAnZmFpbGVkJywgY29sb3I6IFJFRCB9XG4gIHJldHVybiB7IGljb246ICdcdTI1QTAnLCBsYWJlbDogJ2NhbmNlbGxlZCcsIGNvbG9yOiBNVVRFRCB9XG59XG5cbmZ1bmN0aW9uIFN0ZWVyTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNlbGVjdGVkLCBmb2N1cyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0oaXRlbS5tZXNzYWdlSWQsIGxheW91dClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IHNob3dMb2NrZWQgLz5cbn1cblxuZnVuY3Rpb24gRGljdGF0aW9uS2V5cyh7IGlucHV0IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGlucHV0LmhhbmRsZShldmVudCkpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE1vdXNlRm9jdXNSZWdpb24oeyBjaGlsZHJlbiwgb25QcmVzcywgLi4ucHJvcHMgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSkgb25QcmVzcygpXG4gIH0pXG4gIHJldHVybiA8Ym94IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvYm94PlxufVxuXG5mdW5jdGlvbiBDb21wb3NlckFjdGlvbih7IGljb24sIGFjdGl2ZUljb24sIGFjdGl2ZSA9IGZhbHNlLCBvblByZXNzLCBvbkhvdmVyIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScgJiYgaW5zaWRlICE9PSBob3ZlcmVkKCkpIHtcbiAgICAgIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgICAgb25Ib3Zlcj8uKGluc2lkZSlcbiAgICB9XG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGhpZ2hsaWdodGVkID0gaG92ZXJlZCgpIHx8IGFjdGl2ZVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgYmc6IGhpZ2hsaWdodGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBoaWdobGlnaHRlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAke2hpZ2hsaWdodGVkID8gYWN0aXZlSWNvbiA6IGljb259IGB9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBBZ2VudFN0cmlwUm93KHsgc2VsZWN0ZWQsIGZvY3VzZWQsIGNoaWxkcmVuLCBvblByZXNzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScpIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBmb2N1c2VkID8gYWNjZW50KCkgOiBudWxsLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBob3ZlcmVkKCkgPyBGR19TT0ZUIDogTVVURUQgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHNlbGVjdGVkIH19PntzZWxlY3RlZCA/ICdcdTI3NkYgJyA6ICcgICd9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYm94PlxuICApXG59XG5cbi8vIG9ubHkgdGhlIG5ld2VzdCBzbGljZSBvZiBhIGxvbmcgdHJhbnNjcmlwdCByZW5kZXJzOyBvbGRlciBpdGVtcyBsb2FkIGluXG4vLyBiYXRjaGVzIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgdG9wLiByZW5kZXIgY29zdCBpcyBwZXItaXRlbSwgc28gdGhpc1xuLy8ga2VlcHMgZGF5LWxvbmcgc2Vzc2lvbnMgYXMgZmFzdCBhcyBmcmVzaCBvbmVzXG5jb25zdCBISVNUT1JZX1dJTkRPVyA9IDUwXG5cbmZ1bmN0aW9uIGNvbGxhcHNlU3RlZXJUb29scyhpdGVtcykge1xuICBjb25zdCBjb2xsYXBzZWQgPSBbXVxuICBsZXQgaGlkZGVuID0gMFxuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWhpZGRlbikgcmV0dXJuXG4gICAgY29sbGFwc2VkLnB1c2goeyBraW5kOiAnc3RlZXItdG9vbHMnLCBjb3VudDogaGlkZGVuIH0pXG4gICAgaGlkZGVuID0gMFxuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyB8fCBpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGhpZGRlbiArPSBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyA/IGl0ZW0uaXRlbXMubGVuZ3RoIDogMVxuICAgIH0gZWxzZSB7XG4gICAgICBmbHVzaCgpXG4gICAgICBjb2xsYXBzZWQucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuICBmbHVzaCgpXG4gIHJldHVybiBjb2xsYXBzZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGJvb3QsIGNvbnRyb2xsZXI6IGN0bCB9KSB7XG4gIGNvbnN0IHsgY3dkLCByb290LCB2ZXJzaW9uLCBza2lsbHMsIG1jcCB9ID0gYm9vdFxuICBjb25zdCBzdGF0ZSA9IGN0bC5zdGF0ZVxuICBjb25zdCBbd29ya3NwYWNlT3Blbiwgc2V0V29ya3NwYWNlT3Blbl0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VSb3dzLCBzZXRXb3Jrc3BhY2VSb3dzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3dvcmtzcGFjZVNlbGVjdGVkLCBzZXRXb3Jrc3BhY2VTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3dvcmtzcGFjZUxvYWRpbmcsIHNldFdvcmtzcGFjZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbd29ya3NwYWNlRXJyb3IsIHNldFdvcmtzcGFjZUVycm9yXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3dvcmtzcGFjZUhlaWdodCwgc2V0V29ya3NwYWNlSGVpZ2h0XSA9IGNyZWF0ZVNpZ25hbCgyMClcbiAgY29uc3QgW3dvcmtzcGFjZVBlbmRpbmcsIHNldFdvcmtzcGFjZVBlbmRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCB3b3Jrc3BhY2VHcm91cHNOb3cgPSB3b3Jrc3BhY2VHcm91cHMod29ya3NwYWNlUm93cygpKVxuICBjb25zdCB3b3Jrc3BhY2VTZXNzaW9ucyA9IHdvcmtzcGFjZUdyb3Vwc05vdy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hXb3Jrc3BhY2UoKSB7XG4gICAgaWYgKCFib290LndvcmtzcGFjZSB8fCBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZykgcmV0dXJuXG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBib290LndvcmtzcGFjZS5saXN0KClcbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VHcm91cHMocm93cykuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnNlc3Npb25zKVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB3b3Jrc3BhY2VTZWxlY3Rpb24obmV4dCwgd29ya3NwYWNlU2VsZWN0ZWQoKSwgd29ya3NwYWNlU2Vzc2lvbnMpXG4gICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChzZWxlY3RlZClcbiAgICAgIHNldFdvcmtzcGFjZVJvd3Mocm93cylcbiAgICAgIHNldFdvcmtzcGFjZUVycm9yKCcnKVxuICAgICAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgYXdhaXQgYm9vdC53b3Jrc3BhY2UucHJldmlldyhzZWxlY3RlZClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHNlc3Npb25zIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nID0gZmFsc2VcbiAgICAgIHNldFdvcmtzcGFjZUxvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG4gIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlID0gcmVmcmVzaFdvcmtzcGFjZVxuICB1c2VJbnRlcnZhbCgoKSA9PiB7IGlmICh3b3Jrc3BhY2VPcGVuKCkpIHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSB9LCAxMDAwKVxuICBpZiAoYm9vdC53b3Jrc3BhY2UgJiYgIWJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkKSB7XG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSB0cnVlXG4gICAgY29uc3QgY2xlYW51cCA9IGJvb3Qud29ya3NwYWNlLnN1YnNjcmliZT8uKCgpID0+IHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSlcbiAgICBvbkNsZWFudXAoKCkgPT4geyBjbGVhbnVwPy4oKTsgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSBmYWxzZSB9KVxuICB9XG4gIGNvbnN0IFttb2RlbHMsIHNldE1vZGVsc10gPSBjcmVhdGVTaWduYWwoYm9vdC5tb2RlbHMpXG4gIGNvbnN0IFtyZWZyZXNoaW5nTW9kZWxzLCBzZXRSZWZyZXNoaW5nTW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIGNvbnN0IFt0ZXJtaW5hbEhlaWdodCwgc2V0VGVybWluYWxIZWlnaHRdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQpXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IHsgc2V0VGVybWluYWxXaWR0aCh3aWR0aCk7IHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgfSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2NhcHR1cmVTdGF0dXMsIHNldENhcHR1cmVTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2NvbXBvc2VyQWN0aW9uTGFiZWwsIHNldENvbXBvc2VyQWN0aW9uTGFiZWxdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5tb2RlbClcbiAgY29uc3QgW2RlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gIGNvbnN0IFtlZmZvcnQsIHNldEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZWZmb3J0KVxuICBjb25zdCBbZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgY29uc3QgW3NwZWVkLCBzZXRTcGVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3BlZWQpXG4gIGNvbnN0IFtzcGVlZERlZmF1bHRzLCBzZXRTcGVlZERlZmF1bHRzXSA9IGNyZWF0ZVNpZ25hbCh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgY29uc3QgW3Nob3dTcGVlZFBhbmVsLCBzZXRTaG93U3BlZWRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZXMsIHNldFJlc3VtZVNjb3Blc10gPSBjcmVhdGVTaWduYWwoWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuICByZWZzLnJlc3VtZU9wZW4gPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGNvbnN0IFtwZWVyU3RhdHVzLCBzZXRQZWVyU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBmdW5jdGlvbiBzeW5jRnJvbUNvbnRyb2xsZXIoKSB7XG4gICAgc2V0UGVlclN0YXR1cyhzdGF0ZS5wZWVyRXJyb3IgPyBgcGVlciBkaXNjb25uZWN0ZWQ6ICR7c3RhdGUucGVlckVycm9yfWAgOiBzdGF0ZS5wZWVyUGF1c2VkICYmIHN0YXRlLnBlZXJDb25uZWN0aW9uID8gJ3BlZXIgcmVzcG9uc2VzIHBhdXNlZCcgOiAnJylcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3Ioc3BlZWQsIHNldFNwZWVkLCBzdGF0ZS5zcGVlZClcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3BlZWREZWZhdWx0cygpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGUuc3BlZWREZWZhdWx0cykpIHNldFNwZWVkRGVmYXVsdHMoeyAuLi5zdGF0ZS5zcGVlZERlZmF1bHRzIH0pXG4gICAgbWlycm9yKGVmZm9ydCwgc2V0RWZmb3J0LCBzdGF0ZS5lZmZvcnQpXG4gICAgbWlycm9yKGRlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnQsIHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gICAgbWlycm9yKHF1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0LCBzdGF0ZS5xdWVzdGlvbilcbiAgICBtaXJyb3IocXVldWVkLCBzZXRRdWV1ZWQsIHN0YXRlLnF1ZXVlZClcbiAgICBtaXJyb3IoZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWQsIHN0YXRlLmV4cGVkaXRlZClcbiAgICBtaXJyb3Ioc2VudCwgc2V0U2VudCwgc3RhdGUuc2VudClcbiAgICBtaXJyb3IoYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbiwgc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICB9XG5cbiAgLy8gdHJlbmQgcmUtcnVucyB0aGlzIGNvbXBvbmVudCBvbiBldmVyeSBzaWduYWwgY2hhbmdlLCBzbyB0aGUgY29udHJvbGxlclxuICAvLyBpcyBzdWJzY3JpYmVkIG9uY2UgYW5kIGVhY2ggaGFuZGxlciByZWFjaGVzIHRoZSBuZXdlc3QgcmVuZGVyIHRocm91Z2hcbiAgLy8gcmVmcy51aSwgd2hpY2ggaXMgcmVwbGFjZWQgYmVsb3cgb24gZXZlcnkgcGFzc1xuICByZWZzLnVpID0ge1xuICAgIHN5bmM6IHN5bmNGcm9tQ29udHJvbGxlcixcbiAgICBmbGFzaDogKG1lc3NhZ2UpID0+IGZsYXNoKG1lc3NhZ2UpLFxuICAgIGRlcml2ZWQ6IChuZXh0KSA9PiB7XG4gICAgICBzZXRBY2NlbnQobmV4dC5jb2xvcilcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogbmV4dC5jb2xvciB8fCBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfSxcbiAgICBxdWVzdGlvbjogKCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gICAgfSxcbiAgICB0dXJuOiAoKSA9PiB7XG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfSxcbiAgICBpbnB1dDogKHRleHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRJbnB1dCh0ZXh0KVxuICAgIH0sXG4gICAgc2Vzc2lvbjogKCkgPT4ge1xuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0sXG4gICAgcmVzdW1lZDogKG1ldGEpID0+IGZsYXNoKGByZXN1bWVkICAke21ldGEudHVybnN9ICR7bWV0YS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28obWV0YS5hdCl9YCksXG4gICAgcHJvamVjdDogKG5leHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDtwaWNvICAke25leHQucm9vdC5zcGxpdCgnLycpLnBvcCgpfVxceDA3YClcbiAgICAgIHNldE1jcFNlcnZlcnMobmV4dC5tY3AubGlzdCgpKVxuICAgICAgc2V0RmlsZUxpc3QoW10pXG4gICAgfSxcbiAgICBtY3A6IChzZXJ2ZXJzKSA9PiBzZXRNY3BTZXJ2ZXJzKHNlcnZlcnMpLFxuICAgIHNoZWxsczogKCkgPT4gc2V0U2hlbGxzVmVyc2lvbigodikgPT4gdiArIDEpLFxuICAgIGdpdDogKCkgPT4gc2V0R2l0VmVyc2lvbigodikgPT4gdiArIDEpLFxuICB9XG4gIGlmICghcmVmcy5zdWJzY3JpYmVkKSB7XG4gICAgcmVmcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGN0bC5vbignY2hhbmdlJywgKCkgPT4gcmVmcy51aS5zeW5jKCkpXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZmxhc2gnLCAnZGVyaXZlZCcsICdxdWVzdGlvbicsICd0dXJuJywgJ2lucHV0JywgJ3Nlc3Npb24nLCAncmVzdW1lZCcsICdwcm9qZWN0JywgJ21jcCcsICdzaGVsbHMnLCAnZ2l0J10pIHtcbiAgICAgIGN0bC5vbih0eXBlLCAocGF5bG9hZCkgPT4gcmVmcy51aVt0eXBlXShwYXlsb2FkKSlcbiAgICB9XG4gIH1cbiAgc3luY0Zyb21Db250cm9sbGVyKClcblxuICBjb25zdCBza2lsbENvbW1hbmRzID0gc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogYHNraWxsICAke3MuZGVzY3JpcHRpb24gfHwgcy5zb3VyY2V9YCwgc2tpbGw6IHRydWUgfSkpXG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IGJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoYykgPT4gKHsgbmFtZTogYy5uYW1lLCBkZXNjOiBgY29tbWFuZCAgJHtjLmRlc2NyaXB0aW9uIHx8IGMuc291cmNlfWAsIGNvbW1hbmQ6IHRydWUgfSkpXG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoKVxuICBjb25zdCBzaGFkb3dlZCA9IFtdXG4gIGZvciAoY29uc3QgYyBvZiBbLi4uQ09NTUFORFMsIC4uLnNraWxsQ29tbWFuZHMsIC4uLnVzZXJDb21tYW5kc10pIHtcbiAgICBpZiAoYnlOYW1lLmhhcyhjLm5hbWUpKSBzaGFkb3dlZC5wdXNoKGAke2Muc2tpbGwgPyAnc2tpbGwnIDogJ2NvbW1hbmQnfSBcIiR7Yy5uYW1lfVwiYClcbiAgICBlbHNlIGJ5TmFtZS5zZXQoYy5uYW1lLCBjKVxuICB9XG4gIGNvbnN0IGFsbENvbW1hbmRzID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV1cbiAgaWYgKHNoYWRvd2VkLmxlbmd0aCAmJiAhcmVmcy53YXJuZWRTaGFkb3dlZCkge1xuICAgIHJlZnMud2FybmVkU2hhZG93ZWQgPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiBmbGFzaChgc2hhZG93ZWQgYnkgYW4gZWFybGllciBuYW1lLCByZW5hbWUgdG8gdXNlOiAke3NoYWRvd2VkLmpvaW4oJywgJyl9YCksIDApXG4gIH1cblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogMzUwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCcsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gPHRleHQgc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke21lc3NhZ2V9IGB9PC90ZXh0PixcbiAgfSlcblxuICBjb25zdCB1cGRhdGVUb2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogODAwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IChcbiAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpIH19PlxuICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfT57YCAke21lc3NhZ2V9IGB9PC9TaGltbWVyPlxuICAgICAgPC9ib3g+XG4gICAgKSxcbiAgfSlcblxuICBmdW5jdGlvbiBmbGFzaChtc2cpIHtcbiAgICB0b2FzdChtc2cpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTW9kZWxzKCkge1xuICAgIGlmIChyZWZyZXNoaW5nTW9kZWxzKCkpIHJldHVyblxuICAgIHNldFJlZnJlc2hpbmdNb2RlbHModHJ1ZSlcbiAgICBmbGFzaCgncmVmcmVzaGluZyBtb2RlbHMnKVxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCBib290LnJlZnJlc2hNb2RlbHMoKVxuICAgICAgYm9vdC5tb2RlbHMgPSByZWZyZXNoZWRcbiAgICAgIHNldE1vZGVscyhyZWZyZXNoZWQpXG4gICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQpXG4gICAgICBmbGFzaChgbW9kZWxzIHJlZnJlc2hlZCAgJHtyZWZyZXNoZWQubGVuZ3RofSBtb2RlbHMgICR7ZWxhcHNlZH1tc2ApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbW9kZWwgcmVmcmVzaCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG4gIHJlZnMuY2FwdHVyZUltYWdlID8/PSBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoe1xuICAgIGNhcHR1cmVSZWdpb24sXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgICBvblN0YXR1czogc2V0Q2FwdHVyZVN0YXR1cyxcbiAgfSlcblxuICBpZiAoIXJlZnMuZGljdGF0aW9uKSB7XG4gICAgcmVmcy5kaWN0YXRpb24gPSBjcmVhdGVEaWN0YXRpb24oe1xuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0RGljdGF0aW9uU3RhdHVzKHN0YXR1cylcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHNldERpY3RhdGlvbkxldmVscyhbXSlcbiAgICAgIH0sXG4gICAgICBvbkxldmVsOiAobGV2ZWwpID0+IHNldERpY3RhdGlvbkxldmVscyhhcHBlbmRMZXZlbChkaWN0YXRpb25MZXZlbHMoKSwgbGV2ZWwpKSxcbiAgICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKGBkaWN0YXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCksXG4gICAgfSlcbiAgICByZWZzLmRpY3RhdGlvbklucHV0ID0gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb246IHJlZnMuZGljdGF0aW9uLCBnZXRJbnB1dDogaW5wdXQsIHNldElucHV0IH0pXG4gICAgY29uc3QgcHJlbG9hZCA9IHNldEltbWVkaWF0ZSgoKSA9PiByZWZzLmRpY3RhdGlvbi5wcmVsb2FkKCkpXG4gICAgcHJlbG9hZC51bnJlZigpXG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xlYXJJbW1lZGlhdGUocHJlbG9hZClcbiAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBbc2lnbmFsLCBjb2RlXSBvZiBbWydTSUdURVJNJywgMTQzXSwgWydTSUdIVVAnLCAxMjldXSkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVmcy51cGRhdGVDaGVja2VkKSB7XG4gICAgcmVmcy51cGRhdGVDaGVja2VkID0gdHJ1ZVxuICAgIGNoZWNrRm9yVXBkYXRlKHZlcnNpb24pLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSByZXR1cm5cbiAgICAgIHVwZGF0ZVRvYXN0KGBwaWNvIHYke2ZvdW5kLnZlcnNpb259IGF2YWlsYWJsZSAgL3VwZGF0ZWApXG4gICAgICBmb3VuZC5tYXJrTm90aWZpZWQoKVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgY29uc3QgcGVyZm9ybUNvbXBhY3Rpb24gPSBjdGwuY29tcGFjdFxuXG4gIGZ1bmN0aW9uIGNvbXBsZXRpb25Tb3VyY2UobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnc3BlZWQnKSByZXR1cm4gU1BFRURfTEVWRUxTLm1hcCgobCkgPT4gbC5rZXkpXG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7Ym9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJ30pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycgOiBwcmVmXG4gIH1cblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGNvbnN0IFtzdGVlckRlcml2ZWQsIHNldFN0ZWVyRGVyaXZlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgbGV0IHN0ZWVyUHJldmlld1JlcXVlc3QgPSAwXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gc3RlZXIoKT8uY2hhbmdlc1xuICAgIGlmICghY2hhbmdlcz8ubGVuZ3RoKSByZXR1cm4gZGVyaXZlZCgpXG4gICAgaWYgKHJlZnMuc3RlZXJQcmV2aWV3Q2hhbmdlcyAhPT0gY2hhbmdlcykge1xuICAgICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gY2hhbmdlc1xuICAgICAgY29uc3QgcmVxdWVzdCA9ICsrc3RlZXJQcmV2aWV3UmVxdWVzdFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGN0bC5wcmV2aWV3U3RlZXIoY2hhbmdlcykpLnRoZW4obmV4dCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0ID09PSBzdGVlclByZXZpZXdSZXF1ZXN0KSBzZXRTdGVlckRlcml2ZWQobmV4dClcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgIH1cbiAgICByZXR1cm4gc3RlZXJEZXJpdmVkKCkgfHwgZGVyaXZlZCgpXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZEZ1bGxIaXN0b3J5KCkge1xuICAgIGlmIChjdGwubG9hZEhpc3RvcnkgJiYgKHN0YXRlLmRlcml2ZWQudHJhbnNjcmlwdE9mZnNldCB8fCAwKSA+IDApIGF3YWl0IGN0bC5sb2FkSGlzdG9yeShJbmZpbml0eSlcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBsb2FkT2xkZXJIaXN0b3J5KCkge1xuICAgIGlmICghY3RsLmxvYWRIaXN0b3J5IHx8IHJlZnMuaGlzdG9yeUxvYWRpbmcgfHwgIShzdGF0ZS5kZXJpdmVkLnRyYW5zY3JpcHRPZmZzZXQgPiAwKSkgcmV0dXJuXG4gICAgcmVmcy5oaXN0b3J5TG9hZGluZyA9IHRydWVcbiAgICB0cnkgeyBhd2FpdCBjdGwubG9hZEhpc3Rvcnkoc3RhdGUuZGVyaXZlZC50cmFuc2NyaXB0Lmxlbmd0aCArIEhJU1RPUllfV0lORE9XKSB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGZsYXNoKGVycm9yLm1lc3NhZ2UpIH1cbiAgICBmaW5hbGx5IHsgcmVmcy5oaXN0b3J5TG9hZGluZyA9IGZhbHNlIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGF3YWl0IGxvYWRGdWxsSGlzdG9yeSgpXG4gICAgc2V0U3RlZXJEZXJpdmVkKG51bGwpXG4gICAgcmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzID0gbnVsbFxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoYywgYXJncykuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSB7XG4gICAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgcmV0dXJuIGN0bC5mb3JrKGFyZ3MudHJpbSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnc3BlZWQnKSB7XG4gICAgICBpZiAoIXNwZWVkQXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1NwZWVkUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3BlZWRDb21tYW5kKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93U3BlZWRQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFhd2FpdCBjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IHNwZWVkQXBwbGllcyA9IGN0bC5zcGVlZEFwcGxpZXNcbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5hY3Rpdml0eSgpKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5zaGVsbFJvd3MoKSlcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSAmJiAhYW55UGFuZWwoKSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JylcbiAgY29uc3QgYWN0aXZpdHlNYXJnaW4gPSAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHx8ICFzaG93Q29tcG9zZXJBY3Rpb25zID8gMSA6IDBcbiAgY29uc3QgW3NoZWxsU3RyaXBTaXplLCBhZ2VudFN0cmlwU2l6ZV0gPSBhY3Rpdml0eVN0cmlwU2l6ZXModGVybWluYWxIZWlnaHQoKSwgW3NoZWxsUm93cy5sZW5ndGgsIGFnZW50Um93cy5sZW5ndGhdLCBhY3Rpdml0eU1hcmdpbilcbiAgaWYgKHF1ZXN0aW9uUmVxdWVzdCgpKSB7XG4gICAgZm0uaXRlbSgncXVlc3Rpb24nKVxuICAgIGlmICghZm0uaXMoJ3F1ZXN0aW9uJykpIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkgZm0uaXRlbSgnaW5wdXQnKVxuICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgZm0uZ3JvdXAoJ2FjdGl2aXR5LXN0cmlwJywgeyBpdGVtczogWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnc2hlbGwtc3RyaXAnLCB7IGl0ZW1zOiBbJ3NoZWxsLW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgICAgaWYgKGFnZW50Um93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnYWdlbnQtc3RyaXAnLCB7IGl0ZW1zOiBbJ2FnZW50LW1haW4nLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIHtcbiAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSBmYWxzZVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9XG4gIH1cbiAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgeyBmbS5pdGVtKCd3b3Jrc3BhY2UnKTsgZm0uZm9jdXMoJ3dvcmtzcGFjZScpIH1cbiAgZWxzZSBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UpIHtcbiAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IGZhbHNlXG4gICAgZm0uZm9jdXMocXVlc3Rpb25SZXF1ZXN0KCkgPyAncXVlc3Rpb24nIDogJ2lucHV0JylcbiAgfVxuICB1c2VGb2N1c1RyYXAod29ya3NwYWNlT3BlbigpIHx8IGFueVBhbmVsKCkgfHwgdmlldygpID09PSAnaGVscCcpXG4gIHVzZVNlbGVjdGlvbih7XG4gICAgb25Db3B5OiAodGV4dCkgPT4gZmxhc2goYGNvcGllZCAke3RleHQubGVuZ3RofSAke3RleHQubGVuZ3RoID09PSAxID8gJ2NoYXJhY3RlcicgOiAnY2hhcmFjdGVycyd9YCksXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzaGVsbCkgPT4gYHNoZWxsLSR7c2hlbGwuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGFnZW50KSA9PiBgYWdlbnQtJHthZ2VudC5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgY29uc3QgcGFnZVNpemUgPSBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwYWdlU2l6ZSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gTWF0aC5tYXgoMCwgY3VycmVudCAtIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFnZVNpemUgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoKHByZWZpeCA9PT0gJ3NoZWxsJyA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemUpIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcigocHJlZml4ID09PSAnc2hlbGwnID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZSkgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAod29ya3NwYWNlT3BlbigpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlUGVuZGluZyh0cnVlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlLmNhbmNlbFByZXZpZXcoKVxuICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gdHJ1ZVxuICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4oZmFsc2UpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHJldHVybiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHdvcmtzcGFjZVBlbmRpbmcoKSkgcmV0dXJuXG4gICAgICBjb25zdCBuZXh0ID0gd29ya3NwYWNlTmF2aWdhdGUod29ya3NwYWNlU2Vzc2lvbnMsIHdvcmtzcGFjZVNlbGVjdGVkKCksIGV2ZW50LCB3b3Jrc3BhY2VIZWlnaHQoKSlcbiAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQobmV4dClcbiAgICAgICAgdm9pZCBib290LndvcmtzcGFjZS5wcmV2aWV3KG5leHQpLmNhdGNoKGVycm9yID0+IHNldFdvcmtzcGFjZUVycm9yKGBwcmV2aWV3IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzcGFjZVNlc3Npb25zLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSB3b3Jrc3BhY2VTZWxlY3RlZCgpKVxuICAgICAgaWYgKCFyb3cpIHJldHVyblxuICAgICAgY29uc3QgYXR0YWNoID0gIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEgJiYgIWV2ZW50LmFsdCAmJiAoZXZlbnQua2V5ID09PSAncmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ2wnIHx8IGV2ZW50LmtleSA9PT0gJ3JldHVybicpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgZWxzZSBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgZWxzZSBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBlbHNlIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3QnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdwJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgb3BlblByb2plY3RQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvcmRlciA9IFtudWxsLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgICAgIGNvbnN0IG5leHQgPSBvcmRlclsob3JkZXIuaW5kZXhPZihlZmZvcnQoKSA/PyBudWxsKSArIDEpICUgb3JkZXIubGVuZ3RoXVxuICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KG5leHQpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dIaXN0b3J5UGFuZWwoKSkge1xuICAgICAgc3dpdGNoSGlzdFNjb3BlKChoaXN0U2NvcGUoKSArIDEpICUgSElTVE9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgICAgc2V0TWVtU2NvcGUoKHMpID0+IChzICsgMSkgJSBNRU1PUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAocmVzdW1lU2NvcGUoKSArIDEpICUgcmVzdW1lU2NvcGVzKCkubGVuZ3RoXG4gICAgICBzZXRSZXN1bWVTY29wZShuZXh0KVxuICAgICAgcmVmcmVzaFNlc3Npb25zKG5leHQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3onICYmIHN0YXRlLnJld2luZFVuZG8gJiYgIWJ1c3koKSAmJiB2aWV3KCkgPT09ICdjaGF0Jykge1xuICAgICAgdW5kb1Jld2luZCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmbXRFbGFwc2VkID0gKHMpID0+IChzIDwgNjAgPyBgJHtzfXNgIDogYCR7TWF0aC5mbG9vcihzIC8gNjApfW0gJHtzICUgNjB9c2ApXG4gIGNvbnN0IGVsYXBzZWQgPSBmbXRFbGFwc2VkKGJ1c3koKSA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydGVkQXQoKSkgLyAxMDAwKSkgOiAwKVxuXG4gIGNvbnN0IHNsYXNoUmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSlcbiAgY29uc3Qgc2xhc2hRdWVyeSA9IHNsYXNoUmFuZ2U/LnF1ZXJ5ID8/IG51bGxcbiAgY29uc3Qgc2hvd0NvbW1hbmRzID0gc2xhc2hSYW5nZSAhPT0gbnVsbCAmJiAhYW55UGFuZWwoKVxuICBjb25zdCBtYXRjaGVkQ29tbWFuZHMgPSAhc2hvd0NvbW1hbmRzXG4gICAgPyBbXVxuICAgIDogY21kQ3ljbGUoKVxuICAgICAgPyBjbWRDeWNsZSgpLm1hdGNoZXNcbiAgICAgIDogYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiAoYy5jb21tYW5kIHx8IChzbGFzaFJhbmdlLnN0YXJ0ID09PSAwICYmIHNsYXNoUmFuZ2UuZW5kID09PSBpbnB1dCgpLmxlbmd0aCkpICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2xhc2hRdWVyeS50b0xvd2VyQ2FzZSgpKSlcblxuICBjb25zdCBhdE1hdGNoID0gaW5wdXQoKS5tYXRjaCgvKF58W1xccyhdKUAoW15cXHNAXSopJC8pXG4gIGNvbnN0IHNob3dGaWxlcyA9IGF0TWF0Y2ggIT09IG51bGwgJiYgIXNob3dDb21tYW5kcyAmJiAhZmlsZXNEaXNtaXNzZWQoKSAmJiAhYW55UGFuZWwoKVxuICBpZiAoc2hvd0ZpbGVzKSB7XG4gICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgfSlcbiAgfVxuICBjb25zdCBtYXRjaGVkRmlsZXMgPSBzaG93RmlsZXNcbiAgICA/IGZpbGVMaXN0KClcbiAgICAgICAgLm1hcCgoZikgPT4gW2Z1enp5U2NvcmUoYXRNYXRjaFsyXSwgZiksIGZdKVxuICAgICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gICAgICAgIC5tYXAoKFssIGZdKSA9PiBmKVxuICAgIDogW11cblxuICBhc3luYyBmdW5jdGlvbiBwaWNrRmlsZShmKSB7XG4gICAgY29uc3QgdiA9IGlucHV0KClcbiAgICBjb25zdCBhdCA9IHYubGFzdEluZGV4T2YoJ0AnKVxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYXdhaXQgY3RsLmF0dGFjaFByb2plY3RGaWxlKGYpXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVyICsgJyAnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0ICsgMSkgKyBmICsgJyAnKVxuICAgIH1cbiAgICBzZXRGaWxlSW5kZXgoMClcbiAgfVxuXG4gIGNvbnN0IGNvbXBDdHggPSBjb21wbGV0aW5nKCkgPyBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBpbnB1dCgpLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pIDogbnVsbFxuICBjb25zdCBzaG93Q29tcGxldGlvbiA9ICEhY29tcEN0eCAmJiBjb21wQ3R4Lm1hdGNoZXMubGVuZ3RoID4gMCAmJiAhc2hvd0NvbW1hbmRzICYmICFzaG93RmlsZXMgJiYgIWFueVBhbmVsKClcblxuICBjb25zdCByZXdpbmRFbnRyaWVzID0gKCkgPT4gdXNlckVudHJpZXMoZGVyaXZlZCgpKVxuICBjb25zdCByZXdpbmRPcHRpb25zID0gKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXdpbmRUYXJnZXQoKVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW11cbiAgICBjb25zdCB7IG1zZ3MsIGVkaXRzIH0gPSByZXdpbmRTdGF0cyhkZXJpdmVkKCksIHRhcmdldC5pbmRleClcbiAgICBjb25zdCBlID0gZWRpdHMubGVuZ3RoXG4gICAgY29uc3QgZWRpdHNMYWJlbCA9IGAke2V9ICR7ZSA9PT0gMSA/ICdlZGl0JyA6ICdlZGl0cyd9YFxuICAgIGNvbnN0IG9wdHMgPSBbXVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnYm90aCcsIGxhYmVsOiAncmVzdG9yZSBjb2RlIGFuZCBjb252ZXJzYXRpb24nLCBkZXNjOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goe1xuICAgICAga2V5OiAnY2hhdCcsXG4gICAgICBsYWJlbDogZSA+IDAgPyAncmVzdG9yZSBjb252ZXJzYXRpb24gb25seScgOiAncmVzdG9yZSBjb252ZXJzYXRpb24nLFxuICAgICAgZGVzYzogZSA+IDAgPyAnY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZmlsZSBjaGFuZ2VzIGtlcHQnIDogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGRyb3BzICR7bXNnc30gZW50cmllc2AsXG4gICAgfSlcbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2NvZGUnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBvbmx5JywgZGVzYzogYGNvbnZlcnNhdGlvbiBrZXB0ICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7IGtleTogJ3N1bW1hcnknLCBsYWJlbDogJ3Jld2luZCBhbmQga2VlcCBhIHN1bW1hcnknLCBkZXNjOiAnZHJvcHBlZCBlbnRyaWVzIGNvbGxhcHNlIGludG8gYSBvbmUtbGluZSBub3RlJyB9KVxuICAgIHJldHVybiBvcHRzXG4gIH0pKClcblxuICBjb25zdCB1c2FnZSA9IGxpdmVVc2FnZSgpIHx8IGRlcml2ZWQoKS51c2FnZUFjdGl2ZVxuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IG1vZGVsKCkuY29udGV4dCA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0TW9kZWwgPT09IG1vZGVsKCkubmFtZVxuICAgID8gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyAvIG1vZGVsKCkuY29udGV4dCkgKiAxMDApKVxuICAgIDogMFxuICBjb25zdCB2aXNpYmxlU2hlbGxzID0gc2hlbGxSb3dzXG4gIGNvbnN0IHZpZXdlZFNoZWxsID0gdmlld2VkU2hlbGxJZCgpID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSB2aWV3ZWRTaGVsbElkKCkpIDogbnVsbFxuICBjb25zdCBjb21iaW5lZEFjdGl2aXR5ID0gdmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwXG4gIGNvbnN0IHNoZWxsU3RyaXBGb2N1cyA9IGZtLmlzKCdzaGVsbC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGxJZCA9IHNoZWxsU3RyaXBGb2N1cyAmJiBzaGVsbFN0cmlwRm9jdXMgIT09ICdzaGVsbC1tYWluJyA/IHNoZWxsU3RyaXBGb2N1cy5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGwgPSBmb2N1c2VkU2hlbGxJZCA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gZm9jdXNlZFNoZWxsSWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRTaGVsbCA9IGZvY3VzZWRTaGVsbCB8fCB2aWV3ZWRTaGVsbFxuICBjb25zdCBzaGVsbEFjdGlvbkhpbnQgPSBoaW50ZWRTaGVsbCA/IGBjdHJsK3ggJHtoaW50ZWRTaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICdraWxsJyA6ICdkaXNtaXNzJ31gIDogJydcbiAgY29uc3Qgc2hlbGxXaW5kb3dUYXJnZXQgPSBzaGVsbFN0cmlwRm9jdXMgPT09ICdzaGVsbC1tYWluJyA/IDAgOiB2aXNpYmxlU2hlbGxzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gKGZvY3VzZWRTaGVsbElkIHx8IHZpZXdlZFNoZWxsSWQoKSkpXG4gIGNvbnN0IHNoZWxsV2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KHNoZWxsV2luZG93T2Zmc2V0KCksIHNoZWxsV2luZG93VGFyZ2V0LCB2aXNpYmxlU2hlbGxzLmxlbmd0aCwgc2hlbGxTdHJpcFNpemUpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsU3RyaXBTaXplKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgYWdlbnRTdHJpcFNpemUpXG4gIGlmIChhZ2VudFdpbmRvd1N0YXJ0ICE9PSBhZ2VudFdpbmRvd09mZnNldCgpKSBzZXRBZ2VudFdpbmRvd09mZnNldChhZ2VudFdpbmRvd1N0YXJ0KVxuICBjb25zdCBhZ2VudFdpbmRvdyA9IHZpc2libGVBZ2VudHMuc2xpY2UoYWdlbnRXaW5kb3dTdGFydCwgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50U3RyaXBTaXplKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdW5yZWFkUGVlcnMgPSBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcihpdGVtID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInICYmIGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnICYmICFpdGVtLnJlYWQpXG4gIGNvbnN0IHVucmVhZFBlZXJJZHMgPSBuZXcgU2V0KHVucmVhZFBlZXJzLm1hcChpdGVtID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICghbGl2ZVBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSAmJiAhdW5yZWFkUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSkpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50ICsgKCFhY3RpdmVBZ2VudCAmJiAhYWN0aXZlU2hlbGwgPyBkZXJpdmVkKCkudHJhbnNjcmlwdE9mZnNldCB8fCAwIDogMClcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyksIC4uLihzdHJlYW1pbmcoKSA/IFt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH1dIDogW10pLCAuLi51bnJlYWRQZWVyc11cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3b3Jrc3BhY2VXaWR0aCA9IE1hdGgubWluKDM4LCBNYXRoLm1heCgxOCwgTWF0aC5mbG9vcih0ZXJtaW5hbFdpZHRoKCkgLyAzKSkpXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSAtICh3b3Jrc3BhY2VPcGVuKCkgPyB3b3Jrc3BhY2VXaWR0aCA6IDApID4gMTYwXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZ2l0Rm9vdGVyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyB3aWRlU2lkZWJhcjogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoQWdlbnRMaW1pdDogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAge3dvcmtzcGFjZU9wZW4oKSAmJiA8V29ya3NwYWNlU2lkZWJhciBncm91cHM9e3dvcmtzcGFjZUdyb3Vwc05vd30gc2VsZWN0ZWQ9e3dvcmtzcGFjZVNlbGVjdGVkKCl9IHdpZHRoPXt3b3Jrc3BhY2VXaWR0aH0gbG9hZGluZz17d29ya3NwYWNlTG9hZGluZygpfSBlcnJvcj17d29ya3NwYWNlRXJyb3IoKX0gb25IZWlnaHQ9eyhoZWlnaHQpID0+IHsgaWYgKHdvcmtzcGFjZUhlaWdodCgpICE9PSBoZWlnaHQpIHNldFdvcmtzcGFjZUhlaWdodChoZWlnaHQpIH19IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGZsZXhCYXNpczogMCwgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyAmJiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3VzZXInKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIsIHBhZGRpbmdSaWdodDogNCwgcGFkZGluZ0JvdHRvbTogMSwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9eyFkZWxpYmVyYXRpb25WaWV3ICYmIChmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpfVxuICAgICAgICAgIGZvbGxvd0ZvY3VzPXtzdGVlcigpID8gc3RlZXJMaXN0Rm9jdXMgOiBudWxsfVxuICAgICAgICAgIGZvY3VzUGFkZGluZz17MX1cbiAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgb25NZXRyaWNzPXsobWV0cmljcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0cmFuc2NyaXB0TWV0cmljcygpXG4gICAgICAgICAgICBpZiAocHJldmlvdXM/LnZpc2libGVIZWlnaHQgPT09IG1ldHJpY3MudmlzaWJsZUhlaWdodCAmJiBwcmV2aW91cz8uY29udGVudEhlaWdodCA9PT0gbWV0cmljcy5jb250ZW50SGVpZ2h0KSByZXR1cm5cbiAgICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG1ldHJpY3MpXG4gICAgICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwICYmIG1ldHJpY3MudmlzaWJsZUhlaWdodCA+IDAgJiYgbWV0cmljcy5jb250ZW50SGVpZ2h0IDw9IG1ldHJpY3MudmlzaWJsZUhlaWdodCkge1xuICAgICAgICAgICAgICBpZiAod2luZG93ZWQuaGlkZGVuQ291bnQgPT09IDApIHZvaWQgbG9hZE9sZGVySGlzdG9yeSgpXG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGlmICh3aW5kb3dlZC5oaWRkZW5Db3VudCA9PT0gMCkgdm9pZCBsb2FkT2xkZXJIaXN0b3J5KClcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zIHx8IEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPERlbGliZXJhdGlvbkV4Y2hhbmdlIHR1cm5zPXtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJyl9IHZlcmJvc2U9e3ZlcmJvc2UoKX0gd2lkZT17dGVybWluYWxXaWR0aCgpID49IDExMH0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3RvcnkoKX0gdmlld3BvcnRIZWlnaHQ9e3RyYW5zY3JpcHRNZXRyaWNzKCk/LnZpc2libGVIZWlnaHR9IGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJyl9IG9uRm9jdXM9eygpID0+IGZtLmZvY3VzKCdmZWVkJyl9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAge2NvbnZlcnNhdGlvblNlYXJjaC5hY3RpdmUoKSA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoQmFyIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofSBtYXRjaGVzPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzfSAvPlxuICAgICAgICApIDogZm0uaXMoJ2ZlZWQnKSAmJiAhYW55UGFuZWwoKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogJ2JsYWNrJyB9fT57J2ovayAgXHUyMTkxL1x1MjE5MyBzY3JvbGwgICBnL0cgZW5kcyAgIC8gc2VhcmNoICAgY3RybC11L2QgcGFnZSd9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+fVxuXG4gICAgICB7KGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtleHBlZGl0ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgZXhwZWRpdGVkLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnsnXHUyMUEwICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBhY2NlbnQoKSB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgIGFmdGVyIG5leHQgdG9vbCAgXHUyMTkxIHRvIGVkaXQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7cXVldWVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YHBlbmRpbmctJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIwM0EgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIGV4cGVkaXRlZCgpLmxlbmd0aCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgIHBlbmRpbmcgIFx1MjE5MSBlZGl0ICBcdTIxOTIgc2VuZCBhZnRlciBuZXh0IHRvb2wnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7Y29tbWFuZEZvcm0oKSAmJiA8Q29tbWFuZEZvcm1cbiAgICAgICAgbmFtZT17Y29tbWFuZEZvcm0oKS5uYW1lfVxuICAgICAgICBmaWVsZHM9e2NvbW1hbmRGb3JtKCkuZmllbGRzfVxuICAgICAgICBmaWxlcz17ZmlsZUxpc3QoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlcykgPT4gZmluaXNoQ29tbWFuZChjb21tYW5kRm9ybSgpLCB2YWx1ZXMpfVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4geyBzZXRDb21tYW5kRm9ybShudWxsKTsgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbDsgZm0uZm9jdXMoJ2lucHV0JykgfX1cbiAgICAgIC8+fVxuXG4gICAgICB7cXVlc3Rpb25SZXF1ZXN0KCkgJiYgKFxuICAgICAgICA8UXVlc3Rpb25Gb3JtXG4gICAgICAgICAgcmVxdWVzdD17cXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiB7IGlmICghd29ya3NwYWNlT3BlbigpKSBmbS5mb2N1cygnaW5wdXQnKSB9fSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IGRlcml2ZWQoKS50aXRsZSkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3N0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVyaXZlZCgpLnRpdGxlID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtkZXJpdmVkKCkudGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7ZGVyaXZlZCgpLnRpdGxlfSBgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgIGNvbG9yPXtGR31cbiAgICAgICAgICBsaW5lQ291bnRlclxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dCgpfVxuICAgICAgICAgIGN1cnNvck9mZnNldD17aW5wdXRDdXJzb3IoKX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyh2LCB7XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBzdGF0ZS5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgbmV4dElkOiAoKSA9PiArK3N0YXRlLmltYWdlQ291bnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SW5wdXQoY29udmVydGVkLnRleHQsIGNvbnZlcnRlZC50ZXh0ID09PSB2ID8gaW5wdXRDdXJzb3IoKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0RmlsZUluZGV4KDApXG4gICAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1c3koKSkgaW50ZXJydXB0KClcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBpbXBsaWNpdFJld2luZFRhcmdldChkZXJpdmVkKCksIGlucHV0KCkpXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQpIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIHsga2V5OiAnY2hhdCcgfSlcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VibWl0PXtzZW5kfVxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGUua2V5ID09PSAnbGVmdCcgJiYgIWUuY3RybCkgfHwgKGUua2V5ID09PSAnaCcgJiYgZS5jdHJsKSkgJiYgIWUubWV0YSAmJiAhZS5hbHQgJiYgYm9vdC53b3Jrc3BhY2UgJiYgZm0uaXMoJ2lucHV0JykgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkgJiYgZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7XG4gICAgICAgICAgICAgIHRleHQ6IGUudmFsdWUsIGF0dGFjaG1lbnRzOiB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzKGUudmFsdWUsIHN0YXRlLmF0dGFjaG1lbnRzKSwgZGljdGF0aW9uOiBkaWN0YXRpb25TdGF0dXMoKSwgY2FwdHVyZTogY2FwdHVyZVN0YXR1cygpLCBwZW5kaW5nOiByZWZzLmNvbW1hbmRFeHBhbnNpb24gfHwgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcsXG4gICAgICAgICAgICAgIGhpc3Rvcnk6IGhpc3RJZHgoKSwgY29tcGxldGlvbjogY29tcGxldGluZygpLCBjb21tYW5kOiBjb21tYW5kRm9ybSgpLCBxdWVzdGlvbjogcXVlc3Rpb25SZXF1ZXN0KCksIHN0ZWVyOiBzdGVlcigpLCBxdWV1ZWQ6IHF1ZXVlZCgpLmxlbmd0aCwgZXhwZWRpdGVkOiBleHBlZGl0ZWQoKS5sZW5ndGgsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChib290LndvcmtzcGFjZS5jdXJyZW50SWQoKSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlT3Blbih0cnVlKVxuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgIGZtLmZvY3VzKCd3b3Jrc3BhY2UnKVxuICAgICAgICAgICAgICB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB2b2lkIHJlZnMucGFzdGVJbWFnZSgpLmZpbmFsbHkoKCkgPT4geyByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydChlKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ28nKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBpY2tGaWxlKG1hdGNoZWRGaWxlc1tNYXRoLm1pbihmaWxlSW5kZXgoKSwgbWF0Y2hlZEZpbGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dDb21tYW5kcyAmJiBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjeWNsZSA9IGNtZEN5Y2xlKClcbiAgICAgICAgICAgICAgaWYgKCFjeWNsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oY21kSW5kZXgoKSwgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUoeyBtYXRjaGVzOiBtYXRjaGVkQ29tbWFuZHMgfSlcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChzdGFydClcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgbWF0Y2hlZENvbW1hbmRzW3N0YXJ0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IChjbWRJbmRleCgpICsgMSkgJSBjeWNsZS5tYXRjaGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KG5leHQpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBjeWNsZS5tYXRjaGVzW25leHRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQocmVwbGFjZW1lbnQudGV4dCwgcmVwbGFjZW1lbnQuY3Vyc29yKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdwYXN0ZScgJiYgZS50ZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZXh0cmFjdEltYWdlUGF0aHMoZS50ZXh0KVxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gZS52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gZS5jdXJzb3IgPz8gZHJhZnQubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3RsLmlkXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocGF0aHMubWFwKHBhdGggPT4gY3RsLmF0dGFjaEltYWdlKHBhdGgpKSkudGhlbihwbGFjZWhvbGRlcnMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGN0bC5pZCAhPT0gc2Vzc2lvbklkIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgICAgICAgICAgICAgIHNldElucHV0KGRyYWZ0LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVycy5qb2luKCcgJykgKyBkcmFmdC5zbGljZShhdCkpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2JhY2tzcGFjZScgJiYgZS5jdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvcikubWF0Y2goL1xcW0ltYWdlICNcXGQrXFxdJC8pXG4gICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGN0bC5kZXRhY2hJbWFnZShtYXRjaFswXSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yIC0gbWF0Y2hbMF0ubGVuZ3RoKSArIGUudmFsdWUuc2xpY2UoZS5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGUudmFsdWUsIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSlcbiAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIWNvbXBsZXRpbmcoKSkge1xuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICBzZXRDb21wSW5kZXgoMClcbiAgICAgICAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5tYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NlcHRDb21wbGV0aW9uKGUudmFsdWUsIGN0eCwgY3R4Lm1hdGNoZXNbTWF0aC5taW4oY29tcEluZGV4KCksIGN0eC5tYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCB8fCBlLm1ldGEgfHwgc2hvd0NvbW1hbmRzIHx8IHNob3dGaWxlcykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgKGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgY3RsLnJlY2FsbFBlbmRpbmcoKS50aGVuKHNldElucHV0KS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3JpZ2h0JyAmJiBlLnZhbHVlID09PSAnJyAmJiBxdWV1ZWQoKS5sZW5ndGggPiAwICYmIGJ1c3koKSAmJiAhY29tcGFjdGluZygpKSB7XG4gICAgICAgICAgICAgIGN0bC5leHBlZGl0ZVF1ZXVlZCgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicm93c2luZyA9IGhpc3RJZHgoKSA+PSAwXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgKGJyb3dzaW5nIHx8IGUudmFsdWUgPT09ICcnKSAmJiBoaXN0SWR4KCkgPCBzZW50KCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpICsgMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdkb3duJyAmJiBicm93c2luZykge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpIC0gMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KG4gPCAwID8gJycgOiBzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgIC8+XG4gICAgICA8L01vdXNlRm9jdXNSZWdpb24+fVxuXG4gICAgICB7c2hvd0NvbXBvc2VyQWN0aW9ucyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgbWFyZ2luTGVmdDogMSB9fT5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1Q0JcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVDRlwiXG4gICAgICAgICAgICBhY3RpdmU9e2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZSd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGRpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJ1xuICAgICAgICAgICAgICA/IHZvaWQgcmVmcy5kaWN0YXRpb25JbnB1dC5zdG9wKClcbiAgICAgICAgICAgICAgOiByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVBMVwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUEwXCJcbiAgICAgICAgICAgIGFjdGl2ZT17Y2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGltYWdlIChjdHJsLW8pJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGljdGF0aW9uSW5kaWNhdG9yKGRpY3RhdGlvblN0YXR1cygpLCBkaWN0YXRpb25MZXZlbHMoKSl9PC90ZXh0Pn1cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2RpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJyA/ICdlc2MgY2FuY2VsICBlbnRlciBjb25maXJtJyA6IGNhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZycgPyAnIGVzYyBjYW5jZWwnIDogY29tcG9zZXJBY3Rpb25MYWJlbCgpID8gYCAke2NvbXBvc2VyQWN0aW9uTGFiZWwoKX1gIDogJyd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKX1cbiAgICAgICAgICBjdXJyZW50PXttb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e2RlZmF1bHRNb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd01vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0sIHsgYXNEZWZhdWx0OiB0cnVlIH0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyBkZWxpYmVyYXRpb25Nb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IGRlbGliZXJhdGlvbjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBkZWxpYmVyYXRpb246ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib290LnJlc2VhcmNoTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgcmVzZWFyY2hNb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTcGVlZFBhbmVsKCkgJiYgKFxuICAgICAgICA8U3BlZWRQYW5lbFxuICAgICAgICAgIGxldmVscz17U1BFRURfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e3NwZWVkKCl9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtzcGVlZERlZmF1bHRzKClbbW9kZWwoKS5uYW1lXSA/PyAnc3RhbmRhcmQnfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dTcGVlZFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBjdGwuYXBwbHlTcGVlZChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJyAmJiAoXG4gICAgICAgIDxSZXdpbmRQaWNrUGFuZWxcbiAgICAgICAgICBlbnRyaWVzPXtbLi4ucmV3aW5kRW50cmllcygpXS5yZXZlcnNlKCl9XG4gICAgICAgICAgc3RhdHM9eyhpbmRleCkgPT4gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCBpbmRleCl9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAncGljayd9XG4gICAgICAgICAgb25QaWNrPXsoZW50cnkpID0+IHsgc2V0UmV3aW5kVGFyZ2V0KGVudHJ5KTsgc2V0UmV3aW5kU3RlcCgnYWN0aW9uJykgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSZXdpbmRTdGVwKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbicgJiYgcmV3aW5kVGFyZ2V0KCkgJiYgKFxuICAgICAgICA8UmV3aW5kQWN0aW9uUGFuZWxcbiAgICAgICAgICB0YXJnZXQ9e3Jld2luZFRhcmdldCgpfVxuICAgICAgICAgIG9wdGlvbnM9e3Jld2luZE9wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJ31cbiAgICAgICAgICBvblN1Ym1pdD17cGVyZm9ybVJld2luZH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+IHNldFJld2luZFN0ZXAoJ3BpY2snKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FjdGl2aXR5LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzaGVsbEFjdGlvbkhpbnQgPyBgJHtzaGVsbEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ3NoZWxsLW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NoZWxsV2luZG93Lm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYHNoZWxsLSR7cy5pZH1gXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHZpZXdlZFNoZWxsSWQoKSA9PT0gcy5pZFxuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGFnZW50RWxhcHNlZCh7IHN0YXJ0ZWRBdDogcy5zdGFydGVkQXQsIGVuZGVkQXQ6IHMuZW5kZWRBdCB9KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgc2hlbGwtJHtzLmlkfWB9IHNlbGVjdGVkPXtzZWxlY3RlZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgc2hlbGwtJHtzLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKHMuaWQpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHMuZXhpdENvZGUgPT09IDAgPyBHUkVFTiA6IFJFRCB9fT57cy5leGl0Q29kZSA9PT0gMCA/ICdcdTI1Q0YnIDogJ1x1MDBENyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IEZHIDogTVVURUQgfX0+e2BzaGVsbCBbJHtzLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57cy5kZXNjcmlwdGlvbiB8fCBzLmNvbW1hbmQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Muc3RhdHVzID09PSAncnVubmluZycgPyAnJyA6IGBleGl0ICR7cy5leGl0Q29kZX0gIGB9JHtlbGFwc2VkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gc2hlbGxTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7YWdlbnRBY3Rpb25IaW50ID8gYCR7YWdlbnRBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhZ2VudC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWdlbnRXaW5kb3cubWFwKChhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudFN0YXR1cyhhKVxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYGFnZW50LSR7YS5pZH1gXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BhZ2VudC0ke2EuaWR9YH0gc2VsZWN0ZWQ9e3ZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgYWdlbnQtJHthLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKGEuaWQpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICAgIHthLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e3N0YXR1cy5pY29ufTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogdmlld2VkQWdlbnRJZCgpID09PSBhLmlkID8gRkcgOiBNVVRFRCB9fT57YCR7YS5yb2xlIHx8ICdhZ2VudCd9IFske2EuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnthLmRlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICB7c3RhdHVzLmxhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57YCAgJHtzdGF0dXMubGFiZWx9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgJHtzdGF0dXMubGFiZWwgPyAnICAnIDogJyAgJ30gJHthZ2VudEVsYXBzZWQoYSl9ICBcdTIxOTMgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2EudXNhZ2U/LnRvdGFsVG9rZW5zIHx8IGEudXNhZ2U/LnByb21wdFRva2VucyB8fCAwfSBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRH0gaGlnaGxpZ2h0PXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSB0b2tlbnNgfSAvPlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gYWdlbnRTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgocGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtKSB7XG4gIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vbGludXgtZGljdGF0ZS5qcycsIGltcG9ydC5tZXRhLnVybCkpXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvbGludXgtZGljdGF0ZS5qcycsIGltcG9ydC5tZXRhLnVybCkpXG4gIH1cbiAgY29uc3QgYnVuZGxlZCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxuICByZXR1cm4gZXhpc3RzU3luYyhidW5kbGVkKSA/IGJ1bmRsZWQgOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL2hlbHBlci8uYnVpbGQvcmVsZWFzZS9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uKHsgb25TdGF0dXMgPSAoKSA9PiB7fSwgb25MZXZlbCA9ICgpID0+IHt9LCBvbkVycm9yID0gKCkgPT4ge30sIHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgYXJjaCA9IHByb2Nlc3MuYXJjaCwgbGF1bmNoID0gKCkgPT4gc3Bhd24ocGxhdGZvcm0gPT09ICdsaW51eCcgPyBwcm9jZXNzLmV4ZWNQYXRoIDogZGljdGF0aW9uSGVscGVyUGF0aChwbGF0Zm9ybSksIHBsYXRmb3JtID09PSAnbGludXgnID8gW2RpY3RhdGlvbkhlbHBlclBhdGgocGxhdGZvcm0pXSA6IFtdLCB7IHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSksIGxvYWRpbmdUaW1lb3V0ID0gNjAwMDAwLCByZXF1ZXN0VGltZW91dCA9IHBsYXRmb3JtID09PSAnbGludXgnID8gMTgwMDAwIDogNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2xpbnV4JyAmJiAocGxhdGZvcm0gIT09ICdkYXJ3aW4nIHx8IGFyY2ggIT09ICdhcm02NCcpKSB0aHJvdyBuZXcgRXJyb3IoJ2RpY3RhdGlvbiByZXF1aXJlcyBMaW51eCBvciBhbiBBcHBsZSBTaWxpY29uIE1hYycpXG4gICAgY29uc3QgaW5zdGFuY2UgPSBsYXVuY2goKVxuICAgIGNoaWxkID0gaW5zdGFuY2VcbiAgICByZWFkeSA9IHdhaXRGb3IoJ3JlYWR5JywgbG9hZGluZ1RpbWVvdXQpXG4gICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgaW5zdGFuY2Uuc3Rkb3V0Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDEwMjQgKiAxMDI0KSByZXR1cm4gcmVzZXQobmV3IEVycm9yKCdpbnZhbGlkIGRpY3RhdGlvbiBoZWxwZXIgb3V0cHV0JykpXG4gICAgICBsZXQgYXRcbiAgICAgIHdoaWxlICgoYXQgPSBidWZmZXIuaW5kZXhPZignXFxuJykpID49IDApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBhdClcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF0ICsgMSlcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgdHJ5IHsgbWVzc2FnZSA9IEpTT04ucGFyc2UobGluZSkgfSBjYXRjaCB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnbGV2ZWwnKSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3JlY29yZGluZycgJiYgTnVtYmVyLmlzRmluaXRlKG1lc3NhZ2UubGV2ZWwpKSBvbkxldmVsKE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG1lc3NhZ2UubGV2ZWwpKSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ3JlYWR5Jykgc2V0dGxlKCdyZWFkeScsIG1lc3NhZ2UpXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5tZXNzYWdlIHx8ICdkaWN0YXRpb24gZmFpbGVkJylcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgICAgaWYgKCFhY3RpdmUpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkICE9IG51bGwpIHNldHRsZShtZXNzYWdlLmlkLCBtZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gICAgaW5zdGFuY2Uuc3RkZXJyLm9uKCdkYXRhJywgKCkgPT4ge30pXG4gICAgY29uc3QgZmFpbGVkID0gKGVycm9yKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgIGNvbnN0IHJlY29yZGluZyA9IHN0YXR1cyA9PT0gJ3JlY29yZGluZydcbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgaWYgKCFhY3RpdmUgJiYgcmVjb3JkaW5nKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICAgIGluc3RhbmNlLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbGVkKG5ldyBFcnJvcihgZGljdGF0aW9uIGhlbHBlciB1bmF2YWlsYWJsZTogJHtlcnJvci5tZXNzYWdlfWApKSlcbiAgICBpbnN0YW5jZS5zdGRpbi5vbignZXJyb3InLCBmYWlsZWQpXG4gICAgaW5zdGFuY2Uub24oJ2V4aXQnLCAoKSA9PiBmYWlsZWQobmV3IEVycm9yKCdkaWN0YXRpb24gaGVscGVyIGV4aXRlZCcpKSlcbiAgICByZXR1cm4gcmVhZHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3Qob3ApIHtcbiAgICBjb25zdCBpZCA9ICsrc2VxdWVuY2VcbiAgICBjb25zdCByZXN1bHQgPSB3YWl0Rm9yKGlkLCByZXF1ZXN0VGltZW91dClcbiAgICB0cnkgeyBjaGlsZC5zdGRpbi53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGlkLCBvcCB9KX1cXG5gKSB9IGNhdGNoIChlcnJvcikgeyByZXNldChlcnJvcikgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZWxvYWQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSByZXR1cm5cbiAgICB0cnkgeyBhd2FpdCBsb2FkKCkgfSBjYXRjaCB7fVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkIHx8IHN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygnbG9hZGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHNldFN0YXR1cygnc3RhcnRpbmcnKVxuICAgICAgYXdhaXQgcmVxdWVzdCgnc3RhcnQnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ3JlY29yZGluZycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygndHJhbnNjcmliaW5nJylcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdCgnc3RvcCcpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVybiBudWxsXG4gICAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgICAgcmV0dXJuIGNsZWFuRGljdGF0aW9uKHJlc3VsdC50ZXh0IHx8ICcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHtcbiAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm5cbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIHJlc2V0KClcbiAgICBzZXRTdGF0dXMoJ2NhbmNlbGxpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZXF1ZXN0KCdjYW5jZWwnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHJlc2V0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gICAgKytnZW5lcmF0aW9uXG4gICAgcmVzZXQoKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJlbG9hZCwgc3RhcnQsIHN0b3AsIGNhbmNlbCwgZGlzcG9zZSwgZ2V0IHN0YXR1cygpIHsgcmV0dXJuIHN0YXR1cyB9IH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB7IG1rZHRlbXAsIHdyaXRlRmlsZSwgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5jb25zdCBleGVjdXRlID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKVxuY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgU2V0KClcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyZWN0b3JpZXMpIHJtU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufSlcblxuY29uc3QgbWFjU2NyaXB0ID0gYE9iakMuaW1wb3J0KCdBcHBLaXQnKTsgT2JqQy5pbXBvcnQoJ0ZvdW5kYXRpb24nKTtcbmNvbnN0IHBhc3RlYm9hcmQgPSAkLk5TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZDtcbmNvbnN0IGZpbGVzID0gcGFzdGVib2FyZC5wcm9wZXJ0eUxpc3RGb3JUeXBlKCdOU0ZpbGVuYW1lc1Bib2FyZFR5cGUnKTtcbmxldCBpbWFnZSA9IG51bGw7XG5pZiAoIWZpbGVzLmlzTmlsKCkgJiYgZmlsZXMuY291bnQgPiAwKSB7XG4gIGNvbnN0IHBhdGggPSBPYmpDLnVud3JhcChmaWxlcy5vYmplY3RBdEluZGV4KDApKTtcbiAgaWYgKC9cXFxcLihwbmd8anBlP2d8Z2lmfHdlYnApJC9pLnRlc3QocGF0aCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoQ29udGVudHNPZkZpbGUocGF0aCk7XG59XG5pZiAoIWltYWdlIHx8IGltYWdlLmlzTmlsKCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTtcbmxldCBkYXRhID0gbnVsbDtcbmlmICghaW1hZ2UuaXNOaWwoKSkge1xuICBjb25zdCBiaXRtYXAgPSAkLk5TQml0bWFwSW1hZ2VSZXAuaW1hZ2VSZXBXaXRoRGF0YShpbWFnZS5USUZGUmVwcmVzZW50YXRpb24pO1xuICBkYXRhID0gYml0bWFwLnJlcHJlc2VudGF0aW9uVXNpbmdUeXBlUHJvcGVydGllcygkLk5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORywgJCh7fSkpO1xufVxuZGF0YSA/IE9iakMudW53cmFwKGRhdGEuYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zKDApKSA6ICcnYFxuXG5jb25zdCB3aW5kb3dzU2NyaXB0ID0gYEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLldpbmRvd3MuRm9ybXM7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLkRyYXdpbmc7XG5pZiAoW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkNvbnRhaW5zSW1hZ2UoKSkge1xuICAkaW1hZ2UgPSBbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6R2V0SW1hZ2UoKTtcbiAgJHN0cmVhbSA9IE5ldy1PYmplY3QgU3lzdGVtLklPLk1lbW9yeVN0cmVhbTtcbiAgdHJ5IHsgJGltYWdlLlNhdmUoJHN0cmVhbSwgW1N5c3RlbS5EcmF3aW5nLkltYWdpbmcuSW1hZ2VGb3JtYXRdOjpQbmcpOyBbQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRzdHJlYW0uVG9BcnJheSgpKSB9XG4gIGZpbmFsbHkgeyAkc3RyZWFtLkRpc3Bvc2UoKTsgJGltYWdlLkRpc3Bvc2UoKSB9XG59YFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENsaXBib2FyZEltYWdlKHsgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBlbnYgPSBwcm9jZXNzLmVudiwgcnVuID0gZXhlY3V0ZSB9ID0ge30pIHtcbiAgaWYgKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX1RUWSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bmF2YWlsYWJsZSBvdmVyIFNTSCcpXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGVuY29kaW5nOiAnYnVmZmVyJywgdGltZW91dDogMTAwMDAsIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCB9XG4gIGxldCBkYXRhXG4gIHRyeSB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bignb3Nhc2NyaXB0JywgWyctbCcsICdKYXZhU2NyaXB0JywgJy1lJywgbWFjU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ3Bvd2Vyc2hlbGwuZXhlJywgWyctTm9Qcm9maWxlJywgJy1Ob25JbnRlcmFjdGl2ZScsICctU1RBJywgJy1Db21tYW5kJywgd2luZG93c1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICBjb25zdCB3YXlsYW5kID0gQm9vbGVhbihlbnYuV0FZTEFORF9ESVNQTEFZKVxuICAgICAgY29uc3QgY29tbWFuZCA9IHdheWxhbmQgPyAnd2wtcGFzdGUnIDogJ3hjbGlwJ1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHR5cGVzIH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS1saXN0LXR5cGVzJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ1RBUkdFVFMnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGlmICghdHlwZXMudG9TdHJpbmcoKS5zcGxpdCgvXFxzKy8pLmluY2x1ZGVzKCdpbWFnZS9wbmcnKSkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS10eXBlJywgJ2ltYWdlL3BuZycsICctLW5vLW5ld2xpbmUnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnaW1hZ2UvcG5nJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0nKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIHJlYWRlciB1bmF2YWlsYWJsZTogaW5zdGFsbCAnICsgKGVudi5XQVlMQU5EX0RJU1BMQVkgPyAnd2wtY2xpcGJvYXJkJyA6IHBsYXRmb3JtID09PSAnbGludXgnID8gJ3hjbGlwJyA6ICd0aGUgc3lzdGVtIGNsaXBib2FyZCB0b29scycpKVxuICAgIHRocm93IGVycm9yXG4gIH1cbiAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgaWYgKCFkYXRhLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgZGlkIG5vdCByZXR1cm4gYSBQTkcgaW1hZ2UnKVxuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNsaXBib2FyZC0nKSlcbiAgZGlyZWN0b3JpZXMuYWRkKGRpcilcbiAgY29uc3QgZGlzcG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIGRpcmVjdG9yaWVzLmRlbGV0ZShkaXIpXG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4oZGlyLCAnY2xpcGJvYXJkLnBuZycpXG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGRhdGEsIHsgbW9kZTogMG82MDAgfSlcbiAgICByZXR1cm4geyBwYXRoLCBkaXNwb3NlIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBkaXNwb3NlKClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsaXBib2FyZElucHV0KHsgcmVhZEltYWdlLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yIH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcGFzdGVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcmVhZEltYWdlKClcbiAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgb25FcnJvcignTm8gaW1hZ2Ugb24gdGhlIGNsaXBib2FyZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ0NsaXBib2FyZCBpbWFnZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF3YWl0IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYENsaXBib2FyZCBwYXN0ZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb24sIGdldElucHV0LCBzZXRJbnB1dCB9KSB7XG4gIGxldCBkcmFmdCA9IG51bGxcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG5cbiAgZnVuY3Rpb24gc3RhcnQoeyB2YWx1ZSwgY3Vyc29yIH0pIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBkcmFmdCA9IHsgdmFsdWUsIGN1cnNvciB9XG4gICAgKytnZW5lcmF0aW9uXG4gICAgdm9pZCBkaWN0YXRpb24uc3RhcnQoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBjb25zdCB0YXJnZXQgPSBkcmFmdFxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkaWN0YXRpb24uc3RvcCgpXG4gICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uIHx8ICF0YXJnZXQgfHwgdGV4dCA9PSBudWxsIHx8IGdldElucHV0KCkgIT09IHRhcmdldC52YWx1ZSkgcmV0dXJuXG4gICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgbGVhZCA9IHRleHQgJiYgYmVmb3JlICYmICEvXFxzJC8udGVzdChiZWZvcmUpICYmICEvXlxccy8udGVzdCh0ZXh0KSA/ICcgJyA6ICcnXG4gICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCB0cmFpbCA9IHRleHQgJiYgYWZ0ZXIgJiYgIS9cXHMkLy50ZXN0KHRleHQpICYmICEvXltcXHMuLDs6IT9dLy50ZXN0KGFmdGVyKSA/ICcgJyA6ICcnXG4gICAgc2V0SW5wdXQoYmVmb3JlICsgbGVhZCArIHRleHQgKyB0cmFpbCArIGFmdGVyKVxuICAgIGRyYWZ0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICsrZ2VuZXJhdGlvblxuICAgIGRyYWZ0ID0gbnVsbFxuICAgIHZvaWQgZGljdGF0aW9uLmNhbmNlbCgpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyB8fCAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdjJykpIGNhbmNlbCgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJyAmJiAhZXZlbnQuc2hpZnQgJiYgIWV2ZW50Lm1ldGEgJiYgZGljdGF0aW9uLnN0YXR1cyA9PT0gJ3JlY29yZGluZycpIHZvaWQgc3RvcCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7IHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGhhbmRsZSB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7IGNhcHR1cmVSZWdpb24sIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IsIG9uU3RhdHVzID0gKCkgPT4ge30gfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBjYXB0dXJlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgb25TdGF0dXMoJ2NhcHR1cmluZycpXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNhcHR1cmVSZWdpb24oKVxuICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignU2NyZWVuIGNhcHR1cmUgbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBTY3JlZW4gY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICAgIG9uU3RhdHVzKCdpZGxlJylcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IG1rZHRlbXAsIHVubGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5sZXQgY2FwdHVyZURpciA9IG51bGxcblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ2FwdHVyZURpcigpIHtcbiAgY2FwdHVyZURpciA/Pz0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jYXB0dXJlLScpKVxuICByZXR1cm4gY2FwdHVyZURpclxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUNvbW1hbmRzKHBsYXRmb3JtLCBmaWxlLCBlbnYgPSBwcm9jZXNzLmVudikge1xuICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSByZXR1cm4gW1snc2NyZWVuY2FwdHVyZScsIFsnLWknLCAnLXgnLCBmaWxlXV1dXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgIGlmIChlbnYuWERHX1NFU1NJT05fVFlQRSA9PT0gJ3dheWxhbmQnKSB7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IFtbJ2dub21lLXNjcmVlbnNob3QnLCBbJy1hJywgJy1mJywgZmlsZV1dLCBbJ3NwZWN0YWNsZScsIFsnLXInLCAnLWInLCAnLW4nLCAnLW8nLCBmaWxlXV1dXG4gICAgICByZXR1cm4gZW52LlNXQVlTT0NLIHx8IGVudi5YREdfQ1VSUkVOVF9ERVNLVE9QPy5zcGxpdCgnOicpLmluY2x1ZGVzKCdzd2F5JylcbiAgICAgICAgPyBbWydzbHVycCcsIFtdXSwgLi4uZmFsbGJhY2tdXG4gICAgICAgIDogZmFsbGJhY2tcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIFsneGZjZTQtc2NyZWVuc2hvb3RlcicsIFsnLS1yZWdpb24nLCAnLS1zYXZlJywgZmlsZV1dLFxuICAgICAgWydnbm9tZS1zY3JlZW5zaG90JywgWyctYScsICctZicsIGZpbGVdXSxcbiAgICAgIFsnc2Nyb3QnLCBbJy0tc2VsZWN0JywgZmlsZV1dLFxuICAgIF1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3NjcmVlbiBjYXB0dXJlIHJlcXVpcmVzIG1hY09TIG9yIExpbnV4Jylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oeyBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGVudiA9IHByb2Nlc3MuZW52LCBydW4gPSBleGVjRmlsZSwgZXhpc3RzID0gZXhpc3RzU3luYyB9ID0ge30pIHtcbiAgY29uc3QgZmlsZSA9IGpvaW4oYXdhaXQgZW5zdXJlQ2FwdHVyZURpcigpLCBgY2FwdHVyZS0ke0RhdGUubm93KCl9LnBuZ2ApXG4gIGNvbnN0IGNvbW1hbmRzID0gY2FwdHVyZUNvbW1hbmRzKHBsYXRmb3JtLCBmaWxlLCBlbnYpXG4gIGZvciAoY29uc3QgW2NvbW1hbmQsIGFyZ3NdIG9mIGNvbW1hbmRzKSB7XG4gICAgbGV0IGVycm9yXG4gICAgaWYgKGNvbW1hbmQgPT09ICdzbHVycCcpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHJ1bihjb21tYW5kLCBhcmdzLCAoZXJyb3IsIHN0ZG91dCkgPT4gcmVzb2x2ZSh7IGVycm9yLCBzdGRvdXQgfSkpXG4gICAgICAgIC8vIHNsdXJwIGNvbnN1bWVzIG9wdGlvbmFsIHJlY3RhbmdsZXMgZnJvbSBzdGRpbiBiZWZvcmUgc2hvd2luZyBpdHMgVUkuXG4gICAgICAgIC8vIGV4ZWNGaWxlIGxlYXZlcyB0aGF0IHBpcGUgb3Blbjsgc2lnbmFsIEVPRiBzbyBzZWxlY3Rpb24gY2FuIHN0YXJ0LlxuICAgICAgICBjaGlsZD8uc3RkaW4/LmVuZCgpXG4gICAgICB9KVxuICAgICAgZXJyb3IgPSBzZWxlY3Rpb24uZXJyb3JcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBzZWxlY3Rpb24uc3Rkb3V0Py50cmltKClcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkgcmV0dXJuIG51bGxcbiAgICAgICAgZXJyb3IgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBydW4oJ2dyaW0nLCBbJy1nJywgZ2VvbWV0cnksIGZpbGVdLCBlcnJvciA9PiByZXNvbHZlKGVycm9yKSlcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGVycm9yPy5jb2RlID09PSAnRU5PRU5UJykgdGhyb3cgbmV3IEVycm9yKCdJbnN0YWxsIGdyaW0gYW5kIHNsdXJwIGZvciBTd2F5IHJlZ2lvbiBjYXB0dXJlOiBzdWRvIGFwdCBpbnN0YWxsIGdyaW0gc2x1cnAuJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgcnVuKGNvbW1hbmQsIGFyZ3MsIGVycm9yID0+IHJlc29sdmUoZXJyb3IpKVxuICAgICAgfSlcbiAgICB9XG4gICAgLy8gVHJ5IGFub3RoZXIgYmFja2VuZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbWlzc2luZywgbm90IG9uIGNhbmNlbC5cbiAgICBpZiAoZXJyb3I/LmNvZGUgPT09ICdFTk9FTlQnKSBjb250aW51ZVxuICAgIGlmICghZXhpc3RzKGZpbGUpKSB7XG4gICAgICBpZiAoZXJyb3IgJiYgcGxhdGZvcm0gIT09ICdkYXJ3aW4nKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbCA9IGVycm9yLnN0ZGVyciB8fCBlcnJvci5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcilcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09IDEpIHRocm93IG5ldyBFcnJvcihgc2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2RldGFpbH1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBhd2FpdCB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZXR1cm4geyBwYXRoOiBmaWxlLCBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoZW52LlhER19TRVNTSU9OX1RZUEUgPT09ICd3YXlsYW5kJ1xuICAgID8gJ0luc3RhbGwgZ25vbWUtc2NyZWVuc2hvdCBvciBzcGVjdGFjbGUgZm9yIExpbnV4IHJlZ2lvbiBjYXB0dXJlLiBTdXBwb3J0IGRlcGVuZHMgb24geW91ciBXYXlsYW5kIGNvbXBvc2l0b3IuJ1xuICAgIDogJ0luc3RhbGwgYSByZWdpb24gY2FwdHVyZSB0b29sOiBzdWRvIGFwdCBpbnN0YWxsIHhmY2U0LXNjcmVlbnNob290ZXIgKG9yIGdub21lLXNjcmVlbnNob3QgLyBzY3JvdCkuJylcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zZXJGaWxlcygpIHtcbiAgbGV0IHRleHQgPSAnJ1xuICBsZXQgcmVmZXJlbmNlcyA9IFtdXG5cbiAgZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBhdHRhY2htZW50cykge1xuICAgIGxldCBzdGFydCA9IDBcbiAgICB3aGlsZSAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCAmJiBzdGFydCA8IHZhbHVlLmxlbmd0aCAmJiB0ZXh0W3N0YXJ0XSA9PT0gdmFsdWVbc3RhcnRdKSBzdGFydCsrXG4gICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoXG4gICAgbGV0IG5leHRFbmQgPSB2YWx1ZS5sZW5ndGhcbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbmV4dEVuZCA+IHN0YXJ0ICYmIHRleHRbZW5kIC0gMV0gPT09IHZhbHVlW25leHRFbmQgLSAxXSkge1xuICAgICAgZW5kLS1cbiAgICAgIG5leHRFbmQtLVxuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IG5leHRFbmQgLSBlbmRcbiAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UuZW5kIDw9IHN0YXJ0KSByZXR1cm4gW3JlZmVyZW5jZV1cbiAgICAgIGlmIChyZWZlcmVuY2Uuc3RhcnQgPj0gZW5kKSByZXR1cm4gW3sgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgZGVsdGEsIGVuZDogcmVmZXJlbmNlLmVuZCArIGRlbHRhIH1dXG4gICAgICByZXR1cm4gW11cbiAgICB9KVxuICAgIHRleHQgPSB2YWx1ZVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4udGV4dC5tYXRjaEFsbCgvXFxbRmlsZSAjXFxkK1xcXS9nKV0ucmV2ZXJzZSgpXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0YWNobWVudHMuZ2V0KG1hdGNoWzBdKVxuICAgICAgaWYgKGF0dGFjaG1lbnQ/LmtpbmQgIT09ICdmaWxlJykgY29udGludWVcbiAgICAgIGNvbnN0IHBhdGggPSBhdHRhY2htZW50LnBhdGhcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBhdGgubGVuZ3RoIC0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnN0YXJ0ID49IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgID8geyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBvZmZzZXQsIGVuZDogcmVmZXJlbmNlLmVuZCArIG9mZnNldCB9XG4gICAgICAgIDogcmVmZXJlbmNlKVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgcGF0aCArIHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBzdGFydDogbWF0Y2guaW5kZXgsIGVuZDogbWF0Y2guaW5kZXggKyBwYXRoLmxlbmd0aCwgcGxhY2Vob2xkZXI6IG1hdGNoWzBdIH0pXG4gICAgfVxuICAgIHJlZmVyZW5jZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgbGV0IHZhbHVlID0gdGV4dFxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIFsuLi5yZWZlcmVuY2VzXS5yZXZlcnNlKCkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcmVmZXJlbmNlLnN0YXJ0KSArIHJlZmVyZW5jZS5wbGFjZWhvbGRlciArIHZhbHVlLnNsaWNlKHJlZmVyZW5jZS5lbmQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHsgdXBkYXRlLCBjb250ZW50IH1cbn1cbiIsICJjb25zdCBiYXJzID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCdcbmNvbnN0IHdpZHRoID0gMTZcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZExldmVsKGxldmVscywgbGV2ZWwpIHtcbiAgcmV0dXJuIFsuLi5sZXZlbHMuc2xpY2UoMSAtIHdpZHRoKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbGV2ZWwpKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkluZGljYXRvcihzdGF0dXMsIGxldmVscykge1xuICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVybiAnJ1xuICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIGAgJHtzdGF0dXN9IGBcbiAgY29uc3Qgc2FtcGxlcyA9IFsuLi5BcnJheShNYXRoLm1heCgwLCB3aWR0aCAtIGxldmVscy5sZW5ndGgpKS5maWxsKDApLCAuLi5sZXZlbHMuc2xpY2UoLXdpZHRoKV1cbiAgcmV0dXJuIGAgJHtzYW1wbGVzLm1hcCgobGV2ZWwpID0+IGJhcnNbTWF0aC5yb3VuZChsZXZlbCAqIChiYXJzLmxlbmd0aCAtIDEpKV0pLmpvaW4oJycpfSByZWNvcmRpbmcgYFxufVxuIiwgImltcG9ydCB7IGNvZGVUb0FOU0kgfSBmcm9tICdAc2hpa2lqcy9jbGknXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBzaGlraVRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgTEFOR1MgPSB7XG4gIGpzOiAnanMnLCBtanM6ICdqcycsIGNqczogJ2pzJywganN4OiAnanN4JywgdHM6ICd0cycsIHRzeDogJ3RzeCcsXG4gIGpzb246ICdqc29uJywganNvbmw6ICdqc29uJywgbWQ6ICdtZCcsIHB5OiAncHl0aG9uJywgcmI6ICdydWJ5JywgZ286ICdnbycsXG4gIHJzOiAncnVzdCcsIGM6ICdjJywgaDogJ2MnLCBjcHA6ICdjcHAnLCBqYXZhOiAnamF2YScsIGNzczogJ2NzcycsXG4gIGh0bWw6ICdodG1sJywgdnVlOiAndnVlJywgc2g6ICdiYXNoJywgYmFzaDogJ2Jhc2gnLCB6c2g6ICdiYXNoJyxcbiAgeW1sOiAneWFtbCcsIHlhbWw6ICd5YW1sJywgdG9tbDogJ3RvbWwnLCBzcWw6ICdzcWwnLCBzdmVsdGU6ICdzdmVsdGUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0ZvclBhdGgocGF0aCkge1xuICBjb25zdCBleHQgPSBTdHJpbmcocGF0aCkuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBMQU5HU1tleHRdIHx8ICd0eHQnXG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBwZW5kaW5nID0gbmV3IFNldCgpXG5jb25zdCBmYWlsZWQgPSBuZXcgU2V0KClcbmNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0VmVyc2lvbiA9IHZlcnNpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlLCBsYW5nKSB7XG4gIGNvbnN0IHNhZmVMYW5nID0gbGFuZyAmJiAhZmFpbGVkLmhhcyhsYW5nKSA/IGxhbmcgOiAndHh0J1xuICBjb25zdCB0aGVtZSA9IHNoaWtpVGhlbWUoKVxuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX1cXG4ke3NhZmVMYW5nfVxcbiR7bGluZX1gXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHJldHVybiBjYWNoZS5nZXQoa2V5KVxuICAgICAgd2FybShsaW5lLCBzYWZlTGFuZywgdGhlbWUsIGtleSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfSlcbiAgICAuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gd2FybShsaW5lLCBsYW5nLCB0aGVtZSwga2V5KSB7XG4gIGlmIChwZW5kaW5nLmhhcyhrZXkpKSByZXR1cm5cbiAgcGVuZGluZy5hZGQoa2V5KVxuICBjb2RlVG9BTlNJKGxpbmUsIGxhbmcsIHRoZW1lKVxuICAgIC50aGVuKChhbnNpKSA9PiBjYWNoZS5zZXQoa2V5LCBhbnNpLnJlcGxhY2UoL1xcbiQvLCAnJykpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBmYWlsZWQuYWRkKGxhbmcpXG4gICAgICBjYWNoZS5zZXQoa2V5LCBsaW5lKVxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcGVuZGluZy5kZWxldGUoa2V5KVxuICAgICAgc2V0VmVyc2lvbigodikgPT4gdiArIDEpXG4gICAgfSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYWN0aXZpdHlSb3dzKHJvd3MpIHtcbiAgY29uc3QgYWN0aXZlID0gKHJvdykgPT4gcm93LnN0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8IHJvdy5zdGF0dXMgPT09ICdxdWV1ZWQnXG4gIHJldHVybiBbLi4ucm93c10uc29ydCgoYSwgYikgPT4gTnVtYmVyKGFjdGl2ZShiKSkgLSBOdW1iZXIoYWN0aXZlKGEpKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5U3RyaXBTaXplcyhoZWlnaHQsIGxlbmd0aHMsIG1hcmdpbiA9IDEpIHtcbiAgY29uc3QgZ3JvdXBzID0gbGVuZ3Rocy5maWx0ZXIoQm9vbGVhbikubGVuZ3RoXG4gIGlmICghZ3JvdXBzKSByZXR1cm4gbGVuZ3Rocy5tYXAoKCkgPT4gMClcbiAgY29uc3QgYnVkZ2V0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiAwLjIpXG4gIGNvbnN0IHNpemVzID0gbGVuZ3Rocy5tYXAoKGxlbmd0aCkgPT4gbGVuZ3RoID8gMSA6IDApXG4gIGNvbnN0IHVzZWQgPSAoKSA9PiBtYXJnaW4gKyAxICsgZ3JvdXBzICsgc2l6ZXMucmVkdWNlKChzdW0sIHNpemUsIGkpID0+IHN1bSArIHNpemUgKyBOdW1iZXIoc2l6ZSA8IGxlbmd0aHNbaV0pLCAwKVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzaXplcy5tYXAoKHNpemUsIGkpID0+IGkpXG4gICAgICAuZmlsdGVyKChpKSA9PiBzaXplc1tpXSA8IGxlbmd0aHNbaV0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gc2l6ZXNbYV0gLSBzaXplc1tiXSB8fCBhIC0gYilcbiAgICBjb25zdCBuZXh0ID0gY2FuZGlkYXRlcy5maW5kKChpKSA9PiB1c2VkKCkgKyBOdW1iZXIoc2l6ZXNbaV0gKyAxIDwgbGVuZ3Roc1tpXSkgPD0gYnVkZ2V0KVxuICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiBzaXplc1xuICAgIHNpemVzW25leHRdKytcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBXaW5kb3dTdGFydChjdXJyZW50LCB0YXJnZXQsIGxlbmd0aCwgc2l6ZSkge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCgwLCBsZW5ndGggLSBzaXplKVxuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnQsIG1heCkpXG4gIGNvbnN0IHNjcm9sbG9mZiA9IHNpemUgPiAyID8gMSA6IDBcbiAgaWYgKHRhcmdldCA8IDApIHJldHVybiBzdGFydFxuICBpZiAodGFyZ2V0IDwgc3RhcnQgKyBzY3JvbGxvZmYpIHJldHVybiBNYXRoLm1heCgwLCB0YXJnZXQgLSBzY3JvbGxvZmYpXG4gIGlmICh0YXJnZXQgPj0gc3RhcnQgKyBzaXplIC0gc2Nyb2xsb2ZmKSByZXR1cm4gTWF0aC5taW4obWF4LCB0YXJnZXQgLSBzaXplICsgc2Nyb2xsb2ZmICsgMSlcbiAgcmV0dXJuIHN0YXJ0XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTY3JvbGxCb3gsIFNwaW5uZXIsIHVzZUFuaW1hdGVkLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTW91c2UgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiwgUEVFUiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBoaWdobGlnaHQsIGxhbmdGb3JQYXRoIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuXG5leHBvcnQgeyBkZWZhdWx0VGl0bGUgYXMgdWlUaXRsZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvcmVjb3JkZXIuanMnXG5cbmZ1bmN0aW9uIFByb3NlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8dGV4dD57c2hvd259PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvZGVTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IFsuLi5saW5lXS5sZW5ndGgpKSArIDJcbiAgcmV0dXJuIChcbiAgICA8SG9yaXpvbnRhbFNjcm9sbEJveCBjb250ZW50V2lkdGg9e2NvbnRlbnRXaWR0aH0gc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwga2V5KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrZXl9IHN0eWxlPXt7IG92ZXJmbG93OiAnbm93cmFwJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvSG9yaXpvbnRhbFNjcm9sbEJveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUcmFuc2NyaXB0Q29kZUJsb2NrKHByb3BzKSB7XG4gIGNvbnN0IGxhbmd1YWdlID0gcHJvcHMubGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgQ29tcG9uZW50ID0gWydtZCcsICdtYXJrZG93bicsICd0ZXh0JywgJ3R4dCcsICdwbGFpbnRleHQnXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBQcm9zZVNuaXBwZXQgOiBDb2RlU25pcHBldFxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydCkge1xuICBpZiAoIWRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiB7IGJlZm9yZTogU3RyaW5nKHJldmVydD8uYmVmb3JlIHx8ICcnKSwgYWZ0ZXI6IFN0cmluZyhyZXZlcnQ/LmFmdGVyIHx8ICcnKSB9XG4gIGNvbnN0IGJlZm9yZSA9IFtdXG4gIGNvbnN0IGFmdGVyID0gW11cbiAgZGlmZi5odW5rcy5mb3JFYWNoKChodW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgYmVmb3JlLnB1c2goJ1x1MjJFRicpXG4gICAgICBhZnRlci5wdXNoKCdcdTIyRUYnKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ2FkZCcpIGJlZm9yZS5wdXNoKGxpbmUudGV4dClcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdyZW1vdmUnKSBhZnRlci5wdXNoKGxpbmUudGV4dClcbiAgICB9XG4gIH0pXG4gIHJldHVybiB7IGJlZm9yZTogYmVmb3JlLmpvaW4oJ1xcbicpLCBhZnRlcjogYWZ0ZXIuam9pbignXFxuJykgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCkge1xuICBpZiAoZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIGRpZmYuaHVua3MucmVkdWNlKChzdW0sIGgpID0+IHN1bSArIGgubGluZXMubGVuZ3RoLCAwKVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICByZXR1cm4gTWF0aC5tYXgocHJldmlldy5hZnRlci5zcGxpdCgnXFxuJykubGVuZ3RoLCBwcmV2aWV3LmJlZm9yZS5zcGxpdCgnXFxuJykubGVuZ3RoLCAyKVxufVxuXG5mdW5jdGlvbiBmbXREdXJhdGlvbihtcykge1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2BcbiAgY29uc3Qgc2VjcyA9IE1hdGgucm91bmQobXMgLyAxMDAwKVxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gZm10UnVubmluZyhtcykge1xuICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gIHJldHVybiBzZWNzIDwgNjAgPyBgJHtzZWNzfXNgIDogYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBjb25zdCByZ2IgPSAoY29sb3IpID0+IGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3XG4gICAgPyBbMSwgMywgNV0ubWFwKChpKSA9PiBwYXJzZUludChjb2xvci5zbGljZShpLCBpICsgMiksIDE2KSlcbiAgICA6IFsxMjcsIDEyNywgMTI3XVxuICBjb25zdCBhID0gcmdiKGZyb20pXG4gIGNvbnN0IGIgPSByZ2IodG8pXG4gIHJldHVybiBgIyR7YS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTElNSVQgPSA1XG5jb25zdCBCQVNIX09VVFBVVF9MSU5FUyA9IDEwXG5jb25zdCBUT09MX05BTUVfRkxBU0hfTVMgPSA5MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyA9IDUwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX01TID0gNzAwXG5cbmZ1bmN0aW9uIGRlbGF5ZWRMaW5lYXIodCkge1xuICBjb25zdCBkZWxheSA9IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyAvIChERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMpXG4gIHJldHVybiB0IDw9IGRlbGF5ID8gMCA6ICh0IC0gZGVsYXkpIC8gKDEgLSBkZWxheSlcbn1cblxuZnVuY3Rpb24gRGVzY3JpcHRpb25SZXZlYWwoeyBjaGlsZHJlbiwgcnVubmluZyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKHJ1bm5pbmcgPyAwIDogMSwgZWFzZShERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMsIGRlbGF5ZWRMaW5lYXIpKVxuICBpZiAoIXJ1bm5pbmcpIHJldmVhbC5zZXQoMSlcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihhY2NlbnQoKSwgRkcsIHJldmVhbCgpKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCB9fT57Y2hpbGRyZW59PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5lcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW11cbiAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJylcbiAgaWYgKGxpbmVzLmF0KC0xKSA9PT0gJycpIGxpbmVzLnBvcCgpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBCYXNoT3V0cHV0KHsgdmFsdWUsIGxpbmVTdGFydCwgbGluZUNvdW50IH0pIHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXRMaW5lcyh2YWx1ZSlcbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3duID0gbGluZXMuc2xpY2UoLUJBU0hfT1VUUFVUX0xJTkVTKVxuICBjb25zdCBmaXJzdCA9IGxpbmVTdGFydCB8fCAobGluZUNvdW50ID8gbGluZUNvdW50IC0gc2hvd24ubGVuZ3RoICsgMSA6IGxpbmVzLmxlbmd0aCAtIHNob3duLmxlbmd0aCArIDEpXG4gIGNvbnN0IGxhc3QgPSBsaW5lQ291bnQgfHwgZmlyc3QgKyBzaG93bi5sZW5ndGggLSAxXG4gIGNvbnN0IGd1dHRlcldpZHRoID0gU3RyaW5nKGxhc3QpLmxlbmd0aFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtzaG93bi5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgPGJveCBrZXk9e2ZpcnN0ICsgaX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtTdHJpbmcoZmlyc3QgKyBpKS5wYWRTdGFydChndXR0ZXJXaWR0aCl9IGB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbXBhY3RUb29sU2lnbih7IHRvb2wgfSkge1xuICBpZiAodG9vbC5uYW1lICE9PSAnYmFzaCcpIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG4gIGlmICh0b29sLmJhY2tncm91bmQpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eydcdTIxQUEgJ308L3RleHQ+XG4gIGlmICh0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aDogMiB9fT48U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+PC9ib3g+XG4gIGlmICh0b29sLmV4aXRDb2RlID09PSAwKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PnsnXHUyNzEzICd9PC90ZXh0PlxuICBpZiAodG9vbC5leGl0Q29kZSAhPSBudWxsKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57J1x1MDBENyAnfTwvdGV4dD5cbiAgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gVG9vbEdyb3VwKHsgaXRlbSwgdmVyYm9zZSB9KSB7XG4gIGNvbnN0IGxhdGVzdENhbGxJZCA9IGl0ZW0udG9vbHMuYXQoLTEpPy5jYWxsSWRcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoVE9PTF9OQU1FX0ZMQVNIX01TLCBsaW5lYXIpKVxuICBpZiAobGF0ZXN0Q2FsbElkICE9PSBnbG93Ll9jYWxsSWQpIHtcbiAgICBnbG93Ll9jYWxsSWQgPSBsYXRlc3RDYWxsSWRcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHtcbiAgICAgIGdsb3cuc25hcCgxKVxuICAgICAgZ2xvdy5zZXQoMClcbiAgICB9XG4gIH1cblxuICBpZiAodmVyYm9zZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7KGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSwgaSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgICAgICAgID8gPE1lc3NhZ2Uga2V5PXtpfSBpdGVtPXtlbnRyeX0gdmVyYm9zZSAvPlxuICAgICAgICAgIDogPFRvb2xDYXJkIGtleT17aX0gey4uLmVudHJ5fSB2ZXJib3NlIC8+KX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHRvb2wgb2YgaXRlbS50b29scykgY291bnRzLnNldCh0b29sLm5hbWUsIChjb3VudHMuZ2V0KHRvb2wubmFtZSkgfHwgMCkgKyAxKVxuICBjb25zdCBlbnRyaWVzID0gWy4uLmNvdW50c11cbiAgY29uc3QgdG90YWxNcyA9IGl0ZW0udG9vbHMucmVkdWNlKChzdW0sIHRvb2wpID0+IHN1bSArICh0b29sLmR1cmF0aW9uTXMgfHwgMCksIDApXG4gIGNvbnN0IGxhdGVzdE5hbWUgPSBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZVxuICBjb25zdCBhY3Rpdml0eSA9IChpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICA/IHsgLi4uZW50cnksIG5hbWU6ICd0aG91Z2h0cycsIGRlc2NyaXB0aW9uOiBlbnRyeS50ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksIHRob3VnaHQ6IHRydWUgfVxuICAgIDogZW50cnkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmRlc2NyaXB0aW9uKVxuICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5zbGljZSgtVE9PTF9ERVNDUklQVElPTl9MSU1JVClcbiAgY29uc3QgaGlkZGVuRGVzY3JpcHRpb25zID0gYWN0aXZpdHkubGVuZ3RoIC0gZGVzY3JpcHRpb25zLmxlbmd0aFxuICBjb25zdCB0b29sTmFtZVdpZHRoID0gTWF0aC5tYXgoMCwgLi4uZGVzY3JpcHRpb25zLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUubGVuZ3RoKSlcbiAgY29uc3QgdmlzaWJsZUJhc2ggPSBpdGVtLmFjdGl2ZSAmJiBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZSA9PT0gJ2Jhc2gnID8gaXRlbS50b29scy5hdCgtMSkgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICB7aXRlbS5hY3RpdmUgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjcxMzwvdGV4dD59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhXcmFwOiAnd3JhcCcsIGZsZXhHcm93OiAxLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PiBDYWxsZWQgPC90ZXh0PlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW25hbWUsIGNvdW50XSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtuYW1lfSBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgJiYgbmFtZSA9PT0gbGF0ZXN0TmFtZSA/IG1peENvbG9yKEZHLCBhY2NlbnQoKSwgZ2xvdygpKSA6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAge2Ake2kgPyAnLCAnIDogJyd9JHtuYW1lfSR7Y291bnQgPT09IDEgPyAnJyA6IGAgJHtjb3VudH0gdGltZXNgfWB9XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dG90YWxNcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntmbXREdXJhdGlvbih0b3RhbE1zKX08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAge2hpZGRlbkRlc2NyaXB0aW9ucyA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8dGV4dD57JyAnLnJlcGVhdCh0b29sTmFtZVdpZHRoICsgNCl9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgLi4uJHtoaWRkZW5EZXNjcmlwdGlvbnN9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rlc2NyaXB0aW9ucy5tYXAoKHRvb2wsIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17dG9vbC5jYWxsSWQgfHwgYHRob3VnaHQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodCA/IDx0ZXh0PnsnICAnfTwvdGV4dD4gOiA8Q29tcGFjdFRvb2xTaWduIHRvb2w9e3Rvb2x9IC8+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRvb2wudGhvdWdodCB9fT57YCR7dG9vbC5uYW1lLnBhZFN0YXJ0KHRvb2xOYW1lV2lkdGgpfSAgYH08L3RleHQ+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0XG4gICAgICAgICAgICAgID8gPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PjxNYXJrZG93biB0ZXh0PXt0b29sLmRlc2NyaXB0aW9ufSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0gLz48L2JveD5cbiAgICAgICAgICAgICAgOiA8RGVzY3JpcHRpb25SZXZlYWwgcnVubmluZz17dG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJ30+e3Rvb2wuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvblJldmVhbD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICB7dmlzaWJsZUJhc2g/LnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh2aXNpYmxlQmFzaC50aXRsZSwgJ2Jhc2gnKX08L3RleHQ+fVxuICAgICAgICB7dmlzaWJsZUJhc2g/LmZ1bGxPdXRwdXQgJiYgPEJhc2hPdXRwdXQgdmFsdWU9e3Zpc2libGVCYXNoLmZ1bGxPdXRwdXR9IGxpbmVTdGFydD17dmlzaWJsZUJhc2gub3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVDb3VudH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sQ2FyZCh7IG5hbWUsIHRpdGxlLCB0aXRsZUxhbmcsIGRlc2NyaXB0aW9uLCBzdGF0dXMsIGRpZmYsIHJldmVydCwgZnVsbE91dHB1dCwgb3V0cHV0TGluZVN0YXJ0LCBvdXRwdXRMaW5lQ291bnQsIGVycm9yLCBiYWNrZ3JvdW5kLCB2ZXJib3NlLCBzdGFydGVkQXQsIGR1cmF0aW9uTXMgfSkge1xuICBjb25zdCBzaG93blRpdGxlID0gbmFtZSA9PT0gJ2Jhc2gnID8gbnVsbCA6IHRpdGxlTGFuZyAmJiB0aXRsZSA/IGhpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nKSA6IHRpdGxlXG4gIGNvbnN0IGlubGluZURlc2NyaXB0aW9uID0gIXNob3duVGl0bGVcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgY29uc3QgcnVubmluZyA9IHN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gIGNvbnN0IGludGVycnVwdGVkID0gc3RhdHVzID09PSAnaW50ZXJydXB0ZWQnXG4gIGNvbnN0IHJldmVydGVkID0gc3RhdHVzID09PSAncmV2ZXJ0ZWQnXG4gIGNvbnN0IGZhaWxlZCA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICBjb25zdCBvdXRMaW5lcyA9IGZ1bGxPdXRwdXQgPyBmdWxsT3V0cHV0LnNwbGl0KCdcXG4nKSA6IG51bGxcblxuICBjb25zdCBlbGFwc2VkID0gcnVubmluZyAmJiBzdGFydGVkQXQgPyBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDogMFxuICBjb25zdCB0b29rID0gIXJ1bm5pbmcgJiYgIWJhY2tncm91bmQgJiYgZHVyYXRpb25NcyAhPSBudWxsID8gZm10RHVyYXRpb24oZHVyYXRpb25NcykgOiBudWxsXG5cbiAgY29uc3QgaW5mbyA9IHJ1bm5pbmcgPyAoZWxhcHNlZCA+PSA1MDAwID8gYHJ1bm5pbmcgKCR7Zm10UnVubmluZyhlbGFwc2VkKX0pYCA6ICdydW5uaW5nJylcbiAgICA6IGludGVycnVwdGVkID8gJ2ludGVycnVwdGVkJ1xuICAgIDogcmV2ZXJ0ZWQgPyAncmV2ZXJ0ZWQnXG4gICAgOiBmYWlsZWQgPyBgZmFpbGVkJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBiYWNrZ3JvdW5kID8gJ2JhY2tncm91bmQgIHNoZWxsIGxpc3RlZCBiZWxvdydcbiAgICA6IGRpZmYgPyBgKyR7ZGlmZi5hZGRpdGlvbnN9IC0ke2RpZmYuZGVsZXRpb25zfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogb3V0TGluZXMgPyBgJHtvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RofSAkeyhvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RoKSA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBgZG9uZSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICB7cnVubmluZ1xuICAgICAgICAgID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPlxuICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGludGVycnVwdGVkIHx8IGZhaWxlZCA/IFJFRCA6IHJldmVydGVkID8gTVVURUQgOiBhY2NlbnQoKSB9fT57aW50ZXJydXB0ZWQgPyAnXHUyNzE3JyA6IGZhaWxlZCA/ICdcdTI3MTcnIDogcmV2ZXJ0ZWQgPyAnXHUyMUE5JyA6ICdcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57YCR7bmFtZS5wYWRFbmQoNSl9IGB9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkcgfX0+e3Nob3duVGl0bGUgfHwgZGVzY3JpcHRpb24gfHwgbmFtZX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2luZm99YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIHtkZXNjcmlwdGlvbiAmJiAhaW5saW5lRGVzY3JpcHRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Rlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiB0aXRsZSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcgfHwgJ2Jhc2gnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtmYWlsZWQgJiYgZXJyb3IgJiYgKFxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2Vycm9yfWB9PC90ZXh0PlxuICAgICAgKX1cbiAgICAgIHtyZXZlcnQgJiYgIXJ1bm5pbmcgJiYgIXJldmVydGVkICYmICEoZGlmZiAmJiBkaWZmLmFkZGl0aW9ucyA9PT0gMCAmJiBkaWZmLmRlbGV0aW9ucyA9PT0gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8RGlmZlxuICAgICAgICAgICAgYmVmb3JlPXtwcmV2aWV3LmJlZm9yZX1cbiAgICAgICAgICAgIGFmdGVyPXtwcmV2aWV3LmFmdGVyfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmdGb3JQYXRoKHJldmVydC5wYXRoKX1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29udGV4dD17M31cbiAgICAgICAgICAgIGZvbGRzPXtmYWxzZX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIGZ1bGxPdXRwdXQgJiYgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT48QmFzaE91dHB1dCB2YWx1ZT17ZnVsbE91dHB1dH0gbGluZVN0YXJ0PXtvdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17b3V0cHV0TGluZUNvdW50fSAvPjwvYm94Pn1cbiAgICAgIHtvdXRMaW5lcyAmJiB2ZXJib3NlICYmIG5hbWUgIT09ICdiYXNoJyAmJiAhcnVubmluZyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7b3V0TGluZXMuc2xpY2UoMCwgMjAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge291dExpbmVzLmxlbmd0aCA+IDIwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtvdXRMaW5lcy5sZW5ndGggLSAyMDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25UdXJuKHsgaXRlbSwgdmVyYm9zZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHBhaXJlZCA9IGZhbHNlLCBib3JkZXIgPSB0cnVlLCBwYW5lSGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBwYXJ0aWNpcGFudEEgPSBpdGVtLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCBpdGVtLnJvbGUgPT09ICdwcm9wb3NlcidcbiAgY29uc3Qgc3ludGhlc2lzID0gaXRlbS5yb2xlID09PSAnc3ludGhlc2lzJ1xuICBjb25zdCBsYWJlbCA9IHN5bnRoZXNpcyA/ICdTeW50aGVzaXMnIDogYCR7cGFydGljaXBhbnRBID8gJ1BhcnRpY2lwYW50IEEnIDogJ1BhcnRpY2lwYW50IEInfSAgcm91bmQgJHtpdGVtLnJvdW5kfWBcbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKHBhbmVIZWlnaHQgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSAmJiAoZXZlbnQuYWN0aW9uID09PSAnc2Nyb2xsJyB8fCBldmVudC5hY3Rpb24gPT09ICdwcmVzcycpKSBvbkZvY3VzPy4oKVxuICB9KVxuICBjb25zdCB0b29scyA9IGNvbXBhY3RUb29sSGlzdG9yeSA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtLnRvb2xzIHx8IFtdLCAhIWl0ZW0uYWN0aXZlICYmICFpdGVtLnRleHQpIDogaXRlbS50b29scyB8fCBbXVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IHBhaXJlZCA/IDAgOiAyLCBoZWlnaHQ6IHBhbmVIZWlnaHQsIGJnOiBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhHcm93OiBwYW5lSGVpZ2h0ID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2JvcmRlciAmJiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQgfX0gLz59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkIHx8IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+XG4gICAgICAgICAge3BhbmVIZWlnaHQgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7IHNldE9mZnNldChuZXh0KTsgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pIH19XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPn1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25Db250ZW50KHsgdG9vbHMsIHRleHQsIHZlcmJvc2UgfSkge1xuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICB7dG9vbHMubWFwKCh0b29sKSA9PiA8TWVzc2FnZSBrZXk9e3Rvb2wuY2FsbElkfSBpdGVtPXt0b29sfSB2ZXJib3NlPXt2ZXJib3NlfSAvPil9XG4gICAgICAgICAge3RleHQgJiYgdG9vbHMubGVuZ3RoID4gMCAmJiA8dGV4dD4gPC90ZXh0Pn1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgPC9ib3g+XG59XG5cbmZ1bmN0aW9uIGRlbGliZXJhdGlvblJvd3ModHVybnMpIHtcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGZvciAoY29uc3QgdHVybiBvZiB0dXJucykge1xuICAgIGlmICh0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnIHx8ICF0dXJuLnBhcmFsbGVsR3JvdXApIHtcbiAgICAgIHJvd3MucHVzaChbdHVybl0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHJvd3MuZmluZCgocm93KSA9PiByb3dbMF0/LnBhcmFsbGVsR3JvdXAgPT09IHR1cm4ucGFyYWxsZWxHcm91cClcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnB1c2godHVybilcbiAgICBlbHNlIHJvd3MucHVzaChbdHVybl0pXG4gIH1cbiAgcmV0dXJuIHJvd3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlbGliZXJhdGlvbkV4Y2hhbmdlKHsgdHVybnMsIHZlcmJvc2UsIHdpZGUsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCB2aWV3cG9ydEhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgaWQgPSB0dXJuID0+IGAke3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWBcbiAgY29uc3Qgc2VsZWN0ZWRJZCA9IHNlbGVjdGVkKCkgfHwgKHR1cm5zWzBdICYmIGlkKHR1cm5zWzBdKSlcbiAgY29uc3QgZm9jdXNUdXJuID0gdHVybiA9PiB7IHNldFNlbGVjdGVkKGlkKHR1cm4pKTsgb25Gb2N1cz8uKCkgfVxuICB1c2VJbnB1dChldmVudCA9PiB7XG4gICAgaWYgKCFmb2N1c2VkIHx8IChldmVudC5rZXkgIT09ICdsZWZ0JyAmJiBldmVudC5rZXkgIT09ICdyaWdodCcpKSByZXR1cm5cbiAgICBjb25zdCBpbmRleCA9IHR1cm5zLmZpbmRJbmRleCh0dXJuID0+IGlkKHR1cm4pID09PSBzZWxlY3RlZElkKVxuICAgIGNvbnN0IG5leHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0dXJucy5sZW5ndGggLSAxLCBpbmRleCArIChldmVudC5rZXkgPT09ICdsZWZ0JyA/IC0xIDogMSkpKVxuICAgIGlmICh0dXJuc1tuZXh0XSkgZm9jdXNUdXJuKHR1cm5zW25leHRdKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIGNvbnN0IHBhbmVIZWlnaHQgPSB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAodHVybnMuc29tZSh0dXJuID0+IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycpID8gMC42IDogMSkpIC0gMSkgOiB1bmRlZmluZWRcbiAgY29uc3QgcGFuZVByb3BzID0gdHVybiA9PiAoeyBwYW5lSGVpZ2h0OiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnICYmIHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqIDAuMzUpKSA6IHBhbmVIZWlnaHQsIGZvY3VzZWQ6IGZvY3VzZWQgJiYgc2VsZWN0ZWRJZCA9PT0gaWQodHVybiksIG9uRm9jdXM6ICgpID0+IGZvY3VzVHVybih0dXJuKSB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge2RlbGliZXJhdGlvblJvd3ModHVybnMpLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzeW50aGVzaXMgPSByb3dbMF0/LnJvbGUgPT09ICdzeW50aGVzaXMnXG4gICAgICAgIGlmICghd2lkZSB8fCBzeW50aGVzaXMpIHJldHVybiByb3cubWFwKCh0dXJuKSA9PiA8RGVsaWJlcmF0aW9uVHVybiBrZXk9e2Ake3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWB9IGl0ZW09e3R1cm59IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSB7Li4ucGFuZVByb3BzKHR1cm4pfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57bGVmdCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtsZWZ0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMobGVmdCl9IC8+fTwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMocmlnaHQpfSAvPn08L2JveD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzaG93TG9ja2VkID0gZmFsc2UgfSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiA8VG9vbEdyb3VwIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInICYmIGl0ZW0ub3JpZ2luID09PSAndmlldycpIHtcbiAgICBjb25zdCBsYWJlbCA9IC9eXFxbdmlldzogKFteXFxdXSspXFxdLy5leGVjKGl0ZW0udGV4dCk/LlsxXSB8fCAnaW1hZ2UnXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTI3MTMgVmlld2VkICR7bGFiZWx9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0ubm90aWNlcy5sZW5ndGh9IGFnZW50cyBmaW5pc2hlZGB9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5ub3RpY2VzLm1hcCgobm90aWNlLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e25vdGljZS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX08L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJykge1xuICAgIHJldHVybiA8VG9vbENhcmQgey4uLml0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3VtbWFyeScpIHtcbiAgICBjb25zdCBsaW5lcyA9IGl0ZW0udGV4dC5zcGxpdCgnXFxuJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2l0ZW0uc291cmNlID09PSAnY29tcGFjdCcgPyAnXHUyNzI2IHN1bW1hcnkgIGNvbnZlcnNhdGlvbiBjb21wYWN0ZWQgYWJvdmUgdGhpcyBwb2ludCcgOiAnXHUyNzI2IHN1bW1hcnkgIHJld291bmQgY29udmVyc2F0aW9uJ308L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bGluZXMubGVuZ3RofSAke2xpbmVzLmxlbmd0aCA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9YH08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2xpbmVzLnNsaWNlKDAsIDUwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2xpbmVzLmxlbmd0aCA+IDUwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtsaW5lcy5sZW5ndGggLSA1MDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxNYXJrZG93biB0ZXh0PXtpdGVtLnRleHR9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJykge1xuICAgIHJldHVybiA8Ym94IHN0eWxlPXt7IG1hcmdpblRvcDogMSB9fT48RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPjwvYm94PlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ25vdGljZScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdza2lsbCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNzI2IHNraWxsOiAke2l0ZW0ubmFtZX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNTAwXHUyNTAwICR7aXRlbS5jb3VudH0gdG9vbCAke2l0ZW0uY291bnQgPT09IDEgPyAnaW50ZXJhY3Rpb24nIDogJ2ludGVyYWN0aW9ucyd9IGhpZGRlbiBcdTI1MDBcdTI1MDBgfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1jb21tYW5kJykge1xuICAgIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0KGl0ZW0udGV4dCwgJ2Jhc2gnKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PnsnY29tbWFuZCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfT57YCR7aSA9PT0gMCA/ICckICcgOiAnICAnfSR7bGluZSB8fCAnICd9YH08L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtb3V0cHV0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19Pnsnb3V0cHV0J308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtpdGVtLnRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3BlZXInKSB7XG4gICAgY29uc3QgaW5jb21pbmcgPSBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJ1xuICAgIGNvbnN0IHVucmVhZCA9IGluY29taW5nICYmICFpdGVtLnJlYWRcbiAgICBjb25zdCBjb2xvciA9IGluY29taW5nICYmIGl0ZW0ucmVhZCA/IE1VVEVEIDogUEVFUlxuICAgIGNvbnN0IGRlbGl2ZXJ5U3RhdHVzID0gaXRlbS5zdGF0dXMgfHwgJ3Vua25vd24nXG4gICAgY29uc3Qgc3RhdHVzID0gaW5jb21pbmcgPyBgICgke3VucmVhZCA/ICd1bnJlYWQnIDogJ3JlYWQnfSk6YCA6IGRlbGl2ZXJ5U3RhdHVzID09PSAnZGVsaXZlcmVkJyA/ICc6JyA6IGAgKCR7ZGVsaXZlcnlTdGF0dXN9KTpgXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBQRUVSLCBib2xkOiB0cnVlIH19PntgJHtpbmNvbWluZyA/ICdmcm9tJyA6ICd0byd9IEAke2luY29taW5nID8gaXRlbS5mcm9tLm5hbWUgOiBpdGVtLnRvLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3IsIGJvbGQ6IHVucmVhZCB9fT57c3RhdHVzfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICB7aXRlbS5lcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntpdGVtLmVycm9yfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW1zLCBhY3RpdmUgPSBmYWxzZSkge1xuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDspIHtcbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2ldLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbZW5kXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbZW5kXS5raW5kID09PSAndGhvdWdodHMnKSkgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIGNvbnN0IHRvb2xzID0gcnVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndG9vbCcpXG4gICAgICByZXN1bHQucHVzaCh7IGtpbmQ6ICd0b29sLWdyb3VwJywgY2FsbElkOiB0b29scy5hdCgtMSk/LmNhbGxJZCwgaXRlbXM6IHJ1biwgdG9vbHMsIGFjdGl2ZTogYWN0aXZlICYmIGVuZCA9PT0gaXRlbXMubGVuZ3RoIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbaV0uYWdlbnRDb21wbGV0aW9uKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbZW5kXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tlbmRdLmFnZW50Q29tcGxldGlvbikgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIHJlc3VsdC5wdXNoKHJ1bi5sZW5ndGggPT09IDEgPyBydW5bMF0gOiB7IGtpbmQ6ICdhZ2VudC1ub3RpY2UtZ3JvdXAnLCBub3RpY2VzOiBydW4gfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2krK10pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFdpbmRvdyhpdGVtcywgc2l6ZSkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGl0ZW1zLmxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IGhpZGRlbiA9IGl0ZW1zLnNsaWNlKDAsIHN0YXJ0KVxuICByZXR1cm4ge1xuICAgIGl0ZW1zOiBpdGVtcy5zbGljZShzdGFydCksXG4gICAgaGlkZGVuSXRlbXM6IGhpZGRlbi5sZW5ndGgsXG4gICAgaGlkZGVuQ291bnQ6IGhpZGRlbi5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIHNvdXJjZUl0ZW1Db3VudChpdGVtKSwgMCksXG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSXRlbUNvdW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gaXRlbS5pdGVtcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHJldHVybiBpdGVtLm5vdGljZXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHJldHVybiBpdGVtLmNvdW50XG4gIHJldHVybiAxXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0SW5wdXQsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGNvbnZlcnNhdGlvbk1hdGNoZXMsIGhpZ2hsaWdodENvbnZlcnNhdGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udmVyc2F0aW9uLXNlYXJjaC5qcydcblxuZnVuY3Rpb24gU2Nyb2xsQW5jaG9yKHsgdGFyZ2V0IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgdGFyZ2V0LmFuY2hvclkgPSBsYXlvdXQueVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBTZWFyY2hNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgY3VycmVudE1hdGNoLCBzZWFyY2ggfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBpZiAoY3VycmVudE1hdGNoKSBzZWFyY2guc2Nyb2xsVG9NYXRjaChsYXlvdXQsIGN1cnJlbnRNYXRjaClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSkge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW2NvbW1pdHRlZCwgc2V0Q29tbWl0dGVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2VudGVyRm9jdXMsIHNldEVudGVyRm9jdXNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2Nyb2xsUmVxdWVzdCwgc2V0U2Nyb2xsUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Njcm9sbF0gPSBjcmVhdGVTaWduYWwoeyBhbmNob3JZOiAwLCBrZXk6IG51bGwgfSlcblxuICBmdW5jdGlvbiByZWdpc3RlckZvY3VzKCkge1xuICAgIGlmICghYWN0aXZlKCkpIHJldHVyblxuICAgIGZtLml0ZW0oJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIGlmIChlbnRlckZvY3VzKCkpIHtcbiAgICAgIHNldEVudGVyRm9jdXMoZmFsc2UpXG4gICAgICBmbS5mb2N1cygnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbigpIHtcbiAgICBzZXRBY3RpdmUodHJ1ZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRFbnRlckZvY3VzKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSh7IHJlc3RvcmVGb2N1cyA9IHRydWUgfSA9IHt9KSB7XG4gICAgc2V0QWN0aXZlKGZhbHNlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIGlmIChyZXN0b3JlRm9jdXMgJiYgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkgZm0uZm9jdXMoJ2ZlZWQnKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQsIG1hdGNoZXMpIHtcbiAgICBpZiAoYWN0aXZlKCkgJiYgIWZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIHtcbiAgICAgIGNsb3NlKHsgcmVzdG9yZUZvY3VzOiBmYWxzZSB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKCFhY3RpdmUoKSB8fCAhY29tbWl0dGVkKCkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGNvdW50ID0gbWF0Y2hlcy5sZW5ndGhcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2UoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ24nICYmICFldmVudC5zaGlmdCkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpICsgMSkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdOJyB8fCAoZXZlbnQuc2hpZnQgJiYgZXZlbnQua2V5ID09PSAnbicpKSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgLSAxICsgY291bnQpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdvJykgcmV0dXJuIGZhbHNlXG4gICAgZWxzZSByZXR1cm4gdHJ1ZVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUoaXRlbXMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udmVyc2F0aW9uTWF0Y2hlcyhpdGVtcywgcXVlcnkoKSwgdmVyYm9zZSgpKVxuICAgIGNvbnN0IGxhc3RJbmRleCA9IE1hdGgubWF4KDAsIG1hdGNoZXMubGVuZ3RoIC0gMSlcbiAgICBpZiAoaW5kZXgoKSA+IGxhc3RJbmRleCkgc2V0SW5kZXgobGFzdEluZGV4KVxuICAgIHJldHVybiB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgaXRlbXM6IGFjdGl2ZSgpID8gaGlnaGxpZ2h0Q29udmVyc2F0aW9uKGl0ZW1zLCBxdWVyeSgpLCBpbmRleCgpLCB2ZXJib3NlKCkpIDogaXRlbXMsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2Nyb2xsVG9NYXRjaChsYXlvdXQsIG1hdGNoKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2Nyb2xsKClcbiAgICBjb25zdCBrZXkgPSBgJHtxdWVyeSgpfVxcMCR7aW5kZXgoKX1cXDAke3ZlcmJvc2UoKX1cXDAke3Njcm9sbFJlcXVlc3QoKX1gXG4gICAgaWYgKHRhcmdldC5rZXkgPT09IGtleSkgcmV0dXJuXG4gICAgdGFyZ2V0LmtleSA9IGtleVxuICAgIHNldEZvbGxvdyhmYWxzZSlcbiAgICBzZXRPZmZzZXQoTWF0aC5tYXgoMCwgbGF5b3V0LnkgLSB0YXJnZXQuYW5jaG9yWSArIG1hdGNoLmxpbmUgLSAzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KHZhbHVlKSB7XG4gICAgc2V0UXVlcnkodmFsdWUpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlLFxuICAgIHF1ZXJ5LFxuICAgIGNvbW1pdHRlZCxcbiAgICBpbmRleCxcbiAgICBmb2N1c2VkOiAoKSA9PiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpLFxuICAgIHJlZ2lzdGVyRm9jdXMsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICBoYW5kbGVJbnB1dCxcbiAgICBwcmVwYXJlLFxuICAgIHNjcm9sbDogc2Nyb2xsKCksXG4gICAgc2Nyb2xsVG9NYXRjaCxcbiAgICBjb21taXQ6ICgpID0+IHNldENvbW1pdHRlZCh0cnVlKSxcbiAgICB1cGRhdGVRdWVyeSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udmVyc2F0aW9uU2VhcmNoQmFyKHsgc2VhcmNoLCBtYXRjaGVzIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycvICd9PC90ZXh0PlxuICAgICAge3NlYXJjaC5jb21taXR0ZWQoKVxuICAgICAgICA/IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgZmxleEdyb3c6IDEgfX0+e3NlYXJjaC5xdWVyeSgpfTwvdGV4dD5cbiAgICAgICAgOiA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtzZWFyY2guZm9jdXNlZCgpfVxuICAgICAgICAgICAgdmFsdWU9e3NlYXJjaC5xdWVyeSgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NlYXJjaC51cGRhdGVRdWVyeX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtzZWFyY2guY29tbWl0fVxuICAgICAgICAgICAgb25DYW5jZWw9e3NlYXJjaC5jbG9zZX1cbiAgICAgICAgICAvPn1cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bWF0Y2hlcy5sZW5ndGggPyBgJHtzZWFyY2guaW5kZXgoKSArIDF9LyR7bWF0Y2hlcy5sZW5ndGh9YCA6ICcwLzAnfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBbmNob3IgYXMgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBTZWFyY2hNZXNzYWdlIGFzIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UgfVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrb1xcYDogQ2FwdHVyZSBzY3JlZW4gcmVnaW9uIChtYWNPUylcbi0gXFxgY3RybCtnXFxgOiBSZWNvcmQgKG1hY09TKVxuLSBcXGBlbnRlclxcYDogVHJhbnNjcmliZSByZWNvcmRpbmdcbi0gXFxgZXNjXFxgOiBDYW5jZWwgZGljdGF0aW9uXG5cbi0gXFxgZW50ZXJcXGAgc2VuZHM7IFxcYHNoaWZ0K2VudGVyXFxgIG9yIFxcYFxcXFw8ZW50ZXI+XFxgIGluc2VydHMgYSBuZXdsaW5lXG4tIFxcYEBcXGAgb3BlbnMgYSBmdXp6eSBmaWxlIHBpY2tlcjsgZW50ZXIgaW5zZXJ0cyB0aGUgc2VsZWN0ZWQgcGF0aFxuLSBkcmFnIGFuIGltYWdlIGZpbGUgaW50byB0aGUgdGVybWluYWwgdG8gYXR0YWNoIGl0OiBpdCBhcHBlYXJzIGlubGluZSBhcyBcXGBbSW1hZ2UgI05dXFxgLCBleGFjdGx5IHdoZXJlIHlvdXIgY3Vyc29yIGlzLCBzbyBpbWFnZXMgY2FuIHNpdCBiZXR3ZWVuIHNlbnRlbmNlczsgYmFja3NwYWNlIGFmdGVyIG9uZSByZW1vdmVzIHRoZSB3aG9sZSBhdHRhY2htZW50XG4tIFxcYHRhYlxcYCBjb21wbGV0ZXM6IFxcYC9zdW1tPHRhYj5cXGAgZmluaXNoZXMgdGhlIGNvbW1hbmQgbmFtZSBhbmQgY3ljbGVzIHRocm91Z2ggbWF0Y2hlcyBvbiByZXBlYXQ7IGFmdGVyIGFuIGFyZ3VtZW50IHNwYWNlIGl0IGNvbXBsZXRlcyB2YWx1ZXMgKFxcYC9tb2RlbCBmbGE8dGFiPlxcYCwgXFxgL2NvbG9yIDx0YWI+XFxgLCBcXGAvZWZmb3J0IDx0YWI+XFxgKSBhbmQgZmlsZSBwYXRocyBmb3Igc2tpbGxzIGFuZCBjb21tYW5kcy4gS2VlcCB0eXBpbmcgdG8gbmFycm93LCB0YWIgb3IgZW50ZXIgaW5zZXJ0c1xuLSBcXGB1cFxcYCBhbmQgXFxgZG93blxcYCBvbiBhbiBlbXB0eSBjb21wb3NlciByZWNhbGwgbWVzc2FnZXMgeW91IGFscmVhZHkgc2VudFxuLSBcXGBjdHJsK3JcXGAgb3BlbnMgcmV3aW5kIChzYW1lIGFzIFxcYC9yZXdpbmRcXGApOyBcXGAvaGlzdG9yeVxcYCBmdXp6eS1zZWFyY2hlcyB5b3VyIG9sZCBwcm9tcHRzIGFuZCBwdXRzIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiB0aGUgY29tcG9zZXJcbi0gXFxgY3RybCtzXFxgIG9wZW5zIHRoZSBzZXNzaW9uIHBpY2tlciAoc2FtZSBhcyBcXGAvcmVzdW1lXFxgKTsgXFxgY3RybCt0XFxgIG9wZW5zIHRoZSBtb2RlbCBwaWNrZXJcbi0gXFxgY3RybCtwXFxgIHN3aXRjaGVzIHByb2plY3RzOiBwaWNrIG9uZSBhbmQgcGljbyBqdW1wcyB0byBpdHMgbW9zdCByZWNlbnQgc2Vzc2lvbiwgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0b29scywgY29udGV4dCwgYW5kIE1DUCBzZXJ2ZXJzIHRvIG1hdGNoOyBcXGBjdHJsK3hcXGAgdHdpY2UgZGVsZXRlcyBhIHByb2plY3QncyBwaWNvIGhpc3RvcnkgKGFsbCBpdHMgc2Vzc2lvbnMgYW5kIG1lbW9yaWVzKTsgXFxgL25ld1xcYCBzdGFydHMgYSBmcmVzaCBzZXNzaW9uIGluIHRoZSBjdXJyZW50IHByb2plY3Rcbi0gXFxgY3RybCtiXFxgIGN5Y2xlcyB0aGlua2luZyBlZmZvcnQgKGRlZmF1bHQsIGxvdywgbWVkaXVtLCBoaWdoLCBtYXgpIG9uIG1vZGVscyB0aGF0IHN1cHBvcnQgaXQ7IFxcYC9lZmZvcnRcXGAgb3BlbnMgdGhlIGZ1bGwgcGlja2VyXG4tIGluc2lkZSBhIHNlYXJjaCBwYW5lbCwgXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgaW5zdGVhZDogdGhpcyBzZXNzaW9uLCB0aGlzIHByb2plY3QsIG9yIGV2ZXJ5d2hlcmVcbi0gXFxgL3Jld2luZFxcYCByZXN0b3JlcyB0aGUgY29udmVyc2F0aW9uIHRvIGFuIGVhcmxpZXIgbWVzc2FnZTsgYSByZXdpbmQgY2FuIGJlIHVuZG9uZSB3aXRoIFxcYGN0cmwrelxcYFxuLSBtZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBhZ2VudCBpcyByZXNwb25kaW5nIHF1ZXVlIHVwIGFib3ZlIHRoZSBjb21wb3NlciBhbmQgYXJlIGRlbGl2ZXJlZCBhcyBvbmUgbWVzc2FnZSB3aGVuIHRoZSB0dXJuIGZpbmlzaGVzOyBcXGB1cFxcYCBwdWxscyB0aGVtIGJhY2sgZm9yIGVkaXRpbmdcbi0gXFxgZXNjXFxgIGludGVycnVwdHMgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIG9yIGNsZWFycyB0aGUgY29tcG9zZXIgd2hlbiBpZGxlXG5cbiMjIE1vdmluZyBhcm91bmRcblxuLSBcXGB0YWJcXGAgc3dpdGNoZXMgZm9jdXMgYmV0d2VlbiB0aGUgdHJhbnNjcmlwdCBhbmQgdGhlIGNvbXBvc2VyXG4tIHdpdGggdGhlIHRyYW5zY3JpcHQgZm9jdXNlZCwgXFxgdXBcXGAvXFxgZG93blxcYC9cXGBqXFxgL1xcYGtcXGAgc2Nyb2xsIGFuZCBcXGBnXFxgL1xcYEdcXGAganVtcCB0byB0aGUgZW5kc1xuLSBsb25nIHNlc3Npb25zIHJlbmRlciBvbmx5IHRoZSBuZXdlc3QgNTAgbWVzc2FnZXM7IHNjcm9sbGluZyB0byB0aGUgdmVyeSB0b3AgbG9hZHMgb2xkZXIgb25lcyBpbiBiYXRjaGVzICh0aGUgdG9wIGxpbmUgc2hvd3MgaG93IG1hbnkgYXJlIGhpZGRlbilcbi0gdGhlIG1vdXNlIHdoZWVsIHNjcm9sbHM7IGNsaWNrLWRyYWcgc2VsZWN0cyB0ZXh0IGFuZCBjb3BpZXMgaXQgb24gcmVsZWFzZVxuLSBcXGBjdHJsK2NcXGAgdHdpY2UgZXhpdHNcblxuIyMgU2hlbGxzXG5cblRoZSBhZ2VudCBjYW4gcnVuIGxvbmctbGl2ZWQgcHJvY2Vzc2VzIChkZXYgc2VydmVycywgd2F0Y2hlcnMpIHdpdGggXFxgYmFzaCBiYWNrZ3JvdW5kOiB0cnVlXFxgLCB0aGVuIHJlYWQgdGhlaXIgb3V0cHV0IGFuZCBzdG9wIHRoZW0gaXRzZWxmLiBTaGVsbHMgYXBwZWFyIGJlbG93IHRoZSBjb21wb3NlciBhbmQgcmVtYWluIHRoZXJlIGFmdGVyIGV4aXQ6IHRhYiBmb2N1c2VzIHRoZSBsaXN0LCBqL2sgbW92ZXMsIGVudGVyIG9wZW5zIHRoZSBjb21tYW5kIGFuZCBsaXZlIG91dHB1dCwgYW5kIFxcYGN0cmwreFxcYCBraWxscyBhIHJ1bm5pbmcgc2hlbGwgb3IgZGlzbWlzc2VzIGEgZmluaXNoZWQgb25lLiBXaGVuIGEgc2hlbGwgZXhpdHMgb24gaXRzIG93biwgdGhlIGFnZW50IGlzIG5vdGlmaWVkIGFuZCByZXNwb25kczsgc2hlbGxzIGRpZSB3aXRoIHBpY28sIGFuZCBxdWl0dGluZyB3YXJucyB5b3UgaWYgYW55IGFyZSBzdGlsbCB1cC5cblxuIyMgU3Vic2NyaXB0aW9uc1xuXG5cXGAvY29ubmVjdFxcYCBsaXN0cyBzdWJzY3JpcHRpb24gcHJvdmlkZXJzIHlvdSBjYW4gc2lnbiBpbiB3aXRoIGluc3RlYWQgb2YgQVBJIGtleXMuIE9wZW5BSSAoQ2hhdEdQVCAvIENvZGV4IHBsYW4pIHNpZ25zIGluIHRocm91Z2ggeW91ciBicm93c2VyIHZpYSBPQXV0aDsgdG9rZW5zIGFyZSBzdG9yZWQgaW4gXFxgfi8ucGljby9hdXRoLmpzb25cXGAgYW5kIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2lnbiBpbiBvbmNlLiBPbmNlIGNvbm5lY3RlZCwgY29kZXggbW9kZWxzIGFwcGVhciBpbiBcXGAvbW9kZWxcXGAsIGJpbGxlZCB0byB5b3VyIHBsYW4uIFxcYGRcXGAgaW4gdGhlIHBhbmVsIGRpc2Nvbm5lY3RzLlxuXG4jIyBNZW1vcnlcblxuVGhlIGFnZW50IHNhdmVzIGR1cmFibGUgZmFjdHMgd2l0aCB0aGUgcmVtZW1iZXIgdG9vbDogb25lIGZpbGUgcGVyIG1lbW9yeSB1bmRlciBcXGB+Ly5waWNvL21lbW9yeVxcYCAoZ2xvYmFsKSBvciB0aGUgcHJvamVjdCdzIGRpcmVjdG9yeSBpbiBcXGB+Ly5waWNvL3Byb2plY3RzXFxgLiBPbmx5IGEgb25lLWxpbmUgaW5kZXggaXMgaW4gaXRzIGNvbnRleHQ7IGl0IGxvYWRzIGEgc3BlY2lmaWMgbWVtb3J5IHdpdGggdGhlIHJlY2FsbCB0b29sIHdoZW4gcmVsZXZhbnQuIFxcYC9tZW1vcnlcXGAgbGlzdHMgZXZlcnl0aGluZyBpdCBrbm93cyB3aXRoIGEgY29udGVudCBwcmV2aWV3OiBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBmaWx0ZXIgKGFsbCwgcHJvamVjdCwgZ2xvYmFsKSBhbmQgXFxgY3RybCt4XFxgIHR3aWNlIGZvcmdldHMgdGhlIHNlbGVjdGVkIG1lbW9yeS4gWW91IGNhbiBhbHNvIGFzayB0aGUgYWdlbnQgdG8gcmVtZW1iZXIsIGZvcmdldCwgb3IgY2xlYW4gdXAgaXRzIG1lbW9yaWVzIGluIHBsYWluIGxhbmd1YWdlLlxuXG4jIyBXYWtlLXVwc1xuXG5UaGUgYWdlbnQgY2FuIHNjaGVkdWxlIG9uZS10aW1lIHdha2UtdXBzIGZvciBpdHNlbGYgd2l0aCB0aGUgc2NoZWR1bGVfd2FrZXVwIHRvb2w6IGFmdGVyIHRoZSBkZWxheSBpdCByZWNlaXZlcyBpdHMgb3duIG5vdGUgYXMgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIGFuZCBhY3RzIG9uIGl0LiBSZWN1cnJpbmcgbG9vcHMgYXJlIGp1c3QgdGhlIGFnZW50IHJlc2NoZWR1bGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggd2FrZS11cC4gXFxgL3dha2V1cHNcXGAgbGlzdHMgcGVuZGluZyBvbmVzIHdpdGggbGl2ZSBjb3VudGRvd25zOyBlbnRlciBvciBcXGBjdHJsK3hcXGAgY2FuY2VscyAocHJlc3MgdHdpY2UpLiBBIFxcYFx1MjNGMCBOXFxgIGluIHRoZSBmb290ZXIgc2hvd3MgaG93IG1hbnkgYXJlIHBlbmRpbmcuIFdha2UtdXBzIGxpdmUgaW4gbWVtb3J5IGFuZCBhcmUgbG9zdCB3aGVuIHBpY28gZXhpdHMuXG5cbiMjIEFwcGVhcmFuY2VcblxucGljbyBwaWNrcyBhIGxpZ2h0IG9yIGRhcmsgcGFsZXR0ZSBhdCBzdGFydHVwIGJ5IGFza2luZyB0aGUgdGVybWluYWwgZm9yIGl0cyBiYWNrZ3JvdW5kIGNvbG9yIChPU0MgMTEpLCBzbyBpdCBtYXRjaGVzIHdoYXRldmVyIHRoZW1lIHlvdXIgdGVybWluYWwgdXNlcy4gXFxgL3RoZW1lXFxgIG9wZW5zIGEgcGlja2VyIHRoYXQgcHJldmlld3MgZWFjaCB0aGVtZSBhcyB5b3UgbW92ZSBhbmQgcGVyc2lzdHMgeW91ciBjaG9pY2UgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYDsgXFxgL3RoZW1lIGxpZ2h0XFxgLCBcXGAvdGhlbWUgZGFya1xcYCwgb3IgXFxgL3RoZW1lIGF1dG9cXGAgYXBwbGllcyBvbmUgZGlyZWN0bHkuIFxcYC9jb2xvclxcYCB0aW50cyBhIHNpbmdsZSBzZXNzaW9uJ3MgYWNjZW50IGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFsZXR0ZS5cblxuIyMgQ29udGV4dFxuXG5waWNvIHJlYWRzIEFHRU5UUy5tZCBmaWxlcyBhdXRvbWF0aWNhbGx5OiBhIGdsb2JhbCBvbmUgZnJvbSB+Ly5waWNvLCB0aGVuIGV2ZXJ5IGFuY2VzdG9yIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdXAgdG8gdGhlIGdpdCByb290LiBEZWVwZXIgZmlsZXMgd2luLiBBR0VOVFMubWQgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgbG9hZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSB0b29sIHRvdWNoZXMgdGhhdCBzdWJ0cmVlLiBJbiBhbnkgcHJvamVjdCBkaXJlY3Rvcnkgd2l0aG91dCBhbiBBR0VOVFMubWQsIGEgQ0xBVURFLm1kIGlzIGhvbm9yZWQgYXMgYSBmYWxsYmFjayBzbyBleGlzdGluZyByZXBvcyB3b3JrIHVuY2hhbmdlZDsgQUdFTlRTLm1kIGFsd2F5cyB3aW5zIHdoZW4gYm90aCBleGlzdCwgYW5kIHRoZSBmYWxsYmFjayBuZXZlciBhcHBsaWVzIHRvIHRoZSBnbG9iYWwgZmlsZS5cblxuU2Vzc2lvbnMgYXJlIHN0b3JlZCB1bmRlciB+Ly5waWNvIGFzIGpzb25sIGV2ZW50IGxvZ3M7IFxcYC9yZXN1bWVcXGAgZm9sZHMgb25lIGJhY2sgaW50byBleGFjdGx5IHRoaXMgdmlldy5cblxuXFxgL2NvbnRleHRcXGAgYnJlYWtzIGRvd24gd2hhdCB0aGUgbmV4dCByZXF1ZXN0IHdpbGwgY29udGFpbiAtIHN5c3RlbSBwcm9tcHQsIHRvb2wgc2NoZW1hcywgcHJvamVjdCBpbnN0cnVjdGlvbnMsIG1lbW9yeSBpbmRleCwgY29tcGFjdGlvbiBzdW1tYXJ5LCBhbmQgY29udmVyc2F0aW9uIC0gd2l0aCBhbiBlc3RpbWF0ZWQgc2l6ZSBmb3IgZWFjaCBwaWVjZSBuZXh0IHRvIHRoZSBwcm92aWRlci1tZWFzdXJlZCB0b3RhbC5cblxuVGhlIGZvb3RlcidzIFxcYGN0eCAlXFxgIHNob3dzIGhvdyBmdWxsIHRoZSBtb2RlbCdzIGNvbnRleHQgaXMuIEF0IDg1JSBwaWNvIGF1dG8tY29tcGFjdHM6IHRoZSBvbGRlciBjb252ZXJzYXRpb24gaXMgc3VtbWFyaXplZCBpbiBhIHN0cnVjdHVyZWQgZm9ybSwgdGhlIG1vc3QgcmVjZW50IHR1cm5zIGFyZSBrZXB0IHZlcmJhdGltLCBhbmQgdGhlIG1vZGVsIGlzIHRvbGQgd2hlcmUgdGhlIGZ1bGwgc2Vzc2lvbiBmaWxlIGxpdmVzIHNvIGl0IGNhbiByZWFkIGV4YWN0IGRldGFpbHMgYmFjayBvbiBkZW1hbmQuIE5vdGhpbmcgdmlzaWJsZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2NyaXB0LCBhbmQgcmV3aW5kIHN0aWxsIHdvcmtzIGFjcm9zcyBpdC4gXFxgL2NvbXBhY3RcXGAgcnVucyBpdCBtYW51YWxseSBhbmQgdGFrZXMgb3B0aW9uYWwgZm9jdXMgaW5zdHJ1Y3Rpb25zIChcXGAvY29tcGFjdCBmb2N1cyBvbiB0aGUgQVBJIGNoYW5nZXNcXGApLiBTZXQgXFxgXCJhdXRvQ29tcGFjdFwiOiBmYWxzZVxcYCBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB0cmlnZ2VyLlxuXG4tLS1cblxuKmVzYyB0YWtlcyB5b3UgYmFjayB0byB0aGUgY29udmVyc2F0aW9uKmBcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoeyBjb21tYW5kcywgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5waWNvICBoZWxwPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTIxOTFcdTIxOTMgc2Nyb2xsICBlc2MgYmFjazwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZCBzY3JvbGxiYXI+XG4gICAgICAgIDxNYXJrZG93biB0ZXh0PXtIRUxQX1RFWFQoY29tbWFuZHMpfSBjb2RlQmc9e251bGx9IC8+XG4gICAgICA8L1Njcm9sbEJveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLGNBQWMsV0FBVyxlQUFlO0FBQ2pELFNBQVMsYUFBYSxlQUFlLGtCQUFrQjtBQUN2RCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGlCQUFpQix5QkFBeUI7QUFDbkQsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxrQkFBa0I7QUFJM0IsU0FBUyxhQUFhLGFBQWEsT0FBTztBQUN4QyxRQUFNLFFBQVEsWUFBWSxRQUFRLFNBQVMsTUFBTSxLQUFLLE1BQU0sR0FBRyxF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cm92aWRlcnMiLCAiam9pbiIsICJtYWtlRXZlbnQiLCAicHJvdmlkZXJzIiwgImNvbmZpZyIsICJib290IiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZmlsZVVSTFRvUGF0aCIsICJyZWFkQ29uZmlnIiwgIlNjcm9sbEJveCIsICJ1c2VGb2N1cyIsICJ1c2VMYXlvdXQiLCAidXNlSW50ZXJ2YWwiLCAiY3JlYXRlU2lnbmFsIiwgImhvbWVkaXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAidXNlQW5pbWF0ZWQiLCAiaGlnaGxpZ2h0IiwgIndpZHRoIiwgImZ1enp5U2NvcmUiLCAianN4IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIm5hbWUiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZUZvY3VzIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJob21lZGlyIiwgIlNjcm9sbEJveCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIkJ1dHRvbiIsICJ1c2VJbnB1dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAicmFua0Z1enp5IiwgImZ1enp5U2NvcmUiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIk1lbnUiLCAiaG9tZWRpciIsICJidW5kbGVkIiwgInBlbmRpbmciLCAiZmFpbGVkIiwgInBlbmRpbmciLCAiY2FwdHVyZVJlZ2lvbiIsICJwZW5kaW5nIiwgImV4ZWNGaWxlIiwgIm1rZHRlbXAiLCAiZXhpc3RzU3luYyIsICJ0bXBkaXIiLCAiam9pbiIsICJlcnJvciIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiU3Bpbm5lciIsICJUZXh0QXJlYSIsICJ1c2VGb2N1cyIsICJ1c2VIaXRUZXN0IiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiU0VTU0lPTl9DT0xPUlMiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAiY3JlYXRlU2lnbmFsIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJsYWJlbCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgInVzZUxheW91dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJ1c2VJbnRlcnZhbCIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VIaXRUZXN0IiwgInVzZU1vdXNlIiwgImNyZWF0ZVNpZ25hbCIsICJib290IiwgInZlcnNpb24iLCAidXNlSW50ZXJ2YWwiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJlbGFwc2VkIiwgIlNFU1NJT05fQ09MT1JTIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAicm93IiwgImZ1enp5U2NvcmUiLCAiU2Nyb2xsQm94IiwgIlRleHRBcmVhIiwgIk1lbnUiLCAicGVuZGluZyIsICJTcGlubmVyIiwgImNvbXBhY3ROdW1iZXIiLCAianN4IiwgImlzRGV2SW5zdGFsbCIsICJydW5VcGRhdGUiLCAiZmV0Y2hMYXRlc3RWZXJzaW9uIiwgIm5ld2VyVmVyc2lvbiIsICJydW5IZWFkbGVzcyIsICJydW5TaGVsbCIsICJyZWFkQ29uZmlnIiwgImZpbGVVUkxUb1BhdGgiXQp9Cg==
|