iobroker.admin 7.4.0 → 7.4.1

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.
Files changed (41) hide show
  1. package/README.md +107 -108
  2. package/adminWww/asset-manifest.json +21 -21
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/js/{1193.99579f17.chunk.js → 1193.f78c91c7.chunk.js} +2 -2
  5. package/adminWww/static/js/1193.f78c91c7.chunk.js.map +1 -0
  6. package/adminWww/static/js/288.8fd137b7.chunk.js.map +1 -1
  7. package/adminWww/static/js/4720.f547d551.chunk.js +2 -0
  8. package/adminWww/static/js/4720.f547d551.chunk.js.map +1 -0
  9. package/adminWww/static/js/5139.bc9ec1cd.chunk.js.LICENSE.txt +1 -1
  10. package/adminWww/static/js/591.675e66af.chunk.js +2 -0
  11. package/adminWww/static/js/{591.1a92eff9.chunk.js.map → 591.675e66af.chunk.js.map} +1 -1
  12. package/adminWww/static/js/{6853.398f32f8.chunk.js → 6853.be661c6e.chunk.js} +2 -2
  13. package/adminWww/static/js/6853.be661c6e.chunk.js.map +1 -0
  14. package/adminWww/static/js/{422.897485de.chunk.js → 706.20143240.chunk.js} +2 -2
  15. package/adminWww/static/js/706.20143240.chunk.js.map +1 -0
  16. package/adminWww/static/js/{7931.38a8acbc.chunk.js → 7931.5fd9faf0.chunk.js} +3 -3
  17. package/adminWww/static/js/7931.5fd9faf0.chunk.js.map +1 -0
  18. package/adminWww/static/js/921.f7fc8142.chunk.js +3 -0
  19. package/adminWww/static/js/921.f7fc8142.chunk.js.map +1 -0
  20. package/adminWww/static/js/{9228.4d6ceaef.chunk.js → 9228.e34a369b.chunk.js} +4 -4
  21. package/adminWww/static/js/9228.e34a369b.chunk.js.map +1 -0
  22. package/adminWww/static/js/{9731.81eb2531.chunk.js → 9731.49fa7804.chunk.js} +3 -3
  23. package/adminWww/static/js/{9731.81eb2531.chunk.js.map → 9731.49fa7804.chunk.js.map} +1 -1
  24. package/adminWww/static/js/{main.580afe3b.js → main.d185596b.js} +2 -2
  25. package/adminWww/static/js/{main.580afe3b.js.map → main.d185596b.js.map} +1 -1
  26. package/io-package.json +14 -14
  27. package/package.json +4 -4
  28. package/adminWww/static/js/1193.99579f17.chunk.js.map +0 -1
  29. package/adminWww/static/js/422.897485de.chunk.js.map +0 -1
  30. package/adminWww/static/js/4720.a3767f97.chunk.js +0 -2
  31. package/adminWww/static/js/4720.a3767f97.chunk.js.map +0 -1
  32. package/adminWww/static/js/591.1a92eff9.chunk.js +0 -2
  33. package/adminWww/static/js/6853.398f32f8.chunk.js.map +0 -1
  34. package/adminWww/static/js/7931.38a8acbc.chunk.js.map +0 -1
  35. package/adminWww/static/js/921.aa5491a4.chunk.js +0 -3
  36. package/adminWww/static/js/921.aa5491a4.chunk.js.map +0 -1
  37. package/adminWww/static/js/9228.4d6ceaef.chunk.js.map +0 -1
  38. /package/adminWww/static/js/{7931.38a8acbc.chunk.js.LICENSE.txt → 7931.5fd9faf0.chunk.js.LICENSE.txt} +0 -0
  39. /package/adminWww/static/js/{921.aa5491a4.chunk.js.LICENSE.txt → 921.f7fc8142.chunk.js.LICENSE.txt} +0 -0
  40. /package/adminWww/static/js/{9228.4d6ceaef.chunk.js.LICENSE.txt → 9228.e34a369b.chunk.js.LICENSE.txt} +0 -0
  41. /package/adminWww/static/js/{9731.81eb2531.chunk.js.LICENSE.txt → 9731.49fa7804.chunk.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/921.aa5491a4.chunk.js","mappings":"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,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,GAAI,GAAI,EAAG,GAAI,KAAM,IAAK,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG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","sources":["../../../../node_modules/ace-builds/src-noconflict/ace.js","../../../../node_modules/ace-builds/src-noconflict/ext-split.js","../../../../node_modules/diff-match-patch/index.js","../../../../node_modules/lodash.get/index.js","../../../../node_modules/lodash.isequal/index.js","../../../../node_modules/react-ace/src/ace.tsx","../../../../node_modules/react-ace/src/diff.tsx","../../../../node_modules/react-ace/src/editorOptions.ts","../../../../node_modules/react-ace/src/index.ts","../../../../node_modules/react-ace/src/split.tsx"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n};\nexports.deferredCall = function (fcn) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var deferred = function (timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n deferred.schedule = deferred;\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n deferred.isPending = function () {\n return timer;\n };\n return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var _self = function (timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n _self.call = function () {\n this.cancel();\n fcn();\n };\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n _self.isPending = function () {\n return timer;\n };\n return _self;\n};\nexports.supportsLookbehind = function () {\n try {\n new RegExp('(?<=.)');\n }\n catch (e) {\n return false;\n }\n return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in the provided messages, trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.36.2\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n }\n Range.prototype.isEqual = function (range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n Range.prototype.toString = function () {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, /**@type{any?}*/ destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput;\nTextInput = function (parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", \"false\");\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile)\n text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n var rowStart = Number.MAX_SAFE_INTEGER;\n var rowEnd = Number.MIN_SAFE_INTEGER;\n var numberOfExtraLines = 0;\n try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setNumberOfExtraLines = function (number) {\n rowStart = Number.MAX_SAFE_INTEGER;\n rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n numberOfExtraLines = 0;\n return;\n }\n numberOfExtraLines = number;\n };\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n text.setAttribute(\"aria-haspopup\", \"false\");\n text.setAttribute(\"aria-autocomplete\", \"both\");\n text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n var arialLabel = \"\";\n if (host.$textInputAriaLabel) {\n arialLabel += \"\".concat(host.$textInputAriaLabel, \", \");\n }\n if (host.session) {\n var row = host.session.selection.cursor.row;\n arialLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n text.setAttribute(\"aria-label\", arialLabel);\n }\n };\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents)\n return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents)\n return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) { }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\n this.setAriaOptions({\n setLabel: host.renderer.enableKeyboardAccessibility\n });\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - rowStart && i < 2 * numberOfExtraLines + 1; i++) {\n selection += host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n var resetSelection = isIOS\n ? function (value) {\n if (!isFocused || (copied && !value) || sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function () {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === rowEnd + 1) {\n rowStart = rowEnd + 1;\n rowEnd = rowStart + 2 * numberOfExtraLines;\n }\n else if (row === rowStart - 1) {\n rowEnd = rowStart - 1;\n rowStart = rowEnd - 2 * numberOfExtraLines;\n }\n else if (row < rowStart - 1 || row > rowEnd + 1) {\n rowStart = row > numberOfExtraLines ? row - numberOfExtraLines : 0;\n rowEnd = row > numberOfExtraLines ? row + numberOfExtraLines : 2 * numberOfExtraLines;\n }\n var lines = [];\n for (var i = rowStart; i <= rowEnd; i++) {\n lines.push(host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < rowStart) {\n var prevLine = host.session.getLine(rowStart - 1);\n selectionStart = range.start.row < rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > rowEnd) {\n var nextLine = host.session.getLine(rowEnd + 1);\n selectionEnd = range.end.row > rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (lastSelectionEnd != selectionEnd\n || lastSelectionStart != selectionStart\n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n catch (e) { }\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused)\n host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n var onSelect = function (e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n }\n else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) { inputHandler = cb; };\n this.getInputHandler = function () { return inputHandler; };\n var afterContextMenu = false;\n var sendText = function (value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n }\n else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n }\n else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function (e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100\n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n }\n else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, function (e, hashId, keyCode) {\n if (inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n if (commandMode)\n return;\n if (e.data)\n inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly)\n return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e)\n onInput();\n };\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n this.getElement = function () {\n return text;\n };\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n this.setReadOnly = function (readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n this.setCopyWithEmptySelection = function (value) {\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n var move = function (e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < lastSelectionStart\n || (selectionStart == lastSelectionStart\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > lastSelectionEnd\n || (selectionEnd == lastSelectionEnd\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n this.destroy = function () {\n if (text.parentElement)\n text.parentElement.removeChild(text);\n };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar lang = require(\"../lib/lang\");\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n editor.on(\"input\", hideTooltip);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor) {\n var _this = _super.call(this, editor.container) || this;\n _this.editor = editor;\n return _this;\n }\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hide();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '</') {\n depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '</') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n }\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n if (!options.regExp) {\n replacement = replacement.replace(/\\$/g, \"$$$$\");\n }\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!this.canExecute(command, editor)) {\n return false;\n }\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (index) {\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/line_widgets\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) { this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n Editor.prototype.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n Editor.prototype.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n Editor.prototype.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n Editor.prototype.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n Editor.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n Editor.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n Editor.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n Editor.prototype.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n Editor.prototype.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\")\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n forced-color-adjust: none;\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_keyboard-focus:focus {\\n box-shadow: inset 0 0 0 2px #5E9ED6;\\n outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: '';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n margin-left: -19px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: royalblue;\\n}\\n.ace_icon_svg.ace_hint {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg==\\\");\\n background-color: silver;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(60em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Split;\nSplit = function (container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n this.on(\"focus\", function (editor) {\n this.$cEditor = editor;\n }.bind(this));\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$createEditor = function () {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n editor.on(\"focus\", function () {\n this._emit(\"focus\", editor);\n }.bind(this));\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n this.setSplits = function (splits) {\n var editor;\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n if (splits == this.$splits) {\n return;\n }\n else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits++;\n }\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits++;\n }\n }\n else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits--;\n }\n }\n this.resize();\n };\n this.getSplits = function () {\n return this.$splits;\n };\n this.getEditor = function (idx) {\n return this.$editors[idx];\n };\n this.getCurrentEditor = function () {\n return this.$cEditor;\n };\n this.focus = function () {\n this.$cEditor.focus();\n };\n this.blur = function () {\n this.$cEditor.blur();\n };\n this.setTheme = function (theme) {\n this.$editors.forEach(function (editor) {\n editor.setTheme(theme);\n });\n };\n this.setKeyboardHandler = function (keybinding) {\n this.$editors.forEach(function (editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n this.forEach = function (callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n this.$fontSize = \"\";\n this.setFontSize = function (size) {\n this.$fontSize = size;\n this.forEach(function (editor) {\n editor.setFontSize(size);\n });\n };\n this.$cloneSession = function (session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n var undoManager = session.getUndoManager();\n s.setUndoManager(undoManager);\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n return s;\n };\n this.setSession = function (session, idx) {\n var editor;\n if (idx == null) {\n editor = this.$cEditor;\n }\n else {\n editor = this.$editors[idx];\n }\n var isUsed = this.$editors.some(function (editor) {\n return editor.session === session;\n });\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n editor.setSession(session);\n return session;\n };\n this.getOrientation = function () {\n return this.$orientation;\n };\n this.setOrientation = function (orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n this.$orientation = orientation;\n this.resize();\n };\n this.resize = function () {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n }\n else {\n var editorHeight = height / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n}).call(Split.prototype);\nexports.Split = Split;\n\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module){\"use strict\";\nmodule.exports = require(\"../split\");\n\n}); (function() {\n ace.require([\"ace/ext/split\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n // The number of bits in an int.\n this.Match_MaxBits = 32;\n};\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n return [op, text];\n};\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n }\n }\n var deadline = opt_deadline;\n\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n }\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n }\n if (commonsuffix) {\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n new diff_match_patch.Diff(DIFF_INSERT,\n longtext.substring(i + shorttext.length))];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n // Merge the results.\n return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n\n var diffs = this.diff_main(text1, text2, false, deadline);\n\n // Convert the diff back to original text.\n this.diff_charsToLines_(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var subDiff =\n this.diff_main(text_delete, text_insert, false, deadline);\n for (var j = subDiff.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, subDiff[j]);\n }\n pointer = pointer + subDiff.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if ((new Date()).getTime() > deadline) {\n break;\n }\n\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge_(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n if (lineArrayLength == maxLines) {\n // Bail out at 65535 because\n // String.fromCharCode(65536) == String.fromCharCode(0)\n line = text.substring(lineStart);\n lineEnd = text.length;\n }\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n lineStart = lineEnd + 1;\n }\n return chars;\n }\n // Allocate 2/3rds of the space for text1, the rest for text2.\n var maxLines = 40000;\n var chars1 = diff_linesToCharsMunge_(text1);\n maxLines = 65535;\n var chars2 = diff_linesToCharsMunge_(text2);\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n for (var i = 0; i < diffs.length; i++) {\n var chars = diffs[i][1];\n var text = [];\n for (var j = 0; j < chars.length; j++) {\n text[j] = lineArray[chars.charCodeAt(j)];\n }\n diffs[i][1] = text.join('');\n }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (found == 0 || text1.substring(text_length - length) ==\n text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (lastEquality && (lastEquality.length <=\n Math.max(length_insertions1, length_deletions1)) &&\n (lastEquality.length <= Math.max(length_insertions2,\n length_deletions2))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] =\n deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] =\n insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] =\n deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 &&\n char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 &&\n char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 &&\n char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 &&\n char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 &&\n one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 &&\n two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastEquality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastEquality = null;\n }\n post_ins = post_del = false;\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastEquality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastEquality = null;\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = /</g;\n var pattern_gt = />/g;\n var pattern_para = /\\n/g;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;')\n .replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n break;\n case DIFF_DELETE:\n html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n break;\n case DIFF_EQUAL:\n html[x] = '<span>' + text + '</span>';\n break;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] =\n new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n } else {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet_(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n if (patch.start2 === null) {\n throw Error('patch not initialized');\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = /** @type {string} */(a);\n diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(a);\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_b);\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_c);\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // https://github.com/google/diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] =\n new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n var patch_size = this.Match_MaxBits;\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0,\n patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n /** @type {!Array.<!diff_match_patch.Diff>} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n return text.join('').replace(/%20/g, ' ');\n};\n\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","import { Ace, Range } from \"ace-builds\";\nimport * as AceBuilds from \"ace-builds\";\nimport * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nconst isEqual = require(\"lodash.isequal\");\nimport {\n debounce,\n editorEvents,\n editorOptions,\n getAceInstance\n} from \"./editorOptions\";\nconst ace = getAceInstance();\n\nimport {\n IAceEditor,\n IAceOptions,\n ICommand,\n IEditorProps,\n IMarker\n} from \"./types\";\n/**\n * See https://github.com/ajaxorg/ace/wiki/Configuring-Ace\n */\n\nexport interface IAceEditorProps {\n name?: string;\n style?: React.CSSProperties;\n /** For available modes see https://github.com/thlorenz/brace/tree/master/mode */\n mode?: string | object;\n /** For available themes see https://github.com/thlorenz/brace/tree/master/theme */\n theme?: string;\n height?: string;\n width?: string;\n className?: string;\n fontSize?: number | string;\n lineHeight?: number | string;\n showGutter?: boolean;\n showPrintMargin?: boolean;\n highlightActiveLine?: boolean;\n focus?: boolean;\n cursorStart?: number;\n wrapEnabled?: boolean;\n readOnly?: boolean;\n minLines?: number;\n maxLines?: number;\n navigateToFileEnd?: boolean;\n debounceChangePeriod?: number;\n enableBasicAutocompletion?: boolean | string[];\n enableLiveAutocompletion?: boolean | string[];\n tabSize?: number;\n value?: string;\n placeholder?: string;\n defaultValue?: string;\n scrollMargin?: number[];\n enableSnippets?: boolean;\n onSelectionChange?: (value: any, event?: any) => void;\n onCursorChange?: (value: any, event?: any) => void;\n onInput?: (event?: any) => void;\n onLoad?: (editor: Ace.Editor) => void;\n onValidate?: (annotations: Ace.Annotation[]) => void;\n onBeforeLoad?: (ace: typeof AceBuilds) => void;\n onChange?: (value: string, event?: any) => void;\n onSelection?: (selectedText: string, event?: any) => void;\n onCopy?: (value: string) => void;\n onPaste?: (value: string) => void;\n onFocus?: (event: any, editor?: Ace.Editor) => void;\n onBlur?: (event: any, editor?: Ace.Editor) => void;\n onScroll?: (editor: IEditorProps) => void;\n editorProps?: IEditorProps;\n setOptions?: IAceOptions;\n keyboardHandler?: string;\n commands?: ICommand[];\n annotations?: Ace.Annotation[];\n markers?: IMarker[];\n}\n\nexport default class ReactAce extends React.Component<IAceEditorProps> {\n public static propTypes: PropTypes.ValidationMap<IAceEditorProps> = {\n mode: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n focus: PropTypes.bool,\n theme: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.string,\n width: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n lineHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showGutter: PropTypes.bool,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onPaste: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onBlur: PropTypes.func,\n onScroll: PropTypes.func,\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onLoad: PropTypes.func,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n onValidate: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n debounceChangePeriod: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableSnippets: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n navigateToFileEnd: PropTypes.bool,\n commands: PropTypes.array,\n placeholder: PropTypes.string\n };\n public static defaultProps: Partial<IAceEditorProps> = {\n name: \"ace-editor\",\n focus: false,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n fontSize: 12,\n enableSnippets: false,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n placeholder: null,\n navigateToFileEnd: true\n };\n public editor: IAceEditor;\n public refEditor: HTMLElement;\n public debounce: (fn: any, delay: number) => (...args: any) => void;\n // [index: string]: any;\n public silent: boolean;\n constructor(props: IAceEditorProps) {\n super(props);\n editorEvents.forEach(method => {\n this[method] = this[method].bind(this);\n });\n this.debounce = debounce;\n }\n public isInShadow(node: HTMLElement): boolean {\n let parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n }\n public componentDidMount() {\n const {\n className,\n onBeforeLoad,\n onValidate,\n mode,\n focus,\n theme,\n fontSize,\n lineHeight,\n value,\n defaultValue,\n showGutter,\n wrapEnabled,\n showPrintMargin,\n scrollMargin = [0, 0, 0, 0],\n keyboardHandler,\n onLoad,\n commands,\n annotations,\n markers,\n placeholder\n } = this.props;\n\n this.editor = ace.edit(this.refEditor) as IAceEditor;\n\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n\n const editorProps = Object.keys(this.props.editorProps);\n for (let i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(\n this.onChange,\n this.props.debounceChangePeriod\n );\n }\n this.editor.renderer.setScrollMargin(\n scrollMargin[0],\n scrollMargin[1],\n scrollMargin[2],\n scrollMargin[3]\n );\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor\n .getSession()\n .setMode(\n typeof mode === \"string\" ? `ace/mode/${mode}` : (mode as Ace.SyntaxMode)\n );\n if (theme && theme !== \"\") this.editor.setTheme(`ace/theme/${theme}`);\n this.editor.setFontSize(\n typeof fontSize === \"number\" ? `${fontSize}px` : fontSize\n );\n if (lineHeight) {\n this.editor.container.style.lineHeight =\n typeof lineHeight === \"number\" ? `${lineHeight}px` : `${lineHeight}`;\n this.editor.renderer.updateFontSize();\n }\n this.editor\n .getSession()\n .setValue(!defaultValue ? value || \"\" : defaultValue);\n\n if (this.props.navigateToFileEnd) {\n this.editor.navigateFileEnd();\n }\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on(\"focus\", this.onFocus);\n this.editor.on(\"blur\", this.onBlur);\n this.editor.on(\"copy\", this.onCopy);\n this.editor.on(\"paste\", this.onPaste);\n this.editor.on(\"change\", this.onChange);\n this.editor.on(\"input\", this.onInput);\n if (placeholder) {\n this.updatePlaceholder();\n }\n this.editor\n .getSession()\n .selection.on(\"changeSelection\", this.onSelectionChange);\n this.editor.getSession().selection.on(\"changeCursor\", this.onCursorChange);\n if (onValidate) {\n // @ts-ignore types don't include\n this.editor.getSession().on(\"changeAnnotation\", () => {\n // tslint:disable-next-line:no-shadowed-variable\n const annotations = this.editor.getSession().getAnnotations();\n this.props.onValidate(annotations);\n });\n }\n this.editor.session.on(\"changeScrollTop\", this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n }\n\n // get a list of possible options to avoid 'misspelled option errors'\n const availableOptions = this.editor.$options;\n editorOptions.forEach(option => {\n if (availableOptions.hasOwnProperty(option)) {\n // @ts-ignore\n this.editor.setOption(option, this.props[option]);\n } else if (this.props[option]) {\n console.warn(\n `ReactAce: editor option ${option} was activated but not found. Did you need to import a related tool or did you possibly mispell the option?`\n );\n }\n });\n\n this.handleOptions(this.props);\n\n if (Array.isArray(commands)) {\n commands.forEach(command => {\n if (typeof command.exec === \"string\") {\n (this.editor.commands as any).bindKey(command.bindKey, command.exec);\n } else {\n (this.editor.commands as any).addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n\n if (onLoad) {\n onLoad(this.editor);\n }\n\n this.editor.resize();\n\n if (focus) {\n this.editor.focus();\n }\n }\n\n public componentDidUpdate(prevProps: IAceEditorProps) {\n const oldProps = prevProps;\n const nextProps = this.props;\n\n for (let i = 0; i < editorOptions.length; i++) {\n const option = editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n // @ts-ignore\n this.editor.setOption(option, nextProps[option]);\n }\n }\n\n if (nextProps.className !== oldProps.className) {\n const appliedClasses = this.refEditor.className;\n const appliedClassesArray = appliedClasses.trim().split(\" \");\n const oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(oldClass => {\n const index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray.join(\" \");\n }\n\n // First process editor value, as it may create a new session (see issue #300)\n const valueChanged =\n this.editor &&\n nextProps.value != null &&\n this.editor.getValue() !== nextProps.value;\n\n if (valueChanged) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n const pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n\n if (nextProps.placeholder !== oldProps.placeholder) {\n this.updatePlaceholder();\n }\n if (nextProps.mode !== oldProps.mode) {\n this.editor\n .getSession()\n .setMode(\n typeof nextProps.mode === \"string\"\n ? `ace/mode/${nextProps.mode}`\n : (nextProps.mode as Ace.SyntaxMode)\n );\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler(\n \"ace/keyboard/\" + nextProps.keyboardHandler\n );\n } else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(\n typeof nextProps.fontSize === \"number\"\n ? `${nextProps.fontSize}px`\n : nextProps.fontSize\n );\n }\n if (nextProps.lineHeight !== oldProps.lineHeight) {\n this.editor.container.style.lineHeight =\n typeof nextProps.lineHeight === \"number\"\n ? `${nextProps.lineHeight}px`\n : nextProps.lineHeight;\n this.editor.renderer.updateFontSize();\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n // if the value or annotations changed, set the annotations\n // changing the value may create create a new session which will require annotations to be re-set\n if (valueChanged || !isEqual(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (\n !isEqual(nextProps.markers, oldProps.markers) &&\n Array.isArray(nextProps.markers)\n ) {\n this.handleMarkers(nextProps.markers);\n }\n\n // this doesn't look like it works at all....\n if (!isEqual(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n\n if (\n prevProps.height !== this.props.height ||\n prevProps.width !== this.props.width\n ) {\n this.editor.resize();\n }\n if (this.props.focus && !prevProps.focus) {\n this.editor.focus();\n }\n }\n\n public handleScrollMargins(margins = [0, 0, 0, 0]) {\n this.editor.renderer.setScrollMargin(\n margins[0],\n margins[1],\n margins[2],\n margins[3]\n );\n }\n\n public componentWillUnmount() {\n if (this.editor) {\n this.editor.destroy();\n this.editor = null;\n }\n }\n\n public onChange(event: any) {\n if (this.editor && this.props.onChange && !this.silent) {\n const value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n }\n\n public onSelectionChange(event: any) {\n if (this.props.onSelectionChange) {\n const value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n }\n public onCursorChange(event: any) {\n if (this.props.onCursorChange) {\n const value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n }\n public onInput(event?: any) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n if (this.props.placeholder) {\n this.updatePlaceholder();\n }\n }\n public onFocus(event: any) {\n if (this.props.onFocus) {\n this.props.onFocus(event, this.editor);\n }\n }\n\n public onBlur(event: any) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n }\n\n public onCopy({ text }: { text: string }) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n\n public onPaste({ text }: { text: string }) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n\n public onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n\n public handleOptions(props: IAceEditorProps) {\n const setOptions = Object.keys(props.setOptions);\n for (let y = 0; y < setOptions.length; y++) {\n // @ts-ignore\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n\n public handleMarkers(markers: IMarker[]) {\n // remove foreground markers\n let currentMarkers = this.editor.getSession().getMarkers(true);\n for (const i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers except active line marker and selected word marker\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (const i in currentMarkers) {\n if (\n currentMarkers.hasOwnProperty(i) &&\n currentMarkers[i].clazz !== \"ace_active-line\" &&\n currentMarkers[i].clazz !== \"ace_selected-word\"\n ) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(\n ({\n startRow,\n startCol,\n endRow,\n endCol,\n className,\n type,\n inFront = false\n }) => {\n const range = new Range(startRow, startCol, endRow, endCol);\n this.editor.getSession().addMarker(range, className, type, inFront);\n }\n );\n }\n\n public updatePlaceholder() {\n // Adapted from https://stackoverflow.com/questions/26695708/how-can-i-add-placeholder-text-when-the-editor-is-empty\n\n const editor = this.editor;\n const { placeholder } = this.props;\n\n const showPlaceholder = !editor.session.getValue().length;\n let node = editor.renderer.placeholderNode;\n\n if (!showPlaceholder && node) {\n editor.renderer.scroller.removeChild(editor.renderer.placeholderNode);\n editor.renderer.placeholderNode = null;\n } else if (showPlaceholder && !node) {\n node = editor.renderer.placeholderNode = document.createElement(\"div\");\n node.textContent = placeholder || \"\";\n node.className = \"ace_comment ace_placeholder\";\n node.style.padding = \"0 9px\";\n node.style.position = \"absolute\";\n node.style.zIndex = \"3\";\n editor.renderer.scroller.appendChild(node);\n } else if (showPlaceholder && node) {\n node.textContent = placeholder;\n }\n }\n\n public updateRef(item: HTMLElement) {\n this.refEditor = item;\n }\n\n public render() {\n const { name, width, height, style } = this.props;\n const divStyle = { width, height, ...style };\n return <div ref={this.updateRef} id={name} style={divStyle} />;\n }\n}\n","import * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport SplitEditor from \"./split\";\nconst DiffMatchPatch = require(\"diff-match-patch\");\nimport { IEditorProps } from \"./types\";\n\nexport interface IDiffEditorProps {\n cursorStart?: number;\n editorProps?: object;\n enableBasicAutocompletion?: boolean | string[];\n enableLiveAutocompletion?: boolean | string[];\n focus?: boolean;\n fontSize?: number;\n height?: string;\n highlightActiveLine?: boolean;\n maxLines?: number;\n minLines?: number;\n mode?: string;\n name?: string;\n className?: string;\n onLoad?: (editor: IEditorProps) => void;\n onChange?: (value: string[], event?: any) => void;\n onPaste?: (value: string) => void;\n onScroll?: (editor: IEditorProps) => void;\n orientation?: string;\n readOnly?: boolean;\n scrollMargin?: number[];\n setOptions?: object;\n showGutter?: boolean;\n showPrintMargin?: boolean;\n splits?: number;\n style?: object;\n tabSize?: number;\n theme?: string;\n value?: string[];\n width?: string;\n wrapEnabled?: boolean;\n}\n\nexport interface IDiffEditorState {\n value: string[];\n}\n\nexport default class DiffComponent extends React.Component<\n IDiffEditorProps,\n IDiffEditorState\n> {\n public static propTypes: PropTypes.ValidationMap<IDiffEditorProps> = {\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n enableBasicAutocompletion: PropTypes.bool,\n enableLiveAutocompletion: PropTypes.bool,\n focus: PropTypes.bool,\n fontSize: PropTypes.number,\n height: PropTypes.string,\n highlightActiveLine: PropTypes.bool,\n maxLines: PropTypes.number,\n minLines: PropTypes.number,\n mode: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n onChange: PropTypes.func,\n orientation: PropTypes.string,\n readOnly: PropTypes.bool,\n scrollMargin: PropTypes.array,\n setOptions: PropTypes.object,\n showGutter: PropTypes.bool,\n showPrintMargin: PropTypes.bool,\n splits: PropTypes.number,\n style: PropTypes.object,\n tabSize: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.array,\n width: PropTypes.string,\n wrapEnabled: PropTypes.bool\n };\n\n public static defaultProps: Partial<IDiffEditorProps> = {\n cursorStart: 1,\n editorProps: {},\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n focus: false,\n fontSize: 12,\n height: \"500px\",\n highlightActiveLine: true,\n maxLines: null,\n minLines: null,\n mode: \"\",\n name: \"ace-editor\",\n onLoad: null,\n onScroll: null,\n onPaste: null,\n onChange: null,\n orientation: \"beside\",\n readOnly: false,\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n showGutter: true,\n showPrintMargin: true,\n splits: 2,\n style: {},\n tabSize: 4,\n theme: \"github\",\n value: [\"\", \"\"],\n width: \"500px\",\n wrapEnabled: true\n };\n constructor(props: IDiffEditorProps) {\n super(props);\n this.state = {\n value: this.props.value\n };\n this.onChange = this.onChange.bind(this);\n this.diff = this.diff.bind(this);\n }\n\n public componentDidUpdate() {\n const { value } = this.props;\n\n if (value !== this.state.value) {\n this.setState({ value });\n }\n }\n\n public onChange(value: any) {\n this.setState({\n value\n });\n if (this.props.onChange) {\n this.props.onChange(value);\n }\n }\n\n public diff() {\n const dmp = new DiffMatchPatch();\n const lhString = this.state.value[0];\n const rhString = this.state.value[1];\n\n if (lhString.length === 0 && rhString.length === 0) {\n return [];\n }\n\n const diff = dmp.diff_main(lhString, rhString);\n dmp.diff_cleanupSemantic(diff);\n\n const diffedLines = this.generateDiffedLines(diff);\n const codeEditorSettings = this.setCodeMarkers(diffedLines);\n return codeEditorSettings;\n }\n\n public generateDiffedLines(diff: any) {\n const C = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1\n };\n\n const diffedLines = {\n left: [] as any[],\n right: [] as any[]\n };\n\n const cursor = {\n left: 1,\n right: 1\n };\n\n diff.forEach((chunk: any) => {\n const chunkType = chunk[0];\n const text = chunk[1];\n let lines = text.split(\"\\n\").length - 1;\n\n // diff-match-patch sometimes returns empty strings at random\n if (text.length === 0) {\n return;\n }\n\n const firstChar = text[0];\n const lastChar = text[text.length - 1];\n let linesToHighlight = 0;\n\n switch (chunkType) {\n case C.DIFF_EQUAL:\n cursor.left += lines;\n cursor.right += lines;\n\n break;\n case C.DIFF_DELETE:\n // If the deletion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.left++;\n lines--;\n }\n\n linesToHighlight = lines;\n\n // If the deletion does not include a newline, highlight the same line on the right\n if (linesToHighlight === 0) {\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right\n });\n }\n\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left + linesToHighlight\n });\n\n cursor.left += lines;\n break;\n case C.DIFF_INSERT:\n // If the insertion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.right++;\n lines--;\n }\n\n linesToHighlight = lines;\n\n // If the insertion does not include a newline, highlight the same line on the left\n if (linesToHighlight === 0) {\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left\n });\n }\n\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right + linesToHighlight\n });\n\n cursor.right += lines;\n break;\n default:\n throw new Error(\"Diff type was not defined.\");\n }\n });\n return diffedLines;\n }\n\n // Receives a collection of line numbers and iterates through them to highlight appropriately\n // Returns an object that tells the render() method how to display the code editors\n public setCodeMarkers(diffedLines: any = { left: [], right: [] }) {\n const codeEditorSettings = [];\n\n const newMarkerSet = {\n left: [] as any[],\n right: [] as any[]\n };\n\n for (let i = 0; i < diffedLines.left.length; i++) {\n const markerObj = {\n startRow: diffedLines.left[i].startLine - 1,\n endRow: diffedLines.left[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.left.push(markerObj);\n }\n\n for (let i = 0; i < diffedLines.right.length; i++) {\n const markerObj = {\n startRow: diffedLines.right[i].startLine - 1,\n endRow: diffedLines.right[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.right.push(markerObj);\n }\n\n codeEditorSettings[0] = newMarkerSet.left;\n codeEditorSettings[1] = newMarkerSet.right;\n\n return codeEditorSettings;\n }\n\n public render() {\n const markers = this.diff();\n return (\n <SplitEditor\n name={this.props.name}\n className={this.props.className}\n focus={this.props.focus}\n orientation={this.props.orientation}\n splits={this.props.splits}\n mode={this.props.mode}\n theme={this.props.theme}\n height={this.props.height}\n width={this.props.width}\n fontSize={this.props.fontSize}\n showGutter={this.props.showGutter}\n onChange={this.onChange}\n onPaste={this.props.onPaste}\n onLoad={this.props.onLoad}\n onScroll={this.props.onScroll}\n minLines={this.props.minLines}\n maxLines={this.props.maxLines}\n readOnly={this.props.readOnly}\n highlightActiveLine={this.props.highlightActiveLine}\n showPrintMargin={this.props.showPrintMargin}\n tabSize={this.props.tabSize}\n cursorStart={this.props.cursorStart}\n editorProps={this.props.editorProps}\n style={this.props.style}\n scrollMargin={this.props.scrollMargin}\n setOptions={this.props.setOptions}\n wrapEnabled={this.props.wrapEnabled}\n enableBasicAutocompletion={this.props.enableBasicAutocompletion}\n enableLiveAutocompletion={this.props.enableLiveAutocompletion}\n value={this.state.value}\n markers={markers}\n />\n );\n }\n}\n","import * as AceBuilds from \"ace-builds\";\n\ntype EditorOption =\n | \"minLines\"\n | \"maxLines\"\n | \"readOnly\"\n | \"highlightActiveLine\"\n | \"tabSize\"\n | \"enableBasicAutocompletion\"\n | \"enableLiveAutocompletion\"\n | \"enableSnippets\";\n\nconst editorOptions: EditorOption[] = [\n \"minLines\",\n \"maxLines\",\n \"readOnly\",\n \"highlightActiveLine\",\n \"tabSize\",\n \"enableBasicAutocompletion\",\n \"enableLiveAutocompletion\",\n \"enableSnippets\"\n];\n\ntype EditorEvent =\n | \"onChange\"\n | \"onFocus\"\n | \"onInput\"\n | \"onBlur\"\n | \"onCopy\"\n | \"onPaste\"\n | \"onSelectionChange\"\n | \"onCursorChange\"\n | \"onScroll\"\n | \"handleOptions\"\n | \"updateRef\";\n\nconst editorEvents: EditorEvent[] = [\n \"onChange\",\n \"onFocus\",\n \"onInput\",\n \"onBlur\",\n \"onCopy\",\n \"onPaste\",\n \"onSelectionChange\",\n \"onCursorChange\",\n \"onScroll\",\n \"handleOptions\",\n \"updateRef\"\n];\n\n// Typescript globals definition to allow us to create a window object during SSR.\ndeclare global {\n namespace NodeJS {\n // tslint:disable-next-line\n interface Global {\n window: any;\n }\n }\n}\nconst getAceInstance = (): typeof AceBuilds => {\n let ace;\n if (typeof window === \"undefined\") {\n // ace-builds just needs some window object to attach ace to.\n // During SSR even just an empty object will work.\n global.window = {} as any;\n ace = require(\"ace-builds\");\n // And it can be discarded immediately afterward to avoid confusing\n // other libraries that might detect SSR the same way we did.\n delete global.window;\n } else if ((window as any).ace) {\n // Fallback for ace.require when vanilla ACE is hosted over a CDN\n ace = (window as any).ace;\n ace.acequire = (window as any).ace.require || (window as any).ace.acequire;\n } else {\n ace = require(\"ace-builds\");\n }\n return ace;\n};\n\nconst debounce = (fn: (...args: any[]) => void, delay: number) => {\n let timer: any = null;\n // tslint:disable-next-line\n return function () {\n const context = this;\n const args = arguments;\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn.apply(context, args);\n }, delay);\n };\n};\nexport { editorOptions, editorEvents, debounce, getAceInstance };\n","import ace, { IAceEditorProps } from \"./ace\";\nimport diff, { IDiffEditorProps, IDiffEditorState } from \"./diff\";\nimport split, { ISplitEditorProps } from \"./split\";\nimport {\n IAceOptions,\n IAnnotation,\n ICommand,\n ICommandBindKey,\n ICommandManager,\n IEditorProps,\n IMarker\n} from \"./types\";\nexport {\n split,\n diff,\n IAceOptions,\n IAceEditorProps,\n IAnnotation,\n ICommand,\n ICommandBindKey,\n ICommandManager,\n IDiffEditorProps,\n IDiffEditorState,\n IEditorProps,\n IMarker,\n ISplitEditorProps\n};\nexport default ace;\n","import {\n debounce,\n editorEvents,\n editorOptions,\n getAceInstance\n} from \"./editorOptions\";\nconst ace = getAceInstance();\nimport { Ace, Range } from \"ace-builds\";\nimport { Split } from \"ace-builds/src-noconflict/ext-split\";\nimport * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nconst isEqual = require(\"lodash.isequal\");\nconst get = require(\"lodash.get\");\nimport {\n IAceEditor,\n IAceOptions,\n IAnnotation,\n ICommand,\n IEditorProps,\n IMarker\n} from \"./types\";\n\ninterface IAceEditorClass extends IAceEditor {\n [index: string]: any;\n $options?: any;\n}\n\nexport interface ISplitEditorProps {\n [index: string]: any;\n name?: string;\n style?: object;\n /** For available modes see https://github.com/thlorenz/brace/tree/master/mode */\n mode?: string;\n /** For available themes see https://github.com/thlorenz/brace/tree/master/theme */\n theme?: string;\n height?: string;\n width?: string;\n className?: string;\n fontSize?: number | string;\n showGutter?: boolean;\n showPrintMargin?: boolean;\n highlightActiveLine?: boolean;\n focus?: boolean;\n splits: number;\n debounceChangePeriod?: number;\n cursorStart?: number;\n wrapEnabled?: boolean;\n readOnly?: boolean;\n minLines?: number;\n maxLines?: number;\n enableBasicAutocompletion?: boolean | string[];\n enableLiveAutocompletion?: boolean | string[];\n tabSize?: number;\n value?: string[];\n defaultValue?: string[];\n scrollMargin?: number[];\n orientation?: string;\n onSelectionChange?: (value: any, event?: any) => void;\n onCursorChange?: (value: any, event?: any) => void;\n onInput?: (event?: any) => void;\n onLoad?: (editor: IEditorProps) => void;\n onBeforeLoad?: (ace: any) => void;\n onChange?: (value: string[], event?: any) => void;\n onSelection?: (selectedText: string, event?: any) => void;\n onCopy?: (value: string) => void;\n onPaste?: (value: string) => void;\n onFocus?: (value: Event) => void;\n onBlur?: (value: Event) => void;\n onScroll?: (editor: IEditorProps) => void;\n editorProps?: IEditorProps;\n setOptions?: IAceOptions;\n keyboardHandler?: string;\n commands?: ICommand[];\n annotations?: IAnnotation[][];\n markers?: IMarker[][];\n}\n\nexport default class SplitComponent extends React.Component<ISplitEditorProps> {\n [index: string]: any;\n\n public static propTypes: PropTypes.ValidationMap<ISplitEditorProps> = {\n className: PropTypes.string,\n debounceChangePeriod: PropTypes.number,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n focus: PropTypes.bool,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n height: PropTypes.string,\n mode: PropTypes.string,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n orientation: PropTypes.string,\n showGutter: PropTypes.bool,\n splits: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.arrayOf(PropTypes.string),\n width: PropTypes.string,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n commands: PropTypes.array\n };\n public static defaultProps: Partial<ISplitEditorProps> = {\n name: \"ace-editor\",\n focus: false,\n orientation: \"beside\",\n splits: 2,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n };\n public editor: IAceEditorClass;\n public refEditor: HTMLElement;\n public silent: boolean;\n public split: IAceEditorClass;\n public splitEditor: IAceEditorClass;\n public debounce: (fn: any, delay: number) => (...args: any) => void;\n constructor(props: ISplitEditorProps) {\n super(props);\n editorEvents.forEach(method => {\n this[method] = this[method].bind(this);\n });\n this.debounce = debounce;\n }\n public isInShadow(node: HTMLElement): boolean {\n let parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n }\n public componentDidMount() {\n const {\n className,\n onBeforeLoad,\n mode,\n focus,\n theme,\n fontSize,\n value,\n defaultValue,\n cursorStart,\n showGutter,\n wrapEnabled,\n showPrintMargin,\n scrollMargin = [0, 0, 0, 0],\n keyboardHandler,\n onLoad,\n commands,\n annotations,\n markers,\n splits\n } = this.props;\n\n this.editor = ace.edit(this.refEditor) as IAceEditor;\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor.setTheme(`ace/theme/${theme}`);\n\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n\n const editorProps = Object.keys(this.props.editorProps);\n\n const split = new Split(\n this.editor.container,\n `ace/theme/${theme}`,\n splits\n );\n this.editor.env.split = split;\n\n this.splitEditor = split.getEditor(0);\n this.split = split;\n // in a split scenario we don't want a print margin for the entire application\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false);\n // get a list of possible options to avoid 'misspelled option errors'\n const availableOptions = this.splitEditor.$options;\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(\n this.onChange,\n this.props.debounceChangePeriod\n );\n }\n split.forEach((editor: IAceEditorClass, index: number) => {\n for (let i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n const defaultValueForEditor = get(defaultValue, index);\n const valueForEditor = get(value, index, \"\");\n editor.session.setUndoManager(new ace.UndoManager());\n editor.setTheme(`ace/theme/${theme}`);\n editor.renderer.setScrollMargin(\n scrollMargin[0],\n scrollMargin[1],\n scrollMargin[2],\n scrollMargin[3]\n );\n editor.getSession().setMode(`ace/mode/${mode}`);\n editor.setFontSize(fontSize as any);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on(\"focus\", this.onFocus);\n editor.on(\"blur\", this.onBlur);\n editor.on(\"input\" as any, this.onInput);\n editor.on(\"copy\", this.onCopy as any);\n editor.on(\"paste\", this.onPaste as any);\n editor.on(\"change\", this.onChange);\n editor\n .getSession()\n .selection.on(\"changeSelection\", this.onSelectionChange);\n editor.getSession().selection.on(\"changeCursor\", this.onCursorChange);\n editor.session.on(\"changeScrollTop\", this.onScroll);\n editor.setValue(\n defaultValueForEditor === undefined\n ? valueForEditor\n : defaultValueForEditor,\n cursorStart\n );\n const newAnnotations = get(annotations, index, []);\n const newMarkers = get(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n if (newMarkers && newMarkers.length > 0) {\n this.handleMarkers(newMarkers, editor);\n }\n\n for (let i = 0; i < editorOptions.length; i++) {\n const option = editorOptions[i];\n if (availableOptions.hasOwnProperty(option)) {\n editor.setOption(option as any, this.props[option]);\n } else if (this.props[option]) {\n console.warn(\n `ReaceAce: editor option ${option} was activated but not found. Did you need to import a related tool or did you possibly mispell the option?`\n );\n }\n }\n this.handleOptions(this.props, editor);\n\n if (Array.isArray(commands)) {\n commands.forEach(command => {\n if (typeof command.exec === \"string\") {\n (editor.commands as any).bindKey(command.bindKey, command.exec);\n } else {\n (editor.commands as any).addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n });\n\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n\n if (focus) {\n this.splitEditor.focus();\n }\n\n const sp = this.editor.env.split;\n sp.setOrientation(\n this.props.orientation === \"below\" ? sp.BELOW : sp.BESIDE\n );\n sp.resize(true);\n if (onLoad) {\n onLoad(sp);\n }\n }\n\n public componentDidUpdate(prevProps: ISplitEditorProps) {\n const oldProps = prevProps;\n const nextProps = this.props;\n\n const split = this.editor.env.split;\n\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(\n nextProps.orientation === \"below\" ? split.BELOW : split.BESIDE\n );\n }\n\n split.forEach((editor: IAceEditorClass, index: number) => {\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode(\"ace/mode/\" + nextProps.mode);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler(\n \"ace/keyboard/\" + nextProps.keyboardHandler\n );\n } else {\n editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize as any);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n\n for (let i = 0; i < editorOptions.length; i++) {\n const option = editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option as any, nextProps[option]);\n }\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps, editor);\n }\n const nextValue = get(nextProps.value, index, \"\");\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n const pos = (editor.session.selection as any).toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n (editor.session.selection as any).fromJSON(pos);\n this.silent = false;\n }\n const newAnnotations = get(nextProps.annotations, index, []);\n const oldAnnotations = get(oldProps.annotations, index, []);\n if (!isEqual(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n\n const newMarkers = get(nextProps.markers, index, []);\n const oldMarkers = get(oldProps.markers, index, []);\n if (!isEqual(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n this.handleMarkers(newMarkers, editor);\n }\n });\n\n if (nextProps.className !== oldProps.className) {\n const appliedClasses = this.refEditor.className;\n const appliedClassesArray = appliedClasses.trim().split(\" \");\n const oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(oldClass => {\n const index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray.join(\" \");\n }\n\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n if (\n nextProps.height !== this.props.height ||\n nextProps.width !== this.props.width\n ) {\n this.editor.resize();\n }\n }\n\n public componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n\n public onChange(event: any) {\n if (this.props.onChange && !this.silent) {\n const value: any = [];\n this.editor.env.split.forEach((editor: IAceEditorClass) => {\n value.push(editor.getValue());\n });\n this.props.onChange(value, event);\n }\n }\n\n public onSelectionChange(event: any) {\n if (this.props.onSelectionChange) {\n const value: any = [];\n this.editor.env.split.forEach((editor: IAceEditorClass) => {\n value.push(editor.getSelection());\n });\n this.props.onSelectionChange(value, event);\n }\n }\n public onCursorChange(event: any) {\n if (this.props.onCursorChange) {\n const value: any = [];\n this.editor.env.split.forEach((editor: IAceEditorClass) => {\n value.push(editor.getSelection());\n });\n this.props.onCursorChange(value, event);\n }\n }\n public onFocus(event: any) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n }\n\n public onInput(event: any) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n }\n\n public onBlur(event: any) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n }\n\n public onCopy(text: string) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n\n public onPaste(text: string) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n\n public onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n\n public handleOptions(props: ISplitEditorProps, editor: IAceEditorClass) {\n const setOptions = Object.keys(props.setOptions);\n for (let y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y] as any, props.setOptions[setOptions[y]]);\n }\n }\n\n public handleMarkers(markers: IMarker[], editor: IAceEditorClass) {\n // remove foreground markers\n let currentMarkers = editor.getSession().getMarkers(true);\n for (const i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = editor.getSession().getMarkers(false);\n for (const i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(\n ({\n startRow,\n startCol,\n endRow,\n endCol,\n className,\n type,\n inFront = false\n }) => {\n const range = new Range(startRow, startCol, endRow, endCol);\n editor\n .getSession()\n .addMarker(range as any, className, type as any, inFront);\n }\n );\n }\n\n public updateRef(item: HTMLElement) {\n this.refEditor = item;\n }\n\n public render() {\n const { name, width, height, style } = this.props;\n const divStyle = { width, height, ...style };\n return <div ref={this.updateRef} id={name} style={divStyle} />;\n }\n}\n"],"names":["global","this","window","define","module","deps","payload","arguments","length","modules","payloads","original","apply","console","error","trace","_require","parentId","callback","lookup","undefined","Object","prototype","toString","call","params","i","l","dep","require","push","packagedModule","normalizeModule","moduleName","indexOf","chunks","split","charAt","slice","join","previous","replace","exports","mod","id","uri","packaged","ns","root","exportAce","ace","defineProp","obj","name","val","defineProperty","value","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","index","source","keys","forEach","key","values","o","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","Math","max","min","end","relativeEnd","final","of","deepCopy","copy","isArray","last","a","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","create","arrayRemove","splice","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","timer","deferred","timeout","cancel","setTimeout","schedule","clearTimeout","isPending","delayedCall","defaultTimeout","_self","delay","supportsLookbehind","RegExp","e","skipEmptyMatch","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","exec","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","match","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isSafari","isEdge","isAIR","isAndroid","isChromeOS","isIOS","test","isMobile","strictCSP","useragent","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","n","className","style","cssText","setAttribute","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","classes","toggleCssClass","add","setCssClass","node","include","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","remove","cssCache","insertPendingStyles","cache","importCssString","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","href","scrollbarWidth","inner","width","minWidth","height","display","outer","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","removeChild","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","dom","get","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","s","src","onload","_","isAbort","qualifyURL","inherits","ctor","superCtor","super_","constructor","mixin","implement","proto","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","type","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","reportError","msg","data","Error","defaultEnglishMessages","messages","nlsPlaceholders","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","placeholders","nls","defaultString","translated","dollarMatch","curlyBracketMatch","isDark","cssClass","$id","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","base","re","setModuleUrl","subst","customLoader","setLoader","cb","dynamicModules","$loading","$loaded","loadModule","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","loader","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attributes","j","attr","m","m1","toUpperCase","Range","startRow","startColumn","endRow","endColumn","start","row","column","isEqual","range","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","codeToKeyCode","Command","Backspace","Tab","Return","Enter","Pause","Escape","PageUp","PageDown","End","Home","Insert","Delete","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Backquote","Minus","Equal","BracketLeft","Backslash","BracketRight","Semicolon","Quote","Comma","Period","Slash","Space","NumpadAdd","NumpadDecimal","NumpadSubtract","NumpadDivide","NumpadMultiply","chr","fromCharCode","modifiers","Shift","Control","Alt","Meta","$codeToKeyCode","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","activeListenerOptions","pressedKeys","ts","getListenerOptions","createComment","passive","detectListenerOptionsSupport","EventListener","elem","destroy","addListener","destroyer","$toDestroy","getModifierHash","ctrlKey","altKey","shiftKey","metaKey","resetPressedKeys","stopEvent","getButton","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","DOM_DELTA_PAGE","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierString","addCommandKeyListener","lastDefaultPrevented","hashId","code","getModifierState","altGr","location","timeStamp","normalizeCommandKeys","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","bind","$cancelT","lineMode","pasteCancelled","Date","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","parentNode","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","isFocused","activeElement","setNumberOfExtraLines","number","setAriaOptions","activeDescendant","inline","removeAttribute","role","setLabel","arialLabel","$textInputAriaLabel","concat","selection","cursor","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","renderer","enableKeyboardAccessibility","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","getLine","newValue","selectionEnd","setSelectionRange","afterContextMenu","selectionStart","getRange","lines","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","context","compositionStartOffset","closeTimeout","syncComposition","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","shift","commands","findKeyCommand","addIosSelectionHandler","$setUserAgentForTests","_isMobile","_isIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","pos","getDocumentPosition","mousedownEvent","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","anchor","orientedRange","calcRangeOrientation","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","selectEnd","selectAllEnd","selectByWordsEnd","preventParentScroll","currentTarget","scrollHeight","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","__values","Symbol","iterator","next","done","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","setTheme","theme","show","hide","getHeight","offsetHeight","getWidth","popupManager","PopupManager","popups","addPopup","popup","updatePopups","removePopup","e_1","_a","e_2","_b","sort","priority","visiblepopups","_c","_d","shouldDisplay","visiblepopups_1","visiblepopups_1_1","visiblePopup","doPopupsOverlap","e_2_1","return","e_1_1","popupA","popupB","rectA","rectB","HoverTooltip","_super","_this","lastT","idleTime","lastEvent","onMouseOut","onMouseMove","waitForHover","whiteSpace","pointerEvents","tabIndex","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","$registerCloseEvents","addMarker","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","innerHeight","pageY","lineHeight","isAbove","innerWidth","marker","$markerSession","removeMarker","$removeCloseEvents","relatedTarget","classList","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","hideTooltip","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","getLength","screenRow","$pos","documentToScreenRow","showTooltip","gutterRow","getGutterRow","gutterCell","$lines","querySelector","$gutter","windowWidth","windowHeight","singular","plural","security","warning","info","hint","annotation","annotationsInRow","$annotations","displayText","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationTypeInFold","annotationsInFold","severityRank","annotationType","summaryFoldedAnnotations","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","lineElement","iconElement","annotationLabels","tooltipElement","annotations","summary","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","selectionRange","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","clearDragMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","clickCount","vX","vY","createContextMenu","canExecuteCommand","cmd","canExecute","handleClick","action","selected","hasUndo","getUndoManager","replaceChild","class","updateMenu","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","DefaultGutterHandler","MouseHandler","$dragDelay","$mouseMoved","focusEditor","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","ET","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","_getCharClass","chars","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","RLE","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","ret","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","foldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","lineWidgets","widget","rowsAbove","rowCount","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","splitRegex","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","unicode","regex","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","unshift","TextHighlightRules","addRules","prefix","nextState","$rules","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","recordAutoInsert","isSaneInsertion","braces","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","charBefore","closeDocComment","currentToken","nextToken","cursorPosInToken","closeDocPos","openDocPos","$matchTokenType","iterator2","bracket","wordChars","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","delegations","_loop_1","scope","functionName","$delegator","this_1","method","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$clipPositionToDocument","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$pointsInOrder","$getTransformedPoint","$insertRight","noClip","point1","point2","equalPointsInOrder","bColIsAfter","Document","textOrLines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","cleanup","SearchHighlight","clazz","setRegexp","update","markerLayer","renderedMarkerRanges","MAX_RANGES","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","UndoManager","$keepRedoStack","$maxRev","$fromUndo","$undoDepth","reset","addSession","allowMerge","$lastDelta","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","addSelection","rev","startNewGroup","markIgnored","ignore","getSelection","getRevision","getDeltas","getChangedRanges","getChangedLines","undo","dontSelect","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","undoSelectionRange","undoChanges","$syncRev","redo","diff","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","redoChanges","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","json","$prettyPrint","stringifyDelta","hasRedo","isClean","markClean","stringifyRange","swap","d1","d2","i1","i2","ds1","ds2","selectionBefore","selectionAfter","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumePoint","afterStart","firstConsumed","consumedFolds","restoreRange","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","initState","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","$findClosingTag","$findOpeningTag","found","backward","prevToken","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","bgTokenizer","onChangeFold","setMode","destroyed","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","JSON","parse","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","scrollTop","$scrollLeft","$scrollTop","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","getMarkers","highlight","$searchHighlight","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","$getUndoSelection","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","setUseWrapMode","useWrapMode","setWrapLimitRange","$wrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","SPACE","TAB","TAB_SPACE","getWrapIndent","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","getPrecedingCharacter","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","caseSensitive","$supportsUnicodeFlag","wholeWord","wordBoundary","firstChar","needleArray","lastChar","addWordBoundary","$assembleMultilineRegExp","backwards","forEachInLine","MultiHashHandler","$singleCommand","commandKeyBinding","addCommands","addCommand","removeCommand","bindKey","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","isDefault","HashHandler","CommandManager","byName","returnValue","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","passEvent","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","ceil","coverLine","gutterWidth","fullWidth","padding","scrollBar","GutterKeyboardHandler","gutterLayer","activeRowIndex","activeLane","annotationTooltip","$onGutterKeyDown","$blurGutter","isRowVisible","scrollToLine","$rowToRowIndex","$cursorCell","nearestFoldIndex","$findNearestFoldWidget","nearestAnnotationIndex","$findNearestAnnotation","$focusAnnotation","$focusFoldWidget","$handleGutterKeyboardInteraction","GutterKeyboardEvent","lane","$switchLane","$rowIndexToRow","rowFoldingWidget","$blurFoldWidget","cells","childNodes","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","cell","gutterKeyboardHandler","getKey","getRow","isInAnnotationLane","isInFoldLane","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","commandEvent","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","oldEditor","getSession","resize","onResize","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","getMatching","markerType","getHighlightIndentGuides","$textLayer","$highlightIndentGuide","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","prevLineState","currIndent","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","setGhostText","removeGhostText","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","res","findLinkAt","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","animate","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","hasValue","$composition","placeholderNode","$placeholder","content","blurCommand","focusOnEnterKeyup","textInputAriaLabel","enableMobileMenu","$enableMobileMenu","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","getText","lastLineNumber","$renderer","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","displayAnnoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","ariaLabel","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","markers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","textTokens","Set","isTextToken","tokenType","has","Text","$updateEolChar","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","tabStr","$tabStrings","span","TAB_CHAR","$indentGuideRe","spaceClass","spaceContent","SPACE_CHAR","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","EOF_CHAR","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","isCursorInView","pixelPos","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","ctx","getContext","clearRect","priorities","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","VirtualRenderer","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","$addResizeObserver","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","CHANGE_LINES","CHANGE_TEXT","CHANGE_MARKER","updateFontSize","$updateSizeAsync","resizing","$updateCachedSize","$resizeTimer","$changes","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","CHANGE_SIZE","CHANGE_SCROLL","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","freeze","$frozen","unfreeze","CHANGE_H_SCROLL","st","$scrollDecorator","$updateLines","CHANGE_CURSOR","CHANGE_MARKER_FRONT","CHANGE_MARKER_BACK","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","_rows","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","x_min","STEPS","steps","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textChunks","$calculateWrappedTextChunks","$ghostText","widgetDiv","lastLineDiv","hiddenTokens","hideTokensAfterPosition","chunkDiv","chunkSpan","wrapped","$ghostTextWidget","pixelPosition","ghostTextHeight","textLines","displayTokens","wrapSplits","textSlice","newToken","hasPassedCursor","$themeId","$theme","background","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undoStackDepth","setup","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","tmp_1","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","annoTextLine","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","Split","$createEditor","$editorCSS","$container","$editors","$fontSize","setSplits","$splits","getSplits","getEditor","getCurrentEditor","$cEditor","keybinding","$cloneSession","isUsed","getOrientation","$orientation","setOrientation","orientation","BESIDE","editorWidth","editorHeight","BELOW","diff_match_patch","Diff_Timeout","Diff_EditCost","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","DIFF_DELETE","Diff","op","diff_main","text1","text2","opt_checklines","opt_deadline","getTime","deadline","checklines","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_lineMode_","diff_bisect_","diff_linesToChars_","chars1","chars2","linearray","lineArray","diff_charsToLines_","diff_cleanupSemantic","pointer","count_delete","count_insert","text_delete","text_insert","subDiff","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","k1","k1_offset","x1","k2_offset","x2","diff_bisectSplit_","k2","text1a","text2a","text1b","text2b","diffsb","lineHash","diff_linesToCharsMunge_","lineStart","lineArrayLength","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_commonOverlap_","text_length","best","pattern","dmp","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","hm2","equalities","equalitiesLength","lastEquality","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","overlap_length2","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumericRegex_","nonAlphaNumeric2","whitespace1","whitespaceRegex_","whitespace2","lineBreak1","linebreakRegex_","lineBreak2","blankLine1","blanklineEndRegex_","blankLine2","blanklineStartRegex_","equality1","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_xIndex","loc","last_chars1","last_chars2","diff_prettyHtml","pattern_amp","pattern_lt","pattern_gt","pattern_para","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","encodeURI","diff_fromDelta","diffsLength","decodeURI","match_main","match_bitap_","match_alphabet_","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","bin_min","bin_mid","matchmask","last_rd","bin_max","finish","rd","charMatch","patch_addContext_","patch","start2","length1","start1","length2","patch_make","opt_b","opt_c","patches","patch_obj","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","patch_apply","nullPadding","patch_addPadding","patch_splitMax","results","start_loc","expected_loc","end_loc","index2","index1","paddingLength","patch_size","bigpatch","precontext","empty","postcontext","patch_toText","patch_fromText","textline","textPointer","patchHeader","sign","HASH_UNDEFINED","funcTag","genTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","freeGlobal","freeSelf","Function","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","IE_PROTO","funcToString","objectToString","reIsNative","Map","getNative","nativeCreate","symbolProto","symbolToString","Hash","entries","entry","ListCache","MapCache","assocIndexOf","baseGet","object","isSymbol","isKey","stringToPath","toKey","baseIsNative","isObject","isFunction","isHostObject","toSource","getMapData","__data__","isKeyable","memoize","baseToString","resolver","memoized","Cache","isObjectLike","defaultValue","argsTag","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","reIsUint","typedArrayTags","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","nodeIsTypedArray","isTypedArray","arraySome","mapToArray","setToArray","nativeObjectToString","Buffer","Uint8Array","propertyIsEnumerable","symToStringTag","toStringTag","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeKeys","arg","DataView","WeakMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolValueOf","valueOf","SetCache","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","iteratee","baseTimes","isIndex","eq","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","baseIsEqual","bitmask","customizer","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","byteLength","byteOffset","buffer","convert","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","getAllKeys","objLength","othProps","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","isMasked","baseKeys","Ctor","isPrototype","arrLength","seen","arrValue","othIndex","keysFunc","symbolsFunc","arrayPush","baseGetAllKeys","getSymbols","pairs","LARGE_ARRAY_SIZE","resIndex","arrayFilter","symbol","ArrayBuffer","ctorString","isLength","baseUnary","ace_builds_1","PropTypes","React","editorOptions_1","getAceInstance","ReactAce","editorEvents","debounce","isInShadow","componentDidMount","onBeforeLoad","onValidate","wrapEnabled","refEditor","editorProps","debounceChangePeriod","navigateToFileEnd","updatePlaceholder","handleMarkers","availableOptions","editorOptions","handleOptions","componentDidUpdate","prevProps","oldProps","nextProps","appliedClassesArray_1","oldClass","valueChanged","silent","cursorStart","handleScrollMargins","margins","componentWillUnmount","currentMarkers","showPlaceholder","updateRef","render","divStyle","__assign","ref","propTypes","oneOfType","bool","enableSnippets","enableBasicAutocompletion","enableLiveAutocompletion","defaultProps","Component","split_1","DiffMatchPatch","DiffComponent","lhString","rhString","diffedLines","generateDiffedLines","setCodeMarkers","C","chunkType","linesToHighlight","codeEditorSettings","newMarkerSet","markerObj","acequire","fn","ace_1","diff_1","ext_split_1","SplitComponent","splitEditor","defaultValueForEditor","valueForEditor","newAnnotations","newMarkers","sp","nextValue","oldAnnotations","oldMarkers","value_1","value_2","value_3","arrayOf"],"sourceRoot":""}