tiny-markdown-editor 0.2.9 → 0.2.10
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/tiny-mde.js +28 -5
- package/dist/tiny-mde.min.js +1 -1
- package/dist/tiny-mde.tiny.js +1 -1
- package/lib/TinyMDE.d.ts +3 -1
- package/lib/TinyMDE.js +16 -2
- package/lib/TinyMDECommandBar.js +11 -2
- package/package.json +1 -1
package/dist/tiny-mde.js
CHANGED
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
action: editor => {
|
|
90
90
|
if (editor.isInlineFormattingAllowed()) editor.wrapSelection("[", "]()");
|
|
91
91
|
},
|
|
92
|
-
enabled:
|
|
92
|
+
enabled: editor => editor.isInlineFormattingAllowed() ? false : null,
|
|
93
93
|
innerHTML: svg.link,
|
|
94
94
|
title: "Insert link",
|
|
95
95
|
hotkey: "Mod-K"
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
action: editor => {
|
|
100
100
|
if (editor.isInlineFormattingAllowed()) editor.wrapSelection("![", "]()");
|
|
101
101
|
},
|
|
102
|
-
enabled:
|
|
102
|
+
enabled: editor => editor.isInlineFormattingAllowed() ? false : null,
|
|
103
103
|
innerHTML: svg.image,
|
|
104
104
|
title: "Insert image",
|
|
105
105
|
hotkey: "Mod2-Shift-I"
|
|
@@ -256,6 +256,15 @@
|
|
|
256
256
|
handleClick(commandName, event) {
|
|
257
257
|
if (!this.editor) return;
|
|
258
258
|
event.preventDefault();
|
|
259
|
+
// Focus the editor if it's not already focused
|
|
260
|
+
if (this.editor.e) {
|
|
261
|
+
const editorHadFocus = this.editor.e.contains(document.activeElement);
|
|
262
|
+
this.editor.e.focus();
|
|
263
|
+
// Only restore the last selection if the editor was not focused before
|
|
264
|
+
if (!editorHadFocus) {
|
|
265
|
+
this.editor.restoreLastSelection();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
259
268
|
if (typeof this.commands[commandName].action === "string") {
|
|
260
269
|
if (this.state[commandName] === false) this.editor.setCommandState(commandName, true);else this.editor.setCommandState(commandName, false);
|
|
261
270
|
} else if (typeof this.commands[commandName].action === "function") {
|
|
@@ -1849,6 +1858,7 @@
|
|
|
1849
1858
|
this.customInlineGrammar = {};
|
|
1850
1859
|
this.mergedInlineGrammar = inlineGrammar;
|
|
1851
1860
|
this.hasFocus = true;
|
|
1861
|
+
this.lastSelection = null;
|
|
1852
1862
|
this.listeners = {
|
|
1853
1863
|
change: [],
|
|
1854
1864
|
selection: [],
|
|
@@ -1869,6 +1879,7 @@
|
|
|
1869
1879
|
this.lineDirty = [];
|
|
1870
1880
|
this.lastCommandState = null;
|
|
1871
1881
|
this.hasFocus = true;
|
|
1882
|
+
this.lastSelection = null;
|
|
1872
1883
|
this.customInlineGrammar = props.customInlineGrammar || {};
|
|
1873
1884
|
this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);
|
|
1874
1885
|
this.listeners = {
|
|
@@ -2245,6 +2256,13 @@
|
|
|
2245
2256
|
let windowSelection = window.getSelection();
|
|
2246
2257
|
windowSelection.setBaseAndExtent(focusNode, focusOffset, anchorNode || focusNode, anchorNode ? anchorOffset : focusOffset);
|
|
2247
2258
|
}
|
|
2259
|
+
restoreLastSelection() {
|
|
2260
|
+
if (this.lastSelection && this.lastSelection.focus) {
|
|
2261
|
+
this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);
|
|
2262
|
+
return true;
|
|
2263
|
+
}
|
|
2264
|
+
return false;
|
|
2265
|
+
}
|
|
2248
2266
|
paste(text) {
|
|
2249
2267
|
let anchor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
2250
2268
|
let focus = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
@@ -3233,9 +3251,14 @@
|
|
|
3233
3251
|
}
|
|
3234
3252
|
}
|
|
3235
3253
|
fireSelection() {
|
|
3254
|
+
let focus = this.getSelection(false);
|
|
3255
|
+
let anchor = this.getSelection(true);
|
|
3256
|
+
// Save the current selection for restoration later
|
|
3257
|
+
this.lastSelection = {
|
|
3258
|
+
focus: focus,
|
|
3259
|
+
anchor: anchor
|
|
3260
|
+
};
|
|
3236
3261
|
if (this.listeners.selection && this.listeners.selection.length) {
|
|
3237
|
-
let focus = this.getSelection(false);
|
|
3238
|
-
let anchor = this.getSelection(true);
|
|
3239
3262
|
let commandState = this.getCommandState(focus, anchor);
|
|
3240
3263
|
if (this.lastCommandState) {
|
|
3241
3264
|
Object.assign(this.lastCommandState, commandState);
|
|
@@ -3259,4 +3282,4 @@
|
|
|
3259
3282
|
}));
|
|
3260
3283
|
//# sourceMappingURL=index.js.map
|
|
3261
3284
|
|
|
3262
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0S2V5Lm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtsYXN0S2V5fWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0S2V5Lm1hdGNoKC9eW2EtekEtWl0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYEtleSR7bGFzdEtleS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvdGtleS5rZXkgPSBsYXN0S2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaG90a2V5cy5wdXNoKGhvdGtleSk7XG4gICAgICAgICAgdGl0bGUgPSB0aXRsZS5jb25jYXQoYCAoJHttb2RpZmllcmV4cGxhbmF0aW9uLmpvaW4oXCIrXCIpfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGNvbW1hbmROYW1lLCBlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQodGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soY29tbWFuZE5hbWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlW2NvbW1hbmROYW1lXSA9PT0gZmFsc2UpXG4gICAgICAgICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgdHJ1ZSk7XG4gICAgICBlbHNlICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uIGFzIENvbW1hbmRBY3Rpb24pKHRoaXMuZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25cIiwgKGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGV2ZW50OiBTZWxlY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5jb21tYW5kU3RhdGUpIHtcbiAgICAgIGZvciAobGV0IGNvbW1hbmQgaW4gdGhpcy5jb21tYW5kcykge1xuICAgICAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkIShcbiAgICAgICAgICAgICAgdGhpcy5lZGl0b3IhLFxuICAgICAgICAgICAgICBldmVudC5mb2N1cyxcbiAgICAgICAgICAgICAgZXZlbnQuYW5jaG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuZm9jdXMgPyBmYWxzZSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSBldmVudC5jb21tYW5kU3RhdGVbY29tbWFuZF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fQWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0luYWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgb3V0ZXI6IGZvciAobGV0IGhvdGtleSBvZiB0aGlzLmhvdGtleXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGhvdGtleS5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09IGhvdGtleS5rZXkpIHx8XG4gICAgICAgIChob3RrZXkuY29kZSAmJiBldmVudC5jb2RlID09PSBob3RrZXkuY29kZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGxldCBtb2RpZmllciBvZiBob3RrZXkubW9kaWZpZXJzKSB7XG4gICAgICAgICAgaWYgKCEoZXZlbnQgYXMgYW55KVttb2RpZmllcl0pIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soaG90a2V5LmNvbW1hbmQsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kQmFyOyIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy40Mi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjUgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My40Mi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJlxuICAhU3ltYm9sLnNoYW0gJiZcbiAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLywgIFxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hfl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLiAgXG4gKi8gXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHsgXG4gIFRNSDE6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgyOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDM6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDQ6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg1OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDY6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNQmxvY2txdW90ZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfT5bIF0/KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1CbG9ja3F1b3RlXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKilcXHMqKShbXmBdKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KilcXHMqKSguKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1CbGFua0xpbmU6IHsgXG4gICAgcmVnZXhwOiAvXihbIFxcdF0qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJyQwJ1xuICB9LFxuICBUTVNldGV4dEgxTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM309K1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1TZXRleHRIMk1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9LStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNSFI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oXFwqWyBcXHRdKlxcKlsgXFx0XSpcXCpbIFxcdCpdKil8KC1bIFxcdF0qLVsgXFx0XSotWyBcXHQtXSopfChfWyBcXHRdKl9bIFxcdF0qX1sgXFx0X10qKSkkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IUlwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1VTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1VTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1PTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNT0xcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3VibGlzdHMgKGFuZCBhbnkgY29udGVudCB3aXRoaW4gbGlzdCBpdGVtcywgcmVhbGx5KSBmcm9tIHdvcmtpbmdcbiAgVE1JbmRlbnRlZENvZGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezR9fFxcdCkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSW5kZW50ZWRDb2RlXCI+JDE8L3NwYW4+JDInXG4gIH0sXG4gIFRNTGlua1JlZmVyZW5jZURlZmluaXRpb246IHtcbiAgICAvLyBUT0RPOiBMaW5rIGRlc3RpbmF0aW9uIGNhbid0IGluY2x1ZGUgdW5iYWxhbmNlZCBwYXJhbnRoZXNlcywgYnV0IHdlIGp1c3QgaWdub3JlIHRoYXQgaGVyZSBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcW1xccyopKFteXFxzXFxdXSg/OlteXFxdXXxcXFxcXFxdKSo/KShcXHMqXFxdOlxccyopKCg/OlteXFxzPD5dKyl8KD86PCg/OltePD5cXFxcXXxcXFxcLikqPikpPyhcXHMqKSgoPzpcXCgoPzpbXigpXFxcXF18XFxcXC4pKlxcKSl8KD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiKXwoPzonKD86W14nXFxcXF18XFxcXC4pKicpKT8oXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfRGVmaW5pdGlvblwiPiQyPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDM8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtEZXN0aW5hdGlvblwiPiQ0PC9zcGFuPiQ1PHNwYW4gY2xhc3M9XCJUTUxpbmtUaXRsZVwiPiQ2PC9zcGFuPiQ3JyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyLCAvLyB0aGlzIGRlZmluZXMgd2hpY2ggcGxhY2Vob2xkZXIgaW4gdGhlIGFib3ZlIHJlZ2V4IGlzIHRoZSBsaW5rIFwibGFiZWxcIlxuICB9LFxufTtcblxuLyoqXG4gKiBIVE1MIGJsb2NrcyBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9wZW5lciBhbmQgY2xvc2VyLiBUaGlzIGFycmF5IGRlZmluZXMgYWxsIHRoZSBjYXNlc1xuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrR3JhbW1hcjogSFRNTEJsb2NrUnVsZVtdID0gW1xuICB7IHN0YXJ0OiAvXiB7MCwzfTwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksIGVuZDogLyg/OjxcXC9zY3JpcHQ+fDxcXC9wcmU+fDxcXC9zdHlsZT4pL2ksIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IS0tLywgZW5kOiAvLS0+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTxcXD8vLCBlbmQ6IC9cXD8+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhW0EtWl0vLCBlbmQ6IC8+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhXFxbQ0RBVEFcXFsvLCBlbmQ6IC9cXF1cXF0+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/Ojx8PFxcLykoPzpLbm93blRhZykoPzpcXHN8PnxcXC8+fCQpL2ksIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/OkhUTUxPcGVuVGFnfEhUTUxDbG9zZVRhZylcXHMqJC8sIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IGZhbHNlfSxcbl07XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIHRoZSBvYmplY3Q6XG4gKiBUb3AgbGV2ZWwgZW50cmllcyBhcmUgcnVsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGluIHN0cmluZyBmb3JtYXQpIGFzIHdlbGwgYXMgYSByZXBsYWNlbWVudC5cbiAqIEluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLCByZXBsYWNlbWVudHMgZnJvbSB0aGUgb2JqZWN0ICdyZXBsYWNlbWVudHMnIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBjb21waWxpbmcgaW50byB0aGUgcHJvcGVydHkgcmVnZXhwLlxuICovXG5leHBvcnQgY29uc3QgaW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBlc2NhcGUgOiB7XG4gICAgcmVnZXhwOiAvXlxcXFwoQVNDSUlQdW5jdHVhdGlvbikvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUVzY2FwZVwiPlxcXFw8L3NwYW4+JDEnXG4gIH0sXG4gIGNvZGUgOiB7XG4gICAgcmVnZXhwOiAvXihgKykoKD86W15gXSl8KD86W15gXS4qP1teYF0pKShcXDEpLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDE8L3NwYW4+PGNvZGUgY2xhc3M9XCJUTUNvZGVcIj4kMjwvY29kZT48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDM8L3NwYW4+JyBcbiAgfSxcbiAgYXV0b2xpbmsgOiB7XG4gICAgcmVnZXhwOiAvXjwoKD86U2NoZW1lOlteXFxzPD5dKil8KD86RW1haWwpKT4vLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmd0Ozwvc3Bhbj4nXG4gIH0sXG4gIGh0bWwgOiB7XG4gICAgcmVnZXhwOiAvXigoPzpIVE1MT3BlblRhZyl8KD86SFRNTENsb3NlVGFnKXwoPzpIVE1MQ29tbWVudCl8KD86SFRNTFBJKXwoPzpIVE1MRGVjbGFyYXRpb24pfCg/OkhUTUxDREFUQSkpLyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1IVE1MXCI+JDE8L3NwYW4+JyxcbiAgfSxcbiAgbGlua09wZW4gOiB7XG4gICAgcmVnZXhwOiAvXlxcWy8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnXG4gIH0sXG4gIGltYWdlT3BlbiA6IHtcbiAgICByZWdleHA6IC9eIVxcWy8sXG4gICAgcmVwbGFjZW1lbnQgOiAnJ1xuICB9LFxuICBsaW5rTGFiZWwgOiB7XG4gICAgcmVnZXhwOiAvXihcXFtcXHMqKShbXlxcXV0qPykoXFxzKlxcXSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyXG4gIH0sXG4gIGRlZmF1bHQgOiB7XG4gICAgcmVnZXhwOiAvXigufCg/Ok5vdFRyaWdnZXJDaGFyKykpLyxcbiAgICByZXBsYWNlbWVudDogJyQxJ1xuICB9XG59O1xuXG4vLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiByZWdleHBzXG5jb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuXG4vLyBJbmxpbmVcbmNvbnN0IGlubGluZVJ1bGVzID0gWy4uLk9iamVjdC5rZXlzKGlubGluZUdyYW1tYXIpXTtcbmZvciAobGV0IHJ1bGUgb2YgaW5saW5lUnVsZXMpIHtcbiAgbGV0IHJlID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmZsYWdzKTtcbn1cblxuLy8gSFRNTCBCbG9jayAob25seSBvcGVuaW5nIHJ1bGUgaXMgcHJvY2Vzc2VkIGN1cnJlbnRseSlcbmZvciAobGV0IHJ1bGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICBsZXQgcmUgPSBydWxlLnN0YXJ0LnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgcnVsZS5zdGFydCA9IG5ldyBSZWdFeHAocmUsIHJ1bGUuc3RhcnQuZmxhZ3MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXJnZWQgaW5saW5lIGdyYW1tYXIgYnkgY29tYmluaW5nIHRoZSBkZWZhdWx0IGlubGluZSBncmFtbWFyIHdpdGggY3VzdG9tIHJ1bGVzLlxuICogQ3VzdG9tIHJ1bGVzIGFyZSBwcm9jZXNzZWQgYW5kIHRoZWlyIHJlZ2V4cCBwYXR0ZXJucyBhcmUgZXhwYW5kZWQgd2l0aCByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gY3VzdG9tUnVsZXMgLSBPYmplY3QgY29udGFpbmluZyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAqIEByZXR1cm5zIE1lcmdlZCBpbmxpbmUgZ3JhbW1hciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIoY3VzdG9tUnVsZXM6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9KTogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+IHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5pbmxpbmVHcmFtbWFyIH07XG4gIFxuICAvLyBQcm9jZXNzIGN1c3RvbSBydWxlc1xuICBmb3IgKGNvbnN0IFtydWxlTmFtZSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tUnVsZXMpKSB7XG4gICAgLy8gQ29weSB0aGUgcnVsZSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsXG4gICAgY29uc3QgcHJvY2Vzc2VkUnVsZSA9IHsgLi4ucnVsZSB9O1xuICAgIFxuICAgIC8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHRoZSByZWdleHBcbiAgICBsZXQgcmVnZXhwU291cmNlID0gcnVsZS5yZWdleHAuc291cmNlO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG4gICAgXG4gICAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZVxuICAgIHdoaWxlIChyZWdleHBTb3VyY2UubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgICByZWdleHBTb3VyY2UgPSByZWdleHBTb3VyY2UucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcm9jZXNzZWRSdWxlLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU291cmNlLCBydWxlLnJlZ2V4cC5mbGFncyk7XG4gICAgbWVyZ2VkW3J1bGVOYW1lXSA9IHByb2Nlc3NlZFJ1bGU7XG4gIH1cbiAgXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoPCwgPiwgYW5kICYpIGluIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSByYXcgc3RyaW5nIHRvIGJlIGVzY2FwZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcsIHJlYWR5IHRvIGJlIHVzZWQgaW4gSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbGVzY2FwZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyaW5nID8gc3RyaW5nIDogJycpXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgZWRpdG9yLiBDb250YWlucyBvYmplY3RzIHdpdGggYSBuYW1lIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEVhY2ggb2YgdGhlIG9iamVjdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogXG4gKiAgIC0gdHlwZTogQ2FuIGJlIGVpdGhlciBpbmxpbmUgKGZvciBpbmxpbmUgZm9ybWF0dGluZykgb3IgbGluZSAoZm9yIGJsb2NrIC8gbGluZSBmb3JtYXR0aW5nKS5cbiAqICAgLSBjbGFzc05hbWU6IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYWN0aXZlIGF0IGEgZ2l2ZW4gcG9zaXRpb24uIFxuICogICAgIEZvciBsaW5lIGZvcm1hdHRpbmcsIHRoaXMgbG9va3MgYXQgdGhlIGNsYXNzIG9mIHRoZSBsaW5lIGVsZW1lbnQuIEZvciBpbmxpbmUgZWxlbWVudHMsIHRyaWVzIHRvIGZpbmQgYW4gZW5jbG9zaW5nIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogICAtIHNldCAvIHVuc2V0OiBDb250YWluIGluc3RydWN0aW9ucyBob3cgdG8gc2V0IGFuZCB1bnNldCB0aGUgY29tbWFuZC4gRm9yIGxpbmUgdHlwZSBjb21tYW5kcywgYm90aCBjb25zaXN0IG9mIGEgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgdGhhdCBcbiAqICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBsaW5lICh1c2luZyBTdHJpbmcucmVwbGFjZSkuIEZvciBpbmxpbmUgdHlwZSBjb21tYW5kcywgdGhlIHNldCBvYmplY3QgY29udGFpbnMgYSBwcmUgYW5kIHBvc3Qgc3RyaW5nIHdoaWNoIHdpbGxcbiAqICAgICBiZSBpbnNlcnRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24uIFRoZSB1bnNldCBvYmplY3QgY29udGFpbnMgYSBwcmVQYXR0ZXJuIGFuZCBhIHBvc3RQYXR0ZXJuLiBCb3RoIHNob3VsZCBiZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBcbiAqICAgICB0aGV5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgbGluZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24gKHVzaW5nIFN0cmluZy5yZXBsYWNlLCB3aXRoIGFuIGVtcHR5IHJlcGxhY2VtZW50IHN0cmluZykuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7XG4gIC8vIFJlcGxhY2VtZW50cyBmb3IgdW5zZXQgZm9yIGlubGluZSBjb21tYW5kcyBhcmUgJycgYnkgZGVmYXVsdFxuICBib2xkOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3Ryb25nJywgXG4gICAgc2V0OiB7cHJlOiAnKionLCBwb3N0OiAnKionfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqXFwqfF9fKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCpcXCp8X18pL31cbiAgfSwgXG4gIGl0YWxpYzoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUVtJywgXG4gICAgc2V0OiB7cHJlOiAnKicsIHBvc3Q6ICcqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKnxfKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCp8XykvfVxuICB9LFxuICBjb2RlOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQ29kZScsIFxuICAgIHNldDoge3ByZTogJ2AnLCBwb3N0OiAnYCd9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC9gKyQvLCBwb3N0UGF0dGVybjogL15gKy99IC8vIEZJWE1FIHRoaXMgZG9lc24ndCBlbnN1cmUgYmFsYW5jZWQgYmFja3RpY2tzIHJpZ2h0IG5vd1xuICB9LCBcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cmlrZXRocm91Z2gnLCBcbiAgICBzZXQ6IHtwcmU6ICd+ficsIHBvc3Q6ICd+fid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46L35+JC8sIHBvc3RQYXR0ZXJuOiAvXn5+LyB9XG4gIH0sXG4gIGgxOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgxJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9I1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDI6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDInLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgzOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgzJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg0OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg0JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg2OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg2JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIHVsOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVVMJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICctICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgb2w6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNT0wnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQjLiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LCBcbiAgYmxvY2txdW90ZToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1CbG9ja3F1b3RlJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICc+ICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9PlsgXT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbn07IiwiaW1wb3J0IHtcbiAgaW5saW5lR3JhbW1hcixcbiAgbGluZUdyYW1tYXIsXG4gIHB1bmN0dWF0aW9uTGVhZGluZyxcbiAgcHVuY3R1YXRpb25UcmFpbGluZyxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIEdyYW1tYXJSdWxlLFxuICBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyLFxufSBmcm9tIFwiLi9ncmFtbWFyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB0ZXh0YXJlYT86IHN0cmluZyB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIGN1c3RvbUlubGluZUdyYW1tYXI/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlQmVmb3JlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5oYXNGb2N1cykgeyB0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KGUpOyB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IGZhbHNlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gdHJ1ZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVMaW5lVHlwZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmtMYWJlbHMoKTtcbiAgICB0aGlzLmFwcGx5TGluZVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmtMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCB0aGlzLmxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbF0gPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSB7XG4gICAgICAgIHRoaXMubGlua0xhYmVscy5wdXNoKFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xdW1xuICAgICAgICAgICAgbGluZUdyYW1tYXIuVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbi5sYWJlbFBsYWNlaG9sZGVyIVxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UocmVwbGFjZW1lbnQ6IHN0cmluZywgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZSgvKFxcJHsxLDJ9KShbMC05XSkvZywgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBjYXB0dXJlW3BhcnNlSW50KHAyKV1cbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lRGlydHlbbGluZU51bV0pIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlKFxuICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSxcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXVxuICAgICAgICApO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9XG4gICAgICAgICAgY29udGVudEhUTUwgPT09IFwiXCIgPyBcIjxiciAvPlwiIDogY29udGVudEhUTUw7XG4gICAgICB9XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSA9IGxpbmVOdW0udG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBsZXQgY29kZUJsb2NrVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY29kZUJsb2NrU2VxTGVuZ3RoID0gMDtcbiAgICBsZXQgaHRtbEJsb2NrOiBIVE1MQmxvY2tSdWxlIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgIGxldCBsaW5lQ2FwdHVyZTogUmVnRXhwRXhlY0FycmF5ID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgIGxldCBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuXG4gICAgICAvLyBDaGVjayBvbmdvaW5nIGNvZGUgYmxvY2tzXG4gICAgICBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlQmFja3RpY2tcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlVGlsZGVDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVUaWxkZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIEhUTUwgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIiAmJiBodG1sQmxvY2sgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGh0bWxCbG9ja1R5cGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9ja1R5cGUuc3RhcnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGh0bWxCbG9ja1R5cGUucGFyYUludGVycnVwdCB8fFxuICAgICAgICAgICAgICBsaW5lTnVtID09PSAwIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGh0bWxCbG9jayA9IGh0bWxCbG9ja1R5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1IVE1MQmxvY2tcIjtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1IVE1MQ29udGVudFwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblxuICAgICAgICBpZiAoaHRtbEJsb2NrLmVuZCkge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9jay5lbmQpKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGluZU51bSA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVOdW0gKyAxXS5tYXRjaChsaW5lR3JhbW1hci5UTUJsYW5rTGluZS5yZWdleHApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWxsIHJlZ2V4cHMgaWYgd2UgaGF2ZW4ndCBhcHBsaWVkIG9uZSBvZiB0aGUgY29kZSBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgIGZvciAobGV0IHR5cGUgaW4gbGluZUdyYW1tYXIpIHtcbiAgICAgICAgICBpZiAobGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwKSB7XG4gICAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgbGluZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hclt0eXBlXS5yZXBsYWNlbWVudDtcbiAgICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UndmUgb3BlbmVkIGEgY29kZSBibG9jaywgcmVtZW1iZXIgdGhhdFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIgfHwgbGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBjb2RlQmxvY2tUeXBlID0gbGluZVR5cGU7XG4gICAgICAgIGNvZGVCbG9ja1NlcUxlbmd0aCA9IGxpbmVDYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBMaW5rIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBpbmRlbnRlZCBjb2RlIGNhbid0IGludGVycnVwdCBhIHBhcmFncmFwaFxuICAgICAgaWYgKFxuICAgICAgICAobGluZVR5cGUgPT09IFwiVE1JbmRlbnRlZENvZGVcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpICYmXG4gICAgICAgIGxpbmVOdW0gPiAwICYmXG4gICAgICAgICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIilcbiAgICAgICkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IEgyIG1hcmtlcnMgdGhhdCBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBsaXN0IGl0ZW0gc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHN1Y2hcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTVVMLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1VTC5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IGhlYWRpbmdzIGFyZSBvbmx5IHZhbGlkIGlmIHByZWNlZGVkIGJ5IGEgcGFyYWdyYXBoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiIHx8IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBpZiAobGluZU51bSA9PT0gMCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gIT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNSFIucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUhSXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUhSLnJlcGxhY2VtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaGVhZGluZ0xpbmUgPSBsaW5lTnVtIC0gMTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nTGluZVR5cGUgPSBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgPyBcIlRNU2V0ZXh0SDFcIiA6IFwiVE1TZXRleHRIMlwiO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gIT09IGhlYWRpbmdMaW5lVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPSBoZWFkaW5nTGluZVR5cGU7XG4gICAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2hlYWRpbmdMaW5lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaGVhZGluZ0xpbmVdID0gXCIkJDBcIjtcbiAgICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2hlYWRpbmdMaW5lXSA9IFt0aGlzLmxpbmVzW2hlYWRpbmdMaW5lXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgaGVhZGluZ0xpbmUtLTtcbiAgICAgICAgICB9IHdoaWxlIChoZWFkaW5nTGluZSA+PSAwICYmIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9PT0gXCJUTVBhcmFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xpbmVOdW1dICE9PSBsaW5lVHlwZSkge1xuICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSA9IGxpbmVUeXBlO1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0gPSBsaW5lUmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXSA9IGxpbmVDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oZ2V0QW5jaG9yOiBib29sZWFuID0gZmFsc2UpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBsZXQgc3RhcnROb2RlID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JOb2RlIDogc2VsZWN0aW9uIS5mb2N1c05vZGU7XG4gICAgaWYgKCFzdGFydE5vZGUpIHJldHVybiBudWxsO1xuICAgIGxldCBvZmZzZXQgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbiEuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKHN0YXJ0Tm9kZSA9PT0gdGhpcy5lKSB7XG4gICAgICBpZiAob2Zmc2V0IDwgdGhpcy5saW5lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiBvZmZzZXQsXG4gICAgICAgICAgY29sOiAwLFxuICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBvZmZzZXQgLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbb2Zmc2V0IC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgY29sID0gdGhpcy5jb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIHdoaWxlIChub2RlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCE7XG4gICAgfVxuXG4gICAgbGV0IHJvdyA9IDA7XG4gICAgLy8gSWYgdGhlIG5vZGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgc2libGluZywgaXQgbXVzdCBiZSB0aGUgZmlyc3QgbGluZVxuICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgY29uc3QgY3VycmVudExpbmVOdW1EYXRhID0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW1EYXRhID0gKG5vZGUucHJldmlvdXNTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuXG4gICAgICBpZiAoY3VycmVudExpbmVOdW1EYXRhICYmIHByZXZpb3VzTGluZU51bURhdGEpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVOdW0gPSBwYXJzZUludChjdXJyZW50TGluZU51bURhdGEpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW0gPSBwYXJzZUludChwcmV2aW91c0xpbmVOdW1EYXRhKTtcbiAgICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtID09PSBwcmV2aW91c0xpbmVOdW0gKyAxKSB7XG4gICAgICAgICAgcm93ID0gY3VycmVudExpbmVOdW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGluZSBpcyBOT1QgdGhlIHByZXZpb3VzIGxpbmUgKyAxLCB0aGVuIGVpdGhlciBcbiAgICAgICAgICAvLyB0aGUgY3VycmVudCBsaW5lIGdvdCBzcGxpdCBpbiB0d28gb3IgbWVyZ2VkIHdpdGggdGhlIHByZXZpb3VzIGxpbmVcbiAgICAgICAgICAvLyBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSByb3cgbnVtYmVyXG4gICAgICAgICAgd2hpbGUgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgcm93OiByb3csIGNvbDogY29sIH07XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuXG4gICAgbGV0IHsgbm9kZTogZm9jdXNOb2RlLCBvZmZzZXQ6IGZvY3VzT2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgZm9jdXMucm93LFxuICAgICAgZm9jdXMuY29sLFxuICAgICAgYW5jaG9yID8gYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPiBmb2N1cy5jb2wgOiBmYWxzZVxuICAgICk7XG4gICAgbGV0IGFuY2hvck5vZGUgPSBudWxsLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gbnVsbDtcbiAgICBpZiAoYW5jaG9yICYmIChhbmNob3Iucm93ICE9PSBmb2N1cy5yb3cgfHwgYW5jaG9yLmNvbCAhPT0gZm9jdXMuY29sKSkge1xuICAgICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgICBhbmNob3Iucm93LFxuICAgICAgICBhbmNob3IuY29sLFxuICAgICAgICBmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID4gYW5jaG9yLmNvbFxuICAgICAgKTtcbiAgICAgIGFuY2hvck5vZGUgPSBub2RlO1xuICAgICAgYW5jaG9yT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGxldCB3aW5kb3dTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgd2luZG93U2VsZWN0aW9uIS5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICBhbmNob3JOb2RlIHx8IGZvY3VzTm9kZSxcbiAgICAgIGFuY2hvck5vZGUgPyBhbmNob3JPZmZzZXQhIDogZm9jdXNPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGggYW5kXG4gICAqIGluc2VydExpbmVCcmVhayBldmVudHMuIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsXG4gICAqIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aCBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZVxuICAgKiBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZSBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzFdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1s1XVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUgfHwgIXNlbC5hbmNob3JOb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBzZWwuaXNDb2xsYXBzZWQgJiZcbiAgICAgIHNlbC5mb2N1c05vZGUubm9kZVR5cGUgPT09IDMgJiZcbiAgICAgIHNlbC5mb2N1c09mZnNldCA9PT0gc2VsLmZvY3VzTm9kZS5ub2RlVmFsdWUhLmxlbmd0aFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBmb3IgKG5vZGUgPSBzZWwuZm9jdXNOb2RlOyBub2RlICYmIG5vZGUubmV4dFNpYmxpbmcgPT09IG51bGw7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUhKTtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICBub2RlLm5leHRTaWJsaW5nICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhbmNlc3RvciA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICBpZiAoIWFuY2VzdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICB0eXBlb2YgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAoKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUlubGluZUZvcm1hdHRlZFwiKSB8fFxuICAgICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1CbGFua0xpbmVcIikpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlITtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZSgpO1xuICAgIHRoaXMuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQsICF0aGlzLmxhc3RDb21tYW5kU3RhdGVbY29tbWFuZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXJlRHJvcChkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcik6IHZvaWQge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmRyb3ApIHtcbiAgICAgIGxpc3RlbmVyKHsgZGF0YVRyYW5zZmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJmb2N1cyIsImFuY2hvciIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJsYXN0S2V5IiwibWF0Y2giLCJ0b1VwcGVyQ2FzZSIsImtleSIsInRvTG93ZXJDYXNlIiwiY29uY2F0Iiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsIm91dGVyIiwibW9kaWZpZXIiLCJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJyZXBsYWNlbWVudHMiLCJBU0NJSVB1bmN0dWF0aW9uIiwiTm90VHJpZ2dlckNoYXIiLCJTY2hlbWUiLCJFbWFpbCIsIkhUTUxPcGVuVGFnIiwiSFRNTENsb3NlVGFnIiwiSFRNTFRhZ05hbWUiLCJIVE1MQ29tbWVudCIsIkhUTUxQSSIsIkhUTUxEZWNsYXJhdGlvbiIsIkhUTUxDREFUQSIsIkhUTUxBdHRyaWJ1dGUiLCJIVE1MQXR0VmFsdWUiLCJLbm93blRhZyIsInB1bmN0dWF0aW9uTGVhZGluZyIsIlJlZ0V4cCIsInB1bmN0dWF0aW9uVHJhaWxpbmciLCJsaW5lR3JhbW1hciIsIlRNSDEiLCJyZWdleHAiLCJyZXBsYWNlbWVudCIsIlRNSDIiLCJUTUgzIiwiVE1INCIsIlRNSDUiLCJUTUg2IiwiVE1CbG9ja3F1b3RlIiwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW4iLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwicnVsZU5hbWUiLCJlbnRyaWVzIiwicHJvY2Vzc2VkUnVsZSIsInJlZ2V4cFNvdXJjZSIsImh0bWxlc2NhcGUiLCJ0eXBlIiwic2V0IiwicHJlIiwicG9zdCIsInVuc2V0IiwicHJlUGF0dGVybiIsInBvc3RQYXR0ZXJuIiwicGF0dGVybiIsImgzIiwiaDQiLCJoNSIsImg2IiwiRWRpdG9yIiwidGV4dGFyZWEiLCJsaW5lcyIsImxpbmVFbGVtZW50cyIsImxpbmVUeXBlcyIsImxpbmVDYXB0dXJlcyIsImxpbmVSZXBsYWNlbWVudHMiLCJsaW5rTGFiZWxzIiwibGluZURpcnR5IiwibGFzdENvbW1hbmRTdGF0ZSIsImN1c3RvbUlubGluZUdyYW1tYXIiLCJtZXJnZWRJbmxpbmVHcmFtbWFyIiwiaGFzRm9jdXMiLCJsaXN0ZW5lcnMiLCJjaGFuZ2UiLCJzZWxlY3Rpb24iLCJkcm9wIiwidW5kb1N0YWNrIiwicmVkb1N0YWNrIiwiaXNSZXN0b3JpbmdIaXN0b3J5IiwibWF4SGlzdG9yeSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJzdHlsZSIsImRpc3BsYXkiLCJjcmVhdGVFZGl0b3JFbGVtZW50Iiwic2V0Q29udGVudCIsImNvbnRlbnQiLCJ2YWx1ZSIsImhhbmRsZVVuZG9SZWRvS2V5IiwicHVzaEhpc3RvcnkiLCJwdXNoQ3VycmVudFN0YXRlIiwiZ2V0Q29udGVudCIsImdldFNlbGVjdGlvbiIsInNoaWZ0IiwiY3VycmVudCIsInBvcCIsInByZXYiLCJzZXRTZWxlY3Rpb24iLCJuZXh0IiwiaXNNYWMiLCJjdHJsIiwibWV0YUtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJzaGlmdEtleSIsImNsYXNzTGlzdCIsImFkZCIsImNvbnRlbnRFZGl0YWJsZSIsIndoaXRlU3BhY2UiLCJ3ZWJraXRVc2VyTW9kaWZ5IiwibmV4dFNpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJoYW5kbGVJbnB1dEV2ZW50IiwiaGFuZGxlQmVmb3JlSW5wdXRFdmVudCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50IiwiaGFuZGxlUGFzdGUiLCJoYW5kbGVEcm9wIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImxpbmVOdW0iLCJsZSIsIkFycmF5IiwidXBkYXRlRm9ybWF0dGluZyIsImZpcmVDaGFuZ2UiLCJ1cGRhdGVMaW5lVHlwZXMiLCJ1cGRhdGVMaW5rTGFiZWxzIiwiYXBwbHlMaW5lVHlwZXMiLCJsIiwiY2FwdHVyZSIsInN0ciIsInAxIiwicDIiLCJwYXJzZUludCIsInByb2Nlc3NJbmxpbmVTdHlsZXMiLCJjb250ZW50SFRNTCIsInJlbW92ZUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJ0b1N0cmluZyIsImNvZGVCbG9ja1R5cGUiLCJjb2RlQmxvY2tTZXFMZW5ndGgiLCJodG1sQmxvY2siLCJsaW5lVHlwZSIsImxpbmVDYXB0dXJlIiwibGluZVJlcGxhY2VtZW50IiwiZXhlYyIsImdyb3VwcyIsImh0bWxCbG9ja1R5cGUiLCJoZWFkaW5nTGluZSIsImhlYWRpbmdMaW5lVHlwZSIsImdldEFuY2hvciIsIndpbmRvdyIsInN0YXJ0Tm9kZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJvZmZzZXQiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsInJvdyIsImNvbCIsImNvbXB1dGVDb2x1bW4iLCJub2RlIiwicHJldmlvdXNTaWJsaW5nIiwiY3VycmVudExpbmVOdW1EYXRhIiwiX2EiLCJwcmV2aW91c0xpbmVOdW1EYXRhIiwiX2IiLCJjdXJyZW50TGluZU51bSIsInByZXZpb3VzTGluZU51bSIsImNvbXB1dGVOb2RlQW5kT2Zmc2V0Iiwid2luZG93U2VsZWN0aW9uIiwic2V0QmFzZUFuZEV4dGVudCIsInRleHQiLCJiZWdpbm5pbmciLCJpbnNlcnRlZExpbmVzIiwibGluZUJlZm9yZSIsInN1YnN0ciIsImxpbmVFbmQiLCJlbmRDb2xQb3MiLCJzcGxpY2VMaW5lcyIsInN0YXJ0Q29sIiwiZW5kQ29sIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGlzdGVuZXIiLCJsaW5lc0RpcnR5IiwiYmVmb3JlSW5wdXRFdmVudCIsImlucHV0VHlwZSIsImNsZWFyRGlydHlGbGFnIiwic3Vic3RyaW5nIiwiY29udGludWFibGVUeXBlIiwibGluZUJlZm9yZUJyZWFrIiwibGluZUFmdGVyQnJlYWsiLCJyZXN1bHQiLCJzY3JvbGxJbnRvVmlldyIsImJsb2NrIiwiaW5saW5lIiwiaW5wdXRFdmVudCIsImZpeE5vZGVIaWVyYXJjaHkiLCJ1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nIiwiX2UiLCJmaXJlU2VsZWN0aW9uIiwiY2xpcGJvYXJkRGF0YSIsImdldERhdGEiLCJmaXJlRHJvcCIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsU3RyaW5nIiwicHJvY2Vzc2VkIiwic3RhY2siLCJjYXAiLCJwb3RlbnRpYWxMaW5rIiwicG90ZW50aWFsSW1hZ2UiLCJwYXJzZUxpbmtPckltYWdlIiwib3V0cHV0IiwiY2hhckNvdW50IiwiZGVsaW1Db3VudCIsImRlbGltU3RyaW5nIiwiY3VycmVudERlbGltaXRlciIsInByZWNlZGluZyIsImZvbGxvd2luZyIsInB1bmN0dWF0aW9uRm9sbG93cyIsInB1bmN0dWF0aW9uUHJlY2VkZXMiLCJ3aGl0ZXNwYWNlRm9sbG93cyIsIndoaXRlc3BhY2VQcmVjZWRlcyIsImNhbk9wZW4iLCJjYW5DbG9zZSIsInN0YWNrUG9pbnRlciIsImRlbGltaXRlciIsImVudHJ5IiwiY291bnQiLCJjb25zdW1lZCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHRDb250ZW50IiwiYmluZFJpZ2h0IiwiY2hpbGRyZW5Db21wbGV0ZSIsInJ2Iiwibm9kZVZhbHVlIiwidXBkYXRlTGluZUNvbnRlbnRzIiwibGluZURlbHRhIiwiY2hpbGRFbGVtZW50Q291bnQiLCJmaXJzdENoYW5nZWRMaW5lIiwibGFzdENoYW5nZWRMaW5lIiwibGluZXNUb0RlbGV0ZSIsImxpbmVzVG9BZGQiLCJsaW5lIiwiY3QiLCJzdGFydExpbmUiLCJsaW5lc1RvSW5zZXJ0IiwiYWRqdXN0TGluZUVsZW1lbnRzIiwiaW5zZXJ0ZWRCbGFuayIsImluc2VydGVkRGlydHkiLCJzcGxpY2UiLCJvcmlnaW5hbENoaWxkcmVuIiwiZnJvbSIsInJlcGxhY2VDaGlsZCIsImNoaWxkIiwicGFyZW50IiwiX2xlbiIsIm5ld0NoaWxkcmVuIiwiX2tleSIsImZvckVhY2giLCJuZXdDaGlsZCIsIkVMRU1FTlRfTk9ERSIsImRpdldyYXBwZXIiLCJncmFuZENoaWxkcmVuIiwic29tZSIsImdyYW5kQ2hpbGQiLCJpc0ltYWdlIiwidGV4dE9mZnNldCIsIm9wZW5lciIsImN1cnJlbnRPZmZzZXQiLCJicmFja2V0TGV2ZWwiLCJsaW5rVGV4dCIsImxpbmtSZWYiLCJsaW5rRGV0YWlscyIsInRleHRPdXRlciIsIm5leHRDaGFyIiwidHJpbSIsInBhcmVudGhlc2lzTGV2ZWwiLCJpbmxpbmVPdXRlciIsInZhbGlkIiwibGFiZWwiLCJsYWJlbENsYXNzIiwiY29tcHV0ZUNvbW1vbkFuY2VzdG9yIiwibm9kZTEiLCJub2RlMiIsImFuY2VzdHJ5IiwidW5zaGlmdCIsImFuY2VzdHJ5MSIsImFuY2VzdHJ5MiIsImNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlIiwic2VsIiwiaW5jbHVkZXMiLCJnZXRDb21tYW5kU3RhdGUiLCJjbWQiLCJtYXJrdXBOb2RlIiwibGVuIiwibGVhZGluZyIsInRyYWlsaW5nIiwiaXNDb2xsYXBzZWQiLCJhbmNlc3RvciIsInRvZ2dsZUNvbW1hbmRTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQUEsTUFBTUEsR0FBRyxHQUEyQjtJQUNsQ0MsRUFBQUEsVUFBVSxFQUFFLENBQTJSLHlSQUFBLENBQUE7SUFDdlNDLEVBQUFBLElBQUksRUFBRSxDQUEwWSx3WUFBQSxDQUFBO0lBQ2haQyxFQUNBQyxJQUFJLEVBQUUsQ0FBK1UsNlVBQUEsQ0FBQTtJQUNyVkMsRUFBQUEsRUFBRSxFQUFFLENBQWdLLDhKQUFBLENBQUE7SUFDcEtDLEVBQUFBLEVBQUUsRUFBRSxDQUFrSyxnS0FB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R0FBRyxJQUFJLENBQUN1TCxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3BDLE1BQUEsSUFBSXRMLE1BQU0sR0FBRyxJQUFJLENBQUNzTCxZQUFZLENBQUMsSUFBSSxDQUFDO1VBQ3BDLElBQUlySSxZQUFZLEdBQUcsSUFBSSxDQUFDaVYsZUFBZSxDQUFDblksS0FBSyxFQUFFQyxNQUFNLENBQUM7VUFDdEQsSUFBSSxJQUFJLENBQUM2SixnQkFBZ0IsRUFBRTtZQUN6QmpJLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ2dJLGdCQUFnQixFQUFFNUcsWUFBWSxDQUFDO0lBQ3BELE9BQUMsTUFBTTtZQUNMLElBQUksQ0FBQzRHLGdCQUFnQixHQUFHakksTUFBTSxDQUFDQyxNQUFNLENBQUMsRUFBRSxFQUFFb0IsWUFBWSxDQUFDO0lBQ3pEO1VBQ0EsS0FBSyxJQUFJa08sUUFBUSxJQUFJLElBQUksQ0FBQ2xILFNBQVMsQ0FBQ0UsU0FBUyxFQUFFO0lBQzdDZ0gsUUFBQUEsUUFBUSxDQUFDO0lBQ1BwUixVQUFBQSxLQUFLLEVBQUVBLEtBQU07SUFDYkMsVUFBQUEsTUFBTSxFQUFFQSxNQUFPO2NBQ2ZpRCxZQUFZLEVBQUUsSUFBSSxDQUFDNEc7SUFDcEIsU0FBQSxDQUFDO0lBQ0o7SUFDRjtJQUNGO0lBQ0Q7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5XX0={"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","toUpperCase","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|
|
3285
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT5cbiAgICAgIGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkgPyBmYWxzZSA6IG51bGwsXG4gICAgaW5uZXJIVE1MOiBzdmcubGluayxcbiAgICB0aXRsZTogXCJJbnNlcnQgbGlua1wiLFxuICAgIGhvdGtleTogXCJNb2QtS1wiLFxuICB9LFxuICBpbnNlcnRJbWFnZToge1xuICAgIG5hbWU6IFwiaW5zZXJ0SW1hZ2VcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiIVtcIiwgXCJdKClcIik7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+XG4gICAgICBlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpID8gZmFsc2UgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLmltYWdlLFxuICAgIHRpdGxlOiBcIkluc2VydCBpbWFnZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUlcIixcbiAgfSxcbiAgaHI6IHtcbiAgICBuYW1lOiBcImhyXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5wYXN0ZShcIlxcbioqKlxcblwiKSxcbiAgICBlbmFibGVkOiAoKSA9PiBmYWxzZSxcbiAgICBpbm5lckhUTUw6IHN2Zy5ocixcbiAgICB0aXRsZTogXCJJbnNlcnQgaG9yaXpvbnRhbCBsaW5lXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtTFwiLFxuICB9LFxuICB1bmRvOiB7XG4gICAgbmFtZTogXCJ1bmRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci51bmRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblVuZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnVuZG8sXG4gICAgdGl0bGU6IFwiVW5kb1wiLFxuICB9LFxuICByZWRvOiB7XG4gICAgbmFtZTogXCJyZWRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5yZWRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblJlZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnJlZG8sXG4gICAgdGl0bGU6IFwiUmVkb1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRCYXIge1xuICBwdWJsaWMgZTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZERlZmluaXRpb24+ID0ge307XG4gIHB1YmxpYyBidXR0b25zOiBSZWNvcmQ8c3RyaW5nLCBIVE1MRGl2RWxlbWVudD4gPSB7fTtcbiAgcHVibGljIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgcHJpdmF0ZSBob3RrZXlzOiBIb3RrZXlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb21tYW5kQmFyUHJvcHMpIHtcbiAgICB0aGlzLmUgPSBudWxsO1xuICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB0aGlzLmNvbW1hbmRzID0ge307XG4gICAgdGhpcy5idXR0b25zID0ge307XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHRoaXMuaG90a2V5cyA9IFtdO1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuICAgIFxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVDb21tYW5kQmFyRWxlbWVudChcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wcy5jb21tYW5kcyB8fCBbXG4gICAgICAgIFwiYm9sZFwiLFxuICAgICAgICBcIml0YWxpY1wiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2hcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiY29kZVwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJoMVwiLFxuICAgICAgICBcImgyXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcInVsXCIsXG4gICAgICAgIFwib2xcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiYmxvY2txdW90ZVwiLFxuICAgICAgICBcImhyXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcInVuZG9cIixcbiAgICAgICAgXCJyZWRvXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImluc2VydExpbmtcIixcbiAgICAgICAgXCJpbnNlcnRJbWFnZVwiLFxuICAgICAgXVxuICAgICk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlS2V5ZG93bihlKSk7XG4gICAgaWYgKHByb3BzLmVkaXRvcikgdGhpcy5zZXRFZGl0b3IocHJvcHMuZWRpdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQocGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbW1hbmRzOiAoc3RyaW5nIHwgQ29tbWFuZERlZmluaXRpb24pW10pOiB2b2lkIHtcbiAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJhclwiO1xuXG4gICAgZm9yIChsZXQgY29tbWFuZCBvZiBjb21tYW5kcykge1xuICAgICAgaWYgKGNvbW1hbmQgPT09IFwifFwiKSB7XG4gICAgICAgIGxldCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kRGl2aWRlclwiO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbW1hbmROYW1lOiBzdHJpbmc7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZF0pIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lID0gY29tbWFuZDtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdID0gRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcIm9iamVjdFwiICYmIGNvbW1hbmQubmFtZSkge1xuICAgICAgICAgIGNvbW1hbmROYW1lID0gY29tbWFuZC5uYW1lO1xuICAgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdID0ge30gYXMgQ29tbWFuZERlZmluaXRpb247XG4gICAgICAgICAgaWYgKERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV0pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0sIERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBjb21tYW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLnRpdGxlIHx8IGNvbW1hbmROYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5ob3RrZXkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5IS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgbGV0IG1vZGlmaWVyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBsZXQgbW9kaWZpZXJleHBsYW5hdGlvbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleXNbaV0pIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkN0cmxcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQ3RybFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkNtZFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijJhcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBbHRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJPcHRpb25cIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJXaW5cIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oqeIFdpblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNoaWZ0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJzaGlmdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLih6dcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJNb2RcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijJhcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiY3RybEtleVwiKTtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kMlwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIGlmIChpc01hY0xpa2UpIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMpVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkFsdFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgbGV0IGhvdGtleTogSG90a2V5ID0ge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMsXG4gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RLZXkubWF0Y2goL15bMC05XSQvKSkge1xuICAgICAgICAgICAgaG90a2V5LmNvZGUgPSBgRGlnaXQke2xhc3RLZXl9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RLZXkubWF0Y2goL15bYS16QS1aXSQvKSkge1xuICAgICAgICAgICAgaG90a2V5LmNvZGUgPSBgS2V5JHtsYXN0S2V5LnRvVXBwZXJDYXNlKCl9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGxhc3RLZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ob3RrZXlzLnB1c2goaG90a2V5KTtcbiAgICAgICAgICB0aXRsZSA9IHRpdGxlLmNvbmNhdChgICgke21vZGlmaWVyZXhwbGFuYXRpb24uam9pbihcIitcIil9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0Rpc2FibGVkXCI7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5pbm5lckhUTUwgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5pbm5lckhUTUw7XG5cbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIChlKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soY29tbWFuZE5hbWUsIGUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZS5hcHBlbmRDaGlsZCh0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGljayhjb21tYW5kTmFtZTogc3RyaW5nLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEZvY3VzIHRoZSBlZGl0b3IgaWYgaXQncyBub3QgYWxyZWFkeSBmb2N1c2VkXG4gICAgaWYgKHRoaXMuZWRpdG9yLmUpIHtcbiAgICAgIGNvbnN0IGVkaXRvckhhZEZvY3VzID0gdGhpcy5lZGl0b3IuZS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuZWRpdG9yLmUuZm9jdXMoKTtcbiAgICAgIC8vIE9ubHkgcmVzdG9yZSB0aGUgbGFzdCBzZWxlY3Rpb24gaWYgdGhlIGVkaXRvciB3YXMgbm90IGZvY3VzZWQgYmVmb3JlXG4gICAgICBpZiAoIWVkaXRvckhhZEZvY3VzKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnJlc3RvcmVMYXN0U2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlW2NvbW1hbmROYW1lXSA9PT0gZmFsc2UpXG4gICAgICAgICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgdHJ1ZSk7XG4gICAgICBlbHNlICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uIGFzIENvbW1hbmRBY3Rpb24pKHRoaXMuZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25cIiwgKGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGV2ZW50OiBTZWxlY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5jb21tYW5kU3RhdGUpIHtcbiAgICAgIGZvciAobGV0IGNvbW1hbmQgaW4gdGhpcy5jb21tYW5kcykge1xuICAgICAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkIShcbiAgICAgICAgICAgICAgdGhpcy5lZGl0b3IhLFxuICAgICAgICAgICAgICBldmVudC5mb2N1cyxcbiAgICAgICAgICAgICAgZXZlbnQuYW5jaG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuZm9jdXMgPyBmYWxzZSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSBldmVudC5jb21tYW5kU3RhdGVbY29tbWFuZF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fQWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0luYWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgb3V0ZXI6IGZvciAobGV0IGhvdGtleSBvZiB0aGlzLmhvdGtleXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGhvdGtleS5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09IGhvdGtleS5rZXkpIHx8XG4gICAgICAgIChob3RrZXkuY29kZSAmJiBldmVudC5jb2RlID09PSBob3RrZXkuY29kZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGxldCBtb2RpZmllciBvZiBob3RrZXkubW9kaWZpZXJzKSB7XG4gICAgICAgICAgaWYgKCEoZXZlbnQgYXMgYW55KVttb2RpZmllcl0pIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soaG90a2V5LmNvbW1hbmQsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kQmFyOyIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy40Mi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjUgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My40Mi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJlxuICAhU3ltYm9sLnNoYW0gJiZcbiAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLywgIFxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hfl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLiAgXG4gKi8gXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHsgXG4gIFRNSDE6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgyOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDM6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDQ6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg1OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDY6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNQmxvY2txdW90ZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfT5bIF0/KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1CbG9ja3F1b3RlXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKilcXHMqKShbXmBdKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KilcXHMqKSguKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1CbGFua0xpbmU6IHsgXG4gICAgcmVnZXhwOiAvXihbIFxcdF0qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJyQwJ1xuICB9LFxuICBUTVNldGV4dEgxTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM309K1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1TZXRleHRIMk1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9LStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNSFI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oXFwqWyBcXHRdKlxcKlsgXFx0XSpcXCpbIFxcdCpdKil8KC1bIFxcdF0qLVsgXFx0XSotWyBcXHQtXSopfChfWyBcXHRdKl9bIFxcdF0qX1sgXFx0X10qKSkkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IUlwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1VTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1VTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1PTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNT0xcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3VibGlzdHMgKGFuZCBhbnkgY29udGVudCB3aXRoaW4gbGlzdCBpdGVtcywgcmVhbGx5KSBmcm9tIHdvcmtpbmdcbiAgVE1JbmRlbnRlZENvZGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezR9fFxcdCkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSW5kZW50ZWRDb2RlXCI+JDE8L3NwYW4+JDInXG4gIH0sXG4gIFRNTGlua1JlZmVyZW5jZURlZmluaXRpb246IHtcbiAgICAvLyBUT0RPOiBMaW5rIGRlc3RpbmF0aW9uIGNhbid0IGluY2x1ZGUgdW5iYWxhbmNlZCBwYXJhbnRoZXNlcywgYnV0IHdlIGp1c3QgaWdub3JlIHRoYXQgaGVyZSBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcW1xccyopKFteXFxzXFxdXSg/OlteXFxdXXxcXFxcXFxdKSo/KShcXHMqXFxdOlxccyopKCg/OlteXFxzPD5dKyl8KD86PCg/OltePD5cXFxcXXxcXFxcLikqPikpPyhcXHMqKSgoPzpcXCgoPzpbXigpXFxcXF18XFxcXC4pKlxcKSl8KD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiKXwoPzonKD86W14nXFxcXF18XFxcXC4pKicpKT8oXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfRGVmaW5pdGlvblwiPiQyPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDM8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtEZXN0aW5hdGlvblwiPiQ0PC9zcGFuPiQ1PHNwYW4gY2xhc3M9XCJUTUxpbmtUaXRsZVwiPiQ2PC9zcGFuPiQ3JyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyLCAvLyB0aGlzIGRlZmluZXMgd2hpY2ggcGxhY2Vob2xkZXIgaW4gdGhlIGFib3ZlIHJlZ2V4IGlzIHRoZSBsaW5rIFwibGFiZWxcIlxuICB9LFxufTtcblxuLyoqXG4gKiBIVE1MIGJsb2NrcyBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9wZW5lciBhbmQgY2xvc2VyLiBUaGlzIGFycmF5IGRlZmluZXMgYWxsIHRoZSBjYXNlc1xuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrR3JhbW1hcjogSFRNTEJsb2NrUnVsZVtdID0gW1xuICB7IHN0YXJ0OiAvXiB7MCwzfTwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksIGVuZDogLyg/OjxcXC9zY3JpcHQ+fDxcXC9wcmU+fDxcXC9zdHlsZT4pL2ksIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IS0tLywgZW5kOiAvLS0+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTxcXD8vLCBlbmQ6IC9cXD8+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhW0EtWl0vLCBlbmQ6IC8+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhXFxbQ0RBVEFcXFsvLCBlbmQ6IC9cXF1cXF0+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/Ojx8PFxcLykoPzpLbm93blRhZykoPzpcXHN8PnxcXC8+fCQpL2ksIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/OkhUTUxPcGVuVGFnfEhUTUxDbG9zZVRhZylcXHMqJC8sIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IGZhbHNlfSxcbl07XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIHRoZSBvYmplY3Q6XG4gKiBUb3AgbGV2ZWwgZW50cmllcyBhcmUgcnVsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGluIHN0cmluZyBmb3JtYXQpIGFzIHdlbGwgYXMgYSByZXBsYWNlbWVudC5cbiAqIEluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLCByZXBsYWNlbWVudHMgZnJvbSB0aGUgb2JqZWN0ICdyZXBsYWNlbWVudHMnIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBjb21waWxpbmcgaW50byB0aGUgcHJvcGVydHkgcmVnZXhwLlxuICovXG5leHBvcnQgY29uc3QgaW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBlc2NhcGUgOiB7XG4gICAgcmVnZXhwOiAvXlxcXFwoQVNDSUlQdW5jdHVhdGlvbikvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUVzY2FwZVwiPlxcXFw8L3NwYW4+JDEnXG4gIH0sXG4gIGNvZGUgOiB7XG4gICAgcmVnZXhwOiAvXihgKykoKD86W15gXSl8KD86W15gXS4qP1teYF0pKShcXDEpLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDE8L3NwYW4+PGNvZGUgY2xhc3M9XCJUTUNvZGVcIj4kMjwvY29kZT48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDM8L3NwYW4+JyBcbiAgfSxcbiAgYXV0b2xpbmsgOiB7XG4gICAgcmVnZXhwOiAvXjwoKD86U2NoZW1lOlteXFxzPD5dKil8KD86RW1haWwpKT4vLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmd0Ozwvc3Bhbj4nXG4gIH0sXG4gIGh0bWwgOiB7XG4gICAgcmVnZXhwOiAvXigoPzpIVE1MT3BlblRhZyl8KD86SFRNTENsb3NlVGFnKXwoPzpIVE1MQ29tbWVudCl8KD86SFRNTFBJKXwoPzpIVE1MRGVjbGFyYXRpb24pfCg/OkhUTUxDREFUQSkpLyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1IVE1MXCI+JDE8L3NwYW4+JyxcbiAgfSxcbiAgbGlua09wZW4gOiB7XG4gICAgcmVnZXhwOiAvXlxcWy8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnXG4gIH0sXG4gIGltYWdlT3BlbiA6IHtcbiAgICByZWdleHA6IC9eIVxcWy8sXG4gICAgcmVwbGFjZW1lbnQgOiAnJ1xuICB9LFxuICBsaW5rTGFiZWwgOiB7XG4gICAgcmVnZXhwOiAvXihcXFtcXHMqKShbXlxcXV0qPykoXFxzKlxcXSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyXG4gIH0sXG4gIGRlZmF1bHQgOiB7XG4gICAgcmVnZXhwOiAvXigufCg/Ok5vdFRyaWdnZXJDaGFyKykpLyxcbiAgICByZXBsYWNlbWVudDogJyQxJ1xuICB9XG59O1xuXG4vLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiByZWdleHBzXG5jb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuXG4vLyBJbmxpbmVcbmNvbnN0IGlubGluZVJ1bGVzID0gWy4uLk9iamVjdC5rZXlzKGlubGluZUdyYW1tYXIpXTtcbmZvciAobGV0IHJ1bGUgb2YgaW5saW5lUnVsZXMpIHtcbiAgbGV0IHJlID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmZsYWdzKTtcbn1cblxuLy8gSFRNTCBCbG9jayAob25seSBvcGVuaW5nIHJ1bGUgaXMgcHJvY2Vzc2VkIGN1cnJlbnRseSlcbmZvciAobGV0IHJ1bGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICBsZXQgcmUgPSBydWxlLnN0YXJ0LnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgcnVsZS5zdGFydCA9IG5ldyBSZWdFeHAocmUsIHJ1bGUuc3RhcnQuZmxhZ3MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXJnZWQgaW5saW5lIGdyYW1tYXIgYnkgY29tYmluaW5nIHRoZSBkZWZhdWx0IGlubGluZSBncmFtbWFyIHdpdGggY3VzdG9tIHJ1bGVzLlxuICogQ3VzdG9tIHJ1bGVzIGFyZSBwcm9jZXNzZWQgYW5kIHRoZWlyIHJlZ2V4cCBwYXR0ZXJucyBhcmUgZXhwYW5kZWQgd2l0aCByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gY3VzdG9tUnVsZXMgLSBPYmplY3QgY29udGFpbmluZyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAqIEByZXR1cm5zIE1lcmdlZCBpbmxpbmUgZ3JhbW1hciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIoY3VzdG9tUnVsZXM6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9KTogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+IHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5pbmxpbmVHcmFtbWFyIH07XG4gIFxuICAvLyBQcm9jZXNzIGN1c3RvbSBydWxlc1xuICBmb3IgKGNvbnN0IFtydWxlTmFtZSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tUnVsZXMpKSB7XG4gICAgLy8gQ29weSB0aGUgcnVsZSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsXG4gICAgY29uc3QgcHJvY2Vzc2VkUnVsZSA9IHsgLi4ucnVsZSB9O1xuICAgIFxuICAgIC8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHRoZSByZWdleHBcbiAgICBsZXQgcmVnZXhwU291cmNlID0gcnVsZS5yZWdleHAuc291cmNlO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG4gICAgXG4gICAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZVxuICAgIHdoaWxlIChyZWdleHBTb3VyY2UubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgICByZWdleHBTb3VyY2UgPSByZWdleHBTb3VyY2UucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcm9jZXNzZWRSdWxlLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU291cmNlLCBydWxlLnJlZ2V4cC5mbGFncyk7XG4gICAgbWVyZ2VkW3J1bGVOYW1lXSA9IHByb2Nlc3NlZFJ1bGU7XG4gIH1cbiAgXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoPCwgPiwgYW5kICYpIGluIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSByYXcgc3RyaW5nIHRvIGJlIGVzY2FwZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcsIHJlYWR5IHRvIGJlIHVzZWQgaW4gSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbGVzY2FwZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyaW5nID8gc3RyaW5nIDogJycpXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgZWRpdG9yLiBDb250YWlucyBvYmplY3RzIHdpdGggYSBuYW1lIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEVhY2ggb2YgdGhlIG9iamVjdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogXG4gKiAgIC0gdHlwZTogQ2FuIGJlIGVpdGhlciBpbmxpbmUgKGZvciBpbmxpbmUgZm9ybWF0dGluZykgb3IgbGluZSAoZm9yIGJsb2NrIC8gbGluZSBmb3JtYXR0aW5nKS5cbiAqICAgLSBjbGFzc05hbWU6IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYWN0aXZlIGF0IGEgZ2l2ZW4gcG9zaXRpb24uIFxuICogICAgIEZvciBsaW5lIGZvcm1hdHRpbmcsIHRoaXMgbG9va3MgYXQgdGhlIGNsYXNzIG9mIHRoZSBsaW5lIGVsZW1lbnQuIEZvciBpbmxpbmUgZWxlbWVudHMsIHRyaWVzIHRvIGZpbmQgYW4gZW5jbG9zaW5nIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogICAtIHNldCAvIHVuc2V0OiBDb250YWluIGluc3RydWN0aW9ucyBob3cgdG8gc2V0IGFuZCB1bnNldCB0aGUgY29tbWFuZC4gRm9yIGxpbmUgdHlwZSBjb21tYW5kcywgYm90aCBjb25zaXN0IG9mIGEgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgdGhhdCBcbiAqICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBsaW5lICh1c2luZyBTdHJpbmcucmVwbGFjZSkuIEZvciBpbmxpbmUgdHlwZSBjb21tYW5kcywgdGhlIHNldCBvYmplY3QgY29udGFpbnMgYSBwcmUgYW5kIHBvc3Qgc3RyaW5nIHdoaWNoIHdpbGxcbiAqICAgICBiZSBpbnNlcnRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24uIFRoZSB1bnNldCBvYmplY3QgY29udGFpbnMgYSBwcmVQYXR0ZXJuIGFuZCBhIHBvc3RQYXR0ZXJuLiBCb3RoIHNob3VsZCBiZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBcbiAqICAgICB0aGV5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgbGluZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24gKHVzaW5nIFN0cmluZy5yZXBsYWNlLCB3aXRoIGFuIGVtcHR5IHJlcGxhY2VtZW50IHN0cmluZykuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7XG4gIC8vIFJlcGxhY2VtZW50cyBmb3IgdW5zZXQgZm9yIGlubGluZSBjb21tYW5kcyBhcmUgJycgYnkgZGVmYXVsdFxuICBib2xkOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3Ryb25nJywgXG4gICAgc2V0OiB7cHJlOiAnKionLCBwb3N0OiAnKionfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqXFwqfF9fKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCpcXCp8X18pL31cbiAgfSwgXG4gIGl0YWxpYzoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUVtJywgXG4gICAgc2V0OiB7cHJlOiAnKicsIHBvc3Q6ICcqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKnxfKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCp8XykvfVxuICB9LFxuICBjb2RlOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQ29kZScsIFxuICAgIHNldDoge3ByZTogJ2AnLCBwb3N0OiAnYCd9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC9gKyQvLCBwb3N0UGF0dGVybjogL15gKy99IC8vIEZJWE1FIHRoaXMgZG9lc24ndCBlbnN1cmUgYmFsYW5jZWQgYmFja3RpY2tzIHJpZ2h0IG5vd1xuICB9LCBcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cmlrZXRocm91Z2gnLCBcbiAgICBzZXQ6IHtwcmU6ICd+ficsIHBvc3Q6ICd+fid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46L35+JC8sIHBvc3RQYXR0ZXJuOiAvXn5+LyB9XG4gIH0sXG4gIGgxOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgxJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9I1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDI6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDInLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgzOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgzJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg0OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg0JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg2OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg2JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIHVsOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVVMJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICctICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgb2w6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNT0wnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQjLiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LCBcbiAgYmxvY2txdW90ZToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1CbG9ja3F1b3RlJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICc+ICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9PlsgXT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbn07IiwiaW1wb3J0IHtcbiAgaW5saW5lR3JhbW1hcixcbiAgbGluZUdyYW1tYXIsXG4gIHB1bmN0dWF0aW9uTGVhZGluZyxcbiAgcHVuY3R1YXRpb25UcmFpbGluZyxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIEdyYW1tYXJSdWxlLFxuICBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyLFxufSBmcm9tIFwiLi9ncmFtbWFyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB0ZXh0YXJlYT86IHN0cmluZyB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIGN1c3RvbUlubGluZUdyYW1tYXI/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IHsgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbDsgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyID0gcHJvcHMuY3VzdG9tSW5saW5lR3JhbW1hciB8fCB7fTtcbiAgICB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIgPSBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGNoYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb246IFtdLFxuICAgICAgZHJvcDogW10sXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMudGV4dGFyZWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMudGV4dGFyZWEpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwcm9wcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IHByb3BzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBlbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG5cbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgICB0aGlzLm1heEhpc3RvcnkgPSAxMDA7XG5cbiAgICB0aGlzLmNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudCwgcHJvcHMpO1xuICAgIHRoaXMuc2V0Q29udGVudChcbiAgICAgIHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcHJvcHMuY29udGVudFxuICAgICAgICA6IHRoaXMudGV4dGFyZWFcbiAgICAgICAgPyB0aGlzLnRleHRhcmVhLnZhbHVlXG4gICAgICAgIDogXCIjIEhlbGxvIFRpbnlNREUhXFxuRWRpdCAqKmhlcmUqKlwiXG4gICAgKTtcbiAgICBcbiAgICB0aGlzLmUhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZVVuZG9SZWRvS2V5KGUpKTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVuZG9TdGFjay5sZW5ndGggPj0gMjtcbiAgfVxuXG4gIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHJldHVybjtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ3VycmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2goe1xuICAgICAgY29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG4gICAgICBzZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBhbmNob3I6IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnkpIHRoaXMudW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2goY3VycmVudCk7XG4gICAgY29uc3QgcHJldiA9IHRoaXMudW5kb1N0YWNrW3RoaXMudW5kb1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuc2V0Q29udGVudChwcmV2LmNvbnRlbnQpO1xuICAgIGlmIChwcmV2LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24ocHJldi5zZWxlY3Rpb24sIHByZXYuYW5jaG9yKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wb3AoKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZG9TdGFjay5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnNldENvbnRlbnQobmV4dC5jb250ZW50KTtcbiAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKG5leHQuc2VsZWN0aW9uLCBuZXh0LmFuY2hvcik7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5kb1JlZG9LZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTWFjID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHByb3BzLmVkaXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGV4dGFyZWEgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlID09PSBlbGVtZW50ICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmdcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmUsIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7IHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSk7IH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gZmFsc2UgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSB0cnVlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCAoZSkgPT4gdGhpcy5oYW5kbGVQYXN0ZShlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIChlKSA9PiB0aGlzLmhhbmRsZURyb3AoZSkpO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gdGhpcy5lLmNoaWxkTm9kZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMubGluZXMgPSBjb250ZW50LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGggYW5kXG4gICAqIGluc2VydExpbmVCcmVhayBldmVudHMuIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsXG4gICAqIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aCBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZVxuICAgKiBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZSBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzFdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1s1XVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgcmVzdG9yYXRpb24gbGF0ZXJcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBhbmNob3I6IGFuY2hvclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJpbnNlcnRJbWFnZSIsInBhc3RlIiwiY2FuVW5kbyIsImNhblJlZG8iLCJDb21tYW5kQmFyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImUiLCJjb21tYW5kcyIsImJ1dHRvbnMiLCJzdGF0ZSIsImhvdGtleXMiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJjcmVhdGVDb21tYW5kQmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVLZXlkb3duIiwic2V0RWRpdG9yIiwicGFyZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tYW5kIiwiZWwiLCJhcHBlbmRDaGlsZCIsImNvbW1hbmROYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5cyIsInNwbGl0IiwibW9kaWZpZXJzIiwibW9kaWZpZXJleHBsYW5hdGlvbiIsImkiLCJsZW5ndGgiLCJwdXNoIiwibGFzdEtleSIsIm1hdGNoIiwidG9VcHBlckNhc2UiLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsImNvbmNhdCIsImpvaW4iLCJoYW5kbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJlZGl0b3JIYWRGb2N1cyIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImZvY3VzIiwicmVzdG9yZUxhc3RTZWxlY3Rpb24iLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJhbmNob3IiLCJvdXRlciIsIm1vZGlmaWVyIiwiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiVE1Db2RlRmVuY2VUaWxkZU9wZW4iLCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UiLCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2UiLCJUTUJsYW5rTGluZSIsIlRNU2V0ZXh0SDFNYXJrZXIiLCJUTVNldGV4dEgyTWFya2VyIiwiVE1IUiIsIlRNVUwiLCJUTU9MIiwiVE1JbmRlbnRlZENvZGUiLCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uIiwibGFiZWxQbGFjZWhvbGRlciIsImh0bWxCbG9ja0dyYW1tYXIiLCJzdGFydCIsImVuZCIsInBhcmFJbnRlcnJ1cHQiLCJpbmxpbmVHcmFtbWFyIiwiZXNjYXBlIiwiYXV0b2xpbmsiLCJodG1sIiwibGlua09wZW4iLCJpbWFnZU9wZW4iLCJsaW5rTGFiZWwiLCJkZWZhdWx0IiwicmVwbGFjZW1lbnRSZWdleHAiLCJpbmxpbmVSdWxlcyIsInJ1bGUiLCJyZSIsInNvdXJjZSIsInJlcGxhY2UiLCJzdHJpbmciLCJmbGFncyIsImNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIiLCJjdXN0b21SdWxlcyIsImFyZ3VtZW50cyIsIm1lcmdlZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGFzdFNlbGVjdGlvbiIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJfYSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiY2xlYXJEaXJ0eUZsYWciLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJpbmxpbmUiLCJpbnB1dEV2ZW50IiwiZml4Tm9kZUhpZXJhcmNoeSIsInVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmciLCJfZSIsImZpcmVTZWxlY3Rpb24iLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpcmVEcm9wIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxTdHJpbmciLCJwcm9jZXNzZWQiLCJzdGFjayIsImNhcCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJpbmNsdWRlcyIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsZWFkaW5nIiwidHJhaWxpbmciLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBQSxNQUFNQSxHQUFHLEdBQTJCO0lBQ2xDQyxFQUFBQSxVQUFVLEVBQUUsQ0FBMlIseVJBQUEsQ0FBQTtJQUN2U0MsRUFBQUEsSUFBSSxFQUFFLENBQTBZLHdZQUFBLENBQUE7SUFDaFpDLEVBQ0FDLElBQUksRUFBRSxDQUErVSw2VUFBQSxDQUFBO0lBQ3JWQyxFQUFBQSxFQUFFLEVBQUUsQ0FBZ0ssOEpBQUEsQ0FBQTtJQUNwS0MsRUFBQUEsRUFBRSxFQUFFLENBQWtLLGdLQUFBLENBQUE7SUFDdEtDLEVBQUFBLEVBQUUsRUFBRSxDQUFpSSwrSEFBQSxDQUFBO0lBQ3JJQyxFQUFBQSxLQUFLLEVBQUUsQ0FBK0gsNkhBQUEsQ0FBQTtJQUN0SUMsRUFB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QUFBLElBQUksQ0FBQ3JWLGVBQWUsQ0FBQzVCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzJJLGdCQUFnQixDQUFDM0ksT0FBTyxDQUFDLENBQUM7SUFDaEU7TUFFUXNSLFFBQVFBLENBQUNDLFlBQTBCLEVBQUE7UUFDekMsS0FBSyxJQUFJckIsUUFBUSxJQUFJLElBQUksQ0FBQ2xILFNBQVMsQ0FBQ0csSUFBSSxFQUFFO0lBQ3hDK0csTUFBQUEsUUFBUSxDQUFDO0lBQUVxQixRQUFBQTtJQUFZLE9BQUUsQ0FBQztJQUM1QjtJQUNGO0lBRVFKLEVBQUFBLGFBQWFBLEdBQUE7SUFDbkIsSUFBQSxJQUFJelAsS0FBSyxHQUFHLElBQUksQ0FBQzJJLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsSUFBQSxJQUFJckksTUFBTSxHQUFHLElBQUksQ0FBQ3FJLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFFcEM7UUFDQSxJQUFJLENBQUN0QixhQUFhLEdBQUc7SUFDbkJySCxNQUFBQSxLQUFLLEVBQUVBLEtBQUs7SUFDWk0sTUFBQUEsTUFBTSxFQUFFQTtTQUNUO0lBRUQsSUFBQSxJQUFJLElBQUksQ0FBQ2dILFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUN2SSxNQUFNLEVBQUU7VUFDL0QsSUFBSW1CLFlBQVksR0FBRyxJQUFJLENBQUNtVixlQUFlLENBQUN2VixLQUFLLEVBQUVNLE1BQU0sQ0FBQztVQUN0RCxJQUFJLElBQUksQ0FBQzJHLGdCQUFnQixFQUFFO1lBQ3pCdkksTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDc0ksZ0JBQWdCLEVBQUU3RyxZQUFZLENBQUM7SUFDcEQsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNkcsZ0JBQWdCLEdBQUd2SSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUV5QixZQUFZLENBQUM7SUFDekQ7VUFDQSxLQUFLLElBQUlvTyxRQUFRLElBQUksSUFBSSxDQUFDbEgsU0FBUyxDQUFDRSxTQUFTLEVBQUU7SUFDN0NnSCxRQUFBQSxRQUFRLENBQUM7SUFDUHhPLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtJQUNiTSxVQUFBQSxNQUFNLEVBQUVBLE1BQU87Y0FDZkYsWUFBWSxFQUFFLElBQUksQ0FBQzZHO0lBQ3BCLFNBQUEsQ0FBQztJQUNKO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OV19{"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","toUpperCase","key","toLowerCase","concat","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","focus","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|