diff --git a/main.js b/main.js index cbd260d..0a4bf2a 100755 --- a/main.js +++ b/main.js @@ -140,15 +140,16 @@ class TextSnippets extends obsidian.Plugin { } findSnippet(editor, cursorOrig, cursor) { var selectedText = this.getSelectedText(editor); - var wordDelimiters = Array.from(this.settings.wordDelimiters); - var selectedWoSpaces = selectedText.split(' ').join(''); + Array.from(this.settings.wordDelimiters); + '' + selectedText.split(' ').join(''); var newStr = ""; - if (selectedWoSpaces == '' || wordDelimiters.indexOf(selectedWoSpaces[0]) >= 0 && cursorOrig.ch == cursor.ch) { - editor.execCommand('goWordLeft'); - editor.execCommand('goWordLeft'); - selectedText = this.getSelectedText(editor); - var cursor = editor.getCursor('from'); - } + // without this finds next stop everywhere in file + // if (selectedWoSpaces == '' || (selectedWoSpaces.length > 0 && wordDelimiters.indexOf(selectedWoSpaces[0]) >= 0 && cursorOrig.ch == cursor.ch)) { + // editor.execCommand('goWordLeft'); + // editor.execCommand('goWordLeft'); + // selectedText = this.getSelectedText(editor); + // var cursor = editor.getCursor('from'); + // } var i; var snippets = this.settings.snippets; for (i in snippets) { @@ -189,7 +190,6 @@ class TextSnippets extends obsidian.Plugin { return newStr; } insertSnippet(key = '', snippetStartpos = { ch: -1, line: -1 }) { - // new Notice('insert snippet'); let activeLeaf = this.app.workspace.activeLeaf; let editor = activeLeaf.view.sourceMode.cmEditor; // let editor = activeLeaf.view.editor; @@ -214,7 +214,6 @@ class TextSnippets extends obsidian.Plugin { (key == 'Space' && (cursorOrig.ch != endCursor.ch || cursorOrig.line != endCursor.line))) { if (wasSelection == false) { editor.getDoc().setSelection(cursorOrig, cursorOrig); - // new Notice('replace'); } if (key == 'Space') return false; @@ -231,7 +230,6 @@ class TextSnippets extends obsidian.Plugin { if (newStr.indexOf(pasteSymbol) != -1) snippetStartpos = cursor; editor.replaceSelection(newStr); - // new Notice('replaced?'); if (stopFound) { editor.setCursor({ line: cursor.line, @@ -259,7 +257,6 @@ class TextSnippets extends obsidian.Plugin { }); } handleKeyDown(cm, event) { - // new Notice(event.key); if ((event.key == 'Tab' && this.settings.useTab) || (event.code == 'Space' && this.settings.useSpace)) { this.SnippetOnTrigger(event.code, true); } @@ -295,7 +292,7 @@ class TextSnippets extends obsidian.Plugin { } return true; } - return false; + return this.nextStop(); } nextStop() { let activeLeaf = this.app.workspace.activeLeaf; @@ -451,4 +448,4 @@ class TextSnippetsSettingsTab extends obsidian.PluginSettingTab { } module.exports = TextSnippets; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQXBwLFxyXG4gIEVkaXRvcixcclxuICBNYXJrZG93blZpZXcsXHJcbiAgTm90aWNlLFxyXG4gIFBsdWdpbixcclxuICBQbHVnaW5TZXR0aW5nVGFiLFxyXG4gIFNldHRpbmcsXHJcbn0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dFNuaXBwZXRzIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5nczogVGV4dFNuaXBwZXRzU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBjbUVkaXRvcnM6IENvZGVNaXJyb3IuRWRpdG9yW107XHJcblxyXG5cdG9uSW5pdCgpIHt9XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiTG9hZGluZyBzbmlwcGV0cyBwbHVnaW5cIik7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFRleHRTbmlwcGV0c1NldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblx0XHQvL2V4cGVjdGVkIHdhcm5pbmdcclxuXHRcdHZhciBpc0xlZ2FjeSA9IHRoaXMuYXBwLnZhdWx0LmNvbmZpZy5sZWdhY3lFZGl0b3I7XHJcblx0XHRpZiAoIWlzTGVnYWN5ICE9IHRoaXMuc2V0dGluZ3MuaXNXWVNJV1lHKSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuaXNXWVNJV1lHID0gIWlzTGVnYWN5O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiBcInRleHQtc25pcHBldHNcIixcclxuXHRcdFx0bmFtZTogXCJSdW4gc25pcHBldCByZXBsYWNlbWVudFwiLFxyXG5cdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5TbmlwcGV0T25UcmlnZ2VyKCksXHJcblx0XHRcdGhvdGtleXM6IFt7XHJcblx0XHRcdFx0bW9kaWZpZXJzOiBbXCJNb2RcIl0sXHJcblx0XHRcdFx0a2V5OiBcInRhYlwiXHJcblx0XHRcdH1dLFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5jbUVkaXRvcnMgPSBbXTtcclxuXHRcdHRoaXMucmVnaXN0ZXJDb2RlTWlycm9yKChjbSkgPT4ge1xyXG5cdFx0XHR0aGlzLmNtRWRpdG9ycy5wdXNoKGNtKTtcclxuXHRcdFx0Ly8gdGhlIGNhbGxiYWNrIGhhcyB0byBiZSBjYWxsZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uIGluIG9yZGVyIGZvciAndGhpcycgdG8gd29ya1xyXG5cdFx0XHRjbS5vbigna2V5ZG93bicsIChjbSwgZXZlbnQpID0+IHRoaXMuaGFuZGxlS2V5RG93bihjbSwgZXZlbnQpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZyhcIlVubG9hZGluZyB0ZXh0IHNuaXBwZXQgcGx1Z2luXCIpO1xyXG5cclxuXHRcdHRoaXMuY21FZGl0b3JzID0gW107XHJcblx0XHR0aGlzLnJlZ2lzdGVyQ29kZU1pcnJvcigoY20pID0+IHtcclxuXHRcdFx0dGhpcy5jbUVkaXRvcnMucHVzaChjbSk7XHJcblx0XHRcdC8vIHRoZSBjYWxsYmFjayBoYXMgdG8gYmUgY2FsbGVkIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbiBpbiBvcmRlciBmb3IgJ3RoaXMnIHRvIHdvcmtcclxuXHRcdFx0Y20ub2ZmKCdrZXlkb3duJywgKGNtLCBldmVudCkgPT4gdGhpcy5oYW5kbGVLZXlEb3duKGNtLCBldmVudCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHR9XHJcblxyXG5cdFVwZGF0ZVNwbGl0KG5ld2xpbmVTeW1ib2w6IHN0cmluZykge1xyXG5cdFx0dmFyIG5sU3ltYiA9IG5ld2xpbmVTeW1ib2w7XHJcblx0XHR2YXIgbmxTeW1iID0gbmxTeW1iLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XHJcblx0XHR2YXIgcmcgPSAnKD88IScgKyBubFN5bWIgKycpXFxcXG4nO1xyXG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJnKTtcclxuXHRcdHZhciBzcGxpdGVkID0gdGhpcy5zZXR0aW5ncy5zbmlwcGV0c19maWxlLnNwbGl0KHJlZ2V4KTtcclxuXHRcdHNwbGl0ZWQgPSBzcGxpdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0pO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zbmlwcGV0cyA9IHNwbGl0ZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRTZWxlY3RlZFRleHQoZWRpdG9yOiBDb2RlTWlycm9yLkVkaXRvcikge1xyXG5cdFx0aWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XHJcblx0XHRcdHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR2YXIgd29yZEJvdW5kYXJpZXMgPSB0aGlzLmdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcik7XHJcblx0XHRcdGVkaXRvci5nZXREb2MoKS5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuc3RhcnQsIHdvcmRCb3VuZGFyaWVzLmVuZCk7XHJcblx0XHRcdHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1dvcmQoYzogYW55KSA6IGJvb2xlYW4ge1xyXG5cdFx0Ly9pZiBjaGFyYWN0ZXIgaXMgbm90IGEgd2hpZXNwYWNlIG9yIGEgZGVsaW1pdGVyXHJcblx0XHR2YXIgbm90V29yZCA9ICcgXFx0XFxuXFxyXFx2JyArIHRoaXMuc2V0dGluZ3Mud29yZERlbGltaXRlcnM7XHJcblx0XHRpZiAobm90V29yZC5pbmRleE9mKGMpIDw9IC0xICkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0U25pcHBldHNXb3JkQXQoY20gOiBDb2RlTWlycm9yLkVkaXRvciwgcG9zOiBDb2RlTWlycm9yLlBvc2l0aW9uKSA6IGFueSB7XHJcblx0XHR2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHN0YXJ0LCBsaW5lID0gY20uZ2V0TGluZShwb3MubGluZSk7XHJcblx0XHR3aGlsZSAoc3RhcnQgJiYgdGhpcy5pc1dvcmQobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7XHJcblx0XHR3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgdGhpcy5pc1dvcmQobGluZS5jaGFyQXQoZW5kKSkpICsrZW5kO1xyXG5cdFx0dmFyIGZyID0ge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9O1xyXG5cdFx0dmFyIHQgPSB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9O1xyXG5cdFx0cmV0dXJuIHtmcm9tOiBmciwgdG86IHQsIHdvcmQ6IGxpbmUuc2xpY2Uoc3RhcnQsIGVuZCl9O1xyXG5cdH1cclxuXHJcblx0Z2V0V29yZEJvdW5kYXJpZXMoZWRpdG9yOiBDb2RlTWlycm9yLkVkaXRvcikge1xyXG5cdFx0dmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuXHRcdHZhciBsaW5lID0gY3Vyc29yLmxpbmU7XHJcblx0XHR2YXIgY2ggPSBjdXJzb3IuY2g7XHJcblxyXG5cdFx0dmFyIHdvcmQgPSB0aGlzLlNuaXBwZXRzV29yZEF0KGVkaXRvciwgY3Vyc29yKTtcclxuXHRcdHZhciB3b3JkU3RhcnQgPSB3b3JkLmZyb20uY2g7XHJcblx0XHR2YXIgd29yZEVuZCA9IHdvcmQudG8uY2g7XHJcblx0XHRcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHN0YXJ0OiB7XHJcblx0XHRcdFx0bGluZTogbGluZSxcclxuXHRcdFx0XHRjaDogd29yZFN0YXJ0XHJcblx0XHRcdH0sXHJcblx0XHRcdGVuZDoge1xyXG5cdFx0XHRcdGxpbmU6IGxpbmUsXHJcblx0XHRcdFx0Y2g6IHdvcmRFbmRcclxuXHRcdFx0fSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmaW5kU25pcHBldChlZGl0b3IgOiBDb2RlTWlycm9yLkVkaXRvciwgY3Vyc29yT3JpZyA6IENvZGVNaXJyb3IuUG9zaXRpb24sIGN1cnNvciA6IENvZGVNaXJyb3IuUG9zaXRpb24pIDogc3RyaW5nIHtcclxuXHRcdHZhciBzZWxlY3RlZFRleHQgPSB0aGlzLmdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xyXG5cdFx0dmFyIHdvcmREZWxpbWl0ZXJzID0gQXJyYXkuZnJvbSh0aGlzLnNldHRpbmdzLndvcmREZWxpbWl0ZXJzKTtcclxuXHRcdHZhciBzZWxlY3RlZFdvU3BhY2VzID0gc2VsZWN0ZWRUZXh0LnNwbGl0KCcgJykuam9pbignJyk7XHJcblx0XHR2YXIgbmV3U3RyID0gXCJcIjtcclxuXHJcblx0XHRpZiAoc2VsZWN0ZWRXb1NwYWNlcyA9PSAnJyB8fCB3b3JkRGVsaW1pdGVycy5pbmRleE9mKHNlbGVjdGVkV29TcGFjZXNbMF0pID49IDAgJiYgY3Vyc29yT3JpZy5jaCA9PSBjdXJzb3IuY2gpIHtcclxuXHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKCdnb1dvcmRMZWZ0Jyk7XHJcblx0XHRcdGVkaXRvci5leGVjQ29tbWFuZCgnZ29Xb3JkTGVmdCcpO1xyXG5cdFx0XHRzZWxlY3RlZFRleHQgPSB0aGlzLmdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xyXG5cdFx0XHR2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcignZnJvbScpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBpO1xyXG5cdFx0dmFyIHNuaXBwZXRzID0gIHRoaXMuc2V0dGluZ3Muc25pcHBldHM7XHJcblx0XHRmb3IgKGkgaW4gc25pcHBldHMpe1xyXG5cdFx0XHR2YXIgc25pcHBldCA9IHNuaXBwZXRzW2ldLnNwbGl0KCcgOiAnKTtcclxuXHJcblx0XHRcdGlmIChzZWxlY3RlZFRleHQgPT0gc25pcHBldFswXSkge1xyXG5cdFx0XHRcdG5ld1N0ciA9IHNuaXBwZXRbMV07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXdTdHI7XHJcblx0fVxyXG5cclxuXHRjYWxjdWxhdGVDdXJzb3JFbmRQb3MoblN0ciA6IHN0cmluZywgY3Vyc29yIDogQ29kZU1pcnJvci5Qb3NpdGlvbiwgZW5kUG9zaXRpb24gOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0dmFyIG5sU3ltYiA9IHRoaXMuc2V0dGluZ3MubmV3bGluZVN5bWJvbDtcclxuXHRcdHZhciBlbmRTeW1ib2wgPSB0aGlzLnNldHRpbmdzLmVuZFN5bWJvbDtcclxuXHRcdHZhciBzdG9wU3ltYm9sID0gdGhpcy5zZXR0aW5ncy5zdG9wU3ltYm9sO1xyXG5cdFx0dmFyIG5ld1N0ciA9IG5TdHIuc3BsaXQoJ1xcbicpLmpvaW4oJycpO1xyXG5cclxuXHRcdGlmIChuZXdTdHIuaW5kZXhPZihzdG9wU3ltYm9sKSA9PSAtMSkge1xyXG5cdFx0XHR2YXIgcmF3RW5kID0gbmV3U3RyLmluZGV4T2YoZW5kU3ltYm9sKTtcclxuXHRcdFx0aWYgKHJhd0VuZCA9PSAtMSlcdHJhd0VuZCA9IG5ld1N0ci5sZW5ndGg7XHJcblx0XHRcdFxyXG5cdFx0XHR2YXIgbGFzdE5sID0gbmV3U3RyLnN1YnN0cmluZygwLCByYXdFbmQpLmxhc3RJbmRleE9mKG5sU3ltYik7XHJcblx0XHRcdGlmIChsYXN0TmwgIT0gLTEpXHR2YXIgZW5kUG9zSW5kZXggPSByYXdFbmQgLSBsYXN0TmwgLSBubFN5bWIubGVuZ3RoIC0gY3Vyc29yLmNoO1xyXG5cdFx0XHRlbHNlIFx0XHRcdFx0dmFyIGVuZFBvc0luZGV4ID0gcmF3RW5kO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dmFyIGVuZFBvc0luZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0bmxTeW1iID0gbmxTeW1iLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XHQvL25vIHNwZWNpYWwgc3ltYm9scyBpbiBubFN5bWJcclxuXHRcdHZhciByZyA9IG5sU3ltYiArICdcXFxcbicgKyAnfCcgKyBubFN5bWI7XHJcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocmcpO1xyXG5cdFx0Y29uc3QgcmVnZXhGID0gbmV3IFJlZ0V4cChyZywgJ2cnKTtcclxuXHRcdHZhciBubGluZXNDb3VudCA9IChuZXdTdHIuc3Vic3RyaW5nKDAsIHJhd0VuZCkubWF0Y2gocmVnZXhGKSB8fCBbXSkubGVuZ3RoO1xyXG5cclxuXHRcdGVuZFBvc2l0aW9uLm5saW5lc0NvdW50ID0gbmxpbmVzQ291bnQ7XHJcblx0XHRlbmRQb3NpdGlvbi5wb3NpdGlvbiA9IGVuZFBvc0luZGV4O1xyXG5cclxuXHRcdG5ld1N0ciA9IG5ld1N0ci5zcGxpdChyZWdleCkuam9pbignXFxuJyk7XHJcblx0XHRuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShlbmRTeW1ib2wsJycpO1xyXG5cdFx0cmV0dXJuIG5ld1N0cjtcclxuXHR9XHJcblxyXG5cclxuXHRpbnNlcnRTbmlwcGV0KGtleSA6IHN0cmluZyA9ICcnLCBzbmlwcGV0U3RhcnRwb3MgOiBDb2RlTWlycm9yLlBvc2l0aW9uID0ge2NoOi0xLCBsaW5lOi0xfSk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gbmV3IE5vdGljZSgnaW5zZXJ0IHNuaXBwZXQnKTtcclxuXHRcdGxldCBhY3RpdmVMZWFmOiBhbnkgPSB0aGlzLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZjtcclxuXHRcdGxldCBlZGl0b3IgPSBhY3RpdmVMZWFmLnZpZXcuc291cmNlTW9kZS5jbUVkaXRvcjtcclxuXHRcdC8vIGxldCBlZGl0b3IgPSBhY3RpdmVMZWFmLnZpZXcuZWRpdG9yO1xyXG5cdFx0dmFyIGN1cnNvck9yaWcgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XHJcblx0XHR2YXIgd2FzU2VsZWN0aW9uID0gZWRpdG9yLnNvbWV0aGluZ1NlbGVjdGVkKCk7XHJcblx0XHR2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcignZnJvbScpO1xyXG5cdFx0dmFyIHdvcmRCb3VuZGFyaWVzO1xyXG5cdFx0aWYod2FzU2VsZWN0aW9uKSB7XHJcblx0XHRcdHdvcmRCb3VuZGFyaWVzID0ge3N0YXJ0OiBjdXJzb3IsIGVuZDogZWRpdG9yLmdldEN1cnNvcigndG8nKX07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3b3JkQm91bmRhcmllcyA9IHRoaXMuZ2V0V29yZEJvdW5kYXJpZXMoZWRpdG9yKTtcclxuXHRcdH1cclxuXHRcdHZhciBzdG9wU3ltYm9sID0gdGhpcy5zZXR0aW5ncy5zdG9wU3ltYm9sO1xyXG5cdFx0dmFyIHBhc3RlU3ltYm9sID0gdGhpcy5zZXR0aW5ncy5wYXN0ZVN5bWJvbDtcclxuXHRcdHZhciBzdG9wRm91bmQgPSBmYWxzZTtcclxuXHRcdHZhciBuZXdTdHIgPSBcIlwiO1xyXG5cclxuXHRcdG5ld1N0ciA9IHRoaXMuZmluZFNuaXBwZXQoZWRpdG9yLCBjdXJzb3JPcmlnLCBjdXJzb3IpO1xyXG5cdFx0Y3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcignZnJvbScpO1xyXG5cclxuXHRcdC8vcHJvY2VlZCBUYWIgYW5kIFNwYWNlYmFyXHJcblx0XHR2YXIgZW5kQ3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcigndG8nKTtcclxuXHRcdGlmIChuZXdTdHIgPT0gXCJcIiB8fCBcclxuXHRcdFx0KGtleSA9PSAnU3BhY2UnICYmIChjdXJzb3JPcmlnLmNoICE9IGVuZEN1cnNvci5jaCB8fCBjdXJzb3JPcmlnLmxpbmUgIT0gZW5kQ3Vyc29yLmxpbmUpKSApICB7XHJcblx0XHRcdGlmICh3YXNTZWxlY3Rpb24gPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRlZGl0b3IuZ2V0RG9jKCkuc2V0U2VsZWN0aW9uKGN1cnNvck9yaWcsIGN1cnNvck9yaWcpO1xyXG5cdFx0Ly8gbmV3IE5vdGljZSgncmVwbGFjZScpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChrZXkgPT0gJ1NwYWNlJylcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0aWYgKG5ld1N0ciA9PSBcIlwiKSB7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihjdXJzb3JPcmlnKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5uZXh0U3RvcCgpO1xyXG5cdFx0XHR9XHRcclxuXHRcdH1cclxuXHJcblx0XHQvL2ZpbmQgZW5kIHBvc2l0aW9uXHJcblx0XHR2YXIgZW5kUG9zaXRpb24gPSB7bmxpbmVzQ291bnQ6IDAsIHBvc2l0aW9uOiAwfTtcclxuXHRcdG5ld1N0ciA9IHRoaXMuY2FsY3VsYXRlQ3Vyc29yRW5kUG9zKG5ld1N0ciwgY3Vyc29yLCBlbmRQb3NpdGlvbik7XHJcblx0XHRpZiAobmV3U3RyLmluZGV4T2Yoc3RvcFN5bWJvbCkgIT0gLTEpXHRzdG9wRm91bmQgPSB0cnVlO1xyXG5cdFx0aWYgKG5ld1N0ci5pbmRleE9mKHBhc3RlU3ltYm9sKSAhPSAtMSlcdHNuaXBwZXRTdGFydHBvcyA9IGN1cnNvcjtcclxuXHJcblx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xyXG5cdFx0Ly8gbmV3IE5vdGljZSgncmVwbGFjZWQ/Jyk7XHJcblxyXG5cdFx0aWYgKHN0b3BGb3VuZCkge1xyXG5cdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKHtcclxuXHRcdFx0XHRsaW5lOiBjdXJzb3IubGluZSxcclxuXHRcdFx0XHRjaDogY3Vyc29yLmNoXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMubmV4dFN0b3AoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGVkaXRvci5zZXRDdXJzb3Ioe1xyXG5cdFx0XHRcdGxpbmU6IGN1cnNvci5saW5lICsgZW5kUG9zaXRpb24ubmxpbmVzQ291bnQsXHJcblx0XHRcdFx0Y2g6IGN1cnNvci5jaCArIGVuZFBvc2l0aW9uLnBvc2l0aW9uXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGVkaXRvci5mb2N1cygpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRhZGp1c3RDdXJzb3IoZWRpdG9yOiBDb2RlTWlycm9yLkVkaXRvciwgY3Vyc29yOiBDb2RlTWlycm9yLlBvc2l0aW9uLCBuZXdTdHI6IHN0cmluZywgb2xkU3RyOiBzdHJpbmcpIHtcclxuXHRcdHZhciBjdXJzb3JPZmZzZXQgPSBuZXdTdHIubGVuZ3RoIC0gb2xkU3RyLmxlbmd0aDtcclxuXHRcdHRoaXMuYWRqdXN0Q3Vyc29yT2Zmc2V0KGVkaXRvciwgY3Vyc29yLCBjdXJzb3JPZmZzZXQpO1xyXG5cdH1cclxuXHJcblx0YWRqdXN0Q3Vyc29yT2Zmc2V0KGVkaXRvcjogQ29kZU1pcnJvci5FZGl0b3IsIGN1cnNvcjogQ29kZU1pcnJvci5Qb3NpdGlvbiwgY3Vyc29yT2Zmc2V0OiBhbnkpIHtcclxuXHRcdGVkaXRvci5zZXRDdXJzb3Ioe1xyXG5cdFx0XHRsaW5lOiBjdXJzb3IubGluZSxcclxuXHRcdFx0Y2g6IGN1cnNvci5jaCArIGN1cnNvck9mZnNldFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVLZXlEb3duIChjbTogQ29kZU1pcnJvci5FZGl0b3IsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7IFxyXG5cdFx0Ly8gbmV3IE5vdGljZShldmVudC5rZXkpO1xyXG5cdFx0aWYgKChldmVudC5rZXkgPT0gJ1RhYicgJiYgdGhpcy5zZXR0aW5ncy51c2VUYWIpIHx8IChldmVudC5jb2RlID09ICdTcGFjZScgJiYgdGhpcy5zZXR0aW5ncy51c2VTcGFjZSkpIHtcclxuXHRcdFx0dGhpcy5TbmlwcGV0T25UcmlnZ2VyKGV2ZW50LmNvZGUsIHRydWUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0U25pcHBldE9uVHJpZ2dlcihrZXkgOiBzdHJpbmcgPSAnJywgcHJldmVudERlZjogYm9vbGVhbj1mYWxzZSk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IGFjdGl2ZUxlYWY6IGFueSA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmO1xyXG5cdFx0bGV0IGNtID0gYWN0aXZlTGVhZi52aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XHJcblx0XHR2YXIgY3Vyc29yU3QgPSBjbS5nZXRDdXJzb3IoKTtcclxuXHRcdGlmICh0aGlzLmluc2VydFNuaXBwZXQoa2V5LCBjdXJzb3JTdCkpIHtcclxuXHJcblx0XHRcdGlmIChwcmV2ZW50RGVmKSB7XHJcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgJiYga2V5ID09ICdUYWInKXtcclxuXHRcdFx0XHRcdC8vIGRlbGV0ZSAnXFx0JyBpbiBMaXZlIHByZXZpZXdcclxuXHRcdFx0XHRcdHZhciBzZWFyY2ggPSBjbS5zZWFyY2hDdXJzb3IoJ1xcdCcsIGN1cnNvclN0KTtcclxuXHRcdFx0XHRcdGlmIChzZWFyY2guZmluZFByZXZpb3VzKCkpIHtcclxuXHRcdFx0XHRcdFx0c2VhcmNoLnJlcGxhY2UoJycpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0XHJcblx0XHRcdGlmIChjdXJzb3JTdC5jaCA+PTAgJiYgY3Vyc29yU3QubGluZSA+PSAwKSB7XHRcdC8vcGFzdGUgdGV4dCBmcm9tIGNsaXBib2FyZFxyXG5cdFx0XHRcdHZhciBjdXJzb3JPcmlnID0gY20uZ2V0Q3Vyc29yKCk7XHJcblx0XHRcdFx0bmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCgpLnRoZW4oXHJcblx0XHRcdFx0XHQoY2xpcFRleHQpID0+IHtcclxuXHJcblx0XHRcdFx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuaXNXWVNJV1lHID09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHNlYXJjaCA9IGNtLmdldFNlYXJjaEN1cnNvcih0aGlzLnNldHRpbmdzLnBhc3RlU3ltYm9sLCBjdXJzb3JTdCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHNlYXJjaCA9IGNtLnNlYXJjaEN1cnNvcih0aGlzLnNldHRpbmdzLnBhc3RlU3ltYm9sLCBjdXJzb3JTdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKHNlYXJjaC5maW5kTmV4dCgpKSB7XHJcblx0XHRcdFx0XHRcdFx0c2VhcmNoLnJlcGxhY2UoY2xpcFRleHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdG5leHRTdG9wKCk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IGFjdGl2ZUxlYWY6IGFueSA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmO1xyXG5cdFx0bGV0IGNtID0gYWN0aXZlTGVhZi52aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XHJcblxyXG5cdFx0aWYodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgPT0gZmFsc2UpIHtcclxuXHRcdFx0dmFyIHNlYXJjaCA9IGNtLmdldFNlYXJjaEN1cnNvcih0aGlzLnNldHRpbmdzLnN0b3BTeW1ib2wsIGNtLmdldEN1cnNvcigpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhciBzZWFyY2ggPSBjbS5zZWFyY2hDdXJzb3IodGhpcy5zZXR0aW5ncy5zdG9wU3ltYm9sLCBjbS5nZXRDdXJzb3IoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHNlYXJjaC5maW5kTmV4dCgpKSB7XHJcblx0XHRcdHNlYXJjaC5yZXBsYWNlKFwiXCIpO1xyXG5cclxuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRjbS5zZXRDdXJzb3Ioc2VhcmNoLmZyb20oKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y20uc2V0Q3Vyc29yKHNlYXJjaC5jdXJyZW50KCkuZnJvbSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudXNlVGFiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuXHJcbmludGVyZmFjZSBUZXh0U25pcHBldHNTZXR0aW5ncyB7XHJcblx0c25pcHBldHNfZmlsZTogc3RyaW5nO1xyXG5cdHNuaXBwZXRzOiBzdHJpbmdbXTtcclxuXHRlbmRTeW1ib2w6IHN0cmluZztcclxuXHRuZXdsaW5lU3ltYm9sOiBzdHJpbmc7XHJcblx0c3RvcFN5bWJvbDogc3RyaW5nO1xyXG5cdHBhc3RlU3ltYm9sOiBzdHJpbmc7XHJcblx0dXNlVGFiOiBib29sZWFuO1xyXG5cdHVzZVNwYWNlOiBib29sZWFuO1xyXG5cdHdvcmREZWxpbWl0ZXJzOiBzdHJpbmc7XHJcblx0aXNXWVNJV1lHOiBib29sZWFuO1xyXG5cclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogVGV4dFNuaXBwZXRzU2V0dGluZ3MgPSB7XHJcblx0c25pcHBldHNfZmlsZTogXCJzbmlwcGV0cyA6IEl0IGlzIGFuIG9ic2lkaWFuIHBsdWdpbiwgdGhhdCByZXBsYWNlcyB5b3VyIHNlbGVjdGVkIHRleHQuXCIsXHJcblx0c25pcHBldHMgOiBbXCJzbmlwcGV0cyA6IEl0IGlzIGFuIG9ic2lkaWFuIHBsdWdpbiwgdGhhdCByZXBsYWNlcyB5b3VyIHNlbGVjdGVkIHRleHQuXCJdLFxyXG5cdGVuZFN5bWJvbDogJyRlbmQkJyxcclxuXHRuZXdsaW5lU3ltYm9sOiAnJG5sJCcsXHJcblx0c3RvcFN5bWJvbDogXCIkdGIkXCIsXHJcblx0cGFzdGVTeW1ib2w6IFwiJHBzdCRcIixcclxuXHR1c2VUYWI6IHRydWUsXHJcblx0dXNlU3BhY2U6IGZhbHNlLFxyXG5cdHdvcmREZWxpbWl0ZXJzOiBcIiQoKVtde308PiwuIT87OlxcJ1xcXCJcXFxcL1wiLFxyXG5cdGlzV1lTSVdZRzogZmFsc2UsXHJcbn1cclxuXHJcbmNsYXNzIFRleHRTbmlwcGV0c1NldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblx0cGx1Z2luOiBUZXh0U25pcHBldHM7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFRleHRTbmlwcGV0cykge1xyXG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0bGV0IHtcclxuXHRcdFx0Y29udGFpbmVyRWxcclxuXHRcdH0gPSB0aGlzO1xyXG5cclxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7dGV4dDogJ1RleHQgU25pcHBldHMgLSBTZXR0aW5ncyd9KTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdC5zZXROYW1lKFwiU25pcHBldHNcIilcclxuXHRcdC5zZXREZXNjKFwiVHlwZSBoZXJlIHlvdXIgc25pcHBldHMgaW4gZm9ybWF0ICdzbmlwcGV0IDogcmVzdWx0Jywgb25lIHBlciBsaW5lLiBFbXB0eSBsaW5lcyB3aWxsIGJlIGlnbm9yZWQuIEN0cmwrVGFiIHRvIHJlcGxhY2UgKGhvdGtleSBjYW4gYmUgY2hhbmdlZCkuXCIpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWNsYXNzXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+XHJcblx0XHRcdHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiYmVmb3JlIDogYWZ0ZXJcIilcclxuXHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNuaXBwZXRzX2ZpbGUpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zbmlwcGV0c19maWxlID0gdmFsdWU7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uVXBkYXRlU3BsaXQodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3bGluZVN5bWJvbCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIkN1cnNvciBlbmQgcG9zaXRpb24gbWFya1wiKVxyXG5cdFx0LnNldERlc2MoXCJQbGFjZXMgdGhlIGN1cnNvciB0byB0aGUgbWFyayBwb3NpdGlvbiBhZnRlciBpbnNlcnRpbmcgYSBzbmlwcGV0IChkZWZhdWx0OiAkZW5kJCkuXFxuTWFyayBkb2VzIG5vdCBhcHBlYXIgYW55d2hlcmUgd2l0aGluIHRoZSBzbmlwcGV0LiBEbyBub3QgdXNlIHRvZ2V0aGVyIHdpdGggU3RvcCBTeW1ib2wuXCIpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWN1cnNvclwiKVxyXG5cdFx0LmFkZFRleHRBcmVhKCh0ZXh0KSA9PlxyXG5cdFx0XHR0ZXh0XHJcblx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIiRlbmQkXCIpXHJcblx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmRTeW1ib2wpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUgPT0gJycpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gJyRlbmQkJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5kU3ltYm9sID0gdmFsdWU7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIk5ld2xpbmUgbWFya1wiKVxyXG5cdFx0LnNldERlc2MoXCJJZ25vcmVzIG5ld2xpbmUgYWZ0ZXIgbWFyaywgcmVwbGFjZSBpdCB3aXRoIGEgbmV3bGluZSBjaGFyYWN0ZXIgYWZ0ZXIgZXhwYW5kaW5nIChkZWZhdWx0OiAkbmwkKS5cXG5OZWNlc3NhcnkgdG8gd3JpdGUgYmVmb3JlIGV2ZXJ5IGxpbmUgYnJlYWsgaW4gbXVsdGlsaW5lIHNuaXBwZXRzLlwiKVxyXG5cdFx0LnNldENsYXNzKFwidGV4dC1zbmlwcGV0cy1uZXdsaW5lXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+XHJcblx0XHRcdHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiJG5sJFwiKVxyXG5cdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3bGluZVN5bWJvbClcclxuXHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PSAnJykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSAnJG5sJCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld2xpbmVTeW1ib2wgPSB2YWx1ZTtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5VcGRhdGVTcGxpdCh2YWx1ZSk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZSgnU3RvcCBTeW1ib2wnKVxyXG5cdFx0LnNldERlc2MoJ1N5bWJvbCB0byBqdW1wIHRvIHdoZW4gY29tbWFuZCBpcyBjYWxsZWQuJylcclxuXHRcdC5zZXRDbGFzcyhcInRleHQtc25pcHBldHMtdGFic3RvcHNcIilcclxuXHRcdC5hZGRUZXh0QXJlYSgodGV4dCkgPT4gdGV4dFxyXG5cdFx0XHQuc2V0UGxhY2Vob2xkZXIoJycpXHJcblx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zdG9wU3ltYm9sKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlID09JycpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gJyR0YiQnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zdG9wU3ltYm9sID0gdmFsdWU7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoJ0NsaXBib2FyZCBwYXN0ZSBTeW1ib2wnKVxyXG5cdFx0LnNldERlc2MoJ1N5bWJvbCB0byBiZSByZXBsYWNlZCB3aXRoIGNsaXBib2FyZCBjb250ZW50LicpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLXRhYnN0b3BzXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+IHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKCcnKVxyXG5cdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucGFzdGVTeW1ib2wpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUgPT0nJykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSAnJHBzdCQnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXN0ZVN5bWJvbCA9IHZhbHVlO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoXCJFeHBhbmQgb24gVGFiXCIpXHJcblx0XHQuc2V0RGVzYyhcIlVzZSB0aGUgVGFiIGtleSBhcyB0aGUgdHJpZ2dlci5cIilcclxuXHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+XHJcblx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VUYWIpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VUYWIgPSAhdGhpcy5wbHVnaW4uc2V0dGluZ3MudXNlVGFiO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIkV4cGFuZCBvbiBTcGFjZVwiKVxyXG5cdFx0LnNldERlc2MoXCJVc2UgdGhlIFNwYWNlIGJhciBidXR0b24gYXMgdGhlIHRyaWdnZXIuXCIpXHJcblx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PlxyXG5cdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudXNlU3BhY2UpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VTcGFjZSA9ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VTcGFjZTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoXCJMaXZlIFByZXZpZXcgTW9kZVwiKVxyXG5cdFx0LnNldERlc2MoXCJUb2dnbGUgbWFudWFsbHkgaWYgbm90IGNvcnJlY3QuIFlvdSBzaG91bGQgcmVzdGFydCBwbHVnaW4gYWZ0ZXIgY2hhbmdpbmcgdGhpcyBvcHRpb24uXCIpXHJcblx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PlxyXG5cdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNXWVNJV1lHKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNXWVNJV1lHID0gIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzV1lTSVdZRztcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdC5zZXROYW1lKCdXb3JkIGRlbGltaXRlcnMnKVxyXG5cdFx0LnNldERlc2MoJ9ChaGFyYWN0ZXJzIGZvciBzcGVjaWZ5aW5nIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHNlcGFyYXRlIHdvcmRzLicpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWRlbGltaXRlclwiKVxyXG5cdFx0LmFkZFRleHRBcmVhKCh0ZXh0KSA9PiB0ZXh0XHJcblx0XHRcdC5zZXRQbGFjZWhvbGRlcignJylcclxuXHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLndvcmREZWxpbWl0ZXJzKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Mud29yZERlbGltaXRlcnMgPSB2YWx1ZTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHJcblx0fVxyXG59XHJcbiJdLCJuYW1lcyI6WyJQbHVnaW4iLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFF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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQXBwLFxyXG4gIEVkaXRvcixcclxuICBNYXJrZG93blZpZXcsXHJcbiAgLy8gTm90aWNlLFxyXG4gIFBsdWdpbixcclxuICBQbHVnaW5TZXR0aW5nVGFiLFxyXG4gIFNldHRpbmcsXHJcbn0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dFNuaXBwZXRzIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5nczogVGV4dFNuaXBwZXRzU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBjbUVkaXRvcnM6IENvZGVNaXJyb3IuRWRpdG9yW107XHJcblxyXG5cdG9uSW5pdCgpIHt9XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiTG9hZGluZyBzbmlwcGV0cyBwbHVnaW5cIik7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFRleHRTbmlwcGV0c1NldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblx0XHQvL2V4cGVjdGVkIHdhcm5pbmdcclxuXHRcdHZhciBpc0xlZ2FjeSA9IHRoaXMuYXBwLnZhdWx0LmNvbmZpZy5sZWdhY3lFZGl0b3I7XHJcblx0XHRpZiAoIWlzTGVnYWN5ICE9IHRoaXMuc2V0dGluZ3MuaXNXWVNJV1lHKSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuaXNXWVNJV1lHID0gIWlzTGVnYWN5O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiBcInRleHQtc25pcHBldHNcIixcclxuXHRcdFx0bmFtZTogXCJSdW4gc25pcHBldCByZXBsYWNlbWVudFwiLFxyXG5cdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5TbmlwcGV0T25UcmlnZ2VyKCksXHJcblx0XHRcdGhvdGtleXM6IFt7XHJcblx0XHRcdFx0bW9kaWZpZXJzOiBbXCJNb2RcIl0sXHJcblx0XHRcdFx0a2V5OiBcInRhYlwiXHJcblx0XHRcdH1dLFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5jbUVkaXRvcnMgPSBbXTtcclxuXHRcdHRoaXMucmVnaXN0ZXJDb2RlTWlycm9yKChjbSkgPT4ge1xyXG5cdFx0XHR0aGlzLmNtRWRpdG9ycy5wdXNoKGNtKTtcclxuXHRcdFx0Ly8gdGhlIGNhbGxiYWNrIGhhcyB0byBiZSBjYWxsZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uIGluIG9yZGVyIGZvciAndGhpcycgdG8gd29ya1xyXG5cdFx0XHRjbS5vbigna2V5ZG93bicsIChjbSwgZXZlbnQpID0+IHRoaXMuaGFuZGxlS2V5RG93bihjbSwgZXZlbnQpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZyhcIlVubG9hZGluZyB0ZXh0IHNuaXBwZXQgcGx1Z2luXCIpO1xyXG5cclxuXHRcdHRoaXMuY21FZGl0b3JzID0gW107XHJcblx0XHR0aGlzLnJlZ2lzdGVyQ29kZU1pcnJvcigoY20pID0+IHtcclxuXHRcdFx0dGhpcy5jbUVkaXRvcnMucHVzaChjbSk7XHJcblx0XHRcdC8vIHRoZSBjYWxsYmFjayBoYXMgdG8gYmUgY2FsbGVkIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbiBpbiBvcmRlciBmb3IgJ3RoaXMnIHRvIHdvcmtcclxuXHRcdFx0Y20ub2ZmKCdrZXlkb3duJywgKGNtLCBldmVudCkgPT4gdGhpcy5oYW5kbGVLZXlEb3duKGNtLCBldmVudCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHR9XHJcblxyXG5cdFVwZGF0ZVNwbGl0KG5ld2xpbmVTeW1ib2w6IHN0cmluZykge1xyXG5cdFx0dmFyIG5sU3ltYiA9IG5ld2xpbmVTeW1ib2w7XHJcblx0XHR2YXIgbmxTeW1iID0gbmxTeW1iLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XHJcblx0XHR2YXIgcmcgPSAnKD88IScgKyBubFN5bWIgKycpXFxcXG4nO1xyXG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJnKTtcclxuXHRcdHZhciBzcGxpdGVkID0gdGhpcy5zZXR0aW5ncy5zbmlwcGV0c19maWxlLnNwbGl0KHJlZ2V4KTtcclxuXHRcdHNwbGl0ZWQgPSBzcGxpdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0pO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zbmlwcGV0cyA9IHNwbGl0ZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRTZWxlY3RlZFRleHQoZWRpdG9yOiBDb2RlTWlycm9yLkVkaXRvcikge1xyXG5cdFx0aWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XHJcblx0XHRcdHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR2YXIgd29yZEJvdW5kYXJpZXMgPSB0aGlzLmdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcik7XHJcblx0XHRcdGVkaXRvci5nZXREb2MoKS5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuc3RhcnQsIHdvcmRCb3VuZGFyaWVzLmVuZCk7XHJcblx0XHRcdHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1dvcmQoYzogYW55KSA6IGJvb2xlYW4ge1xyXG5cdFx0Ly9pZiBjaGFyYWN0ZXIgaXMgbm90IGEgd2hpZXNwYWNlIG9yIGEgZGVsaW1pdGVyXHJcblx0XHR2YXIgbm90V29yZCA9ICcgXFx0XFxuXFxyXFx2JyArIHRoaXMuc2V0dGluZ3Mud29yZERlbGltaXRlcnM7XHJcblx0XHRpZiAobm90V29yZC5pbmRleE9mKGMpIDw9IC0xICkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0U25pcHBldHNXb3JkQXQoY20gOiBDb2RlTWlycm9yLkVkaXRvciwgcG9zOiBDb2RlTWlycm9yLlBvc2l0aW9uKSA6IGFueSB7XHJcblx0XHR2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHN0YXJ0LCBsaW5lID0gY20uZ2V0TGluZShwb3MubGluZSk7XHJcblx0XHR3aGlsZSAoc3RhcnQgJiYgdGhpcy5pc1dvcmQobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7XHJcblx0XHR3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgdGhpcy5pc1dvcmQobGluZS5jaGFyQXQoZW5kKSkpICsrZW5kO1xyXG5cdFx0dmFyIGZyID0ge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9O1xyXG5cdFx0dmFyIHQgPSB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9O1xyXG5cdFx0cmV0dXJuIHtmcm9tOiBmciwgdG86IHQsIHdvcmQ6IGxpbmUuc2xpY2Uoc3RhcnQsIGVuZCl9O1xyXG5cdH1cclxuXHJcblx0Z2V0V29yZEJvdW5kYXJpZXMoZWRpdG9yOiBDb2RlTWlycm9yLkVkaXRvcikge1xyXG5cdFx0dmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuXHRcdHZhciBsaW5lID0gY3Vyc29yLmxpbmU7XHJcblx0XHR2YXIgY2ggPSBjdXJzb3IuY2g7XHJcblxyXG5cdFx0dmFyIHdvcmQgPSB0aGlzLlNuaXBwZXRzV29yZEF0KGVkaXRvciwgY3Vyc29yKTtcclxuXHRcdHZhciB3b3JkU3RhcnQgPSB3b3JkLmZyb20uY2g7XHJcblx0XHR2YXIgd29yZEVuZCA9IHdvcmQudG8uY2g7XHJcblx0XHRcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHN0YXJ0OiB7XHJcblx0XHRcdFx0bGluZTogbGluZSxcclxuXHRcdFx0XHRjaDogd29yZFN0YXJ0XHJcblx0XHRcdH0sXHJcblx0XHRcdGVuZDoge1xyXG5cdFx0XHRcdGxpbmU6IGxpbmUsXHJcblx0XHRcdFx0Y2g6IHdvcmRFbmRcclxuXHRcdFx0fSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmaW5kU25pcHBldChlZGl0b3IgOiBDb2RlTWlycm9yLkVkaXRvciwgY3Vyc29yT3JpZyA6IENvZGVNaXJyb3IuUG9zaXRpb24sIGN1cnNvciA6IENvZGVNaXJyb3IuUG9zaXRpb24pIDogc3RyaW5nIHtcclxuXHRcdHZhciBzZWxlY3RlZFRleHQgPSB0aGlzLmdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xyXG5cdFx0dmFyIHdvcmREZWxpbWl0ZXJzID0gQXJyYXkuZnJvbSh0aGlzLnNldHRpbmdzLndvcmREZWxpbWl0ZXJzKTtcclxuXHRcdHZhciBzZWxlY3RlZFdvU3BhY2VzID0gJycgKyBzZWxlY3RlZFRleHQuc3BsaXQoJyAnKS5qb2luKCcnKTtcclxuXHRcdHZhciBuZXdTdHIgPSBcIlwiO1xyXG5cdFx0Ly8gd2l0aG91dCB0aGlzIGZpbmRzIG5leHQgc3RvcCBldmVyeXdoZXJlIGluIGZpbGVcclxuXHRcdC8vIGlmIChzZWxlY3RlZFdvU3BhY2VzID09ICcnIHx8IChzZWxlY3RlZFdvU3BhY2VzLmxlbmd0aCA+IDAgJiYgd29yZERlbGltaXRlcnMuaW5kZXhPZihzZWxlY3RlZFdvU3BhY2VzWzBdKSA+PSAwICYmIGN1cnNvck9yaWcuY2ggPT0gY3Vyc29yLmNoKSkge1xyXG5cdFx0XHQvLyBlZGl0b3IuZXhlY0NvbW1hbmQoJ2dvV29yZExlZnQnKTtcclxuXHRcdFx0Ly8gZWRpdG9yLmV4ZWNDb21tYW5kKCdnb1dvcmRMZWZ0Jyk7XHJcblx0XHRcdC8vIHNlbGVjdGVkVGV4dCA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KGVkaXRvcik7XHJcblx0XHRcdC8vIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCdmcm9tJyk7XHJcblx0XHQvLyB9XHJcblxyXG5cdFx0dmFyIGk7XHJcblx0XHR2YXIgc25pcHBldHMgPSAgdGhpcy5zZXR0aW5ncy5zbmlwcGV0cztcclxuXHRcdGZvciAoaSBpbiBzbmlwcGV0cyl7XHJcblx0XHRcdHZhciBzbmlwcGV0ID0gc25pcHBldHNbaV0uc3BsaXQoJyA6ICcpO1xyXG5cclxuXHRcdFx0aWYgKHNlbGVjdGVkVGV4dCA9PSBzbmlwcGV0WzBdKSB7XHJcblx0XHRcdFx0bmV3U3RyID0gc25pcHBldFsxXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5ld1N0cjtcclxuXHR9XHJcblxyXG5cdGNhbGN1bGF0ZUN1cnNvckVuZFBvcyhuU3RyIDogc3RyaW5nLCBjdXJzb3IgOiBDb2RlTWlycm9yLlBvc2l0aW9uLCBlbmRQb3NpdGlvbiA6IGFueSk6IHN0cmluZyB7XHJcblx0XHR2YXIgbmxTeW1iID0gdGhpcy5zZXR0aW5ncy5uZXdsaW5lU3ltYm9sO1xyXG5cdFx0dmFyIGVuZFN5bWJvbCA9IHRoaXMuc2V0dGluZ3MuZW5kU3ltYm9sO1xyXG5cdFx0dmFyIHN0b3BTeW1ib2wgPSB0aGlzLnNldHRpbmdzLnN0b3BTeW1ib2w7XHJcblx0XHR2YXIgbmV3U3RyID0gblN0ci5zcGxpdCgnXFxuJykuam9pbignJyk7XHJcblxyXG5cdFx0aWYgKG5ld1N0ci5pbmRleE9mKHN0b3BTeW1ib2wpID09IC0xKSB7XHJcblx0XHRcdHZhciByYXdFbmQgPSBuZXdTdHIuaW5kZXhPZihlbmRTeW1ib2wpO1xyXG5cdFx0XHRpZiAocmF3RW5kID09IC0xKVx0cmF3RW5kID0gbmV3U3RyLmxlbmd0aDtcclxuXHRcdFx0XHJcblx0XHRcdHZhciBsYXN0TmwgPSBuZXdTdHIuc3Vic3RyaW5nKDAsIHJhd0VuZCkubGFzdEluZGV4T2YobmxTeW1iKTtcclxuXHRcdFx0aWYgKGxhc3RObCAhPSAtMSlcdHZhciBlbmRQb3NJbmRleCA9IHJhd0VuZCAtIGxhc3RObCAtIG5sU3ltYi5sZW5ndGggLSBjdXJzb3IuY2g7XHJcblx0XHRcdGVsc2UgXHRcdFx0XHR2YXIgZW5kUG9zSW5kZXggPSByYXdFbmQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR2YXIgZW5kUG9zSW5kZXggPSAwO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRubFN5bWIgPSBubFN5bWIucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcdC8vbm8gc3BlY2lhbCBzeW1ib2xzIGluIG5sU3ltYlxyXG5cdFx0dmFyIHJnID0gbmxTeW1iICsgJ1xcXFxuJyArICd8JyArIG5sU3ltYjtcclxuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZyk7XHJcblx0XHRjb25zdCByZWdleEYgPSBuZXcgUmVnRXhwKHJnLCAnZycpO1xyXG5cdFx0dmFyIG5saW5lc0NvdW50ID0gKG5ld1N0ci5zdWJzdHJpbmcoMCwgcmF3RW5kKS5tYXRjaChyZWdleEYpIHx8IFtdKS5sZW5ndGg7XHJcblxyXG5cdFx0ZW5kUG9zaXRpb24ubmxpbmVzQ291bnQgPSBubGluZXNDb3VudDtcclxuXHRcdGVuZFBvc2l0aW9uLnBvc2l0aW9uID0gZW5kUG9zSW5kZXg7XHJcblxyXG5cdFx0bmV3U3RyID0gbmV3U3RyLnNwbGl0KHJlZ2V4KS5qb2luKCdcXG4nKTtcclxuXHRcdG5ld1N0ciA9IG5ld1N0ci5yZXBsYWNlKGVuZFN5bWJvbCwnJyk7XHJcblx0XHRyZXR1cm4gbmV3U3RyO1xyXG5cdH1cclxuXHJcblxyXG5cdGluc2VydFNuaXBwZXQoa2V5IDogc3RyaW5nID0gJycsIHNuaXBwZXRTdGFydHBvcyA6IENvZGVNaXJyb3IuUG9zaXRpb24gPSB7Y2g6LTEsIGxpbmU6LTF9KTogYm9vbGVhbiB7XHJcblx0XHRsZXQgYWN0aXZlTGVhZjogYW55ID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUxlYWY7XHJcblx0XHRsZXQgZWRpdG9yID0gYWN0aXZlTGVhZi52aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XHJcblx0XHQvLyBsZXQgZWRpdG9yID0gYWN0aXZlTGVhZi52aWV3LmVkaXRvcjtcclxuXHRcdHZhciBjdXJzb3JPcmlnID0gZWRpdG9yLmdldEN1cnNvcigpO1xyXG5cdFx0dmFyIHdhc1NlbGVjdGlvbiA9IGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpO1xyXG5cdFx0dmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoJ2Zyb20nKTtcclxuXHRcdHZhciB3b3JkQm91bmRhcmllcztcclxuXHRcdGlmKHdhc1NlbGVjdGlvbikge1xyXG5cdFx0XHR3b3JkQm91bmRhcmllcyA9IHtzdGFydDogY3Vyc29yLCBlbmQ6IGVkaXRvci5nZXRDdXJzb3IoJ3RvJyl9O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0d29yZEJvdW5kYXJpZXMgPSB0aGlzLmdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcik7XHJcblx0XHR9XHJcblx0XHR2YXIgc3RvcFN5bWJvbCA9IHRoaXMuc2V0dGluZ3Muc3RvcFN5bWJvbDtcclxuXHRcdHZhciBwYXN0ZVN5bWJvbCA9IHRoaXMuc2V0dGluZ3MucGFzdGVTeW1ib2w7XHJcblx0XHR2YXIgc3RvcEZvdW5kID0gZmFsc2U7XHJcblx0XHR2YXIgbmV3U3RyID0gXCJcIjtcclxuXHJcblx0XHRuZXdTdHIgPSB0aGlzLmZpbmRTbmlwcGV0KGVkaXRvciwgY3Vyc29yT3JpZywgY3Vyc29yKTtcclxuXHRcdGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoJ2Zyb20nKTtcclxuXHJcblx0XHQvL3Byb2NlZWQgVGFiIGFuZCBTcGFjZWJhclxyXG5cdFx0dmFyIGVuZEN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoJ3RvJyk7XHJcblx0XHRpZiAobmV3U3RyID09IFwiXCIgfHwgXHJcblx0XHRcdChrZXkgPT0gJ1NwYWNlJyAmJiAoY3Vyc29yT3JpZy5jaCAhPSBlbmRDdXJzb3IuY2ggfHwgY3Vyc29yT3JpZy5saW5lICE9IGVuZEN1cnNvci5saW5lKSkgKSAge1xyXG5cdFx0XHRpZiAod2FzU2VsZWN0aW9uID09IGZhbHNlKSB7XHJcblx0XHRcdFx0ZWRpdG9yLmdldERvYygpLnNldFNlbGVjdGlvbihjdXJzb3JPcmlnLCBjdXJzb3JPcmlnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoa2V5ID09ICdTcGFjZScpXHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdGlmIChuZXdTdHIgPT0gXCJcIikge1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoY3Vyc29yT3JpZyk7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubmV4dFN0b3AoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vZmluZCBlbmQgcG9zaXRpb25cclxuXHRcdHZhciBlbmRQb3NpdGlvbiA9IHtubGluZXNDb3VudDogMCwgcG9zaXRpb246IDB9O1xyXG5cdFx0bmV3U3RyID0gdGhpcy5jYWxjdWxhdGVDdXJzb3JFbmRQb3MobmV3U3RyLCBjdXJzb3IsIGVuZFBvc2l0aW9uKTtcclxuXHRcdGlmIChuZXdTdHIuaW5kZXhPZihzdG9wU3ltYm9sKSAhPSAtMSlcdHN0b3BGb3VuZCA9IHRydWU7XHJcblx0XHRpZiAobmV3U3RyLmluZGV4T2YocGFzdGVTeW1ib2wpICE9IC0xKVx0c25pcHBldFN0YXJ0cG9zID0gY3Vyc29yO1xyXG5cclxuXHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKG5ld1N0cik7XHJcblxyXG5cclxuXHRcdGlmIChzdG9wRm91bmQpIHtcclxuXHRcdFx0ZWRpdG9yLnNldEN1cnNvcih7XHJcblx0XHRcdFx0bGluZTogY3Vyc29yLmxpbmUsXHJcblx0XHRcdFx0Y2g6IGN1cnNvci5jaFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLm5leHRTdG9wKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKHtcclxuXHRcdFx0XHRsaW5lOiBjdXJzb3IubGluZSArIGVuZFBvc2l0aW9uLm5saW5lc0NvdW50LFxyXG5cdFx0XHRcdGNoOiBjdXJzb3IuY2ggKyBlbmRQb3NpdGlvbi5wb3NpdGlvblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRlZGl0b3IuZm9jdXMoKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0YWRqdXN0Q3Vyc29yKGVkaXRvcjogQ29kZU1pcnJvci5FZGl0b3IsIGN1cnNvcjogQ29kZU1pcnJvci5Qb3NpdGlvbiwgbmV3U3RyOiBzdHJpbmcsIG9sZFN0cjogc3RyaW5nKSB7XHJcblx0XHR2YXIgY3Vyc29yT2Zmc2V0ID0gbmV3U3RyLmxlbmd0aCAtIG9sZFN0ci5sZW5ndGg7XHJcblx0XHR0aGlzLmFkanVzdEN1cnNvck9mZnNldChlZGl0b3IsIGN1cnNvciwgY3Vyc29yT2Zmc2V0KTtcclxuXHR9XHJcblxyXG5cdGFkanVzdEN1cnNvck9mZnNldChlZGl0b3I6IENvZGVNaXJyb3IuRWRpdG9yLCBjdXJzb3I6IENvZGVNaXJyb3IuUG9zaXRpb24sIGN1cnNvck9mZnNldDogYW55KSB7XHJcblx0XHRlZGl0b3Iuc2V0Q3Vyc29yKHtcclxuXHRcdFx0bGluZTogY3Vyc29yLmxpbmUsXHJcblx0XHRcdGNoOiBjdXJzb3IuY2ggKyBjdXJzb3JPZmZzZXRcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlS2V5RG93biAoY206IENvZGVNaXJyb3IuRWRpdG9yLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0aWYgKChldmVudC5rZXkgPT0gJ1RhYicgJiYgdGhpcy5zZXR0aW5ncy51c2VUYWIpIHx8IChldmVudC5jb2RlID09ICdTcGFjZScgJiYgdGhpcy5zZXR0aW5ncy51c2VTcGFjZSkpIHtcclxuXHRcdFx0dGhpcy5TbmlwcGV0T25UcmlnZ2VyKGV2ZW50LmNvZGUsIHRydWUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0U25pcHBldE9uVHJpZ2dlcihrZXkgOiBzdHJpbmcgPSAnJywgcHJldmVudERlZjogYm9vbGVhbj1mYWxzZSk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IGFjdGl2ZUxlYWY6IGFueSA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmO1xyXG5cdFx0bGV0IGNtID0gYWN0aXZlTGVhZi52aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XHJcblx0XHR2YXIgY3Vyc29yU3QgPSBjbS5nZXRDdXJzb3IoKTtcclxuXHRcdGlmICh0aGlzLmluc2VydFNuaXBwZXQoa2V5LCBjdXJzb3JTdCkpIHtcclxuXHJcblx0XHRcdGlmIChwcmV2ZW50RGVmKSB7XHJcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgJiYga2V5ID09ICdUYWInKXtcclxuXHRcdFx0XHRcdC8vIGRlbGV0ZSAnXFx0JyBpbiBMaXZlIHByZXZpZXdcclxuXHRcdFx0XHRcdHZhciBzZWFyY2ggPSBjbS5zZWFyY2hDdXJzb3IoJ1xcdCcsIGN1cnNvclN0KTtcclxuXHRcdFx0XHRcdGlmIChzZWFyY2guZmluZFByZXZpb3VzKCkpIHtcclxuXHRcdFx0XHRcdFx0c2VhcmNoLnJlcGxhY2UoJycpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0aWYgKGN1cnNvclN0LmNoID49MCAmJiBjdXJzb3JTdC5saW5lID49IDApIHtcdFx0Ly9wYXN0ZSB0ZXh0IGZyb20gY2xpcGJvYXJkXHJcblx0XHRcdFx0dmFyIGN1cnNvck9yaWcgPSBjbS5nZXRDdXJzb3IoKTtcclxuXHRcdFx0XHRuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KCkudGhlbihcclxuXHRcdFx0XHRcdChjbGlwVGV4dCkgPT4ge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VhcmNoID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHRoaXMuc2V0dGluZ3MucGFzdGVTeW1ib2wsIGN1cnNvclN0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VhcmNoID0gY20uc2VhcmNoQ3Vyc29yKHRoaXMuc2V0dGluZ3MucGFzdGVTeW1ib2wsIGN1cnNvclN0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoc2VhcmNoLmZpbmROZXh0KCkpIHtcclxuXHRcdFx0XHRcdFx0XHRzZWFyY2gucmVwbGFjZShjbGlwVGV4dCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMubmV4dFN0b3AoKTtcclxuXHR9XHJcblxyXG5cdG5leHRTdG9wKCk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IGFjdGl2ZUxlYWY6IGFueSA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmO1xyXG5cdFx0bGV0IGNtID0gYWN0aXZlTGVhZi52aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XHJcblxyXG5cdFx0aWYodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgPT0gZmFsc2UpIHtcclxuXHRcdFx0dmFyIHNlYXJjaCA9IGNtLmdldFNlYXJjaEN1cnNvcih0aGlzLnNldHRpbmdzLnN0b3BTeW1ib2wsIGNtLmdldEN1cnNvcigpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhciBzZWFyY2ggPSBjbS5zZWFyY2hDdXJzb3IodGhpcy5zZXR0aW5ncy5zdG9wU3ltYm9sLCBjbS5nZXRDdXJzb3IoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHNlYXJjaC5maW5kTmV4dCgpKSB7XHJcblx0XHRcdHNlYXJjaC5yZXBsYWNlKFwiXCIpO1xyXG5cclxuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5pc1dZU0lXWUcgPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRjbS5zZXRDdXJzb3Ioc2VhcmNoLmZyb20oKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y20uc2V0Q3Vyc29yKHNlYXJjaC5jdXJyZW50KCkuZnJvbSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudXNlVGFiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuXHJcbmludGVyZmFjZSBUZXh0U25pcHBldHNTZXR0aW5ncyB7XHJcblx0c25pcHBldHNfZmlsZTogc3RyaW5nO1xyXG5cdHNuaXBwZXRzOiBzdHJpbmdbXTtcclxuXHRlbmRTeW1ib2w6IHN0cmluZztcclxuXHRuZXdsaW5lU3ltYm9sOiBzdHJpbmc7XHJcblx0c3RvcFN5bWJvbDogc3RyaW5nO1xyXG5cdHBhc3RlU3ltYm9sOiBzdHJpbmc7XHJcblx0dXNlVGFiOiBib29sZWFuO1xyXG5cdHVzZVNwYWNlOiBib29sZWFuO1xyXG5cdHdvcmREZWxpbWl0ZXJzOiBzdHJpbmc7XHJcblx0aXNXWVNJV1lHOiBib29sZWFuO1xyXG5cclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogVGV4dFNuaXBwZXRzU2V0dGluZ3MgPSB7XHJcblx0c25pcHBldHNfZmlsZTogXCJzbmlwcGV0cyA6IEl0IGlzIGFuIG9ic2lkaWFuIHBsdWdpbiwgdGhhdCByZXBsYWNlcyB5b3VyIHNlbGVjdGVkIHRleHQuXCIsXHJcblx0c25pcHBldHMgOiBbXCJzbmlwcGV0cyA6IEl0IGlzIGFuIG9ic2lkaWFuIHBsdWdpbiwgdGhhdCByZXBsYWNlcyB5b3VyIHNlbGVjdGVkIHRleHQuXCJdLFxyXG5cdGVuZFN5bWJvbDogJyRlbmQkJyxcclxuXHRuZXdsaW5lU3ltYm9sOiAnJG5sJCcsXHJcblx0c3RvcFN5bWJvbDogXCIkdGIkXCIsXHJcblx0cGFzdGVTeW1ib2w6IFwiJHBzdCRcIixcclxuXHR1c2VUYWI6IHRydWUsXHJcblx0dXNlU3BhY2U6IGZhbHNlLFxyXG5cdHdvcmREZWxpbWl0ZXJzOiBcIiQoKVtde308PiwuIT87OlxcJ1xcXCJcXFxcL1wiLFxyXG5cdGlzV1lTSVdZRzogZmFsc2UsXHJcbn1cclxuXHJcbmNsYXNzIFRleHRTbmlwcGV0c1NldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblx0cGx1Z2luOiBUZXh0U25pcHBldHM7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFRleHRTbmlwcGV0cykge1xyXG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0bGV0IHtcclxuXHRcdFx0Y29udGFpbmVyRWxcclxuXHRcdH0gPSB0aGlzO1xyXG5cclxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7dGV4dDogJ1RleHQgU25pcHBldHMgLSBTZXR0aW5ncyd9KTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdC5zZXROYW1lKFwiU25pcHBldHNcIilcclxuXHRcdC5zZXREZXNjKFwiVHlwZSBoZXJlIHlvdXIgc25pcHBldHMgaW4gZm9ybWF0ICdzbmlwcGV0IDogcmVzdWx0Jywgb25lIHBlciBsaW5lLiBFbXB0eSBsaW5lcyB3aWxsIGJlIGlnbm9yZWQuIEN0cmwrVGFiIHRvIHJlcGxhY2UgKGhvdGtleSBjYW4gYmUgY2hhbmdlZCkuXCIpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWNsYXNzXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+XHJcblx0XHRcdHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiYmVmb3JlIDogYWZ0ZXJcIilcclxuXHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNuaXBwZXRzX2ZpbGUpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zbmlwcGV0c19maWxlID0gdmFsdWU7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uVXBkYXRlU3BsaXQodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3bGluZVN5bWJvbCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIkN1cnNvciBlbmQgcG9zaXRpb24gbWFya1wiKVxyXG5cdFx0LnNldERlc2MoXCJQbGFjZXMgdGhlIGN1cnNvciB0byB0aGUgbWFyayBwb3NpdGlvbiBhZnRlciBpbnNlcnRpbmcgYSBzbmlwcGV0IChkZWZhdWx0OiAkZW5kJCkuXFxuTWFyayBkb2VzIG5vdCBhcHBlYXIgYW55d2hlcmUgd2l0aGluIHRoZSBzbmlwcGV0LiBEbyBub3QgdXNlIHRvZ2V0aGVyIHdpdGggU3RvcCBTeW1ib2wuXCIpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWN1cnNvclwiKVxyXG5cdFx0LmFkZFRleHRBcmVhKCh0ZXh0KSA9PlxyXG5cdFx0XHR0ZXh0XHJcblx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIiRlbmQkXCIpXHJcblx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmRTeW1ib2wpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUgPT0gJycpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gJyRlbmQkJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5kU3ltYm9sID0gdmFsdWU7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIk5ld2xpbmUgbWFya1wiKVxyXG5cdFx0LnNldERlc2MoXCJJZ25vcmVzIG5ld2xpbmUgYWZ0ZXIgbWFyaywgcmVwbGFjZSBpdCB3aXRoIGEgbmV3bGluZSBjaGFyYWN0ZXIgYWZ0ZXIgZXhwYW5kaW5nIChkZWZhdWx0OiAkbmwkKS5cXG5OZWNlc3NhcnkgdG8gd3JpdGUgYmVmb3JlIGV2ZXJ5IGxpbmUgYnJlYWsgaW4gbXVsdGlsaW5lIHNuaXBwZXRzLlwiKVxyXG5cdFx0LnNldENsYXNzKFwidGV4dC1zbmlwcGV0cy1uZXdsaW5lXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+XHJcblx0XHRcdHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiJG5sJFwiKVxyXG5cdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3bGluZVN5bWJvbClcclxuXHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PSAnJykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSAnJG5sJCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld2xpbmVTeW1ib2wgPSB2YWx1ZTtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5VcGRhdGVTcGxpdCh2YWx1ZSk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZSgnU3RvcCBTeW1ib2wnKVxyXG5cdFx0LnNldERlc2MoJ1N5bWJvbCB0byBqdW1wIHRvIHdoZW4gY29tbWFuZCBpcyBjYWxsZWQuJylcclxuXHRcdC5zZXRDbGFzcyhcInRleHQtc25pcHBldHMtdGFic3RvcHNcIilcclxuXHRcdC5hZGRUZXh0QXJlYSgodGV4dCkgPT4gdGV4dFxyXG5cdFx0XHQuc2V0UGxhY2Vob2xkZXIoJycpXHJcblx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zdG9wU3ltYm9sKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlID09JycpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gJyR0YiQnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zdG9wU3ltYm9sID0gdmFsdWU7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoJ0NsaXBib2FyZCBwYXN0ZSBTeW1ib2wnKVxyXG5cdFx0LnNldERlc2MoJ1N5bWJvbCB0byBiZSByZXBsYWNlZCB3aXRoIGNsaXBib2FyZCBjb250ZW50LicpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLXRhYnN0b3BzXCIpXHJcblx0XHQuYWRkVGV4dEFyZWEoKHRleHQpID0+IHRleHRcclxuXHRcdFx0LnNldFBsYWNlaG9sZGVyKCcnKVxyXG5cdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucGFzdGVTeW1ib2wpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUgPT0nJykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSAnJHBzdCQnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXN0ZVN5bWJvbCA9IHZhbHVlO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoXCJFeHBhbmQgb24gVGFiXCIpXHJcblx0XHQuc2V0RGVzYyhcIlVzZSB0aGUgVGFiIGtleSBhcyB0aGUgdHJpZ2dlci5cIilcclxuXHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+XHJcblx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VUYWIpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VUYWIgPSAhdGhpcy5wbHVnaW4uc2V0dGluZ3MudXNlVGFiO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHQuc2V0TmFtZShcIkV4cGFuZCBvbiBTcGFjZVwiKVxyXG5cdFx0LnNldERlc2MoXCJVc2UgdGhlIFNwYWNlIGJhciBidXR0b24gYXMgdGhlIHRyaWdnZXIuXCIpXHJcblx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PlxyXG5cdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudXNlU3BhY2UpXHJcblx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VTcGFjZSA9ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VTcGFjZTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0LnNldE5hbWUoXCJMaXZlIFByZXZpZXcgTW9kZVwiKVxyXG5cdFx0LnNldERlc2MoXCJUb2dnbGUgbWFudWFsbHkgaWYgbm90IGNvcnJlY3QuIFlvdSBzaG91bGQgcmVzdGFydCBwbHVnaW4gYWZ0ZXIgY2hhbmdpbmcgdGhpcyBvcHRpb24uXCIpXHJcblx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PlxyXG5cdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNXWVNJV1lHKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNXWVNJV1lHID0gIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzV1lTSVdZRztcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdC5zZXROYW1lKCdXb3JkIGRlbGltaXRlcnMnKVxyXG5cdFx0LnNldERlc2MoJ9ChaGFyYWN0ZXJzIGZvciBzcGVjaWZ5aW5nIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHNlcGFyYXRlIHdvcmRzLicpXHJcblx0XHQuc2V0Q2xhc3MoXCJ0ZXh0LXNuaXBwZXRzLWRlbGltaXRlclwiKVxyXG5cdFx0LmFkZFRleHRBcmVhKCh0ZXh0KSA9PiB0ZXh0XHJcblx0XHRcdC5zZXRQbGFjZWhvbGRlcignJylcclxuXHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLndvcmREZWxpbWl0ZXJzKVxyXG5cdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Mud29yZERlbGltaXRlcnMgPSB2YWx1ZTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHJcblx0fVxyXG59XHJcbiJdLCJuYW1lcyI6WyJQbHVnaW4iLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFT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 diff --git a/main.ts b/main.ts index 05c8d99..579912e 100755 --- a/main.ts +++ b/main.ts @@ -2,7 +2,7 @@ import { App, Editor, MarkdownView, - Notice, + // Notice, Plugin, PluginSettingTab, Setting, @@ -124,15 +124,15 @@ export default class TextSnippets extends Plugin { findSnippet(editor : CodeMirror.Editor, cursorOrig : CodeMirror.Position, cursor : CodeMirror.Position) : string { var selectedText = this.getSelectedText(editor); var wordDelimiters = Array.from(this.settings.wordDelimiters); - var selectedWoSpaces = selectedText.split(' ').join(''); + var selectedWoSpaces = '' + selectedText.split(' ').join(''); var newStr = ""; - - if (selectedWoSpaces == '' || wordDelimiters.indexOf(selectedWoSpaces[0]) >= 0 && cursorOrig.ch == cursor.ch) { - editor.execCommand('goWordLeft'); - editor.execCommand('goWordLeft'); - selectedText = this.getSelectedText(editor); - var cursor = editor.getCursor('from'); - } + // without this finds next stop everywhere in file + // if (selectedWoSpaces == '' || (selectedWoSpaces.length > 0 && wordDelimiters.indexOf(selectedWoSpaces[0]) >= 0 && cursorOrig.ch == cursor.ch)) { + // editor.execCommand('goWordLeft'); + // editor.execCommand('goWordLeft'); + // selectedText = this.getSelectedText(editor); + // var cursor = editor.getCursor('from'); + // } var i; var snippets = this.settings.snippets; @@ -180,7 +180,6 @@ export default class TextSnippets extends Plugin { insertSnippet(key : string = '', snippetStartpos : CodeMirror.Position = {ch:-1, line:-1}): boolean { - // new Notice('insert snippet'); let activeLeaf: any = this.app.workspace.activeLeaf; let editor = activeLeaf.view.sourceMode.cmEditor; // let editor = activeLeaf.view.editor; @@ -207,13 +206,12 @@ export default class TextSnippets extends Plugin { (key == 'Space' && (cursorOrig.ch != endCursor.ch || cursorOrig.line != endCursor.line)) ) { if (wasSelection == false) { editor.getDoc().setSelection(cursorOrig, cursorOrig); - // new Notice('replace'); } if (key == 'Space') return false; if (newStr == "") { editor.setCursor(cursorOrig); return this.nextStop(); - } + } } //find end position @@ -223,7 +221,7 @@ export default class TextSnippets extends Plugin { if (newStr.indexOf(pasteSymbol) != -1) snippetStartpos = cursor; editor.replaceSelection(newStr); - // new Notice('replaced?'); + if (stopFound) { editor.setCursor({ @@ -255,8 +253,7 @@ export default class TextSnippets extends Plugin { }); } - handleKeyDown (cm: CodeMirror.Editor, event: KeyboardEvent): void { - // new Notice(event.key); + handleKeyDown (cm: CodeMirror.Editor, event: KeyboardEvent): void { if ((event.key == 'Tab' && this.settings.useTab) || (event.code == 'Space' && this.settings.useSpace)) { this.SnippetOnTrigger(event.code, true); } @@ -278,7 +275,6 @@ export default class TextSnippets extends Plugin { } } } - if (cursorSt.ch >=0 && cursorSt.line >= 0) { //paste text from clipboard var cursorOrig = cm.getCursor(); @@ -297,7 +293,7 @@ export default class TextSnippets extends Plugin { } return true; } - return false; + return this.nextStop(); } nextStop(): boolean { diff --git a/manifest.json b/manifest.json index dc901c4..cad731c 100755 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,8 @@ { "id": "text-snippets-obsidian", "name": "Text Snippets", - "description": "Allows you to replace text templates for faster typing, create your own.", - "version": "0.1.0", + "description": "Allows you to replace text templates for faster typing, create your own, expand text shortcuts.", + "version": "0.1.1", "author": "Ariana Khitrova", "authorUrl": "", "isDesktopOnly": true, diff --git a/package.json b/package.json index 831c314..bab11ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "text-snippets-obsidian", - "version": "0.0.6", + "version": "0.1.1", "description": "Plugin for using snippets for for faster typing", "main": "main.js", "scripts": {